libsox сплит многоканальный WAV для моно каналов

Я хочу разбить многоканальный (2,8 или 16) WAV-файл на его каналы и сохранить каждый канал в другой WAV-файл.

До сих пор я выполнил работу по запуску libsox в моем проекте C++, target C++.

Libsox не очень хорошо документирован, и есть много примеров того, как это сделать:(

Я начал с первого открытия входного файла

sox_format_t * in, * out;
assert(sox_init() == SOX_SUCCESS);
assert(in = sox_open_read((const char*)filename.c_str(),NULL,NULL,NULL));

Теперь я должен найти способ получить количество каналов этого файла. Затем я должен создать такое же количество внешних файлов и сохранить каждый канал внутри себя.

Как сделать?

Спасибо!

1 ответ

Решение

Я думаю, что я сделаю это по старинке.

  • Определите количество каналов файла.
  • Определите длину блока данных.

    Length of Data block / channelCount = Size of each channelBlock
    
  • Каналы сохраняются таким же образом в блоке данных WavFile (для 4-канального WavFile) CH1/Ch2/Ch3/Ch4 CH1/Ch2/Ch3/Ch4.

  • Я бегу через блок данных, извлекаю каналы и помещаю их в моно-wav-файл
Другие вопросы по тегам