o
    Si{"                     @   s2  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mZ d dlZ	g dZ
dadadad ZdZG dd dejZG dd	 d	ejZG d
d dejZG dd dejZG dd dejZG dd dejZdefddZd$ddZd$ddZe e 			d%de	jdededed ed!edee	jef fd"d#Z dS )&    N)OptionalTuple)libsoxlibsox_ratelibsox_availableF   c                   @   s>   e Zd ZdejfdejfdejfdejfdeejfgZdS )sox_signalinfo_tratechannels	precisionlengthmultN)	__name__
__module____qualname__ctypesc_doublec_uintc_uint64POINTER_fields_ r   r   G/home/ubuntu/.local/lib/python3.10/site-packages/lhotse/tools/libsox.pyr      s    r   c                   @   sH   e Zd ZdejfdejfdejfdejfdejfdejfdejfgZdS )	sox_encodinginfo_tencodingbits_per_samplecompressionreverse_bytesreverse_nibblesreverse_bitsopposite_endianN)r   r   r   r   r   r   r   r   r   r   r   r      s    r   c                   @   s,   e Zd ZdejfdefdefdejfgZdS )sox_format_tfilenamesignalr   filetypeN)r   r   r   r   c_char_pr   r   r   r   r   r   r   r!   )   s    r!   c                   @      e Zd ZdS )sox_effect_handler_tNr   r   r   r   r   r   r   r'   2       r'   c                   @   r&   )sox_effects_chain_tNr(   r   r   r   r   r*   6   r)   r*   c                   @   r&   )sox_effect_tNr(   r   r   r   r   r+   :   r)   r+   returnc                   C   s   t jdd uS )Nsox)r   utilfind_libraryr   r   r   r   r   >   s   r   c                  C   s  t rd S t stdttjd} ttjd}|j}tjg|_	d |_
tj| j_
tj| j_
tjtjtttttjg| j_	tt| j_
tjtjtttttjtjg| j_	tt| j_
ttg| j_	tj| j_
ttttg| j_	tt| j_
ttg| j_	tjg| j_	tt| j_
ttg| j_	tt| j_
tttjttjg| j_	tj| j_
ttttttttg| j_	tj| j_
tttjtjg| j _	tj| j _
|  t!krtd| a"|a#da d S )Nz)libsox not available but import requestedr-   czFailed to initialize SoX.T)$LIBSOX_INITIALIZEDr   RuntimeErrorr   CDLLr.   r/   freec_void_pargtypesrestypec_intsox_initsox_quitc_size_tr   r   r   r%   sox_open_mem_readr!   sox_open_mem_write	sox_closesox_create_effects_chainr*   sox_delete_effects_chainsox_find_effectr'   sox_create_effectr+   sox_effect_optionssox_add_effectsox_flow_effectsSOX_SUCCESSr   sox_free)libsox_libc_	sox_free_r   r   r   libsox_importB   st   







rK   c                   C   s   t sd S t  d S )N)r1   r   r:   r   r   r   r   libsox_cleanup   s   rL   vI     X@audiosample_ratetarget_ratequalityphase	bandwidthc                 C   s  t st  | jdks| jtjkrtdd }d }d }z{tt|ddt	| d}	t
tdd}
t| jtj| jt|	t|
d}|sItdt }tt|t|jjtt tt	| t| t| d }|d	 }tj|  }t|ddd
}t
tdd}t||t|t|dd }|stdtt|jjt|jj}|stdt }tt|t|jjtt ttd}tjd t |tj}t!|d| t"||t|t| t#| ttd}d| d| dt$|t$|g}t	|}tj| dd |D  }t!||| t"||t|t| t#| ttd}tjd t |tj}t!|d| t"||t|t|jj t#| t%|d d  W |rtt&| |r|t'| |rtt|jjt|tt t'| n,|rt&| |rt'| |rtt|jjt|tt t'| w w tt	| | | }tj(|j)d |d	  tjd* t+|fS )N   z'Audio must be a 1D float32 numpy array.    )r	   r
   r   r   )r   r   s   rawz"Failed to open memory for reading.g?   )r	   r
   r   z"Failed to open memory for writing.zFailed to create effects chain.s   inputs   rate-z-bc                 S   s   g | ]}| d qS )zutf-8)encode).0sr   r   r   
<listcomp>  s    zlibsox_rate.<locals>.<listcomp>s   output)dtype),r1   rK   ndimr^   npfloat32
ValueErrorr   floatlenr   SOX_ENCODING_FLOATr   r<   r   data_asr5   nbytesbyrefr2   memmovecontentsr#   sizeofroundc_charr=   r?   r   rB   rA   r%   castrC   rD   rG   strrE   r@   r>   
frombufferrawcopyint)rP   rQ   rR   rS   rT   rU   in_ftout_ftchaininput_signalinput_encodingoriginal_input_signalmax_output_samplesmax_output_sizeoutput_bufferoutput_signaloutput_encodingintermediate_signaleargsrate_args_listnum_rate_argsnum_output_samplesr   r   r   r      s  





r   )r,   N)rM   rN   rO   )!atexit
contextlibr   ctypes.utilostypingr   r   numpyr`   __all__r   rG   r1   rF   re   	Structurer   r   r!   r'   r*   r+   boolr   rK   rL   registerndarrayrs   ro   rc   r   r   r   r   r   <module>   sR    
	

V
