てくのーと
266 文字
1 分

Flutter audioplayersで同じ音源を二度以上鳴らしたいとき

Flutterで効果音やBGMを再生するとき、audioplayersを使うことがあると思います。
以下の公式のサンプル通り実行することが鳴らせることがわかります。

import 'package:audioplayers/audioplayers.dart';
// ...
final player = AudioPlayer();
await player.play(UrlSource('https://example.com/my-audio.wav'));

しかし、同じインスタンスを利用してこの音源をもう一度流したい場合以下のようにしてもうまくいきません。

import 'package:audioplayers/audioplayers.dart';
// ...
final player = AudioPlayer();
await player.play(UrlSource('https://example.com/my-audio.wav'));

await Future.delayed(Duration(seconds: 1));

await player.play(UrlSource('https://example.com/my-audio.wav'));

このようなときはplayer.stopを用いて一度止める必要があります。

import 'package:audioplayers/audioplayers.dart';
// ...
final player = AudioPlayer();
await player.play(UrlSource('https://example.com/my-audio.wav'));

await Future.delayed(Duration(seconds: 1));

await player.stop();
await player.play(UrlSource('https://example.com/my-audio.wav'));

ちなみに私は、ある関数で音を鳴らす処理を入れており、その関数が何度も呼ぶことで毎回音声を再生したかったので、以下のようにしました。

Future<void> doSomething() {
    state.audioPlayer.stop(); // playしていなくてもstopを入れておく
    state.audioPlayer.play('xxxx');
}
\てくのーと おすすめ書籍!/

プログラミングを楽しみ続けるためには健康は不可欠!
本書では如何に健康であり続けるかが科学的な情報とともに紹介されています。
→感想詳細はこちら!