我有一些从 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
并设置新资源是否安全?
试试这个:
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();