声音数据如何存储为.wav格式?

How sound data is stored .wav format?

出于学习目的,我想用 C# 制作一个简单的 .wav 播放器。我想更深入地了解音频是如何在计算机上存储和播放的,所以我想手动播放 .wav,而不是简单地调用内置函数。

我查看了 .wav 文件的结构并找到了一些很棒的资源。我发现 wav 文件格式从第 44 个字节开始存储声音数据。它包含有关先前字节中的通道和采样率的数据,但这与我的问题无关。

我发现这个数据是soundwave。据我所知,声波样本的高度代表它的频率。但是我不明白音色是从哪里来的?如果我只以正确的频率播放正确的时间量的声音,我会听到哔哔声。我可以简单地用 System.Console.Beep(freq, duration); 播放它们,但你很难称之为音乐。

我试过浏览多种资源,但它们只描述了元数据,并没有涵盖声音字节流中的确切内容。我在这个网站上找到了 similar question and answer,但它并没有真正回答这个问题,我相信它甚至没有被标记为已接受。

wave byte stream中的数据到底是什么,如何将其制作成电脑上实际播放的声音?

你错了:样本的高度不代表频率。事实上,wav-格式根本不使用频率。 wav 基本上按照以下方式工作:

  • 以特定频率对模拟信号进行采样。 wav 的常见频率是 44,100 Hz,因此每秒将创建 44,100 个样本。
  • 每个样本包含模拟信号在采样时间的高度。常见的 wav 格式是 16 位格式。这里将使用16位来存储信号的高度。
  • 这一切对每个频道都是单独发生的。

我不确定数据的存储顺序,但您找到的一些重要资源可能会帮助您。

加上上面的答案,样本的高度就是回放时的音量。它表示将扬声器向后或向前推多远以重新产生振动。

您所指的音色是由音频波的频率决定的。

音频中发生了很多事情,一个简单的鼓点会产生多种频率的声音,包括谐波或不同频率的重复振动,但所有这些都与编程站点无关,因此您需要研究声音和频率,也许还有 DSP。

从计算机的角度来看,您需要知道的是,声音存储为以设定频率采集的样本,只要我们以两倍于我们希望捕获的声音的频率进行采样,我们就能够重新生成原来的。样本会及时记录当时音频的当前电平(音量),将样本转回音频是声卡上数模转换器的工作。

操作系统负责通过适当的驱动程序将样本传递给硬件。在 windows WASAPI 和 ASIO 中有两个 API 可以用来将音频传递到声卡。查看 NAudio 等开源项目,了解调用这些操作系统所需的代码 APIs.

我希望这对我有所帮助我怀疑这个话题比你最初想象的要广泛。