怎么把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音频实时播放:音频字节数组(16/8位)转为PCM ArrayBuffer流
如何使用 FFmpeg (C/C++) 将原始 pcm_f32le 音频编码为 AAC 编码音频?