了解音频的帧/样本

时间:2015-12-13 22:59:48

标签: ios iphone ipad audio

我正在尝试理解这个名为“惊人的音频引擎”的GitHub项目,它可以轻松处理iOS上的音频。

我正在使用麦克风捕捉并使用此方法:

id<AEAudioReceiver> receiver = [AEBlockAudioReceiver audioReceiverWithBlock: ^(void *source, const AudioTimeStamp *time, UInt32 frames, AudioBufferList *audio) {
 // Do something with 'audio'
}];

据我所知,库采样频率为44100,当块运行时,frames为1024.如果我正确理解整个音频事件,每次运行此块时都会提供类似快照的内容麦克风可以捕获的所有频率,从最小赫​​兹到最大赫兹。因此,如果整个事物在44100采样,则意味着整个光谱将被切成44100个切片。

不是,但假设最小频率为0Hz且最大频率为22 KHz,则片0表示0Hz的幅度,片44099表示22KHz,或者换句话说,阵列audio[0] = 0Hzaudio[44099] = 22KHz,对吧?

然后我测量了块运行的时间,并在0.023秒内调用块一次。为什么?这个数字不是很慢吗?

这个数字对我来说没有意义。不应该以惊人的速度调用块,以便在短时间内对整个频谱进行采样吗?

1 个答案:

答案 0 :(得分:2)

  

如果我正确地理解了整个音频内容,那么每次此块运行时,它都会提供麦克风可以捕获的所有频率的快照,从最小赫​​兹到最大赫兹。

没有;这是不正确的。音频数据通常在时域中表示,而不是在频域中表示。

简而言之:将音频视为波形。每个样本代表某个时间点的波形高度。每秒有44100个这样的样本,样本数组中的每个值代表其中一个。每秒44100个样本,1024个样本的块表示1024/44100 = 0.023秒的音频。

image from Wikipedia - https://en.wikipedia.org/wiki/File:Sampled.signal.svg

此数据中没有直接表示音频。可以使用Fourier transform将时域样本块转换为频域表示,但是解释这一点超出了我在一个答案中可以合理做的范围。