2010-08-09 120 views
10

我正在尋找Android中的某種方式,以類似於Windows編程中的waveOutOpen方法系列的方式播放內存中的音頻。適用於Android的低級音頻API

waveOut...方法本質上允許應用程序創建樣本值數組(如不帶標題的內存中WAV文件),並將它們轉儲到隊列中進行順序播放。 Windows可以無縫地從一個陣列轉換到另一個陣列,只要應用程序在播放前將陣列轉儲到隊列中,程序就可以創建並播放任意長度的連續音頻。 Windows API還包含一個回調機制,應用程序可以使用該機制來指示進度並加載其他緩衝區。

據我所知,Android音頻API可讓應用程序從本地存儲或URL或內存流中播放文件。有什麼辦法可以讓Android「呼叫」MediaPlayer.start()的呼叫,讓一個玩家在完成遊戲後轉換(沒有毛刺)到下一個?看來,Jet做這樣的事情,但只有它自己的內部綜合引擎。

有沒有其他方式以waveOutOpen的方式訪問Android音頻?

回答

9
android.media.AudioTrack 

...是您可能正在尋找的類。

http://developer.android.com/reference/android/media/AudioTrack.html#AudioTrack%28int,%20int,%20int,%20int,%20int,%20int%29

創造它之後你可以用以下方法給定格式的二進制數據給它:

AudioTrack.writeTo(...) 
+0

謝謝,這看起來正是我一直在尋找。你知道這是否適用於模擬器?在Windows Mobile中,waveOutWrite方法只能在仿真器中工作(大量暫停和口吃),而在實際設備中正常工作。 – MusiGenesis 2010-08-23 16:13:28

+0

我沒有親自嘗試,但當我正在尋找從流中播放MP3內容的方法時,我發現了它。在仿真器中使用MediaPlayer可以正常工作,除非您連接了debbuger。它可能與AudioTrack類似。 – plugmind 2010-08-23 17:52:53

+0

我很確定MediaPlayer和SoundPool(今天早些時候知道這個事實,正在看它)在內部使用AudioTrack,所以我會說它肯定會運行(特別是看看它如何能夠管理運行我的本地代碼也是如此)。 – 2010-09-10 16:37:31

相關問題