背景
先日行われたAlexaスキルアワード2019のハッカソンにて、レスポンスを英語で返すスキルを開発していたところ、流暢な英語を話させる為にちょっとしたハック?が必要で苦労した。
目的
SSML
を使ってスキル内の一部のレスポンスを流暢な英語にする。
※ SSMLは音声の速さや強弱などをHTMLライクに制御できる音声合成マークアップ言語
です。
langタグで素直に指定してみる
現状リージョンが日本のアレクサスキルでユーザー側が英語で入力する事は不可能だが、SSML
のlang
タグを使ってスキルからのレスポンスはネイティブ英語にできると聞いていたので、以下のようにen-US
を指定して試してみた。
<speak>
<lang xml:lang="en-US">Hello world</lang>
</speak>
あれ?カタコト英語になっちゃう。。。
普通にこれでいけそうだけど??
ドキュメントを読み返す
よくよくドキュメントを読み返していると衝撃的な事実が。
Alexaはスキルの元の言語で利用できるサウンドを使用して発音します。このため、ネイティブスピーカーとまったく同じようには聞こえない可能性があります。langタグだけを使用した場合よりも自然な音声にするには、langタグとvoiceタグを一緒に使います。
日本語の音素を元にネイティブ英語を精製しようとしていたわけですね。それは厳しいですね。。
voiceタグを使って記述を修正する
<speak>
<voice name="Joey">
<lang xml:lang="en-US">Hello world</lang>
</voice>
</speak>
これでバッチリいけました!
Joey
という声サンプルを使ってますが、ベースの音素が増えて英語を流暢に話してくれるようです。
ちなみにen-US
の声のラインナップは以下になっています。
- Ivy
- Joanna
- Joey
- Justin
- Kendra
- Kimberly
- Matthew
- Salli
まとめ
ドキュメントを読めばちゃんと書いてあるのですが、地味に苦労したので記事にしておきました。
肝心のハッカソンは全然ダメだったのでもっと技術力を上げてリベンジします。