При цифровой обработке звука вы обычно ссылаетесь на мгновенную пиковую амплитуду сигнала (это также называется PPM - пиковое измерение программы ).В зависимости от того, насколько точным вы хотите быть, или если вы хотите смоделировать какой-либо стандартизированный замер или нет, вы можете либо
- просто использовать скользящее окно выборочных кадров (найти максимальное абсолютное значение для окна)
- реализует своего рода механизм удержания пиков, который сохраняет последнее пиковое значение в течение заданной продолжительности и затем начинает принимать значение «спада» на заданное количество децибел в секунду.
Другим режимом измерения является среднеквадратическое значение, которое рассчитывается путем интегрирования по определенному временному окну (добавьте квадратные значения выборки, разделите на длину окна и возьмите квадратный корень, то есть среднеквадратичное среднеквадратичное значение).Это дает лучшее представление об «энергии» сигнала, которая движется более плавно, чем пиковые измерения, но не захватывает наблюдаемые максимальные значения.Этот режим иногда также называется VU meter .Вы можете аппроксимировать это с помощью своего рода запаздывающего (низкочастотного) фильтра, например, y[i] = y[i-1]*a + |x[i]|*(a-1)
, для некоторого значения 0 < a < 1
Вы обычно отображаете значения логарифмически, то есть в децибелах , как этолучше соответствует нашему восприятию уровня сигнала, а также для большинства сигналов обеспечивает более регулярное покрытие пространства на экране.
Три проекта, в которых я участвую, могут помочь вам:
- ScalaAudioFile , который можно использовать для считывания примеров кадров из файла AIFF или WAVE
- ScalaAudioWidgets , который является еще молодым и неполным проектом для предоставления некоторых виджетов аудиоприложений сверхуscala-swing, включая представление PPM - просто используйте скользящее окно и установите текущее пиковое значение окна (и, при необходимости, среднеквадратическое значение) с регулярным интервалом, и представление позаботится о времени удержания пика и падения
- ( ScalaCollider , клиент для системы синтеза звука SuperCollider, которую вы можете использовать для воспроизведения звукового файла иизмерять пиковые и среднеквадратичные амплитуды в реальном времени.Последнее, вероятно, является излишним для вашего проекта и может повлечь за собой серьезное обучение, если вы никогда не слышали о SuperCollider.Преимущество заключается в том, что вам не нужно беспокоиться о синхронизации воспроизведения звука с дисплеем индикатора)