o
    TӵiY                     @   st   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ed	 Z
dZe
eZ
dd Zdd Zd	d
 Zdd ZdS )    )SNACNzhubertsiuzdak/snac_24khzcudac              	   C   s  g }t | dk r
d S tjg ttjd}tjg ttjd}tjg ttjd}t | d }| d |d  }t|D ]}d| }	|jd dkrRtj||	 gttjd}nt|tj||	 gttjdg}|jd dkrtj||	d  gttjd}t|tj||	d  gttjdg}n&t|tj||	d  gttjdg}t|tj||	d  gttjdg}|jd dkrtj||	d  gttjd}t|tj||	d  gttjdg}t|tj||	d  gttjdg}t|tj||	d	  gttjdg}q7t|tj||	d  gttjdg}t|tj||	d  gttjdg}t|tj||	d  gttjdg}t|tj||	d	  gttjdg}q7|d|d|dg}
t	|
d dk st	|
d d
kst	|
d dk st	|
d d
kst	|
d dk st	|
d d
krd S t
  t|
}W d    n	1 sw   Y  |d d d d dd
f }|  }| }|d tj}| }|S )N   )devicedtyper                        i   i  )lentorchtensorsnac_deviceint32rangeshapecat	unsqueezeanyinference_modemodeldecodedetachcpunumpyastypenpint16tobytes)
multiframecountframescodes_0codes_1codes_2
num_framesframejicodes	audio_hataudio_slicedetached_audioaudio_npaudio_int16audio_bytes r3   G/home/ubuntu/.local/lib/python3.10/site-packages/orpheus_tts/decoder.pyconvert_to_audio   sN   "(&&&&(&&&(x
r5   c                 C   s   |   } | d}|dkrtd d S | |d  }|drA|drAz|dd }t|d |d d  W S  ty@   Y d S w d S )	Nz<custom_token_zNo token found in the string>   
   r   r   )striprfindprint
startswithendswithint
ValueError)token_stringindexlast_token_start
last_token
number_strr3   r3   r4   turn_token_into_idD   s   
rF   c                 C  s   g }d}| 2 z93 d H W }t ||}|d u rq|dkr@|| |d7 }|d dkr@|dkr@|dd  }t||}|d ur@|V  q6 d S )Nr   r   r      i)rF   appendr5   )	token_genbufferr#   	token_simtokenbuffer_to_procaudio_samplesr3   r3   r4   tokens_decoder]   s"   


rO   c                 #   sl    t  fddfdd  fdd}tj|d}|  	  }|d u r,n|V  q#|  d S )Nc                    s    D ]} | V  qd S Nr3   )rL   )syn_token_genr3   r4   async_token_genv   s   z,tokens_decoder_sync.<locals>.async_token_genc                     s4   t   2 z3 d H W } |  q6 d  d S rP   )rO   put)audio_chunk)rR   audio_queuer3   r4   async_producerz   s
   z+tokens_decoder_sync.<locals>.async_producerc                      s   t    d S rP   )asynciorunr3   )rV   r3   r4   	run_async   s   z&tokens_decoder_sync.<locals>.run_async)target)queueQueue	threadingThreadstartgetjoin)rQ   rY   threadaudior3   )rV   rR   rU   rQ   r4   tokens_decoder_syncq   s   rd   )snacr   r   r   r   rW   r]   r[   from_pretrainedevalr   r   tor5   rF   rO   rd   r3   r3   r3   r4   <module>   s    
5