Secret Rabbit Code (aka libsamplerate) 的API说明(1)

3410阅读 0评论2014-07-05 清谈先生
分类:Windows平台

它有一个简单的接口,实现一些比较简单的转换。
int src_simple (SRC_DATA *data, int converter_type, int channels) ;
该函数需要知道输入数据的总长度,channels需要指定输入数据的声道数,输入输出总是一样的声道数。
SRC_DATA的定义如下:
typedef struct
{   float  *data_in, *data_out ;

          long   input_frames, output_frames ;
          long   input_frames_used, output_frames_gen ;

          int    end_of_input ;

          double src_ratio ;
 } SRC_DATA ;
data_in : 指向输入缓冲区
input_frames  : 输入缓冲区data_in的帧数.
data_out      : 输出缓冲区.
output_frames : 输出缓冲区的最大帧数.
src_ratio     : output_sample_rate / input_sample_rate.
output_frames_gen:返回生成的样点数
input_frames_used:使用到的输入样点数
如果转换过程中出错,会返回非零值。
可以使用函数 const char* src_strerror (int error) ;了解出错原因。


converter_type可以使下面的这些值:
enum
{    
    SRC_SINC_BEST_QUALITY       = 0,
    SRC_SINC_MEDIUM_QUALITY     = 1,
    SRC_SINC_FASTEST            = 2,
    SRC_ZERO_ORDER_HOLD         = 3,
    SRC_LINEAR                  = 4
} ;
SRC_SINC_BEST:带宽受限的sinc内插方法,最差的时候SNR为97db.SRC_SINC_*都是使用了同样的算法。使用的算法是参考 ,代码是自己开发的。
SRC_SINC_FASTEST:速度最快,SNR为80%带宽时97db
SRC_ZERO_ORDER_HOLD:保持零阶的转换算法,质量比较差,速度那是亮瞎了。
SRC_LINEAR :线性转换,质量很差,速度很快。  
提供了两个函数用于读取方法的名称和详细说明:
const char *src_get_name (int converter_type) ;
const char *src_get_description (int converter_type) ;
另外四个辅助函数,用于数组里面的数据类型转换。
void src_short_to_float_array (const short *in, float *out, int len) ;
void src_float_to_short_array (const float *in, short *out, int len) ;
void src_int_to_float_array (const int *in, float *out, int len) ;
void src_float_to_int_array (const float *in, int *out, int len) ;





上一篇:使用VS2010编译Secret Rabbit Code (aka libsamplerate)
下一篇:一种可以防止削波的混音方法