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

Flutter & Dart:使用audioplayers如何同时播放循环音乐与点击音效?

问题解答

你没法通过同一个AudioPlayer实例实现同时播放背景音乐和点击音效,因为单个AudioPlayer同一时间只能处理一个播放任务——当你调用play播放新音频时,会自动中断当前正在播放的音频。

所以必须创建两个独立的AudioPlayer实例,分别负责背景音乐和音效播放。修改后的单例模式可以保留,只是在AudioService内部维护两个播放器实例:

import 'package:audioplayers/audioplayers.dart';
import 'package:biblequiz/services/preferences.dart';

class AudioService {
  // 分别创建背景音乐播放器和音效播放器
  final AudioPlayer _bgmPlayer = AudioPlayer();
  final AudioPlayer _sfxPlayer = AudioPlayer();

  static final AudioService instance = AudioService._();

  AudioService._() {
    _bgmPlayer.setVolume(1.0);
    _sfxPlayer.setVolume(1.0);
  }

  void clickSound() async {
    await _sfxPlayer.play(AssetSource('sounds/click.mp3'));      
  }

  void loopSound() async {
    _bgmPlayer.setReleaseMode(ReleaseMode.loop);
    await _bgmPlayer.play(AssetSource('sounds/music.wav'));
  }

  void stopLoop() async {
    await _bgmPlayer.stop();
  }
}

额外说明

  • 两个实例各自独立管理播放状态,不会互相干扰:背景音乐循环播放时,点击音效可以正常触发播放。
  • 如果后续有更多音效类型,也可以基于_sfxPlayer复用(只要音效是短音频、不会同时触发多个相同音效的冲突场景);如果需要同时播放多个不同音效,可能还需要更多的音效播放器实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:40:28