 Flutterの記事を整理し本にしました
 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 // 再生完了
