[英]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.