5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Flutterで行うTTS(Text To Speech)

Posted at

:book: Flutterの記事を整理し本にしました :book:

  • 本稿の記事を含む様々な記事を体系的に整理し本にまとめました
  • 今後はこちらを最新化するため、最新情報はこちらをご確認ください
  • 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では、読み上げを止めます。

動作確認

pic31.png

再生ボタンで読み上げ、停止ボタンで停止します。

なお、漢字が含まれる場合は、期待する読み方にならない場合があります。

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 // 再生完了
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?