Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1149030
  • 博文数量: 139
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 1712
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-13 23:10
个人简介

每天进步一点点。

文章分类

全部博文(139)

文章存档

2015年(3)

2014年(11)

2013年(25)

2011年(1)

2009年(3)

2008年(29)

2007年(45)

2006年(22)

分类: Windows平台

2014-07-05 12:07:17

它有一个简单的接口,实现一些比较简单的转换。
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) ;





阅读(3102) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~