[新機能] Amazon Pollyがスピーチマークと囁き声エフェクトに対応しました

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

はじめに

今日はAWS Summit 2017 San Franciscoが開催されていましたので、新機能がたくさん発表されました。この記事で取り上げる新機能はこちら!

スピーチマークに対応

これまでのAmazon Pollyでは、コンテンツを音声ファイルとしてダウンロードすることができました。今回の新機能で、Speech Marksというメタデータで記述されたテキストファイルをダウンロードすることができるようになりました。このメタデータを動画と組み合わせることで、いわゆるリップシンク(口パク)が簡単に作ることが出来ます。

囁き声エフェクトに対応

Amazon PollyではSpeech Synthesis Markup Language (SSML)で発声に豊かな表現を与えることが出来ます。今回は更にPolly独自のエフェクトとしてWhispering(囁き声)が追加されました。この新機能により、更に感情豊かな音声を作成することが出来ます。

やってみた

スピーチマーク

Amazon Pollyの管理コンソールで、以下のようなテキストを入力します。[Change file format]をクリックします。

Amazon_Polly

[Change file format]画面が表示されます。[File format]でSpeech Marksを選択します。また[Speech Marks Types]という項目があります。Sentence(文)、Word(単語)、Viseme(音に対応する顔と位置)、SSMLの4つの種類があります。今回は全部選択しました。最後に[Change]ボタンをクリックします。

Amazon_Polly 2

[Download Speech Marks]ボタンをクリックします。

Amazon_Polly 3

ダウンロードされたファイルの内容がこちらです。

{"time":0,"type":"sentence","start":33,"end":96,"value":"Amazon Polly<\/sub>がスピーチマークに対応しました"}
{"time":6,"type":"word","start":33,"end":45,"value":"Amazon Polly"}
{"time":6,"type":"viseme","value":"p"}
{"time":88,"type":"viseme","value":"o"}
{"time":141,"type":"viseme","value":"r"}
{"time":203,"type":"viseme","value":"i"}
{"time":280,"type":"viseme","value":"t"}
{"time":335,"type":"viseme","value":"a"}
{"time":402,"type":"viseme","value":"k"}
{"time":494,"type":"word","start":51,"end":54,"value":"が"}
{"time":494,"type":"viseme","value":"k"}
{"time":559,"type":"viseme","value":"a"}
{"time":649,"type":"word","start":54,"end":66,"value":"スピーチ"}
{"time":649,"type":"viseme","value":"s"}
{"time":745,"type":"viseme","value":"i"}
{"time":806,"type":"viseme","value":"p"}
{"time":873,"type":"viseme","value":"i"}
{"time":1037,"type":"viseme","value":"J"}
{"time":1148,"type":"viseme","value":"i"}
{"time":1206,"type":"word","start":66,"end":75,"value":"マーク"}
{"time":1206,"type":"viseme","value":"p"}
{"time":1294,"type":"viseme","value":"a"}
{"time":1482,"type":"viseme","value":"k"}
{"time":1568,"type":"viseme","value":"i"}
{"time":1627,"type":"word","start":75,"end":78,"value":"に"}
{"time":1627,"type":"viseme","value":"J"}
{"time":1697,"type":"viseme","value":"i"}
{"time":1767,"type":"word","start":78,"end":84,"value":"対応"}
{"time":1767,"type":"viseme","value":"t"}
{"time":1835,"type":"viseme","value":"a"}
{"time":1926,"type":"viseme","value":"i"}
{"time":1999,"type":"viseme","value":"o"}
{"time":2149,"type":"word","start":84,"end":87,"value":"し"}
{"time":2149,"type":"viseme","value":"J"}
{"time":2220,"type":"viseme","value":"i"}
{"time":2273,"type":"word","start":87,"end":93,"value":"まし"}
{"time":2273,"type":"viseme","value":"p"}
{"time":2332,"type":"viseme","value":"a"}
{"time":2382,"type":"viseme","value":"J"}
{"time":2474,"type":"viseme","value":"i"}
{"time":2521,"type":"word","start":93,"end":96,"value":"た"}
{"time":2521,"type":"viseme","value":"t"}
{"time":2580,"type":"viseme","value":"a"}
{"time":2757,"type":"viseme","value":"sil"}

このメタデータには以下の内容が記載されています。

  • Time ... オーディオストリームの先頭からの時間(ミリ秒単位)</ li>
  • Type ... 発言の種類</ li>
  • Start ... 入力テキストの先頭からのバイト位置</ li>
  • End ... 入力テキストの最後からのバイト位置</ li>
  • Value ... スピーチマークに応じて変化するデータ</ li>

Timeを見ることで、動画ファイルと同期がしやすくなります。また面白いのがVisemeで、例えば「スピーチ」を見てみると...

{"time":649,"type":"word","start":54,"end":66,"value":"スピーチ"}
{"time":649,"type":"viseme","value":"s"}
{"time":745,"type":"viseme","value":"i"}
{"time":806,"type":"viseme","value":"p"}
{"time":873,"type":"viseme","value":"i"}
{"time":1037,"type":"viseme","value":"J"}
{"time":1148,"type":"viseme","value":"i"}

と、口の動きとしては「しぴじ」だとPollyは判断しています。このように、実際の単語に拘ることなく、自然な形で見えるように口の動きを決めているようです。

囁き声エフェクト

囁き声エフェクトは<amazon:effect name = "whispered">というSSML要素で定義します。

<speak>
<amazon:effect name="whispered">ささやき</amazon:effect><break strength="strong" />
<prosody volume="x-soft" rate="x-slow">いのり</prosody><break strength="strong" />
<prosody volume="medium" rate="slow">えいしょう</prosody><break strength="strong" />
<prosody volume="x-loud" rate="fast">ねんじろ!</prosody>
</speak>

するとこんな感じになります。

ぶっちゃけて言うとみずきさんに「す・き」って言わせてニヤニヤしました、すみません。

さいごに

スピーチマークを使うことで、ある程度自然な形でキャラクターに喋らせることができそうです。ぜひやってみたいと思います。