Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Secret Rabbit Code (aka libsamplerate) Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0:
Chris@0: SRC.png Chris@0:
Chris@0: Chris@0:
Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0:
Chris@0:
Chris@0: Chris@0: Chris@0:
Chris@0:
Chris@0: Chris@0:

Callback API

Chris@0:

Chris@0: The callback API consists of the following functions : Chris@0:

Chris@0:
Chris@0:       typedef long (*src_callback_t) (void *cb_data, float **data) ;
Chris@0: 
Chris@0:       SRC_STATE* src_callback_new (src_callback_t func,
Chris@0: 	                      int converter_type, int channels,
Chris@0: 	                      int *error, void* cb_data) ;
Chris@0: 
Chris@0:       SRC_STATE* src_delete (SRC_STATE *state) ;
Chris@0: 
Chris@0:       long src_callback_read (SRC_STATE *state, double src_ratio,
Chris@0: 	                       long frames, float *data) ;
Chris@0: 
Chris@0:       int src_reset (SRC_STATE *state) ;
Chris@0:       int src_set_ratio (SRC_STATE *state, double new_ratio) ;
Chris@0: 
Chris@0:
Chris@0: Chris@0:

Chris@0: Like the Chris@0: simple API Chris@0: and the Chris@0: full API, Chris@0: the callback based API is able to operate on interleaved multi channel data. Chris@0:

Chris@0: Chris@0:

Chris@0: An example of the use of the callback based API can be found in the Chris@0: varispeed-play program in the examples/ directory of the Chris@0: source code tarball. Chris@0:

Chris@0: Chris@0: Chris@0: Chris@0:


Initialisation

Chris@0:
Chris@0:       SRC_STATE* src_callback_new (src_callback_t func,
Chris@0: 	                      int converter_type, int channels,
Chris@0: 	                      int *error, void* cb_data) ;
Chris@0: 
Chris@0:

Chris@0: The src_callback_new function returns an anonymous pointer to a Chris@0: sample rate converter callback object, src_state. Chris@0: This is the same type of object as that returned by Chris@0: src_new, but with different internal state. Chris@0: Although these are the same object type, they cannot be used interchangeably. Chris@0: If an error occurs the function returns a NULL pointer and fills in the Chris@0: error value pointed to by the error pointer supplied by the caller. Chris@0:

Chris@0:

Chris@0: The caller then passes the SRC_STATE object to the src_callback_read Chris@0: function to pull data out of the converter. Chris@0: When the caller is finished with the converter they should pass it to the Chris@0: clean up function src_delete. Chris@0:

Chris@0:

Chris@0: The func parameter is a user supplied function which must match the Chris@0: src_callback_t type signature while cb_data is a pointer to Chris@0: data which be passed as the first parameter to the user supplied callback Chris@0: function. Chris@0: This function is called by the converter whenever it needs input data as a Chris@0: result of being calls to src_callback_read. Chris@0:

Chris@0:

Chris@0: If the converter was initialised to work with more than one channel, the Chris@0: callback function must work with mutiple channels of interleaved data. Chris@0: The callback function should return the number of frames it supplying to Chris@0: the converter. Chris@0: For multi channel files, this return value should be the number of floats Chris@0: divided by the number of channels. Chris@0:

Chris@0:

Chris@0: The converter must be one of the supplied converter types documented Chris@0: here. Chris@0:

Chris@0:

Chris@0: The caller then passes the SRC_STATE pointer to the src_callback_read Chris@0: function to pull data out of the converter. Chris@0:

Chris@0: Chris@0: Chris@0: Chris@0:


Callback Read

Chris@0:
Chris@0:       long src_callback_read (SRC_STATE *state, double src_ratio,
Chris@0: 	                       long frames, float *data) ;
Chris@0: 
Chris@0:

Chris@0: The src_callback_read function is passed the Chris@0: SRC_STATE Chris@0: pointer returned by src_callback_new, the coversion ratio Chris@0: (output_sample_rate / input_sample_rate), the maximum number of output frames Chris@0: to generate and a pointer to a buffer in which to place the output data. Chris@0: For multi channel files, the data int the output buffer is stored in Chris@0: interleaved format. Chris@0:

Chris@0:

Chris@0: The src_callback_read function returns the number of frames generated Chris@0: or zero if an error occurs or it runs out of input (ie the user supplied Chris@0: callback function returns zero and there is no more data buffered internally). Chris@0: If an error has occurred, the function Chris@0: src_error will return non-zero. Chris@0:

Chris@0: Chris@0:

Chris@0: See also : Chris@0: src_set_ratio Chris@0:

Chris@0: Chris@0: Chris@0: Chris@0:
Chris@0:
Chris@0: Chris@0: Chris@0: Chris@0: