Amazon PollyのAPIを使って音声を合成してみた

こちらの記事でAmazon PollyのGUIの使い方を紹介してあります。この記事に書いてあることを前提にして進めます。
Java、Node.js、.NET、PHP、Python、Ruby、Go、C++からAmazon PollyのAPIを使えますが、今回はPythonを使っていきたいと思います。

Pythonの場合、先にboto3はインストールしておく必要があります。

以下のスクリプトが、引数としてテキストデータ(日本語の文章)を渡して音声データを得るスクリプトです。
(本当は例外処理とかいろいろ入れたほうがいいとは思いますが、今回は使い方紹介ということでそこらへんは適当です)

#!/usr/bin/python3

import sys
from boto3 import client

argv = sys.argv
polly = client("polly", region_name="us-east-1", aws_access_key_id="****", aws_secret_access_key="****")
response = polly.synthesize_speech(
        Text = argv[1],
        OutputFormat = "mp3",
        VoiceId = "Mizuki")

file = open("test.mp3", "wb")
file.write(response["AudioStream"].read())
file.close()

aws_access_key_id,aws_secret_access_keyというのはIAMのアクセスキーIDとシークレットアクセスキーです。コンソールにログインするときのユーザー名、パスワードとはまた違うのでご注意を。

synthesize_speechで音声データを取得しています。
synthesize_speechに引数として与えられているVoiceIdは言語設定のようなものです。
このスクリプトは日本語にしか対応していませんが、他の言語を使いたい場合はここをみて変更してみてください。
なお、VoiceIdで設定した言語と、引数として渡した文章の言語が一致しない場合は、無音の音声データが作成されるようです。

こちらの記事で紹介されているSSMLを使う場合は、synthesize_speechの引数にTextTypeを追加します。
上のスクリプトをssml用に変える場合はpolly.synthesize_speechの部分を以下のように変更すればよいです。

response = polly.synthesize_speech(
        Text = argv[1],
        OutputFormat = "mp3",
        VoiceId = "Mizuki"
     TextType = "ssml")