2012-11-23 75 views
19

我需要播放多個音頻文件,時長不同,例如5到30秒。我想爲左/右聲道單獨設置音量,還要應用效果,如混響或失真。那麼,我應該使用哪個API?AudioTrack,SoundPool或MediaPlayer我應該使用哪一種?

另外,我無法在AudioTrack API上找到太多文檔。你知道我在哪裏可以找到例子嗎? Thx。

回答

2

MediaPlayer不支持設置多頻道的音量。

我認爲SoundPool是唯一符合您需求的東西。

編輯:是的,你需要的Soundpool,請閱讀本: http://www.wiseandroid.com/post/2010/07/13/Intro-to-the-three-Android-Audio-APIs.aspx

+0

好的,謝謝我會嘗試與soundpool。 – Fede

+0

MediaPlayer確實支持分別爲右/左聲道設置音量。這是一個很好的例子:https://www.codota.com/android/methods/android.media.MediaPlayer/setVolume 加你可以參考這裏的文檔: https://developer.android.com/參考/機器人/媒體/ MediaPlayer.html#setVolume(浮點,浮點) –

39

聲音池實際上是音頻混合器。它只能播放短片,無論它們是編碼爲ogg還是mp3還是未壓縮。聲音池總是將它們存儲在未壓縮的內存中,並且您必須知道限制爲1 MB。如果您的剪輯在內存中太大,聲音池將沉默,並且您會發現以下錯誤: 「AudioFlinger無法創建曲目。狀態:-12」 媒體播放器實時播放流並對其進行解碼。所以它可以播放更長的剪輯,但需要處理器能力。

所以媒體播放器更適合背景音樂,而聲音池更適合短時音頻效果(點擊,爆炸,聲音循環)。另外,聲音庫可以同時播放更多的剪輯,並且具有音量和速度控制功能。它也可以播放循環。

注意:如果剪輯未完全加載並解碼,則無法從聲音池中播放音樂。所以你必須使用OnLoadCompleteListener(Android 10或更高版本)來檢查它。如果在解碼之前嘗試播放聲音,則聲音池將靜音。

媒體播放器不會遇到這些問題。

4

除了其他答案的建議之外,MediaPlayer和SoundPool之間的一個區別是,在MediaPlayer中,當它已經播放時,不能播放聲音片段(該功能可能對遊戲特別有用)。 MediaPlayer需要剪輯完成才能再次播放。我認爲這些信息是在官方網站上提供的。

但是,SoundPool沒有這樣的問題,我也注意到SoundPool只是在被調用時才播放音頻(當我使用MediaPlayer時,我有時會注意到有些延遲)。

我認爲這是(部分)人們說SoundPool比較適合在遊戲中使用短音的原因。 希望這有助於:)