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

如何复用同一AudioPlayer实例避免重复加载资源?

复用AudioPlayer实例实现重复播放的解决方案

你遇到的问题核心原因是:第一次播放结束后,音频的播放指针停在了文件末尾,再次调用play()不会自动回到起始位置,因此没有声音输出。以下是具体实现方案:

实现思路

  1. 仅在初始化阶段加载一次音频资源,避免重复加载开销
  2. 每次触发播放前,将播放位置重置到起始点(0秒处)
  3. 封装播放逻辑,确保每次调用都能正确触发播放

代码示例

// 类级别或全局的AudioPlayer实例,只初始化一次
AudioPlayer _player = AudioPlayer();

// 初始化方法,在页面/组件启动时调用一次
Future<void> initAudioResource() async {
  await _player.setAsset("sounds/hit.mp3");
}

// 封装的播放方法,每次需要播放时调用这个方法
Future<void> playHitSound() async {
  // 将播放位置重置到起始点
  await _player.seek(Duration.zero);
  // 执行播放
  await _player.play();
}

可选优化:监听播放完成自动重置

如果希望播放结束后自动重置位置,可添加播放完成监听:

// 在初始化方法中添加监听
Future<void> initAudioResource() async {
  await _player.setAsset("sounds/hit.mp3");
  // 播放完成后自动重置到起始位置
  _player.onPlayerComplete.listen((_) {
    _player.seek(Duration.zero);
  });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:54:17