【问题标题】:Processing audio file in memory with lib sox使用 lib sox 处理内存中的音频文件
【发布时间】:2018-06-25 10:44:57
【问题描述】:

我正在尝试使用 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;
}

【问题讨论】:

    标签: c++ sox libsox


    【解决方案1】:

    sox_open_memstream_write() 根据您传递的参数使用 fmemopen() 或 open_memstream()。

    某些(或所有)版本的 OSX 没有这些功能。

    Windows 也是如此。

    您可以在文件src/formats.c中找到相关代码,函数open_write(),查找#ifdef HAVE_FMEMOPEN条件。

    【讨论】:

      猜你喜欢
      • 2012-09-15
      • 2013-11-13
      • 2014-04-14
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多