Получить следующую начальную позицию аудио при использовании ConcatenatingAudioSource

Это касается использования пакета flutter.

При использовании ConcatenatingAudioSource я хочу иметь одну полосу поиска, где звук воспроизводится непрерывно, не давая мне позицию 0 при запуске следующего звука.

Например, при использовании positionStream, когда заканчивается первый звук, который длился 30 секунд, я хочу, чтобы следующий звук, который будет воспроизводиться, начался с позиции Duration(seconds: 31) и так далее, поэтому я могу создать одну полосу поиска, которая показывает, например, общую продолжительность 60 секунд (30 секунд 1-й звук, 30 секунд 2-й звук).

Кто-нибудь смог это сделать или знает, как этого добиться? Я следил за примером в https://pub.dev/packages/just_audio/example и немного читал об этом здесь: Just Audiohttps://github.com/ryanheise/just_audio/issues/174

1 ответ

Вы можете создать свой собственный поток, который периодически излучает но добавляет истекшую продолжительность предыдущих треков к общей. Итак, если каждый элемент равен 0 секундам, а у вас 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 миллисекунд. Оригинал динамически регулирует скорость для повышения эффективности, поэтому, если вы хотите также сделать это, вы можете посмотреть исходный исходный код и адаптировать эти части.

Другие вопросы по тегам