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

Flutter中使用audio_service设置音频播放间隔的实现问题

解决音频循环播放间隔问题

首先,你在play()方法里用sleep的方式完全错误,原因有两点:

  • sleep是同步阻塞主线程的操作,会导致UI卡死,audio_service的后台逻辑也会被阻塞,根本达不到延迟效果。
  • 当just_audio开启自动循环时,不会每次重播都调用你重写的play()方法,而是内部直接触发播放,所以你的延迟代码根本不会被执行。

正确的实现方式是监听音频播放完成事件,异步延迟后切换/重播音频,具体代码示例如下:

class MyAudioHandler extends BaseAudioHandler with QueueHandler, SeekHandler {
  final AudioPlayer _player = AudioPlayer();
  // 存放你的两段音频地址
  final List<String> _audioUrls = [
    '第一段音频URL',
    '第二段音频URL',
  ];
  int _currentIndex = 0;

  MyAudioHandler() {
    // 初始化播放器监听事件
    _initPlayerListeners();
    // 加载初始音频
    _loadCurrentAudio();
  }

  void _initPlayerListeners() {
    // 监听播放完成状态
    _player.playbackEventStream.listen((event) {
      if (event.processingState == ProcessingState.completed) {
        // 当前音频播放完毕,延迟1秒后切换到下一段
        _scheduleNextPlay();
      }
    });
  }

  Future<void> _loadCurrentAudio() async {
    try {
      await _player.setAudioSource(AudioSource.uri(Uri.parse(_audioUrls[_currentIndex])));
    } catch (e) {
      print('加载音频失败: $e');
    }
  }

  Future<void> _scheduleNextPlay() async {
    // 异步延迟1秒,不会阻塞主线程
    await Future.delayed(const Duration(seconds: 1));
    // 循环切换音频索引
    _currentIndex = (_currentIndex + 1) % _audioUrls.length;
    await _loadCurrentAudio();
    // 播放下一段音频
    await _player.play();
  }

  @override
  Future<void> play() async {
    await _player.play();
  }

  @override
  Future<void> pause() async {
    await _player.pause();
  }

  // 实现stop方法确保后台播放能正常终止
  @override
  Future<void> stop() async {
    await _player.stop();
    await super.stop();
  }
}

关键说明:

  • 用Future.delayed替代sleep:这是异步延迟操作,不会阻塞主线程,保证后台播放和UI都能正常运行。
  • 手动控制播放流程:放弃just_audio的自动循环,改为监听播放完成事件,手动切换音频并添加延迟,完全掌控两段音频的间隔逻辑。
  • 适配audio_service:所有操作都在AudioHandler内部完成,确保后台播放的兼容性,audio_service会将这些逻辑托管到后台隔离区。

如果你的两段音频需要作为一个序列处理,也可以用ConcatenatingAudioSource组合音频,再在序列播放完成后延迟重播,但上面的方式更灵活,能精准控制每段之间的间隔。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:01:16