B Ъa. @sddlmZddlmZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl mZddlmZeZeeZejedZeeeeejeded d ZddlZddlZeZed edZ dZ!dZ"dd l#Tdd l$m%Z%edkr~ddl&m'Z'ddl(m)Z)e*dddddddddd Z+dddddZ,e)d d!Z-e'd"Z.e./e0e,1Z2d#Z3d$Z4d%Z5d&Z6ej7Z8d'Z9da:e;d(Ze?de@eAe@eAe@ZBd.d/ZCeBeCZDe%d0d1ZEd2d3ZFd4d5ZGd6d7ZHd8d9ZId:d;ZJdd?ZLd@dAZMdBdCZNdDdEZOdFdGZPdHdIZQeRdJkrd,ZSdKaTdZUdZVedkrxeJx eSrqzWdS)L) byteorder)arrayN)wavmaker)Path) load_dotenvz/TSA_mecha/.envZ AWS_KEY_IDZAWS_SECRET_KEY)Zaws_access_key_idZaws_secret_access_keyz platform: )*)contextmanagerDarwin)LED)APA102)rr)rr r)r r)r 3)r rr )r rr)r r r )r r r)rrr) bluegreenorangeZpinkpurpleredwhiteZyellowoffrrrr) picovoice porcupine blueberry terminator )Znum_ledZ ISXIO344FFZ ZWIGXTFIAUiii>pollyz lexv2-runtime translatez us-east-1T)Z service_nameZ region_nameZuse_sslcCsdS)N)filenamelinefunctionerrfmtrrI/home/pi/TSA-clean/TSA_voice_assistant/raspberry_voice_assistant_local.pypy_error_handlercsr&ccsHtdkr6td}|tdV|dtdndVtddS)Nr z libasound.soznoalsoerr activatedzno alsa err mode deactivated) platform_sysZcdllZ LoadLibraryZsnd_lib_error_set_handlerc_error_handlerprint)Zasoundrrr% noalsaerrhs    r*cCs t|tkS)N)max THRESHOLD)datarrr% is_silenttsr.c Cs,td}d}t}tdkr8|jtdtdtd}n|jtjdtdtd}| t d}xt d| t}t dkr| ||t|}|r|r|d7}|d7}n|s|sd}d}d}|r|d7}|r|d krP|r`|d kr`Pq`W|||tdkrtd td |SQRXdS) NrFr T)formatchannelsrateinputframes_per_bufferhbigPrz-turning off leds and returning recorded voice)r*pyaudioPyAudior'openFORMATRATE CHUNK_SIZEpaInt16Z start_streamrreadrZbyteswapextendr. stop_streamclose terminate set_colorr))Z num_silentstartpstream recordingr-ZsilentZ sessionlengthrrr% record_phrasewsF       rJcCs>t}|jtdtddd}||||dS)Nr/T)r0r1r2outputZinput_device_index) r9r:r;r<r=writer@rBrC)audiorGrHrrr% play_audios rOcCsBt|}x,tdD] }t||d|d|dqWtdS)Nrrr/rK) COLORS_RGBrangedriver set_pixelshow)ZcoloriZcolorirrr%rEs rEc Csd}ddddddddg|}d}x|dkrxLtdD]@}t||d|d|d|d|d|dtq4Wtd |d d|dd }|d7}q"Wtd dS) Nrrr/rKg?r)rQrRrSrTtimesleeprE)Z pixels_numberZpixelsZccrUrrr% color_starts 4   r]cCsPtj|d|d}td|dtd|dtd|d|dS) NZen)TextSourceLanguageCodeTargetLanguageCodezTranslatedText: ZTranslatedTextzSourceLanguageCode: r_zTargetLanguageCode: r`)rZtranslate_textr)get)textZlangresultrrr% translatelangs  rdc Cs4zyttjddgd}t}|j|jdtjd|jd}t dxd| |j}t d|j|}| |}|d krHt d t|td krtttt|d SqHWWdQRXWn,tk r}zt d |Wdd}~XYnXWd|dk r||dk r|t d|dk r.|t dXdS)Nrr)keywordsr/T)r2r1r0r3r4z[Listening...]r5rzHotword '%s' Detectedr Zhotwordzword exception: zaudio stream closedz pa terminated)r*Z pvporcupineZcreater9r:r;Z sample_rater?Z frame_lengthr)r@struct unpack_fromprocessrer'rErPKEYWORDS_COLOR ExceptiondeleterCrD)rpa audio_streampcmZ keyword_indexerrr%words<      rpcCs6tdkrtatjdd|t|d}|d}t|dS)NZstandardrn)ZEngineZ OutputFormatr^ZVoiceIdZTextTypeZ AudioStream)VOICE_ID get_voiceidrsynthesize_speechrO)messageZ text_typeresponserNrrr%rssrsc Csly0td|tjtt||dd|d}td||Stk rf}ztd|tddd Sd}~XYnXdS) Nz locale_Id: z!audio/l16; rate=16000; channels=1z audio/pcm)botId botAliasIdlocaleIdZ sessionIdZrequestContentTypeZresponseContentTypeZ inputStreamz Lex response zthere is an error: zI could not understandrbnone)r)lexv2Zrecognize_utterancebot_id bot_alias_idrjrs) session_idrIZ locale_Idrurorrr% call_lexv2s     r~cCs&t|}t|dtj}t|S)N)base64 b64decodezlib decompress MAX_WBITSjsonloads)r-Z decoded_dataZdecompressed_datarrr%decode's rcCs8td}|jttd}|jt|ddd}|ddS)Nz lexv2-models)rwrv botVersionen_US)rvrrxZ voiceSettingsZvoiceId)sessionclientZdescribe_bot_aliasr|r{Zdescribe_bot_locale)Z lexv2_modelZ bot_aliasZ bot_localerrr%rr,s rrc Cstdtdtt}xtjrytdkr>ttt dtdtjt }tjs`tdPt |t |}|dkrxPt |dt|d }|d d }|d d }|dkr|dkrPWqtk r}z t|Wdd}~XYqXqWdS)NZstartingzgoing to recordr rziot_sub.launchlextt2: zstop in middlery audioStream sessionState dialogActiontypeintentstateCloseZ Fulfilled)r)struuiduuid4Ziot_subZ launchlexttr'rErPrirJr~bytesrOrrj)r}rIru session_state dialog_actionrrorrr%main9s.      r__main__F)Wsysrrrosr9Zboto3rrrr[ZwaverrZpathlibrZdotenvrZbasepathrcwdZbasedirpathdirnameZenvarsr)ZSessiongetenvrrfplatformsystemr'rrlrmctypes contextlibrZgpiozeror Zapa102r dictrPrirRZpowerZonlistkeysrer{r|r,r>r?r<r=rqrrrzrZ CFUNCTYPEZc_char_pZc_intZERROR_HANDLER_FUNCr&r(r*r.rJrOrEr]rdrprsr~rrrr__name__ZbotZ launchlexintrorCrrrr%s                ;  ,