[英]Understanding frames/samples for Audio
我试图理解这个名为“ The Amazing Audio Engine”的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] = 0Hz
和audio[44099] = 22KHz
对吗?
然后,我测量了该块运行的时间,并在0.023秒内调用了该块一次。 为什么? 这个数字不慢吗?
这个数字对我来说没有意义。 难道不应该以极快的速度调用该块,这样整个频谱将以较短的间隔及时采样吗?
如果我正确理解了整个音频,那么每次运行此模块时,它都会发出类似麦克风可以捕获的所有频率(从最小到最大赫兹)的快照之类的信息。
没有; 这是不正确的。 音频数据通常在时域而不是频域中表示。
简而言之:将音频视为波形。 每个样本代表该波形在某个时间点的高度。 每秒有44100个这样的样本,样本数组中的每个值代表其中一个。 每秒44100个样本,一个1024个样本的块代表1024/44100 = 0.023秒的音频。
此数据中没有直接表示音频的频率。 可以使用傅立叶变换将时域样本块转换为频域表示形式,但是解释这一点超出了我在单个答案中可以合理进行的范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.