2017-04-06 105 views
0

例如,以立体声通道wav文件为例,采样率为44100,位深度为16位。wav文件中实际包含的数据块是什么?

究竟how is the 16 bits divided up?


,我用,前4个字节有数据关于第一音频信道的下一个4位的音频剪辑 - 我不知道它是什么(即使与0取代,有对最终的音频文件没有影响)。


接下来的4个字节有关于第二个音频通道的数据,接下来的4位 - 我不知道它是什么(即使替换为0,对最终音频文件没有影响)。

所以我想弄清楚这4位是什么。

+0

16位不分开 - 它只是一个16位的数字,在这种情况下给出了音量。 –

回答

0

WAV format audio file以一个44字节的标题开头,后面跟着有效负载,它是未压缩的原始PCM音频数据......当你穿过PCM数据时,每个采样点(音频曲线上的点)将包含所有数据通道...标题会告诉你通道的数量...对于使用位深度为16的立体声,你会看到给定通道的两个字节(16位==位深度),紧接着是下一个通道的两个字节等。 ..

对于一个给定的通道,一组给定的字节(在你的情况下是2个字节)将出现在两个可能的布局中,这两个布局由选择的字节顺序决定...第一个字节后面跟着第二个字节...排序的顺序是重要的这里...标题还告诉你你使用的是什么endianness ...通常是WAV格式是小端

每个通道将在您的代码从PCM数据转换成可用的音频曲线数据点,必须结合给定样本的所有字节用于给定信道为一个值产生它自己的音频曲线

...通常是它的整数而不是浮点,头部定义了哪一个...如果整数可以是有符号或无符号的......小尾数是指在读取文件时第一个(最左边的)字节将成为最低有效字节随后是每个随后的字节,成为下一个最重要的字节

in pseudo code:

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 & 2为PCM数据的每一后续下一个字节,以便从最显著到至少显著(对于小端排序)...对于超过16位的任何位深度都是必不可少的,因此对于24位音频或32位,您需要将3或4字节的PCM数据合并到您的单个整数输出音频曲线数据点中。

音频保真度从模拟转换为数字时的级别取决于您录制音频曲线的准确程度。模拟音频是连续曲线,但要成为数字,必须将其采样到曲线上的离散点。 ..两个因素确定采样模拟曲线以创建其数字表示时的保真度...沿模拟音频曲线的从左到右的距离由采样率和上下距离alon克音频曲线由位深度决定...更高的采样率给你更多的样本每秒和更大的位深度给你更多的垂直点来近似模拟音频曲线的瞬时高度

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的数字不能放入一个字节,因此必须是spre广告PCM数据的多个字节

http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html

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个每个频道的样本。 因此总共一秒钟的音频需要44100 *(16/8)* 2字节。

相关问题