例如,采用立体声通道wav文件的情况,采样率为44100,位深度为16位。
完全how is the 16 bits divided up?
我正在使用的音频片段,前4个字节有关于第一个音频通道的数据接下来的4位 - 我不知道它是什么(即使用0替换,也没有影响最终的音频文件)。
所以我想弄明白这4位是什么。
答案 0 :(得分:0)
WAV format audio file以44字节标头开头,后跟有效载荷,即未压缩的原始PCM音频数据......在有效载荷区域中,当您走过PCM数据时,每个样本(音频曲线上的点)将包含所有通道的数据...标题将告诉您通道的数量...对于使用16位深度的立体声,您将看到给定通道的两个字节(16位==位深度),紧接着是下一个字节的两个字节频道等...
对于给定的通道,给定的字节集(在您的情况下为2个字节)将出现在两个可能的布局中,这些布局由字节序的选择决定...第一个字节后跟第二个字节...字节序的排序在这里很重要.. 。header还告诉你你正在使用什么字节序...通常WAV格式是小端
每个频道都会生成自己的音频曲线
在您的代码中,要将PCM数据转换为可用的音频曲线数据点,您必须将给定通道的给定样本的所有字节组合成单个值...通常是整数而不是浮点再次标头定义哪个。 ..如果是整数,它可以是有符号或无符号的......小尾数意味着当你读取文件时,第一个(最左边)字节将成为最低有效字节,后跟每个后续字节,成为下一个最重要的字节
伪代码中的:
int mydatapoint // allocate your integer audio curve data point
第0步
mydatapoint = most-significant-byte
此处停止比特深度为8
...如果你的位深度大于8位,现在左移这个以便为后面的字节腾出空间,如果有的话
第1步
mydatapoint = mydatapoint << 8 // shove data to the left by 8 bits
// which effectively jacks up its value
// and leaves empty those right most 8 bits
第2步
// following operation is a bit wise OR operation
mydatapoint = mydatapoint OR next-most-significant-byte
现在重复步骤1&amp;对于PCM数据的每个后续下一个字节,按顺序从最高有效到最低有效(对于小端)...对于超过16的任何位深度都是必不可少的,因此对于24位音频或32位,您将需要组合3或4个字节的将PCM数据转换为单个整数输出音频曲线数据点
为什么我们这样做有点无意义
从模拟转换为数字时的音频保真度水平取决于您录制音频曲线的准确程度......模拟音频是连续曲线,但要变为数字,必须沿曲线采样到离散点。两个因素决定了采样模拟曲线以创建数字表示时的保真度...沿模拟音频曲线的左右距离由采样率决定,沿音频曲线的上下距离由位深决定。 ..更高的采样率每秒可以提供更多的采样,更大的位深度可以提供更多的垂直点来近似模拟音频曲线的瞬时高度
bit depth 8 == 2^8 == 256 distinct vertical values to record curve height
bit depth 16 == 2^16 == 65536 distinct vertical values to record curve height
所以为了更准确地记录我们希望尽可能细化的模拟音频曲线的高度...所以得到的音频曲线尽可能平滑而且没有锯齿状,如果我们只分配2位就会发生这种情况这将给我们2 ^ 2这是4个不同的值...当您的音频曲线在您的绘图上只有4个垂直值可供选择时尝试连接点...位移只是从单个整数值构建许多字节的数据......大于256的数字不能适合一个字节,因此必须分布在PCM数据的多个字节上
http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html
答案 1 :(得分:0)
WAV文件包含几个块。 FMT块指定音频数据的格式。 实际的音频数据在数据块中。 这取决于实际的格式。但我们假设以下格式为例:
PCM,16位,2个通道,采样率为44100Hz。
音频数据表示为样本。在这种情况下,每个样本需要16位= 2个字节。 如果我们有多个通道(在这个例子中2 =立体声),它将如下所示:
left sample, right sample, left sample, right sample, ...
因为每个样本需要2个字节(16位),所以我们得到了这样的结果:
Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | ...
left sample | right sample | left sample | right sample | ...
每秒音频包含44100个EACH频道样本。 总的来说,一秒钟的音频需要44100 *(16/8)* 2字节。