基于开源库speexdsp, 可以简单实现重采样。

简单实现的代码如下:

需要的三方库: speexdsp ,libsndfile

#include <stdlib.h>
#include <sndfile.h>
#include <speex_resampler.h>#define BUFFER_SIZE 2048int main(int argv, const char *args[]) {if (argv != 4) {printf("usage: %s <input file path> <to samplerate> <output file path> \n", args[0]);return 1;}const char *in_path = args[1];int output_sr = atoi(args[2]);const char *out_path = args[3];SF_INFO info;SNDFILE *in = sf_open(in_path, SFM_READ, &info);if (!in) {fprintf(stderr, "cannot open file %s\n", in_path);return 2;}SF_INFO onfo;onfo.channels = 1;onfo.samplerate = output_sr;onfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16 ;onfo.sections = 0;onfo.seekable = 1;SNDFILE *out = sf_open(out_path, SFM_WRITE, &onfo);if (!out) {fprintf(stderr, "cannot open file %s\n", out_path);sf_close(in);return 2;}int err = 0;SpeexResamplerState *resampler = speex_resampler_init(info.channels, info.samplerate, output_sr, 1, &err);printf("=====================\nchannels: %d\nsample rate:%d\n", info.channels, info.samplerate);if (info.channels != 1) {fprintf(stderr, "only support mono wav.\n");sf_close(in);sf_close(out);return 3;}short in_buffer[BUFFER_SIZE] = {0};uint32_t size = BUFFER_SIZE * output_sr/ info.samplerate;printf("new buffer size: %d\n", size);short *out_buffer = (short *) calloc(size,  sizeof(short));uint32_t read = 0;do {read = sf_read_short(in, in_buffer, BUFFER_SIZE);err = speex_resampler_process_int(resampler, 0, (const spx_int16_t *)in_buffer, (spx_uint32_t *)&read, (spx_int16_t *)out_buffer, &size);if (err) {fprintf(stderr, "err:%d\n", err);}sf_write_short(out, out_buffer, size);} while(read>0);free(out_buffer);sf_close(in);sf_close(out);return 0;
}

上述代码只在centos上编译测试,不过后来也有移植到windows下的。

如果需要成品的可以在这里下载windows版本,有需要可以自取。

https://download.csdn.net/download/mimiduck/12465600

简易重采样resampler的实现相关推荐

  1. ffmpeg滤镜调整颜色明艳和亮度

    1.亮度 eq 设置亮度.对比度.饱和度和近似伽马(gamma)调整 滤镜支持下面选项: contrast 设置contrast表达式,值必须是一个-2.0-2.0间的浮点数,默认为0 brightn ...

  2. Android Audio 2: Audio相关术语

    https://source.android.com/devices/audio/terminology.html Audio相关的术语包含广泛运用的通用术语和Android专属的术语. 1.通用术语 ...

  3. ITK对应python中SimpleITK库的常用函数举例

    在医学图像上经常使用的一个库-SimpleITK,很多处理都只懂个大概或者只会简单的读取,保存图像,这里对常用的一些操作进行总结: import  SimpleITK as sitk 1.sitk.C ...

  4. [Android] 混音器AudioMixer

    AudioMixer是Android的混音器,通过混音器可以把各个音轨的音频数据混合在一起,然后输出到音频设备. 创建AudioMixer AudioMixer在MixerThread的构造函数内创建 ...

  5. ffplay.c学习-4-⾳频输出和⾳频重采样

    ffplay.c学习-4-⾳频输出和⾳频重采样 目录 ⾳频输出模块 打开SDL⾳频设备 打开⾳频设备audio_open 回调函数逻辑sdl_audio_callback 回调函数读取数据 ⾳频重采样 ...

  6. 音频处理基本概念及音频重采样

    音频处理基本概念及音频重采样 目录 重点问题 重采样 什么是重采样 为什么要重采样 可调节的参数 对应参数解析 采样率 采样格式及量化精度(位宽) 分⽚(plane)和打包(packed) 声道分布( ...

  7. Pandas 时间序列 - 实例方法与重采样

    呆鸟云:"数据分析就像是夜里行军,业务是灯塔,是地图,没灯塔你不知道方向,没地图你不知道该怎么走.技术是你的交通工具,你用11路,还是骑自行车,还是开跑车,交通工具越好,你实现目标的速度越快 ...

  8. 对nii医学图像进行重采样

    在做医学图像配准时,需要将数据集的三维医学图像进行重采样. 在对"EMPIRE10"数据集进行预处理时,将每幅图像都重采样为192*160*192. "EMPIRE10& ...

  9. python resample函数_Pandas的时间序列-resample重采样

    39. Pandas的时间序列数据-resample重采样 在pandas里对时序的频率的调整称之重新采样,即从一个时频调整为另一个时频的操作,可以借助resample的函数来完成.有upsampli ...

最新文章

  1. 查找只有一个字母不相同的单词
  2. VirtualBox使用技巧
  3. 2018年7月5日笔记
  4. 在JAVA语言程序中main_在Java程序main方法中,正确的参数是
  5. windows怎么打开python_windows怎么打开Python
  6. php jquery选中提交,如何使用jquery提交php发布数据
  7. 我要做 Android 之 Service
  8. Java 设计模式 之 访问者模式
  9. 1.Hbase集群安装配置(一主三从)
  10. 目前世界上15款优秀杀毒软件
  11. 干掉hao123恶意植入浏览器
  12. H3C交换机如何查环路
  13. Openstack的安装部署教程
  14. Java学习 之 画图板 立方体
  15. java实现png有损压缩
  16. 牛客网SQL大厂面试真题(一)
  17. day05_步入百万年薪的第五天
  18. Webdings,Wingdings图形字体对照表
  19. 身为一个程序媛的深刻自我检讨
  20. dp uva1626 括号序列

热门文章

  1. B1054 求平均值 (20 分)
  2. RDKit | 基于最大公共子结构(MCS)的分子比对
  3. Measuring Similarity between Clusters (Clusters 之间相似度的测量)【未完待续】
  4. matlab画CDF曲线
  5. 怎么获取html的某个元素,MSHTML怎么获取一个网页元素对象
  6. ISME:微生物网络构建与分析面临的挑战
  7. 你想要的宏基因组-微生物组知识全在这(1802)
  8. 扩增子文献笔记2拟南芥根微生物组的结构和组成
  9. 合川专升本计算机怎么学升学率,2019年重庆市合川太和中学高考喜报
  10. Python使用matplotlib可视化散点图、并在可视化图像的底部和右边添加边缘直方图、自定义边缘直方图的色彩(Marginal Histogram)