
    owiR$                     X   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Z	 ej
                    dz  Ze                    dd           dZdd	d
ZdZdefdZd ZdedefdZdededz  fdZdedefdZdedee         fdZdededz  fdZ eddddd           eddddd           eddddd           eddddd           ed dddd           edd ddd          d!Z edddd"d          Zd#ed$ed%edefd&Z	 	 d/d'ed(ed)ee         d*ee         d+ed,ed-efd.ZdS )0    N)Pathzhttps://api.djdownload.mez.dj_ai_cacheTparentsexist_ok).mp3z.wavz.aiffzMozilla/5.0zhttps://djdownload.me/)z
User-AgentReferer   returnc                      t          t                    j        dz  } |                                 st	          d          |                                                                 S )Nz	token.txtztoken.txt not found)r   __file__parentexistsRuntimeError	read_textstrip)
token_files    /app/engine.py
load_tokenr       sV    h&4J 20111!!'')))    c                  :    i t           ddt                       iS )NAuthorizationzBearer )HEADERS_BASEr    r   r   api_headersr   '   s0    
1:<<11  r   trackc                     |                      d          }t          |t                    r#d |D             }|rd                    |          S dS )Nartistsc                 P    g | ]#}t          |t                    d |v |d          $S )name)
isinstancedict).0as     r   
<listcomp>z-extract_artist_from_track.<locals>.<listcomp>5   s1    SSSqz!T/B/BSvQR{{6{{{r   z,  )getr    listjoin)r   r   namess      r   extract_artist_from_trackr*   1   sW    ii	""G'4   $SSGSSS 	$99U###2r   
audio_pathc                    	 t          j        | dd          \  }}t           j                            ||          \  }}t           j                            ||          }t          t          j        |                    }t           j	        
                    ||          }t          t          j        |                    d                              }g d}	t           j	                            ||          }
t          t          j        |
                    }t          j        t          j        |                    }t          j        |          }|d	k    |d
k    z  }t          t          j        ||                             }t          |          ||	|         ||dS # t"          $ r%}t%          d| j         d|            Y d }~d S d }~ww xY w)NTZ   )monoduration)ysr   )axis)CzC#DzD#EFzF#GzG#AzA#B)r1         )bpmrhythmkey
brightnessbassz[WARN] Analysis failed: u    → )librosaloadbeat
beat_trackonsetonset_strengthfloatnpmeanfeaturechroma_stftintargmaxspectral_centroidabsstftfft_frequencies	Exceptionprintr   )r+   r0   r1   tempo_	onset_envr>   chromakey_idxKEYScentroidr@   rQ   freqs	bass_maskbass_energyes                    r   analyze_trackr`   ?   s    ZdR@@@2<**Q2*66qM0010<<	rwy))**,,qR,88bi 3 34455EEE?44qR4@@278,,--
vgl1oo&&'2...b[Uc\2	BGDO4455 <<=$
 
 	
    BBBqBBCCCttttts   F%F( (
G2GGfolderc           
         g }|                                  D ]H}|j                                        t          v r&t	          |          }|r|                    |           I|st          d          t          t          j	        d |D                                 t          t          j	        d |D                                 t          t          j	        d |D                                 t          t          j	        d |D                                 t          t          d |D                       d |D             j                  t          |          d	S )
NzNo valid example tracks foundc                     g | ]
}|d          S )r=   r   r"   fs     r   r$   z+analyze_examples_folder.<locals>.<listcomp>s   s    9991ah999r   c                     g | ]
}|d          S )r>   r   rd   s     r   r$   z+analyze_examples_folder.<locals>.<listcomp>t   s     ? ? ?8 ? ? ?r   c                     g | ]
}|d          S )r@   r   rd   s     r   r$   z+analyze_examples_folder.<locals>.<listcomp>u   s    $G$G$GQ|_$G$G$Gr   c                     g | ]
}|d          S )rA   r   rd   s     r   r$   z+analyze_examples_folder.<locals>.<listcomp>v   s    ;;;Qqy;;;r   c                     g | ]
}|d          S r?   r   rd   s     r   r$   z+analyze_examples_folder.<locals>.<listcomp>x       ,,,a5,,,r   c                     g | ]
}|d          S rj   r   rd   s     r   r$   z+analyze_examples_folder.<locals>.<listcomp>y   rk   r   rj   )r=   r>   r@   rA   r?   count)iterdirsuffixlowerSUPPORTED_EXTr`   appendr   rH   rI   rJ   maxsetrm   len)ra   featuresfilere   s       r   analyze_examples_folderrx   f   sd   H   # #;-//d##A #""" <:;;; RW99999::;; ? ?h ? ? ?@@AABG$G$Gh$G$G$GHHIIbg;;(;;;<<==,,8,,,--,,8,,,2
 
 
 X
 
 
r   pagec                     t            d|  }t          j        |t                      d          }|                                 |                                                    dg           S )Nz/tracks?page=   )headerstimeouttracks)DJDOWNLOAD_APIrequestsr&   r   raise_for_statusjson)ry   urlrs      r   fetch_tracksr      s]    
0
0$
0
0CS+--<<<A6688<<"%%%r   
stream_urlc           
      ^   t          dt          dz             D ]}	 t          j        ddt                    }t          j        | t                      dd          5 }|                                 |	                    d	          D ]}|r|
                    |           	 d d d            n# 1 swxY w Y   |                                 t          |j                  c S # t          $ r<}t          d
| dt           d|            t!          j        d           Y d }~d }~ww xY wd S )Nr2   r   F)ro   deletedirT<   )r|   streamr}   i    )
chunk_sizez[WARN] Stream failed (try /z): )rangeMAX_STREAM_RETRIEStempfileNamedTemporaryFile
CACHE_ROOTr   r&   r   r   iter_contentwritecloser   r   rS   rT   timesleep)r   attempttmpr   chunkr_   s         r   stream_trackr      s   .233  	-  C #	   )
 ""$$$^^t^<< ) )E )		%((()) ) ) ) ) ) ) ) ) ) ) ) ) ) ) IIKKK>>!!! 	 	 	SwSS9KSSPQSSTTTJqMMMMMMMM	 4s=   A C$AB/#C$/B3	3C$6B3	7*C$$
D*.1D%%D*g?gffffff?g      ?g?)r=   r>   rA   r@   r?   g333333?g?g?)z
Afro HousezProgressive HousezMelodic Housez
Tech HousezDrum & BassTechnog333333?example	candidategenrec           	         t                               |t                    }t          ddt	          | d         |d         z
            dz  z
            }t          ddt	          | d         |d         z
            dz  z
            }t          ddt	          | d         |d         z
            dz  z
            }t          ddt	          | d	         |d	         z
            | d	         d
z   z  z
            }| d         |d         k    rdnd}|d         |z  |d         |z  z   |d	         |z  z   |d         |z  z   |d         |z  z   S )Ng        r2   r=   r{   r>   g333333?r@   i	  rA   gư>r?   g      ?)GENRE_WEIGHTSr&   DEFAULT_WEIGHTSrs   rP   )	r   r   r   w	bpm_scorerhythm_scorebrightness_score
bass_score	key_scores	            r   similarity_scorer      s`   %11ACS)E2B!BCCbHHIIIsAGH$5	(8K$K L Ls RRSSL3C(=	,@W(W$X$X[_$_ _``	C)F"3344$8NOO J u~5)999sI 	
%9	(l"	#	&	J	 	
,**	+ 	
%9		r   examples_folderoutput_foldergenresselected_years	threshold
start_pageend_pagec	                    t          |           }	g }
||z
  dz   }t          t          ||dz             d          D ]\  }}|r |            rt          d            n|r |||t	          |
                     t          |          }|D ]}|r |            r n|                    d          }|r||vr.|                    d          }|r$|                    d          d         }d	|vr||vrid
|vsd|vrrt          |d
                   }|st          |          }|s|
                    d           t          |	||          }||k    r||                    dd          z  }|                    dd           t          |          }|d                                         }|r| d| dn| d}|                    dd          }t!          j        |||z             |
                    |||t'          |d          d           |
                    d           t	          |
          |
dS )Nr2   )startu   🛑 Stopped by user)current_pagetotal_pages
kept_countr   release_date-r   Olderr   titleT)
missing_ok rV   r   z - r   r   r	   )artistr   r   score)keptr~   )rx   	enumerater   rT   ru   r   r&   splitr   r`   unlinkr   replacemkdirr*   r   shutilmoverr   round)r   r   r   r   r   r   r   progress_callback	stop_flagexample_profiler   r   idxry   r~   r   r   r   yearr+   rv   r   	genre_dirr   r   filenames                             r   build_shortlist_from_djdownloadr      s    .o>>ODZ'!+KuZA>>aHHH E3 E3	T 	 	()))E 	!'t99    d## 6	3 6	3E YY[[ IIg&&E %v-- 99^44L #))#..q1.00T5O5OE!!WE%9%9%eEl33J $Z00H !!T!222$_hFFE	!!)EMM#s,C,CC	t<<<2599g,,..8>Rf444444uNNN#++C55J	H(<===$"""5!__	      !!T!2222 D		  r   )NN) r   r   pathlibr   r   r   rB   numpyrI   r   homer   r   rq   r   r   strr   r   r!   r*   r`   rx   rM   r'   r   r   r   r   rH   r   r   r   r   r   <module>r      s                  -TY[[>)
 
    - - -)  ' 
  *C * * * *  T c    !d !td{ ! ! ! !ND T    8&s &tDz & & & &S TD[    L $t$4UYZZZd$TXYYYd$TXYYYd$TXYYYd$TXYYYd$TXYYY  $	  d t C E    B [ [[[ I[ I	[
 [ [ [ [ [ [ [ [r   