Есть ли способ зациклить пакет флаттера звуковой дорожки soundpool?

#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),
        ),
      ],
    ),
  ),
);