【Amazon Polly】 Twilio さんに Mizuki さんの声で話してもらいました!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

今月( 8月)の 6日に発表があったのですが、Twilio の音声合成エンジンとして Amazon Polly が使えるようになっています!

いま動いている Twilio アプリケーションで Mizuki さんがしゃべってくれるというわけで、さっそく試してみました。

Twilio 経由で Mizuki さんの声を電話越しに聞くだけであれば、無料トライアル枠でも利用可能です。弊ブログには下記のような記事もありますので、興味があれば試してみて下さい。

クラウド電話API 「Twilio」を使ってみよう#1

前提

Twilio の REST API を叩いて電話をかける場合、 TwiML と呼ばれる XML 形式のファイルを Twilio に渡さないとなりません。この XML は Twilio側から GET (あるいは POST )させる必要があるので、通常は何かしらの Web サーバなりを用意するのですけど、今回は試験なので Twilio Labs の Twimlet (echo) を使います。

以下、パラメータとしては下記を前提とします。適宜、ご自身の環境のものと読み替えてください。

項目 備考
Twilioの電話番号 (From) +8150xxxxxxxx 050-xxxx-xxxx
架電先電話番号 (To) +8190yyyyyyyy 090-yyyy-yyyy
アカウント SID ACxxxx1234xxxxEXAMPLExxxx1234xxxx1
認証トークン nnnn5678nnnn5678nnnn5678nnnn5678

まずは標準の声(Basic Voice)を聞く

まずは従来の音声の場合です。とりあえず女性の声に設定してみました。文面は上述の URL 先にある Amazon Polly の例文にしています。

<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Say language="ja-jp" voice="woman">
      こんにちは、外国語を話せますか? 世界にはたくさんの言語があります。womanでした。
    </Say>
</Response>

この XML(TwiML)を、Twimlet echo を使って使えるように変換します。

上述した echo の URL にある TwiML: のフォームに上記の XML を貼り付けると、そのしたの Resulting URL にエンコードされた文字列が出力されます。

http://twimlets.com/echo?Twiml=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3CResponse%3E%0A%20%20%20%20%3CSay%20language%3D%22ja-jp%22%20voice%3D%22woman%22%3E%0A%20%20%20%20%20%20%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E5%A4%96%E5%9B%BD%E8%AA%9E%E3%82%92%E8%A9%B1%E3%81%9B%E3%81%BE%E3%81%99%E3%81%8B%3F%20%E4%B8%96%E7%95%8C%E3%81%AB%E3%81%AF%E3%81%9F%E3%81%8F%E3%81%95%E3%82%93%E3%81%AE%E8%A8%80%E8%AA%9E%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82woman%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%3C%2FSay%3E%0A%3C%2FResponse%3E&

こちらを Twilio に送りつけるかたちになります。curl を使って、ターミナルに貼り付けて使えるようなスクリプトで書いてみました。

(
  TWILIO_FROM="+8150xxxxxxxx"
  TWILIO_TO="+8190yyyyyyyy"
  ACCOUNT_SID="ACxxxx1234xxxxEXAMPLExxxx1234xxxx1" # アカウント SID
  AUTH_TOKEN="nnnn5678nnnn5678nnnn5678nnnn5678" # 認証トークン

  # Twimlit echo を使って生成した URL
  ECHO_URL='http://twimlets.com/echo?Twiml=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3CResponse%3E%0A%20%20%20%20%3CSay%20language%3D%22ja-jp%22%20voice%3D%22woman%22%3E%0A%20%20%20%20%20%20%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E5%A4%96%E5%9B%BD%E8%AA%9E%E3%82%92%E8%A9%B1%E3%81%9B%E3%81%BE%E3%81%99%E3%81%8B%3F%20%E4%B8%96%E7%95%8C%E3%81%AB%E3%81%AF%E3%81%9F%E3%81%8F%E3%81%95%E3%82%93%E3%81%AE%E8%A8%80%E8%AA%9E%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82woman%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%3C%2FSay%3E%0A%3C%2FResponse%3E&'

  curl -X POST https://api.twilio.com/2010-04-01/Accounts/${ACCOUNT_SID}/Calls.json \
    --data-urlencode "From=${TWILIO_FROM}" \
    --data-urlencode "To=${TWILIO_TO}" \
    --data-urlencode "Url=${ECHO_URL}" \
    -u ${ACCOUNT_SID}:${AUTH_TOKEN}
)

ECHO_URL のところが見難くて恐縮ですが、(から)までを選択してターミナルにコピペしエンターキーを叩いてください。 TWILIO_TO に指定した電話番号に電話がかかってくるかと思います。

電話に出たら、(個人的には)聞き慣れた Twilio の定番の声色でメッセージを聞くことができます。

ちなみにこちらのコードは、下記ドキュメントを参考にしました。

Mizuki さんに代わってもらう

では交代してもらいましょう。voice の指定を Polly.Mizuki に変更するだけです。

<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Say language="ja-jp" voice="Polly.Mizuki">
      こんにちは、外国語を話せますか? 世界にはたくさんの言語があります。Polly.Mizukiでした。
    </Say>
</Response>

Twimlet echo によって変換された URL がこちらになるので、

http://twimlets.com/echo?Twiml=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3CResponse%3E%0A%20%20%20%20%3CSay%20language%3D%22ja-jp%22%20voice%3D%22Polly.Mizuki%22%3E%0A%20%20%20%20%20%20%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E5%A4%96%E5%9B%BD%E8%AA%9E%E3%82%92%E8%A9%B1%E3%81%9B%E3%81%BE%E3%81%99%E3%81%8B%3F%20%E4%B8%96%E7%95%8C%E3%81%AB%E3%81%AF%E3%81%9F%E3%81%8F%E3%81%95%E3%82%93%E3%81%AE%E8%A8%80%E8%AA%9E%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82Polly.Mizuki%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%3C%2FSay%3E%0A%3C%2FResponse%3E&

スクリプトはこうですね。変更点は ECHO_URL のところだけです。

(
  TWILIO_FROM="+8150xxxxxxxx"
  TWILIO_TO="+8190yyyyyyyy"
  ACCOUNT_SID="ACxxxx1234xxxxEXAMPLExxxx1234xxxx1" # アカウント SID
  AUTH_TOKEN="nnnn5678nnnn5678nnnn5678nnnn5678" # 認証トークン

  # Twimlit echo を使って生成した URL
  ECHO_URL='http://twimlets.com/echo?Twiml=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3CResponse%3E%0A%20%20%20%20%3CSay%20language%3D%22ja-jp%22%20voice%3D%22Polly.Mizuki%22%3E%0A%20%20%20%20%20%20%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E5%A4%96%E5%9B%BD%E8%AA%9E%E3%82%92%E8%A9%B1%E3%81%9B%E3%81%BE%E3%81%99%E3%81%8B%3F%20%E4%B8%96%E7%95%8C%E3%81%AB%E3%81%AF%E3%81%9F%E3%81%8F%E3%81%95%E3%82%93%E3%81%AE%E8%A8%80%E8%AA%9E%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82Polly.Mizuki%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%3C%2FSay%3E%0A%3C%2FResponse%3E&'

  curl -X POST https://api.twilio.com/2010-04-01/Accounts/${ACCOUNT_SID}/Calls.json \
    --data-urlencode "From=${TWILIO_FROM}" \
    --data-urlencode "To=${TWILIO_TO}" \
    --data-urlencode "Url=${ECHO_URL}" \
    -u ${ACCOUNT_SID}:${AUTH_TOKEN}
)

先ほどと同じように Twilio の API を叩いてみて下さい。Mizuki さんの声が聞こえてきたでしょうか。

男性の声がいい! という話であれば、voice の指定を Polly.Takumi にすると Takumi さんの声になります。

簡単ですね!

もちろん言語を変更すれば、Polly の他のボイスを使うことも可能です。上述した こちらの記事 を参考にしてみて下さい。

その他

コストですが、Amazon Polly の利用料金は Twilio のコストに上乗せになります。とはいえ、上述した URL からすると、非常にリーズナブルといってよい金額かと思います。

<Say>のAmazon Pollyは、100文字ごとに 0.12円で利用できます。自動ボリュームディスカウントも適用されます。

またブログによると、今後 SSML (Speech Synthesis Markup Language) にも対応していくとのことです。

まとめ

大規模な改修を伴うことなく、Twilio に渡す XML を書き換えるだけで、声色を Mizuki さんに変更することが出来ました。Basic Voice もよいですが、もし変化が欲しいということでしたら、新しい Polly の音声も検討してみて下さい。