Flutter で効果音やBGMを鳴らしたい場合に便利な audioplayers パッケージとAudioCacheクラスについて解説します。
audioplayersパッケージは本来ミュージックプレイヤー実装に使えるものですが、今回はアプリ内のアセット(音声ファイル)を鳴らす目的で使えるAudioCacheクラスについて解説します。
使い方も簡単で、アプリでちょっとした効果音やBGMを鳴らしたい時には非常に便利です。
AudioCacheクラスの使い方
AudioCacheクラスはaudioplayersパッケージに含まれています。iOS/Android/macOS/Webに対応しており、プラットフォームによる挙動の違いはほぼありません。わりと完璧な気がします。
パッケージとアセットの追加
pubspec.yaml にパッケージを追加します。
dependencies:
flutter:
sdk: flutter
# ↓これを追加
audioplayers: ^0.15.1
同じく pubspec.yaml に効果音とBGMのファイルを追加します。(ファイル名やファイルの数はご自由に)
# ↓これを追加
assets:
- assets/se.wav
- assets/bgm.wav
AudioCacheクラスの初期化
// 以下をインポート
import 'package:audioplayers/audio_cache.dart';
import 'package:audioplayers/audioplayers.dart'; // AudioPlayerインスタンスを使う場合
// AudioCacheインスタンスの初期化(1度だけ)
AudioCache _player = AudioCache();
再生/ループ再生
// 再生
_player.play('se.wav');
// ループ再生
_player.loop('bgm.wav');
ファイル名を指定して再生、これだけです。(簡単!)
BGMをループ再生しながら、効果音をバンバン鳴らすのも簡単ですね。
停止/一時停止
単発の再生だけなら特に制御は必要ありませんが、BGMをループ再生している場合は、停止などの制御が必要になります。その場合はAudioPlayerクラスのインスタンスを使います。
// ループ再生
AudioPlayer _ap = await _player.loop('bgm.wav');
// 停止
_ap.stop();
// 一時停止
_ap.pause();
音量/再生スピード
AudioPlayerクラスのインスタンス経由で音量や再生スピードの変更も可能です。
// 音量の変更
_ap.setVolume(0.5); //デフォルトは1.0
// 再生スピードの変更
_ap.setPlaybackRate(playbackRate: 0.7); //デフォルトは1.0
※再生スピードの変更はwebだけ対応していません。
音声ファイルのプリロードや破棄
AudioCache はメモリ上に音声データをスタンバイして、遅延なく再生できることを目的にしています。メモリを消費するので、データのロードと破棄についても明示的に記載できるようになっています。
// プリロード
_player.load('se.wav');
// プリロード(一括)
_player.loadAll(['se.wav', 'bgm.wav'])
// 破棄
_player.clear('se.wav');
音声ファイルを切り替える場面が多い時は、シーン毎に使用する音声ファイルをロード&破棄しつつ使用すると良いでしょう。
音声フォーマット
再生できる音声フォーマットは各プラットフォームがサポートしているフォーマットに依存します。一般的なフォーマット(wavやmp3)を使えば問題ないでしょう。
まとめ
今のところアプリで音を鳴らす用途ではこのパッケージが良さげだと思います。
アプリで効果音を鳴らしたいとか、ちょっとしたゲームなんかにも十分使えるんじゃないでしょうか!
コメント
音を出したかったもののsoundpoolで1時間ほど詰まって、こちらの記事を目にしてaudioplayerに変えたところ一瞬で音が出ました。
本当にありがとうございますorz