4.1 KiB
文本转语音 - 虚拟物联网设备
在本节课程中,您将编写代码,通过语音服务将文本转换为语音。
将文本转换为语音
您在上一节课中使用的语音服务 SDK 可以将语音转换为文本,同样也可以将文本转换回语音。在请求语音时,您需要提供使用的语音,因为语音可以通过多种不同的声音生成。
每种语言都支持一系列不同的声音,您可以通过语音服务 SDK 获取每种语言支持的声音列表。
任务 - 将文本转换为语音
-
在 VS Code 中打开
smart-timer
项目,并确保虚拟环境已在终端中加载。 -
从
azure.cognitiveservices.speech
包中导入SpeechSynthesizer
,将其添加到现有的导入中:from azure.cognitiveservices.speech import SpeechConfig, SpeechRecognizer, SpeechSynthesizer
-
在
say
函数上方,创建一个语音配置以供语音合成器使用:speech_config = SpeechConfig(subscription=speech_api_key, region=location) speech_config.speech_synthesis_language = language speech_synthesizer = SpeechSynthesizer(speech_config=speech_config)
这使用了与识别器相同的 API 密钥、位置和语言。
-
在其下方添加以下代码以获取语音并将其设置到语音配置中:
voices = speech_synthesizer.get_voices_async().get().voices first_voice = next(x for x in voices if x.locale.lower() == language.lower()) speech_config.speech_synthesis_voice_name = first_voice.short_name
这会检索所有可用语音的列表,然后找到与正在使用的语言匹配的第一个语音。
💁 您可以从 Microsoft Docs 上的语言和语音支持文档 获取支持的语音的完整列表。如果您想使用特定的语音,可以移除此函数并将语音名称硬编码为文档中的语音名称。例如:
speech_config.speech_synthesis_voice_name = 'hi-IN-SwaraNeural'
-
更新
say
函数的内容以生成响应的 SSML:ssml = f'<speak version=\'1.0\' xml:lang=\'{language}\'>' ssml += f'<voice xml:lang=\'{language}\' name=\'{first_voice.short_name}\'>' ssml += text ssml += '</voice>' ssml += '</speak>'
-
在其下方,停止语音识别,播放 SSML,然后重新启动识别:
recognizer.stop_continuous_recognition() speech_synthesizer.speak_ssml(ssml) recognizer.start_continuous_recognition()
在播放文本时停止识别,以避免计时器启动的语音被检测到并发送到 LUIS,可能会被解释为设置新计时器的请求。
💁 您可以通过注释掉停止和重新启动识别的代码来测试这一点。设置一个计时器,您可能会发现语音播报会设置一个新计时器,从而导致新的播报,继而设置新的计时器,如此循环往复!
-
运行应用程序,并确保函数应用程序也在运行。设置一些计时器,您会听到语音响应,告诉您计时器已设置,然后在计时器完成时会有另一个语音响应。
💁 您可以在 code-spoken-response/virtual-iot-device 文件夹中找到此代码。
😀 您的计时器程序大获成功!
免责声明:
本文档使用AI翻译服务Co-op Translator进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而导致的任何误解或误读,我们概不负责。