IBM Cloud Docs
如何修改语音合成

如何修改语音合成

IBM Watson® Text to Speech 服务提供的表达性神经声音提供了一些其他功能,这些功能不可用于其他类型的声音: 使用说话样式强调插词强调单词。 HTTP 和 WebSocket 界面均提供这些功能。

这些功能涉及使用语音合成标记语言 (SSML) 的元素。 这些功能部件的描述提供了有关它们如何与相关 SSML 元素和属性进行交互的信息。

使用演讲样式

表现力神经声音从其单词和短语的上下文中决定文本的情绪。 他们所产生的讲话,除了具有非常对话式的风格外,还反映了文本的意境。 表达的声音在默认情况下自然会表达感恩,感恩,幸福,同情,困惑以及其他情感,没有显性的额外标记。

但是,您可以使用具有必需 style 属性的 <express-as> 元素来修饰声音的自然倾向,以指示所有或部分文本都要强调特定特征。 这些特征被称为说话风格:

  • cheerful-表示快乐和好消息。 风格乐观,欢迎,传达积极的信息。
  • empathetic-表示同情和同情。 这种风格有同情的底色,但并不过分悲伤。
  • neutral-表示客观性和均衡性。 风格力求少一些情感,反而传达出更均衡,更有指导性的语气。
  • uncertain-表示不确定和混淆。 风格传达的是不放心或有疑问的感觉。

在很多情况下,风格的效果是非常微妙的。 在这种情况下,这些差异可能无法从默认的表达语气中轻易辨别出来。 但有些情况下,这种风格可以有声地增强声音内在的检测和表达情感的能力。 这些差异通常只能在某些单词和短语上检测到。

使用 SSML 表达发言样式

以下 HTTP 请求使用 <express-as> 元素和 stylecheerful 来修改整个输入文本的说话风格。 此示例使用 en-US_EmmaExpressive 语音。

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--output full-cheerful-style.wav \
--data "{\"text\":\"<express-as style='cheerful'>Oh, that's good news! I am very happy for you!</express-as>\"}" \
"{url}/v1/synthesize?voice=en-US_EmmaExpressive"

IBM Cloud Pak for Data IBM Software Hub

curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--output full-cheerful-style.wav \
--data "{\"text\":\"<express-as style='cheerful'>Oh, that's good news! I am very happy for you!</express-as>\"}" \
"{url}/v1/synthesize?voice=en-US_EmmaExpressive"

以下示例 HTTP 请求仅对请求的第一句使用了 cheerful 样式。 第二句是用默认的语音说话。 此示例再次使用 en-US_EmmaExpressive 语音。

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--output partial-cheerful-style.wav \
--data "{\"text\":\"<express-as style='cheerful'>Oh, that's good news!</express-as> Do you need any further help?\"}" \
"{url}/v1/synthesize?voice=en-US_EmmaExpressive"

IBM Cloud Pak for Data IBM Software Hub

curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--output partial-cheerful-style.wav \
--data "{\"text\":\"<express-as style='cheerful'>Oh, that's good news!</express-as> Do you need any further help?\"}" \
"{url}/v1/synthesize?voice=en-US_EmmaExpressive"

强调拒绝

当您使用表现力神经声音时,服务会根据上下文自动检测许多常见的猜想。 在产生的音频中,它给他们提供了人类在正常对话中使用的自然强调。 表现力声音支持基于语言的一组不同的猜想。 请参阅特定于语言的页面,以获取有关支持这些拒绝的更多详细信息。

使用 SSML 启用或禁用拒绝

该服务始终按预期解释和声明大多数插句。 但是,存在一些可以在不同上下文中使用的推测。 在此类情况下,缺省情况下,服务的缺省行为是禁用此类拒绝。 您可以使用 SSML 来启用或禁用此类拒绝。 SSML <say-as> 元素的 interpret-as 属性接受附加值 interjection。 将 interpret-as 属性与 interjection 值配合使用时,将包含值为 truefalse 的附加 enabled 属性,以指示是否将该词作为注入发音。 每种语言都有不同的插话子集,可以通过 SSML 来启用/禁用这些插话。 请参阅特定于语言的页面,以获取有关可使用 SSML 启用/禁用哪些拒绝的更多详细信息。

以下示例 HTTP 请求指示服务不要将 ohaha 作为感叹词发音。 此示例使用 en-US_AllisonExpressive 语音。

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--output disabled-interjections.wav \
--data "{\"text\":\"<say-as interpret-as='interjection' enabled='false'>Oh</say-as>, in addition, the <say-as interpret-as='interjection' enabled='false'>aha</say-as> wasp is endemic to Australia.\"}" \
"{url}/v1/synthesize?voice=en-US_AllisonExpesssive"

IBM Cloud Pak for Data IBM Software Hub

curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--output disabled-interjections.wav \
--data "{\"text\":\"<say-as interpret-as='interjection' enabled='false'>Oh</say-as>, in addition, the <say-as interpret-as='interjection' enabled='false'>aha</say-as> wasp is endemic to Australia.\"}" \
"{url}/v1/synthesize?voice=en-US_AllisonExpesssive"

强调词语

所有表达的声音都使用对话式风格,从上下文中自然地应用正确的调音。 但是,您可以使用 SSML <emphasis> 元素来指示要在合成音频中对一个或多个词进行更多或更少的强调。 应力的变化可以通过音高,定时,音量或其他声学属性的增加或减少来指示。

<emphasis> 元素支持接受下列其中一个值的可选 level 属性:

  • none-阻止服务强调可能被强调的文本。
  • moderate-提供明显的文本强调。 如果省略 level 属性,那么此值是缺省值。
  • strong-提供比 moderate 级别提供的更重要的文本强调。
  • reduced-通过倾向于降低文本在音频中的显着性来取消强调文本。 这个层次与强调文本是相反的。

表 3 提供了 emphasis 元素的每个可用 level 的示例。 样本使用 en-US_MichaelExpressive 语音。 如果指定的级别不是其中一个受支持的值,那么使用 emphasis 元素的请求将失败。

强调词语
强调程度 示例语句 音频样本
不强调 "I am going to give her the book."
none "I am going to give her the <emphasis level='none'>book</emphasis>."
moderate "I am going to <emphasis level='moderate'>give</emphasis> her the book."
strong "I am going to <emphasis level='strong'>give</emphasis> her the book."
reduced "I <emphasis level='reduced'>am going to give</emphasis> her the book."

使用 SSML 强调一个词

以下示例 HTTP 请求使用 <emphasis> 元素和 levelmoderate (默认值)来强调句子中的 give 一词。 此示例使用 en-US_MichaelExpressive 语音。

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--output strong-emphasis.wav \
--data "{\"text\":\"I am going to <emphasis level='moderate'>give</emphasis> her the book.\"}" \
"{url}/v1/synthesize?voice=en-US_MichaelExpesssive"

IBM Cloud Pak for Data IBM Software Hub

curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--output strong-emphasis.wav \
--data "{\"text\":\"I am going to <emphasis level='moderate'>give</emphasis> her the book.\"}" \
"{url}/v1/synthesize?voice=en-US_MichaelExpesssive"