IBM Cloud Docs
修改语音合成特征

修改语音合成特征

IBM Watson® Text to Speech 服务包含可用于全局修改整个请求的语音合成特征的查询参数: rate_percentagepitch_percentagespell_out_mode。 这些参数适用于 HTTP 和 WebSocket 界面。

其中每个参数都与语音合成标记语言 (SSML) 的元素进行交互。 这些参数的描述包括有关它们如何与相关 SSML 元素和属性进行交互的信息。

修改发言率

rate_percentage 参数是 Beta 功能。

说话速率是服务将其合成为语音的文本说话的速度。 更高的速率会使文本被讲得更快; 更低的速率会使文本被讲得更慢。

您可以使用可选的 rate_percentage 查询参数来修改语音的合成语音速率。 每个语音都有一个缺省的语言率,该语言率经过优化以表示正常的语言率。 此参数接受表示语音缺省值的百分比更改的整数:

  • 指定带符号的负整数以将发言率降低该百分比。 例如,-10 将比率降低了 10%。
  • 指定无符号或有符号的正整数以将发言率提高该百分比。 例如,10+10 将速率提高 10%。
  • 指定 0 或省略参数以获取语音的缺省话语率。

确定参数如何影响给定语音的速率的最佳方法是使用不同的值进行实验。 在尝试更重要的更改之前,以递增方式增加或减少 5% 或 10% 的比率。 在降低速率时,小于 -50 的值可能开始产生不适当的发音。 提高速率时,大于 100 的值可能会生成与 100 不明显不同的结果。

表 1 提供了有关服务如何使用 rate_percentage 参数的不同值来更改发言率的示例。 这些示例使用 en-US_AllisonV3Voice

使用 rate_percentage 参数
rate_percentage 参数的规范 音频样本
rate_percentage=0
服务使用缺省发言速率。 您还可以省略该参数以获取缺省行为。
rate_percentage=-20
服务使用速度慢 20% 的话语率。
rate_percentage=20
该服务使用速度加快 20% 的话语率。

与 SSML <prosody> 元素交互

rate_percentage 参数会更改整个请求的发言速率。 您还可以使用 SSML <prosody> 元素的 rate 属性来修改文本的特定词的速率。 虽然 rate_percentage 参数仅接受百分比值,但 rate 属性接受不同格式的值。 有关更多信息,请参阅 rate 属性

如果使用 rate_percentage 参数并且还使用 <prosody> 标记的 rate 属性来修改同一请求的特定文本的速率,那么效果是可乘的。 例如,假设您指定值为 -10rate_percentage 参数,这会使说话率降低 10%。 如果还使用 <prosody> 元素为请求的特定文本指定等效的 rate -10%,那么该文本的通话速率为语音缺省速率的 81%。

发言率示例

下面的 HTTP POST /v1/synthesize 方法使用 rate_percentage 查询参数,值为 -5。 生成的音频以比缺省情况下慢 5% 的速度播放。 此示例使用美国英语语音 en-US_AllisonV3Voice

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--output rate-percentage.wav \
--data "{\"text\":\"This text is spoken five percent slower than the default.\"}" \
"{url}/v1/synthesize?voice=en-US_AllisonV3Voice&rate_percentage=-5"

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 rate-percentage.wav \
--data "{\"text\":\"This text is spoken five percent slower than the default.\"}" \
"{url}/v1/synthesize?voice=en-US_AllisonV3Voice&rate_percentage=-5"

以下 WebSocket 示例显示在建立连接的请求中包含具有相同值的参数:

var access_token = '{access_token}';
var wsURI = '{ws_url}/v1/synthesize'
  + '?access_token=' + access_token
  + '&voice=en-US_AllisonV3Voice'
  + '&rate_percentage=-5';
var websocket = new WebSocket(wsURI);

修改演讲稿

pitch_percentage 参数是 Beta 功能。

说话音高代表服务合成的语音的音高或音高,这也会影响调音。 它代表了听者感知到的声音的音色有多高或有多低。 更高的音高会导致以更高的语气说话的语音,被认为是更高的语音; 更低的音高会导致以更低的语气说话的语音,被认为是更低,更深的语音。

您可以使用可选的 pitch_percentage 查询参数来修改语音的合成语音的间距。 每个声音都有一个反映该声音预期音色的缺省基线音调。 此参数接受表示语音缺省值的百分比更改的整数:

  • 指定带符号的负整数以将间距减小该百分比。 例如,-10 将间距减少 10%。
  • 指定无符号或有符号的正整数以增加该百分比的间距。 例如,10+10 将间距增加 10%。
  • 指定 0 或省略参数以获取语音的缺省间距。

确定参数如何影响给定语音的音高的最佳方法是使用不同的值进行实验。 在尝试更剧烈的更改之前,以递增方式增加或减少 5% 或 10% 的速率。 减小间距时,值 -50 会将基线间距减半; 较小的值可能不会产生可观的结果或肯定的结果。 同样,增大间距时,值 100 将使间距翻倍; 较大的值可能会生成与 100 无法识别的结果。

表 2 提供了有关服务如何使用 pitch_percentage 参数的不同值来更改说话间距的示例。 这些示例使用 en-US_AllisonV3Voice

使用 pitch_percentage 参数
pitch_percentage 参数的规范 音频样本
pitch_percentage=0
该服务使用缺省的演讲间距。 您还可以省略该参数以获取缺省行为。
pitch_percentage=-20
该服务使用低 20% 的演讲间距。
pitch-percentage=20
该服务使用高出 20% 的演讲间距。

与 SSML <prosody> 元素交互

pitch_percentage 参数将更改整个请求的间距。 您还可以使用 SSML <prosody> 元素的 pitch 属性来修改文本的特定词的间距。 虽然 pitch_percentage 参数仅接受百分比值,但 pitch 属性接受不同格式的值。 有关更多信息,请参阅 pitch 属性

如果使用 pitch_percentage 参数并且还使用 <prosody> 标记的 pitch 属性来修改同一请求的特定文本的间距,那么效果是可乘性的。 例如,假设您指定值为 10pitch_percentage 参数,这将使间距增加 10%。 如果还使用 <prosody> 元素为请求的特定文本指定等效的 pitch +10%,那么将使用语音的缺省基线间距的 121% 来表示该文本。

演讲稿示例

下面的 HTTP POST /v1/synthesize 方法使用 pitch_percentage 查询参数,值为 5。 生成的音频使用的音高比缺省值高 5%。 此示例使用美国英语语音 en-US_AllisonV3Voice

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--output pitch-percentage.wav \
--data "{\"text\":\"This text is spoken five percent higher than the default.\"}" \
"{url}/v1/synthesize?voice=en-US_AllisonV3Voice&pitch_percentage=5"

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 pitch-percentage.wav \
--data "{\"text\":\"This text is spoken five percent higher than the default.\"}" \
"{url}/v1/synthesize?voice=en-US_AllisonV3Voice&pitch_percentage=5"

以下 WebSocket 示例显示在建立连接的请求中包含具有相同值的参数:

var access_token = '{access_token}';
var wsURI = '{ws_url}/v1/synthesize'
  + '?access_token=' + access_token
  + '&voice=en-US_AllisonV3Voice'
  + '&pitch_percentage=5';
var websocket = new WebSocket(wsURI);

指定字符串拼写方式

服务的缺省字母,数字和字母数字字符串发音因语言而异,每种语言都有自己的规则。 对于任何语言,发音也取决于字符串的长度和上下文,以及它在其字符的位置和分组方面的组成

  • 如果字母字符串在语音语言中可发音,那么这些字符串将发音为单词。 否则,将单独拼写字符。 字符串是否发音或拼写也可能取决于字母的大小写。
  • 数字字符串可以发音为基数,序数,日期或其他方式,包括单个数字。
  • 包含字母和数字的字母数字字符串可以根据字符串的特征以不同的方式发音。 例如,它们可以发音为单词,基数或数字的组合。 但如前所述,发音很大程度上取决于字符串及其组成。

控制特定字符串发音方式的最佳方法是使用 SSML 的 <say-as> 元素。 该元素允许您精确指定字符串的合成方式。 使用 <say-as> 元素的 interpret-as 属性来指示字符串将发音为 lettersdigits 或以某种其他方式发音。 可用值因语言而异。

如果使用 lettersdigits 属性,那么字符串的所有字母和数字都将单独发音。 这对于拼写十六进制字符串或标识或帐号的字母数字字符特别有用。 有关更多信息,包括特定于语言的差异,请参阅 say-as 元素

指定字符串拼写的速度

spell_out_mode 参数是仅支持德语声音的 Beta 功能。

缺省情况下,服务读取其拼写出来的字符的速率与读取所合成语言的文本的速率相同。 但是,对于德语声音,您可以使用可选的 spell_out_mode 查询参数来指示服务如何拼写单个字符: 一次一个,两个或三个。 此参数全局应用以控制服务从请求中读取所有字符串的速度。 仅对较长的字符串使用 spell_out_mode 参数。 该参数对包含少于三个字符的字符串没有影响。

表 3 提供了有关服务如何使用 spell_out_mode 参数的不同值来指示以下文本的示例:

Die Nummer ist <say-as interpret-as=‘digits’>AB7234987FFA</say-as>.
使用德语拼写输出模式参数
spell_out_mode 参数的规范 音频样本
spell_out_mode=default
服务按其为请求合成语音的速率连续读取字符 (通常不会在字符之间暂停)。 您还可以省略该参数以获取缺省行为。
spell_out_mode=singles
服务一次读取一个字符,每个字符之间有一个短暂的暂停。
spell_out_mode=pairs
服务一次读取两个字符,并在每个对之间短暂暂停。
spell_out_mode=triplets
服务一次读取三个字符,并在每个三元组之间短暂暂停。

混合字母和数字的字母数字字符串可以产生不同的字符分组。 如果不使用 <say-as> 元素,那么可以采用不一定符合所请求方式的方式来发音字母和数字组。

拼写方式示例

下面的 HTTP POST /v1/synthesize 方法使用 spell_out_mode 查询参数,值为 singles。 此示例使用德语语音 de-DE_ErikaV3Voice。 要合成的字母数字文本是包含在 <say-as> 元素中并解释为 digits 的十六进制字符串。

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--output spell-out-mode.wav \
--data "{\"text\":\"Die Nummer ist <say-as interpret-as=‘digits’>AB7234987FFA</say-as>.\"}" \
"{url}/v1/synthesize?voice=de-DE_ErikaV3Voice&spell_out_mode=singles"

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 spell-out-mode.wav \
--data "{\"text\":\"Die Nummer ist <say-as interpret-as=‘digits’>AB7234987FFA</say-as>.\"}" \
"{url}/v1/synthesize?voice=de-DE_ErikaV3Voice&spell_out_mode=singles"

以下 WebSocket 示例显示在建立连接的请求中包含具有相同值的参数:

var access_token = '{access_token}';
var wsURI = '{ws_url}/v1/synthesize'
  + '?access_token=' + access_token
  + '&voice=de-DE_ErikaV3Voice'
  + '&spell_out_mode=singles';
var websocket = new WebSocket(wsURI);