生成音频波形

问题描述:

这篇文章更多的是关于澄清,而不是实现某种音频波形算法。我读过有关的主题(包括对SO进出网络上)的帖子无数,这里就是我已经收集:生成音频波形

  • 在16位WAV的背景下,我想读的每两个字节作为short,这将导致介于-32768到32767之间的值。
  • 对于44.1kHz的采样率,每一秒音频将有44000个采样。

这是相当直接的,但是我有以下问题:

  • 在单声道呈现的WAV只有一个信道,这是每帧信息的两个字节。在立体声中,这成为四个字节的信息。在我的情况下,我不需要显示两个频道,所以我只需跳过正确的频道并只读取左侧的频道?我读过的一些解决方案提到了将左右声道结合起来,但我不确定这是否是必需的。
  • 假设我有一个长度为两秒的音频文件,另一个长度为三十秒的音频文件。如果我需要抓取最少800个样本来表示波形,则会沿文件长度抓取800个样本,引入精度问题,例如,对于两个第二音频文件为(44,000 * 2)/800,对于第三十二音频文件为(44,000 * 30)/800

一个解释真的很感谢!

+0

我们不能回答你的第一个问题,问问给你任务的人。我不明白你的第二个问题。你在谈论哪个“特定区域”?您需要2 * 44k采样来表示两秒的音频。这就是采样率的定义。使用22k样本无法录制44k音频。 –

+0

@TamasHegedus我更新了我的第二个问题。我试图尽可能地重新说出它。简而言之,我只是试图确定44,000个样本区域内的样本是否疯狂地变化,以及是否需要进行某种平均。 – Raggeth

+0

是啊这两个问题需要澄清 - 通过收集一堆信息不会提出一个问题 - 你没有达到它似乎的东西,你试图解释一些你不明白的东西 - 告诉我如何做到这一点 – gpasch

这是我的专业领域之外,但我会给它一个去。

据我所知,你可能会跳过一些样本并保持合理的准确性 - 如果你跳过43 kHz文件中的每一个其他样本,就好像你在22.05 kHz记录了原始样本。但是,根据Wikipedia,如果采样频率小于您正在采样的声音的某个分量的频率的两倍,则会遇到准确性问题。除非你的音频中有高调的铃铛和cy,否则这在22.05 kHz时可能不是问题。但是如果你每30秒只抽样800次,那么处理器官的最低音就不足以处理。假设你每秒采样800次,并且在800赫兹处有一个声音(接近G或高于高音C的G#)。每次你采样时,你都会得到完全相同的波形点。您正在采样的波浪中的这个位置可能是峰值点,或者它可能是一个低点。不经常抽样,你不可能知道。

至于是否只能采样一个通道,取决于是否可以忽略其他通道。想象一下立体声文件,右边有声音,左边有音乐。他们将有不同的波模式。如果您可以忽略音乐,那么您可以右取样并忽略左侧。如果你需要两者,那么你显然需要对两者进行抽样。