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);

时间: 2024-12-01 06:45:37

SPEEX重采样分析(一)的相关文章

Speex手册----编解码介绍

2.1 概念 Before introducing all the Speex features, here are some concepts in speech coding that help better understand the rest of the manual. Although some are general concepts in speech/audio processing, others are specific to Speex 在介绍Speex特性之前,为了便

Speex语音的前置处理(一)

1.简介 语音在采集和传输过程中,由于语音源的差异.信道的衰减.噪声的干扰以及远近效应,导致信号幅度相差很大.所有在语音处理之前我们需要对语音数据进行前置处理,包括预处理(AGC.VAD.回音消除).重采样和噪声抑制. 所有的代码都是基于speex开源库,具体内容可以参考http://speex.org/. 本开发手册暂时只提供AGC的接口和测试代码,其他陆续添加进来. 2.接口说明 2.1  介绍 预处理模块包括自动增益控制.静音检测和回音消除.以下是接口函数,具体参考speex\ speex

speex开源项目的学习

 项目是用C写的.solution中包含了以下10个project: 1.libspeex     speex动态库,核心project,用户使用的就是它,在solution中,接口头文件很贴心的放在了一个单独的文件夹中,名为Public Header Files. 2.libspeexdsp     静态库,从头文件名称可以看出,功能应该是回音抑制.抗抖动等专业算法,本以为它是由libspeex抽离出来的一个下层库,咱上层用户跟它是非耦合的.仔细看了看,发现它们并没有从属关系.后面看到的pro

从图片上传的三个步骤来分析其中的交互过程

传统的图片上传交互很简单:一个文件域要求用户选择图片文件,一个提交按钮(如下图). 这种方式有很多缺点,比如选择图片后看不到预览,一次只能选择一张图,上传过程看不到进度.当然也有它自身的优点:html本身的表单控件,代码简单,上传不易出错,适合低速网络环境.现在富媒体横行的时代,用户需要长传大量图片,这种传统表单的方式上传图片显然已经跟不上时代的需求,基于 flash.html5的新型上传方式被广泛的应用. 我们从上传图片前.上传中.上传后三个步骤来分析其中的交互过程. 上传前 上传图片前一般可

python网络编程之数据传输UDP实例分析

  本文实例讲述了python网络编程之数据传输UDP实现方法.分享给大家供大家参考.具体分析如下: 一.问题: 你觉得网络上像msn,qq之类的工具在多台机器之间互相传输数据神秘吗?你也想玩一下在两台机器之间传数据吗?今天让python告诉我们基本原理吧,当然只是做简单的了解,实际情况复杂的多. 我们今天用python实现一个简单的udp程序. 二.程序实现: 1) 使用模块 (socket)套接字模块: 套接字模块是一个非常简单的基于对象的接口,它提供对低层BSD套接字样式网络的访问 .使用

python中enumerate函数用法实例分析

  本文实例讲述了python中enumerate函数用法.分享给大家供大家参考.具体分析如下: 今日发现一个新函数 enumerate .一般情况下对一个列表或数组既要遍历索引又要遍历元素时,会这样写: ? 1 2 for i in range (0,len(list)): print i ,list[i] 但是这种方法有些累赘,使用内置enumerrate函数会有更加直接,优美的做法,先看看enumerate的定义: ? 1 2 3 4 5 6 7 def enumerate(collect

python实现马耳可夫链算法实例分析

  本文实例讲述了python实现马耳可夫链算法的方法.分享给大家供大家参考.具体分析如下: 在<程序设计实践>(英文名<The Practice of Programming>)的书中,第三章分别用C语言,C++,AWK和Perl分别实现了马耳可夫链算法,来通过输入的文本,"随机"的生成一些有用的文本. 说明: 1. 程序使用了字典,字典和散列可不是一个东西,字典是键值对的集合,而散列是一种能够常数阶插入,删除,不过可以用散列来实现字典. 2. 字典的setd

php中关于抽象(abstract)类和抽象方法的问题分析

 这篇文章主要介绍了php中关于抽象(abstract)类和抽象方法的问题分析,有需要的朋友可以参考一下 在面向对象(OOP)语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法作为外部代码访问的接口.而抽象方法就是为了方便继承而引入的,现在来看一下抽象类和抽象方法分别是如何定义以及他们的特点.   什么是抽象方法?我们在类里面定义的只有方法名没有方法体的方法就是抽象方法,所谓没有方法体就是在方法声明的时候没有大括号以及其中的内容,而是直接声明时在方法名后加上分号结束,另外在声明抽象

python使用正则表达式分析网页中的图片并进行替换的方法

 这篇文章主要介绍了python使用正则表达式分析网页中的图片并进行替换的方法,涉及Python使用正则表达式的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了python使用正则表达式分析网页中的图片并进行替换的方法.分享给大家供大家参考.具体分析如下: 这段代码分析网页中的所有图片表单<img>,分析后为其前后添加相应的修饰标签,并添加到图片的超级链接. 代码如下: result = value.replace("[ page ]","