o
    Vi}
                     @   s   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 eZG dd deZG dd deZdd
dZddefddZdd ZdddZdS )    N)Path)NoBackendError)AudioSegmentc                   @      e Zd ZdS )WatermarkingExceptionN__name__
__module____qualname__ r   r   B/home/ubuntu/.local/lib/python3.10/site-packages/perth/waveform.pyr          r   c                   @   r   )CorruptedAudioExceptionNr   r   r   r   r   r      r   r   kaiser_bestc              	   C   s   t t| j}|dstdz,t  td t	j
jt| |r&|nd|d\}}W d   n1 s7w   Y  W n ttfyJ   tdw |dur\||ks\J d|||f ||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 filezOLoaded audio doesn't have expected sampling rate (%s vs %s, resampling_algo=%s))sf	SoundFilestrsubtype
startswithr   warningscatch_warningssimplefilterlibrosacoreloadEOFErrorr   r   )fpath	target_srres_algo	bit_depthwav	actual_srr   r   r   load_wav   s&   


r&   PCM_16sample_ratec                 C   sj   | j jdks
J d|dkrd\}}| | ||tj} t|tr't|n|}t	j
|| ||d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_maxr   r   r   save_wav5   s   r6   c                 C   s   t | ||S )N)pyrbpitch_shift)r$   r(   	semitonesr   r   r   r8   D   s   r8   "V  c                 C   s4   t | }tjdd}||}|j|ddd |S )Nz.mp3)suffix48kmp3)bitrater*   )r   from_wavtempfileSpooledTemporaryFileset_frame_rateexport)wav_pathr(   segmenttmpfiler   r   r   convert_to_mp3H   s
   

rG   )r   )r'   )r:   )loggingr@   r   pathlibr   r   librosa.filtersnumpyr/   pyrubberbandr7   	soundfiler   	audioreadr   pydubr   	getLoggerr   logger	Exceptionr   r   r&   intr6   r8   rG   r   r   r   r   <module>   s$   

