Визуализация объема образцов ПКМ - PullRequest
1 голос
/ 27 марта 2010

У меня есть несколько фрагментов звука PCM (G.711) в моем приложении C ++. Я хотел бы визуализировать различную громкость звука в каждом из этих кусков.

Моя первая попытка состояла в том, чтобы вычислить среднее значение выборочных значений для каждого куска и использовать его в качестве индикатора громкости, но это не работает. Я получаю 0 для чанков с тишиной и разные значения для чанков со звуком, но значения отличаются лишь незначительно и, похоже, не соответствуют фактической громкости.

Что было бы лучше по алгоритму расчета объема?

Я слышал, звук G.711 является логарифмическим PCM. Как я должен это учитывать?

Ответы [ 2 ]

3 голосов
/ 27 марта 2010

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

Можно ожидать, что среднее значение большинства сэмплов будет приблизительно равно нулю, поскольку звуковые колебания колеблются по обе стороны от нуля.

Расчет объема сырой нефти будет представлять собой среднеквадратичное значение (среднеквадратичное значение), т.е. берется скользящее среднее квадрата выборок и берется квадратный корень из этого среднего. Это даст вам положительное количество, когда есть какой-то звук; величина связана с мощностью, представленной в форме волны.

Что-то лучше, связанное с человеческим восприятием объема, вы можете изучить методы, используемые в Replay Gain .

2 голосов
/ 27 марта 2010

Если вы чувствуете себя честолюбивым, вы можете загрузить G.711 с веб-сайта МСЭ и потратить следующие несколько недель (или, возможно, больше) на его внедрение.

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

После того, как вы его расшифровали, визуализация громкости должна быть целой намного проще.

...