§
    yrÜi*|  ã                   ó¢  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZ	d dl
Z	d dlZ	d dlZdej        d<   ej                              ej        ¦   «         d¦  «        ej        d<   d dlZd dlZd dlmZ 	 d dlZn# e$ r dZY nw xY w	 d dlZn# e$ r dZY nw xY w	 d dlmZmZmZ n# e$ r
 dZdZd„ ZY nw xY wd	Zd
ZdZ dZ!dZ"dZ#dZ$dZ%h d£Z&d„ Z'd„ Z(d„ Z)efd„Z*d„ Z+d„ Z,d„ Z-d„ Z.d9d„Z/d„ Z0d„ Z1d„ Z2d„ Z3d:d „Z4d!„ Z5d;d$„Z6d%„ Z7d&„ Z8d'„ Z9d(„ Z:d)„ Z;d*„ Z<d+„ Z=d,„ Z>d-„ Z?d.„ Z@d/„ ZAd0„ ZBd1„ ZCd2„ ZDd<d4„ZEd5„ ZFd6„ ZGd7„ ZHeId8k    r eH¦   «          dS dS )=é    NÚ1ÚNUMBA_DISABLE_JITznumba-cacheÚNUMBA_CACHE_DIR)Úresample_poly)ÚKaldiRecognizerÚModelÚSetLogLevelc                  ó   — d S ©N© )Ú_argsÚ_kwargss     ú scripts/speech_pitch_analysis.pyr	   r	   %   s   € Øˆtó    é€>  ç      N@g     àu@ç      I@g     Àb@ç      ^@g     €f@g     €F@>   ÚerÚuhÚumÚermÚhmmÚmmmc                  óš   — t           j                             dd¦  «                             ¦   «                              ¦   «         } | dv r| S dS )NÚ$SPEECH_AUDIO_INSIGHTS_WORDS_PROVIDERÚ >   ÚnoneÚvoskÚgoogleÚdisabledr    )ÚosÚenvironÚgetÚstripÚlower)Úraws    r   Ú!resolve_word_recognition_providerr(   4   sH   € Ý
Œ*�.Š.Ð?ÀÑ
DÔ
D×
JÒ
JÑ
LÔ
L×
RÒ
RÑ
TÔ
T€CØ
Ð4Ð4ð Øˆ
Øˆ8r   c                 óô  — 	 t          | d¦  «        5 }|                     d¦  «        }d d d ¦  «         n# 1 swxY w Y   n# t          $ r Y dS w xY w|                     ¦   «         }|                     d¦  «        r|dd…         dk    rdS |                     d	¦  «        rd
|v rdndS |                     d¦  «        rdS |                     d¦  «        rdS |                     d¦  «        s|d d…         dv rdS dS )NÚrbé@   Úunknowns   RIFFé   é   s   WAVEÚwavs   Eß£s   webmÚwebmÚmatroskas   OggSÚoggs   fLaCÚflacs   ID3é   >   ó   ÿòó   ÿóó   ÿûÚmp3)ÚopenÚreadÚOSErrorr&   Ú
startswith)ÚpathÚhandleÚheaderÚlowereds       r   Údetect_containerrA   ;   so  € ðÝ�$˜ÑÔð 	% Ø—[’[ ‘_”_ˆFð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%øøåð ð ð Øˆyˆyðøøøð �lŠl‰nŒn€GØ×Ò˜Ñ!Ô!ð  f¨Q¨r¨T¤l°gÒ&=ð ØˆuØ×ÒÐ,Ñ-Ô-ð <Ø  GÐ+Ð;ˆvˆv°Ð;Ø×Ò˜Ñ!Ô!ð ØˆuØ×Ò˜Ñ!Ô!ð ØˆvØ×Ò˜Ñ Ô ð  F¨2¨A¨2¤JÐ2YÐ$Yð ØˆuØˆ9s,   ‚A  ’4¨A  ´8¸A  »8¼A  Á 
AÁAc                 óÖ  — t          j        | ¦  «        } | j        dk    rt          j        | d¬¦  «        } t          j        | j        t           j        ¦  «        rpt          j        | j        ¦  «        }t          t          t          |j        ¦  «        |j	        ¦  «        ¦  «        }|                      t           j        ¦  «        |z  } n!|                      t           j        d¬¦  «        } t          j        | ddd¬¦  «        } | j        r3t          t          j	        t          j
        | ¦  «        ¦  «        ¦  «        nd}|dk    r| |z  } |                      t           j        d¬¦  «        S )Né   )ÚaxisF©Úcopyç        )ÚnanÚposinfÚneginfg      ø?)ÚnpÚasarrayÚndimÚmeanÚ
issubdtypeÚdtypeÚintegerÚiinfoÚfloatÚmaxÚabsÚminÚastypeÚfloat32Ú
nan_to_numÚsize)ÚaudioÚinfoÚscaleÚpeaks       r   Únormalize_audior_   P   s  € ÝŒJ�uÑÔ€EØ„z�A‚~ð 'Ý”˜ AÐ&Ñ&Ô&ˆÝ	„}�U”[¥"¤*Ñ-Ô-ð 5ÝŒx˜œÑ$Ô$ˆÝ•c�#˜dœh™-œ-¨¬Ñ2Ô2Ñ3Ô3ˆØ—’�RœZÑ(Ô(¨5Ñ0ˆˆà—’�RœZ¨e�Ñ4Ô4ˆåŒM˜% S°¸SÐAÑAÔA€EØ+0¬:Ð>�5•”�œ˜u™œÑ&Ô&Ñ'Ô'Ð'¸3€DØˆc‚zð Ø˜‘ˆØ�<Š<�œ
¨ˆ<Ñ/Ô/Ð/r   c                 ó.  — ||k    r#|                       t          j        d¬¦  «        |fS t          j        t          |¦  «        t          |¦  «        ¦  «        }||z  }||z  }t          | ||¦  «        }|                      t          j        d¬¦  «        |fS )NFrE   )rW   rK   rX   ÚmathÚgcdÚintr   )r[   ÚsrÚ	target_srrb   ÚupÚdownÚ	resampleds          r   Úresample_audiori   b   sŒ   € Ø	ˆY‚ð 8Ø�|Š|�BœJ¨Uˆ|Ñ3Ô3°RÐ7Ð7Ý
Œ(•3�r‘7”7�C 	™NœNÑ
+Ô
+€CØ	�cÑ	€BØ�‰9€DÝ˜e R¨Ñ.Ô.€IØ×Ò�BœJ¨UÐÑ3Ô3°YÐ>Ð>r   c                  óL  — t           j                             dd¦  «                             ¦   «         t           j                             dd¦  «                             ¦   «         dg} | D ];}|r7t           j                             |¦  «        st          j        |¦  «        r|c S Œ<dS )NÚSPEECHSUPER_FFMPEG_BINARYr   ÚFFMPEG_BINARYÚffmpeg)r"   r#   r$   r%   r=   ÚisfileÚshutilÚwhich)Ú
candidatesÚ	candidates     r   Úresolve_ffmpeg_binaryrs   l   sœ   € å
Œ
�ŠÐ2°BÑ7Ô7×=Ò=Ñ?Ô?Ý
Œ
�Š�¨Ñ+Ô+×1Ò1Ñ3Ô3Øð€Jð
  ð ð ˆ	Øð 	�"œ'Ÿ.š.¨Ñ3Ô3ð 	µv´|ÀIÑ7NÔ7Nð 	ØÐÐÐøØˆ2r   c                 ó"  — t          ¦   «         }|dk    rt          d¦  «        ‚|ddd| dddd	d
ddt          t          ¦  «        dg}t	          j        |t          j        t          j        d¬¦  «        }|j        dk    r>|j         	                    dd¦  «         
                    ¦   «         }t          |pd¦  «        ‚t          j        |j        t          j        ¬¦  «        }|j        dk    rt          d¦  «        ‚t!          |¦  «        t          dfS )Nr   z/ffmpeg is required to decode this audio format.z-vÚerrorz-iz-fÚs16lez-acodecÚ	pcm_s16lez-acr   z-arú-F)ÚstdoutÚstderrÚcheckr   zutf-8Úignorez(ffmpeg failed to decode the input audio.©rP   zffmpeg returned empty PCM data.rm   )rs   ÚRuntimeErrorÚstrÚTARGET_SAMPLE_RATEÚ
subprocessÚrunÚPIPEÚ
returncoderz   Údecoder%   rK   Ú
frombufferry   Úint16rZ   r_   )r=   Úffmpeg_binaryÚcommandÚprocessrz   r[   s         r   Úload_audio_with_ffmpegr‹   x   s  € Ý)Ñ+Ô+€MØ˜Òð NÝÐLÑMÔMÐMð 	ØØØØØØØØØØØÝÕÑÔØð€Gõ  Œn˜W­Z¬_ÅZÄ_Ð\aÐbÑbÔb€GØÔ˜QÒð QØ”×&Ò& w°Ñ9Ô9×?Ò?ÑAÔAˆÝ˜6ÐOÐ%OÑPÔPÐPåŒM˜'œ.µ´Ð9Ñ9Ô9€EØ„z�Q‚ð >ÝÐ<Ñ=Ô=Ð=Ý˜5Ñ!Ô!Õ#5°xÐ?Ð?r   c                 ó>  — t           j                             | ¦  «        st          d| › �¦  «        ‚t	          | ¦  «        }g }	 t          j        | d¬¦  «        \  }}t          |¦  «        }t          ||¦  «        \  }}||d|fS # t          $ r"}| 
                    d|› �¦  «         Y d }~nd }~ww xY w	 t          | ¦  «        \  }}}||||fS # t          $ r"}| 
                    d|› �¦  «         Y d }~nd }~ww xY wt          d                     |¦  «        ¦  «        ‚)NzAudio file not found: F)Ú	always_2dÚ	soundfilezsoundfile: zffmpeg: z; )r"   r=   rn   ÚFileNotFoundErrorrA   Úsfr:   r_   ri   Ú	ExceptionÚappendr‹   r~   Újoin)r=   Ú	containerÚerrorsÚdatard   r[   ÚexcÚbackends           r   Ú
load_audior™   ˜   sd  € ÝŒ7�>Š>˜$ÑÔð AÝÐ ?¸Ð ?Ð ?Ñ@Ô@Ð@å  Ñ&Ô&€IØ€Fð+Ý”7˜4¨5Ð1Ñ1Ô1‰ˆˆbÝ Ñ%Ô%ˆÝ" 5¨"Ñ-Ô-‰	ˆˆrØ�b˜+ yÐ0Ð0øÝð +ð +ð +Ø�ŠÐ) CÐ)Ð)Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*øøøøð+øøøð(Ý3°DÑ9Ô9Ñˆˆr�7Ø�b˜' 9Ð,Ð,øÝð (ð (ð (Ø�ŠÐ& Ð&Ð&Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'øøøøð(øøøõ �t—y’y Ñ(Ô(Ñ
)Ô
)Ð)s1   ÁA B Â
B1ÂB,Â,B1Â5C Ã
C:ÃC5Ã5C:c                 óÖ   — | j         dk    rdS t          t          j        t          j        | ¦  «        d¦  «        ¦  «        }t          dt          d|dk    r|dz  nd¦  «        ¦  «        S )Nr   g{®Gáz„?éA   gú~j¼t“h?g¸…ëQ¸ž?gš™™™™™É?)rZ   rS   rK   Ú
percentilerU   rT   rV   )r[   rœ   s     r   Úestimate_activity_thresholdr�   ¯   sc   € Ø„z�Q‚ð ØˆtÝ•r”}¥R¤V¨E¡]¤]°BÑ7Ô7Ñ8Ô8€JÝˆu•c˜$°JÀ²NÐ L 
¨SÑ 0Ð 0ÈÑMÔMÑNÔNÐNr   c           	      óh  — |€t          | ¦  «        nt          |¦  «        }t          j        | ¦  «        |k    }t          j        |¦  «        s| S t          t          j        |¦  «        ¦  «        }t          t          | ¦  «        t          j        |d d d…         ¦  «        z
  ¦  «        }| ||…         S )Néÿÿÿÿ)r�   rS   rK   rU   Úanyrc   ÚargmaxÚlen)r[   Ú	thresholdÚmaskÚstartÚends        r   Úsimple_trimr§   ¶   sš   € Ø6?Ð]Õ+¨EÑ2Ô2Ð2ÍUÐS\ÑM]ÔM]€IÝŒ6�%‰=Œ=˜9Ò$€DÝŒ6�$‰<Œ<ð ØˆÝ•”	˜$‘”Ñ Ô €EÝ
�c�%‰jŒj�2œ9 T¨$¨$¨B¨$¤ZÑ0Ô0Ñ0Ñ
1Ô
1€CØ��s�ÔÐr   c                 ó®   — t          j        t          j        | t           j        ¬¦  «        dd¦  «        }|dz                       t           j        ¦  «        S )Nr}   g      ð¿ç      ð?g    Àÿß@)rK   ÚcliprL   rX   rW   r‡   )r[   Úclippeds     r   Úaudio_to_pcm16r¬   À   sA   € ÝŒg•b”j ­b¬jÐ9Ñ9Ô9¸4ÀÑEÔE€GØ�gÑ×%Ò%¥b¤hÑ/Ô/Ð/r   c                  ó$  — t           j                             dd¦  «                             ¦   «         p1t           j                             dd¦  «                             ¦   «         } t           j                             t           j                             t          ¦  «        ¦  «        }| t           j                             t           j                             |dddd¦  «        ¦  «        t           j                             t           j                             |dddd¦  «        ¦  «        t           j                             t           j         	                    d	¦  «        d
ddd¦  «        g}|D ]'}|r#t           j         
                    |¦  «        r|c S Œ(dS )NÚSPEECH_VOSK_MODEL_PATHr   ÚVOSK_MODEL_PATHz..Úmodelsr   zvosk-model-small-en-us-0.15zvosk-model-small-en-in-0.4ú~ÚAppDataÚLocal)r"   r#   r$   r%   r=   ÚdirnameÚabspathÚ__file__r“   Ú
expanduserÚisdir)Ú
configuredÚ
script_dirrq   rr   s       r   Úresolve_vosk_model_pathr»   Å   s,  € Ý”—’Ð 8¸"Ñ=Ô=×CÒCÑEÔEÐvÍÌÏÊÐXiÐkmÑInÔIn×ItÒItÑIvÔIv€JÝ”—’¥¤§¢µÑ!:Ô!:Ñ;Ô;€JàÝ
Œ�Š�œŸš Z°°xÀÐIfÑgÔgÑhÔhÝ
Œ�Š�œŸš Z°°xÀÐIeÑfÔfÑgÔgÝ
Œ�Š•R”W×'Ò'¨Ñ,Ô,¨i¸À&ÐJgÑhÔhð	€Jð  ð ð ˆ	Øð 	�œŸš yÑ1Ô1ð 	ØÐÐÐøØˆ2r   c                 ó   — t           €t          d¦  «        ‚t          dt          d|dk    r|dz  nd¦  «        ¦  «        }t          j        | |¬¦  «        }|                     |t          t          ¬¦  «        }t          j	        |j
        d	         t          j        ¬
¦  «        }t          j	        |                     ¦   «         t          j        ¬
¦  «        }t          j        |¦  «        |dk    z  }||         ||         fS )NzParselmouth is not installed.gš™™™™™©?ç333333Ã?r   r   gš™™™™™¹?)Úsampling_frequency)Ú	time_stepÚpitch_floorÚpitch_ceilingÚ	frequencyr}   rG   )Úparselmouthr~   rT   rV   ÚSoundÚto_pitchÚMIN_PITCH_HZÚMAX_PITCH_HZrK   rL   Úselected_arrayrX   ÚxsÚisfinite)	r[   rd   Údurationr¿   ÚsoundÚpitchÚfrequenciesÚtimesÚvoiced_masks	            r   Úextract_pitch_contourrÑ   Ô   sÜ   € Ýð <ÝÐ:Ñ;Ô;Ð;å�D�#˜d¸À1ºÐ$M H¨uÑ$4Ð$4È#ÑNÔNÑOÔO€IÝÔ˜e¸Ð;Ñ;Ô;€EØ�NŠN Y½LÕXdˆNÑeÔe€EÝ”*˜UÔ1°+Ô>ÅbÄjÐQÑQÔQ€KÝŒJ�u—x’x‘z”z­¬Ð4Ñ4Ô4€EÝ”+˜kÑ*Ô*¨k¸CÒ.?Ñ@€KØ�Ô˜{¨;Ô7Ð7Ð7r   c                 óÎ   — |j         dk     r| |fS t          t          j        |¦  «        ¦  «        }||dz  k    ||dz  k    z  }| |         }||         }|j         dk     r| |fS ||fS )Né   g333333ã?gš™™™™™ù?)rZ   rS   rK   Úmedian)rÏ   rÎ   rÔ   r¤   Úfiltered_timesÚfiltered_freqss         r   Úreject_pitch_outliersr×   á   s‰   € ØÔ˜"Òð "Ø�kÐ!Ð!Ý•2”9˜[Ñ)Ô)Ñ*Ô*€FØ˜6 C™<Ò'¨K¸6ÀC¹<Ò,GÑH€DØ˜4”[€NØ  Ô&€NØÔ˜RÒð "Ø�kÐ!Ð!Ø˜>Ð)Ð)r   é   c                 óÄ  — |j         dk    rg S t          |t          dt          t	          |dz  ¦  «        ¦  «        ¦  «        ¦  «        }t          j        dt          |t          | d         ¦  «        ¦  «        |dz   ¦  «        }g }t          |¦  «        D ]Ë}||         }||dz            }	||dz
  k    r| |k    | |	k    z  n| |k    | |	k     z  }
t          j	        |
¦  «        sŒM| 
                    t	          t          t          j        | |
         ¦  «        ¦  «        d¦  «        t	          t          t          j        ||
         ¦  «        ¦  «        d¦  «        dœ¦  «         ŒÌ|S )	Nr   r-   gš™™™™™ñ?rG   rŸ   rC   r4   )Útime_secÚpitch_hz)rZ   rV   rT   rc   ÚroundrK   ÚlinspacerS   Úranger    r’   rN   rÔ   )rÏ   ÚvaluesrË   Ú
max_pointsÚbucket_countÚedgesÚpointsÚindexr¥   r¦   r¤   s              r   Úbucket_pointsrå   í   sb  € Ø„{�aÒð Øˆ	Ý�z¥3 q­#­e°H¸s±NÑ.CÔ.CÑ*DÔ*DÑ#EÔ#EÑFÔF€LÝŒK˜�S ­5°°r´Ñ+;Ô+;Ñ<Ô<¸lÈQÑ>NÑOÔO€EØ€FÝ�|Ñ$Ô$ð 
ð 
ˆØ�e”ˆØ�E˜A‘IÔˆØ49¸\ÈAÑ=MÒ4MÐs�˜’ 5¨C¢<Ñ0Ð0ÐTYÐ]bÒTbÐglÐorÒgrÑSsˆÝŒv�d‰|Œ|ð 	ØØ�Šå!¥%­¬°°d´Ñ(<Ô(<Ñ"=Ô"=¸qÑAÔAÝ!¥%­¬	°&¸´,Ñ(?Ô(?Ñ"@Ô"@À!ÑDÔDðð ñ	
ô 	
ð 	
ð 	
ð €Mr   c                 ó¸  — d„ | D ¦   «         }t           dz   }|r t          |t          |¦  «        dz  ¦  «        }t          dt          j        |dz  ¦  «        dz  ¦  «        }t          t           dt          |¦  «        t          t          |¦  «        d¦  «        |rt          t          |¦  «        d¦  «        nd |rt          t          |¦  «        d¦  «        nd | dœS )	Nc                 ó†   — g | ]>}t          j        t          |d          ¦  «        ¦  «        ¯)t          |d          ¦  «        ‘Œ?S )rÛ   )rK   rÊ   rS   ©Ú.0Úpoints     r   ú
<listcomp>z%build_pitch_chart.<locals>.<listcomp>  sC   € ÐfÐfÐf¨UÅÄÍEÐRWÐXbÔRcÑLdÔLdÑ@eÔ@eÐf•�e˜JÔ'Ñ(Ô(ÐfÐfÐfr   g      D@gìQ¸…ëñ?g     Àr@r   rG   r4   )Útarget_min_hzÚtarget_max_hzÚy_min_hzÚy_max_hzÚduration_secondsÚobserved_min_hzÚobserved_max_hzrã   )ÚTARGET_RANGE_MAX_HZrT   ra   ÚceilÚTARGET_RANGE_MIN_HZrS   rÜ   rV   )rã   rË   ÚobservedÚupper_candidateÚy_maxs        r   Úbuild_pitch_chartrù     sÖ   € ØfÐf°fÐfÑfÔf€HÝ)¨DÑ0€OØð EÝ˜o­s°8©}¬}¸tÑ/CÑDÔDˆÝ�•t”y °4Ñ!7Ñ8Ô8¸4Ñ?Ñ@Ô@€Eå,Ý,ØÝ˜%‘L”LÝ!¥%¨¡/¤/°1Ñ5Ô5Ø6>ÐH�5¥ X¡¤°Ñ2Ô2Ð2ÀDØ6>ÐH�5¥ X¡¤°Ñ2Ô2Ð2ÀDØð	ð 	ð 	r   r4   rÓ   c           
      óü  — t           �|dvrg g fS t          ||z  dz  ¦  «        }t          | ¦  «        }t          |¦  «        |z  }|dk    rg g fS t          j        t          |¦  «        ¦  «        }|dz  }g }	t          |¦  «        D ]\}
|
|z  }||z   }|	                     t          |                     |||…          	                    ¦   «         |¦  «        ¦  «        ¦  «         Œ]g }t          t          |	¦  «        ¦  «        D ]‘}
t          d|
dz
  ¦  «        }t          t          |	¦  «        |
dz   ¦  «        }|	||…         }|                     t          d„ |D ¦   «         ¦  «        t          j        t          |¦  «        dz  ¦  «        k    ¦  «         Œ’g }|d         }d}t          |d	d …         d	¬
¦  «        D ]\\  }
}||k    rŒ|
|z  }|                     |t!          |d¦  «        t!          |d¦  «        t!          ||z
  d¦  «        dœ¦  «         |}|}Œ]t!          ||z  d¦  «        }|                     |t!          |d¦  «        |t!          ||z
  d¦  «        dœ¦  «         d„ |D ¦   «         }d„ |D ¦   «         }||fS )N>   é }  é@  é€»  r   g     @�@r   r4   é   c              3   ó   K  — | ]}|¯d V — Œ	dS )rC   Nr   ©ré   Úitems     r   ú	<genexpr>z&detect_vad_segments.<locals>.<genexpr>+  s'   è è € Ð5Ð5˜t°Ð5˜Ð5Ð5Ð5Ð5Ð5Ð5r   ç       @rG   rC   )r¥   )ÚspeechÚ	start_secÚend_secÚduration_secc                 ó:   — g | ]}|d          ¯
|d         dk    ¯|‘ŒS )r  r  g¸…ëQ¸®?r   ©ré   Úsegments     r   rë   z'detect_vad_segments.<locals>.<listcomp>I  s4   € ÐpÐpÐp 7¸'À(Ô:KÐpÐPWÐXfÔPgÐkoÒPoÐp�wÐpÐpÐpr   c                 ó:   — g | ]}|d          °
|d         dk    ¯|‘ŒS )r  r  g{®Gáz´?r   r	  s     r   rë   z'detect_vad_segments.<locals>.<listcomp>J  s4   € ÐuÐuÐu G¸wÀxÔ?PÐuÐU\Ð]kÔUlÐptÒUtÐu˜ÐuÐuÐur   )Ú	webrtcvadrc   r¬   r¢   ÚVadrÞ   r’   ÚboolÚ	is_speechÚtobytesrT   rV   Úsumra   rô   Ú	enumeraterÜ   )r[   rd   ÚaggressivenessÚframe_msÚframe_samplesÚpcm16Úframe_countÚvadÚframe_durationÚ	raw_flagsrä   r¥   r¦   ÚflagsÚvotesÚsegmentsÚcurrent_stateÚcurrent_startÚstateÚend_timeÚ	final_endÚspeech_segmentsÚsilence_segmentss                          r   Údetect_vad_segmentsr%    sä  € Ýð ˜BÐ&AÐAð Ø�2ˆvˆå˜˜X™¨Ñ.Ñ/Ô/€MÝ˜5Ñ!Ô!€EÝ�e‘*”* Ñ-€KØ�aÒð Ø�2ˆvˆå
Œ-�˜NÑ+Ô+Ñ
,Ô
,€CØ Ñ&€NØ€IÝ�{Ñ#Ô#ð Nð NˆØ˜Ñ%ˆØ�mÑ#ˆØ×Ò�˜cŸmšm¨E°%¸°)Ô,<×,DÒ,DÑ,FÔ,FÈÑKÔKÑLÔLÑMÔMÐMÐMà€EÝ•s˜9‘~”~Ñ&Ô&ð Vð VˆÝ�A�u˜q‘yÑ!Ô!ˆÝ•#�i‘.”. %¨!¡)Ñ,Ô,ˆØ˜% ˜)Ô$ˆØ�Š•SÐ5Ð5 uÐ5Ñ5Ô5Ñ5Ô5½¼Å3ÀuÁ:Ä:ÐPSÑCSÑ9TÔ9TÒTÑUÔUÐUÐUà€HØ˜!”H€MØ€MÝ! %¨¨¨¤)°1Ð5Ñ5Ô5ð !ð !‰ˆˆuØ�MÒ!ð 	ØØ˜>Ñ)ˆØ�Šà'Ý" =°!Ñ4Ô4Ý  ¨1Ñ-Ô-Ý % h°Ñ&>ÀÑ BÔ Bð	ð ñ	
ô 	
ð 	
ð ˆØ ˆˆå�k NÑ2°AÑ6Ô6€IØ‡O‚Oà#Ý˜}¨aÑ0Ô0Ø Ý! )¨mÑ";¸QÑ?Ô?ð		
ð 	
ñô ð ð qÐp¨hÐpÑpÔp€OØuÐu¨xÐuÑuÔuÐØÐ,Ð,Ð,r   c                 ó´  — t          ¦   «         }|dk    rg |ddfS t          �t          €t          d¦  «        ‚t	          ¦   «         }|dk    rt          d¦  «        ‚t          d¦  «         t          |¦  «        }t          |t          |¦  «        ¦  «        }|                     d¦  «         |                     d¦  «         | 	                    d¦  «         t          | ¦  «                             ¦   «         }g }t          dt          |¦  «        d	¦  «        D ]]}|||d	z   …         }	|                     |	¦  «        r9|                     t!          j        |                     ¦   «         ¦  «        ¦  «         Œ^|                     t!          j        |                     ¦   «         ¦  «        ¦  «         g }
|D �]}|                     d
g ¦  «        D ]ê}t+          |                     dd¦  «        ¦  «                             ¦   «         }t          |                     dd¦  «        ¦  «        }t          |                     dd¦  «        ¦  «        }|rk||k    re|
                     |t/          |d¦  «        t/          |d¦  «        t/          t          |                     dd¦  «        ¦  «        d¦  «        dœ¦  «         Œë�Œ|
|t0          j                             |¦  «        |fS )Nr   r   z/Vosk is not installed for word timing analysis.zQNo Vosk model directory was found. Set SPEECH_VOSK_MODEL_PATH or VOSK_MODEL_PATH.rŸ   TFr   i   ÚresultÚwordr¥   rG   r¦   rþ   Úconf)r(  r  r  Ú
confidence)r(   r   r   r~   r»   r	   rS   ÚSetWordsÚSetPartialWordsÚSetMaxAlternativesr¬   r  rÞ   r¢   ÚAcceptWaveformr’   ÚjsonÚloadsÚResultÚFinalResultr$   r   r%   rÜ   r"   r=   Úbasename)r[   rd   ÚproviderÚ
model_pathÚmodelÚ
recognizerÚ	pcm_bytesÚresultsr¥   ÚchunkÚwordsr'  r  r(  r  r  s                   r   Útranscribe_words_voskr<  N  s¼  € Ý0Ñ2Ô2€HØ�6Òð $Ø�8˜R Ð#Ð#åð N�ð NÝÐLÑMÔMÐMå(Ñ*Ô*€JØ�RÒð pÝÐnÑoÔoÐoå��O„O€OÝ�*ÑÔ€EÝ  ­¨b©	¬	Ñ2Ô2€JØ×Ò˜ÑÔÐØ×Ò˜uÑ%Ô%Ð%Ø×!Ò! !Ñ$Ô$Ð$å˜uÑ%Ô%×-Ò-Ñ/Ô/€IØ€GÝ�q�#˜i™.œ.¨$Ñ/Ô/ð <ð <ˆØ˜% %¨$¡,Ð.Ô/ˆØ×$Ò$ UÑ+Ô+ð 	<Ø�NŠN�4œ: j×&7Ò&7Ñ&9Ô&9Ñ:Ô:Ñ;Ô;Ð;øØ‡N‚N•4”:˜j×4Ò4Ñ6Ô6Ñ7Ô7Ñ8Ô8Ð8à€EØð ñ ˆØ—J’J˜x¨Ñ,Ô,ð 	ð 	ˆDÝ�t—x’x ¨Ñ+Ô+Ñ,Ô,×2Ò2Ñ4Ô4ˆDÝ˜dŸhšh w°Ñ4Ô4Ñ5Ô5ˆIÝ˜DŸHšH U¨CÑ0Ô0Ñ1Ô1ˆGØð ˜ )Ò+ð Ø—’à $Ý%*¨9°aÑ%8Ô%8Ý#(¨°!Ñ#4Ô#4Ý&+­E°$·(²(¸6À3Ñ2GÔ2GÑ,HÔ,HÈ!Ñ&LÔ&Lð	ð ñô ð øñ	ð �(�BœG×,Ò,¨ZÑ8Ô8¸*ÐDÐDr   c                 ó`   — t          dt          ||¦  «        t          | |¦  «        z
  ¦  «        S )NrG   ©rT   rV   )Ústart_aÚend_aÚstart_bÚend_bs       r   Úoverlap_durationrC  {  s+   € Ýˆs•C˜˜uÑ%Ô%­¨G°WÑ(=Ô(=Ñ=Ñ>Ô>Ð>r   c                 ó6   — | dk    rdS | dk    rdS | dk    rdS dS )Ng333333ë?ÚbadgffffffÖ?Úgoodr½   Úoptionalr   r   ©r  s    r   Úclassify_pauserI    s=   € Ø�tÒð ØˆuØ�tÒð ØˆvØ�tÒð ØˆzØˆ2r   c                 óJ  — |sg S g }| �r9t          t          | ¦  «        dz
  ¦  «        D �]}t          | |         d         ¦  «        }t          | |dz            d         ¦  «        }||k    rŒCg }d}|D ][}t          ||t          |d         ¦  «        t          |d         ¦  «        ¦  «        }	|	dk    rŒA|                     |¦  «         ||	z  }Œ\|dk     rŒ¬t          |t          d„ |D ¦   «         ¦  «        ¦  «        }
t          |t          d„ |D ¦   «         ¦  «        ¦  «        }t          |||
z
  ¦  «        }t          |¦  «        }|dk    r�Œ$t          | |         d	         ¦  «         	                    ¦   «         }t          | |dz            d	         ¦  «         	                    ¦   «         }d}|t          v s	|t          v rd
}n|dk    rd}|                     t          |
d¦  «        t          |d¦  «        t          |d¦  «        t          |
|z   dz  d¦  «        || |         d	         | |dz            d	         |dœ¦  «         �Œnà|D ]Ý}t          |d         ¦  «        }t          |¦  «        }|dk    rŒ-|                     t          t          |d         ¦  «        d¦  «        t          t          |d         ¦  «        d¦  «        t          |d¦  «        t          t          |d         ¦  «        t          |d         ¦  «        z   dz  d¦  «        |dd|dk    rdnddœ¦  «         ŒÞ|S )NrC   r  r  rG   r½   c              3   ó@   K  — | ]}t          |d          ¦  «        V — ŒdS )r  N©rS   r   s     r   r  z(merge_pause_and_words.<locals>.<genexpr>¡  s/   è è € Ð,[Ð,[È$­U°4¸Ô3DÑ-EÔ-EÐ,[Ð,[Ð,[Ð,[Ð,[Ð,[r   c              3   ó@   K  — | ]}t          |d          ¦  «        V — ŒdS )r  NrL  r   s     r   r  z(merge_pause_and_words.<locals>.<genexpr>¢  s.   è è € Ð(UÐ(UÀD­¨t°I¬Ñ)?Ô)?Ð(UÐ(UÐ(UÐ(UÐ(UÐ(Ur   r   r(  Úfiller_pauserE  Ú	bad_pauserþ   r  r4   )r  r  r  rÚ   ÚtypeÚprevious_wordÚ	next_wordÚhesitation_typer  )rÞ   r¢   rS   rC  r’   rT   rV   rI  r   r&   ÚFILLER_WORDSrÜ   )r;  r$  Úeventsrä   Ú	gap_startÚgap_endÚoverlapsÚtotal_overlapÚpauseÚoverlapÚevent_startÚ	event_endr  Ú
pause_typerQ  rR  rS  s                    r   Úmerge_pause_and_wordsr_  ‰  s‰  € Øð Øˆ	à€FØñ ?Ý�3˜u™:œ:¨™>Ñ*Ô*ð ,	ñ ,	ˆEÝ˜e Eœl¨9Ô5Ñ6Ô6ˆIÝ˜E %¨!¡)Ô,¨[Ô9Ñ:Ô:ˆGØ˜)Ò#ð ØàˆHØˆMØ)ð )ð )�Ý*¨9°g½uÀUÈ;ÔEWÑ?XÔ?XÕZ_Ð`eÐfoÔ`pÑZqÔZqÑrÔr�Ø˜c’>ð ØØ—’ Ñ&Ô&Ð&Ø Ñ(��à˜tÒ#ð Øå˜i­Ð,[Ð,[ÐRZÐ,[Ñ,[Ô,[Ñ)[Ô)[Ñ\Ô\ˆKÝ˜G¥SÐ(UÐ(UÈHÐ(UÑ(UÔ(UÑ%UÔ%UÑVÔVˆIÝ˜}¨i¸+Ñ.EÑFÔFˆLÝ'¨Ñ5Ô5ˆJØ˜RÒð Ùå  e¤¨VÔ 4Ñ5Ô5×;Ò;Ñ=Ô=ˆMÝ˜E %¨!¡)Ô,¨VÔ4Ñ5Ô5×;Ò;Ñ=Ô=ˆIØ ˆOØ¥Ð,ð .°	½\Ð0Ið .Ø"0��Ø˜uÒ$ð .Ø"-�à�MŠMå!& {°AÑ!6Ô!6Ý$ Y°Ñ2Ô2Ý$)¨,¸Ñ$:Ô$:Ý % {°YÑ'>À#Ñ&EÀqÑ IÔ IØ&Ø%*¨5¤\°&Ô%9Ø!& u¨q¡yÔ!1°&Ô!9Ø'6ð	ð 	ñô ð ñ ðC,	ð\ &ð 	ð 	ˆEÝ   ~Ô!6Ñ7Ô7ˆLÝ'¨Ñ5Ô5ˆJØ˜RÒð ØØ�MŠMå!&¥u¨U°;Ô-?Ñ'@Ô'@À!Ñ!DÔ!DÝ$¥U¨5°Ô+;Ñ%<Ô%<¸aÑ@Ô@Ý$)¨,¸Ñ$:Ô$:Ý %¥u¨U°;Ô-?Ñ'@Ô'@Å5ÈÈyÔIYÑCZÔCZÑ'ZÐ^aÑ&aÐcdÑ eÔ eØ&Ø%'Ø!#Ø6@ÀEÒ6IÐ'Q { {Èrð	ð 	ñô ð ð ð €Mr   c                 óv  ‡
‡— |dk    rt           t          dddd d g dœS |dk    rdnd}t          dt          t	          j        ||z  ¦  «        ¦  «        ¦  «        }g }t          |¦  «        D ]�}||z  Št          ||dz   |z  ¦  «        Š
t          ˆ
ˆfd	„| D ¦   «         ¦  «        }|dz  t          d
‰
‰z
  ¦  «        z  }| 	                    t          ‰‰
‰z
  dz  z   d¦  «        t          |d¦  «        dœ¦  «         Œ�d„ |D ¦   «         }t          dt	          j        |rt          |¦  «        nddz  ¦  «        dz  ¦  «        }	t           t          dt          |	¦  «        t          t          |¦  «        d¦  «        |rt          t          |¦  «        d¦  «        nd |rt          t          |¦  «        d¦  «        nd |dœS )Nr   rG   g     @o@)Útarget_min_wpmÚtarget_max_wpmÚ	y_min_wpmÚ	y_max_wpmrð   Úobserved_min_wpmÚobserved_max_wpmrã   r   ç      $@g      @rC   c              3   ób   •K  — | ])}‰t          |d          ¦  «        cxk    r‰k     ¯"n ndV — Œ*dS )r  rC   NrL  )ré   r(  r¦   r¥   s     €€r   r  z#build_pace_chart.<locals>.<genexpr>ä  sQ   øè è € ÐSÐS˜$¨5µE¸$¸{Ô:KÑ4LÔ4LÐSÐSÒSÐSÈsÒSÐSÐSÐSÐS�AÐSÐSÐSÐSÐSÐSr   gü©ñÒMbP?r  r4   )rÚ   Úwpmc                 ó   — g | ]
}|d          ‘ŒS )ri  r   rè   s     r   rë   z$build_pace_chart.<locals>.<listcomp>è  s   € Ð1Ð1Ð1 ��e”Ð1Ð1Ð1r   g      9@)ÚPACE_TARGET_MIN_WPMÚPACE_TARGET_MAX_WPMrT   rc   ra   rô   rÞ   rV   r  r’   rÜ   rS   )r;  rË   Ú
window_secrá   rã   ÚbucketÚcountri  rö   rø   r¦   r¥   s             @@r   Úbuild_pace_chartrp  Ñ  sì  øø€ Ø�1‚}ð 

å1Ý1ØØØ #Ø $Ø $Øð	
ð 	
ð 		
ð " TÒ)Ð2��¨s€JÝ�q�#�dœi¨°:Ñ(=Ñ>Ô>Ñ?Ô?Ñ@Ô@€LØ€FÝ˜Ñ%Ô%ð cð cˆØ˜Ñ#ˆÝ�(˜V a™Z¨:Ñ5Ñ6Ô6ˆÝÐSÐSÐSÐSÐS %ÐSÑSÔSÑSÔSˆØ�t‰|�s 5¨3°©;Ñ8Ô8Ñ8ˆØ�Š¥5¨°3¸±;À#Ñ2EÑ)FÈÑ#JÔ#JÕSXÐY\Ð^_ÑS`ÔS`ÐaÐaÑbÔbÐbÐbà1Ð1¨&Ð1Ñ1Ô1€HÝ�•t”y°8Ð"F¥# h¡-¤- -ÀÈ$Ñ!NÑOÔOÐRVÑVÑWÔW€Eå-Ý-ØÝ˜5‘\”\Ý!¥%¨¡/¤/°1Ñ5Ô5Ø7?ÐI�E¥# h¡-¤-°Ñ3Ô3Ð3ÀTØ7?ÐI�E¥# h¡-¤-°Ñ3Ô3Ð3ÀTØð	ð 	ð 	r   c                 óê   — d„ | D ¦   «         }t          dt          j        |rt          |¦  «        nddz  ¦  «        dz  ¦  «        }t          t	          |¦  «        d¦  «        dt	          |¦  «        | dœS )Nc                 ó8   — g | ]}t          |d          ¦  «        ‘ŒS rH  rL  ©ré   Úevents     r   rë   z%build_pause_chart.<locals>.<listcomp>÷  s%   € ÐBÐBÐB°%•�u˜^Ô,Ñ-Ô-ÐBÐBÐBr   g      @r  r4   rG   )rð   Úy_min_secondsÚy_max_secondsrU  )rT   ra   rô   rÜ   rS   )rU  rË   Ú	durationsrø   s       r   Úbuild_pause_chartrx  ö  sx   € ØBÐB¸6ÐBÑBÔB€IÝ�•T”Y°)Ð D¥ I¡¤ ÀÈÑKÑLÔLÈsÑRÑSÔS€Eå!¥%¨¡/¤/°1Ñ5Ô5ØÝ˜u™œØð	ð ð r   c                 ó>   — t          |t          || ¦  «        ¦  «        S r   r>  )ÚvalueÚlowÚhighs      r   Úclampr}    s   € Ýˆs•C˜˜eÑ$Ô$Ñ%Ô%Ð%r   c           
      ó  — | j         dk    r	dddddddœS t          t          j        | d¦  «        ¦  «        }t          t          j        | d¦  «        ¦  «        }t          t          j        | ¦  «        ¦  «        t          t          j        | ¦  «        ¦  «        t          t          j        | ¦  «        ¦  «        t          d||z
  ¦  «        t          t          j        | ¦  «        ¦  «        t          t          j        | ¦  «        ¦  «        dœS )Nr   rG   )rN   rÔ   ÚstdÚ	variationrV   rT   é
   éZ   )	rZ   rS   rK   rœ   rN   rÔ   r  rT   rV   )rÎ   Úp10Úp90s      r   Úcompute_pitch_statsr…    sð   € ØÔ˜1Òð 
àØØØØØð
ð 
ð 	
õ •”˜k¨2Ñ.Ô.Ñ
/Ô
/€CÝ
•”˜k¨2Ñ.Ô.Ñ
/Ô
/€Cå•b”g˜kÑ*Ô*Ñ+Ô+Ý�œ	 +Ñ.Ô.Ñ/Ô/Ý•R”V˜KÑ(Ô(Ñ)Ô)Ý˜˜c C™iÑ(Ô(Ý•R”V˜KÑ(Ô(Ñ)Ô)Ý•R”V˜KÑ(Ô(Ñ)Ô)ðð ð r   c                 ó  — |j         dk    s|dk    rg S t          dt          dt          t	          j        |dz  ¦  «        ¦  «        ¦  «        ¦  «        }t          j        d||dz   ¦  «        }g }t          |¦  «        D �]�}t          ||         ¦  «        }t          ||dz            ¦  «        }||dz
  k    r| |k    | |k    z  n| |k    | |k     z  }	t          j
        |	¦  «        sŒh||	         }
|                     t          |d¦  «        t          |d¦  «        t          ||z
  d¦  «        t          t          t          j        |
¦  «        ¦  «        d¦  «        t          t          t          j        |
¦  «        ¦  «        d¦  «        t          t          t          j        |
¦  «        ¦  «        d¦  «        t          t          t          j        |
¦  «        ¦  «        d¦  «        t          |
j         ¦  «        d	œ¦  «         �Œƒ|S )
Nr   r-   é   ç      .@rG   rC   rþ   r4   )r  r  rË   Ú
mean_pitchÚmedian_pitchÚ	min_pitchÚ	max_pitchÚvoiced_frames)rZ   rV   rT   rc   ra   rô   rK   rÝ   rÞ   rS   r    r’   rÜ   rN   rÔ   )rÏ   rÎ   rË   rá   râ   r  rä   r¥   r¦   r¤   Úbucket_valuess              r   Úanalyze_segmentsr�    sß  € ØÔ˜1Òð  ¨A¢ð Øˆ	å�q�#˜a¥¥T¤Y¨x¸$©Ñ%?Ô%?Ñ!@Ô!@ÑAÔAÑBÔB€LÝŒK˜˜X |°aÑ'7Ñ8Ô8€EØ€HÝ�|Ñ$Ô$ð 
ñ 
ˆÝ�e˜E”lÑ#Ô#ˆÝ�E˜% !™)Ô$Ñ%Ô%ˆØ49¸\ÈAÑ=MÒ4MÐs�˜’ 5¨C¢<Ñ0Ð0ÐTYÐ]bÒTbÐglÐorÒgrÑSsˆÝŒv�d‰|Œ|ð 	Øà# DÔ)ˆØ�Šå" 5¨!™_œ_Ý   a™=œ=Ý! #¨¡+¨qÑ1Ô1Ý#¥E­"¬'°-Ñ*@Ô*@Ñ$AÔ$AÀ1ÑEÔEÝ %¥e­B¬I°mÑ,DÔ,DÑ&EÔ&EÀqÑ IÔ IÝ"¥5­¬°Ñ)>Ô)>Ñ#?Ô#?ÀÑCÔCÝ"¥5­¬°Ñ)>Ô)>Ñ#?Ô#?ÀÑCÔCÝ!$ ]Ô%7Ñ!8Ô!8ð	ð 	ñ	
ô 	
ð 	
ñ 	
ð €Or   c                 ó:   — | t           k     rdS | t          k    rdS dS )NÚSlowÚFastÚNatural)rk  rl  )Úwords_per_minutes    r   Úclassify_pace_stater•  ;  s-   € ØÕ-Ò-ð ØˆvØÕ-Ò-ð ØˆvØˆ9r   c           	      óæ  — t          | ¦  «        }t          t          z   dz  }t          |cxk    rt          k    r7n n4t          t	          dt          ||z
  ¦  «        dz  z
  dd¦  «        ¦  «        S |t          k     r<t          dt          |z
  dz  ¦  «        }t          t	          d|z
  dd	¦  «        ¦  «        S t          d|t          z
  dz  ¦  «        }t          t	          d|z
  dd	¦  «        ¦  «        S )
Nr  ç      Y@g      à?g     €T@ç     ÀR@gffffffæ?g     €U@rˆ  g     @T@)rS   rk  rl  rÜ   r}  rU   rV   )r”  ri  ÚmidpointÚpenaltys       r   Ú
score_pacer›  C  s  € Ý
Ð Ñ
!Ô
!€CÝ#Õ&9Ñ9¸SÑ@€HÝ˜cð Nð Nò Nð NÕ%8ò Nð Nð Nð Nð NÝ•U˜5¥C¨¨h©Ñ$7Ô$7¸#Ñ$=Ñ>ÀÀeÑLÔLÑMÔMÐMØ
Õ Ò ð 8Ý�dÕ0°3Ñ6¸#Ñ=Ñ>Ô>ˆÝ•U˜4 '™>¨4°Ñ6Ô6Ñ7Ô7Ð7Ý�$˜Õ2Ñ2°cÑ9Ñ:Ô:€GÝ•�t˜g‘~ t¨TÑ2Ô2Ñ3Ô3Ð3r   c                 ó&   — | dk    rdS | dk    rdS dS )NéP   r“  é7   zNeeds tuningÚChoppyr   ©Úscores    r   Úclassify_pause_stater¢  O  s)   € Ø�‚{ð ØˆyØ�‚{ð Øˆ~Øˆ8r   c                 ó&   — | dk    rdS | dk    rdS dS )Nr�  r“  rž  Ú
NoticeableÚFrequentr   r   s    r   Úclassify_hesitation_stater¦  W  s)   € Ø�‚{ð ØˆyØ�‚{ð Øˆ|Øˆ:r   c                 ó¢  — g }t          ¦   «         }|D �]}t          |                     d¦  «        pd¦  «                             ¦   «         }|sŒ<dt	          t          |d         ¦  «        d¦  «        |f}||v rŒg|                     |¦  «         |                     t	          t          |d         ¦  «        d¦  «        |t	          t          |d         ¦  «        d¦  «        |                     dd¦  «        › d	|                     d
d¦  «        › �                     d¦  «        dœ¦  «         �Œ| D �]}t          |                     dd¦  «        ¦  «                             ¦   «                              ¦   «         }|t          vrŒTt          |d         ¦  «        t          |d         ¦  «        z   dz  }	dt	          |	d¦  «        |f}||v rŒš|                     |¦  «         |                     t	          |	d¦  «        dt	          t          |d         ¦  «        t          |d         ¦  «        z
  d¦  «        |dœ¦  «         �Œt          |d„ ¬¦  «        S )NrS  r   rZ  rÚ   r4   r  rþ   rQ  z ... rR  z .)rÚ   rP  r  Úlabelr(  r  r  r  ÚfillerÚfiller_wordc                 óV   — t          | d         ¦  «        t          | d         ¦  «        fS )NrÚ   rP  )rS   r   )r  s    r   ú<lambda>z)build_hesitation_events.<locals>.<lambda>†  s$   € ­E°$°zÔ2BÑ,CÔ,CÅSÈÈfÌÑEVÔEVÐ+W€ r   )Úkey)Úsetr   r$   r%   rÜ   rS   Úaddr’   r&   rT  Úsorted)
r;  Úpause_eventsrU  Úseenrt  rS  r­  r(  Ú
normalizedr™  s
             r   Úbuild_hesitation_eventsr´  _  s\  € Ø€FÝ‰5Œ5€Dàð 
ñ 
ˆÝ˜eŸišiÐ(9Ñ:Ô:Ð@¸bÑAÔA×GÒGÑIÔIˆØð 	ØØ��e E¨*Ô$5Ñ6Ô6¸Ñ:Ô:¸OÐLˆØ�$ˆ;ð 	ØØ�Š�‰ŒˆØ�Šå!¥%¨¨jÔ(9Ñ":Ô":¸AÑ>Ô>Ø'Ý %¥e¨E°.Ô,AÑ&BÔ&BÀAÑ FÔ FØ!ŸIšI o°rÑ:Ô:Ð]Ð]ÀÇÂÈ;ÐXZÑA[ÔA[Ð]Ð]×cÒcÐdhÑiÔið	ð ñ	
ô 	
ð 	
ñ 	
ð ð 
ñ 
ˆÝ˜Ÿš &¨"Ñ-Ô-Ñ.Ô.×4Ò4Ñ6Ô6×<Ò<Ñ>Ô>ˆ
Ø�\Ð)ð 	ØÝ˜$˜{Ô+Ñ,Ô,­u°T¸)´_Ñ/EÔ/EÑEÈÑLˆØ�˜x¨Ñ+Ô+¨ZÐ8ˆØ�$ˆ;ð 	ØØ�Š�‰ŒˆØ�Šå! (¨AÑ.Ô.Ø%Ý %¥e¨D°¬OÑ&<Ô&<½uÀTÈ+ÔEVÑ?WÔ?WÑ&WÐYZÑ [Ô [Ø#ð	ð ñ	
ô 	
ð 	
ñ 	
õ �&ÐWÐWÐXÑXÔXÐXr   r   c           
      óD
  — t          | ¦  «        }t          d„ |D ¦   «         ¦  «        }	|dk    r|	|z  nd}
|dk    r|dz  |z  nd}|	dk    r|dz  |	z  nd}| r+t          t          j        d„ | D ¦   «         ¦  «        ¦  «        nd}t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }t          |¦  «        }|r+t          t          j        d	„ |D ¦   «         ¦  «        ¦  «        nd}t          d
„ |D ¦   «         d¬¦  «        }t          | |¦  «        }t          d„ |D ¦   «         ¦  «        }t          |¦  «        }t          |¦  «        }d}||dz  z  }|t          d|dz
  ¦  «        dz  z  }|t          d|dz
  ¦  «        dz  z  }|t          |dz  d¦  «        z  }t          |dd¦  «        }d}||dz  z  }||dz  z  }|t          d|t          d|dz  ¦  «        z
  ¦  «        dz  z  }t          |dd¦  «        }|dk    rd}n|dk    rd}nd}g }|t          k     r|                     d¦  «         n6|t          k    r|                     d ¦  «         n|                     d!¦  «         |dk    r|                     d"¦  «         n1|dk    r|                     d#¦  «         n|                     d$¦  «         |dk    r|                     d%¦  «         n|                     d&¦  «         i d't          | p|p|¦  «        “d(|“d)|pd*“d+|pd*“d,|pd*“d-|pd*“d.t          |¦  «        “d/t          |d0¦  «        “d1t          |d0¦  «        “d2t          t          |	¦  «        d3¦  «        “d4t          t          |
¦  «        d3¦  «        “d5t          t          |¦  «        d3¦  «        “d6t          t          |¦  «        ¦  «        “d7t          t          |¦  «        ¦  «        “d8t          t          |¦  «        ¦  «        “d9t!          |¦  «        “d:t#          |¦  «        “i d;t%          |¦  «        “d<t          |¦  «        “d=t          |¦  «        “d>t          |¦  «        “d?t          |¦  «        “d@t          |¦  «        “dAt          |¦  «        “dBt          t          |¦  «        d3¦  «        “dCt          t          |¦  «        d3¦  «        “dD|“dEt'          ||¦  «        “dFt)          | |¦  «        “dG|“dH|“dI| “dJ|d d3…         “¥S )KNc              3   ó@   K  — | ]}t          |d          ¦  «        V — ŒdS ©r  NrL  r	  s     r   r  z(build_fluency_payload.<locals>.<genexpr>‹  s/   è è € ÐWÐW¸G�˜w ~Ô6Ñ7Ô7ÐWÐWÐWÐWÐWÐWr   r   rG   r   c                 ó8   — g | ]}t          |d          ¦  «        ‘ŒS )r*  rL  )ré   r(  s     r   rë   z)build_fluency_payload.<locals>.<listcomp>�  s%   € ÐCÐCÐC°T•u˜T ,Ô/Ñ0Ô0ÐCÐCÐCr   c              3   ó2   K  — | ]}|d          dk    ¯dV — ŒdS )rP  rF  rC   Nr   rs  s     r   r  z(build_fluency_payload.<locals>.<genexpr>“  s0   è è € ÐRÐR ¸%À¼-È6Ò:QÐR˜1ÐRÐRÐRÐRÐRÐRr   c              3   ó2   K  — | ]}|d          dk    ¯dV — ŒdS )rP  rG  rC   Nr   rs  s     r   r  z(build_fluency_payload.<locals>.<genexpr>”  s0   è è € ÐZÐZ U¸eÀF¼mÈzÒ>YÐZ˜qÐZÐZÐZÐZÐZÐZr   c              3   ó2   K  — | ]}|d          dk    ¯dV — ŒdS )rP  rE  rC   Nr   rs  s     r   r  z(build_fluency_payload.<locals>.<genexpr>•  s0   è è € ÐPÐP ¸¸v¼È%Ò9OÐP˜!ÐPÐPÐPÐPÐPÐPr   c                 ó8   — g | ]}t          |d          ¦  «        ‘ŒS rH  rL  rs  s     r   rë   z)build_fluency_payload.<locals>.<listcomp>—  s%   € Ð+cÐ+cÐ+cÈU­E°%¸Ô2GÑ,HÔ,HÐ+cÐ+cÐ+cr   c              3   ó@   K  — | ]}t          |d          ¦  «        V — ŒdS r·  rL  rs  s     r   r  z(build_fluency_payload.<locals>.<genexpr>˜  s/   è è € Ð!YÐ!YÀ5¥%¨¨nÔ(=Ñ">Ô">Ð!YÐ!YÐ!YÐ!YÐ!YÐ!Yr   )Údefaultc              3   ó2   K  — | ]}|d          dk    ¯dV — ŒdS )rP  rª  rC   Nr   rs  s     r   r  z(build_fluency_payload.<locals>.<genexpr>›  s1   è è € Ð!eÐ!e¨ÀeÈFÄmÐWdÒFdÐ!e !Ð!eÐ!eÐ!eÐ!eÐ!eÐ!er   r—  g      2@g333333ó?g      6@gš™™™™™á?g      4@g      @rg  g      ,@g      0@r©   ç     €A@g      @r   Úwebrtcvad_vosk_v1r    Úwebrtcvad_google_stt_v1Úwebrtcvad_pause_only_v1zVIncrease your speaking energy slightly and avoid stretching simple ideas for too long.zQSlow down a little around key ideas so the listener can process them more easily.zNYour overall pace is within the target range. Keep using that steady delivery.z]Reduce very long pauses between ideas. Plan the next phrase earlier before you stop speaking.zHYour pauses are mostly natural. Keep pausing at logical idea boundaries.zMAdd short pauses after important ideas so your speech sounds more controlled.zOReplace filler words like 'um' or 'uh' with a silent pause and a clean restart.z>You used few filler hesitations. Maintain that clean delivery.Ú	availableÚanalysis_methodÚrecognition_backendr   Ú
model_namer5  Úrecognition_errorÚ
word_countr”  r4   Úarticulation_rate_wpmÚspeech_secondsrþ   Úspeaking_ratioÚrecognition_confidenceÚ
pace_scoreÚpause_scoreÚhesitation_scoreÚ
pace_stateÚpause_stateÚhesitation_stateÚpause_countÚgood_pause_countÚoptional_pause_countÚbad_pause_countÚhesitation_countÚfiller_hesitation_countÚaverage_pause_durationÚlongest_pause_durationr#  Úpause_chartÚ
pace_chartÚhesitation_eventsr±  r;  Útips)r¢   r  rS   rK   rN   rT   r´  r›  rV   r}  rk  r’   rl  r  rc   rÜ   r•  r¢  r¦  rx  rp  )r;  r#  r±  rË   rÆ  rÇ  r5  rÈ  rÉ  rË  rÌ  Úoverall_wpmrÊ  rÍ  rÕ  rÖ  r×  rÔ  rÚ  rÛ  rÞ  rÙ  rØ  rÎ  rÏ  rÐ  rÅ  rß  s                               r   Úbuild_fluency_payloadrá  ‰  sŸ  € Ý�U‘”€JÝÐWÐWÀÐWÑWÔWÑWÔW€NØ4<¸q²LÐI�n xÑ/Ð/Àc€NØ4<¸q²LÐI�: Ñ$ xÑ/Ð/Àc€KØDRÐUVÒDVÐ_˜Z¨$Ñ.°Ñ?Ð?Ð\_ÐàINÐW��bŒgÐCÐC¸UÐCÑCÔCÑDÔDÑEÔEÐEÐTWð õ ÐRÐR¨,ÐRÑRÔRÑRÔRÐÝÐZÐZ¨lÐZÑZÔZÑZÔZÐÝÐPÐP¨ÐPÑPÔPÑPÔP€OÝ�lÑ#Ô#€KØiuÐ~�U¥2¤7Ð+cÐ+cÐVbÐ+cÑ+cÔ+cÑ#dÔ#dÑeÔeÐeÐ{~ÐÝ Ð!YÐ!YÈLÐ!YÑ!YÔ!YÐcfÐgÑgÔgÐå/°°|ÑDÔDÐÝ!Ð!eÐ!eÐ1BÐ!eÑ!eÔ!eÑeÔeÐÝÐ,Ñ-Ô-Ðå˜KÑ(Ô(€Jà€KØ�? TÑ)Ñ)€KØ•3�sÐ2°SÑ8Ñ9Ô9¸DÑ@Ñ@€KØ•3�sÐ2°TÑ9Ñ:Ô:¸TÑAÑA€KØ•3Ð'¨#Ñ-¨tÑ4Ô4Ñ4€KÝ˜ S¨%Ñ0Ô0€KàÐØÐ/°$Ñ6Ñ6ÐØ˜¨$Ñ.Ñ.ÐØ�˜CÐ!1µC¸¸XÈ¹_Ñ4MÔ4MÑ!MÑNÔNÐQTÑTÑTÐÝÐ-¨s°EÑ:Ô:Ðà˜fÒ$ð 4Ø-ˆˆØ	 Ò	(ð 4Ø3ˆˆà3ˆà€DØÕ(Ò(ð fØ�ŠÐlÑmÔmÐmÐmØ	Õ*Ò	*ð fØ�ŠÐgÑhÔhÐhÐhà�ŠÐdÑeÔeÐeà˜Òð eØ�ŠÐsÑtÔtÐtÐtØ	˜AÒ	ð eØ�ŠÐ^Ñ_Ô_Ð_Ð_à�ŠÐcÑdÔdÐdà Ò"ð VØ�ŠÐeÑfÔfÐfÐfà�ŠÐTÑUÔUÐUð"Ø•T˜%ÐB ?ÐB°lÑCÔCð"à˜?ð"ð 	Ð2Ð8°bð"ð 	�jÐ& Bð	"ð
 	�jÐ& Bð"ð 	Ð.Ð4°"ð"ð 	•c˜*‘o”oð"ð 	�E +¨qÑ1Ô1ð"ð 	 ¥Ð'<¸aÑ!@Ô!@ð"ð 	�%¥ nÑ 5Ô 5°qÑ9Ô9ð"ð 	�%¥ nÑ 5Ô 5°qÑ9Ô9ð"ð 	!¥%­Ð.DÑ(EÔ(EÀqÑ"IÔ"Ið"ð 	•c�% 
Ñ+Ô+Ñ,Ô,ð"ð 	•s�5 Ñ-Ô-Ñ.Ô.ð"ð 	�C¥Ð&6Ñ 7Ô 7Ñ8Ô8ð"ð  	Õ)¨+Ñ6Ô6ð!"ð" 	Õ+¨KÑ8Ô8ð#"ð "ð$ 	Õ5Ð6FÑGÔGð%"ð& 	•s˜;Ñ'Ô'ð'"ð( 	�CÐ 0Ñ1Ô1ð)"ð* 	¥Ð$8Ñ 9Ô 9ð+"ð, 	�3˜Ñ/Ô/ð-"ð. 	�CÐ 0Ñ1Ô1ð/"ð0 	"¥3Ð'>Ñ#?Ô#?ð1"ð2 	!¥%­Ð.DÑ(EÔ(EÀqÑ"IÔ"Ið3"ð4 	!¥%­Ð.DÑ(EÔ(EÀqÑ"IÔ"Ið5"ð6 	˜?ð7"ð8 	Õ(¨°xÑ@Ô@ð9"ð: 	Õ& u¨hÑ7Ô7ð;"ð< 	Ð.ð="ð> 	˜ð?"ð@ 	�ðA"ðB 	��R�a�R”ðC"ð "ð "r   c                 óH  — t          |                      dd¦  «        ¦  «        }t          |                     dd¦  «        ¦  «        }t          |                     dd¦  «        ¦  «        }d|cxk    rdk    rn n	|dk    rd	}nd
|cxk    rdk    rn n	|dk    rd}nd}|dk     rd	}n|dk     rd}nd}|dk     rd}n|dk    s|dk    rd	}nd}|||t          |                     dd¦  «        ¦  «        t	          t          |                     dd¦  «        ¦  «        d¦  «        dœS )Nr€  rG   rÑ  r“  rÐ  g     €K@g     @e@r˜  r|  rÀ  g     @j@r   Úmediumr{  g      T@Úflatr’  ÚbalancedrÔ  r   rÚ  rþ   )r*  Ú
hesitationÚstressrÔ  Úavg_pause_duration)rS   r$   r   rc   rÜ   )Úpitch_statsÚfluencyr€  rÑ  rÐ  r*  ræ  rç  s           r   Údetect_emotionrë  í  s©  € Ý�k—o’o k°3Ñ7Ô7Ñ8Ô8€IÝ�W—[’[ ¨yÑ9Ô9Ñ:Ô:€JÝ˜WŸ[š[Ð);¸SÑAÔAÑBÔBÐàˆyð ð ò ð ˜Eò ð ð ð ð Ð&6¸$Ò&>ð Øˆ
ˆ
Ø	�ð ð ò ð ˜eò ð ð ð ð Ð(8¸DÒ(@ð Øˆ
ˆ
àˆ
à˜$Òð Øˆ
ˆ
Ø	˜DÒ	 ð Øˆ
ˆ
àˆ
à�4Òð ØˆˆØ	�UÒ	ð ˜j¨FÒ2ð Øˆˆàˆð !Ø ØÝ˜7Ÿ;š; }°aÑ8Ô8Ñ9Ô9Ý#¥E¨'¯+ª+Ð6NÐPSÑ*TÔ*TÑ$UÔ$UÐWXÑYÔYðð ð r   c                 ó&   — dt          | ¦  «        dœS )NF)Úokru   )r   )Úmessages    r   Úbuild_errorrï    s   € Ø¥# g¡,¤,Ð/Ð/Ð/r   c                  óø  — t          j        d¬¦  «        } |                      ddd¬¦  «         |                      ¦   «         }t	          j        d¦  «         	 t          |j        ¦  «        \  }}}}t          |¦  «        }t          ||¦  «        }|j
        t          |dz  ¦  «        k     r|}|d	k    rt          t          |¦  «        |z  ¦  «        nd
}|d	k    rt          t          |¦  «        |z  ¦  «        nd
}	t          ||¦  «        \  }
}d}t          ¦   «         }	 t!          ||¦  «        \  }}}}n,# t"          $ r}g dd}}}t%          |¦  «        }Y d }~nd }~ww xY wt'          ||¦  «        }t)          ||
||||||¬¦  «        }d}d }d }g }	 t+          |||¦  «        \  }}t-          ||¦  «        \  }}|j
        d	k    rd}nAt/          |¦  «        }t1          |||¦  «        }t3          ||¦  «        }t5          |||¦  «        }n&# t"          $ r}t%          |¦  «        }Y d }~nd }~ww xY wt7          |pdd
i|¦  «        }dt9          |d¦  «        ||t          |¦  «        t9          |	d¦  «        t9          |d¦  «        t9          t          |¦  «        d¦  «        dœd|d u||�#t9          t          |d         ¦  «        d¦  «        nd |�#t9          t          |d         ¦  «        d¦  «        nd |�#t9          t          |d         ¦  «        d¦  «        nd |�#t9          t          |d         ¦  «        d¦  «        nd |�#t9          t          |d         ¦  «        d¦  «        nd |�#t9          t          |d         ¦  «        d¦  «        nd dœ	||||dœ}t;          t=          j        |d¬¦  «        ¦  «         d S # t"          $ r;}t;          t=          j        tA          |¦  «        d¬¦  «        ¦  «         Y d }~d S d }~ww xY w)Nz?Analyze pitch, pace, pauses, and hesitations from speech audio.)Údescriptionz--inputTzPath to the input audio file.)ÚrequiredÚhelpr|   g333333Ó?r   rG   r   )rÈ  z5Pitch contour could not be extracted from this audio.r€  rþ   é   )Úinput_formatÚdecoder_backendÚsample_rateÚoriginal_durationÚtrimmed_durationÚsilence_thresholdrÃ   rN   rÔ   r  rV   rT   )	r˜   rÄ  ru   rN   rÔ   r  r€  rV   rT   )rí  rË   r[   rÍ   Úemotionr  Úchartrê  F)Úensure_ascii)!ÚargparseÚArgumentParserÚadd_argumentÚ
parse_argsÚwarningsÚfilterwarningsr™   Úinputr�   r§   rZ   rc   rS   r¢   r%  r(   r<  r‘   r   r_  rá  rÑ   r×   r…  rå   rù   r�  rë  rÜ   Úprintr/  Údumpsrï  )ÚparserÚargsr[   rd   rö  rõ  rú  Útrimmed_audiorË   Úraw_durationr#  r$  rÈ  rÆ  r;  rÇ  r5  r—   r±  rê  Úpitch_errorré  Úpitch_chartÚpitch_segmentsrÏ   rÎ   Úpitch_pointsrû  Úpayloads                                r   Úmainr    s¢  € ÝÔ$Ð1rÐsÑsÔs€FØ
×Ò˜	¨DÐ7VÐÑWÔWÐWØ×ÒÑÔ€DåÔ˜HÑ%Ô%Ð%ðP@Ý3=¸d¼jÑ3IÔ3IÑ0ˆˆr�? LÝ7¸Ñ>Ô>ÐÝ# EÐ+<Ñ=Ô=ˆØÔ¥ B¨¡H¡¤Ò-ð 	"Ø!ˆMà57¸!²VÐD•5�˜]Ñ+Ô+¨bÑ0Ñ1Ô1Ð1ÀˆØ13°a²Ð@•u�S ™ZœZ¨"™_Ñ-Ô-Ð-¸Sˆå,?ÀÈrÑ,RÔ,RÑ)ˆÐ)ØÐÝ?ÑAÔAÐð	)ÝAVÐWdÐfhÑAiÔAiÑ>ˆEÐ&¨
°J°JøÝð 	)ð 	)ð 	)Ø,.°°B˜z�:ˆEÝ # C¡¤ÐÐÐÐÐÐøøøøð	)øøøõ -¨UÐ4DÑEÔEˆÝ'ØØØØØØØØ/ð	
ñ 	
ô 	
ˆð ˆØˆØˆØˆð	#Ý!6°}ÀbÈ(Ñ!SÔ!SÑˆE�;Ý!6°u¸kÑ!JÔ!JÑˆE�;ØÔ 1Ò$ð PØU��å1°+Ñ>Ô>�Ý,¨U°KÀÑJÔJ�Ý/°¸hÑGÔG�Ý!1°%¸ÀhÑ!OÔ!O�øøÝð 	#ð 	#ð 	#Ý˜c™(œ(ˆKˆKˆKˆKˆKˆKøøøøð	#øøøõ ! Ð!B°¸cÐ0BÀGÑLÔLˆð Ý˜h¨Ñ*Ô*à ,Ø#2Ý" 2™wœwÝ%*¨<¸Ñ%;Ô%;Ý$)¨(°AÑ$6Ô$6Ý%*­5Ð1BÑ+CÔ+CÀQÑ%GÔ%Gðð ð )Ø(°Ð4Ø$Ø@KÐa��e K°Ô$7Ñ8Ô8¸!Ñ<Ô<Ð<Ð]aØDOÐe�%¥ k°(Ô&;Ñ <Ô <¸aÑ@Ô@Ð@ÐaeØ>IÐ_•u�U ;¨uÔ#5Ñ6Ô6¸Ñ:Ô:Ð:Ð[_ØJUÐk�U¥5¨°[Ô)AÑ#BÔ#BÀAÑFÔFÐFÐgkØ>IÐ_•u�U ;¨uÔ#5Ñ6Ô6¸Ñ:Ô:Ð:Ð[_Ø>IÐ_•u�U ;¨uÔ#5Ñ6Ô6¸Ñ:Ô:Ð:Ð[_ð
ð 
ð Ø&Ø Øð3
ð 
ˆõ8 	�dŒj˜¨uÐ5Ñ5Ô5Ñ6Ô6Ð6Ð6Ð6øÝð @ð @ð @Ý�dŒj� SÑ)Ô)¸Ð>Ñ>Ô>Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?øøøøð@øøøso   ÁCN4 ÄD4 Ä3N4 Ä4
EÄ>EÅN4 ÅEÅ2N4 ÆA6H ÈN4 È
H*ÈH%È N4 È%H*È*FN4 Î4
O9Î>0O4Ï4O9Ú__main__r   )rØ   )r4   rÓ   )r   )Jrþ  Úbase64r/  ra   r"   ro   r�   ÚtempfileÚurllib.errorÚurllibÚurllib.parseÚurllib.requestr  r#   r=   r“   Ú
gettempdirÚnumpyrK   rŽ   r�   Úscipy.signalr   rÃ   ÚImportErrorr  r   r   r   r	   r€   rÆ   rÇ   rõ   ró   rk  rl  ÚTRANSCRIPTION_CHUNK_SECONDSrT  r(   rA   r_   ri   rs   r‹   r™   r�   r§   r¬   r»   rÑ   r×   rå   rù   r%  r<  rC  rI  r_  rp  rx  r}  r…  r�  r•  r›  r¢  r¦  r´  rá  rë  rï  r  Ú__name__r   r   r   ú<module>r     sR  ðØ €€€Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€à"%€„
ÐÑ Ø "¤§¢Ð-@¨XÔ-@Ñ-BÔ-BÀMÑ RÔ R€„
ÐÑ à Ð Ð Ð Ø Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &ðØÐÐÐÐøØð ð ð Ø€K€K€KðøøøðØÐÐÐÐøØð ð ð Ø€I€I€IðøøøðØ8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8øØð ð ð Ø€OØ€Eðð ð ð ð ð	øøøð Ð Ø€Ø€ØÐ ØÐ ØÐ ØÐ Ø"Ð Ø6Ð6Ð6€ðð ð ðð ð ð*0ð 0ð 0ð$ );ð ?ð ?ð ?ð ?ð	ð 	ð 	ð@ð @ð @ð@*ð *ð *ð.Oð Oð Oðð ð ð ð0ð 0ð 0ð
ð ð ð
8ð 
8ð 
8ð	*ð 	*ð 	*ðð ð ð ð*ð ð ð$7-ð 7-ð 7-ð 7-ðt*Eð *Eð *EðZ?ð ?ð ?ðð ð ðEð Eð EðP"ð "ð "ðJð ð ð&ð &ð &ðð ð ð.ð ð ð>ð ð ð	4ð 	4ð 	4ðð ð ðð ð ð'Yð 'Yð 'YðTað að að aðH ð  ð  ðF0ð 0ð 0ðW@ð W@ð W@ðt ˆzÒð Ø€D�F„F€F€F€Fðð s6   Á:A? Á?B	ÂB	ÂB ÂBÂBÂ 
B+ Â+B:Â9B: