You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter audioplayers如何依次播放音频列表(前一个结束后播放下一个)

解决audioplayers依次播放音频的问题

你的代码之所以会同时播放所有音频,是因为循环里直接连续调用_play,没有等待每个音频播放完成,而且每次调用都销毁重建AudioPlayer,导致多个实例同时工作。要实现依次播放,只需要复用同一个播放器实例,并等待当前音频播放完成后再启动下一个。

修改后的代码示例:

AudioPlayer _player = AudioPlayer(); // 复用同一个播放器实例

// 播放单个音频,返回Future直到播放完成
Future<void> _play(int number) async {
  // 先停止当前可能正在播放的音频
  await _player.stop();
  print("trying to play number $number");
  // 开始播放音频
  await _player.play(AssetSource('audio/$number.wav'));
  // 等待播放完成事件触发
  await _player.onPlayerComplete.first;
}

// 依次播放列表中的音频
void _playList(List<int> list) async {
  for (int audioNum in list) {
    await _play(audioNum); // 等待当前音频播放完毕再执行下一次循环
  }
  // 所有音频播放完成后,可选择销毁播放器(如果后续不再使用)
  // await _player.dispose();
}

关键改动说明:

  • 复用播放器实例:不再每次销毁重建AudioPlayer,避免多实例同时播放。
  • 等待播放完成:通过await _player.onPlayerComplete.first监听当前音频的播放完成事件,确保只有当前音频播放完才会进入下一次循环。
  • 异步等待循环:在_playList中用await调用_play,让循环逐个执行,而非一次性触发所有播放。

如果需要处理播放异常(比如音频文件不存在),可以在_play方法中添加try-catch块捕获错误。

内容的提问来源于stack exchange,提问作者Kaidi G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:03:15