Где я могу научиться работать с аудиоформатами? - PullRequest
0 голосов
/ 01 апреля 2009

Я работаю над проектом openGL, который включает в себя говорящее мультипликационное лицо. Я надеюсь воспроизвести речь (закодированную в формате mp3) и оживить ее рот, используя аудиоданные. Я никогда раньше не работал со звуком, поэтому не знаю, с чего начать, но некоторые поиски привели меня к мысли, что моим первым шагом будет преобразование mp3 в pcm.

Я действительно не ожидаю необходимости каких-либо преобразований Фурье, хотя это может быть хорошо. Рот действительно просто должен двигаться, когда есть звук (я думал о том, чтобы основать его на громкости).

Будем весьма благодарны за любые советы по реализации чего-либо подобного или указатели на ресурсы. Спасибо!

-S

1 Ответ

2 голосов
/ 01 апреля 2009

Что бы вы ни делали, вам сначала нужно будет декодировать MP3 в данные PCM. Есть ряд сторонних библиотек, которые могут сделать это для вас. Затем вам нужно проанализировать данные PCM и выполнить некоторую обработку сигналов на них.

Автоматическая генерация реалистичных данных синхронизации по губам из аудио - очень сложная проблема, и вы не должны пытаться ее решить. Мне нравится ваша идея просто основывать его на объеме. Один из способов вычисления текущей громкости состоит в том, чтобы использовать скользящее окно некоторого размера (например, 1/16 секунды) и вычислить среднюю мощность в звуковой волне по этому окну. То есть в кадре T вы вычисляете среднюю мощность по кадрам [T-N, T], где N - количество кадров в вашем окне.

Благодаря теореме Парсеваля мы можем легко вычислить мощность в волне без необходимости принимать преобразование Фурье или что-либо более сложное - средняя мощность - это просто сумма квадратов значений PCM в окно, разделенное на количество кадров в окне. Затем вы можете преобразовать мощность в децибел рейтинг, разделив ее на некоторую базовую мощность (для простоты это может быть 1), взяв логарифм и умножив на 10.

...