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.
149 lines
13 KiB
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 --> |