1

这是关于使用Just Audio颤振包的。

使用 ConcatenatingAudioSource 时,我希望能够在音频连续播放的地方有一个搜索栏,而不会在下一个音频开始时给我一个 0 的位置。

例如,当使用 positionStream 时,当第一个 30 秒的音频结束时,我希望下一个即将播放的音频从位置开始Duration(seconds: 31)等等,所以我可以创建一个显示总持续时间为 60 秒的搜索栏,例如( 30 秒第一个音频,30 秒第二个音频)。

有没有人能够做到这一点或知道如何做到这一点?我正在关注https://pub.dev/packages/just_audio/example中的示例,并在此处阅读了一些相关信息:https ://github.com/ryanheise/just_audio/issues/174

4

1 回答 1

1

您可以创建自己的自定义流,该流会定期发出_player.position,但会将先前曲目的经过持续时间添加到总数中。因此,如果每个项目是 30 秒,而您进入第三个项目的时间为 12 秒,那么您希望计算结果为 30 + 30 + 12。可能是这样的:

    Stream.periodic(Duration(milliseconds: 20), (i) {
      return _player.position +
          (_player.sequence!.isEmpty
              ? Duration.zero
              : _player.sequence!
                  .sublist(0, _player.currentIndex)
                  .map((item) => item.duration!)
                  .reduce((d1, d2) => d1 + d2));
    })

现在这假设每个过去的项目都有一个已知的持续时间,只有当玩家已经通过每个项目并且它被加载时才会如此。如果您在没有先加载之前的项目的情况下直接寻找第 5 项,则它们的持续时间将是未知的,您将无法计算总持续时间 + 位置。

另请注意,上面的代码以每 20 毫秒一次的恒定速率发出位置变化。原始positionStream动态调整速率以提高效率,因此如果您也想这样做,您可能需要查看原始源代码positionStream并调整这些部分。

于 2021-04-23T16:03:32.107 回答