Получение аудиоинформации из данных PCM - PullRequest
3 голосов
/ 04 апреля 2011

Мне никогда не удавалось понять, как хранятся аудиоданные.Тем не менее, я хотел бы знать, как найти поле данных PCM.Скажем, например, что я записал одну нажатую клавишу на пианино в 16-битном моно формате PCM с заданной частотой дискретизации.Как я могу найти частоту звука в герцах?Простой код для получения средней частоты работает для меня, но более подробное объяснение того, как лучше понять формат, было бы идеальным.

Спасибо!

1 Ответ

5 голосов
/ 04 апреля 2011

PCM-аудио не сохраняется как ряд тонов.Чтобы понять это, вам нужно быстрое преобразование Фурье, или БПФ.См. https://stackoverflow.com/search?q=pitch+detection, уже есть 10 сообщений об этом.

Подумайте о звуковой форме волны.PCM-кодирование - это просто выборка, генерирующая определенное количество раз в секунду, с использованием определенного количества битов на выборку.

Waveform

Изображение из http://en.wikipedia.org/wiki/Pulse-code_modulation

16-битный Mono PCM на частоте 44,1 кГц означает, что 44 100 раз в секунду будет сохраняться 16-битное значение (2 байта), которое представляет сигнал в конкретный момент времени, когда была взята выборка.44,1 кГц достаточно быстры, чтобы хранить частоты, которые приближаются к 22 кГц (см. Частота Найквиста ).

БПФ превращает эти выборки из временной области в частотную область.То есть вы можете найти уровни всех частот для определенного периода времени.Чем больше полос вы смотрите, тем интенсивнее вычисления.

...