在不中断媒体播放器的情况下在后台播放音频

时间:2016-03-05 19:12:56

标签: android android-mediaplayer opensl

如何使用MediaPlayer(首选)或 OpenSL ES 在Android中播放背景音频,而不会中断SoundPool播放?

我知道MediaPlayer能够在不中断任何AudioManager播放的情况下播放音效,但每个效果的大小限制为1M,这可以减少。不通过SoundPool请求音频焦点似乎也不起作用,在这种情况下音频根本不播放。

OpenSL ES 的情况下,当我开始播放更长的资产文件时,所有音频通常会停止。它类似于上面描述的{{1}}的行为。

从评论中进行编辑:

  

我不想打断其他音乐播放器,这是背景   一个游戏的音频,它应该在不打断的情况下播放   例如,玩家的音乐。像地铁冲浪,冲突皇家和   这似乎以某种方式实现了这一点,但我无法实现   通过OpenSL ES或MediaPlayer。

1 个答案:

答案 0 :(得分:1)

为了在后台播放声音,您可以使用SoundPool,AudioTracks和OpenSlES。

Soundpool:使用小文件并制作序列。在我的上一个项目中,我在不同的场景中使用148个声音文件(全部小)并使用soundpool播放。制作一个列表并逐个或并行播放。同样在游戏中,通常你会为特定场景设置一小组声音,然后循环播放。最好的是soundpool。您还可以执行速率更改等一些效果。 ogg文件也很小,所以要使用它们。

AudioTrack:您可以在音轨中使用RAW PCM数据。如果您愿意,您可以使用几乎所有格式的MediaExtractor提取pcm数据并使用它。但是在你的情况下它会对你有所帮助,但它确实很好(支持大量数据,甚至是直播)。

OpenSLES:显然,android在后台使用opensles用于其所有目的。所以使用它会对你有很大帮助。但要完成所有事情并不容易。你需要学习更多的工作。

我已经在OpenSlES上工作了大约20天,我仍然会说小型目的使用soundpool,中级到高级实现使用AudioTracks,而kickass实现使用OpenSLES。

PS:如果您在播放音乐或通话时在后台播放游戏声音,将对您的用户造成不良影响。个人经历。