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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:40:38