+
    TV-jWV  ã                   óJ  € ^ RI t ^ RIt^ RIt^ RIt^ RIHt ^ RIHtHtHtH	t	 ^ RI
Ht ^ RIHt ^ RIt^ RIHt ^ RIHt ^ RIHt ^RIHt ^RIHt RR	 R
 lltRR R lltR R ltR R ltR R lt R R lt!R R lt"R R lt#R R R llt$R t%R t&]'R8X  d
   ]&! 4        R# R# )!é    N)ÚPathLike)ÚAnyÚOptionalÚTupleÚUnion)Úsliding_window_view)Úwrite)Ú
load_audio)ÚAudioPlayer)Ú
load_modelc                ó–   € V ^8„  d   QhR\         P                  R\        R\        R\        R\        R\        \        \        3,          /# )é   ÚwavÚsample_rateÚwindow_durationÚenergy_thresholdÚmargin_factorÚreturn)ÚnpÚndarrayÚintÚfloatr   )Úformats   "Úg/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_audio/tts/generate.pyÚ__annotate__r      sP   € ÷ *ñ *Ü	�‰ð*äð*ô ð*ô ð	*ô
 ð*ô Œ3”ˆ8…_ñ*ó    c           
     ó>  € \        W!,          4      pWE,          pV^
,          p\        W4      RRV1,          p\        P                  ! \        P                  ! V^,          ^R7      4      p	W“8¬  p
\        P
                  ! V
4      '       g   \        R4      h\        ^ \        P                  ! V
4      V,          V,
          4      p\        \        V 4      \        V
4      ^,
          \        P                  ! V
RRR1,          4      ,
          V,          V,           4      pW¼3# )a   Detect the start and end points of speech in an audio signal using RMS energy.

Args:
    wav: Input audio signal array with values in [-1, 1]
    sample_rate: Audio sample rate in Hz
    window_duration: Duration of detection window in seconds
    energy_threshold: RMS energy threshold for speech detection
    margin_factor: Factor to determine extra margin around detected boundaries

Returns:
    tuple: (start_index, end_index) of speech segment

Raises:
    ValueError: If the audio contains only silence
N©Úaxisz*No speech detected in audio (only silence)éÿÿÿÿ)r   r   r   ÚsqrtÚmeanÚanyÚ
ValueErrorÚmaxÚargmaxÚminÚlen)r   r   r   r   r   Úwindow_sizeÚmarginÚ	step_sizeÚwindowsÚenergyÚspeech_maskÚstartÚends   &&&&&        r   Údetect_speech_boundariesr1      sâ   € ô, �oÕ3Ó4€KØÕ(€FØ˜rÕ!€Iô " #Ó3±K°i°KÕ@€Gô �WŠW”R—W’W˜W a�Z¨aÔ0Ó1€FØÑ,€Kä�6Š6�+×ÒÜÐEÓFÐFä�”2—9’9˜[Ó)¨IÕ5¸Õ>Ó?€EÜ
ÜˆC‹Ü	ˆ[Ó	˜AÕ	¤§	¢	¨+±d¸°dÕ*;Ó <Õ	<À	ÕIÈFÕRó€Cð
 ˆ:Ðr   c          
      ó|   € V ^8„  d   QhR\         P                  R\        R\        R\        R\         P                  /# )r   r   r   r   Úvolume_thresholdr   )r   r   r   r   )r   s   "r   r   r   A   sB   € ÷ ñ Ü	�‰ðäðô ðô ð	ô
 ‡Z�Zñr   c                ó&   € \        WW#4      w  rEWV # )aˆ  Remove silence from both ends of an audio signal.

Args:
    wav: Input audio signal array
    sample_rate: Audio sample rate in Hz
    window_duration: Duration of detection window in seconds
    volume_threshold: Amplitude threshold for silence detection

Returns:
    np.ndarray: Audio signal with silence removed from both ends

Raises:
    ValueError: If the audio contains only silence
)r1   )r   r   r   r3   r/   r0   s   &&&&  r   Úremove_silence_on_both_endsr5   A   s!   € ô( *Ø˜/ó�J€Eð �Sˆ>Ðr   c                ó0   € V ^8„  d   QhR\         R\         /# )r   Úpitchr   )r   )r   s   "r   r   r   [   s   € ÷ ñ œð ¤%ñ r   c                ó\   € R\         P                  ! ^V R,          ,           4      ,          pV# )zº
Converts a frequency from the Hertz scale to the Mel scale.

Parameters:
- pitch: float or ndarray
    Frequency in Hertz.

Returns:
- mel: float or ndarray
    Frequency in Mel scale.
i#
  i¼  )r   Úlog10)r7   Úmels   & r   Úhertz_to_melr;   [   s$   € ð ”—’˜!˜e c�k�/Ó*Õ
*€CØ€Jr   c          
      óL   € V ^8„  d   QhR\         R\        R\        R\         RR/# )r   Ú	file_nameÚaudio_chunksr   Úaudio_formatr   N)ÚstrÚlistr   )r   s   "r   r   r   k   sA   € ÷ Dñ DÜðDäðDô ðDô ð	Dð
 
ñDr   c                 ó–   € V'       g   R # \        V4      ^8”  d   \        P                  ! V^ R7      MV^ ,          p\        WW#R7       R # )Nr   ©r   )r(   ÚmxÚconcatenateÚaudio_write)r=   r>   r   r?   Úaudios   &&&& r   Úwrite_joined_audiorH   k   sA   € ÷ Ùô ˆ|Ó˜qÔ ô 	�Š�|¨!Õ,à˜!�_ð 
ô
 �	 +×Cr   c                óF   € V ^8„  d   QhR\         R\        \         ,          /# )r   Úvaluer   )r   rA   )r   s   "r   r   r   |   s   € ÷ ñ œcð ¤d¬3¥iñ r   c                 ób   € V f   . # \        V \        \        34      '       d   \        V 4      # V .# ©N)Ú
isinstancerA   Útuple)rJ   s   &r   Ú_as_reference_listrO   |   s.   € Ø‚}Øˆ	Ü�%œ$¤˜×'Ò'Ü�E‹{ÐØˆ7€Nr   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# )r   Úvaluesr   )rA   r   )r   s   "r   r   r   „   s   € ÷ ñ ¤T¬#¥Yð ´3ñ r   c                 óL   € V '       g   R # \        V 4      ^8X  d
   V ^ ,          # V # rL   )r(   )rQ   s   &r   Ú_collapse_reference_listrS   „   s#   € ßÙÜ
ˆ6ƒ{�aÔØ�a�yÐØ€Mr   c                óD   € V ^8„  d   QhR\         P                  R\        /# ©r   Úmodelr   ©ÚnnÚModuleÚbool)r   s   "r   r   r   Œ   s   € ÷ ñ ¤2§9¡9ð ´ñ r   c                 óŽ   €  R \         P                  ! V P                  4      P                  9   #   \        \
        3 d     R# i ; i)Úref_textF)ÚinspectÚ	signatureÚgenerateÚ
parametersÚ	TypeErrorr$   ©rV   s   &r   Ú_model_accepts_ref_textrc   Œ   s>   € ðØœW×.Ò.¨u¯~©~Ó>×IÑIÑIÐIøÜ”zÐ"ô Úðús   ‚,/ ¯AÁAc                óD   € V ^8„  d   QhR\         P                  R\        /# rU   rW   )r   s   "r   r   r   “   s"   € ÷ Dñ D¬B¯I©Ið D¼$ñ Dr   c                 ó    € \        V R R4      RJ # )Úpreserve_ref_audio_pathFT)Úgetattrrb   s   &r   Ú _model_preserves_ref_audio_pathsrh   “   s   € Ü�5Ð3°UÓ;¸tÐCÐCr   c          4      ó  € V ^8„  d   QhR\         R\        \        \         \        P                  3,          ,          R\        \
        ,          R\         R\        \         ,          R\        \         ,          R\        R\         R	\        \        ,          R
\        \
        ,          R\        \        ,          R\        \        \         \        \         ,          3,          ,          R\        \        \         \        \         ,          3,          ,          R\        \        \         \        P                  3,          ,          R\        \         ,          R\         R\         R\        R\        R\        R\        R\        R\        R\        R\        RR/# )r   ÚtextrV   Ú
max_tokensÚvoiceÚpromptÚinstructÚspeedÚ	lang_codeÚ	cfg_scaleÚ
ddpm_stepsÚsigmaÚ	ref_audior\   Ú	stt_modelÚoutput_pathÚfile_prefixr?   Ú
join_audioÚplayÚverboseÚtemperatureÚstreamÚstreaming_intervalÚsaveÚuse_zero_spk_embr   N)	r@   r   r   rX   rY   r   r   rA   rZ   )r   s   "r   r   r   —   s�  € ÷ jñ jÜ
ðjä”Eœ#œrŸy™y˜.Õ)Õ*ðjô œ•ðjô ð	jô
 ”S�Mðjô ”s�mðjô ðjô ðjô œ�ðjô œ•ðjô ”E�?ðjô œœc¤4¬¥9˜nÕ-Õ.ðjô ”uœS¤$¤s¥)˜^Õ,Õ-ðjô ÜŒc”2—9‘9ˆnÕõðjô" œ#•ð#jô$ ð%jô& ð'jô( ð)jô* ð+jô, ð-jô. ð/jô0 ð1jô2 ð3jô4 ð5jô6 ð7jð: 
ñ;jr   c                ó¸  €  T;'       g    TpVf   \        R4      h\        V\        4      '       d   \        VR7      p\	        V4      p\	        V4      pV'       d-   V'       d%   \        V4      \        V4      8w  d   \        R4      h\        V4      ^8”  d   V'       g   \        R4      hV'       EdP   Rp\        VR4      '       d   VP                  R8X  d   R	p\        V4      pV'       d–   . pV FŒ  p\        V\        \        34      '       d]   \        P                  ! V4      p \        P                  P                  V 4      '       g   \        R
V  24      hVP                  V 4       K{  VP                  V4       KŽ  	  Mª. pV F¢  p\        V\        \        34      '       ds   \        P                  ! V4      p \        P                  P                  V 4      '       g   \        R
V  24      hVP                  \!        V VP"                  VR7      4       K‘  VP                  V4       K¤  	  \%        V4      pV'       d   \%        V4      pMÊV'       d   RpM¿\'        V4      '       d™   Vf   \        R4      h\)        R4       ^ RIHp! \        V\        4      '       d	   V!! V4      pV U"u. uF  p"VP/                  V"4      P0                  NK   	  p#p"?\2        P4                  ! 4        \%        V#4      p\)        RV 24       MRpMV'       d   \%        V4      pV'       d   \7        VP"                  R7      MRp$V'       d8   \        P8                  ! VR	R7       \        P                  P;                  Wï4      pVe   \)        RV 24       \)        RV  RV RV RV 24       VP=                  4        U%U&u/ uF  w  p%p&V&f   K  V%V&bK  	  p'p%p&\?        RHRV RVRVRVRVRVRVRVRVR VR!VR"V/V'B p(Ve   VV(R#&   Ve   VV(R$&   V	e   V	V(R%&   Ve   VV(R&&   V
e   V
V(R'&   VP.                  ! RH/ V(B p)T;'       d    Tp*. p+. p,/ p-/ p.V R(V 2p/\A        V)4       EF#  w  p0p1V'       d   V$PC                  V1PD                  4       V*'       do   V'       d   V,P                  V1PD                  4       MÎV1PF                  p2V2V-9  d   . V-V2&   V1P"                  V.V2&   V-V2,          P                  V1PD                  4       M„V'       d%   V'       g   V+P                  V1PD                  4       MXV'       gQ   V R)V0R* R(V 2p/\I        V/\J        PL                  ! V1PD                  4      V1P"                  VR+7       \)        R,V/ 24       V'       g   EK/  \)        R-4       \)        R.V1PN                   24       \)        R/V1PP                  R0,          R1 24       \)        R2V1PR                   R3V1PT                  R4,          R1 R524       \)        R6V1PP                  R7,           R8V1PP                  R0,          R1 R924       \)        R:V1PV                  R; R<24       \)        R=V1PX                  R; R>24       \)        R?V1PZ                  R; R@24       EK&  	  V*'       dX   V'       dP   V,'       dH   V'       d   \)        RA\        V,4       RB24       \]        V/V,VP"                  V4       \)        R,V/ 24       MäV*'       dw   V-'       do   \_        V-4       F^  p2V R)V2R* R(V 2p/V-V2,          p3V.V2,          p4V'       d   \)        RA\        V34       RCV2 24       \]        V/V3V4V4       \)        R,V/ 24       K`  	  MfV'       d_   V'       gW   V+'       dO   V'       d   \)        RA\        V+4       RD24       \]        V/V+VP"                  V4       V'       d   \)        R,V/ 24       V'       d#   V$Pa                  4        V$Pc                  4        R# R# u up"i u up&p%i   \d         d%   p5\)        RET5 24       \)        RF4        Rp5?5R# Rp5?5i\f         d.   p5\)        RGT5 24       ^ RI4p6T6Pk                  4         Rp5?5R# Rp5?5ii ; i)Ia9  
Generates audio from text using a specified TTS model.

Parameters:
- text (str): The input text to be converted to speech.
- model (str): The TTS model to use.
- voice (str): The voice style to use (also used as speaker for Qwen3-TTS models).
- instruct (str): Instruction for emotion/style (CustomVoice) or voice description (VoiceDesign).
- temperature (float): The temperature for the model.
- speed (float): Playback speed multiplier.
- lang_code (str): The language code.
- ref_audio (mx.array): Reference audio you would like to clone the voice from.
- ref_text (str): Caption for reference audio.
- stt_model_path (str): A mlx whisper model to use to transcribe.
- output_path (str): Directory path where audio files will be saved.
- file_prefix (str): The output file path without extension.
- audio_format (str): Output audio format (e.g., "wav", "flac").
- join_audio (bool): Whether to join multiple audio files into one.
- play (bool): Whether to play the generated audio.
- verbose (bool): Whether to print status messages.
- save (bool): Whether to save streamed audio to a file when using stream mode.
- model (object): A already loaded model.
- stt_model (object): A already loaded stt model.
Returns:
- None: The function writes the generated audio to a file when not streaming, or when streaming with saving enabled.
Nz.Model path or model instance must be provided.)Ú
model_pathz7ref_audio and ref_text lists must have the same length.z;Multiple ref_text values require matching ref_audio values.FÚ
model_typeÚsparkTz Reference audio file not found: )r   Úvolume_normalizezKSTT model path or model instance must be provided when ref_text is missing.z-Ref_text not found. Transcribing ref_audio...)Úloadz[94mRef_text:[0m )r   )Úexist_okz[94mInstruct:[0m z[94mText:[0m z
[94mVoice:[0m z
[94mSpeed:[0m zx
[94mLanguage:[0m rj   rl   ro   rp   rt   r\   r{   rz   r|   r}   rn   r   rk   rq   rr   rm   rs   Ú.Ú_Ú03drC   u0   âœ… Audio successfully generated and saving as: z
==========zDuration:              zSamples/sec:           zsamples-per-secz.1fzPrompt:                z	 tokens, ztokens-per-secz tokens-per-seczAudio:                 Úsamplesz
 samples, z samples-per-seczReal-time factor:      z.2fÚxzProcessing time:       ÚszPeak memory usage:     ÚGBzJoining z streamed audio chunksz# streamed audio chunks for segment z audio fileszImport error: zIThis might be due to incorrect Python path. Check your project structure.zError loading model: © )6r$   rM   r@   r   rO   r(   Úhasattrr‚   rh   r   ÚosÚfspathÚpathÚexistsÚFileNotFoundErrorÚappendr
   r   rS   rc   ÚprintÚmlx_audio.sttr…   r_   rj   rD   Úclear_cacher   ÚmakedirsÚjoinÚitemsÚdictÚ	enumerateÚqueue_audiorG   Úsegment_idxrF   r   ÚarrayÚaudio_durationÚaudio_samplesÚtoken_countrm   Úreal_time_factorÚprocessing_time_secondsÚpeak_memory_usagerH   ÚsortedÚwait_for_drainÚstopÚImportErrorÚ	ExceptionÚ	tracebackÚ	print_exc)7rj   rV   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   r\   ru   rv   rw   r?   rx   ry   rz   r{   r|   r}   r~   r   ÚkwargsÚref_audio_valuesÚref_text_valuesÚ	normalizeÚpreserve_ref_pathsÚloaded_ref_audioÚref_audio_itemÚref_audio_pathÚload_stt_modelrG   Útranscribed_ref_textÚplayerÚkeyrJ   Úextra_kwargsÚ
gen_kwargsÚresultsÚsave_streamed_audioÚ
audio_listÚstreamed_audio_chunksÚstreamed_segment_audioÚstreamed_segment_sample_ratesr=   ÚiÚresultrŸ   r>   r   Úer¬   s7   &&&&&&&&&&&&&&&&&&&&&&&&&,                             r   Úgenerate_audiorÅ   —   sL  € ðprØ�~ˆ~�vˆàŠ=ÜÐMÓNÐNä�eœS×!Ò!ä¨%Ô0ˆEä-¨iÓ8ÐÜ,¨XÓ6ˆçßÜ�OÓ$¬Ð,<Ó(=Ô=äÐVÓWÐWÜˆÓ !Ô#×,<ÜØMóð ÷ ÐØˆIÜ�u˜l×+Ò+°×0@Ñ0@ÀGÔ0KØ �	ä!AÀ%Ó!HÐß!Ø#%Ð Û&6�NÜ! .´3¼°/×BÒBÜ)+¯ª°>Ó)B˜Ü!Ÿw™wŸ~™~¨n×=Ò=Ü"3Ø"BÀ>ÐBRÐ Só#ð ð )×/Ñ/°Ö?à(×/Ñ/°Ö?ò '7ð $&Ð Û&6�NÜ! .´3¼°/×BÒBÜ)+¯ª°>Ó)B˜Ü!Ÿw™wŸ~™~¨n×=Ò=Ü"3Ø"BÀ>ÐBRÐ Só#ð ð )×/Ñ/Ü&Ø .Ø,1×,=Ñ,=Ø1:ôöð )×/Ñ/°Ö?ñ '7ô  1Ð1AÓBˆIçÜ3°OÓD‘ß#Ø‘Ü(¨×/Ò/ØÒ$Ü$ð/óð ô ÐEÔFÝ@ä˜i¬×-Ò-Ù .¨yÓ 9�Iá@Pó(Ù@P°u�I×&Ñ& uÓ-×2Ô2Ñ@Pð %ð (ð Ü—’Ô Ü3Ð4HÓI�ÜÐ1°(°Ð<Õ=à‘ßÜ/°Ó@ˆH÷ @D”¨×):Ñ):Õ;Èˆ÷ Ü�KŠK˜¨dÕ3ÜŸ'™'Ÿ,™, {Ó@ˆKàÒÜÐ-¨h¨ZÐ8Ô9äØ# D 6ð *%Ø%* Gð ,%Ø%* Gð ,(Ø(1 {ð4ô	
ð *0¯©¬ô
Ù)7™:˜3 ¸5ŒJˆC�ŠJ©ð 	ñ 
ô ñ 
Øð
àð
ð ð
ð  ð	
ð
  ð
ð ð
ð $ð
ð ð
ð ð
ð  2ð
ð ð
ð .ð
ð ñ
ˆ
ð Ò!Ø'1ˆJ�|Ñ$ØÒ Ø&/ˆJ�{Ñ#ØÒ!Ø'1ˆJ�|Ñ$ØÒØ#)ˆJ�xÑ ØÒØ"'ˆJ�wÑà—.’.Ñ. :Ñ.ˆà$Ÿo˜o¨ÐØˆ
Ø "ÐØ!#ÐØ(*Ð%Ø"�m 1 \ NÐ3ˆ	Ü" 7×+‰IˆAˆvßØ×"Ñ" 6§<¡<Ô0ç"ßØ)×0Ñ0°·±Õ>à"(×"4Ñ"4�KØ"Ð*@Ô@Ø>@Ð.¨{Ñ;ØEK×EWÑEWÐ5°kÑBØ*¨;Õ7×>Ñ>¸v¿|¹|ÕLß§FØ×!Ñ! &§,¡,Õ/ßØ*˜m¨1¨Q¨s¨G°1°\°NÐC�	ÜØÜ—H’H˜VŸ\™\Ó*Ø×&Ñ&Ø'õ	ô ÐHÈÈÐTÔUçŠwä�lÔ#ÜÐ/°×0EÑ0EÐ/FÐGÔHÜØ-¨f×.BÑ.BÐCTÕ.UÐVYÐ-ZÐ[ôô Ø-¨f×.@Ñ.@Ð-AÀÈ6Ï=É=ÐYiÕKjÐknÐJoÐo~Ðôô Ø-¨f×.BÑ.BÀ9Õ.MÐ-NÈjÐY_×YmÑYmÐnõ  ZAð  BEð  YFð  FVð  Wôô Ð/°×0GÑ0GÈÐ/LÈAÐNÔOÜÐ/°×0NÑ0NÈsÐ/SÐSTÐUÔVÜÐ/°×0HÑ0HÈÐ/MÈRÐP×QñQ ,÷T §:×2GßÜ˜¤Ð%:Ó!;Ð <Ð<RÐSÔTÜØØ%Ø×!Ñ!Øô	ô ÐDÀYÀKÐPÕQß ×%;Ü%Ð&<Ö=�Ø*˜m¨1¨[¸Ð,=¸Q¸|¸nÐM�	Ø5°kÕB�Ø;¸KÕH�ßÜØ"Ü˜|Ó,Ð-Ð-PØ&˜-ð)ôô
 #ØØ ØØ ô	ô ÐHÈÈÐTÖUò!  >÷" §¯:ßÜ˜¤ Z£Ð 1°Ð>Ô?ÜØØØ×!Ñ!Øô	÷ ÜÐHÈÈÐTÔUçØ×!Ñ!Ô#Ø�K‰KŽMñ ùòo(ùó>
øôx ô 
Ü�˜q˜cÐ"Ô#ÜØW÷	
ò 	
ûô ô ÜÐ% a SÐ)Ô*Ûà×Ñ×Òûð	ús  ‚_4 ‹A_4 Á%;_4 Â!_4 Â5B_4 ÅB_4 Ç"A2_4 ÉA_4 Ê+$_)Ë<_4 Ì_4 Ì_4 Ì?A3_4 Î2	_.Ï _.ÏA-_4 Ð5A_4 Ò_4 ÒA-_4 Ó:_4 Ô#_4 Ô&A_4 ÖD _4 Ú_4 Ú
_4 Ú_4 ÚA_4 Û!_4 Û)A5_4 Ý_4 Ý'_4 Ý/_4 Ý7A_4 ß _4 ß)_4 ß4aß?`àaà+aà,"aáac                  óÒ  € \         P                  ! R R7      p V P                  R\        RRR7       V P                  R\        RRR	7       V P                  R
\        RRR	7       V P                  R\        RRR	7       V P                  R\        RRR	7       V P                  R\        RRR	7       V P                  R\
        RRR	7       V P                  R\
        RRR	7       V P                  R\        RRR	7       V P                  R\
        RRR	7       V P                  R\
        RRR	7       V P                  R\
        RRR	7       V P                  R \        RR!R	7       V P                  R"\
        RR#R	7       V P                  R$\        RR%R	7       V P                  R&RR'R(7       V P                  R)\        R*R+R	7       V P                  R,\
        RR-R	7       V P                  R.\        R/R0R	7       V P                  R1\        RR2R	7       V P                  R3\        R4R5R	7       V P                  R6R7R8R97       V P                  R:R7R;R97       V P                  R<R7R=R97       V P                  R>\        R?R@R	7       V P                  RA\        RBRRCRD7       V P                  RE\        RBRRFRD7       V P                  RG\        RHRIR	7       V P                  RJ\
        RKRLR	7       V P                  RM\
        RRNR	7       V P                  ROR7RPR97       V P                  RQ\
        RRRSR	7       V P                  RT\        ^2RUR	7       V P                  RV\
        RWRXR	7       V P                  RYR7RZR97       V P                  R[\
        R\R]R	7       V P                  R^R7R_R97       V P                  4       pVP                  '       d$   VP                  '       g   V P                  R`4       VP                  f�   \        P                  P                  4       '       g4   \        P                  P                  4       P                  4       Vn
        V# \!        Ra4       \#        Rb4      P                  4       Vn
        V# )cz#Generate audio from text using TTS.)Údescriptionz--modelTzPath or repo id of the model)ÚtypeÚrequiredÚhelpz--max_tokensNz$Maximum number of tokens to generate)rÈ   ÚdefaultrÊ   z--textz1Text to generate (leave blank to input via stdin)z--voicez?Voice/speaker name (e.g., Chelsie, Ethan, Vivian for Qwen3-TTS)z--promptz&Optional model-specific prompt prefix.z
--instructzNInstruction for CustomVoice (emotion/style) or VoiceDesign (voice description)z--exaggerationg      à?z!Exaggeration factor for the voicez--cfg_scalezDClassifier-free guidance scale. Defaults to the model configuration.z--ddpm_stepszFOverride diffusion steps. Higher = better quality, slower (try 30-50).z--speedç      ð?zSpeed of the audioz--gen_durationz7Optional model-specific generation duration in seconds.z--duration_multiplierz6Optional model-specific automatic duration multiplier.z--stepsz.Optional model-specific generation step count.z--stg_scalez6Optional model-specific spatiotemporal guidance scale.z--stg_blockz6Optional model-specific spatiotemporal guidance block.z--rescale_scalez*Optional model-specific CFG rescale value.)rË   rÊ   z--genderÚmalez"Gender of the voice [male, female]z--pitchzPitch of the voicez--lang_codeÚenzLanguage codez--output_pathzDirectory path for output filesz--file_prefixrG   zOutput file name prefixz	--verboseÚ
store_truezPrint verbose output)ÚactionrÊ   z--join_audiozJoin all audio files into onez--playzPlay the output audioz--audio_formatr   zOutput audio formatz--ref_audior•   z8Path to reference audio. Repeat for multiple references.)rÈ   rÐ   rË   rÊ   z
--ref_textzBCaption for reference audio. Repeat to match repeated --ref_audio.z--stt_modelú-mlx-community/whisper-large-v3-turbo-asr-fp16z.STT model to use to transcribe reference audioz--temperatureçffffffæ?zTemperature for the modelz--sigmaz6Optional model-specific sigma value (e.g., Ming Omni).z--use_zero_spk_embzFOptional model-specific zero speaker embedding mode (e.g., Ming Omni).z--top_pgÍÌÌÌÌÌì?zTop-p for the modelz--top_kzTop-k for the modelz--repetition_penaltygš™™™™™ñ?z Repetition penalty for the modelz--streamz.Stream the audio as segments during generationz--streaming_intervalç       @z3The time interval in seconds for streaming segmentsz--savez1Save streamed audio to a file. Requires --stream.z--save requires --streamz"Please enter the text to generate:z> )ÚargparseÚArgumentParserÚadd_argumentr@   r   r   Ú
parse_argsr~   r|   Úerrorrj   ÚsysÚstdinÚisattyÚreadÚstripr–   Úinput)ÚparserÚargss     r   r×   r×   Ä  s  € Ü×$Ò$Ð1VÔW€FØ
×ÑØÜØØ+ð	 ô ð ×ÑØÜØØ3ð	 ô ð ×ÑØÜØØ@ð	 ô ð ×ÑØÜØØNð	 ô ð ×ÑØÜØØ5ð	 ô ð ×ÑØÜØØ]ð	 ô ð ×ÑØÜØØ0ð	 ô ð ×ÑØÜØØSð	 ô ð ×ÑØÜØØUð	 ô ð ×Ñ˜	¬°sÐAUÐÔVØ
×ÑØÜØØFð	 ô ð ×ÑØÜØØEð	 ô ð ×ÑØÜØØ=ð	 ô ð ×ÑØÜØØEð	 ô ð ×ÑØÜØØEð	 ô ð ×ÑØØØ9ð ô ð
 ×ÑØœ fÐ3Wð ô ð ×Ñ˜	¬°sÐAUÐÔVØ
×Ñ˜¬C¸ÀOÐÔTØ
×ÑØœc¨4Ð6Wð ô ð ×ÑØœc¨7Ð9Rð ô ð ×Ñ˜¨LÐ?UÐÔVØ
×ÑØ˜|Ð2Qð ô ð ×Ñ˜¨Ð<SÐÔTØ
×ÑØœs¨EÐ8Mð ô ð ×ÑØÜØØØGð ô ð ×ÑØÜØØØQð ô ð ×ÑØÜØ?Ø=ð	 ô ð ×ÑØœe¨SÐ7Rð ô ð ×ÑØÜØØEð	 ô ð ×ÑØØØUð ô ð
 ×Ñ˜	¬°sÐAVÐÔWØ
×Ñ˜	¬°RÐ>SÐÔTØ
×ÑØÜØØ/ð	 ô ð ×ÑØØØ=ð ô ð
 ×ÑØÜØØBð	 ô ð ×ÑØØØ@ð ô ð ×ÑÓ€Dà‡y‡y€y˜ŸŸ˜Ø�‰Ð/Ô0à‡y�yÒÜ�y‰y×Ñ×!Ò!ÜŸ	™	Ÿ™Ó(×.Ñ.Ó0ˆDŒIð
 €Kô Ð6Ô7Ü˜d›×)Ñ)Ó+ˆDŒIà€Kr   c                  óB   € \        4       p \        R/ \        V 4      B  R # )NrŽ   )r×   rÅ   Úvars)rà   s    r   Úmainrã     s   € Ü‹<€DÜÑ ”T˜$“ZÔ r   Ú__main__)çš™™™™™¹?ç{®Gáz„?r   )rå   ræ   )Ni°  Úaf_heartNNrÌ   rÎ   NNNNNrÑ   NrG   r   FFTrÒ   FrÓ   FF)(rÔ   r]   r�   rÙ   r   Útypingr   r   r   r   Úmlx.coreÚcorerD   Úmlx.nnrX   Únumpyr   Únumpy.lib.stride_tricksr   Úmlx_audio.audio_ior	   rF   Úmlx_audio.utilsr
   Úaudio_playerr   Úutilsr   r1   r5   r;   rH   rO   rS   rc   rh   rÅ   r×   rã   Ú__name__rŽ   r   r   Ú<module>ró      s„   ðÛ Û Û 	Û 
Ý ß .Ó .å Ý Û Ý 7å 3Ý &å %Ý ÷*÷Zõ4õ Dõ"õõõD÷jòZ	xòv!ð
 ˆzÔÙ†Fñ r   