
    1j[?                     <   S r SSKrSSKrSSKrSSKrSrSrSSSSS	S
S.r/ SQr	/ SQr
/ SQrSSSSSSSSS.SSSSSSSSS.SSSSSSSSS.SSSSSSSSS.SSSSSSSSS.SSSSSSSSS.SSSSSSSSS.S SSSSSS!SS.S"SSSSSSSS.S#SSSSSSSS.S$SSSSSSSS./rS%S&S'S(S)S*S+S,S-S.S/S0S1.rS2\S3\4S4 jrS5rS6\S3\4S7 jrS8\R*                  S9\S3\4S: jrS8\R*                  4S; jrS8\R*                  S9\S3\4S< jrS8\R*                  S3\4S= jrS8\R*                  S9\S3\4S> jrS8\R*                  S9\S3\4S? jrSMS@\SA\S3\4SB jjr  SNS8\R*                  S9\SC\S@\S-  S3\4
SD jjr S8\R*                  S9\S3\4SE jr!SF r"SMSG\SH\SA\S3\4SI jjr#SJ\S3\4SK jr$SJ\S3\4SL jr%g)OzsAudio analysis for Razzmatazz Kitmaker.

BPM, type classification, loop/one-shot, key, pitch, loudness, DC offset.
    N<      )   r   )r      )r     )r     )r     )r	   i N  subbasslowmidmidhighmidhigh)CzC#DzD#EFzF#GzG#AzA#B)gffffff@gףp=
@gףp=
@gp=
ף@gQ@g\(\@g)\(@g(\@gQ@gHzG@gRQ@g
ףp=
@)gRQ@gq=
ףp@g)\(@gQ@g@g=
ףp=@gRQ@g      @gףp=
@gQ@gQ
@g\(\	@kick333333?g?           )namer   r   r   r   fast_attacknoise	pitchdropsnare皙?皙?	closedHat      ?g333333?openHatclaptom皙?percrimg      ?shakercrashcowbell)r   kikzbd bassdrum	bass drum)r    snr sd )hathh hihatclosed)openohh)r&   )r'   )r)   tambclavebellshkr)r*   rimshot)r+   shake)r,   )r-   )ride)r   r    r#   r%   r&   r'   r)   r*   r+   r,   r-   r?   datareturnc                 z   [         R                  " SSS9 nUR                  U 5        UR                  nS S S 5         [        R
                  " WSSSS9u  p4X44 [        R                  " U5        $ ! , (       d  f       NB= f! [         a     $ f = f!  [        R                  " W5        f ! [         a     f f = f= f)Nz.wavF)suffixdeleteiD  Tkaiser_fast)srmonores_type)	tempfileNamedTemporaryFilewriter   librosaloadosunlinkOSError)r@   finpathyrF   s        $/DATA/Downloads/kitmaker/analysis.py
read_audiorU   <   s    		$	$F5	AQ	 
BVD=Qu	IIf 
B	A  			IIf 		sL   A0B B0
A>
BBB:B*)B:*
B74B:6B77B:   raw_bpmc                     U S::  a  g[        [        U 5      5      nUS:  a  US-  [        ::  a  US-  $ US:  a  US-  [        :  a  US-  $ [	        [        [        [        U5      5      $ )z0Clamp and round a raw BPM to a reasonable value.r   F         )introundBPM_MAXBPM_MINmaxmin)rW   bpms     rT   _readable_bpmrc   M   sd    !|
eGn
C
RxC!Gw&Qw
SyS1W'axwGS)**    rS   rF   c                 \   [        U 5      U-  nUS:  a  gUS:  a  g[        R                  R                  XSSS9n[        U5      S:  a  [        R                  " X1SS9n[
        R                  " U5      n[
        R                  " U5      n[
        R                  " [
        R                  " XV-
  5      5      nUS	:  a"  U[
        R                  " XV-
  5      S
U-  :*     nOUn[        U5      S
:  aD  [
        R                  " U5      n	U	S	:  a(  SU	-  n
[        U
s=::  a
  [        ::  a  O  O[        U
5      $ [        R                  R                  XSS9u  pUb  [
        R                  " US	:H  5      (       a  g[!        [
        R"                  " U5      R$                  S	   5      n[        U5      $ )Nr$   r          @   F)rS   rF   
hop_length	backtrack   )rF   rh   r   rZ   g      N@time)rS   rF   units)lenrL   onsetonset_detectframes_to_timenpdiffmedianabsmeanr_   r^   rc   beat
beat_trackallfloatasarrayflat)rS   rF   duronset_framesonset_times	intervalsmedmadcleanmean_interval	onset_bpmtempo_rb   s                 rT   
detect_bpmr   [   sa   
a&2+C
Sy
Sy ==--STY-ZL
<A,,\SQGGK(	ii	"iiy/07bffY_5S@AEEu:?GGENMq  =0	i272(33 ||&&&@HE}uz**


5!&&q)
*Crd   c                     [         R                  " [         R                  " U S-  5      5      nUS:X  a  g [        S[         R                  " U5      -  S5      $ )NrZ   r   r   r   )rq   sqrtru   r]   log10)rS   rmss     rT   
detect_rmsr   }   s@    
''"''!q&/
"C
axbhhsm#Q''rd   c           	         [        U 5      S:  a  / $ [        US-  5      n[        S[        U 5      U-  5      n/ n[        U5       HW  nXU-  US-   U-   n[	        [
        R                  " [
        R                  " US-  5      5      5      nUR                  U5        MY     U(       a  [        U5      OSnU V	s/ s H  n	[        X-  S5      PM     sn	$ s  sn	f )N   r!   r   rZ   rj   )
rm   r\   r`   rangery   rq   r   ru   appendr]   )
rS   rF   chunknr   iframevalmxvs
             rT   detect_amplitude_enveloper      s    
1v|	T	NEAs1vA
C1Xe)q1uo.BGGBGGEQJ/01

3  SaB&)*cE!&!c***s   8Cc                 @    [        [        R                  " U 5      5      $ N)ry   rq   ru   )rS   s    rT   detect_dc_offsetr      s    rd   c                     [        U 5      U:  a  g[        R                  " XSSSS9u  p#nX#   n[        U5      S:X  a  g[        [	        [
        R                  " U5      5      S5      $ )Nr   2   r   )rF   fminfmaxfill_nar   r   )rm   rL   pyinr]   ry   rq   rs   )rS   rF   f0voicedr   	voiced_f0s         rT   detect_pitchr      sY    
1v{LLsKMB
I
9~ryy+,a00rd   c           	      h   [         R                  " [        R                  " U 5      5      n[        R                  " US9nUR
                  S:X  a	  SSS0 SSS.$ [         R                  " U5      nUS:X  a  Sn[        [         R                  " [        R                  R                  X!S95      5      n[        [         R                  " [        R                  R                  X!S95      5      n[        [         R                  " [        R                  R                  X!S95      5      n0 n[        R                  5        H=  u  n	u  pX::  X;:  -  n[         R                  " X,S S 24   5      U-  n[        U5      X'   M?     [        [         R                  " [        R                  R                  U 5      5      5      n[!        U 5      S-  nUS:  Ga?  [         R                  " [        R                  " U S U 5      5      n[         R                  " [        R                  " XS  5      5      n[         R                  " U[         R                  " USS9-  5      [#        [         R                  " U5      S5      -  n[%        UR&                  S   UR&                  S   5      n[         R                  " US U [         R                  " US U SS9-  5      [#        [         R                  " US U 5      S5      -  n[#        SUU-
  5      [#        US5      -  nOS	n[        R(                  R+                  XS
SS9n[!        U5      S:  a  [#        S[-        US   5      5      nO3[-        [         R.                  " [         R                  " U 5      5      5      n[#        SU[-        SU-  5      -
  5      n[%        [!        U 5      U[-        SU-  5      -   5      nUU:  a  [         R                  " U UU S-  5      OSn[         R                  " U UU S-  5      n[        U[#        UU-   S5      -  5      nUUUUUU[        U5      S.$ )N)rF   r   )centroidrolloff	bandwidthband_energyzcrr   r   )SrF   rZ   rg   axisr   Tsamples)rS   rF   ri   rl   g{Gzt?g{Gz?)r   r   r   r   r   r   r   )rq   rt   rL   stftfft_frequenciessizesumry   ru   featurespectral_centroidspectral_rolloffspectral_bandwidthBANDSitemszero_crossing_raterm   r`   ra   shapern   ro   r\   argmax)rS   rF   r   freqstotal_energyr   r   r   r   r   lohimaskenergyr   halfS_aS_bc_amin_lenc_br   r}   rn   prepost
energy_preenergy_postr   s                                rT   spectral_featuresr      sV   
w||AA##r*Evv{aaaa
 	

 66!9LqRWWW__>>>JKLHBGGGOO<<q<HIJGbgggoo@@1@LMNIK++-hr
+'
#l2!&M (
 ::1=>
?Cq6Q;DczffW\\!ET(+,ffW\\!E(+,ffURWWSq112Sa5HHciilCIIaL1ffU8G_rwws8G}1'EEFRVVTWX`Y`TaMbdeIff39%C3		==--DPY-ZL
<1As<?+,BIIbffQi()
aURZ(
)Cs1vus52:./D.1Ek#e)*qJ&&5!+,Kc*{*BA&FFGK ""9% rd   featuresfilenamec                 <  ^ U S   nUR                  5       m0 n[         H?  n[        R                  US   S5      n[	        U4S jU 5       5      (       a  SOSX4S   '   MA     / n[         H  nSnS H:  nUR                  US5      n	UR                  US5      n
U[        X-
  5      S	-  -  nM<     U S
   nU[        XS   -
  5      S-  -  nU[        U S   US   -
  5      S-  -  nU[        U S   US   -
  5      S-  -  nUS   S:X  a  U S   S:  a
  XpS   S-  -  nXsR                  US   S5      S-  -  nUR                  XtS   45        M     UR                  SS9  US   S   nSnU VVs/ s H  u  pXU-
  :  d  M  UPM     nnnU(       a  U$ US   S   /$ s  snnf )Nr   r    c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   ).0pfn_lowers     rT   	<genexpr> classify_type.<locals>.<genexpr>   s     (I1h   r   r   r   r
   rZ   r   r   rV   r      r   r&   r      rj   T)reverse      @)lowerTYPE_SIGNATUREFN_PATTERNSgetanyrt   r   sort)r   r   befn_boostsigpatternsscoresscorebandactualexpectedr   	top_score	thresholdscr   resultsr   s                    @rT   classify_typer      s   	-	 B~~HH??3v;3%((I(I%I%IqV  FGDVVD!_FwwtQ'HS*+a//E H U\)*Q..Xm,s=/AABQFFXk*S-==>BBv;& Xm%<s%Bm,q00Ec&k1-11u&k*+   KKKq	!II$*JFb	4I.ItFGJ71F1IaL>1 Ks   +F=Floop_oneshotc           
         [        U 5      U-  nUS:  a  gUS:X  a  US:  a  gU(       a9  UR                  SS5      nUR                  SS5      nUS:  d  US	:  a	  XeS
-  :  a  g[        R                  R	                  XSS9n[
        R                  " USS9n[        [
        R                  " U5      5      n	U	S:  a  gU[
        R                  " U5      -  n
[        [
        R                  " U
S5      [
        R                  " U
S5      -
  5      nUS:  a  g[
        R                  * nSn[        S5       H  n[        [
        R                  " U
[
        R                  " [        U5      5      S   5      nX:  a  Un[         U   n[        [
        R                  " U
[
        R                  " ["        U5      5      S   5      nUU:  d  M  Un[         U   S-   nM     US:  a  gU$ )Nrf    oneshotr   r   r   r   r   r   g?   )rS   rF   n_chromar   r   Z   
   r   mg      @)rm   r   rL   r   
chroma_cqtrq   ru   ry   r   r`   
percentileinfr   	correlaterollKS_MAJORPITCH_CLASSESKS_MINOR)rS   rF   r   r   r|   centbwchromachroma_meanr   chroma_normchroma_range
best_scorebest_keyr   score_majorscore_minors                    rT   
detect_keyr     s   
a&2+C
Syy S3Y ||J*\\+q)#:$+"cz/__''!R'@F''&q)K,-Lc{ 33K{B7"--UW:XXYLc&&JH2YBLLbggh6JKANO#$J$Q'HBLLbggh6JKANO#$J$Q'#-H  COrd   c           	      *   [        U 5      U-  n[        S[        U 5      S-  5      nUS:  a  U S U nX* S  n[        R                  " [        R                  R                  U5      5      n[        R                  " [        R                  R                  U5      5      nU[        [        R                  " U5      S5      -  nU[        [        R                  " U5      S5      -  n[        [        R                  " Xg-  5      5      nOSn[        R                  R                  XSS9n	Sn
[        U	5      S:  aa  [        R                  " U	5      n[        U5      S:  a<  [        R                  " U5      [        [        R                  " U5      S	5      -  nUS
:  n
[        R                  " U 5      n[        R                  " U[        R                   " S5      SS9nU[        [        R                  " U5      S5      -  n[        [        R                  " U[        U5      * S-  S  5      5      n[        [        R                  " US [        U5      S-   5      5      nU[        US5      -  nUS:  a  US:  a  gU
(       a  US
:  a  gUS:  a  US:  a  US:  a  gg)Nrg   rj      g&.>r   F)rS   rF   ri   rZ   r   r   r   same)modegffffff?r$   looprf   r"   r(   r   )rm   ra   rq   rt   fftrfftr`   r   ry   rL   rn   ro   rr   stdru   convolvehanning)rS   rF   r|   winheadtailhead_magtail_mag
continuityr}   regularr   cvenvtail_energyhead_energydecay_ratios                    rT   detect_loop_oneshotr#  %  s   
a&2+C
 c3q6Q;
C
cz#wx66"&&++d+,66"&&++d+,c"&&"2D99c"&&"2D99266("567

 ==--E-JLG
<AGGL)	y>Q	"S);Q%??B3hG &&)C
++c2::c?
8C
BFF3K&
&CSXIqLM 234KLSXq[ 123KK 66K CC#I ;$ SyZ#%+*;rd   c                    [        U [        5      (       a/  U R                  5        VVs0 s H  u  pU[        U5      _M     snn$ [        U [        5      (       a  U  Vs/ s H  n[        U5      PM     sn$ [        U [
        R                  45      (       a  [        U 5      $ [        U [
        R                  45      (       a  [        U 5      $ [        U [
        R                  5      (       a  U R                  5       $ U $ s  snnf s  snf )z7Recursively convert numpy types to native Python types.)
isinstancedictr   
_to_nativelistrq   floatingry   integerr\   ndarraytolist)objkr   s      rT   r'  r'  Y  s    #t-0YY[9[TQ:a= [99#t'*+s!
1s++#~&&Sz#

}%%3x#rzz""zz|J :+s   C=Dinput_bytesextc                 6   [        U 5      u  p4[        U5      U-  n[        U5      S:  a  [        S[        U5      SUSS SSSS.	5      $ [	        X45      n[        U5      nSnSn	US	:X  d  US
:  a#  [        X45      nUS:  a  Un
Sn	OUn
U
S:  a  SOSn	OUS:  a  Un
Sn	OSn
[        X45      n[        X5      n[        X4Xk5      n[        U5      n[        U5      n[        X45      n[        X45      n[        U
UU[        US5      UU[        US5      UUU	SSS.S.
5      $ )Nr   r   r   r   r   zAudio too short)	rb   sample_typer   durationkeyloudness_db	dc_offsetpitcherrorunknownr  r   r   likelyr   r   	heuristic)rb   typer  )
rb   r2  r   r3  r4  r5  r6  r7  amp_env
confidence)rU   rm   r'  guess_type_from_namer#  guess_bpm_from_namer   r   r   r  r   r   r   r   r]   )r/  r0  r   rS   rF   r|   r   bpm_from_namebpm_from_audiobpm_confidencerb   r   r2  r4  r5  r6  r7  r=  s                     rT   analyze_audiorD  h  s^   {#EA
a&2+C
1v|/9%&

 
 
	 'q-L (1MNNv#A*1C'N C),qXiN		# 'H3K QL
3CQ-K #IE'.G"$#qM"9a(!
  rd   r   c                    U R                  5       nSS KnUR                  SU5      nU(       aU  [        UR	                  S5      =(       d    UR	                  S5      5      n[
        Us=::  a
  [        ::  a  O  g[        U5      $ g)Nr   z+(\d{2,3})\s*[_\s]?bpm|bpm\s*[_\s]?(\d{2,3})r   rZ   r   )r   researchr\   groupr_   r^   ry   )r   r   rF  r   r   s        rT   r@  r@    sb    

A
		@!DA!''!**
+c$W$ :rd   c                   ^ U R                  5       m[        U4S jS 5       5      (       a  S/$ [        U4S jS 5       5      (       a  S/$ [        U4S jS 5       5      (       a  S	/$ [        U4S
 jS 5       5      (       a  S/$ ST;   a  S/$ [        U4S jS 5       5      (       a  S/$ [        U4S jS 5       5      (       a  S/$ [        U4S jS 5       5      (       a  S/$ S/$ )Nc              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   )r   r.  r   s     rT   r   'guess_type_from_name.<locals>.<genexpr>  s     
SRa6Rr   )r   r.   bdr/   r0   z kickr   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   )r   sr   s     rT   r   rK    s     
HGa6Gr   )r    r1   r2   z snarezsnare r    c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   )r   hr   s     rT   r   rK    s     
XWa6Wr   )r5   zhi-hatzhi hatr4   r6   z
hat closedr#   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   )r   or   s     rT   r   rK    s     
<;a6;r   )r7   r8   r,   r?   r%   r&   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   )r   tr   s     rT   r   rK    s     
+?a6?r   )r'   ztom r'   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   )r   r   r   s     rT   r   rK    s     
lka6kr   )	r*   r=   r)   r-   r9   r+   r:   r;   r<   r)   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   )r   patr   s     rT   r   rK    s     
ML!8Lr   )r  slicebreakpatternrv   rX  )r   r   )r   r   s    @rT   r?  r?    s    

A

SR
SSSx

HG
HHHy

XW
XXX}

<;
<<<{{x

+?
+++w

lk
lllx

ML
MMMy7Nrd   )r   )r   N)&__doc__rN   rI   rL   numpyrq   r_   r^   r   r   r   r  r   r   bytestuplerU   	BPM_CLOSEry   r\   rc   r+  r   r   r(  r   r   r   r&  r   strr   r  r#  r'  rD  r@  r?  r   rd   rT   <module>ra     s)  
 
    
 	 RSS S33]^il{~S43]^il{~cS#^_jm|  AcS#^alo  B  CC#$\]hkz}~C##]^il{~C#$]^il{~C##]^im|  Ac3#s[^il{~sC3\_jm|  AsC3\]hkz}~ <%25! U u  	+5 +S +"** # % D("** (+ + + +

 u 1BJJ 1C 1E 18 8 8 8v2D 2C 2 2D <>'+%"** %# %S %%03%P12:: 13 13 1h@u @3 @# @t @F	c 	e 	s t rd   