本文將說明 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 中的音訊重新取樣器原始碼。