はじめに
Flutterでassets内の音声ファイルを再生するのに、少し手間取ったのでメモとして残しておきます。
前提
次のプラグインを使用
- audioplayers : 0.13.7
音声ファイルはassets/soundsに配置
コード
pubspec.yamlに次を追記します。
pubspec.yaml
dependencies:
audioplayers: ^0.13.7
flutter:
assets:
- assets/sounds/
ローカルファイルのみ再生可能なため、アセットからローカルファイルを作成するSoundManagerクラスを作成します。
class SoundManager {
AudioPlayer audioPlayer = AudioPlayer();
Future playLocal(String localFileName) async {
final dir = await getApplicationDocumentsDirectory();
final file = File('${dir.path}/$localFileName');
if (!file.existsSync()) {
final soundData = await rootBundle.load('assets/sounds/$localFileName');
final bytes = soundData.buffer.asUint8List();
await file.writeAsBytes(bytes, flush: true);
}
await audioPlayer.play(file.path, isLocal: true);
}
}
あとは、次の方法で再生できます。
final SoundManager soundManager = SoundManager();
soundManager.playLocal('$fileName.wav');
参考
Playing from assets · Issue #5 · rxlabz/audioplayer · GitHub
avoid_slow_async_io