6.6 KiB
Teksti kõneks - Raspberry Pi
Selles õppetunni osas kirjutad koodi, et muuta tekst kõneks, kasutades kõneteenust.
Teksti muutmine kõneks kõneteenuse abil
Teksti saab saata kõneteenusele REST API kaudu, et saada kõne helifailina, mida saab esitada sinu IoT-seadmes. Kõne taotlemisel tuleb määrata hääl, mida kasutada, kuna kõnet saab genereerida mitmesuguste erinevate häältega.
Iga keel toetab erinevaid hääli, ja kõneteenuse vastu saab teha REST-päringu, et saada nimekiri iga keele toetatud häältest.
Ülesanne - hääle leidmine
-
Ava
smart-timerprojekt VS Code'is. -
Lisa järgmine kood
sayfunktsiooni kohale, et taotleda keele jaoks häälte nimekirja: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}')See kood määratleb funktsiooni nimega
get_voice, mis kasutab kõneteenust häälte nimekirja saamiseks. Seejärel leiab funktsioon esimese hääle, mis vastab kasutatavale keelele.See funktsioon kutsutakse välja, et salvestada esimene hääl, ja hääle nimi prinditakse konsooli. Seda häält saab taotleda üks kord ja väärtust kasutada iga kord, kui tekst muudetakse kõneks.
💁 Saad täieliku nimekirja toetatud häältest Microsoft Docs'i keele ja hääle toe dokumentatsioonist. Kui soovid kasutada konkreetset häält, siis võid selle funktsiooni eemaldada ja hääle nime otse dokumentatsioonist koodi lisada. Näiteks:
voice = 'hi-IN-SwaraNeural'
Ülesanne - teksti muutmine kõneks
-
Määra selle alla konstant, mis määrab heliformaadi, mida kõneteenuselt taotleda. Helifaili saab taotleda mitmes erinevas formaadis.
playback_format = 'riff-48khz-16bit-mono-pcm'Kasutatav formaat sõltub sinu riistvarast. Kui saad veateate
Invalid sample ratehelifaili esitamisel, muuda see teiseks väärtuseks. Toetatud väärtuste nimekirja leiad Teksti kõneks REST API dokumentatsioonist Microsoft Docs'is. Pead kasutamariffformaadis heli, ja proovida väärtusiriff-16khz-16bit-mono-pcm,riff-24khz-16bit-mono-pcmjariff-48khz-16bit-mono-pcm. -
Määra selle alla funktsioon nimega
get_speech, mis muudab teksti kõneks, kasutades kõneteenuse REST API-d:def get_speech(text): -
get_speechfunktsioonis määra URL, mida kutsuda, ja päised, mida edastada: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 }See määrab päised, et kasutada genereeritud juurdepääsutokenit, määrab sisu SSML-iks ja määrab vajaliku heliformaadi.
-
Määra selle alla SSML, mida REST API-le saata:
ssml = f'<speak version=\'1.0\' xml:lang=\'{language}\'>' ssml += f'<voice xml:lang=\'{language}\' name=\'{voice}\'>' ssml += text ssml += '</voice>' ssml += '</speak>'See SSML määrab keele ja hääle, mida kasutada, koos tekstiga, mida muuta.
-
Lõpuks lisa kood, mis teeb REST-päringu ja tagastab binaarse helifaili andmed:
response = requests.post(url, headers=headers, data=ssml.encode('utf-8')) return io.BytesIO(response.content)
Ülesanne - heli esitamine
-
get_speechfunktsiooni alla määra uus funktsioon, mis esitab REST API päringust tagastatud heli:def play_speech(speech): -
Funktsioonile edastatav
speechon binaarne helifaili andmestik, mis tagastati REST API-st. Kasuta järgmist koodi, et avada see kui lainefail ja edastada PyAudio-le heli esitamiseks: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()See kood kasutab PyAudio voogu, samamoodi nagu heli salvestamisel. Erinevus seisneb selles, et voog määratakse väljundvooguks, ja andmed loetakse helifailist ning edastatakse voogu.
Selle asemel, et voogu üksikasju nagu näidissagedus käsitsi määrata, loetakse need helifaili andmetest.
-
Asenda
sayfunktsiooni sisu järgmisega:speech = get_speech(text) play_speech(speech)See kood muudab teksti kõneks binaarseks helifailiks ja esitab heli.
-
Käivita rakendus ja veendu, et funktsioonirakendus töötab samuti. Määra mõned taimerid, ja kuuled kõnelevat vastust, mis ütleb, et sinu taimer on määratud, ning teist kõnelevat vastust, kui taimer on lõppenud.
Kui saad veateate
Invalid sample rate, muudaplayback_formatnagu eespool kirjeldatud.
💁 Selle koodi leiad code-spoken-response/pi kaustast.
😀 Sinu taimeriprogramm oli edukas!
Lahtiütlus:
See dokument on tõlgitud AI tõlketeenuse Co-op Translator abil. Kuigi püüame tagada täpsust, palume arvestada, et automaatsed tõlked võivad sisaldada vigu või ebatäpsusi. Algne dokument selle algses keeles tuleks pidada autoriteetseks allikaks. Olulise teabe puhul soovitame kasutada professionaalset inimtõlget. Me ei vastuta selle tõlke kasutamisest tulenevate arusaamatuste või valesti tõlgenduste eest.