用於 TTS 的 SSML

Cloud TTS Hub支援使用語音合成標記語言 (SSML)。 SSML 是一種基於 XML 的標記語言,允許您指定文字如何被合成為語音的諸多方面。 您可以用它來微調發音、語速、音調、音量等等。

SSML 提供標準標記語言,但各個提供程式在實現方式上可能存在差異。 您需要使用 TTS 提供程式支援的標記在您的 TTS 腳本中。 其他 TTS 標記可能無法使用。 有關特定於該提供者的任何 SSML 變體或要求的資訊,請參閱 TTS 服務提供者提供的文件。

要使用 SSML,輸入文字必須是:

  • 有效的 XML
  • 有效的 SSML
  • 包含在一組 <speak> </speak>標記中
  • 用每個只有一個屬性的標記進行標記(包括 <speak> 標記)。
  • 指派給指令碼中動態資料物件或SNIPPET 動作中的變數。 您為標記的文字指派到的物件或變數必須稍後在指令碼中的適當位置使用,以便傳遞給 TTS 服務提供者。 請參閱本節後面的範例。 在代碼段中使用 SSML 時:

包含 SSML 的 TTS 指令碼應類似於以下範例:

使用 SSML 的 TTS 指令碼的圖像,其中 BEGIN、CLOUD TTS、SNIPPET 和 PLAY 動作連結在一起。

在此範例中,CLOUD TTS 動作定義Cloud TTS Hub TTS 提供程式和語音。 SNIPPET 操作包含標記的 SSML 文字。 SSML 文字被分配給一個變數,該變數作為提示序列傳遞給PLAY 動作。 如果您將此選項用於虛擬客服,您將使用VOICEBOT EXCHANGE 動作而不是PLAY

SSML 中每個標籤一個屬性的範例

此示例顯示 SSML 標記每個標記只能有一個屬性。

<speak xml:lang="en-US">

<voice name="en-US-JennyNeural"> Good morning Chris! </voice>

<voice name="en-US-ChristopherNeural"> Good morning to you too, Jenny! </voice>

</speak>

SSML 中具有不同標記的多個句子的範例

此示例顯示使用 SSML 標記的文字,該文字在<speak>..之間包含多個句子 </speak>標記。

<speak xml:lang="en-US">

Here are <say-as interpret-as="characters">SSML</say-as> samples. I can pause <break time="3s"/>.

I can say cardinal numbers. This number is <say-as interpret-as="cardinal">1135</say-as>.

Or I can say ordinal numbers. You are <say-as interpret-as="ordinal">1135</say-as> in line.

I can even say numbers as digits. The digits are <say-as interpret-as="characters">1135</say-as>.

I can also substitute phrases, like the <sub alias="World Wide Web Consortium">W3C</sub>.

</speak>

程式碼片段代碼中帶有標記文字的動態資料物件範例

此範例說明如何將標有 SSML 的文字分配給動態資料物件。

DYNAMIC promptSSML
ASSIGN promptSSML.prompt[1].textToSpeech = "<speak>The SSML should be read in the TTS voice selected in the CLOUD TTS action.\<speak\>";
ASSIGN promptSSMLJSON = "{promptSSML.asjson()}";

在程式碼片段代碼中指派給單個變數的一條訊息的範例

此示例演示如何將標有 SSML 的文字分配給變數。

ASSIGN playSSML = "<speak xml:lang='en-US'>Here are the SSML samples. Here are <say-as interpret-as='characters'>SSML</say-as> samples. I can pause <BREAK time='3s'/>. I can say cardinal numbers. This number is <say-as interpret-as='cardinal'>1135</say-as> Or I can say ordinal numbers. You are <say-as interpret-as='ordinal>1135</say-as> IN line. I can even say numbers as digits. The digits are <say-as interpret-as='characters'>1135</say-as>. I can also substitute phrases, like the <sub alias='World Wide Web Consortium'>W3C</sub>. </speak>"

SNIPPET 代碼中一條訊息分佈在多個變數的範例

此示例演示如何使用多個變數來定義您希望 TTS 朗讀的文字片段。 myText2 的值包括myText的文字。 myText3 的文字包括 myText2 的值,其中包括 myText 的值,依此類推。

 ASSIGN myTime = "2:30pm"
ASSIGN myText = "<speak> Here are some examples of what CXone can do with SSML and cloud TTS.  CXone can include a break <break time=3s/> in a spoken sentence as well as read back numbers in different ways."
ASSIGN myText2 = "{myText} for example, saying the number <say-as interpret-as=verbatim>12345</say-as> as individual digits or reading it as a cardinal number like this. <say-as interpret-as=cardinal>12345</say-as> ."
ASSIGN myText3 = "{myText2} CXone can also read back words as words or as individual characters <say-as interpret-as=characters>like this</say-as> ."
ASSIGN myText4 = "{myText3} CXone can also use SSML to slow down spoken sentences. <prosody rate=70%> to help people better understand something that's being said </prosody> "
ASSIGN myText5 = "{myText4} or speed them up <prosody rate=170%> where, for example, the fine print of an agreement can be read back in a short amount of time. </prosody> " 
ASSIGN myText6 = "{myText5} Combining SSML and cloud TTS, CXone can also be used for many other things, like reading back time correctly like this.  Currently, it's<say-as interpret-as=time format=hms24 detail=2>{myTime}</say-as></speak>"