0

我正在使用ConcatenatingAudioSource以播放多个曲目而没有这样的间隙:

player.setAudioSource(ConcatenatingAudioSource(children: [
    ///some audio sources
  ]));

如果我现在想将要播放的下一首曲目更改为我指定的索引处的曲目,除了保持调用之外,如何做到这一点player.seekToNext()

有例如一些方法player.setNextTrackIndex(someIndex)吗?

ps:这个问题是关于just_audio包的。

4

1 回答 1

1

与您尝试做的最接近的事情是:

await player.seek(Duration.zero, trackIndex);

这会立即开始缓冲请求的轨道以播放它,但在您等待该轨道的音频缓冲时,最初仍然会有间隙。如果媒体存储在本地,这将是一个短暂的间隔,如果通过网络访问媒体,则间隔会更长。

这与实际的无间隙播放不同,后者只有在播放器提前知道下一个曲目时才会发生,以便它可以尽早开始缓冲并避免间隙。也就是说,如果用户可以随时选择一个曲目,那么玩家就没有办法提前预测用户接下来会点击哪个曲目。

是的,ConcatenatingAudioSource旨在进行无缝播放,但在它知道接下来会出现的项目之间。它旨在将轨道 A、B、C、D 连接在一起,以便 AB 之间、BC 之间和 CD 之间没有间隙。它可以这样做是因为当玩家到达轨道 A 的末端时,它知道 B 即将到来并提前开始缓冲 B。无缝播放不适用于您的场景。

于 2021-09-01T01:52:27.817 回答