Google Cloud Text-to-Speechを試したくて情報収集していてえらく苦労した.
Google Cloudのサービスを使う際には,Googleのコマンドラインツールを入れるだの,それを認証させるだの,いろいろとややこしい.自分の手元のPCにあんまりいろんなツールを入れるのいやだったので,何とかなんないかな~,と調べまくった.
最終的に一番簡単な方法はこれだろう,というのにたどりついたので,そのメモ書き.
(すでに登録してしまってから書いているので,イチから登録するときにはもしかしたら違ってるかもしれません・・・)
Google Cloudへの登録
「無料で開始」から,アカウント登録.
名前とか住所とか支払い情報とかごちゃごちゃ入力.
Google Cloud Text-to-Speechを有効化
「有効化」をクリック
API Keyの取得
右上に「コンソール」というものがあるはずなのでそこをクリック.
コンソール画面に遷移したら,上に検索ボックスがあるので,そこに/認証情報
と入力.
するとトップに「API」というアイコンのついた以下のような項目があるのでクリック.
すると,こんな画面がでてきます.
この「+認証情報を作成」とクリック.選択肢が3つ出てくるが,「APIキー」を選択すると,APIキーが発行される.
なお,発行直後のAPIキーは有効化されているあらゆるGoogle Cloud APIサービスにアクセスできるキーになっているので,使えるAPIを制限したい場合には作ったキーをクリックする.すると,以下のような画面が現れ,「キーを制限」を選ぶと,使うAPIを選択することができる.
REST APIで使う(Python)
APIキーが取得できたら,あとはGoogle Cloud Text-to-SpeechのREST APIにキーを含めて叩けばOK.
具体的には以下のような感じ
import requests
import json
# APIキーをここに入れる
API_KEY = "********************************"
# APIエンドポイント
url = f"https://texttospeech.googleapis.com/v1/text:synthesize?key={API_KEY}"
# 音声合成のリクエストデータ
data = {
"input": {"text": "こんにちは、Google Cloud Text-to-Speechです。"},
"voice": {
"languageCode": "ja-JP",
"name": "ja-JP-Wavenet-D", # 男性の自然な声
"ssmlGender": "MALE"
},
"audioConfig": {
"audioEncoding": "MP3"
}
}
# リクエスト送信
response = requests.post(url, headers={"Content-Type": "application/json"}, data=json.dumps(data))
# 結果を取得
if response.status_code == 200:
audio_content = json.loads(response.text)["audioContent"]
with open("output.mp3", "wb") as audio_file:
audio_file.write(bytearray(audio_content, "utf-8"))
print("音声ファイル 'output.mp3' が作成されました。")
else:
print("エラー:", response.text)
あるいは,ファイルにするのではなく,python上で直接再生させたい場合には以下のような感じ.
import requests
import json
import io
from pydub import AudioSegment
from pydub.playback import play
import base64
# APIキーをここに入れる
API_KEY = "********************************"
# APIエンドポイント
url = f"https://texttospeech.googleapis.com/v1/text:synthesize?key={API_KEY}"
# 音声合成のリクエストデータ
data = {
"input": {"text": "こんにちは、Google Cloud Text-to-Speechです。"},
"voice": {
"languageCode": "ja-JP",
"name": "ja-JP-Wavenet-D", # 男性の自然な声
"ssmlGender": "MALE"
},
"audioConfig": {
"audioEncoding": "MP3"
}
}
# リクエスト送信
response = requests.post(url, headers={"Content-Type": "application/json"}, data=json.dumps(data))
# 結果を取得
if response.status_code == 200:
# Base64エンコードされた音声データをデコード
audio_content = json.loads(response.text)["audioContent"]
audio_data = base64.b64decode(audio_content)
# バイナリデータを pydub の AudioSegment に変換
audio = AudioSegment.from_file(io.BytesIO(audio_data), format="mp3")
# Python 上で直接再生
play(audio)
else:
print("エラー:", response.text)