
    ]i
                     Z    S r SSKrSSKrSSKrSSKrSSKrSSKJ	r	   " S S5      r
SS jrg)	z@Utility for on the fly pitch/tempo change for data augmentation.    N   )
save_audioc                   <    \ rS rSrSrSSSSS/S4S	 jrS
 rS rSrg)RepitchedWrapper   z9
Wrap a dataset to apply online change of pitch / tempo.
g?            Tc                 X    Xl         X l        X0l        X@l        XPl        Xpl        X`l        g N)datasetproba	max_pitch	max_tempo	tempo_stdsamevocals)selfr   r   r   r   r   r   r   s           K/mnt/rpi/tmp/demucs-venv-sys/lib/python3.13/site-packages/demucs/repitch.py__init__RepitchedWrapper.__init__   s%    
"""	    c                 ,    [        U R                  5      $ r   )lenr   )r   s    r   __len__RepitchedWrapper.__len__    s    4<<  r   c                    U R                   U   nUR                  S   n[        SSU R                  -  -
  U-  5      n[        R                  " 5       U R
                  :  a  / n[        U5       H  u  pgUS:X  d  U R                  (       dx  [        R                  " U R                  * U R                  5      n[        R                  " SU R                  5      n	[        [        U R                  * U	5      U R                  5      n	[        UWW	X`R                  ;   S9nUR!                  US S 2S U24   5        M     ["        R$                  " U5      nU$ USS U24   nU$ )Nr   g{Gz?r   )voice.)r   shapeintr   randomr   	enumerater   randintr   gaussr   minmaxrepitchr   appendtorchstack)
r   indexstreams	in_length
out_lengthoutsidxstreamdelta_pitchdelta_tempos
             r   __getitem__RepitchedWrapper.__getitem__#   s$   ,,u%MM"%	!dT^^33y@A
==?TZZ'D(1!8499"(..$..$.."QK"(,,q$.."AK"%c4>>/;&G"XK ,	.
 F1kzk>23  2 kk$'G  c;J;./Gr   )r   r   r   r   r   r   r   N)	__name__
__module____qualname____firstlineno____doc__r   r   r6   __static_attributes__ r   r   r   r      s(     '*Q"aSt!r   r   c                    [         R                  " SS9n[         R                  " SS9n[        XR                  USS9  SUR                  UR                  SU 3SUS 3/nU(       a  US	/-  nU(       a  US
/-  n [        R
                  " USSS9  [        R                  " UR                  5      u  p
X:X  d   eU $ ! [        R                   a,  n	[        SU	R                  R                  S5       35      eSn	A	ff = f)z
tempo is a relative delta in percentage, so tempo=10 means tempo at 110%!
pitch is in semi tones.
Requires `soundstretch` to be installed, see
https://www.surina.net/soundtouch/soundstretch.html
z.wav)suffixclamp)clipsoundstretchz-pitch=z-tempo=z.6fz-quickz-speechT)capture_outputcheckzCould not change bpm because zutf-8N)tempfileNamedTemporaryFiler   namesprunCalledProcessErrorRuntimeErrorstderrdecodetaload)wavpitchtempor    quick
samplerateinfileoutfilecommanderrorsrs              r   r)   r)   ;   s     ((7F))8GsKK':
%
%G H:I;[
wt48 gggll#GCJ	    [:5<<;N;Nw;W:XYZZ[s   ;B< <C<'C77C<)FFiD  )r<   r#   
subprocessrI   rF   r+   
torchaudiorO   audior   r   r)   r>   r   r   <module>r^      s-    G      & &Rr   