(使用Python)我一直在尝试使用Azure使用多语言语音将斯洛文尼亚语文本转换为语音,但是他们中的许多人都有将文本误认为英语的习惯,并且不时返回乱码的“美国口音”。我还怀疑它可能会错误地发音一些句子,认为它们是克罗地亚语。我有:
speech_config.speech_synthesis_language = “sl-SI”
因此缺乏一致的输出是意外的。我已经在逐句和逐段的基础上进行了尝试,无论出于何种原因,某些句子将无法正确阅读,即使同一通话中的所有其他句子都可以正确阅读。
如何避免这种情况?
使用文字转语音时,输入的文字会被误认为是英文,如下图所示:
我们必须使用语音合成标记语言(SSML)来控制语言或口音。
Azure 文本转语音中的多语言语音可以自动检测输入文本的语言。但是,使用
<lang xml:lang="string"></lang>
SSML 标签允许您指定特定的 语言,如下所示:
ssml_text = """
<speak xmlns="http://www.w3.org/2001/10/synthesis" version="1.0" xml:lang="sl-SI">
<voice name="sl-SI-PetraNeural">
Pozdravljeni, kako ste danes? Veseli me, da lahko uporabljate Azure Text to Speech.
</voice>
</speak>
"""
下面的示例是使用 SSML 的斯洛文尼亚语文本转语音。
ssml_text = """
<speak xmlns="http://www.w3.org/2001/10/synthesis" version="1.0" xml:lang="sl-SI">
<voice name="sl-SI-PetraNeural">
Pozdravljeni, kako ste danes? Veseli me, da lahko uporabljate Azure Text to Speech.
</voice>
</speak>
"""
斯洛文尼亚语(斯洛文尼亚)的语言代码
sl-SI
。 Azure 为该语言提供了两种语音:
sl-SI-PetraNeural
(女)和 sl-SI-RokNeural
(男)
下面是斯洛文尼亚语文本转语音合成的 Python 脚本示例:
import os
import azure.cognitiveservices.speech as speechsdk
speech_config = speechsdk.SpeechConfig(
subscription=os.environ.get("SPEECH_KEY"),
region=os.environ.get("SPEECH_REGION")
)
speech_config.speech_synthesis_voice_name = "sl-SI-PetraNeural"
audio_config = speechsdk.audio.AudioOutputConfig(use_default_speaker=True)
speech_synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=audio_config)
ssml_text = """
<speak xmlns="http://www.w3.org/2001/10/synthesis" version="1.0" xml:lang="sl-SI">
<voice name="sl-SI-PetraNeural">
Pozdravljeni, kako ste danes? Veseli me, da lahko uporabljate Azure Text to Speech.
</voice>
</speak>
"""
speech_synthesis_result = speech_synthesizer.speak_ssml_async(ssml_text).get()
if speech_synthesis_result.reason == speechsdk.ResultReason.SynthesizingAudioCompleted:
print("Speech synthesized successfully.")
elif speech_synthesis_result.reason == speechsdk.ResultReason.Canceled:
cancellation_details = speech_synthesis_result.cancellation_details
print(f"Speech synthesis canceled: {cancellation_details.reason}")
if cancellation_details.reason == speechsdk.CancellationReason.Error:
print(f"Error details: {cancellation_details.error_details}")