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

use*_*691 35 audio wav

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

kra*_*nko 55

您会听说,音频信号由某种波形表示.如果你曾经看到这个波形图上下一行 - 这基本上就是那些文件中的内容.请查看http://en.wikipedia.org/wiki/Sampling_rate中的此文件图片

采样

你会看到你的音频波(灰线).重复测量该波的当前值并以数字给出.那是那些字节中的数字.有两种不同的东西可以用这个来调整:你每秒测量的次数(这是采样率,以Hz为单位 - 这是你每秒获取的数量).另一个调整是你测量的精确程度.在2字节的情况下,您需要两个字节进行一次测量(通常为-32768到32767的值).因此,根据那里给出的那些数字,您可以重新创建原始波(当然,质量有限,但在以数字方式存储数据时总是如此).重新创建原始波是您的扬声器在播放时尝试做的事情.

还有一些事情你需要知道.首先,因为它是两个字节,所以你需要知道字节顺序(大端,小端)才能正确地重新创建数字.其次,您需要知道您拥有多少个频道以及它们的存储方式.通常你会有单声道(单通道)或立体声(两个),但更多可能.如果您有多个频道,则需要知道它们的存储方式.通常你会让它们交错,这意味着你为每个时间点的每个通道获得一个值,然后在下一个时间点获得所有值.

举例说明:如果两个通道和16位数字的数据为8个字节:

abcdefgh
Run Code Online (Sandbox Code Playgroud)

这里ab会弥补第16位号码,不要通道1的第一个值,cd将是通道2的第一个数字ef是通道1的第二个值,gh为通道2,你不会听到太多的第二个值因为那不会接近第二个数据......

如果将所有信息整合在一起,就可以计算出的比特率,即每秒记录器生成的信息位数.在我们的示例中,您在每个样本上为每个通道生成2个字节.有两个通道,即4个字节.您每秒需要大约44000个样本来表示人类通常可以听到的声音.所以你最终会得到每秒176000字节,即每秒1408000位.

当然,它不是2位值,而是两个2字节值,或者你的质量非常糟糕.

  • 您最终没有提到该图中的垂直轴是什么,或者保存的值的性质 (3认同)

hot*_*aw2 16

前44个字节通常是标准的RIFF头,如下所述:http: //tiny.systems/software/soundProgrammer/WavFormatDocs.pdf 和这里:http://www.topherlee.com/software/pcm-tut-wavformat html的

Apple/OSX/macOS/iOS创建的.wav文件可能会在标头中添加"FLLR"填充块,从而将初始标头RIFF的大小从44字节增加到4k字节(可能是为了更好的磁盘或存储块对齐原始样本数据).

其余的通常是16位线性PCM,采用带符号的二进制补码小端格式,表示任意缩放的采样,速率为44100 Hz.

波形文件格式


小智 7

我想你的问题是“.wav 文件的数据块中的字节代表什么?” 让我们系统地了解一切。
前奏:假设我们使用某种设备播放 5KHz 正弦波并将其记录在名为“sine.wav”的文件中,并且记录是在单通道(单声道)上完成的。现在您已经知道该文件中的标头代表什么。让我们看一下一些重要的定义:

  • 样本:任何信号的样本是指采样点处该信号的幅度。t=1.23 处的样本是在振幅为 0.94 时采集的。 因此样本值为 0.94
  • 采样率:在给定的时间间隔内可以采集许多此类样本。假设我们在 1 秒内采集 10 个正弦波样本。每个样本间隔 0.1 秒。所以我们每秒有 10 个样本,因此采样率为 10Hz。标头中的第 25 至 28 个字节表示采样率。


现在回答您的问题:
实际上不可能将整个正弦波写入文件,因为正弦波上有无限个点。相反,我们固定采样率并开始以这些间隔对波进行采样并记录幅度。(选择采样率,以便使用我们要获取的样本以最小的失真重建信号。由于样本数量不足而导致的重建信号失真称为“混叠”。)为了避免混叠
,采样率选择为正弦波频率(5kHz)的两倍以上(这称为“采样定理”,频率两倍的速率称为“奈奎斯特率”)。因此,我们决定采用 12kHz 的采样率,这意味着我们将在一秒钟内对正弦波进行 12000 次采样。
一旦我们开始记录,如果我们记录信号,即5kHz频率的正弦波,我们将有12000*5个样本(值)。我们将这 60000 个值放入一个数组中。然后,我们创建正确的标头来反映我们的元数据,然后将这些以十进制记录的样本转换为相应的十六进制。然后将这些值写入 .wav 文件的数据字节中。

绘图于: http: //fooplot.com


sea*_*iao 6

WAVE(.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.            
Run Code Online (Sandbox Code Playgroud)

我在http://www.topherlee.com/software/pcm-tut-wavformat.html这里复制了所有这些内容

  • 请正确使用您的条款.你正在混合字节和比特.没有32字节整数这样的东西 - 它是32位. (3认同)

Pat*_*Pat 6

正如其他人指出的那样,wav文件中有元数据,但我认为您的问题可能是,(数据的字节,不是元数据的)字节是什么意思?如果是这样,则字节代表已记录信号的

这意味着什么?好吧,如果提取代表每个样本的两个字节(例如)(假设是单声道录音,则意味着只录制了一个声道),那么您将获得一个16位的值。在WAV中,(总是?)16位是带符号的,并且是低端的(顺便说一下,Mac OS对WAV的回答AIFF是大端的)。因此,如果您采用该16位样本的值并将其除以2 ^ 16(或2 ^ 15,如果是带符号的数据),那么最终将得到一个样本,该样本被标准化为该范围内-1至1。对所有样本执行此操作,并将它们与时间作图(时间取决于记录中每秒有多少个样本;例如44.1KHz表示44.1样本/毫秒,因此第一个样本值将绘制为t = 0,t = 1ms处的第44位,依此类推),您将获得一个大致代表最初记录内容的信号。


TJD*_*TJD 3

两位音频听起来不太好:) 最常见的是,它们将样本值表示为 16 位有符号数字,表示以 44.1kHz 等频率采样的音频波形。