You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/kn/6-consumer/lessons/3-spoken-feedback/pi-text-to-speech.md

149 lines
13 KiB

# ಪಠ್ಯವನ್ನು ಮಾತಾಗಿ ಪರಿವರ್ತನೆ ಮಾಡುವುದು - ರಾಸ್ಪ್ಬೆರಿ ಪೈ
ಈ ಪಾಠದ ಭಾಗದಲ್ಲಿ, ನೀವು ಪಠ್ಯವನ್ನು ಮಾತಾಗಿ ಪರಿವರ್ತಿಸಲು ಸ್ಮೃತಿ ಸೇವೆಯನ್ನು ಬಳಸಿ ಕೋಡ್ ಬರೆಯುತ್ತೀರಿ.
## ಸ್ಮೃತಿ ಸೇವೆಯನ್ನು ಬಳಸಿ ಪಠ್ಯವನ್ನು ಮಾತಾಗಿ ಪರಿವರ್ತಿಸುವುದು
ಪಠ್ಯವನ್ನು REST API ಮೂಲಕ ಸ್ಮೃತಿ ಸೇವೆಗೆ ಕಳುಹಿಸಬಹುದು, ಆಗ ಅದು ಧ್ವನಿಯಾಗಿ ನಂತರ ನಿಮ್ಮ IoT ಸಾಧನದಲ್ಲಿ播放 ಮಾಡಲು ಆಡಿಯೋ ಕಡತವಾಗಿ ಸಿಗುತ್ತದೆ. ಮಾತು ವಿನಂತಿಸುವಾಗ, ವಿವಿಧ ಧ್ವನಿಗಳ ಬಳಕೆ ಮೂಲಕ ಮಾತು ನಿರ್ಮಿಸಲು ಬಳಸಬೇಕಾದ ಧ್ವನಿಯನ್ನು ಒದಗಿಸುವ ಅಗತ್ಯವಿದೆ.
ಪ್ರತಿ ಭಾಷೆ ವಿಭಿನ್ನ ಧ್ವನಿಗಳ ಶ್ರೇಣಿಯನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ, ಮತ್ತು ನೀವು ಪ್ರತಿ ಭಾಷೆಗೆ ಬೆಂಬಲಿತ ಧ್ವನಿಗಳ ಪಟ್ಟಿ ಪಡೆಯಲು ಸ್ಮೃತಿ ಸೇವೆಗೆ REST ವಿನಂತಿಯನ್ನು ಮಾಡಲು পারেন.
### ಕಾರ್ಯ - ಧ್ವನಿಯನ್ನು ಪಡೆಯಿರಿ
1. VS ಕೋಡ್‌ನಲ್ಲಿ `smart-timer` ಪ್ರಾಜೆಕ್ಟ್ ತೆರೆಯಿರಿ.
1. `say` ಕಾರ್ಯದ ಮೇಲ್ಪಡೆ ಭಾಷೆಗೆ ಧ್ವನಿಗಳ ಪಟ್ಟಿಯನ್ನು ವಿನಂತಿಸಲು ಕೆಳಗಿನ ಕೋಡ್ ಸೇರಿಸಿ:
```python
def get_voice():
url = f'https://{location}.tts.speech.microsoft.com/cognitiveservices/voices/list'
headers = {
'Authorization': 'Bearer ' + get_access_token()
}
response = requests.get(url, headers=headers)
voices_json = json.loads(response.text)
first_voice = next(x for x in voices_json if x['Locale'].lower() == language.lower() and x['VoiceType'] == 'Neural')
return first_voice['ShortName']
voice = get_voice()
print(f'Using voice {voice}')
```
ಈ ಕೋಡ್ `get_voice` ಎಂಬ ಒಂದು ಕಾರ್ಯವನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ, ಇದು ಸ್ಮೃತಿ ಸೇವೆಯನ್ನು ಬಳಸಿ ಧ್ವನಿಗಳ ಪಟ್ಟಿಯನ್ನು ಪಡೆಯುತ್ತದೆ. ನಂತರ, ಬಳಕೆಯ ಭಾಷೆಗೆ ಹೊಂದಿಕೊಳ್ಳುವ ಮೊದಲ ಧ್ವನಿಯನ್ನು ಕಂಡುಹಿಡಿಯುತ್ತದೆ.
ಈ ಕಾರ್ಯವನ್ನು ನಂತರ ಕರೆಮಾಡಿ ಮೊದಲ ಧ್ವನಿಯನ್ನು ಸಂಗ್ರಹಿಸಿ, ಧ್ವನಿ ಹೆಸರು ಕಾನ್ಸೋಲ್‌ನಲ್ಲಿ ಮುದ್ರಿಸಲಾಗುತ್ತದೆ. ಈ ಧ್ವನಿಯನ್ನು ಒಮ್ಮೆ ವಿನಂತಿಸಿ, ಪಠ್ಯವನ್ನು ಮಾತಾಗಿ ಪರಿವರ್ತಿಸುವ ಪ್ರತಿಯೊಂದು ಕರೆಗೂ ಇದರ ಮೌಲ್ಯವನ್ನು ಬಳಸಬಹುದು.
> 💁 ನೀವು [Microsoft Docs ನಲ್ಲಿರುವ ಭಾಷೆ ಮತ್ತು ಧ್ವನಿ ಬೆಂಬಲ ದಸ್ತಾವೇಜಿನಲ್ಲಿ](https://docs.microsoft.com/azure/cognitive-services/speech-service/language-support?WT.mc_id=academic-17441-jabenn#text-to-speech) كامل ಬೆಂಬಲಿತ ಧ್ವನಿಗಳ ಪಟ್ಟಿಯನ್ನು ಪಡೆಯಬಹುದು. ನೀವು ನಿರ್ದಿಷ್ಟ ಧ್ವನಿಯನ್ನು ಬಳಸಲು ಬಯಸಿದ್ದರೆ, ಈ ಕಾರ್ಯವನ್ನು ತೆಗೆದುಹಾಕಿ, ಆ ದಸ್ತಾವೇಜಿನಿಂದ ಧ್ವನಿ ಹೆಸರಿಗೆ ಹಾರ್ಡ್ ಕೋಡ್ ಮಾಡಬಹುದು. ಉದಾಹರಣೆಗೆ:
>
> ```python
> voice = 'hi-IN-SwaraNeural'
> ```
### ಕಾರ್ಯ - ಪಠ್ಯವನ್ನು ಮಾತಾಗಿ ಪರಿವರ್ತಿಸುವುದು
1. ಇದರ ಕೆಳಗೆ, ಸ್ಮೃತಿ ಸೇವೆಗಳಲ್ಲಿಂದ ಪಡೆಯಬಹುದಾದ ಆಡಿಯೋ ರೂಪಿಗೆ ಒಂದು ಸ್ಥಿರಾಂಕವನ್ನು ಗೋಷ್ಠಿ ಮಾಡಿ. ನೀವು ಆಡಿಯೋವನ್ನು ವಿನಂತಿಸುವಾಗ ವಿವಿಧ ರೂಪಗಳಲ್ಲಿ ಅದನ್ನು ಪಡೆಯಬಹುದು.
```python
playback_format = 'riff-48khz-16bit-mono-pcm'
```
ನೀವು ಬಳಸಬಹುದಾದ ರೂಪ ನಿಮ್ಮ ಉಪಕರಣದ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ. ಆಡಿಯೋವನ್ನು ಪ್ಲೇ ಮಾಡುವಾಗ `Invalid sample rate` ದೋಷಗಳು ಬಂದರೆ, ಇದನ್ನು ಬೇರೆ ಮೌಲ್ಯಕ್ಕೆ ಬದಲಿಸಿ. ಬೆಂಬಲಿತ ಮೌಲ್ಯಗಳ ಪಟ್ಟಿಯನ್ನು [Microsoft Docs ನಲ್ಲಿ ಪಠ್ಯದಿಂದ ಮಾತು REST API ದಸ್ತಾವೇಜಿನಲ್ಲಿ](https://docs.microsoft.com/azure/cognitive-services/speech-service/rest-text-to-speech?WT.mc_id=academic-17441-jabenn#audio-outputs) ಕಾಣಬಹುದು. ನೀವು `riff` ರೂಪದ ಆಡಿಯೋ ಬಳಕೆಯಾಗಬೇಕು, ಪ್ರಯತ್ನಿಸಲು ಮೌಲ್ಯಗಳು `riff-16khz-16bit-mono-pcm`, `riff-24khz-16bit-mono-pcm`, ಮತ್ತು `riff-48khz-16bit-mono-pcm`.
1. ಇದರ ಕೆಳಗೆ, `get_speech` ಎಂಬ ಕಾರ್ಯವನ್ನು ಘೋಷಿಸಿ, ಇದು ಪಠ್ಯವನ್ನು ಸ್ಮೃತಿ ಸೇವೆ REST API ಬಳಸಿ ಮಾತಾಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ:
```python
def get_speech(text):
```
1. `get_speech` ಕಾರ್ಯದಲ್ಲಿ, ಕರೆಯಬೇಕಾದ URL ಮತ್ತು ಕಳುಹಿಸಬೇಕಾದ ಹೆಡರ್ಗಳನ್ನು ನಿಖರವಾಗಿ ನಿರ್ಧರಿಸಿ:
```python
url = f'https://{location}.tts.speech.microsoft.com/cognitiveservices/v1'
headers = {
'Authorization': 'Bearer ' + get_access_token(),
'Content-Type': 'application/ssml+xml',
'X-Microsoft-OutputFormat': playback_format
}
```
ಈ ಹೆಡರ್ಗಳು ಜನರೇಟ್ ಆಗಿದ ಪ್ರವೇಶ ಟೋಕನ್ ಬಳಸಲಾಗುತ್ತಿದೆ, ವಿಷಯವನ್ನು SSML ಆಗಿ ಸಿದ್ಧಪಡಿಸಲಾಗಿದೆ ಮತ್ತು ಬೇಕಾದ ಆಡಿಯೋ ರೂಪ ನಿರ್ಧಾರವಾದಿದೆ.
1. ಇದರ ಕೆಳಗೆ, REST API ಗೆ ಕಳಿಸುವ SSML ಅನ್ನು ನಿರ್ಧರಿಸಿ:
```python
ssml = f'<speak version=\'1.0\' xml:lang=\'{language}\'>'
ssml += f'<voice xml:lang=\'{language}\' name=\'{voice}\'>'
ssml += text
ssml += '</voice>'
ssml += '</speak>'
```
ಈ SSML ಭಾಷೆಯನ್ನು, ಧ್ವನಿಯನ್ನು ಮತ್ತು ಪರಿವರ್ತಿಸುವ ಪಠ್ಯವನ್ನು ನಿಯೋಜಿಸುತ್ತದೆ.
1. ಕೊನೆಯಲ್ಲಿ, REST ವಿನಂತಿಯನ್ನು ಮಾಡಿಸಿ ಬೈನರಿ ಆಡಿಯೋ ಡೇಟಾವನ್ನು ಮರಳಿಸುವ ಕೋಡ್ ಸೇರಿಸಿ:
```python
response = requests.post(url, headers=headers, data=ssml.encode('utf-8'))
return io.BytesIO(response.content)
```
### ಕಾರ್ಯ - ಆಡಿಯೋವನ್ನು ಪ್ಲೇ ಮಾಡುವುದು
1. `get_speech` ಕಾರ್ಯದ ಕೆಳಗೆ, REST API ಕರೆನಿಂದ ಮರಳುವ ಆಡಿಯೋವನ್ನು ಪ್ಲೇ ಮಾಡುವ ಒಂದು ಹೊಸ ಕಾರ್ಯವನ್ನು ಘೋಷಿಸಿ:
```python
def play_speech(speech):
```
1. ಈ ಕಾರ್ಯಕ್ಕೆ ಪಾಸ್ ಆಗುವ `speech` ಸಾಧಾರಣವಾಗಿ REST API ಕರೆಯು ಮರಳಿಸುವ ಬೈನರಿ ಆಡಿಯೋ ಡೇಟಾಗಾಗಿರುತ್ತದೆ. ಈ ಕೆಳಗಿನ ಕೋಡ್ ಅನ್ನು ಬಳಸಿ ಇದು ಒಂದು wave ಫೈಲ್ ಆಗಿ ತೆರೆಯಿರಿ ಮತ್ತು PyAudio ಗೆ ಪಾಸ್ ಮಾಡಿ ಆಡಿಯೋ ಪ್ಲೇಮಾಡಿ:
```python
def play_speech(speech):
with wave.open(speech, 'rb') as wave_file:
stream = audio.open(format=audio.get_format_from_width(wave_file.getsampwidth()),
channels=wave_file.getnchannels(),
rate=wave_file.getframerate(),
output_device_index=speaker_card_number,
output=True)
data = wave_file.readframes(4096)
while len(data) > 0:
stream.write(data)
data = wave_file.readframes(4096)
stream.stop_stream()
stream.close()
```
ಈ ಕೋಡ್ PyAudio ಸ್ಟ್ರೀಮ್ ಅನ್ನು ಬಳಸುತ್ತದೆ, ಅದೇ ಅಥವಾ ಅudio ಹಿಡಿಯುವಾಗದಂತೆಯೇ. ವ್ಯತ್ಯಾಸವೆಂದರೆ ಇಲ್ಲಿ ಸ್ಟ್ರೀಮ್ ಔಟ್‌ಪುಟ್ ಆಗಿ ಸಿದ್ಧಪಡಿಸಲಾಗಿದೆ, ಮತ್ತು ಡೇಟಾ ಆಡಿಯೋ ಡೇಟಾದಿಂದ ಓದಿಕೊಳ್ಳಲ್ಪಡುವುದಾಗಿ ಮತ್ತು ಸ್ಟ್ರೀಮ್ ಗೆ ಒದಗಿಸಲಾಗುತ್ತಿದೆ.
ಸ್ಟ್ರೀಮ್ ವಿವರಗಳ (ಉದಾಹರಣೆಗೆ ಸ್ಯಾಂಪಲ್ ದರ) ಹಾರ್ಡ್ ಕೋಡ್ ಮಾಡುವ ಬದಲಾಗಿ, ಅವನ್ನು ಆಡಿಯೋ ಡೇಟಾದಿಂದ ಓದಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.
1. `say` ಕಾರ್ಯದ ವಿಷಯವನ್ನು ಕೆಳಗಿನಂತೆ ಬದಲಾಯಿಸಿ:
```python
speech = get_speech(text)
play_speech(speech)
```
ಈ ಕೋಡ್ ಪಠ್ಯವನ್ನು ಬೈನರಿ ಆಡಿಯೋ ಡೇಟಾ ಆಗಿ ಪರಿವರ್ತಿಸಿ, ಆಡಿಯೋವನ್ನು پ್ಲೇ ಮಾಡುತ್ತದೆ.
1. ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಚಾಲನೆ ಮಾಡಿ, ಮತ್ತು ಕಾರ್ಯ ಫಂಕ್ಷನ್ ಅಪ್ಲಿಕೇಶನ್ ಕೂಡ ನಡೆಯುತ್ತಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. ಕೆಲವೊಂದು ಟೈಮರ್‍ಗಳನ್ನು ಸೆಟ್ ಮಾಡಿ, ನೀವು ಟೈಮರ್ ಸೆಟ್ ಆಗಿದ್ದನೆಂದು ಹೇಳುವ ಮಾತುನಿರೂಪಣೆಯನ್ನು ಕೇಳಬಹುದು, ನಂತರ ಟೈಮರ್ ಮುಗಿದಾಗ ಮತ್ತೊಂದು ಮಾತುನಿರೂಪಣೆಯನ್ನು ಕೇಳಬಹುದು.
`Invalid sample rate` ದೋಷಗಳು ಬಂದರೆ, ಮೇಲ್ಕಂಡಂತೆ `playback_format` ಅನ್ನು ಬದಲಿಸಿ.
> 💁 ಈ ಕೋಡ್ ಅನ್ನು [code-spoken-response/pi](../../../../../6-consumer/lessons/3-spoken-feedback/code-spoken-response/pi) ಫೋಲ್ಡರ್‌ನಲ್ಲಿ ಕಾಣಬಹುದು.
😀 ನಿಮ್ಮ ಟೈಮರ್ ಕಾರ್ಯಕ್ರಮ ಯಶಸ್ವಿ ಆಯಿತು!
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ತ್ಯಜ್ಯ ಹೇಳಿಕೆ**:
ಈ документаಿ AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವದಿಸಲಾಗಿದೆ. ನಾವು ಶುದ್ಧತೆಯ ಬಗ್ಗೆ ಪ್ರಯತ್ನಿಸುವುದರೊಂದಿಗೆ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ಅಸತ್ಯತೆಗಳು ಇರಬಹುದು ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿರಿ. ಮೂಲ документаಿಯನ್ನು ಅದರ ಸ್ವದೇಶಿ ಭಾಷೆಯಲ್ಲಿ ಅಧಿಕೃತ ಮೂಲವೆನ್ನಿಸುತ್ತದೆ. ಮಹತ್ವದ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದವನ್ನು ಬಳಸದ ಪರಿಣಾಮ ಉಂಟಾಗುವ ಯಾವುದೇ ತಪ್ಪು ಅರ್ಥಗ್ರಹಣ ಅಥವಾ ತಪ್ಪು ವ್ಯಾಖ್ಯಾನದ ಹೊಣೆಗಾರಿಕೆ ನಮ್ಮದಾಗಿರುವುದಿಲ್ಲ.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->