Правильный способ объединить несколько эффектов с помощью libSox и прочитать выходные данные.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Правильный способ объединить несколько эффектов с помощью libSox и прочитать выходные данные.

Сообщение Anonymous »

Я пытаюсь программно применить несколько эффектов с помощью libSox и в настоящее время не могу понять, правильно ли я это делаю. Например, мне нужно применить эффекты темпа и усиления и прочитать полученный звук в буфере для дальнейшей обработки. Документации действительно мало, и погуглить не получилось.
Вот мой код:

Код: Выделить всё

sox_format_t* input = sox_open_read("", NULL, NULL, NULL);
//sox_format_t* out;

sox_format_t* output = sox_open_memstream_write(&buffer, &buffer_size,
&input->signal, &input->encoding, "raw", NULL);
//assert(output = sox_open_write("/home/egor/hello_processed.wav", &input->signal, NULL, NULL, NULL, NULL));
sox_effects_chain_t* chain = sox_create_effects_chain(&input->encoding, &output->encoding);

char* sox_args[10];
//input effect

sox_effect_t* e = sox_create_effect(sox_find_effect("input"));
sox_args[0] = (char*)input;
assert(sox_effect_options(e, 1, sox_args) == SOX_SUCCESS);
assert(sox_add_effect(chain, e, &input->signal, &input->signal) ==
SOX_SUCCESS);
free(e);

e = sox_create_effect(sox_find_effect("tempo"));
std::string tempo_str = "1.01";
sox_args[0] = (char*)tempo_str.c_str();
assert(sox_effect_options(e, 1, sox_args) == SOX_SUCCESS);
assert(sox_add_effect(chain, e, &input->signal,&input->signal) ==
SOX_SUCCESS);
free(e);

e = sox_create_effect(sox_find_effect("output"));
sox_args[0] = (char*)output;
assert(sox_effect_options(e, 1, sox_args) == SOX_SUCCESS);
assert(sox_add_effect(chain, e, &input->signal, &input->signal) ==
SOX_SUCCESS);
free(e);
sox_flow_effects(chain, NULL, NULL);

static const size_t maxSamples=4096;
sox_sample_t samples[maxSamples];

std::vector audio_buffer;
for (size_t r; 0 != (r=sox_read(output,samples,maxSamples));)
for(int i=0;i

Подробнее здесь: [url]https://stackoverflow.com/questions/51908577/proper-way-to-chain-several-effects-with-libsox-and-read-the-output-data[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»