|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "7966848a1f870e4c42edb4db67b13c57",
|
|
|
"translation_date": "2025-08-27T00:17:11+00:00",
|
|
|
"source_file": "6-consumer/lessons/3-spoken-feedback/virtual-device-text-to-speech.md",
|
|
|
"language_code": "ru"
|
|
|
}
|
|
|
-->
|
|
|
# Текст в речь - Виртуальное IoT-устройство
|
|
|
|
|
|
В этой части урока вы напишете код для преобразования текста в речь с использованием службы синтеза речи.
|
|
|
|
|
|
## Преобразование текста в речь
|
|
|
|
|
|
SDK службы синтеза речи, который вы использовали в прошлом уроке для преобразования речи в текст, также можно использовать для преобразования текста обратно в речь. При запросе синтеза речи необходимо указать голос, который будет использоваться, так как речь может быть сгенерирована с использованием различных голосов.
|
|
|
|
|
|
Каждый язык поддерживает множество различных голосов, и вы можете получить список поддерживаемых голосов для каждого языка через SDK службы синтеза речи.
|
|
|
|
|
|
### Задание - преобразование текста в речь
|
|
|
|
|
|
1. Откройте проект `smart-timer` в VS Code и убедитесь, что виртуальная среда загружена в терминале.
|
|
|
|
|
|
1. Импортируйте `SpeechSynthesizer` из пакета `azure.cognitiveservices.speech`, добавив его к существующим импортам:
|
|
|
|
|
|
```python
|
|
|
from azure.cognitiveservices.speech import SpeechConfig, SpeechRecognizer, SpeechSynthesizer
|
|
|
```
|
|
|
|
|
|
1. Над функцией `say` создайте конфигурацию синтеза речи для использования с синтезатором речи:
|
|
|
|
|
|
```python
|
|
|
speech_config = SpeechConfig(subscription=speech_api_key,
|
|
|
region=location)
|
|
|
speech_config.speech_synthesis_language = language
|
|
|
speech_synthesizer = SpeechSynthesizer(speech_config=speech_config)
|
|
|
```
|
|
|
|
|
|
Эта конфигурация использует тот же API-ключ, местоположение и язык, которые использовались распознавателем.
|
|
|
|
|
|
1. Ниже добавьте следующий код для получения голоса и установки его в конфигурации синтеза речи:
|
|
|
|
|
|
```python
|
|
|
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](https://docs.microsoft.com/azure/cognitive-services/speech-service/language-support?WT.mc_id=academic-17441-jabenn#text-to-speech). Если вы хотите использовать конкретный голос, вы можете удалить эту функцию и жестко задать голос, указав его имя из документации. Например:
|
|
|
>
|
|
|
> ```python
|
|
|
> speech_config.speech_synthesis_voice_name = 'hi-IN-SwaraNeural'
|
|
|
> ```
|
|
|
|
|
|
1. Обновите содержимое функции `say`, чтобы сгенерировать SSML для ответа:
|
|
|
|
|
|
```python
|
|
|
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>'
|
|
|
```
|
|
|
|
|
|
1. Ниже остановите распознавание речи, произнесите SSML, затем снова запустите распознавание:
|
|
|
|
|
|
```python
|
|
|
recognizer.stop_continuous_recognition()
|
|
|
speech_synthesizer.speak_ssml(ssml)
|
|
|
recognizer.start_continuous_recognition()
|
|
|
```
|
|
|
|
|
|
Распознавание останавливается на время произнесения текста, чтобы избежать того, что объявление о запуске таймера будет распознано, отправлено в LUIS и, возможно, интерпретировано как запрос на установку нового таймера.
|
|
|
|
|
|
> 💁 Вы можете протестировать это, закомментировав строки для остановки и перезапуска распознавания. Установите один таймер, и вы можете заметить, что объявление устанавливает новый таймер, что вызывает новое объявление, приводящее к установке нового таймера, и так далее бесконечно!
|
|
|
|
|
|
1. Запустите приложение и убедитесь, что функция приложения также работает. Установите несколько таймеров, и вы услышите голосовой ответ, сообщающий, что ваш таймер установлен, а затем другой голосовой ответ, когда таймер завершится.
|
|
|
|
|
|
> 💁 Вы можете найти этот код в папке [code-spoken-response/virtual-iot-device](../../../../../6-consumer/lessons/3-spoken-feedback/code-spoken-response/virtual-iot-device).
|
|
|
|
|
|
😀 Ваше приложение для таймера оказалось успешным!
|
|
|
|
|
|
---
|
|
|
|
|
|
**Отказ от ответственности**:
|
|
|
Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникающие в результате использования данного перевода. |