# വാചകത്തിൽ നിന്ന് സംസാരത്തിലേക്ക് - റാസ്ബെറി പൈ പാഠത്തിന്റെ ഈ ഭാഗത്തിൽ, സംസാര സേവനം ഉപയോഗിച്ച് വാചകത്തിനെ സംസാരത്തിൽ മാറുന്ന കോഡ് നിങ്ങൾ എഴുതും. ## സംസാര സേവനം ഉപയോഗിച്ച് വാചകത്തിനെ സംസാരത്തിലേക്ക് മാറ്റുക വാചകം REST API ഉപയോഗിച്ച് സംസാര സേവനത്തിലേക്ക് അയച്ചു, ഈ ഓഡിയോ ഫയലായി സബ്‌ക്ഷേപം ലഭിക്കും, ഇത് നിങ്ങളുടെ IoT ഉപകരണത്തിൽ പുനരവതരിപ്പിക്കാം. സംസാരത്തിനായി അഭ്യർത്ഥന ചെയ്യുമ്പോൾ, ഭാഷയുടെ വ്യത്യസ്ത ശബ്ദങ്ങളിൽ സംസാരമുണ്ടാക്കാനും ഉപയോഗിക്കുന്ന ശബ്ദം നൽകണമെന്ന് ആവശ്യമാണ്. ഓരോ ഭാഷയും വിവിധ ശബ്ദങ്ങൾ പിന്തുണയ്ക്കുന്നു, ഈ ശബ്ദങ്ങളുടെ പട്ടിക ലഭിക്കാൻ സംസാര സേവനത്തിന് REST അഭ്യർത്ഥന നടത്താം. ### ജോലികൾ - ശബ്ദം നേടുക 1. VS Code-ൽ `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 ഡോക്സ്-ലെ ഭാഷയും ശബ്ദ പിന്തുണയും സംബന്ധിച്ച രേഖാമൂല്യങ്ങളിൽ](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 ഡോക്സ്-യിലെ 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'' ssml += f'' ssml += text ssml += '' ssml += '' ``` ഈ 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` ബൈനറി ഓഡിയോ ഡാറ്റയാണ്. ഇത് ഒരു വെയ്‌വ് ഫയലായി തുറന്ന് 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 സ്ട്രീം ഉപയോഗിക്കുന്നു, ഓഡിയോ പിടിക്കുന്നതുപോലെ തന്നെ. വ്യത്യാസം സ്ട്രീം output ആയി സജ്ജമാക്കുകയും, ഓഡിയോ ഡാറ്റയിൽ നിന്ന് ഡാറ്റ വായിച്ച് സ്ട്രീമിലേക്ക് പുഷ് ചെയ്യുകയും ചെയ്യുകയാണ്. സ്ട്രീം വിശദാംശങ്ങൾ ഹാർഡ് കോഡ് ചെയ്യാതെ അതു ഓഡിയോ ഡാറ്റയിൽനിന്ന് വായിക്കുന്നു. 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) ഫോളഡറിൽ ലഭ്യമാണ്. 😀 നിങ്ങളുടെ ടൈമർ പ്രോഗ്രാം വിജയകരമായി പൂർത്തിയായി! --- **വിവരം**: ഈ രേഖ AI പരിഭാഷ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷ ചെയ്തതായാണ് സൂചിപ്പിക്കുന്നത്. ഞങ്ങൾ കൃത്യതയ്‌ക്കായി പരിശ്രമിക്കുന്നുവെങ്കിലും, യന്ത്രം ചെയ്ത പരിഭാഷകളിൽ പിശകുകൾ കൾ അല്ലെങ്കിൽ അശുദ്ധതകൾ ഉണ്ടായേക്കാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. സൂക്ഷ്മമായ വിവരങ്ങൾ ആവശ്യമായാൽ, ഒടുവിലാണ് പ്രൊഫഷണൽ മാനവ പരിഭാഷ ശുപാർശ ചെയ്യുന്നത്. ഈ പരിഭാഷ ഉപയോഗിച്ചുണ്ടാകാവുന്ന തെറ്റ് മനസ്സിലാക്കലുകളോ തെറ്റിദ്ധാരണകളോ സംബന്ധിച്ച് ഞങ്ങൾ ഉത്തരവാദിത്വം ഏറ്റെടുക്കുന്നില്ല.