Микшировать аудиофайлы с SoX просто из командной строки с помощью «sox -m ...", но я пытаюсь найти то же самое с библиотекой C и нигде не могу найти, как это сделать. Это вообще возможно?
Как микшировать аудиофайлы с помощью библиотеки SoX C
Ответы (1)
Что ж, это возможно, но библиотека вам в этом не поможет.
Просматривая код sox.c
, вы можете заметить, что фактический код микширования находится в функции static
:
for (ws = 0; ws < olen; ++ws) { /* wide samples */
if (combine_method == sox_mix || combine_method == sox_mix_power) {
for (s = 0; s < effp->in_signal.channels; ++s, ++p) { /* sum samples */
*p = 0;
for (i = 0; i < input_count; ++i)
if (ws < z->ilen[i] && s < files[i]->ft->signal.channels) {
/* Cast to double prevents integer overflow */
double sample = *p + (double)z->ibuf[i][ws * files[i]->ft->signal.channels + s];
*p = SOX_ROUND_CLIP_COUNT(sample, mixing_clips);
}
}
/* [...] */
Итак, если вы действительно хотите использовать sox, вы можете использовать его для ввода/вывода файлов, но микширование вам нужно будет сделать самостоятельно.
person
Michał Górny
schedule
24.08.2012
И под «сделай сам» вы имеете в виду попробовать реализовать эти функции в моем собственном коде C? Звучит смешно!
- person Johnzo; 24.08.2012
Или найдите другую библиотеку для микширования. Но я думаю, что это должно быть достаточно просто, чтобы сделать это вручную, если только вы не ищете более изысканные методы.
- person Michał Górny; 24.08.2012
Хорошо, я не очень опытный программист, но я посмотрю, как я пойду. Спасибо за вашу помощь!
- person Johnzo; 24.08.2012
Если я что-то не упустил, используемый здесь алгоритм довольно прост: для каждой выборки
i
, output[i] = mean(input1[i], input2[i], …)
(в псевдокоде). Однако я не специалист по звуку, поэтому могут быть методы получше.
- person Michał Górny; 24.08.2012
sox
, почему вы встраиваете ее в C? - person Michał Górny   schedule 24.08.2012