Flutterから、Googleの音声合成エンジン、Cloud Text-to-Speechを使う方法を説明していきます。
Google Cloud Text-to-Speechとは?
Google Cloud Text-to-Speechは、Googleの最先端 AI テクノロジーを活用して、とても滑らかな音声合成ができるサービスです。
こちらの公式サイトでサンプルが聞けますが、めちゃくちゃ自然です。
言語も音声の種類も豊富で、細かいピッチ調整などもできます。
料金は、より自然なプレミアム音声が100万文字まで無料なので、ちょっとしたサービスなら無料枠に収まりそうですし、うまくキャッシュを作ってリクエスト回数を抑えれば色々夢が広がりそうです。
という訳で、早速実装方法を説明していきます。
Text-toSpeech APIの有効化
まずは、Google Cloud Consoleにログインします。
プロジェクトがまだない場合は、上の欄からプロジェクトを作成します。
プロジェクトを上部で選んだら「APIs & Services」をクリック。
左メニューから、Enabled APIs & servicesを選んだら、上の検索窓でtext-to-speechを検索して、候補からCloud Text-to-Speech APIを選択。
Cloud Text-to-Speech APIを有効化します。
APIキーの発行
次に、FlutterからCloud Text-to-Speech APIを呼び出すためのAPIキーを発行します。
先程と同じ「APIs & Services」のページを開き、左側のメニューから「Credentials」を選んだら、上にあるメニューの「+ CREATE CREDENTIALS」を押し「API key」を押します。
するとAPIキーが発行されるので、コピーしておきます。
APIキーを不正利用されないよう、メニューから色々な制限が付けられます。
Androidだとfingerprint、iOSだとbundle IDの制限を追加できます。
試しにiOS制限を設定してみた所、うまくbundle IDが送られずエラーが出てしまったので、うまくできた方、やり方教えてください..
こんなエラー
code: 403, message: Requests from this iOS client application <empty> are blocked., status: PERMISSION_DENIED
Flutterに実装していこう!
では、Flutterにtext-to-speechの呼び出し処理を実装していきます。
Cloud Text-to-Speechを呼び出すパッケージと、音声を再生するパッケージ、2つを入れます。
後は簡単。次のコードを実行するだけです。
- textは、読み上げたい文言
- voiceNameは、声の種類
- languageCodeは、言語コード
import 'dart:io';
import 'package:wavenet/wavenet.dart';
import 'package:audioplayers/audioplayers.dart';
final TextToSpeechService ttsService =
TextToSpeechService("API KEY");
final audioPlayer = AudioPlayer();
File mp3 = await service.textToSpeech(
text: 'Hello World',
voiceName: 'en-GB-Wavenet-F',
audioEncoding: 'MP3',
languageCode: 'en-GB'
pitch: 0.0,
speakingRate: 1.0,
);
audioPlayer.play(DeviceFileSource(mp3.path));
言語コードと声の種類は、こちらのページでサンプル音声と一緒に確認できます。