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

目录
相关文章
|
11月前
|
存储 算法 数据可视化
Android 音频(一) | 采样量化编码 & AudioRecord 录制音频
Android 音频(一) | 采样量化编码 & AudioRecord 录制音频
977 0
|
缓存 内存技术
FFmpeg连载6-音频重采样
ffmpeg连载系列
136 0
|
测试技术
如何使用AMR M分析rtp流中的amr语音
笔者分享最近找到一款amr工具amr master。该工具结合wireshark可以网卡包中的amr语音流转出.amr文件,采用vlc player可以进行播放。
如何使用AMR M分析rtp流中的amr语音
|
存储 编解码 Java
【Android FFMPEG 开发】FFMPEG 音频重采样 ( 初始化音频重采样上下文 SwrContext | 计算音频延迟 | 计算输出样本个数 | 音频重采样 swr_convert )(一)
【Android FFMPEG 开发】FFMPEG 音频重采样 ( 初始化音频重采样上下文 SwrContext | 计算音频延迟 | 计算输出样本个数 | 音频重采样 swr_convert )(一)
641 0
|
Android开发
【Android FFMPEG 开发】FFMPEG 音频重采样 ( 初始化音频重采样上下文 SwrContext | 计算音频延迟 | 计算输出样本个数 | 音频重采样 swr_convert )(二)
【Android FFMPEG 开发】FFMPEG 音频重采样 ( 初始化音频重采样上下文 SwrContext | 计算音频延迟 | 计算输出样本个数 | 音频重采样 swr_convert )(二)
534 0
|
存储 编解码
ffplay源码分析6-音频重采样
ffplay是FFmpeg工程自带的简单播放器,使用FFmpeg提供的解码器和SDL库进行视频播放。
239 0
ffplay源码分析6-音频重采样
|
存储 Android开发 iOS开发
一文读懂 YUV 的采样与格式
YUV 是一种颜色编码方法,和它等同的还有 RGB 颜色编码方法。
一文读懂 YUV 的采样与格式
|
5G API 算法
33.FFmpeg+OpenGLES+OpenSLES播放器实现(七.FFmpeg像素格式转换和音频重采样)
项目源码FFmpeg开发文档 像素格式转换 像素格式描述了像素数据存储所用的格式。定义了像素在内存中的编码方式。FFmpeg支持的像素格式主要是rbg和yuv两种,具体可以在结构体AVPixelFormat中看到 /** * Pixel format.
1943 0