# អត្ថបទ​ទៅ​សំឡេង - ឧបករណ៍ IoT ខាងវីឌ្យូ ក្នុង​ផ្នែក​នេះ​នៃមេរៀន អ្នក​នឹង​សរសេរកូដ​ដំណើរការ​បម្លែង​អត្ថបទ​ទៅ​សំឡេង ដោយ​ប្រើ​សេវាកម្ម​សំឡេង។ ## បម្លែង​អត្ថបទ​ទៅ​សំឡេង SDK សេវាកម្ម​សំឡេង​ដែល​អ្នក​បាន​ប្រើ​ក្នុង​មេរៀន​មុន​ដើម្បី​បម្លែង​សំឡេង​ទៅអត្ថបទ អាច​ប្រើ​ដើម្បី​បម្លែង​អត្ថបទ​ត្រឡប់វិញ​ទៅ​សំឡេង។ នៅពេល​ស្នើសុំ​សំឡេង អ្នក​ត្រូវ​ផ្តល់​អង្គធាតុ​សំឡេង​ដើម្បី​ប្រើ ព្រោះ​សំឡេង​អាច​ត្រូវបាន​បង្កើត​ដោយប្រើ​អង្គធាតុ​សំឡេង​ផ្សេងៗ​ជា​ច្រើន​។ រៀងរាល់​ភាសា​គាំទ្រ​អង្គធាតុ​សំឡេង​ផ្សេងៗ ហើយ​អ្នក​អាច​ទទួលបាន​បញ្ជី​អង្គធាតុ​សំឡេង​ដែល​គាំទ្រ​សម្រាប់ភាសារ​នីមួយៗ​ពី SDK សេវាកម្ម​សំឡេង។ ### ភារកិច្ច - បម្លែង​អត្ថបទ​ទៅ​សំឡេង 1. បើក​គម្រោង `smart-timer` នៅ​ក្នុង VS Code ហើយ​ប្រាកដថា​បរិយាកាស​យន្ត_virtual បាន​ផ្ទុក​នៅ​ក្នុង​ទ терминال។ 1. អនុញ្ញាត​ឲ្យ​អ្នកអញ្ញាតាំន `SpeechSynthesizer` ពី​បណ្ដុំ​ម៉ូឌុល `azure.cognitiveservices.speech` ដោយ​បូក​បញ្ចូល​វា​ក្នុង​ការ​នាំ​ចូល​ដែល​មាន​រួច​ហើយ៖ ```python from azure.cognitiveservices.speech import SpeechConfig, SpeechRecognizer, SpeechSynthesizer ``` 1. ខាង​លើ​មុខងារ `say` សូម​បង្កើត​ការកំណត់​សំឡេង​សម្រាប់​ប្រើ​ជាមួយ speech synthesizer៖ ```python speech_config = SpeechConfig(subscription=speech_api_key, region=location) speech_config.speech_synthesis_language = language speech_synthesizer = SpeechSynthesizer(speech_config=speech_config) ``` នេះ​ប្រើកន្លែង API key, ទីតាំង និងភាសា​ដដែល​ដែល​បាន​ប្រើ​ដោយ recognizer ។ 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 ``` វា​យក​បញ្ជី​អង្គធាតុ​សំឡេង​ទាំងអស់​ដែលអាចប្រើបាន ហើយ​រក​អង្គធាតុ​សំឡេង​ដំបូង​ដែល​ផ្គូផ្គង​ជាមួយ​ភាសា​ដែល​កំពុង​ប្រើ។ > 💁 អ្នក​អាច​ទាញ​យក​បញ្ជី​ពេញលេញ​នៃ​អង្គធាតុ​សំឡេង​ដែល​គាំទ្រ​បាន​ពី [ឯកសារ Language and voice support documentation on 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'' ssml += f'' ssml += text ssml += '' ssml += '' ``` 1. ខាង​ក្រោម​នេះ ពង្រឹង​ការទទួល​សំឡេង​ឲ្យ​ឈប់ ពោល​សំឡេង SSML ទើប​ចាប់ផ្ដើម​ការ​ទទួល​សំឡេង​ម្ដង​ទៀត៖ ```python recognizer.stop_continuous_recognition() speech_synthesizer.speak_ssml(ssml) recognizer.start_continuous_recognition() ``` ការទទួល​សំឡេង​ត្រូវ​បាន​ឈប់នៅពេល​ដែល​អត្ថបទ​ត្រូវ​បកប្ដូរ​ទៅ​សំឡេង ដើម្បី​ឱ្យ​ការប្រកាស​ថា​ឧបករណ៍​កំណត់​ពេល​វេលា​បាន​ចាប់ផ្ដើម មិន​ត្រូវ​បាន​គេ​ឮ​ឃើញ សំឡេង​ដែល​ផ្ញើ​ទៅ LUIS ហើយ​អាច​ត្រូវ​បាន​បកស្រាយ​ថា​គឺជា​សំណើ​ឱ្យ​កំណត់​ឧបករណ៍​ពេល​វេលា​ថ្មី។ > 💁 អ្នក​អាច​សាកល្បង​នេះ​ដោយ​ការ​សរសេរ​ជាកំណត់ ឬ ការដក​បន្ទាត់​ដែល​ឈប់ និង​ចាប់ផ្ដើម​ការ​ទទួល​សំឡេង​ម្ដងទៀត។ កំណត់​ឧបករណ៍​ពេល​វេលា​មួយ ហើយ​អ្នក​អាច​សង្កេត​ឃើញ​ការ​ប្រកាស​កំណត់​ឧបករណ៍​ពេល​វេលា​ថ្មី ដែល​នាំ​រួច​ទៅ​ការ​ប្រកាស​ថ្មី​នាំឲ្យ​មាន​ការកំណត់​ឧបករណ៍​ពេល​វេលា​ថ្មី ហើយបន្ត​តទៅបន្ត​មក​ជានិច្ច! 1. ដំណើរការ​កម្មវិធី ហើយ​ប្រាកដ​ថា​មុខងារ app កំពុង​ដំណើរការ​ផងដែរ។ កំណត់​ឧបករណ៍​ពេល​វេលា​មួយ​ចំនួន ហើយ​អ្នក​នឹង​ស្តាប់​ការ​ទទួល​សំឡេង​ថា​ការកំណត់​ឧបករណ៍​ពេល​វេលា​របស់​អ្នក​ត្រូវ​បាន​ដំណើរការ រួច​ក៏​មាន​ការ​ទទួល​សំឡេង​ម្តង​ទៀត​ពេល​ឧបករណ៍​ពេល​វេលា​ដំណើរការសម្រេច។ > 💁 អ្នក​អាច​រកឃើញ​កូដ​នេះ​នៅក្នុងថត [code-spoken-response/virtual-iot-device](../../../../../6-consumer/lessons/3-spoken-feedback/code-spoken-response/virtual-iot-device)។ 😀 កម្មវិធី​កំណត់​ពេល​វេលា​របស់​អ្នក​បាន​ជោគជ័យ! --- **ការបដិសេធ**៖ ឯកសារនេះត្រូវបានប្រែសម្រួលដោយប្រព័ន្ធបកប្រែ AI [Co-op Translator](https://github.com/Azure/co-op-translator)។ បើទោះបីយើងខិតខំប្រឹងប្រែងក្នុងការជាក់លាក់ ក៏សូមយកចិត្តទុកដាក់ថា ការបកប្រែដោយស្វ័យប្រវត្តិនេះអាចមានកំហុសឬច្រឡំ។ ឯកសារដើមក្នុងភាសាទីតាំងរបស់វាគួរត្រូវបានចាត់ទុកជាវិទ្យាសាស្ត្រដែលមានអានុភាព។ សម្រាប់ព័ត៌មានមានសារៈសំខាន់ ការប្រែសម្រួលដោយអ្នកជំនាញមនុស្សគឺផ្តល់អនុសាសន៍។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកស្រាយខុសត្រូវណាមួយដែលកើតមានពីការប្រើប្រាស់ការបកប្រែនេះឡើយ។