我正在尝试使用SOX C ++ API处理内存中的音频文件,但我一开始就坚持。目的是从磁盘加载音频文件,并在内存中应用很少的效果(速度/增益调整)。这是我开始的代码,但是在创建流时会收到一个奇怪的错误:
formats: can't open output file `': No such file or directory
这里可能是个问题?我正在Mac上进行测试。这是代码:
#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;
}
答案 0 :(得分:0)
sox_open_memstream_write()使用fmemopen()或open_memstream()取决于您传递的参数。
某些(或全部)OSX版本没有这些功能。
Windows也是如此。
您可以在文件src / formats.c中找到相关的代码,功能为open_write(),查找#ifdef HAVE_FMEMOPEN条件。