採樣率轉換

本文介紹了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中的音頻重採樣器源代碼。