Audio .wav文件中的字节代表什么?

Audio .wav文件中的字节代表什么?,audio,wav,Audio,Wav,当我将.wav文件中的数据存储到字节数组中时,这些值意味着什么? 我读过,它们是两字节表示,但这两个字节值中到底包含什么?两位音频听起来不是很好:)最常见的是,它们将采样值表示为16位有符号数字,表示以44.1kHz等频率采样的音频波形。波形(.wav)文件包含一个头,它指示音频文件数据的格式信息。标题后面是实际的音频原始数据。你可以在下面查看它们的确切含义 Positions Typical Value Description 1 - 4 "RIFF" Marks

当我将.wav文件中的数据存储到字节数组中时,这些值意味着什么?
我读过,它们是两字节表示,但这两个字节值中到底包含什么?

两位音频听起来不是很好:)最常见的是,它们将采样值表示为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表示采样率

现在来回答您的问题:
实际上不可能将整个正弦波写入文件,因为正弦波上有无限多个点。相反,我们固定采样率并开始采样