2014-02-19 28 views
7

我正在构建一个应用程序,该应用程序使用两个媒体播放器同时播放两个音频文件。这在我的三星Galaxy S3设备上工作正常,但是当我在Nexus 5上运行它时,音频变得零碎/不可听。多个MediaPlayers无法在Nexus 5上工作

我想知道阉使用两个媒体播放器同时可以在Nexus 5的,如果没有我怎么可以打两个音频文件在同一时间?

回答

4

SoundPool类特异性地与多路复用多个音频文件一起设计,使得它们可以被一起玩。

SoundPool soundPool = new SoundPool(2, // number of streams 
            AudioManager.STREAM_MUSIC, // stream type 
            0); // source quality, does nothing 
soundPool.setOnLoadCompleteListener(loadCompleteListener); 
int soundOneId = soundPool.load(context, R.raw.sound1, 1); 
int soundTwoId = soundPool.load(context, R.raw.sound2, 1); 
// Once loadCompleteListener.onLoadComplete has been called for both sounds 
soundPool.play(soundOneId); 
soundPool.play(soundTwoId); 
+1

即时通讯工作与较大的audiofiles(如整首歌曲或有声读物)。我测试你发布的代码和soundPoolOnLoadCompleteListener永远不会调用onLoadComplete –

+0

你正在同时播放两个更长的文件?或者只是一个更长的文件和一个短的声音? – ianhanniballake

+0

两个长文件并发。再次测试,onLoadComplete在长时间等待后被调用。现在他们很好地一起比赛,但是他们两人在几秒钟后就被切断了;问题是我需要加载快速发生,我需要整个事情发挥 –

2

教程here提供了一个完整的例子,说明如何使用AudioTrack来同时播放多个音频。

注意事项使用AudioTrack如果相同的编解码器没有多个实例支持的Nexus 5和相同限制其他设备仍然失败,那么您的应用程序可能无法在所有的设备上工作回放。

+0

它确实有效,但是我猜测,对于几秒钟的wav文件,你可以使用一个使用较长wav文件的样本并且工作正常吗?目前它似乎以0.1倍的速度播放声音流,声音很慢。 – Shubhank

+0

我认为这意味着AudioTrack不适用于N5。在这种情况下,使用OpenSL ES(Android 4.1+)进行本地化或者使用原始PCM数据进行自己的混音可能是一种方法。混合原始的PCM:http://stackoverflow.com/questions/16766248/mix-audio-in-android,与OpenSL ES混合:[用OpenSL ES的Android的简单流音频混音器 - 第1部分](http:// sbcgamesdev。 blogspot.tw/2013/01/simple-streaming-audio-mixer-for.html),[第2部分](http://sbcgamesdev.blogspot.tw/2013/02/simple-streaming-audio-mixer-for。 HTML) – Kai

相关问题