专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 编程

SPEEX重采样分析(1)

发布时间:2011-07-01 07:31:27 文章来源:www.iduyao.cn 采编人员:星星草
SPEEX重采样分析(一)

简介

  • 算法速度快
  • SIMD(SSE)指令支持
  • 低内存
  • 高质量

该算法是基于最原始的重采样算法:

   Smith, Julius O. Digital Audio ResamplingHome Page
   Center for Computer Research in Music and Acoustics (CCRMA), 
   Stanford University, 2007.
   Web published at http://www-ccrma.stanford.edu/~jos/resample/.

 

这里使用cubic   interpolation代替linear interpolation。减少CPU时间,能更好使用SIDM算法。

 

接口

speex_resampler_init

功能

创建实例

函数

SpeexResamplerState *speex_resampler_init(spx_uint32_t nb_channels,                                            spx_uint32_t in_rate,

spx_uint32_t out_rate,                                             int quality,                                          

int *err);

参数

nb_channels [in] 通道数

in_rate     [in] 输入音频的采样率

out_rate    [in] 输出音频的采样率

quality     [in] 重采样质量

err         [out] 错误码

返回值

成功返回实例句柄,失败返回NULL

简介

 

 

 

 

speex_resampler_init_frac

功能

根据input/output比例来创建实例

函数

SpeexResamplerState *speex_resampler_init_frac(spx_uint32_t nb_channels,                                                spx_uint32_t ratio_num,    

spx_uint32_t ratio_den,                                                 spx_uint32_t in_rate,                                                      spx_uint32_t out_rate,                                                  int quality,

int *err);

参数

nb_channels    [in]通道数

ratio_num      [in]比例分子                  

ratio_den      [in]比例分母       

in_rate        [in]输入的采样率 

out_rate       [in]输出的采样率

quality        [in]重采样质量

err            [out]错误码

返回值

成功返回实例句柄,失败返回NULL

简介

 

 

 

speex_resampler_destroy

功能

销毁实例

函数

void speex_resampler_destroy(SpeexResamplerState *st);

参数

St [in] 实例句柄

返回值

void

简介

释放资源

 

 

 

speex_resampler_process_float

功能

重采样浮点序列

函数

int speex_resampler_process_float(SpeexResamplerState *st,                                  

spx_uint32_t channel_index,                                   const float *in,                                               spx_uint32_t *in_len,

float *out,                                                   spx_uint32_t *out_len);    

参数

St                [in]句柄

channel_index     [in]通道号

in                [in]输入缓存

in_len           [in]输入长度(返回处理的采样数)

out               [in]输出缓存

out_len           [in]输出长度(返回写入的采样数)

返回值

错误码

简介

输入和输出缓存不能重叠,外部准备缓存

 

 

 

speex_resampler_process_interleaved_float

功能

重采样交叉的多通道浮点数据(例如:双通道PCM)

函数

int speex_resampler_process_interleaved_float(SpeexResamplerState *st,                                                 

const float *in,

spx_uint32_t *in_len,

float *out,

spx_uint32_t *out_len);

参数

St                [in]句柄

in                [in]输入缓存

in_len           [in]输入长度(返回处理的采样数)

out               [in]输出缓存

out_len           [in]输出长度(返回写入的采样数)

返回值

错误码

简介

 

 

 

 

注:以上是主要的接口函数

 

示例

下面把16K的音频转换为8k的音频

    st = speex_resampler_init(1, 16000, 8000, 10, &err);

 

    do{

       readlen = fread(in, sizeof(short), 1024, fin);

       if (readlen > 0)

       {

           inlen = readlen;

           outlen = 1024;

           ret = speex_resampler_process_int(st, 0, in, &inlen, out, &outlen);

           if (ret == RESAMPLER_ERR_SUCCESS)

           {

              fwrite(out, sizeof(short), outlen, fout);

           }

       }

      

    }while(readlen == 1024);

   

    speex_resampler_destroy(st);

 

 

1楼ahyswang10小时前
可以嵌入项目中,只有.h和.cpp文件,希望对大家有用
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: