Flutterの記事を整理し本にしました
- 本稿の記事を含む様々な記事を体系的に整理し本にまとめました
- 今後はこちらを最新化するため、最新情報はこちらをご確認ください
- 20万文字を超える超大作になっています!!
まとめ記事
はじめに
スマートフォンの機能を使って、テキストを音声データに変換し、読み上げることができます。
事前準備
パッケージインストール
pubspec.yml
flutter_tts: ^3.0.0
実装
FlutterTtsを使って、文字を読み上げます。
main.dart
import 'package:flutter/material.dart';
import 'package:flutter_tts/flutter_tts.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> {
FlutterTts flutterTts = FlutterTts();
String _speakText =
"寿限無 寿限無 五劫の擦り切れ 海砂利水魚の 水行末 雲来末 風来末 食う寝る処に住む処 藪ら柑子の藪柑子 パイポパイポ パイポのシューリンガン シューリンガンのグーリンダイ グーリンダイのポンポコピーのポンポコナーの 長久命の長助";
Future<void> _speak() async {
await flutterTts.setLanguage("ja-JP");
await flutterTts.setSpeechRate(1.0);
await flutterTts.setVolume(1.0);
await flutterTts.setPitch(1.0);
await flutterTts.speak(_speakText);
}
Future<void> _stop() async {
await flutterTts.stop();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title!),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'$_speakText',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton:
Row(mainAxisAlignment: MainAxisAlignment.end, children: [
FloatingActionButton(onPressed: _speak, child: Icon(Icons.play_arrow)),
FloatingActionButton(onPressed: _stop, child: Icon(Icons.stop))
]),
);
}
}
Android,iOS,Webで利用できるメソッドが異なります。
上記はいずれのプラットフォームでも動きますが、詳細は公式サイトでご確認ください
_speak
では、読み上げる音声の設定をした上で、最後に文字を渡して喋らせています
- flutterTts.setLanguage("ja-JP"); // 言語
- flutterTts.setSpeechRate(1.0); // 速度
- flutterTts.setVolume(1.0); // 音量
- flutterTts.setPitch(1.0); // ピッチ
- flutterTts.speak(_speakText); // しゃべる
_stop
では、読み上げを止めます。
動作確認
再生ボタンで読み上げ、停止ボタンで停止します。
なお、漢字が含まれる場合は、期待する読み方にならない場合があります。
result.sh
D/TTS (17570): Utterance ID has started: 3090b15b-6777-4f74-853f-4d1e4ef0856b // 再生
D/TTS (17570): Utterance ID has completed: 3090b15b-6777-4f74-853f-4d1e4ef0856b // 再生完了