Flutterで効果音を設定する方法
※2022/8/25追記あり
使用しているパッケージ(audioplayers)が最新バージョン(1.0.0以上?)では動きませんでした・・・
バージョン0.19.1でお試しください・・・
今回はFlutterの初期コードを使って、ボタンを押すと音が鳴るように実装しました。こんなのができます。
こんな人向け
・Flutterでとりあえず音を鳴らしたい
・Flutter初心者
下記の手順はMacでAndroid Studioを使った場合のものです。
①効果音をFlutterプロジェクトに保存する
今回は以下のサイトから効果音をダウンロードしました。
色々な音があって見る(聞く)だけでも楽しかったです。
Android Studioを開き、プロジェクト名右クリック → New → Directory を選択して「assets」ファイルを作成します。
assetsフォルダの中に先ほどダウンロードした効果音(horseRunning.mp3)を保存します。ファイル名は英語に変えておきました。
②pubspec.yaml に効果音ファイルを設定する
効果音や画像、パッケージをインストールする際にはpubspec.yaml ファイルに設定が必要です。このファイルは改行やインデント(必ずスペース2つ分!)にも注意する必要があります。
以下の部分を参考にして設定していきます。
# から始まっているところはコメントになっているので、# を外してインデントを揃えます。今回は効果音を保存した「assets」フォルダを設定したいので、下記のようになります。
ちなみに、# から始まっている緑色のコードは使わないので消してしまって大丈夫です。
pubspec.yaml ファイルを編集した後はPub getが必要ですが、この後の手順でも編集するのでまだPub getしません。
③audioplayersパッケージをインストールする
効果音を再生するためにパッケージを使います。
下記のページは「flutter audioplayers」などと調べると出てきます。
Installingタブのdependenciesのところを見ます。「audioplayers: ^0.19.1」のところをコピーします。
※2022/8/25追記
最新バージョン(1.0.0以上?)では下記コードは動きませんでした・・・
0.19.1でお試しください・・・
そしてpubspec.yaml のdependenciesのところに貼り付けます。
pubspec.yamlファイルの全文は以下のようになります。
name: flutter_sample
description: A new Flutter application.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1
environment:
sdk: ">=2.7.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
audioplayers: ^0.19.1
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
assets:
- assets/
最後に「Pub get」をクリックします。
③コーディングする
ボタンを押したときに効果音が鳴るように実装します。今回の目標は鳴らすことだけなので、追加するコードは3行だけです。
①AudioCacheのインスタンスを_MyHomePageState class の中に作成します。
final _audio = AudioCache();
②main.dart のファイルにAudioPlayersをインポートします。
import 'package:audioplayers/audioplayers.dart';
③playメソッドを呼び出します。
_audio.play('horseRunning.mp3');
floatingActionButtonを押した時に _incrementCounter が呼び出されていたため、③のplayメソッドはこのメソッドの中に書いています。
main.dart の全文はこちら
import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
final _audio = AudioCache();
void _incrementCounter() {
setState(() {
_counter++;
});
_audio.play('horseRunning.mp3');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.display1,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
手順は以上です。Runして動作確認をお願いします。
ちなみに、自分の環境では以下の時はうまくいきませんでした。
・効果音のファイル名が日本語
・pubspec.yaml の指定フォルダの後ろに/がない時
(assets/ ではなく assets の時)
・pubspec.yaml で assets: の前にスペースが3つ入っていた時
以上、ありがとうございました!
この記事が気に入ったらサポートをしてみませんか?