採樣率轉換

本文介紹 Android 中的取樣率轉換,也稱為重取樣。有關與取樣率轉換相關的術語,請參閱術語

取樣率轉換是將離散取樣流從一種取樣率變更為另一種不同取樣率的串流的過程。取樣率轉換器或重採樣器是實現取樣率轉換的模組。對於重採樣器來說,原始流稱為源訊號,重採樣流稱為宿訊號。

Android 中的多個地方都使用了重採樣器。例如,MP3 檔案可能以 44.1 kHz 取樣率進行編碼,但需要在內部支援 48 kHz 音訊的 Android 裝置上播放。在這種情況下,將使用重採樣器將 MP3 輸出音訊從 44.1 kHz 來源取樣率上取樣到 Android 裝置中使用的 48 kHz 接收器取樣率。

重採樣器的特徵可以使用指標來表達,包括:

  • 訊號整體幅度的保留程度
  • 訊號頻率頻寬的保留程度,受接收器取樣率的限制
  • 通過重採樣器的總體延遲
  • 相對於頻率一致的相位和群延遲
  • 計算複雜度,以 CPU 週期或功耗表示
  • 允許的來源和匯採樣率比率
  • 動態改變取樣率比率的能力
  • 支援哪些數位音訊樣本格式

理想的重採樣器將準確地保留源訊號的幅度和頻率頻寬(受接收器採樣率的限制),具有最小且一致的延遲,具有最小的計算複雜性,允許任意和動態的轉換比,並支持所有常見的數位音訊取樣格式。實際上,理想的重採樣器並不存在,因為實際的重採樣器是這些特性的折衷方案。例如,理想品質的目標與短延遲和低複雜性相衝突。

Android 包含各種音訊重採樣器,因此可以根據應用程式用例和負載做出適當的妥協。可用的重採樣器在重採樣器實作中進行了解釋。

重採樣器實現

可用的重採樣器實現經常變化,並且可以由 OEM 定制。預設重採樣器(依照訊號失真的降序和計算複雜度的升序排列)包括:

  • 線性
  • 立方體
  • sinc 與原始係數
  • 修正係數的 sinc

一般來說,sinc 重採樣器更適合更高品質的音樂播放,而其他重採樣器應保留用於品質較不重要的情況(例如「按鍵點擊」或類似情況)。

選擇的具體重採樣器實作取決於用例、負載和系統屬性af.resampler.quality的值。有關詳細信息,請參閱AudioFlinger中的音訊重採樣器原始程式碼。