определить уровень звука в необработанных данных PCM

Я пишу небольшую программу, которая должна определить уровень звука и записать его, если уровень выше установленного в настройках, я сделал захват звука через portaudio, сжатие через libvorbis, но одна часть программы не завершена, и я застрял на нем, мне нужно обнаружить звук уровень необработанных данных PCM, я плохо понимаю, что такое данные PCM, и не знаю какого-либо алгоритма анализа / обработки аудио, есть ли у нас библиотека c / c ++, которая может это сделать? или это какой-то простой алгоритм, который может быть реализован в c / c ++ существует?

3

Решение

Посмотрите на библиотеки Speex и WebRTC … в них есть детекторы голосовой активности. Если вы ищете меру уровня звука, вам нужно выбрать индикатор линейного или логарифмического уровня. Общий формат для PCM — диапазон от -32768 до 32767 (16-битная короткая) … одна простая вещь, которую вы можете сделать, это просто суммировать абсолютные значения выборок за период и поделить на количество выборок, чтобы получить среднее значение уровень за период.

1

Другие решения

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

Данные PCM обычно представляют собой поток значений со знаком: 0x00..0xFF для 8-битной PCM, -0x8000 .. + 0x7FFF для 16-битной PCM или -1.0 .. + 1.0 для значений с плавающей запятой.

Самое простое — это определить простой пик путем поиска максимального абсолютного значения для данного периода времени. Вы можете подать заявку log10 потом перевести в децибелы.

3

По вопросам рекламы [email protected]