【问题标题】:Keeping Flutter's just_audio and audio_service in sync for shuffle mode保持 Flutter 的 just_audio 和 audio_service 在 shuffle 模式下同步
【发布时间】:2021-08-11 08:52:32
【问题描述】:

我正在使用 Flutter 中的 Just Audio 实现基本版本的音频服务。我已经弄清楚了大部分功能,但我不知道如何在洗牌和解洗时让 MediaItem 队列与音频播放器的播放列表保持同步。

这是我迄今为止尝试过的:

  @override
  Future<void> setShuffleMode(AudioServiceShuffleMode shuffleMode) async {
    final oldIndices = _player.effectiveIndices!;
    switch (shuffleMode) {
      case AudioServiceShuffleMode.none:
        final list = List.generate(
            oldIndices.length, (index) => queue.value![oldIndices[index]]);
        queue.add(list);
        _player.setShuffleModeEnabled(false);
        break;
      case AudioServiceShuffleMode.group:
      case AudioServiceShuffleMode.all:
        _player.setShuffleModeEnabled(true);
        _player.shuffle();
        final playlist =
            oldIndices.map((index) => queue.value![index]).toList();
        queue.add(playlist);
        break;
    }
  }

这会在洗牌后更新队列,但不允许它返回。我确信必须有一个简单的解决方案,但我的大脑无法掌握它。 official example 不演示洗牌。

【问题讨论】:

    标签: just-audio


    【解决方案1】:

    我建议将每个 audio_service MediaItem 存储在每个 just_audio IndexedAudioSourcetag 属性中。然后就可以轻松地将just_audio的有效序列映射到队列中:

    _player.sequenceStateStream
        .map((state) => state?.effectiveSequence)
        .distinct()
        .map((sequence) =>
            sequence?.map((source) => source.tag as MediaItem).toList())
        .pipe(queue);
    

    【讨论】:

    • 我从来没想过。好主意!
    • 我刚刚对答案做了一个小的编辑,因为我最初忽略了空序列,但由于队列也可以是空列表,所以我只是让空值通过。
    猜你喜欢
    • 1970-01-01
    • 2021-03-18
    • 2021-03-11
    • 2021-09-04
    • 2021-10-13
    • 1970-01-01
    • 2021-12-17
    • 2022-12-22
    • 2023-04-10
    相关资源
    最近更新 更多