Audio .wav文件中的字节代表什么?
当我将.wav文件中的数据存储到字节数组中时,这些值意味着什么?Audio .wav文件中的字节代表什么?,audio,wav,Audio,Wav,当我将.wav文件中的数据存储到字节数组中时,这些值意味着什么? 我读过,它们是两字节表示,但这两个字节值中到底包含什么?两位音频听起来不是很好:)最常见的是,它们将采样值表示为16位有符号数字,表示以44.1kHz等频率采样的音频波形。波形(.wav)文件包含一个头,它指示音频文件数据的格式信息。标题后面是实际的音频原始数据。你可以在下面查看它们的确切含义 Positions Typical Value Description 1 - 4 "RIFF" Marks
我读过,它们是两字节表示,但这两个字节值中到底包含什么?两位音频听起来不是很好:)最常见的是,它们将采样值表示为16位有符号数字,表示以44.1kHz等频率采样的音频波形。波形(.wav)文件包含一个头,它指示音频文件数据的格式信息。标题后面是实际的音频原始数据。你可以在下面查看它们的确切含义
Positions Typical Value Description
1 - 4 "RIFF" Marks the file as a RIFF multimedia file.
Characters are each 1 byte long.
5 - 8 (integer) The overall file size in bytes (32-bit integer)
minus 8 bytes. Typically, you'd fill this in after
file creation is complete.
9 - 12 "WAVE" RIFF file format header. For our purposes, it
always equals "WAVE".
13-16 "fmt " Format sub-chunk marker. Includes trailing null.
17-20 16 Length of the rest of the format sub-chunk below.
21-22 1 Audio format code, a 2 byte (16 bit) integer.
1 = PCM (pulse code modulation).
23-24 2 Number of channels as a 2 byte (16 bit) integer.
1 = mono, 2 = stereo, etc.
25-28 44100 Sample rate as a 4 byte (32 bit) integer. Common
values are 44100 (CD), 48000 (DAT). Sample rate =
number of samples per second, or Hertz.
29-32 176400 (SampleRate * BitsPerSample * Channels) / 8
This is the Byte rate.
33-34 4 (BitsPerSample * Channels) / 8
1 = 8 bit mono, 2 = 8 bit stereo or 16 bit mono, 4
= 16 bit stereo.
35-36 16 Bits per sample.
37-40 "data" Data sub-chunk header. Marks the beginning of the
raw data section.
41-44 (integer) The number of bytes of the data section below this
point. Also equal to (#ofSamples * #ofChannels *
BitsPerSample) / 8
45+ The raw audio data.
我从这里复制了所有这些你会听到,音频信号由某种波表示。如果你曾经看到过这种波形图,其中有一条直线上下移动,这就是这些文件的基本内容。请从中查看此文件图片 你可以看到你的音波(灰线)。重复测量该波的当前值,并将其作为数字给出。这就是那些字节中的数字。有两种不同的东西可以用它来调整:每秒的测量次数(这是采样率,以Hz为单位——这是每秒的采样次数)。另一个调整是测量的精确程度。在2字节的情况下,一次测量需要两个字节(通常是从-32768到32767的值)。因此,根据这里给出的数字,您可以重新创建原始的wave(当然,质量有限,但在以数字方式存储内容时总是如此)。重现原始波形是扬声器在播放时要做的事情 还有一些事情你需要知道。首先,因为它是两个字节,所以需要知道字节顺序(大端、小端)才能正确地重新创建数字。其次,你需要知道你有多少频道,以及它们是如何存储的。通常你会有单声道(一个声道)或立体声(两个声道),但更多是可能的。如果您有多个通道,您需要知道它们是如何存储的。通常,您会将它们交错,这意味着您会为每个通道的每个时间点获取一个值,然后为下一个时间点获取所有值 举例说明:如果您有两个通道的8字节数据和16位数字:
abcdefgh
此处a
和b
将构成第一个16位数字,这是通道1的第一个值,c
和d
将是通道2的第一个数字e
和f
是通道1的第二个值,g
和h
是通道2的第二个值。你不会听到太多,因为那不会接近一秒钟的数据
如果你把所有的信息放在一起,你就可以计算出你的比特率,也就是记录器每秒产生的信息比特数。在我们的示例中,您在每个示例上为每个通道生成2个字节。对于两个通道,这将是4个字节。你需要大约每秒44000个样本来表示人类蜜蜂通常能听到的声音。因此,最终的结果是每秒176000字节,也就是每秒1408000位
当然,它不是2位值,而是两个2字节的值,否则质量会很差。前44个字节通常是标准RIFF头,如下所述: 在这里: Apple/OSX/macOS/iOS创建的.wav文件可能会在头中添加“FLLR”填充块,从而将初始头RIFF的大小从44字节增加到4k字节(可能是为了更好地对齐原始样本数据的磁盘或存储块) 其余的通常是16位线性PCM,采用有符号2的补码小端格式,以44100 Hz的速率表示任意缩放的样本
正如其他人所指出的,wav文件中有元数据,但我认为您的问题可能是,具体而言,字节(数据,而不是元数据)是什么意思?如果这是真的,则字节表示所记录信号的值
这是什么意思?嗯,如果你提取代表每个样本的两个字节(比如说)(假设一个单声道录音,意味着只录制了一个声道),那么你就得到了一个16位的值。在WAV中,16位是(总是?)有符号的,并且是小端(顺便说一下,Mac OS对WAV的回答是,AIFF是大端)。因此,如果你把16位样本的值除以2^16(或者2^15,如果它是有符号的数据),你将得到一个标准化为-1到1范围内的样本。对所有样本执行此操作,并绘制它们与时间的关系图(时间由记录中每秒的样本数决定;例如,44.1KHz表示44.1个样本/毫秒,因此第一个样本值将在t=0时绘制,第44个样本值将在t=1ms时绘制,以此类推)你得到了一个大致代表原始记录的信号。我想你的问题是“.wav文件的数据块中的字节代表什么?”让我们系统地了解一切。
前奏曲: 假设我们使用某种设备播放5KHz正弦波,并将其记录在名为“sine.wav”的文件中,然后在单声道(mono)上进行记录。现在您已经知道该文件中的头表示什么了。 让我们看一下一些重要的定义:
- 采样:任何信号的采样指采样点处该信号的振幅
- 采样率:在给定的时间间隔内可以采集许多这样的样本。假设我们在1秒内采集10个正弦波样本。每个样品间隔0.1秒。我们每秒有10个样本,因此采样率是10Hz。标题中的字节25到28表示采样率
现在来回答您的问题:
实际上不可能将整个正弦波写入文件,因为正弦波上有无限多个点。相反,我们固定采样率并开始采样