#flutter #flutter-dependencies
#трепетание #зависимости от флаттера
Вопрос:
Я создаю музыкальное приложение с помощью Flutter и использую пакет soundpool. Мне интересно, есть ли другой способ зациклить саундтрек, кроме этого:
while (true) {
soundStreamId = await pool.play(soundId);
print("Loopin");
if (status == false) {
break;
}
}
При использовании функции break звук не прекращается сразу, а прекращается после полного воспроизведения трека.
Я попытался заменить break на pool.stop(soundStreamId) и pool.pause(soundStreamId), но это выдает мне эту ошибку:
[VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: 'package:soundpool/soundpool.dart': Failed assertion: line 189 pos 12: 'streamId > 0': Invalid 'streamId' parameter. Only values greater than 0 are valid.
#0 _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:46:39)
#1 _AssertionError._throwNew (dart:core-patch/errors_patch.dart:36:5)
#2 Soundpool.stop (package:soundpool/soundpool.dart:189:12)
#3 SoundServices.toggleSound (package:Waver/api/sound_service.dart:33:20)
<asynchronous suspension>
#4 _AutoSoundSetterState._toggleSpectrumAnalyzer (package:Waver/Widgets/Setup/AutoSoundSetter.dart:51:20)
#5 _AutoSoundSetterState.build.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:Waver/Widgets/Setup/AutoSoundSetter.dart:211:31)
#6 State.setState (package:flutter/src/widgets/framework.dart:1244:30)
#7 _AutoSoundSetterState.build.<anonymous closure>.<anonymous closure> (package:Waver/Widgets/Setup/AutoSoundSetter.dart:203:27)
Пожалуйста, посоветуйте. Спасибо!
Ответ №1:
Да, мне нужна была похожая вещь, и я нашел этот пакет :
https://pub.dev/packages/just_audio
Он имеет цикл:
Зацикливание и перетасовка:
await player.setLoopMode(LoopMode.off); // no looping (default)
await player.setLoopMode(LoopMode.all); // loop playlist
await player.setLoopMode(LoopMode.one); // loop current item
await player.setShuffleModeEnabled(true); // shuffle playlist
Четный цикл списка воспроизведения:
player.setAudioSource(
// Loop child 4 times
LoopingAudioSource(
count: 4,
// Play children one after the other
child: ConcatenatingAudioSource(
children: [
// Play a regular media file
ProgressiveAudioSource(Uri.parse("https://example.com/foo.mp3")),
// Play a DASH stream
DashAudioSource(Uri.parse("https://example.com/audio.mdp")),
// Play an HLS stream
HlsAudioSource(Uri.parse("https://example.com/audio.m3u8")),
// Play a segment of the child
ClippingAudioSource(
child: ProgressiveAudioSource(Uri.parse("https://w.xyz/p.mp3")),
start: Duration(seconds: 25),
end: Duration(seconds: 30),
),
],
),
),
);