Skip to content
Snippets Groups Projects
libresample.h 3.8 KiB
Newer Older
  • Learn to ignore specific revisions
  • /**********************************************************************
    
      resample.h
    
      Real-time library interface by Dominic Mazzoni
    
      Based on resample-1.7:
        http://www-ccrma.stanford.edu/~jos/resample/
    
      License: LGPL - see the file LICENSE.txt for more information
    
    **********************************************************************/
    
    
    /*!
     * \file
     * \brief libresample API
     * \author Dominic Mazzoni
     */
    
    
    #ifndef LIBRESAMPLE_INCLUDED
    #define LIBRESAMPLE_INCLUDED
    
    #ifdef __cplusplus
    extern "C" {
    #endif	/* __cplusplus */
    
    
    /*!
     * \brief Create a resampler
     *
     * \arg highQuality Set this argument to non-zero to enable higher quality
     *      resampling.  
     * \arg minFactor This is the minimum resampling factor that will be used for
     *      this resampler.  The resampling factor is calculated in the following
     *      way: ( from sample rate / to sample rate ).
     * \arg maxFactor This is the maximum resampling factor that will be used for
     *      this resampler.
     *
     * Use this function to create a new resampler that will maintain state
     * information about the stream of audio being resampled.
     *
     * \return A handle to a new resampler
     */
    
    void *resample_open(int      highQuality,
                        double   minFactor,
                        double   maxFactor);
    
    
    /*!
     * \brief Duplicate a resampler
     *
     * \arg handle the resampler to duplicate
     *
     * \return A new handle to a resampler, initialized with the same parameters
     * used to create the original resampler.
     */
    
    void *resample_dup(const void *handle);
    
    
    /*!
     * \brief Get filter width for resampler
     * 
     * \arg handle the resampler
     *
     * \return the filter width.
     */
    
    int resample_get_filter_width(const void *handle);
    
    
    /*!
     * \brief Resample a chunk of audio
     *
     * \arg handle the resampler
     * \arg factor the resampling factor.  This factor should be calculated as
     *      ( from sample rate / to sample rate ).  So, for converting from 8 kHz
     *      to 16 kHz, this value would be 2.0.
     * \arg inBuffer the input buffer for audio to resample.
     * \arg inBufferLen the number of samples in the input buffer
     * \arg lastFlag Set this argument to non-zero if the data in the input buffer
     *      is known to be the end of a stream.  This would be used if you're
     *      resampling a file, for example.
     * \arg inBufferUsed This is an output parameter that indicates how many
     *      samples were consumed from the input buffer.  Generally, this function
     *      is called in a loop until you know that the entire input buffer has
     *      been consumed, as it may take multiple calls to complete.
     * \arg outBuffer This is the output buffer.  This function will write the
     *      resampled audio into this buffer.
     * \arg outBufferLen This parameter specifies how many samples there is room
     *      for in the output buffer.
     *
     * This is the main function used for resampling audio.  It should be called
     * in a loop until all of the data from the input buffer is consumed, or the
     * output buffer has been filled.
     *
     * \return the number of samples written to the output buffer.  If the return
     *         value is equal to the value provided in the outBufferLen parameter,
     *         then the output buffer has been filled.
     */
    
    int resample_process(void   *handle,
                         double  factor,
                         float  *inBuffer,
                         int     inBufferLen,
                         int     lastFlag,
                         int    *inBufferUsed,
                         float  *outBuffer,
                         int     outBufferLen);
    
    
    /*!
     * \brief Close a resampler
     *
     * \arg handle the resampler to close
     * 
     * Use this function to release a handle to a resampler that was created using
     * either resample_open() or resample_dup().
     *
     * \return nothing.
     */
    
    void resample_close(void *handle);
    
    #ifdef __cplusplus
    }		/* extern "C" */
    #endif	/* __cplusplus */
    
    #endif /* LIBRESAMPLE_INCLUDED */