🍔

Googleのtext-to-speech APIを試した

2023/02/25に公開

GCPのアカウントを持っていたので、Googleのtext-to-speech APIを試してみました。
https://cloud.google.com/text-to-speech

text-to-speech APIのセットアップ

https://twitter.com/tetsu_koba/status/1629300504164704256?conversation=none

全体像を把握しないままに書いてある通りに進めただけなので、あまり手順を追って書くことができないのですが、ポイントになりそうなのか以下の通りです。

  • サービスアカウントというものを作った。
  • GOOGLE_APPLICATION_CREDENTIALSという環境変数に取得したJSONファイルの形式のファイルのパスをセットした。
  • curlでAPIとたたくにはgcloudをインストールしておく必要があった。

最初はpermission deniedのエラーになったのですが、エラーメッセージの中にURLが載っていて、そこからこのAPIを有効にしろと書いてあったので、言われた通りにしたらできました。
有効にしたつもりだったのに、間違えてspeech-to-text APIの方を有効にしていたと後でわかりました。
curlでAPIをたたくと返ってくるのはBASE64でエンコードされたmp3のファイルです。
これをbase64コマンドでデコードするとmp3ファイルが得られます。
途中の手作業が多いのですが、これを一回やって確認ができると後は楽でした。

https://twitter.com/tetsu_koba/status/1629310003780919298?conversation=none

Go言語でやったのですが、手間取ったのはtext-to-speech APIには関係のないところで、それが解決できたらサンプルプログラムの動作は問題なくできました。

テキストファイルからopusの音声ファイルに変換するコマンド

テキストファイルからopusの音声ファイルに変換するコマンドを作ったので、githubに上げておきました。

https://github.com/tetsu-koba/text2opus

これを使って、先日と同様にテキストファイルから音声ファイルを生成してみました。

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コマンドよりも断然滑らかで自然に聞こえました。
普通に英語の教材に使えそうです。

関連

https://zenn.dev/tetsu_koba/articles/f27c1b189b500d

Discussion