跳至主要内容

文字轉語音 - 虛擬物聯網設備

在本課程的這一部分中,您將編寫代碼以使用語音服務將文字轉換為語音。

將文字轉換為語音

您在上一課中使用的語音服務 SDK 可用於將語音轉換為文字,也可用於將文字轉換回語音。請求語音時,您需要提供要使用的語音,因為可以使用各種不同的語音生成語音。

每種語言都支持一系列不同的語音,您可以從語音服務 SDK 獲取每種語言支持的語音列表。

任務 - 將文字轉換為語音

  1. 在 VS Code 中打開 smart-timer 項目,並確保虛擬環境已在終端中加載。

  2. azure.cognitiveservices.speech 包中導入 SpeechSynthesizer,將其添加到現有的導入中:

    from azure.cognitiveservices.speech import SpeechConfig, SpeechRecognizer, SpeechSynthesizer
  3. say 函數上方,創建一個語音配置以與語音合成器一起使用:

    speech_config = SpeechConfig(subscription=speech_api_key,
    region=location)
    speech_config.speech_synthesis_language = language
    speech_synthesizer = SpeechSynthesizer(speech_config=speech_config)

    這使用了與識別器相同的 API 密鑰、位置和語言。

  4. 在此下方,添加以下代碼以獲取語音並將其設置在語音配置上:

    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'
  5. 更新 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>'
  6. 在此下方,停止語音識別,說出 SSML,然後重新開始識別:

    recognizer.stop_continuous_recognition()
    speech_synthesizer.speak_ssml(ssml)
    recognizer.start_continuous_recognition()

    在說出文本時停止識別,以避免計時器開始的公告被檢測到,發送到 LUIS 並可能被解釋為設置新計時器的請求。

    💁 您可以通過註釋掉停止和重新開始識別的行來測試這一點。設置一個計時器,您可能會發現公告設置了一個新計時器,這會導致新的公告,從而導致新的計時器,如此反覆無窮!

  7. 運行應用程序,並確保功能應用程序也在運行。設置一些計時器,您會聽到語音響應,告訴您計時器已設置,然後在計時器完成時會有另一個語音響應。

💁 您可以在 code-spoken-response/virtual-iot-device 文件夾中找到此代碼。

😀 您的計時器程序成功了!