Google Apps ScriptでCloud Text-to Speechの音声合成のやり方をサンプルコードで解説!
Google Apps Script(GAS)でGoogle Cloud Platformのサービス「Cloud Text-to Speech」をAPIで利用して、音声合成を行う方法・手順を解説したいと思います。
サンプルコードを用意したので、それをひな型にして、音声合成にトライできます。
Cloud Text-to Speechとは?
「Cloud Text-to Speech」はGoogle Cloud Platform(GCP)のクラウドAIサービスです。
- テキストデータを処理
- 音声合成を実行
- 音声ファイル出力
という一連の処理を行ってくれます。
生成される音声もかつての音声読み上げサービスに比べると、滑らかです。
WaveNet 音声と呼ばれる品質の高い音声も利用可能で発声クオリティも高いです。
累計の音声データが約1時間分までなら無料で生成できます。
アメリカ英語からオーストラリア英語まで対応
GoogleのCloud Text-to Speechの特徴は、英語話者の豊富さがあげられます。
アメリカ英語では10種類の音声が利用可能で、さらにイギリス英語からオーストラリア英語まで対応しています。
Googleはアメリカで開発されているので、英語の発話は非常に滑らかで、日本人の耳では人間の声と区別がつかないほどです。
Cloud Text-to Speechは日本語の読み上げも可能
Cloud Text-to Speechは日本語の話者にも対応しています。
ただ、残念ながら男性の音声はなく、女性オンリーになっています。
女性・標準音声と女性・WaveNet音声の2種類が利用可能です。
速度やピッチも調整可能で、スピードと周波数を少し変えることで、同じCloud Text-to Speechの話者でも違ったように聞こえます。
Googleの音声合成サービスなので、GASとの相性が良い
Cloud Text-to SpeechはGoogleが提供している音声合成のサービスのため、Google Apps Scriptとも非常に相性がよいです。
通常、Google Apps Scriptと音声合成のAPIを接続しようとすると、認証に手間がかかります。
しかし、Cloud Text-to Speechなら同じGoogleアカウント上で稼働させることができるので、APIの紐づけがスムーズです。
そのため、Google Apps Scriptで音声合成を行う場合に、最も導入しやすいのがCloud Text-to Speechと言えます。
Cloud Text-to SpeechのGASで利用する導入手順【図説】
Cloud Text-to SpeechをGoogle Apps Scriptで利用するためには、事前設定が必要になります。
しかし、このCloud Text-to Speechの導入手順も簡単で、以下の設定で利用可能になります。
1.GCPの管理画面でCloud Text-to SpeechのAPIを有効化
Cloud Text-to SpeechのAPI管理画面リンク
※事前にGoogle Cloud PlatformのGoogleアカウント登録が必要です。
2.有効化したGCPプロジェクトのプロジェクト番号を控える
GCPコンソールのホーム画面にあるダッシュボードの「プロジェクト情報」からプロジェクト番号をコピーします。
3.GCPのプロジェクトのOAuth同意画面の設定画面で「アプリケーション名」を入力し、保存する
入力項目は複数ありますが、「アプリケーション名」のみ入力すれば、OKです。
4.GASのエディタメニュー>リソース>「Cloud Platformのプロジェクト」を選択
5.入力欄にプロジェクト番号を入力し、「プロジェクトを設定」ボタンを押下
「プロジェクトの変更の確認」というダイアログが表示されますが、「確認」ボタンをクリックします。
6.「このスクリプトが現在関連付けられているプロジェクト」が表示されたことを確認し閉じる
※うまく表示されない場合は、3のOAuth同意画面の設定ができていない可能性が高いです。
7.GASのエディタメニュー>表示>マニュフェストファイル表示を選択
8.マニュフェストファイル「appscript.json」を以下に書き換え、保存
{
"timeZone": "Asia/Tokyo",
"oauthScopes": [
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/drive",
"https://www.googleapis.com/auth/cloud-platform"
],
"dependencies": {
},
"exceptionLogging": "STACKDRIVER"
}
※oauthScopesとして、①外部にポストする、②Googleドライブにファイル保存する、③GCPを利用するための3つの権限許可をマニュフェストファイルに記載しています。
以上のステップでCloud Text-to SpeechをGASで利用するための事前設定が完了です。
これで後述するCloud Text-to Speechを利用するサンプルコードが実行可能になります。
Google Apps Scriptの音声合成サンプルコード
GASで音声合成を行うサンプルコードを用意しました。
- 音声合成したいテキストを入力
- Cloud Text-to SpeechにAPIリクエスト
- 返ってきたデータを音声ファイルにデコード
- 音声ファイルとしてGoogle Driveに保存
という流れで処理を行うひな型となるコードです。
function generateSpeechToDrive() {
//音声出力したいテキストデータと出力する音声データのファイル名を定義します。
var speechText ="ここに日本語テキストを入力してください";
var name = "test.mp3"
//cloudText-to-SpeechにAPIでリクエスト時に送るjsonを定義します。
//synthesizeメソッドで使うパラメータはhttps://cloud.google.com/text-to-speech/docs/reference/rest/v1/text/synthesize?hl=jaを参照してください。
var json = {
"audioConfig": {
"audioEncoding": "MP3",
"pitch": "5.00",
"speakingRate": "1.10"
},
"input": {
"text": speechText
},
"voice": {
"languageCode": "ja-JP",
"name": "ja-JP-Wavenet-A"
}
}
//APIリクエストするためのペイロードやURL、ヘッダー情報を定義します。
var payload = JSON.stringify(json);
var url = "https://texttospeech.googleapis.com/v1beta1/text:synthesize";
var headers = {
"Content-Type": "application/json; charset=UTF-8",
"Authorization": "Bearer " + ScriptApp.getOAuthToken(),
};
//APIをポストするためのオプションを定義し、URLフェッチを行います。
var options = {
"method": "post",
"headers": headers,
"payload": payload,
};
var data = UrlFetchApp.fetch(url, options);
//取得したJSONデータをパースして取り扱えるようにします。
var talkData =JSON.parse(data);
//BASE64のデータとなっているので、デコードを行い、音声ファイルに変換します。
var decoded = Utilities.base64Decode(talkData.audioContent);
//デコードした音声データを音声用のBLOB形式に変換し、GoogleDriveに保存します。
var blob = Utilities.newBlob(decoded, "audio/mpeg", name);
DriveApp.createFile(blob);
}
前述の事前導入設定を行ったあと、上記のコードをGASのスクリプトエディタに貼り付けます。
「generateSpeechToDrive」を実行すると、音声ファイルがGoogle Driveに保存されます。
ぜひ、入力するテキストデータやピッチ、話すスピード、話者を調整してみてください。
「Exception: サーバー エラーが発生しました」の対処法
ここまでの手順に従って、GCPの管理画面でCloud Text-to SpeechのAPIを有効後、サンプルコードを実行した際に、以下のエラーが出るケースが報告されています。
「Exception: サーバー エラーが発生しました。しばらくしてからもう一度試してください。」
このエラーはCloud Text-to SpeechのAPI部分ではなく、Googleドライブの「DriveApp.createFile()」のコマンドでエラーが生じています。
調査したところ、GoogleDriveのAPIがGCP上で無効になっていることが原因です。
どうやらGoogleCloudPlatformを紐づけや、マニュフェストファイルを修正していると、APIが有効→無効になるようです。
実行エラーを解消するためには、「Google Drive API(GCP管理画面)」でAPIを有効にします。
GCP上でGoogle Drive APIを有効にすれば実行エラーが解消され、正常に実行し、音声データがGoogleドライブに保存することができます。
Githubにテンプレートのコードを用意
今回紹介した、Google Apps ScriptでCloud Text-to Speechを扱うサンプルコードは、テンプレートとして、Githubにもレポジトリとして登録しています。
GoogleAppsScript_cloudText-to-Speech_template(Github)
リポジトリからスクリプトをDLして活用いただくことができます。
そちらのREADME.mdに簡単な使い方・導入手順を解説しています。
まとめ・終わりに
今回、Google Apps Script(GAS)でGoogleの音声合成サービス「Cloud Text-to Speech」をAPIで実行する方法を紹介しました。
GASで音声合成でテキストデータから音声ファイルを出力したい場合は、
Google Apps Script ✖ Cloud Text-to Speech
が最も導入コストが低いです。
今回、実際にテキストデータをCloud Text-to Speechに送り、音声ファイルを生成、Google Driveに保存するサンプルコードを用意しました。
ぜひ、音声合成をやってみたい人はこのサンプルコードをテンプレートとしてご活用ください。
ディスカッション
コメント一覧
はじめまして。
私は非エンジニアで主に社会人サークルの運営支援ツールとして
GASをたくさん利用しています。
個人用としてもたくさん使っています。
こちらのブログはRPAとのことなので業務用だと思いますが
コメントいたします。
私は主にWEBアプリまたはLineボットとしてGASを利用しているので
スタンドアロン型で利用しています。
この記事を見てそのうちやりたいと思っているポッドキャスト用の
音声として利用できるかもと思いましたのでGASのWEBアプリを
以下のアニメGIFのように作ってみました。
[アニメGIF]
https://i.imgur.com/b5DmKQP.gif
ばっちり動きましたし音声もなかなかいい感じで良かったです。
非常に丁寧でわかりやすい記事で素晴らしいです。
今後もGASの記事を参考にさせていただきます。
ありがとうございました。
コメントありがとうございます。
ご参考いただけ何よりです。
URL拝見しました。
生成した音声データをダウンロードまででき、Webアプリとして完成されていて素晴らしかったです。
私も仕事以外でもプライベートでもGASを活用しています。
このブログで紹介しているsikulixという画面操作RPAソフトと組み合わせて、
①クローリングでテキストデータ作成(GAS)
②音声生成(GAS)
③ポッドキャストに毎日自動アップ(sikulix)
といった活用をしています。
今後もGASをに関する情報を発信していきたいと思います。
よろしくお願いいたします。
始めまして。ゴッチューと申します。
Googleスライドを作ると自動で音声をしゃべるアプリを開発中です。
テキストを音声に変換するCloud Text-to Speechを使うにあたって参考にさせていただきました。
導入まで非常にわかりやすかったです。
しかし私の環境ではエラーでmp3ファイルの保存ができません。
上記の手順でやったところ、
「Exception: サーバー エラーが発生しました。しばらくしてからもう一度試してください。」
と表示され、GoogleDriveに保存されない状態が2週間くらいずっと続いています。
API自体は問題なく動いているようなので、GoogleDriveの問題かもしれませんが、、
もし何かご存じでしたら回答いただけると幸いです。
よろしくお願いいたします。
コメントありがとうございます。管理人のヤマタケです。
本記事をご参考いただき、ありがとうございます。
色々と動作を検証しておりましたところ、エラーの原因はGoogleDriveのAPIが無効になっているのではと考えております。
私も検証している中で、GoogleDriveのAPIを無効化した際に同様のメッセージが表示され、Driveへの保存ができなくなりました。
https://console.cloud.google.com/apis/library/drive.googleapis.com
上記のGoogleDriveのページにアクセスし、APIが有効になっているか、ご確認いただけますでしょうか。
もし、有効化されていない場合は、有効化した上でスクリプトを実行して正常に保存できるか検証のほどお願いいたします。
よろしくお願いいたします。
ヤマタケ様
上記のAPIを有効にすると、GoogleDriveに保存することができました!
Cloud-speechのAPIを使用する前まではpdfなどのファイル作成はできていましたので、GCPのAPIを使用するとリセットされるんですかね?もしくはマニフェストファイルを書き換えたせい?
まだ始めたばかりなので、このHPを参考にしてこれからも精進します。
ありがとうございました。
ゴッチュー様
無事コードが実行できたみたいでよかったです。
私もいくつかの操作をする中で、GoogleDrive APIが無効化になっていたので、リセット要因がわかりませんが、恐らくマニュフェストファイル書き換えでリセットされる可能性が高そうです。
また、原因特定ができましたら、記事等で紹介したいと思います。
今後ともよろしくお願いいたします。
Cloud Text-to Speechの記事を拝見して参考にさせていただきます。
現在グーグルに料金について問い合わせしており、それを踏まえて開発へ進むか判断するところです。
その開発と言いますのは、弊社ではGASで多言語動画システムを開発しており、更に視覚障碍者等への
音声ガイダンスによる音声読み上げでの登録システム機能の付加を考えております。
全国自治体3700余への、令和6年度からの障碍者への合理的配慮の提供義務化での動画システムと
インバウンド向け多言語動画作成ニーズ対応でのビジネスを推進を進めよう考えているところです。
GASについては、まだまだ未熟なところもあり、また、全国自治体へのビジネス訴求となりますと
一人でもご支援いただける方を必要としています。
以下サイトをご覧いただければと思います。
https://www.webrobo.jp/douga/tagengo.html