Ë
    @çi²%  ã                   óZ  — d dl Z d dlZd dlm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mZ d„ Z G d„ d«      Zdd„Zd	„ Zd
„ Zd„ Zd„ Zdd„Zdd„Z	 	 	 	 	 dde	j2                  dej4                  eef   dededej:                  d   dej:                  d   dedej:                  d   fd„Zy)é    N)ÚPathé   )Útemp_filenamesc           
      ó–   — t        j                  dddt        | «      ddddg«      }t        j                  |j                  d«      «      S )	NÚffprobeú	-loglevelÚpanicz-print_formatÚjsonz-show_formatz-show_streamszutf-8)ÚspÚcheck_outputÚstrr
   ÚloadsÚdecode)ÚpathÚstdout_datas     úa/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/demucs/audio.pyÚ
_read_infor      sG   € Ü—/‘/Ø�; ÜˆD‹	�? F¨N¸Oð#ó €Kô �:‰:�k×(Ñ(¨Ó1Ó2Ð2ó    c                   ó†   — e Zd ZdZdefd„Zd„ Zed„ «       Zed„ «       Z	ed„ «       Z
d„ Zdd	„Zdd
„Zdd ed«      ddfd„Zy)Ú	AudioFilez¤
    Allows to read audio from any format supported by ffmpeg, as well as resampling or
    converting to mono on the fly. See :method:`read` for more details.
    r   c                 ó2   — t        |«      | _        d | _        y ©N)r   r   Ú_info)Úselfr   s     r   Ú__init__zAudioFile.__init__!   s   € Ü˜“JˆŒ	Øˆ�
r   c                 ó  — d| j                   fg}|j                  d| j                  «       f«       |j                  d| j                  «       f«       |j                  dt	        | «      f«       dj                  d„ |D «       «      }d|› d�S )	Nr   Ú
samplerateÚchannelsÚstreamsz, c              3   ó0   K  — | ]  \  }}|› d |› �–— Œ y­w)Ú=N© )Ú.0ÚnameÚvalues      r   Ú	<genexpr>z%AudioFile.__repr__.<locals>.<genexpr>*   s    è ø€ Ð OÁh±{°t¸U D 6¨¨5¨'Ô!2Áhùs   ‚z
AudioFile(Ú))r   Úappendr   r   ÚlenÚjoin)r   ÚfeaturesÚfeatures_strs      r   Ú__repr__zAudioFile.__repr__%   sz   € Ø˜TŸY™YÐ'Ð(ˆØ�‰˜ t§¡Ó'8Ð9Ô:Ø�‰˜ T§]¡]£_Ð5Ô6Ø�‰˜¤C¨£IÐ.Ô/Ø—y‘yÑ OÁhÓ OÓOˆØ˜L˜>¨Ð+Ð+r   c                 óf   — | j                   €t        | j                  «      | _         | j                   S r   )r   r   r   ©r   s    r   ÚinfozAudioFile.info-   s&   € à�:‰:ÐÜ# D§I¡IÓ.ˆDŒJØ�z‰zÐr   c                 ó8   — t        | j                  d   d   «      S )NÚformatÚduration)Úfloatr0   r/   s    r   r3   zAudioFile.duration3   s   € ä�T—Y‘Y˜xÑ(¨Ñ4Ó5Ð5r   c                 ót   — t        | j                  d   «      D ��cg c]  \  }}|d   dk(  r|‘Œ c}}S c c}}w )Nr   Ú
codec_typeÚaudio)Ú	enumerater0   )r   ÚindexÚstreams      r   Ú_audio_streamszAudioFile._audio_streams7   sH   € ô (1°·±¸9Ñ1EÔ'Fô
Ù'F‘m�e˜VØ�lÑ# wÒ.ò Ð'Fò
ð 	
ùó 
s   œ4c                 ó,   — t        | j                  «      S r   )r)   r;   r/   s    r   Ú__len__zAudioFile.__len__>   s   € Ü�4×&Ñ&Ó'Ð'r   c                 óX   — t        | j                  d   | j                  |      d   «      S )Nr   r   ©Úintr0   r;   ©r   r:   s     r   r   zAudioFile.channelsA   s+   € Ü�4—9‘9˜YÑ'¨×(;Ñ(;¸FÑ(CÑDÀZÑPÓQÐQr   c                 óX   — t        | j                  d   | j                  |      d   «      S )Nr   Úsample_rater?   rA   s     r   r   zAudioFile.samplerateD   s+   € Ü�4—9‘9˜YÑ'¨×(;Ñ(;¸FÑ(CÑDÀ]ÑSÓTÐTr   Nc                 óV  — t        j                  t        t        | «      «      «      |   }t	        |t         j
                  «       }|r|g}|€d}d}nCt        |xs | j                  «       |z  «      }t        |dz   |xs | j                  «       z  «      }t        t        |«      «      5 }	ddg}
|
ddgz  }
|r|
dt        |«      gz  }
|
dt        | j                  «      gz  }
t        ||	«      D ]T  \  }}|
d	d
| j                  |   › �gz  }
|�|
dt        |«      gz  }
|
ddgz  }
|
ddgz  }
|�|
dt        |«      gz  }
|
|gz  }
ŒV t        j                  |
d¬«       g }|	D ]”  }t        j                   |t         j"                  ¬«      }t%        j&                  |«      }|j)                  d| j+                  «       «      j-                  «       }|�t/        ||«      }|�	|dd|…f   }|j1                  |«       Œ– 	 ddd«       t%        j2                  d¬«      }|r|d   }|S # 1 sw Y   Œ)xY w)a,  
        Slightly more efficient implementation than stempeg,
        in particular, this will extract all stems at once
        rather than having to loop over one file multiple times
        for each stream.

        Args:
            seek_time (float):  seek time in seconds or None if no seeking is needed.
            duration (float): duration in seconds to extract or None to extract until the end.
            streams (slice, int or list): streams to extract, can be a single int, a list or
                a slice. If it is a slice or list, the output will be of size [S, C, T]
                with S the number of streams, C the number of channels and T the number of samples.
                If it is an int, the output will be [C, T].
            samplerate (int): if provided, will resample on the fly. If None, no resampling will
                be done. Original sampling rate can be obtained with :method:`samplerate`.
            channels (int): if 1, will convert to mono. We do not rely on ffmpeg for that
                as ffmpeg automatically scale by +3dB to conserve volume when playing on speakers.
                See https://sound.stackexchange.com/a/42710.
                Our definition of mono is simply the average of the two channels. Any other
                value will be ignored.
        Nr   Úffmpegz-yr   r	   z-ssz-iz-mapz0:z-tz-threadsÚ1z-fÚf32lez-arT)Úcheck)Údtypeéÿÿÿÿ.r   )Údim)ÚnpÚarrayÚranger)   Ú
isinstanceÚndarrayr@   r   r4   r   r   r   Úzipr;   r   ÚrunÚfromfileÚfloat32ÚtorchÚ
from_numpyÚviewr   ÚtÚconvert_audio_channelsr(   Ústack)r   Ú	seek_timer3   r   r   r   ÚsingleÚtarget_sizeÚquery_durationÚ	filenamesÚcommandr:   ÚfilenameÚwavsÚwavs                  r   ÚreadzAudioFile.readG   s9  € ô6 —(‘(œ5¤ T£Ó+Ó,¨WÑ5ˆÜ ¬¯©Ó4Ð4ˆÙØ�iˆGàÐØˆKØ!‰Nä˜zÒ>¨T¯_©_Ó->À(ÑJÓKˆKÜ" K°!¡O¸
Ò8WÀdÇoÁoÓFWÑ#XÓYˆNäœC ›LÔ)¨YØ Ð&ˆGØ˜ WÐ-Ñ-ˆGÙØ˜E¤3 y£>Ð2Ñ2�Ø˜œc $§)¡)›nÐ-Ñ-ˆGÜ$'¨°Ö$;Ñ �˜Ø˜F b¨×)<Ñ)<¸VÑ)DÐ(EÐ$FÐGÑG�Ø!Ð-Ø ¤c¨.Ó&9Ð:Ñ:�GØ˜J¨Ð,Ñ,�Ø˜D '˜?Ñ*�ØÐ)Ø ¤s¨:£Ð7Ñ7�GØ˜H˜:Ñ%‘ð %<ô �F‰F�7 $Õ'ØˆDÛ%�Ü—k‘k (´"·*±*Ô=�Ü×&Ñ& sÓ+�Ø—h‘h˜r 4§=¡=£?Ó3×5Ñ5Ó7�ØÐ'Ü0°°hÓ?�CØÐ*Ø˜c < K <Ð/Ñ0�CØ—‘˜CÕ ñ &÷% *ô6 �k‰k˜$ AÔ&ˆÙØ�a‘&ˆCØˆ
÷= *Ð)ús   Â)EHÈH()r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r-   Úpropertyr0   r3   r;   r=   r   r   Úslicerd   r"   r   r   r   r      s€   „ ñð˜Tó ò,ð ñó ðð
 ñ6ó ð6ð ñ
ó ð
ò(óRóUð ØÙ˜4“[ØØôEr   r   c                 óÜ   — | j                   �^ }}}||k(  r	 | S |dk(  r| j                  dd¬«      } | S |dk(  r | j                  g |¢|‘|‘­Ž } | S ||k\  r| dd|…dd…f   } | S t        d«      ‚)z.Convert audio to the given number of channels.r   éþÿÿÿT)rK   Úkeepdim.Nz@The audio file has less channels than requested but is not mono.)ÚshapeÚmeanÚexpandÚ
ValueError)rc   r   rn   Úsrc_channelsÚlengths        r   rY   rY   �   s®   € à#&§9¡9Ñ €UˆL˜&Ø�xÒØð& €Jð% 
�QŠð �h‰h˜2 tˆhÓ,ˆð €Jð 
˜Ò	ð ˆc�j‰jÐ2˜%Ð2 Ð2¨6Ò2ˆð €Jð 
˜Ò	!ð �#�y˜�y¢!Ð#Ñ$ˆð €Jô Ð[Ó\Ð\r   c                 óH   — t        | |«      } t        j                  | ||«      S )zTConvert audio from a given samplerate to a target one and target number of channels.)rY   ÚjuliusÚresample_frac)rc   Úfrom_samplerateÚto_samplerater   s       r   Úconvert_audiory   ©   s#   € ä
   hÓ
/€CÜ×Ñ  _°mÓDÐDr   c                 óx   — | j                   j                  r#| j                  dd«      dz  j                  «       S | S )z,Convert audio to 16 bits integer PCM format.rJ   r   éÿ  )rI   Úis_floating_pointÚclamp_Úshort©rc   s    r   Úi16_pcmr€   ¯   s3   € à
‡y�y×"Ò"Ø—
‘
˜2˜qÓ! YÑ/×6Ñ6Ó8Ð8àˆ
r   c                 óX   — | j                   j                  r| S | j                  «       dz  S )z*Convert audio to float 32 bits PCM format.r{   )rI   r|   r4   r   s    r   Úf32_pcmr‚   ·   s%   € à
‡y�y×"Ò"Øˆ
à�y‰y‹{˜iÑ(Ð(r   c                 óZ   — | j                   j                  rt        | «      S t        | «      S )zHConvert audio to either f32 pcm or i16 pcm depending on the given dtype.)rI   r|   r‚   r€   )rc   rI   s     r   Úas_dtype_pcmr„   ¿   s#   € à
‡y�y×"Ò"Ü�s‹|Ðä�s‹|Ðr   c                 óH  — | j                   \  }}t        | «      } t        j                  «       }|j	                  |«       |j                  |«       |j                  |«       |j                  |«       |s|j                  «        | j                  j                  «       } | j                  dd«      j                  «       } |j                  | j                  «       «      }	|	|j                  «       z  }	t!        |d«      5 }
|
j#                  |	«       ddd«       y# 1 sw Y   yxY w)z6Save given audio as mp3. This should work on all OSes.r   r   ÚwbN)rn   r€   ÚlameencÚEncoderÚset_bit_rateÚset_in_sample_rateÚset_channelsÚset_qualityÚsilenceÚdataÚcpuÚ	transposeÚnumpyÚencodeÚtobytesÚflushÚopenÚwrite)rc   r   r   ÚbitrateÚqualityÚverboseÚCÚTÚencoderÚmp3_dataÚfs              r   Ú
encode_mp3rŸ   Ç   sÙ   € à�9‰9�D€A€qÜ
�#‹,€CÜ�o‰oÓ€GØ×Ñ˜Ô!Ø×Ñ˜zÔ*Ø×Ñ˜ÔØ×Ñ˜Ô ÙØ�‰ÔØ
�(‰(�,‰,‹.€CØ
�-‰-˜˜1Ó
×
#Ñ
#Ó
%€CØ�~‰~˜cŸk™k›mÓ,€HØ�—‘“Ñ€HÜ	ˆd�DÔ	˜QØ	�‰�Ô÷ 
×	Ñ	ús   Ã=DÄD!c                 ó>  — |�|dk(  r| S | j                   j                  sJ d«       ‚|dk(  r0| t        d| j                  «       j                  «       z  d«      z  } | S |dk(  r| j	                  dd«      } | S |d	k(  rt        j                  | «      } | S t        d
|› �«      ‚)z9
    different strategies for avoiding raw clipping.
    Únoneztoo late for clippingÚrescaleg)\�Âõ(ð?r   Úclampg®Gáz®ï¿g®Gáz®ï?ÚtanhzInvalid mode )rI   r|   ÚmaxÚabsr£   rU   r¤   rq   )rc   Úmodes     r   Úprevent_clipr¨   Ú   s¯   € ð €|�t˜v’~Øˆ
Ø�9‰9×&Ò&Ð?Ð(?Ó?Ð&ØˆyÒØ”C˜˜sŸw™w›yŸ}™}›Ñ.°Ó2Ñ2ˆð €Jð 
�ŠØ�i‰i˜˜tÓ$ˆð
 €Jð	 
�ŠÜ�j‰j˜‹oˆð €Jô ˜=¨¨Ð/Ó0Ð0r   rc   r   r   r—   Úclip)r¢   r£   r¤   r¡   Úbits_per_sample)é   é   é    Úas_floatÚpreset)é   é   é   é   é   é   c                 ód  — t        | |¬«      } t        |«      }|j                  j                  «       }|dk(  rt	        | ||||d¬«       y|dk(  r-|rd}d}	nd}	t        j                  t        |«      | ||	|¬	«       y|d
k(  r#t        j                  t        |«      | ||¬«       yt        d|› �«      ‚)a  Save audio file, automatically preventing clipping if necessary
    based on the given `clip` strategy. If the path ends in `.mp3`, this
    will save as mp3 with the given `bitrate`. Use `preset` to set mp3 quality:
    2 for highest quality, 7 for fastest speed
    )r§   z.mp3T)r™   z.wavr­   ÚPCM_FÚPCM_S)rC   Úencodingrª   z.flac)rC   rª   zInvalid suffix for path: N)	r¨   r   ÚsuffixÚlowerrŸ   ÚtaÚsaver   rq   )
rc   r   r   r—   r©   rª   r®   r¯   rº   r¹   s
             r   Ú
save_audior¾   ì   s¬   € ô �s Ô
&€CÜ�‹:€DØ�[‰[×ÑÓ €FØ�ÒÜ�3˜˜j¨'°6À4ÖHØ	�6Ò	ÙØ ˆOØ‰HàˆHÜ
�‰”�D“	˜3¨JØ!°?ö	Dà	�7Ò	Ü
�‰”�D“	˜3¨JÈÖXäÐ4°V°HÐ=Ó>Ð>r   )r°   )iD¬  é@  r°   F)r¢   )r¿   r¢   r«   Fr°   ) r
   Ú
subprocessr   Úpathlibr   r‡   ru   r‘   rL   rU   Ú
torchaudior¼   ÚtypingÚtpÚutilsr   r   r   rY   ry   r€   r‚   r„   rŸ   r¨   ÚTensorÚUnionr   r@   ÚLiteralÚboolr¾   r"   r   r   Ú<module>rÊ      sè   ðó Û Ý ã Û Û Û Û Û å !ò3÷pñ pófò4Eòò)òóó&ð* "ØFOØ9;Ø %Ø67ñ?�E—L‘Lð ?Ø—X‘X˜c 4˜iÑ(ð?àð?ð ð?ð —Z‘ZÐ BÑCð	?ð
 !#§
¡
¨:Ñ 6ð?ð ð?ð —z‘zÐ"2Ñ3ô?r   