発話の制御:SSMLの利用

音声合成マークアップ言語(Speech Synthesis Markup Language / SSML)を利用すると、デジタルヒューマンの声色や発声をより細かく制御することができます。

SSMLはXMLベースのマークアップ言語であり、これにより開発者はデジタルヒューマンのTTS(Text-to-Speech)を使用して、入力テキストを合成音声に変換する方法を指定できます。

プレーンテキストと比較して、SSMLでは開発者が音声合成出力のピッチ、読み方、読み上げ速度、音量などを微調整できます。通常の句読点は自動的に処理されますが、ピリオドの後の一時停止や疑問符で終わる文のイントネーションなど、正しい使用法にも対応しています。

すべてのTTSプロバイダが全てのSSMLをサポートしているわけではなく、ほとんどのプロバイダはSSML仕様で定義されている一部のタグのみをサポートしています。設定する際にはTTSプロバイダのSSMLガイドラインに従ってください。

 

SSML

SSMLは引き続き完全にサポートされています。SynAnimおよびSSMLの使用の最も簡単な例:

<speak><uneeq:emotion_joy_normal />Hello!</speak>
 

以下は、AzureのSSMLをそのニューラルボイスの一つと共に使用した、より複雑な例です。複数のuneeq:タグを使用できること、またそれらは"voice"タグ内に配置されるが、"prosody"のように"voice"タグ内に含めることができる他の要素の外側に配置されることに注意してください。

<speak xmlns=\"http://www.w3.org/2001/10/synthesis\" xmlns:mstts=\"http://www.w3.org/2001/mstts\" xmlns:emo=\"http://www.w3.org/2009/10/emotionml\" version=\"1.0\" xml:lang=\"en-US\">
  <voice name=\"en-US-JennyMultilingualNeural\">
    <uneeq:action_wavingcalm/>Hey!
  </voice>
  <voice name=\"en-US-JennyMultilingualNeural\">
    <uneeq:emotion_joy_normal />
      <prosody rate=\"+5.00%\" pitch=\"+2.00%\" contour=\"(0%,-0%)\">
        <lang xml:lang=\"en-US\">It’s great to see you.</lang>
      </prosody>
  </voice>
  <voice name=\"en-US-JennyMultilingualNeural\">
    <uneeq:emotion_anticipation_normal />
      <prosody rate=\"+5.00%\" pitch=\"+2.00%\" contour=\"(0%,-0%)\">
        <lang xml:lang=\"en-US\">I’m Sophie.</lang>
      </prosody>
  </voice>
  <voice name=\"en-US-JennyMultilingualNeural\">
    <uneeq:emotion_joy_strong/> I’m here to help out with some recommendations.
  </voice>
  <voice name=\"en-US-JennyMultilingualNeural\">
    <uneeq:emotion_joy_normal />
      <prosody rate=\"+5.00%\" pitch=\"+2.00%\" contour=\"(70%, -0%) (80%,-30%) (100%,+50%)\">
        <lang xml:lang=\"en-US\">How can I help today?</lang>
    </prosody>
  </voice>
</speak>
<speak xmlns=\"http://www.w3.org/2001/10/synthesis\" xmlns:mstts=\"http://www.w3.org/2001/mstts\" xmlns:emo=\"http://www.w3.org/2009/10/emotionml\" version=\"1.0\" xml:lang=\"en-US\">
  <voice name=\"en-US-JennyMultilingualNeural\">
    <uneeq:action_wavingcalm/>やあ!
  </voice>
  <voice name=\"en-US-JennyMultilingualNeural\">
    <uneeq:emotion_joy_normal />
      <prosody rate=\"+5.00%\" pitch=\"+2.00%\" contour=\"(0%,-0%)\">
        <lang xml:lang=\"en-US\">会えて嬉しいです。</lang>
      </prosody>
  </voice>
  <voice name=\"en-US-JennyMultilingualNeural\">
    <uneeq:emotion_anticipation_normal />
      <prosody rate=\"+5.00%\" pitch=\"+2.00%\" contour=\"(0%,-0%)\">
        <lang xml:lang=\"en-US\">私はソフィーです。</lang>
      </prosody>
  </voice>
  <voice name=\"en-US-JennyMultilingualNeural\">
    <uneeq:emotion_joy_strong/> お手伝いをするためにここにいます。
  </voice>
  <voice name=\"en-US-JennyMultilingualNeural\">
    <uneeq:emotion_joy_normal />
      <prosody rate=\"+5.00%\" pitch=\"+2.00%\" contour=\"(70%, -0%) (80%,-30%) (100%,+50%)\">
        <lang xml:lang=\"en-US\">今日はどうやってお手伝いできますか?</lang>
    </prosody>
  </voice>
</speak>
 

各社のSSML仕様ページ

Azure Text to Speech
SynAnim対応
Amazon Poly
SynAnim対応
Google Text-to-Speech
NAVER CLOVA Voice
未対応
Watson Text to Speech
CoeFont
未対応
AITalk
ReadSpeaker
一部対応(管理画面ログイン後にドキュメントがあります)
 

SSMLを使用している場合は、<speak>タグの中にビヘイビアタグが含まれていることを確認する必要があります。

<speak>
 <uneeq:happy>Good morning! What can I help you with today?</uneeq:happy>
</speak>
 

<uneeq:behavior>タグと、TTSプロバイダがサポートしているSSMLタグと組み合わせることで、デジタルヒューマンの行動や発話に複数の効果を適用することができます。

 

Google TTSを使用する場合

Google TTSを使用している場合、<uneeq:behavior>タグが他のSSMLタグの中に入れ子になっていないことを確認してください。さらに、<uneeq:behavior>タグは、<speak>タグの後ろに入れることが必要です。

Google TTSを使ったSSMLの正しい使い方

<speak>
  <uneeq:excited>
      <prosody rate="high" pitch="+2st">This is how I speak when I’m excited!</prosody>
  </uneeq:excited>
  <uneeq:happy>
      <s>This is how I speak when I’m happy.</s>
  </uneeq:happy>
</speak>
 
Google TTSを使ったSSMLの間違った使い方

<speak>
    <s>
        <uneeq:excited>This is how I speak when I’m excited!</uneeq:excited>
    </s>
    <s>
        <uneeq:happy>This is how I speak when I’m happy.</uneeq:happy>
    </s>
</speak>
 

Azure TTSを使用する場合

SynAnimを動かすためにはAzure TTSを利用する必要があります。Azure TTSを利用する婆は下記の様に設定するとSSMLが利用できます。

# 発話速度(話速)を半分にして、途中に650msの中断を入れる場合
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="ja-JP">
    <voice name="ja-JP-NanamiNeural">
        <prosody rate="-50%">This is
            <break time="650ms" />すごいですね!
        </prosody>
    </voice>
</speak>
# 発話速度(話速)を10%上げて、カメラを顔にズームする場合
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="ja-JP">
    <voice name="ja-JP-NanamiNeural">
        <prosody rate="10%">
# 話者のStyleを変更する場合
<speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xmlns:emo="http://www.w3.org/2009/10/emotionml" version="1.0" xml:lang="ja-JP">
    <voice name="ja-JP-NanamiNeural">
        <s />
            <mstts:express-as style="cheerful">uttrance_str(ここに発話するテキストが入る)</mstts:express-as>
        <s />
    </voice>
</speak>
 

その他のTTSプロバイダー

Google TTSを使ったSSMLとは違った使い方が必要な場合があります。

正しい使い方 例1
<speak>
  <amazon:domain name="conversational">
    <uneeq:excited>This is how I speak when I’m excited!</uneeq:excited>
    <uneeq:happy>This is how I speak when I’m happy</uneeq:happy>
  </amazon:domain>
</speak>
正しい使い方 例2
<speak>
    <s>
        <uneeq:excited>This is how I speak when I’m excited!</uneeq:excited>
    </s>
    <s>
        <uneeq:happy>This is how I speak when I’m happy.</uneeq:happy>
    </s>
</speak>

お役に立ちましたか?
😞
😐
🤩

最終更新日 November 6, 2023