Рендеринг некоторых звуковых данных в одну новую звуковую информацию? - PullRequest
0 голосов
/ 09 мая 2011

Я создаю приложение, которое будет читать уникальный формат, который содержит звуковой «банк» и смещения, когда звук должен воспроизводиться.

Представь что-то вроде ..

Банк звуков: (ID слева и имя файла справа)

0 kick.wav
1 hit.wav
2 flute.wav

И смещения: (Время в мс на левой стороне и ID звука на правой стороне)

1000 0
2000 1
3000 2

И приложение сгенерирует новый звуковой файл (например, wav для последующего преобразования в другие форматы), который воспроизводит удар в первую секунду, удар в секунду и флейту в третью секунду.

Я совершенно не знаю, с чего начать.

Я обычно использую FMOD для воспроизведения звука, но никогда раньше такого не делал.

Я использую C ++ и wxWidgets в среде MSVC ++ Express Edition, и библиотеки LGPL подойдут.

1 Ответ

1 голос
/ 09 мая 2011

Если я правильно понимаю, вы хотите сгенерировать новый волновой файл путем микширования wavs из звукового банка. Для этого вам может вообще не понадобиться звуковой API, особенно если все ваши входные wav-файлы имеют одинаковый формат.

Просто загрузите каждый файл WAV в буфер. Для SampleRate*secondsUntilStartTime выборок для каждого буфера в ActiveList добавьте buffer[bufferIdx++] в выходной буфер. Если bufferIdx == bufferLen, удалите этот буфер из ActiveList. В StartTime добавьте следующий буфер ActiveList и повторите.

Если FMOD поддерживает вывод в файл вместо звукового оборудования, вы можете сделать то же самое с потоковым API. Просто отслеживайте истекшие сэмплы в StreamCallback и начинайте смешивать новые файлы всякий раз, когда вы достигаете их начальных смещений.

...