Обработка аудио файла в памяти с помощью lib sox - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь обработать аудиофайл в памяти с помощью 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;
}

1 Ответ

0 голосов
/ 26 февраля 2019

sox_open_memstream_write () использует либо fmemopen (), либо open_memstream () в зависимости от передаваемых параметров.

Некоторые (или все) версии OSX не имеют этих функций.

То же самое относится и к Windows.

Вы можете найти соответствующий код в файле src / format.c, функция open_write (), найти условные выражения #ifdef HAVE_FMEMOPEN.

...