【问题标题】:AsyncTasks and AudioAsyncTasks 和音频
【发布时间】:2012-01-30 00:37:41
【问题描述】:

我正在尝试一个接一个地播放多个音频文件,并且目前正在使用 AsyncTasks 来准备和启动 mediaPlayer,但未能找到一种在当前曲目末尾移动到下一曲目的好方法。并非每次都会播放每个音频文件,它的播放由布尔值决定。

非常感谢任何帮助。

【问题讨论】:

    标签: android audio android-asynctask


    【解决方案1】:

    我猜你已经阅读了 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 播放所有曲目的好方法
    【解决方案2】:

    怀疑使用 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

    Algorithm to mix sound

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 2017-12-31
      • 2019-10-23
      • 1970-01-01
      相关资源
      最近更新 更多