怎么把sample大小为32bit的PCM音频流编码成aac格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么把sample大小为32bit的PCM音频流编码成aac格式相关的知识,希望对你有一定的参考价值。

确定真的需要用AAC编码32bit的音源?
16bit的音源信噪比已经-96dB了,
16bit->32bit改善的是-96dB到-192dB之间的人耳几乎听不到的地方,
而AAC之类非可逆编码造成的失真不用说,肯定远远超过-96dB。
保留那多出来的16bit真的有需要么?

或者LZ不是为了实际需求,只是为了证明AAC能够编32bit?
没注意过32bit,规格是允许的,不过估计大部分的免费编码器都不支持直接转吧。。
想转的话先把32bit(应该是IEEE标准的浮点值)的wav转成24bit或者16bit的整数值的wav再进行编码就可以了。

formattag fffe是扩展格式,你给的信息缺了3行,扩展格式是声道定义和标准定义不同的时候(比如这个音源不是一般的立体声,而是一个5.1ch系统中的2个环绕声的时候)需要的。
包含以下四个参数。

wValidBitsPerSample
wSamplesPerBlock
dwChannelMask
SubFormat
参考技术A 确定真的需要用AAC编码32bit的音源?
16bit的音源信噪比已经-96dB了,
16bit->32bit改善的是-96dB到-192dB之间的人耳几乎听不到的地方,
而AAC之类非可逆编码造成的失真不用说,肯定远远超过-96dB。
保留那多出来的16bit真的有需要么?

或者LZ不是为了实际需求,只是为了证明AAC能够编32bit?
没注意过32bit,规格是允许的,不过估计大部分的免费编码器都不支持直接转吧。。
想转的话先把32bit(应该是IEEE标准的浮点值)的wav转成24bit或者16bit的整数值的wav再进行编码就可以了。

formattag fffe是扩展格式,你给的信息缺了3行,扩展格式是声道定义和标准定义不同的时候(比如这个音源不是一般的立体声,而是一个5.1ch系统中的2个环绕声的时候)需要的。
包含以下四个参数。

wValidBitsPerSample
wSamplesPerBlock
dwChannelMask
SubFormat本回答被提问者采纳

PCM简介

PCM脉冲编码调制是Pulse Code Modulation的缩写。未经压缩的音频数据裸流。

技术图片

模拟信号数字化必须经过三个过程,即抽样、量化和编码。

一、抽样(Sampling)

抽样是把模拟信号以其信号带宽2倍以上的频率提取样值,变为在时间轴上离散的抽样信号的过程。

二、量化(quantizing)

抽样信号虽然是时间轴上离散的信号,但仍然是模拟信号,其样值在一定的取值范围内,可有无限多个值。

显然,对无限个样值一一给出数字码组来对应是不可能的。为了实现以数字码表示样值,必须采用“四舍五入”的方法把样值分级“取整”,

使一定取值范围内的样值由无限多个值变为有限个值。这一过程称为量化。

量化后的抽样信号与量化前的抽样信号相比较,当然有所失真,且不再是模拟信号。

这种量化失真在接收端还原模拟信号时表现为噪声,并称为量化噪声。量化噪声的大小取决于把样值分级“取整”的方式,分的级数越多,

即量化级差或间隔越小,量化噪声也越小。

三、编码(coding)

量化后的抽样信号就转化为按抽样时序排列的一串十进制数字码流,即十进制数字信号。
简单高效的数据系统是二进制码系统,因此,应将十进制数字代码变换成二进制编码,根据十进制数字代码的总个数,
可以确定所需二进制编码的位数,即字长(采样位数)这种把量化的抽样信号变换成给定字长的二进制码流的 过程称为编码。
技术图片
 
时长 * 采样率 * 采样位数 * 声道数 / 8 = 文件大小。

以上是关于怎么把sample大小为32bit的PCM音频流编码成aac格式的主要内容,如果未能解决你的问题,请参考以下文章

PCM和WAV音频格式的区别,以及python自动转换

将 PCM 16 位音频转换为 PCM 8 位

PCM音频实时播放:音频字节数组(16/8位)转为PCM ArrayBuffer流

如何使用 FFmpeg (C/C++) 将原始 pcm_f32le 音频编码为 AAC 编码音频?

在 C/C+ 中从 16 位线性 PCM 音频转换为 32 位浮点的最佳方法?

PCM EQ DRC 音频处理