o
    Ah%                     @   s   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 dlmZm	Z	m
Z
 d dlmZ dZd dlZg dZdZdefd	d
ZG dd deZdd Zdd ZdZdZdZd dlmZ dddZdd ZdddZdS )    N)AudioSegment)AnyListOptional)	BaseModelz)/Users/zoeshleifer/Downloads/Untitled.mp3)Jacoustic
aggressiveanthemicatmosphericbouncychilldarkdreamy
electronic	emotionalepicexperimental
futuristicgroovy	heartfelt
infectiousmelodicmellowpowerfulpsychedelicromanticsmooth
syncopated	upliftingafrobeatanimeballadzbedroom pop	bluegrassblues	classicalcountrycumbiadancezdelta blues
electropopdiscozdrum and bassedmemofolkfunkzfuture bassgospelgrungegrimezhip hophouseindiezj-popjazzzk-popz
kids musicmetalznew jack swingznew waveoperapunkragarapreggae	reggaetonrockrumbasalsasamba	sertanejosoulsynthpopswing	synthwavetechnotrapz	uk garagedev
model_namec                    s8   t tjdt d d}|j| I d H }|S )Nzorchestrator-ZChatGptStubZmoderate_and_generate)getattrmodalZClslookupenv_namespawnZaioZmodel_dump_json)rG   
queue_itemffn rP   (/Users/zoeshleifer/deejay-suno/extend.pycall_modal_orchestrator[   s   rR   c                   @   sj   e Zd ZU eed< ee ed< ee ed< eed< ee ed< ee ed< ee ed< eee  ed< d	S )
	QueueItemidprompt_audioprompt_textmetadatacallback_urlrG   titleidsN)__name__
__module____qualname__str__annotations__r   r   r   rP   rP   rP   rQ   rS   a   s   
 rS   c                 C   s   | j  }g d}|D ]}||d  q|| j d|dd| j dg | jp-t| j|d | j ddd	d
g |d dt| jdd	|d |d|d|d d |S )N)durationZrefund_creditsZ
experimentZparam_experimentZexperiment_versionpromptcontinued_aligned_prompt historycontinue_attypegenZweb)rT   re   rf   sourceextendtagsgpt_description_promptuser_id)Zcontinued_from_promptrb   rd   re   taskZedited_clip_idrf   rh   ra   rj   rk   rl   )rW   copypopupdategets3_idr^   rT   )continue_clipparamsrW   Zkeys_to_removekeyrP   rP   rQ   create_extend_metadatal   s6   


	rv   c                    s  t   }d}t 4 I d H }	 |d7 }t   | }zddi}|j| |d4 I d H }|jdv rt   | }td|   td	|d
d| d || 4 I d H V}|jdks[J | I d H }	tt   }
d|
 d}t|d}|	|	 W d    n1 sw   Y  |W  d   I d H  W  d   I d H  W W  d   I d H  S 1 I d H sw   Y  W d   I d H  n1 I d H sw   Y  W n  t
y } ztd| d|d
d|  W Y d }~nd }~ww tdI d H  q1 I d H sw   Y  d S )Nr   T   ZRangezbytes=0-1023)headers)      zMP3 file found at zTime elapsed: z.1fz
 seconds (z
 attempts)ry   Zextended_song_.mp3wbzError polling URL (attempt z, zs elapsed):    )timeaiohttpZClientSessionrq   statusprintreadintopenwrite	Exceptionasynciosleep)Zs3_url
start_timeZattempt_countsessionZelapsed_timerx   responseZtotal_elapsedZdownload_responsecontent	timestampZoriginal_filenamerN   erP   rP   rQ   poll_for_mp3   sP   
(r   i]  Z         ?      I  d   c           	      C   s   t | |d k r
dS || }d}tdt | |D ]&}||d kr# dS | |||  }|j|k r<|d7 }||kr; dS qd}qdS )z^
    Return True if sustained silence (below threshold) occurs before MIN_LENGTH seconds.
    r   Tr   Frw   N)lenrangeZdBFS)	ZaudioZmin_length_sZsilence_threshold_dbfsZsilence_duration_msZchunk_msZ
num_chunksZsilent_chunkstchunkrP   rP   rQ   has_sustained_silence   s   
r   c                    s   t t }t t t t g}t| |}td|  t|| j d|d |dd|dd|d}td|I d	H }||fS )
z5Minimal extend implementation with correct batch_sizezDEBUG: Metadata created: r{   ra   zhttp://platypus.han-mahi.ts.netzchirp-v4rY   zExtended Song)rT   rU   rV   rW   rX   rG   rY   rZ   N)	r^   uuidZuuid4rv   r   rS   rr   rq   rR   )rs   extend_paramsZ
request_idZclip_idsrW   rM   resultrP   rP   rQ   extend_clip_minimal   s"   


r   c                 C   sz  t d|   |ddddddd| d| d| dd| d	
}tt||}|rt|d
krd|d
 d
  d}d|d
 d  d}tt|}tt|}	t|	d}
t|		d}|r|	rt
|
}t
|}|rw|rwt|jfS |rt d |	|d
 d fS |rt d ||d
 d
 fS t|
t|krt d ||d
 d
 fS t d |	|d
 d fS t|jfS t|jfS )Nz"DEBUG: Starting extend with tags: rc   Zsunoforeverr   )Zstyle_weightZweirdness_constraintZaudio_strengthrw   zrepetitive, loop )
re   ra   rl   Zcontrol_slidersmake_instrumentalrj   Znegative_tagsrY   rb   rk   r   zhttps://cdn1.suno.ai/r{   zDEBUG: returning second clipzDEBUG: returning first clip)r   joinr   runr   r   r   r   Zfrom_mp3Zset_channelsr   STARTER_CLIPrr   )rj   neg_tagsrs   re   r   r   Zs3_url_1Zs3_url_2Zdownloaded_file_1Zdownloaded_file_2Zaudio_1Zaudio_2Zsilence_time_1Zsilence_time_2rP   rP   rQ   ri      sR   


ri   )r   r   r   r   )r   )rI   r   r   r~   r   Zpydubr   typingr   r   r   Zpydanticr   r   randomRAND_TAG_LISTrK   r^   rR   rS   rv   r   ZSAMPLE_RATEZ
MIN_LENGTHZ
MIN_VOLUMEr   r   ri   rP   rP   rP   rQ   <module>   s.    M+)
#