
    qiU#                     X    d 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	 ddgZ
	 d
dZ	 d
d	Zy)zCore resampling interface    N   )
get_filter)resample_f_sresample_f_presampleresample_nuc                    |dk  rt        dj                  |            |dk  rt        dj                  |            ||k(  r| j                         S t        |      |z  }t	        | j
                        }t        ||   t        |      z  t        |      z        ||<   ||   dk  r)t        dj                  | j
                  |   ||            t        j                  | j                  t        j                        rt        j                  }	n| j                  }	t        j                  | |	|      }
t        |fi |\  }}}|dk  r||z  }t        j                  ||d         }t        d	|      }d	|z  }t        j                   ||         |z  }|r4	 t#        | j%                  d|      ||||||
j%                  d|             |
S t/        | j%                  d|      ||||||
j%                  d|             |
S # t&        j(                  $ rV}t+        j,                  | d
d       t/        | j%                  d|      ||||||
j%                  d|             Y d}~|
S d}~ww xY w)a	  Resample a signal x from sr_orig to sr_new along a given axis.

    Parameters
    ----------
    x : np.ndarray, dtype=np.float*
        The input signal(s) to resample.

    sr_orig : int > 0
        The sampling rate of x

    sr_new : int > 0
        The target sampling rate of the output signal(s)

        If `sr_new == sr_orig`, then a copy of `x` is returned with no
        interpolation performed.

    axis : int
        The target axis along which to resample `x`

    filter : optional, str or callable
        The resampling filter to use.

        By default, uses the `kaiser_best` (pre-computed filter).

    parallel : optional, bool
        Enable/disable parallel computation exploiting multi-threading.

        Default: False.

    **kwargs
        additional keyword arguments provided to the specified filter

    Returns
    -------
    y : np.ndarray
        `x` resampled to `sr_new`

    Raises
    ------
    ValueError
        if `sr_orig` or `sr_new` is not positive
    TypeError
        if the input signal `x` has an unsupported data type.

    Examples
    --------
    >>> import resampy
    >>> np.set_printoptions(precision=3, suppress=True)
    >>> # Generate a sine wave at 440 Hz for 5 seconds
    >>> sr_orig = 44100.0
    >>> x = np.sin(2 * np.pi * 440.0 / sr_orig * np.arange(5 * sr_orig))
    >>> x
    array([ 0.   ,  0.063, ..., -0.125, -0.063])
    >>> # Resample to 22050 with default parameters
    >>> resampy.resample(x, sr_orig, 22050)
    array([ 0.011,  0.122,  0.25 , ..., -0.366, -0.25 , -0.122])
    >>> # Resample using the fast (low-quality) filter
    >>> resampy.resample(x, sr_orig, 22050, filter='kaiser_fast')
    array([ 0.012,  0.121,  0.251, ..., -0.365, -0.251, -0.121])
    >>> # Resample using a high-quality filter
    >>> resampy.resample(x, sr_orig, 22050, filter='kaiser_best')
    array([ 0.011,  0.122,  0.25 , ..., -0.366, -0.25 , -0.122])
    >>> # Resample using a Hann-windowed sinc filter
    >>> import scipy.signal
    >>> resampy.resample(x, sr_orig, 22050, filter='sinc_window',
    ...                  window=scipy.signal.hann)
    array([ 0.011,  0.123,  0.25 , ..., -0.366, -0.25 , -0.123])

    >>> # Generate stereo data
    >>> x_right = np.sin(2 * np.pi * 880.0 / sr_orig * np.arange(len(x)))
    >>> x_stereo = np.stack([x, x_right])
    >>> x_stereo.shape
    (2, 220500)
    >>> # Resample along the time axis (1)
    >>> y_stereo = resampy.resample(x_stereo, sr_orig, 22050, axis=1)
    >>> y_stereo.shape
    (2, 110250)
    r   Invalid sample rate: sr_orig={}zInvalid sample rate: sr_new={}r   z;Input signal length={} is too small to resample from {}->{}dtypeshapeappend      ?$
Fallback to the sequential version.   
stacklevelN)
ValueErrorformatcopyfloatlistr   intnp
issubdtyper   integerfloat32
zeros_liker   diffminaranger   swapaxesnumbaTypingErrorwarningswarnr   )xsr_origsr_newaxisfilterparallelkwargssample_ratior   r   y
interp_win	precision_interp_deltascaletime_incrementt_outexcs                      >/opt/pipecat/venv/lib/python3.12/site-packages/resampy/core.pyr   r      sa   d !|:AA'JKK{9@@HII&vvx=7*L ME eDkE&M1E'NBCE$KT{Q##)6!''$-&#I
 	
 
}}QWWbjj)


auE2A)&;F;J	1a!J.
77:jn=L\"E<'NIIeDk"^3E	

2t$

2t$D H 	JJr4 JJr4 	
 H3    	MM%<= 

2t$

2t$ ( H3	s   1G= =I&AI!!I&c                    |dk  rt        dj                  |            t        j                  |      }|j                  dk7  r$t        dj                  |j
                              t        j                  |      dk  s+t        j                  |      | j
                  |   dz
  |z  kD  rUt        dj                  t        j                  |      t        j                  |      | j
                  |   dz
  |z              t        | j
                        }t        |      ||<   t        j                  | j                  t        j                        rt        j                  }n| j                  }t        j                  | ||      }	t        |fi |\  }
}}t        j                   |
|
d         }|d	k7  r||z  }|r4	 t#        | j%                  d|      ||
||d	|	j%                  d|             |	S t/        | j%                  d|      ||
||d	|	j%                  d|             |	S # t&        j(                  $ rV}t+        j,                  | d
d       t/        | j%                  d|      ||
||d	|	j%                  d|             Y d}~|	S d}~ww xY w)a'  Interpolate a signal x at specified positions (t_out) along a given axis.

    Parameters
    ----------
    x : np.ndarray, dtype=np.float*
        The input signal(s) to resample.

    sr_orig : float
        Sampling rate of the input signal (x).

    t_out : np.ndarray, dtype=np.float*
        Position of the output samples.

    axis : int
        The target axis along which to resample `x`

    filter : optional, str or callable
        The resampling filter to use.

        By default, uses the `kaiser_best` (pre-computed filter).

    parallel : optional, bool
        Enable/disable parallel computation exploiting multi-threading.

        Default: True.

    **kwargs
        additional keyword arguments provided to the specified filter

    Returns
    -------
    y : np.ndarray
        `x` resampled to `t_out`

    Raises
    ------
    TypeError
        if the input signal `x` has an unsupported data type.

    Notes
    -----
    Differently form the `resample` function the filter `rolloff`
    is not automatically adapted in case of subsampling.
    For this reason results obtained with the `resample_nu` could be slightly
    different form the ones obtained with `resample` if the filter
    parameters are not carefully set by the user.

    Examples
    --------
    >>> import resampy
    >>> np.set_printoptions(precision=3, suppress=True)
    >>> # Generate a sine wave at 100 Hz for 5 seconds
    >>> sr_orig = 100.0
    >>> f0 = 1
    >>> t = np.arange(5 * sr_orig) / sr_orig
    >>> x = np.sin(2 * np.pi * f0 * t)
    >>> x
    array([ 0.   ,  0.063,  0.125, ..., -0.187, -0.125, -0.063])
    >>> # Resample to non-uniform sampling
    >>> t_new = np.log2(1 + t)[::5] - t[0]
    >>> resampy.resample_nu(x, sr_orig, t_new)
    array([ 0.001,  0.427,  0.76 , ..., -0.3  , -0.372, -0.442])
    r   r
   r   z+Invalid t_out shape ({}), 1D array expectedz6Output domain [{}, {}] exceeds the data domain [0, {}]r   r   r   r   r   r   r   N)r   r   r   asarrayndimr   r"   maxr   lenr   r   r   r   r    r   r!   r   r$   r%   r&   r'   r(   r   )r)   r*   r8   r,   r-   r.   r/   r   r   r1   r2   r3   r4   r5   r9   s                  r:   r   r      sV   D !|:AA'JKKJJuEzzQ9@@M
 	
 
vve}qBFF5MQWWT]Q->',IIDKKurvve}qwwt}q/@G.K
 	
 MEe*E$K	}}QWWbjj)


auE2A)&;F;J	177:jn=L #~	

2t$

2t$D H 	JJr4 JJr4 	
 H3    	MM%<= 

2t$

2t$ ( H3	s   =1H# #J6AJJ)r   kaiser_bestF)__doc__r'   numpyr   r%   filtersr   interpnr   r   __all__r   r        r:   <module>rH      s>          /}
% AFbL @EGrG   