今回はGASを使用して、翻訳WEB-APIに引き続いて、スピーチWEB-APIを作成します、その後作成したAPIを使用してスピーチアプリケーションを作成します。
Googleの各サイトについて
今回はGCP(GoogleCloudPlatform)のスピーチサービスを使用するので、GCP登録が必要となります。
Google各サイトへのリンクを記します。
Googleサイト名 | 説明 | URL | 備考 |
---|---|---|---|
Googleサイト | 外部公開するWEBページ等 | https://sites.google.com/ | – |
Googleスクリプト | GAS等の保存場所 | https://script.google.com/ | – |
Googleドライブ | 共有するドキュメント等 | https://drive.google.com/ | – |
Googleドキュメント | Word/Excel等の保存場所 | https://docs.google.com/ | – |
GoogleCoudPlatform | プロジェクトの設定等、課金等、API等 | https://cloud.google.com/ | – |
GoogleStorage | プファイル等の保管場所 | https://console.cloud.google.com/storage | – |
GCP登録方法
GCP(GoogleCoudPlatform)の操作方法について、概要を記します。
GCPにアクセスするには、ここからGCPコンソールを起動します。
◯GCP登録方法
無料トライアルの登録を行うと、60日間300ドル分無料で使用できる他、MapsAPIは毎月200ドルまでは無料で使用可が可能です。
しかし、GCP登録時には、「クレジットカードまたは銀行口座」の登録は必須です。
GCP登録を行うには、以下の2点が必須となります:
◯Google アカウント
◯クレジットカードまたは銀行口座
GCP登録を行うと、「プロジェクト名」と「プロジェクトID」が作成されます。
あとは、API設定を行えば、APIを使用することが可能となります:
◯APIキーの設定
◯APIを有効化する
◯APIキーを作成/設定する
◯初回承認の手順
APIの初回実行時に、初回認証が行われます。
GCP設定方法
GCPは、最上位概念として「プロジェクト」があり、その下に、アカウント、API等が所属する形となる。
支払いの単位は、「プロジェクト」となる。
○制限設定情報
「IAMと管理」「割り当て」から、で各APIの使用量の制限ができる。
※https://console.cloud.google.com/iam-admin/quotas?project=exec-api
「お支払い」「予算とアラート」で予算の制限警告ができる、但しメール警告のみで、実際には使用制限はしない
※https://console.cloud.google.com/billing/013780-11EAA0-0EC863/budgets?project=exec-api
○利用制限の設定
ポータルサイトから「三」(メニュー)、「お支払い」から「支払い設定」「支払い方法」が設定できる。
「アプリケーションの制限」:ドメイン制限、IP:アドレス制限などが指定可能
「APIの制限」:特定のAPIしか使用できなように設定が可能、もちろん制限しないことも可能。
○各APIの有効化
ポータルサイトから「三」(メニュー)、「APIとサービス」「APIとサービスの有効化」でAPIサービスを選択する。
「アプリケーションの制限」:ドメイン制限、IP:アドレス制限などが指定可能
「APIの制限」:特定のAPIしか使用できなように設定が可能、もちろん制限しないことも可能。
○APIキーの作成
ポータルサイトから「三」(メニュー)、「APIとサービス」「認証情報を作成」から作成する。
GCPの各サイトの一覧を記します、項目が多すぎて、どこにあるかが判らなくなる!
※「project=exec-api」はプロジェクト名「exec-api」の場合です、適時読み替えて下さい
項目名 | 説明 | URL |
---|---|---|
マップ関連の料金表 | 各マップAPIに関する料金表 | https://cloud.google.com/maps-platform/pricing/sheet?hl=ja |
MapAPIの使用量 | 各マップAPIの使用回数を表示する | https://console.cloud.google.com/google/maps-apis/ |
APIの上限値設定 | 「IAMと管理」「割り当て」から使用量の上限値を指定できる | >https://console.cloud.google.com/iam-admin/quotas?project=exec-api&folder=&organizationId= |
料金履歴 | 毎月のAPI使用回数、使用料金を確認できる。 | https://console.cloud.google.com/billing/013780-11EAA0-0EC863/history?hl=ja&project=exec-api |
費用内訳 | 使用量、無料枠の対比ができる。 | https://console.cloud.google.com/billing/013780-11EAA0-0EC863/history?hl=ja&project=exec-api |
お支払いに関する情報&FAQ | Map料金&FAQ情報 | https://cloud.google.com/maps-platform/pricing?hl=ja#matrix |
スピーチアプリケーションのイメージ
「英文⇔日本文翻訳アプリケーション」にスピーチ機能を追加します。
○英文⇔日本文翻訳アプリケーションにスピーチ機能を追加
「音声変換する」をクリック後、「▶」で音声を再生します。
翻訳前の日本語文章を読上げます。
翻訳後の英語語文章を読上げます。
※赤丸部分を今回は組み込みます。
英語文章の読上げ例:
スピーチWEB-APIの作成
○GCPのTextToSpeechサービス
○GCPのTextToSpeech(有料)を使用します
※TextToSpeech:https://cloud.google.com/text-to-speech/docs/apis?hl=ja
○仕様:https://texttospeech.googleapis.com/v1beta1/text:synthesize
以下は呼び出しの例を記します:
[options]:
var options = {
"method": "post",
"headers":header,
"payload": payload,
};
[header]:
var headers = {
"Content-Type": "application/json; charset=UTF-8",
"Authorization": "Bearer " + ScriptApp.getOAuthToken(),
};
[payload]:
var payload = JSON.stringify(json);
var json = {
"audioConfig": {
"audioEncoding": "MP3",
"pitch": "5.00",
"speakingRate": "1.10"
},
"input": {
"text": speechText
},
"voice": {
"languageCode": voice,
}
};
○作成するスピーチWEB-APIの仕様
○呼出し方法
https://[URL]?text=…..&lang=….
○パラメータ説明
[text]:音声変換する文章のテキスト内容
[lang]:音声変換する文章の言語
○翻訳の結果:JSON形式
{ “result”:”MP3音声をBASE64エンコードしたもの”}
○GASスクリプトの作成手順
https://script.google.com/にアクセスして
順に、
○「新しいプロジェクト」の作成
○プロジェクトの名前を指定
○「doGet()」、「createResponse()」関数を作成する
※WEB-APIとして作成するので、関数名は必ず「doGet()とします(method=GETの場合)」
○GASスクリプトの公開手順
順に、
○「公開」「ウェブアプリケーションとして導入」
○「Deploy as web app」
「ExecuteTheAppAS」は「Me」、「WhoHasAcessToTheApp」は「Anyone,EvenAnonymous」を指定
○「Current web app URL」を確認する
これがWEB-APIのURLとなる
○作成したスピーチWEB-APIのソースコード(expand sourceをクリックすると表示されます)
※2行目「doGet()」関数がエントリポイントです(method=GETの場合)
※14行目「createResponse()」はJSON形式に変換して返します
※25行目「SpeechToBase64()」は音声をBASE64形式に変換する
/* エントリポイント(method="get") */ function doGet(e) { var text = e.parameter.text; var lang = e.parameter.lang; Logger.log("doGet:"+text+"*"+lang); /* var result = LanguageApp.translate(text, lang); */ var result = SpeechToBase64(text, lang); return createaResponse(result); } /* JSON形式で返す */ function createaResponse(result) { var data = {result:result}; var payload = JSON.stringify(data) var output = ContentService.createTextOutput(); output.setMimeType(ContentService.MimeType.JSON); output.setContent(payload); return output; } /* 音声作成して、BASE64で返す*/ function SpeechToBase64(srcText, lang) { var voices = {"ja":"ja-JP", "en":"en-US", "cn":"zh-CN","ko":"ko"}; voice = voices[lang]; speechText =srcText Logger.log(speechText); Logger.log(lang); Logger.log(voice); //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": voice, /* "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(), }; Logger.log(ScriptApp.getOAuthToken()); //APIをポストするためのオプションを定義し、URLフェッチを行います。 var options = { "method": "post", "headers": headers, "payload": payload, "muteHttpExceptions": true, }; var data = UrlFetchApp.fetch(url, options); Logger.log(data); //取得したJSONデータをパースして取り扱えるようにします。 var talkData =JSON.parse(data); Logger.log(talkData.audioContent); return talkData.audioContent; }
○マニフェスト:appsscript.json(expand sourceをクリックすると表示されます)
「表示」「マニフェストファイル表示」から作成する
{ "timeZone": "Asia/Tokyo", "dependencies": { }, "webapp": { "access": "ANYONE_ANONYMOUS", "executeAs": "USER_DEPLOYING" }, "exceptionLogging": "STACKDRIVER", "oauthScopes": ["https://www.googleapis.com/auth/script.external_request", "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/spreadsheets.currentonly", "https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/spreadsheets.currentonly", "https://www.googleapis.com/auth/script.container.ui"], "runtimeVersion": "V8" }
スピーチアプリケーションの作成
〇アプリケーションのSpeechに関するコードのみ載せます
function conv_speech(kind) { if ( kind == 1 ) { var text = document.getElementById('src').value; var lang = "ja"; } else { var text = document.getElementById('dst').value; var lang = "en"; } // alert(text); // XMLHttpRequestオブジェクトの作成 var request = new XMLHttpRequest(); // URLを開く /* https://script.google.com/macros/s/AKfycb........../exec?text=manifest&lang=en */ var URL = "https://script.google.com/macros/s/AKfycb........../exec"; var URL = URL+"?text="+text+"&lang="+lang; request.open('GET', URL, true); request.responseType = 'json'; // レスポンスが返ってきた時の処理を記述 request.onload = function () { // レスポンスが返ってきた時の処理 var json = this.response; var speech = json.result; // alert("スピーチbase64"+speech); // document.getElementById('dst').value = json.result; /* audio要素を変更する */ /* element.setAttribute */ if ( kind == 1 ) { document.getElementById('audio1').setAttribute('src', "data:audio/mp3;base64,"+ speech); } else { document.getElementById('audio2').setAttribute('src', "data:audio/mp3;base64,"+ speech); } /* alert(document.getElementById('audio').getAttribute('src')); document.getElementById('audio').getAttribute('src'); */ } // リクエストをURLに送信 request.send(); }
次回について
今回は、翻訳アプリケーションにスピーチ機能(音声出力)を付加しました。
次回は、いよいよ音声入力に挑戦します。
まずは、ブラウザ機能にて実現したいと考えていますが、GCPサービスの音声入力(SpeechToText)にも言及します!!!
著者:志村佳昭(株式会社トリニタス 技術顧問)