了解 frames/samples 音频
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,最大频率为22KHz,则0分片表示0Hz的振幅,44099分片表示22KHz,即数组audio[0] = 0Hz
和 audio[44099] = 22KHz
,对吧?
然后我测量了块运行的时间,块在0.023秒内被调用一次。为什么?这个数字是不是很慢?
这个数字对我来说没有意义。不应该以惊人的速度调用该块,以便以很短的间隔及时对整个频谱进行采样吗?
If I understood the whole audio thing correctly, every time this block runs it will deliver something like a snapshot of all frequencies the microphone can capture, from the minimum to the maximum hertz.
否;这是不正确的。音频数据通常在时域而不是频域中表示。
简而言之:将音频视为波形。每个样本代表该波形在某个时间点的高度。每秒有 44100 个这样的样本,样本数组中的每个值代表其中一个。每秒 44100 个样本,1024 个样本块代表 1024/44100 = 0.023 秒的音频。
此数据中没有音频的直接表示。可以使用 Fourier transform 将时域样本块转换为频域表示,但解释这超出了我可以在一个答案中合理地做的范围。
我正在尝试了解这个名为 "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,最大频率为22KHz,则0分片表示0Hz的振幅,44099分片表示22KHz,即数组audio[0] = 0Hz
和 audio[44099] = 22KHz
,对吧?
然后我测量了块运行的时间,块在0.023秒内被调用一次。为什么?这个数字是不是很慢?
这个数字对我来说没有意义。不应该以惊人的速度调用该块,以便以很短的间隔及时对整个频谱进行采样吗?
If I understood the whole audio thing correctly, every time this block runs it will deliver something like a snapshot of all frequencies the microphone can capture, from the minimum to the maximum hertz.
否;这是不正确的。音频数据通常在时域而不是频域中表示。
简而言之:将音频视为波形。每个样本代表该波形在某个时间点的高度。每秒有 44100 个这样的样本,样本数组中的每个值代表其中一个。每秒 44100 个样本,1024 个样本块代表 1024/44100 = 0.023 秒的音频。
此数据中没有音频的直接表示。可以使用 Fourier transform 将时域样本块转换为频域表示,但解释这超出了我可以在一个答案中合理地做的范围。