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
相关产品推荐
相关产品推荐

