使用动态范围控件

一段音频内容的动态范围基本上是最低音量与最大音量之间的差异。 如果内容的动态范围过高,用户可能会发现自己在播放期间反复调整音量。 例如,电影经常具有较高的动态范围。 通常,当音量调整以便对话可以在安静的场景中理解时,具有音乐或声音效果的电影的其他部分比所需声音更响亮。

Windows媒体音频 9 Professional和Windows媒体音频 9 无损失编解码器支持称为动态范围控件的功能。 在编码时,编解码器计算内容中的峰值和平均振幅值,编写器对象在编码完成后将这些值存储在流的元数据中。 (可选)应用程序还可以将“目标”值作为元数据写入播放器应用程序和解码器在播放文件时用作提示。 在播放时,应用程序可以指定要应用于音频流的动态范围控件级别。

Windows 媒体播放器将动态范围控件作为“静默模式”功能实现。

何时使用动态范围控件

动态范围控件可以更改内容的声音。 因此,不应将应用程序配置为自动使用动态范围控制。 相反,为用户提供根据需要打开或关闭动态范围控制的功能。

使用动态区域控件

在播放时,使用输出设置g_wszDynamicRangeControl激活动态范围控件。 使用 IWMReaderAdvanced2::SetOutputSetting 配置设置。 (默认) 的值指示不应更改动态范围。 值为 1 或 2 表示编解码器执行动态范围控制,其中 1 是中等级别的动态范围压缩,2 是高级别的动态范围压缩。

在编码时或播放时,可以通过分别设置 WM/WMADRCPeakTarget 和 WM/WMADRCAverageTarget 属性,为峰值和平均值提供编解码器目标 PCM 值。 这些值存储为元数据属性,应使用 IWMHeaderInfo3 接口的方法进行访问。 使用专业或无损失编解码器对音频流进行编码时, WM/WMADRCPeakReferenceWM/WMADRCAverageReference 属性会自动设置为原始内容的峰值和平均级别。 默认情况下,目标值设置为与引用相同的值。

播放时解码器根据所选的动态范围控件级别和目标 (值计算动态范围(如果指定任何值)) 。 下表显示了可能的范围。

设置 传送的音频范围
g_wszDynamicRangeControl = 0 (任何目标值) 与原始内容的范围相同。
g_wszDynamicRangeControl = 1 (目标值等于引用值) 保持平均水平,峰值限制为平均 +12 dB。
g_wszDynamicRangeControl = 2 (目标值等于引用值) 维护平均级别,峰值限制为平均 +6 dB。
g_wszDynamicRangeControl =) 指定的目标值 1 ( 平均级别设置为目标平均值,峰值限制为目标峰值。
g_wszDynamicRangeControl = 2 (指定) 的目标值 平均级别设置为目标平均值和限制在目标平均值和目标峰值的中值。

 

请注意,动态范围控件是仅解码的一项功能,仅作为文件本身中的元数据存在。 除非专门指示解码器使用这些设置,否则这些设置不会影响存储在文件中的内容。 Windows媒体格式 SDK 不提供在编码时修改音频数据的动态范围的方法。

高级主题