音频重采样

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了音频重采样相关的知识,希望对你有一定的参考价值。

参考技术A 由于从网络流、本地媒体文件等各种渠道解码的AVFrame帧,其采样位数、声道数、采样率都是不确定的,但是在很多的播放器框架中,需要播放指定的采样位数、声道数、采样率的音频数据,因此需要首先进行格式转换,这个格式转换的过程就称为音频重采样。

音频重采样上下文,这是一个不公开的结构,所有涉及的操作均以指针的方式进行:

分配重采样上下文内存:

设置样本格式、通道布局、采样率:

上面这几个函数用于重采样上下文的创建和参数设置,用法如下:

如果嫌预初使化的过程繁琐,可以使用统一包装函数:

用法:

正式初使化重采样上下文:

计算重采样上下文缓冲样本的延迟时间,base参数用于指定基准时间,通常设置为输入采样率:

执行重采样转换,out和out_count参数指定输出缓冲区和建议的样本数,in和in_count指定输入的样本数。
返回转换成功的样本数,由于上下文带有缓冲功能,所有实际输出的样本数可能小于输入的样本数。
可以将in参数设置为NULL,用于将缓冲区的数据全部输出。

重采样过程完成后,释放上下文:

这个函数用于重新计算a * b / c 的结果,在音频重采样中用于计算相同时长的目标样本数:

如:

一些辅助函数:

根据通道布局获取通道数:

根据音频参数分配相关内存空间:

上面是获取一组内存空间,有时只需要单通道内存或者样本以交错排列存储,使用这个函数:

根据音频参数获取音频数据大小:

按常理来说,我应该写一个关于音频重采样的例子,但是我突然改变主意了,计划在下篇中写一个完整地读取本地媒体文件并交给ALSA播放的演示程序,这里就暂时放一个重采样的简单封装吧。

以上是关于音频重采样的主要内容,如果未能解决你的问题,请参考以下文章

如何使用音频重采样器对 IF 信号进行重采样

音频重采样

ffmpeg音频重采样

音频压缩编码技术—音频重采样

音频压缩编码技术—音频重采样

javaCV开发详解之14:音频重采样