IBM Cloud Docs
使用语音进行语音合成

使用语音进行语音合成

HTTP POSTGET /v1/synthesize 方法以及 WebSocket /v1/synthesize 方法都接受可选的 voice 查询参数。 您可以使用 voice 参数来指定语音合成所使用的语音和语言。 服务根据指定语音的语言来理解输入文本的语言。

请确保指定与输入文本的语言相匹配的声音。 例如,如果指定法语声音 (fr-FR_ReneeV3Voice),服务会期望接收用法语编写的输入文本。 如果传递的文本不是用该声音的语言编写的(例如,对于法语声音,传递了英语文本),那么服务可能无法生成有意义的结果。

指定语音示例

以下示例 HTTP POST 请求使用语音 en-US_AllisonV3Voice 进行语音合成:

IBM Cloud

curl -X POST -u "apikey:{apikey}" \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--data "{\"text\":\"hello world\"}" \
--output hello_world.wav \
"{url}/v1/synthesize?voice=en-US_AllisonV3Voice"

IBM Cloud Pak for Data IBM Software Hub

curl -X POST \
--header "Authorization: Bearer {token}" \
--header "Content-Type: application/json" \
--header "Accept: audio/wav" \
--data "{\"text\":\"hello world\"}" \
--output hello_world.wav \
"{url}/v1/synthesize?voice=en-US_AllisonV3Voice"

以下示例展示了语音合成的等效 HTTP GET 请求:

IBM Cloud

curl -X GET -u "apikey:{apikey}" \
--output hello_world.wav \
"{url}/v1/synthesize?accept=audio%2Fwav&text=hello%20world&voice=en-US_AllisonV3Voice"

IBM Cloud Pak for Data IBM Software Hub

curl -X POST \
--header "Authorization: Bearer {token}" \
--output hello_world.wav \
"{url}/v1/synthesize?accept=audio%2Fwav&text=hello%20world&voice=en-US_AllisonV3Voice"

使用默认语音

如果在请求中省略 voice 参数,服务默认使用美国英语 en-US_MichaelV3Voice。 此默认设置适用于所有语音合成请求和 GET /v1/pronunciation 方法。

IBM Cloud Pak for Data 如果您没有安装xml-ph-0000@deepl.internal,它就不能作为默认语音。IBM Software Hub 如果您没有安装,它不能作为默认语音。en-US_MichaelV3Voice 在这种情况下,您必须

  • 使用 voice 参数传递每个请求要使用的语音。
  • 使用语音服务自定义资源中的 defaultTTSVoice 属性,为您的 IBM Cloud Pak for Data 安装 Text to Speech 指定新的默认语音。 更多信息,请参阅 安装 Watson Text to Speech。

多语言语音合成

该服务目前不支持多语言语音合成。 所有合成都基于 voice 参数指定的语音语言。 根据语言和单词的不同,您可以使用自定义功能来近似发音,从而获得与请求语音不同的语言发音。 有关更多信息,请参阅创建定制模型

如果您决定使用自定义功能来模拟不同语言的读音,请使用 HTTP GET /v1/pronunciation 方法查看单词在其他语言中的读音。 该方法返回服务用于用该语言发音的语音。 更多信息,请参阅“音译”。

您可以调整该方法返回的音素,使其尽可能与您的语言中的音素匹配。 然后,您可以创建一个自定义模型,在其中包含带有该翻译的自定义单词,并将该模型用于您的合成请求。 由于两种不同的语言可能不支持相同的音素,因此可能无法将一种语言的声音和发音与另一种语言的语音符号完全匹配。

语音合成标记语言(SSML) <speak> 元素包含一个 xml:lang 元素,但该元素适用于整个请求,且该服务不支持将其用作指定语音合成不同语言的方式。