GoogleTextToSpeechに関する記事は、いくつかあるが、Rubyに絞ると良い記事がなく、比較的ハマったので、備忘録として、記録しておく。
結果として、こうなります。
gem 'google-cloud-text_to_speech', require: false
require "google/cloud/text_to_speech"
def self.generate_speech
# client生成
client = Google::Cloud::TextToSpeech.text_to_speech do |config|
# サービスクライアントを作成し、ダウンロードした秘密鍵を指定する。
config.credentials = "config/xxxxxxxx.json"
end
# 設定値はこちら
speech = {
audio_config: {
audio_encoding: "MP3",
pitch: 0,
speaking_rate: 1
},
input: {
text: "こんにちわ"
},
voice: {
language_code: "ja-JP",
name: "ja-JP-Neural2-B"
}
}
# The three arguments are all positional.
response = client.synthesize_speech speech
# ここに音声ファイルが入ってます。
return response.audio_content
end
参考資料と解説
2023-01-10時点で、GoogleTextToSpeechのトップページに、Rubyのコードスニペットはなく、一番良い資料にたどり着くまでのリンクも見つけられません。
参考にするべきは、こちらのRubyのAPI資料である。
こちらの資料も、コードスニペットは、1.0からの移行に関するページしかないので、若干読みづらい。
認証について
ココらへんかなぁ。
サービスクライアントの作成については、下記記事など参照。
TextToSpeechの利用方法として、ユーザーの個人情報を利用するユースケースが想定されており、
その場合は、サービスクライアントは利用しないほうが良い。(そのためにカスタム質問が用意されている。)
単なる音声読み上げとしてつかったり、利用規約で正しくやり取りができていれば、サービスクライアントを使う方法で問題ないだろう。
あと、APIキーを利用した、アクセス方法はTextToSpeechでは利用できない。
上記のGEMを使わない方法は、サービスクライアントのキー情報を利用して、一時的なアクセスキーを作る必要があるので、google-cloud-text_to_speechのGemを利用した方がとても簡単。
google-api-ruby-clientというGEMもあるが、こちらを使わなくても、問題はない。
サービスクライアントがどういう認証を行っているかは、認証方式の解説はこちらの記事がが良さそうです。
まだ未解決の課題
サービスクライアントの設定情報をCredentialsで保存したいが、File読み込み以外の手順が必要そう。