2010-08-09 128 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