
    wi}
                         d dl Z 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 dlZd dlmZ d dlmZ  e j        e          Z G d de          Z G d de          Zdd
ZddefdZd ZddZdS )    N)Path)NoBackendError)AudioSegmentc                       e Zd ZdS )WatermarkingExceptionN__name__
__module____qualname__     ^/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/perth/waveform.pyr   r              Dr   r   c                       e Zd ZdS )CorruptedAudioExceptionNr   r   r   r   r   r      r   r   r   kaiser_bestc                    t          j        t          |                     j        }|                    d          st          d          	 t          j                    5  t          j        d           t          j
                            t          |           |r|nd|          \  }}ddd           n# 1 swxY w Y   n$# t          t          f$ r t          d          w xY w|||k    sJ d|d|d	|d
            ||fS )aw  
    :param target_sr: expected sample rate after loading and possibly resampling. If None,
    there will be no resampling.
    :param res_algo: algorithm for resampling. If None, there will also be no resampling but if
    the target_sr is valid, the actual sample rate of the audio on disk will be checked against
    and an error will be thrown if they do not match.
    PCMzgUnsupported Audio type for Watermarking. Only 16 or 24-bit PCM/WAV/AIFF audio files can be watermarked.ignoreN)srres_typezFailed to load audio filez2Loaded audio doesn't have expected sampling rate (z vs z, resampling_algo=))sf	SoundFilestrsubtype
startswithr   warningscatch_warningssimplefilterlibrosacoreloadEOFErrorr   r   )fpath	target_srres_algo	bit_depthwav	actual_srs         r   load_wavr+      s    SZZ((0I&& f# %e f f 	fC$&& 	 	!(+++$\..E

X ?		48 /  NC	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 n% C C C%&ABBBC I%%%%DMIIyyyZbZbZb(d%%% 	>s1   C AB6*C 6B::C =B:>C !C#PCM_16sample_ratec                 :   | j         j        dk    s
J d            |dk    r;d\  }}| |z                      ||                              t          j                  } t          |t                    rt          |          n|}t          j
        || ||d           dS )z+
    :param wav: a float32 numpy array
    fz)This function takes floating point arraysr,   )i i  r)   )r   formatN)dtypekindclipastypenpint16
isinstancer   r   r   write)r)   file_or_pathr-   r   	range_min	range_maxs         r   save_wavr<   5   s     9>S   "M    (4	9Y$$Y	::AA"(KK(2<(F(FX3|$$$LLH\3WUKKKKKKr   c                 .    t          j        | ||          S )N)pyrbpitch_shift)r)   r-   	semitoness      r   r?   r?   D   s    Ci888r   "V  c                     t          j        |           }t          j        d          }|                    |          }|                    |dd           |S )Nz.mp3)suffix48kmp3)bitrater0   )r   from_wavtempfileSpooledTemporaryFileset_frame_rateexport)wav_pathr-   segmenttmpfiles       r   convert_to_mp3rO   H   sU    #H--G+6:::G$$[11GNN7E%N888Nr   )r   )r,   )rA   )loggingrH   r   pathlibr   r!   librosa.filtersnumpyr5   pyrubberbandr>   	soundfiler   	audioreadr   pydubr   	getLoggerr	   logger	Exceptionr   r   r+   intr<   r?   rO   r   r   r   <module>r\      s`                             $ $ $ $ $ $       
	8	$	$	 	 	 	 	I 	 	 		 	 	 	 	i 	 	 	   6L LS L L L L9 9 9     r   