Processing audio file in memory with lib sox

1k Views Asked by At

I am trying to process audio file in memory with SOX C++ API and I stuck at the very beginning. The goal is to load an audio file from disk, apply few effects (tempo/gain adjustments) in memory. Here is the code I started with, but I receive a strange error when creating out stream:

formats: can't open output file `': No such file or directory

What could be an issue here? I am testing it on Mac. Here is the code:

#include <iostream>
#include <sox.h>
#include <assert.h>

int main() {
    sox_format_t * in, *out;
    sox_effect_t * e;
    sox_init();
    in = sox_open_read("/path/to/file.wav", NULL, NULL, NULL);

    sox_format_t *out_format = (sox_format_t *)malloc(sizeof(sox_format_t));
    memcpy(out_format, in, sizeof(sox_format_t));

    char * buffer;
    size_t buffer_size;

    out = sox_open_memstream_write(&buffer, &buffer_size, &in->signal, NULL, "sox", NULL);
    //chain = sox_create_effects_chain(&in->encoding, &out->encoding);

    //e = sox_create_effect(sox_find_effect("input"));
    return 0;
}
1

There are 1 best solutions below

0
On

sox_open_memstream_write() uses either fmemopen() or open_memstream() depending on the parameters you pass.

Some (or all) versions of OSX do not have these functions.

The same is true for Windows.

You can find the relevant code in file src/formats.c, function open_write(), look for the #ifdef HAVE_FMEMOPEN conditionals.