てくのーと
266 文字
1 分

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

2024-05-28
2024-07-05

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');
}
\てくのーと おすすめ書籍!/

OAuthという名前は知っているけれど、中身のフローは知らないという方におすすめです。
丁寧に書かれているので、理解がスムーズに進みます。
→感想詳細はこちら!