文字轉語音 - 虛擬物聯網設備
在本課程的這一部分中,您將編寫代碼以使用語音服務將文字轉換為語音。
將文字轉換為語音
您在上一課中使用的語音服務 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 文件夾中找到此代碼。
😀 您的計時器程序成功了!