【发布时间】:2012-01-30 00:37:41
【问题描述】:
我正在尝试一个接一个地播放多个音频文件,并且目前正在使用 AsyncTasks 来准备和启动 mediaPlayer,但未能找到一种在当前曲目末尾移动到下一曲目的好方法。并非每次都会播放每个音频文件,它的播放由布尔值决定。
非常感谢任何帮助。
【问题讨论】:
标签: android audio android-asynctask
我正在尝试一个接一个地播放多个音频文件,并且目前正在使用 AsyncTasks 来准备和启动 mediaPlayer,但未能找到一种在当前曲目末尾移动到下一曲目的好方法。并非每次都会播放每个音频文件,它的播放由布尔值决定。
非常感谢任何帮助。
【问题讨论】:
标签: android audio android-asynctask
我猜你已经阅读了 android-sdk/docs/reference/android/media/MediaPlayer.html ,上面写着:
当播放到达流的末尾时,播放完成。 如果使用 setLooping(boolean) 将循环模式设置为 true,则 MediaPlayer 对象应保持在 Started 状态。如果循环 mode 设置为 false ,播放器引擎调用用户提供的 回调方法,OnCompletion.onCompletion(),如果 OnCompletionListener 通过预先注册 setOnCompletionListener(OnCompletionListener)。的调用 回调表示对象现在处于 PlaybackCompleted 状态。在 PlaybackCompleted 状态下,调用 start() 可以 从音频/视频源的开头重新开始播放。
所以你可以设置一个新的源,prepareAsync 然后在完成回调中开始。这样,您可以连续播放,但不是无缝的。
【讨论】:
怀疑使用 MediaPlayer 是否会像您希望的那样工作。试试这个教程:
http://www.droidnova.com/creating-sound-effects-in-android-part-1,570.html
如果这不起作用,您可能必须自己将声音混合在一起,然后使用 AudioTrack 将结果直接传输到硬件。这是更低级别的,但它会给你最大的控制权。 AudioManager 解决方案是否适合您,这仅取决于您在做什么。这绝对是更简单的路线。但是,如果您尝试排列两个样本,以便在一个完成时下一个开始,例如在音乐应用中,您可能必须自己混合和流式传输该音频。
http://developer.android.com/reference/android/media/AudioTrack.html
【讨论】: