共用方式為


使用動態範圍控制

[與此頁面相關聯的功能 Windows Media Format 11 SDK是舊版功能。 來源讀取器資料寫入器已取代它。 來源讀取器接收寫入器 已針對 Windows 10 和 Windows 11 優化。 Microsoft強烈建議新程式代碼盡可能使用 來源讀取器接收寫入器,而不是 Windows Media Format 11 SDK。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]

音訊內容片段的動態範圍基本上是最低音量與最大音量之間的差異。 如果內容的動態範圍太高,使用者可能會發現自己會在播放期間重複調整音量。 例如,電影經常有高動態範圍。 通常,當音量調整,以便在安靜的場景中了解對話時,具有音樂或音效的電影的其他部分會比預期更響亮。

Windows Media Audio 9 Professional 和 Windows Media Audio 9 無損失編解碼器支援稱為動態範圍控件的功能。 在編碼時,編解碼器會計算內容中的尖峰和平均幅度值,而寫入器物件會在編碼完成時,將這些值儲存在數據流的元數據中。 或者,應用程式也可以將「目標」值寫入為播放程式應用程式和譯碼機在播放檔案時可作為提示的元數據。 在播放時,應用程式可以指定要套用至音訊數據流的動態範圍控件層級。

Windows Media Player 提供動態範圍控制作為安靜模式功能。

使用動態範圍控件的時機

動態範圍控制項可以改變內容的聲音。 因此,您不應該將應用程式設定為自動使用動態範圍控制項。 相反地,為使用者提供視需要開啟或關閉動態範圍控件的能力。

使用動態範圍控制

在播放時,動態範圍控件會使用輸出設定g_wszDynamicRangeControl啟動。 使用 IWMReaderAdvanced2::SetOutputSetting 來設定設定。 值為零(預設值)表示不應改變動態範圍。 值為 1 或 2 會發出編解碼器執行動態範圍控件的訊號,其中 1 是中等程度的動態範圍壓縮,而 2 是高階的動態範圍壓縮。

在編碼時間或播放時間,您可以分別設定 WM/WMADRCPeakTargetWM/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 不提供在編碼時間修改音訊數據的動態範圍的方法。

進階主題