2009-09-19 274 views
20

在Android設備上以最少的延遲播放同時音頻的選項是什麼?我是否會從罐裝SDK中獲得一半體面的東西,還是那個問題太多了?該文檔聲稱SoundPool類能夠以相對良好的性能同時播放多個聲音,但在模擬器和物理設備上運行一些測試後,它似乎很弱。是否有一個竅門,或者我必須去一個更低層次的API這種事情?我已經嘗試過使用一個加載了多個樣本的聲音池,並且我嘗試了多個聲音池,每個聲音池管理一個樣本。我正在預加載所有內容,因此當我嘗試播放時,除了調用SoundPool.play()之外,沒有其他代碼正在執行。適用於Android的低延遲音頻API?

回答

4

我沒有任何Android體驗,但我爲Windows Mobile編寫了類似的東西。這些設備本身當然能夠以低延遲(低於25毫秒)實時混合多種聲音,儘管「多重」我的意思是4或5(而不是30至40)。然而,我只能通過編寫我自己的代碼來完成這個令人滿意的代碼,這個代碼在內部進行了混音,並且只有在播放最終混合輸出時才訪問低級音頻播放API。在.Net精簡版框架中播放聲音的更高級的方法在理論上可以用複音,但實際上它們的工作非常糟糕(大量的小故障,口吃和失真)。

我懷疑Android音頻SDK有同樣的問題,所以你可能必須自己寫。

+0

我願意嘗試您在這裏爲低延遲音頻記錄/播放提出的建議。但我認爲我需要更多的方向而不是當前的答案。你能描述一下你爲WinPhone做了什麼嗎? – 2011-12-07 22:57:59

6

許多人對Andriod的低延遲音頻感興趣。下面是我在下面關於這個專題的主題:從今年的I/O大會上

  • 一個wave涵蓋音頻相關的主題。有關支持NDK中低延遲音頻的Android issue

post表明,Android設備有ALSA驅動程序(能夠低延遲音頻) - 但似乎低延遲功能不暴露於通過NDK應用。

我對Android沒有直接的經驗,但是從我讀過的內容來看,低延遲(小於< 10毫秒左右)並不是現實。請發佈任何相反的經驗!

6

Android 2.3現在支持對低延遲應用程序進行音頻API(通過OpenSL)的本地訪問。

但是,並非所有的硬件設備都會有低延遲的音頻功能配置文件。因此,應用程序需要低延遲音頻shouuld過濾裝置沒有被指定清單中的下列證明它在Android市場:

<uses-feature android:name="android.hardware.audio.low_latency"/> 
+0

我有一個2.2的電話和一個1Ghz的CPU,我看到一堆應用程序做了一半體面的工作。在做了一些研究之後,我確信他們正在從音頻文件中解碼PCM數據並直接寫入AudioTrack,這對於基本的音頻音序器/播放器來說足夠低的延遲 – Rich 2010-12-10 15:03:44

+0

@Rich:我已經嘗試過2.2和一個1GHz的電話和最小的緩衝區大小Audiotrack在8kHz,Mono中給我的是1400。那是175毫秒。對於我想要的功能,這是慢的。 – AudioDroid 2011-06-07 14:59:23

+7

這是一個營銷噱頭 - 讓別人認爲是「跟上蘋果。它應該被稱爲「中等延遲」。 我不認爲有太多的用例可以從50 ms的延遲中受益。這對於合適的音頻來說太慢了,對於其他任何東西都是不必要的。 – 2011-11-30 20:05:49

1

請參閱我的回答Android: sound API (deterministic, low latency)

Android設備的延遲取決於API,更多取決於特定設備的硬件和驅動程序。啓用低延遲播放會消耗更多功率並增加音頻故障的可能性,因此許多OEM廠商會故意放大播放緩衝區。