🍔
Googleのtext-to-speech APIを試した
GCPのアカウントを持っていたので、Googleのtext-to-speech APIを試してみました。
text-to-speech APIのセットアップ
全体像を把握しないままに書いてある通りに進めただけなので、あまり手順を追って書くことができないのですが、ポイントになりそうなのか以下の通りです。
- サービスアカウントというものを作った。
-
GOOGLE_APPLICATION_CREDENTIALS
という環境変数に取得したJSONファイルの形式のファイルのパスをセットした。 - curlでAPIとたたくには
gcloud
をインストールしておく必要があった。
最初はpermission deniedのエラーになったのですが、エラーメッセージの中にURLが載っていて、そこからこのAPIを有効にしろと書いてあったので、言われた通りにしたらできました。
有効にしたつもりだったのに、間違えてspeech-to-text APIの方を有効にしていたと後でわかりました。
curlでAPIをたたくと返ってくるのはBASE64でエンコードされたmp3のファイルです。
これをbase64
コマンドでデコードするとmp3ファイルが得られます。
途中の手作業が多いのですが、これを一回やって確認ができると後は楽でした。
Go言語でやったのですが、手間取ったのはtext-to-speech APIには関係のないところで、それが解決できたらサンプルプログラムの動作は問題なくできました。
テキストファイルからopusの音声ファイルに変換するコマンド
テキストファイルからopusの音声ファイルに変換するコマンドを作ったので、githubに上げておきました。
これを使って、先日と同様にテキストファイルから音声ファイルを生成してみました。
txt2opus.sh
#!/bin/sh -eu
if [ $# -eq 0 ];then
echo "Usage: $0 input_text_file(.txt) ..."
exit 1
fi
for i in $*; do
OUTFILE=$(basename $i .txt).opus
VOICE=en-US-Neural2-J
case $i in
*a.txt) VOICE="";;
*b.txt) VOICE=en-US-Neural2-G;;
esac
text2opus $i $OUTFILE $VOICE
done
再生するのは同じものでいけました。
play.sh
#!/bin/bash -eu
trap 'exit' 2
if [ $# -eq 0 ];then
echo "Usage: $0 audio_files ..."
exit 1
fi
FFPLAY='ffplay -autoexit -nodisp -hide_banner -v error'
for i in $*; do
echo -n "Playing" $i
$FFPLAY $i
done
これはMacのsayコマンドよりも断然滑らかで自然に聞こえました。
普通に英語の教材に使えそうです。
関連
Discussion