计算机如何处理音频数据?

时间:2011-03-26 17:37:28

标签: audio

我已经使用了几个音频程序,如SDL调音台,大胆等等,但我想看看这些小音响玩具里面有什么。如何处理音频数据等。我还看到了C ++中MP3播放器的一些示例代码,它使用void*来表示音频数据。

但所有这些并不能帮助我理解音频在计算机中的工作原理。那么有人可以向我解释(或介绍一些书籍)关于计算机如何存储和处理数字音频数据的问题? (例如,如果将三角波形存储到.wav文件中,该波形如何存储为位模式?)

4 个答案:

答案 0 :(得分:11)

如何表示波形

有关如何在 Audacity manual 中表示音频的更详细说明:

Waveform

...每条垂直线的高度表示为带符号的数字。


有关数字音频的更多信息

  • Audacity wiki提供了有关 how algorithms in Audacity work 的一些信息。如果您想要了解更多关于Audacity的特定音频效果,那么您可以在那里提出问题。
  • 如果您正在查看源代码, echo effect 是一个很好的起点。
  • 有关数字音频的更多信息,请点击维基百科按钮,查看您感兴趣的链接 this page 。该页面底部的那些对于深入挖掘那里的不同 音频文件格式 特别有用。

您可能会注意到所有这些链接都来自Audacity项目。这不是巧合。

答案 1 :(得分:9)

以你的WAV文件为例:

WAV文件将有一个标题,它为播放器或音频处理器指定关于通道数,采样率,位深度,数据长度等的关键信息。标题出现之后是原始位模式,它存储了音频样本(我假设你知道什么是抽样 - 如果没有,请参阅维基百科)。每个样本由多个字节组成(在标题中指定),并指定任何给定时间点的波形幅度。每个样本都可以以有符号或无符号的形式存储(也在标题中指定)。

答案 2 :(得分:8)

数字音频存储为一系列数字,称为样本。示例:

5,18,6,-4,-12,-3,7,14,4

将这些数字绘制为笛卡尔图上的点:样本值确定沿Y轴的位置,样本的序列号(0,1,2,3等)确定沿X轴的位置。

现在通过您刚绘制的点跟踪一条线。

恭喜,您刚刚渲染了数字音频的波形。 : - )

Y轴是振幅,X轴是时间。

“采样率”确定回放设备(例如声卡)在样本中前进的速度。这是样本的“时间价值”。例如,CD质量的数字音频每秒遍历44,100个样本,读取每个采样点的幅度(Y轴值)。

†上面的讨论忽略了压缩。压缩几乎没有改变数字音频的本质。就像压缩位图图像一样,不会改变位图图像的核心特性。 (音频压缩的主题很丰富 - 我并不是要过度简化它,只是所有压缩音频在渲染之前最终都是未压缩的 - 即,作为可听声音播放或绘制为波形 - 在这点压缩起源的后果不大。)

答案 3 :(得分:5)

您可以从Lothar Reichel阅读本讲座 他在那里解释了一些主题“数字音频压缩”,并发布了一些Matlab代码:

声音是一个复杂的现象。它通常是由空气中的移动物体(或其他介质)引起的, 例如,前后移动的扬声器锥体。该运动反过来导致气压变化 像池塘里的波浪一样穿过空气。我们的耳膜将压力变化转换为 我们的大脑处理成声音的现象。

计算机使用麦克风而不是耳膜“听到”声音。麦克风转换压力 电势的变化,其幅度对应于压力的强度。该 然后,计算机使用称为采样的技术处理电信号。计算机样本 通过定期测量其振幅来发出信号,通常为每秒44,100次。每次测量 存储为具有固定精度的数字,通常为16位。

希望它有所帮助。