符合EBU R 128标准的响度归一化
此示例演示如何使用Audio Toolbox™中的工具来测量响度、响度范围和真实峰值。它还展示了如何规范化音频以满足EBU R 128标准的合规性。
简介
体积归一化传统上是通过观察峰值信号测量来进行的。然而,这种方法有一个缺点,即过度压缩的音频可能会超过一个信号级阈值,但仍然非常响亮。结果是响度战争在那里,唱片的声音往往比以前更大,不同类型的唱片也不一致。
现代解决响度战争的方法是测量响度感知结合true-peak水平测量。已经制定了ITU BS.1770-4、EBU R 128和ATSC A/85等国际标准,以标准化基于音频信号功率的响度测量。许多国家已经通过了符合广播音量标准的立法。
在这个例子中,您测量离线(基于文件的)和实时(流媒体的)音频信号的响度和补充参数。您还可以看到规范化音频以符合目标级别的方法。
EBU R 128标准
音频工具箱使您能够根据EBU R 128标准测量响度和相关参数。本标准定义了以下响度测量方法:
短暂的响度:使用长度为400ms的滑动窗口。
短期响度:使用长度为3s的滑动窗口。
集成响度:从开始到结束的响度总和。
响度范围:量化响度在宏观时间尺度上的变化。
True-peak价值:插值信号的峰值采样电平。
有关这些参数的更详细说明,请参阅EBU R 128标准的文档。
离线响度测量与归一化
对于已经有录制的音频样本的情况,可以使用integratedLoudness
函数测量响度。它返回完整音频文件的综合响度(以LUFS为单位)和响度范围(以LU为单位)。
[x, fs] = audioread(“rockguitar - 16 - 44 - p1 -立体声- 72 secs.wav”);[loudness, LRA] = integratedLoudness(x,fs);流(归一化前的响度:%。1 f LUFS \ n '响度)
归一化前响度:-8.2 LUFS
EBU R 128将目标响度定义为-23 LUFS。音频文件的响度明显高于这个级别。一个简单的电平降低操作可以用来正常化响度。
目标= -23;gaindB =目标-响度;增益= 10^(gaindB/20);Xn = x.*增益;audiowrite (“RockGuitar_normalized.wav”、xn fs)
新建音频文件的响度为目标级别。
[x, fs] = audioread(“RockGuitar_normalized.wav”);响度=积分响度(x,fs);流(归一化后的响度:%。1 f LUFS \ n '响度)
归一化后的响度:-23.0 LUFS
现场响度测量与规范化
对于流音频,EBU R 128定义了瞬时和短期响度。您可以使用loudnessMeter
系统用于测量实时音频信号的瞬时响度、短期响度、综合响度、响度范围和真实峰值。
首先,流音频信号到您的声卡和测量它的响度使用loudnessMeter
.的可视化
的方法loudnessMeter
打开一个用户界面(UI),在模拟过程中显示所有与响度相关的测量结果。
Reader = dsp。AudioFileReader (“rockguitar - 16 - 44 - p1 -立体声- 72 secs.wav”,...“SamplesPerFrame”, 1024);fs = reader.SampleRate;inputLoudness = loudnessMeter(“SampleRate”fs);播放器= audioDeviceWriter(“SampleRate”fs);runningMax = dsp。MovingMaximum (“SpecifyWindowLength”、假);可视化(inputLoudness)而~isDone(reader) audioIn = reader();[loudness,~,~,~,tp] = inputLoudness(audioIn);maxTP = run (tp);球员(audioIn);结束
流('归一化前的最大真实峰值:%。1 f dBTP \ n 'maxTP(结束)
归一化前的最大真峰值:-0.3 dBTP
发布(读者)发布(球员)
正如您在UI上看到的,音频流的响度明显高于-23 LUFS阈值。它的最大真峰值为-0.3 dBTP,也高于EBU R 128规定的-1 dBTP阈值。规范化一个实时音频流的响度比规范化一个文件的响度更棘手。一种帮助使响度值接近目标阈值的方法是使用自动增益控制器(AGC)。在下面的代码中,使用audioexample。自动增益控制对象将音频信号的功率归一化到-23 dB。AGC通过查看之前的400毫秒来估计音频信号的功率,这是用于计算瞬间响度的窗口大小。本例中使用了两个响度计——一个用于AGC的输入,一个用于AGC的输出。两个响度计的ui可能在您屏幕上的同一位置启动,因此您必须将其中一个移到一边来比较AGC前后测量的响度。
outputLoudness = loudnessMeter(“SampleRate”fs);gainController = audioexample。自动增益控制(“DesiredOutputPower”, -23,...“AveragingLength”, 0.4 * fs,“MaxPowerGain”, 20);重置(inputLoudness)重复使用之前的相同响度计。reset(runningMax)可视化(输入音量)可视化(输出音量)而~isDone(reader) audioIn = reader();loudnessBeforeNorm = inputLoudness(audioIn);[audioOut, gain] = gainController(audioIn);[loudnessAfterNorm,~,~,~,tp] = outputLoudness(audioOut);maxTP = run (tp);球员(audioOut);结束
流('归一化后的最大真实峰值:%。1 f dBTP \ n 'maxTP(结束)
归一化后的最大真峰值:8.3 dBTP
发布(读者)发布(球员)
使用AGC不仅使音频的响度接近-23 LUFS的目标,而且它也得到了最大真实峰值低于允许的-1 dBTP。在某些情况下,最大真实峰值保持在-1 dBTP以上,尽管响度在-23 LUFS或以下。对于这样的场景,您可以将音频通过限幅器
.