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 లోని Text to speech 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 నుండి వచ్చిన బైనరీ ఆడియో డేటా అవుతుంది. ఈ క్రింది కోడ్ ఉపయోగించి దీన్ని వేవ్ ఫైల్గా ఓపెన్ చేసి, 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 స్ట్రీమ్ను ఉపయోగిస్తుంది, ఇది ఆడియో క్యాప్చర్ చేస్తున్న విధానానికంటే తేడా ఉంది. ఇక్కడ స్ట్రీమ్ అవుట్పుట్ స్ట్రీమ్ గా సెట్ చేయబడుతుంది, ఆడియో డేటా నుండి డేటాను చదవటం మరియు స్ట్రీమ్కు పంపటం నుంచి నిర్వహణ జరుగుతుంది.
|
|
|
|
స్ట్రీమ్ వివరాలను (ఉదా: సాంపిల్ రేట్) హార్డ్ కోడ్ చేయకుండా ఆడియో డేటా నుంచి చదివి ఉపయోగించబడుతుంది.
|
|
|
|
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) ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రయత్నిస్తుండగా, స్వయంచాలక అనువాదాల్లో తప్పులూ、不స్పష్టతలూ ఉండవచ్చని దయచేసి గమనించండి. సహజ భాషలో ఉన్న అసలు పత్రం అధికారిక మూలంగా పరిగణించబడాలి. ముఖ్యమైన సమాచారాల కోసం, నిపుణుల చేతి అనువాదం సిఫార్సు చేయబడుతుంది. ఈ అనువాదం వలన కలిగిన ఏ విషయభ్రమలు లేదా తప్పువులు సంబంధించి మేం బాధ్యులను కావ Monaten.
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER END --> |