Flutter:使用 just_audio 包加载多个资源的最佳方式

问题描述 投票:0回答:1

我有一些从 0.mp3 到 46.mp3 的数字要播放,所以我像这样初始化它们:

static final AudioPlayer _numbers = AudioPlayer();

for (int i = 0; i < 46; i++) {
      await _numbers.setAsset('assets/audio/numbers/$i.mp3');
    }

问题是加载它们需要太多时间。使用 audioplayers 速度要快得多(但由于其他原因我不得不更改为这个包。

在加载前一个资源之前删除

await
并设置新资源是否安全?

flutter flutter-dependencies just-audio
1个回答
0
投票

试试这个:

  AudioPlayer? _player;

  Future<void> initPlayer() async {
    try {
      if (_player != null) {
        await _player?.dispose();
      }
      _player = AudioPlayer();
    } catch (e, stack) {
      log('error: $e, stack: $stack');
    }
  }

  Future<void> loadPlaylist() async {
    try {
      final _playlist = <AudioSource>[];
      for (int i = 0; i < 46; i++) {
      _playlist.add(
        AudioSource.uri(Uri.parse('asset:///audio/numbers/$i.mp3')),
      );
    }
      _source = ConcatenatingAudioSource(
        children: _playlist,
        useLazyPreparation: false,
      );
      await _player?.setAudioSource(_source);
    } catch (e, stack) {
      log('error: $e, stack: $stack');
    }
  }

然后当你需要开始时:

await initPlayer();
await loadPlaylist();
© www.soinside.com 2019 - 2024. All rights reserved.