Flutter Web端使用just_audio在Safari播放资源问题求助
桌面Safari下Flutter just_audio蜂鸣播放异常问题
我正在开发模拟医疗监护仪功能,需要播放时长250ms、频率30-300Hz的蜂鸣声。测试多个音频包后选用just_audio,该包在除桌面Safari外的平台均正常运行。
相关代码
音频播放列表
final playlist = ConcatenatingAudioSource(children: [ AudioSource.uri(Uri.parse('asset:///assets/audio/beepfiles/98.wav')), AudioSource.uri(Uri.parse('asset://assets//audio/beepfiles/96.wav')), AudioSource.uri(Uri.parse('asset:///assets/audio/beepfiles/94.wav')), AudioSource.uri(Uri.parse('asset:///assets/audio/beepfiles/92.wav')), ]);
音频播放器初始化
Future<void> _initAudio() async { await player.setLoopMode(LoopMode.one); final session = await AudioSession.instance; await session.configure(const AudioSessionConfiguration.speech()); try { player.setAudioSource(playlist); } catch (e) { debugPrint("Error loading audio source: $e"); } }
带心率变化延迟的蜂鸣播放函数
void playBeeps(WidgetRef ref) async { var obs = ref.watch(obsProvider); obs.whenData((obs) async { Future.doWhile(() async { var obs2 = ref.watch(testLocalObsProvider); int hr = obs2.heartRate; int sats = obs2.saturationsO2; bool audioIsMuted = ref.read(muteAudio); int track = (50 - ((sats / 2).round())).clamp(0, 15); player.seek(Duration.zero, index: track); await Future.delayed( Duration(milliseconds: ((60 / hr) * 1000).round())); player.play().catchError((e) { debugPrint(e); }); await Future.delayed(const Duration(milliseconds: 250)); player.pause().catchError((e) { debugPrint(e); }); return !audioIsMuted; }); }); }
已尝试的无效方案
- 更换包括just_audio在内的多个音频包
- 调整音频文件路径(移除"/assets")
- 切换使用.mp3和.wav格式的音频文件
我怀疑问题出在Safari编译时音频文件的加载与播放顺序上,希望能得到各位的协助解决。
内容的提问来源于stack exchange,提问作者Ben Hardy
相关产品推荐
相关产品推荐

