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-файл