|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "7966848a1f870e4c42edb4db67b13c57",
|
|
|
"translation_date": "2025-08-28T16:16:56+00:00",
|
|
|
"source_file": "6-consumer/lessons/3-spoken-feedback/virtual-device-text-to-speech.md",
|
|
|
"language_code": "uk"
|
|
|
}
|
|
|
-->
|
|
|
# Перетворення тексту в мову - Віртуальний 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). Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу. |