exponenta event banner

Нормализация громкости в соответствии со стандартом EBU R 128

В этом примере показано, как использовать инструменты Audio Toolbox™ для измерения громкости, диапазона громкости и значения true-peak. В нем также показано, как нормализовать звук в соответствии со стандартом EBU R 128.

Введение

Нормализация громкости традиционно выполнялась путем просмотра измерений пикового сигнала. Однако этот способ имел тот недостаток, что чрезмерно сжатый звук может проходить порог уровня сигнала, но все же быть очень громким для прослушивания. Результатом стала громкая война, где записи имели тенденцию быть громче, чем раньше, и непоследовательны по жанрам.

Современное решение войны громкости заключается в измерении воспринимаемой громкости в сочетании с измерением уровня истинного пика. Для стандартизации измерений громкости на основе мощности звукового сигнала разработаны международные стандарты, такие как ITU BS.1770-4, EBU R 128 и ATSC A/85. Многие страны уже приняли законы о соблюдении стандартов вещания на громком уровне.

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

Стандарт EBU R 128

Audio Toolbox позволяет измерять громкость и связанные параметры в соответствии со стандартом EBU R 128. Данный стандарт определяет следующие показатели громкости:

  • Кратковременная громкость: используется скользящее окно длиной 400 мс.

  • Кратковременная громкость: использует скользящее окно длиной 3 с.

  • Интегрированная громкость: Совокупная громкость от начала до конца.

  • Диапазон громкости: количественная оценка изменения громкости на макроскопической шкале времени.

  • Значение истинного пика: пиковый уровень выборки интерполированного сигнала.

Для получения более подробного описания этих параметров см. документацию по стандарту EBU R 128.

Измерение и нормализация громкости в автономном режиме

Для случаев, когда у вас уже есть записанные аудиосъемки, вы можете использовать integratedLoudness функция измерения громкости. Он возвращает интегрированную громкость в единицах LUFS и диапазон громкости в единицах LU полного аудиофайла.

[x, fs] = audioread('RockGuitar-16-44p1-stereo-72secs.wav');
[loudness, LRA] = integratedLoudness(x,fs);
fprintf('Loudness before normalization: %.1f LUFS\n',loudness)
Loudness before normalization: -8.2 LUFS

EBU R 128 определяет целевой уровень громкости равным -23 LUFS. Громкость аудиофайла явно выше этого уровня. Для нормализации громкости можно использовать простую операцию снижения уровня.

target = -23;
gaindB = target - loudness;
gain = 10^(gaindB/20);
xn = x.*gain;
audiowrite('RockGuitar_normalized.wav',xn,fs)

Громкость нового аудиофайла находится на целевом уровне.

[x, fs] = audioread('RockGuitar_normalized.wav');
loudness = integratedLoudness(x,fs);
fprintf('Loudness after normalization: %.1f LUFS\n',loudness)
Loudness after normalization: -23.0 LUFS

Измерение и нормализация громкости в реальном времени

Для потокового звука EBU R 128 определяет сиюминутную и кратковременную громкость. Вы можете использовать loudnessMeter Системный объект для измерения сиюминутной громкости, кратковременной громкости, интегрированной громкости, диапазона громкости и истинно пикового значения живого звукового сигнала.

Во-первых, потоковая передача звукового сигнала на звуковую карту и измерение ее громкости с помощью loudnessMeter. visualize способ loudnessMeter открывает пользовательский интерфейс, который отображает все измерения, связанные с громкостью, по мере выполнения моделирования.

reader = dsp.AudioFileReader('RockGuitar-16-44p1-stereo-72secs.wav', ...
    'SamplesPerFrame',1024); 
fs = reader.SampleRate;
inputLoudness = loudnessMeter('SampleRate',fs);
player = audioDeviceWriter('SampleRate',fs);
runningMax = dsp.MovingMaximum('SpecifyWindowLength',false);
visualize(inputLoudness)
while ~isDone(reader)
    audioIn = reader();
    [loudness,~,~,~,tp] = inputLoudness(audioIn);
    maxTP = runningMax(tp);
    player(audioIn);
end

Figure Loudness Meter contains objects of type uicontrol, uipanel.

fprintf('Max true-peak value before normalization: %.1f dBTP\n',maxTP(end))
Max true-peak value before normalization: -0.3 dBTP
release(reader)
release(player)

Как видно на UI, громкость аудиопотока явно выше порога -23 LUFS. Максимальный уровень истинного пика -0,3 дБТП также превышает пороговое значение -1 дБТП, заданное блоком EBU R 128. Нормализация громкости прямого аудиопотока сложнее, чем нормализация громкости файла. Один из способов помочь получить значение громкости близко к целевому порогу - использовать автоматический контроллер усиления (АРУ). В следующем коде используется аудиопример. Система AGC стремится нормализовать мощность звукового сигнала до -23 дБ. АРУ оценивает мощность звукового сигнала, рассматривая предыдущие 400 мс, которые представляют собой размер окна, используемый для вычисления сиюминутной громкости. В этом примере используются два измерителя громкости - один для входа в АРУ и один для выхода из АРУ. ПИ для двух измерителей громкости могут запускаться в одном и том же месте на экране, поэтому вам придется переместить один в сторону, чтобы сравнить измеренную громкость до и после АРУ.

outputLoudness = loudnessMeter('SampleRate',fs);
gainController = audioexample.AGC('DesiredOutputPower',-23, ...
    'AveragingLength',0.4*fs,'MaxPowerGain',20);
reset(inputLoudness) % Reuse the same loudness meter from before
reset(runningMax)     
visualize(inputLoudness)
visualize(outputLoudness)
while ~isDone(reader)
    audioIn = reader();
    loudnessBeforeNorm = inputLoudness(audioIn);
    [audioOut, gain] = gainController(audioIn);
    [loudnessAfterNorm,~,~,~,tp] = outputLoudness(audioOut);
    maxTP = runningMax(tp);
    player(audioOut);
end

Figure Loudness Meter contains objects of type uicontrol, uipanel.

Figure Loudness Meter contains objects of type uicontrol, uipanel.

fprintf('Max true-peak value after normalization: %.1f dBTP\n',maxTP(end))
Max true-peak value after normalization: 8.3 dBTP
release(reader)
release(player)

Использование AGC не только приблизило громкость звука к цели -23 LUFS, но и получило максимальное значение true-peak ниже допустимого -1 dBTP. В некоторых случаях максимальное значение истинного пика остается выше -1 дБТП, хотя громкость находится на уровне -23 LUFS или ниже. Для таких сценариев можно передать звук через limiter.