简易重采样resampler的实现
基于开源库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的实现相关推荐
- ffmpeg滤镜调整颜色明艳和亮度
1.亮度 eq 设置亮度.对比度.饱和度和近似伽马(gamma)调整 滤镜支持下面选项: contrast 设置contrast表达式,值必须是一个-2.0-2.0间的浮点数,默认为0 brightn ...
- Android Audio 2: Audio相关术语
https://source.android.com/devices/audio/terminology.html Audio相关的术语包含广泛运用的通用术语和Android专属的术语. 1.通用术语 ...
- ITK对应python中SimpleITK库的常用函数举例
在医学图像上经常使用的一个库-SimpleITK,很多处理都只懂个大概或者只会简单的读取,保存图像,这里对常用的一些操作进行总结: import SimpleITK as sitk 1.sitk.C ...
- [Android] 混音器AudioMixer
AudioMixer是Android的混音器,通过混音器可以把各个音轨的音频数据混合在一起,然后输出到音频设备. 创建AudioMixer AudioMixer在MixerThread的构造函数内创建 ...
- ffplay.c学习-4-⾳频输出和⾳频重采样
ffplay.c学习-4-⾳频输出和⾳频重采样 目录 ⾳频输出模块 打开SDL⾳频设备 打开⾳频设备audio_open 回调函数逻辑sdl_audio_callback 回调函数读取数据 ⾳频重采样 ...
- 音频处理基本概念及音频重采样
音频处理基本概念及音频重采样 目录 重点问题 重采样 什么是重采样 为什么要重采样 可调节的参数 对应参数解析 采样率 采样格式及量化精度(位宽) 分⽚(plane)和打包(packed) 声道分布( ...
- Pandas 时间序列 - 实例方法与重采样
呆鸟云:"数据分析就像是夜里行军,业务是灯塔,是地图,没灯塔你不知道方向,没地图你不知道该怎么走.技术是你的交通工具,你用11路,还是骑自行车,还是开跑车,交通工具越好,你实现目标的速度越快 ...
- 对nii医学图像进行重采样
在做医学图像配准时,需要将数据集的三维医学图像进行重采样. 在对"EMPIRE10"数据集进行预处理时,将每幅图像都重采样为192*160*192. "EMPIRE10& ...
- python resample函数_Pandas的时间序列-resample重采样
39. Pandas的时间序列数据-resample重采样 在pandas里对时序的频率的调整称之重新采样,即从一个时频调整为另一个时频的操作,可以借助resample的函数来完成.有upsampli ...
最新文章
- 查找只有一个字母不相同的单词
- VirtualBox使用技巧
- 2018年7月5日笔记
- 在JAVA语言程序中main_在Java程序main方法中,正确的参数是
- windows怎么打开python_windows怎么打开Python
- php jquery选中提交,如何使用jquery提交php发布数据
- 我要做 Android 之 Service
- Java 设计模式 之 访问者模式
- 1.Hbase集群安装配置(一主三从)
- 目前世界上15款优秀杀毒软件
- 干掉hao123恶意植入浏览器
- H3C交换机如何查环路
- Openstack的安装部署教程
- Java学习 之 画图板 立方体
- java实现png有损压缩
- 牛客网SQL大厂面试真题(一)
- day05_步入百万年薪的第五天
- Webdings,Wingdings图形字体对照表
- 身为一个程序媛的深刻自我检讨
- dp uva1626 括号序列
热门文章
- B1054 求平均值 (20 分)
- RDKit | 基于最大公共子结构(MCS)的分子比对
- Measuring Similarity between Clusters (Clusters 之间相似度的测量)【未完待续】
- matlab画CDF曲线
- 怎么获取html的某个元素,MSHTML怎么获取一个网页元素对象
- ISME:微生物网络构建与分析面临的挑战
- 你想要的宏基因组-微生物组知识全在这(1802)
- 扩增子文献笔记2拟南芥根微生物组的结构和组成
- 合川专升本计算机怎么学升学率,2019年重庆市合川太和中学高考喜报
- Python使用matplotlib可视化散点图、并在可视化图像的底部和右边添加边缘直方图、自定义边缘直方图的色彩(Marginal Histogram)