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