みなさんこんにちは。
先日は音声をテキストにするAPIを試しました。
本日はその逆の挙動を確認してみます。
Google CloudのText-to-Speechでそれは実現できます。
GCPのナビゲーションメニューからAPIとサービス→ライブラリと進みます。
検索窓にtextとかspeachと入力すると見つかります。
クリックして次に進みましょう。
次の画面で「有効にする」ボタンを押さないと始まらないのでクリックして有効にします。
その後サービス アカウントキーの作成、Cloud SDKのインストールが必要となりますが前回作成したので省略します。
https://minokamo.tokyo/2020/04/26/1188/の「音声をテキストにする記事」で説明してます。
クライアントがwindowsであることが前提ですが、インストールしたCloudツール(PowerShell)で下記のコマンドを入力します。PAHTの部分にサービス アカウントキーの作成の時ダウンロードした.jsonファイルの場所を指定します。
$env:GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
例
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\minok\OneDrive\ドキュメント\gcp\XXXXXXXXXXXX.json"
続いてリクエストの承認トークンを取得するコマンドを入力します。
gcloud auth application-default print-access-token
まだ作業は続きます。APIにリクエストするJSONファイルを作成しなければなりません。今回使用するものが下記のものとなります。ファイル名はsample.jsonとしました。
{
"input":{
"text":"こんにちは。新型コロナで世界中が危機的状態です。"
},
"voice":{
"languageCode":"ja-JP",
"name":"ja-JP-Wavenet-A",
"ssmlGender":"FEMALE"
},
"audioConfig":{
"audioEncoding":"MP3"
}
}
https://cloud.google.com/text-to-speech?hl=jaでJSONを表示すれば大体意味があかるのではないでしょうか。textの所にあった英語は削除して、自分で考えた日本語にしてあります。
それではPowerShellで順に下記のコマンドを3つ入力していきましょう。
$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest -Method POST -Headers $headers -ContentType: "application/json; charset=utf-8" -InFile C:\Users\minok\OneDrive\ドキュメント\gcp\sample.json -Uri "https://texttospeech.googleapis.com/v1/text:synthesize" | Select-Object -Expand Content
出力結果は
{
“audioContent”: “//NExAASCCIIAAhEAGAAEMW4kAYPnwwIKw/BBTpwTvB+IAxIfghUfW..”
}
の形式であり、JSON出力には、合成された音声がbase64エンコード形式で格納されています。下が結果のスクショとなります。
audioContentの値を「123.txt」というファイルで名前を付けて保存しておきます。かなり長い文字列なので色々なショートカットキーを駆使してコピペしましょう。
次にbase64のデコードの作業を行いますが、windowsに搭載されているcertutilコマンドを使ってファイルをBase64でエンコード/デコードできます。
簡単に作業できるように123.txtファイルがあるフォルダにCDコマンドで移動します。コマンドプロンプトでもPowerShellでもOKです。
cd C:\Users\minok\OneDrive\ドキュメント\gcp
あとはデコードすればOKです。jsonファイルの中身でmp3と指定しているので下記のコマンドを入力しましょう。123.txtと同じフォルダにファイルが作成されます。
certutil -decode -f 123.txt decoded.mp3
次のファイルがテキストを音声にした結果となります。
コメント