Azure 文本转语音 - 以错误语言进行语音朗读

问题描述 投票:0回答:1

(使用Python)我一直在尝试使用Azure使用多语言语音将斯洛文尼亚语文本转换为语音,但是他们中的许多人都有将文本误认为英语的习惯,并且不时返回乱码的“美国口音”。我还怀疑它可能会错误地发音一些句子,认为它们是克罗地亚语。我有:

speech_config.speech_synthesis_language = “sl-SI”

因此缺乏一致的输出是意外的。我已经在逐句和逐段的基础上进行了尝试,无论出于何种原因,某些句子将无法正确阅读,即使同一通话中的所有其他句子都可以正确阅读。

如何避免这种情况?

python azure text-to-speech azure-speech
1个回答
0
投票

使用文字转语音时,输入的文字会被误认为是英文,如下图所示:

enter image description here

我们必须使用语音合成标记语言(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
(男)

请参阅此 doc 了解语音中的语言支持 service

下面是斯洛文尼亚语文本转语音合成的 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}")

Output  for Slovenian text-to-speech synthesis

© www.soinside.com 2019 - 2024. All rights reserved.