我需要以8kHz的採樣率(大約)1秒鐘來分析音頻數據塊。儘管音頻將被實時錄製,但它只會用於檢測特定事件。因此,沒有嚴格的等待時間要求。這種情況下最好的框架是什麼?如何獲取用於分析核心音頻或AVFoundation的音頻塊
我已經開始學習Core Audio,並且學習了Core Audio。通過互聯網上最少量的Swift文檔,我可以設置AUGraph for iOS來使用遠程I/O音頻單元錄製音頻,並通過輸出呈現回調訪問原始樣本。不幸的是,我堅持要創建1秒的音頻樣本塊來執行音頻分析。可以使用自定義的AudioBufferList嗎?或者是否可以在遠程I/O音頻單元上實現大型鈴聲緩衝器(如果是HAL音頻單元,則需要它)?
我也試着採用AVAsoundReader的AVFoundation來獲取音頻塊。雖然我能夠獲得錄製的音頻信號的樣本,但我沒有成功創建1秒的緩衝區(我甚至不知道是否可以實時進行此操作)。無論如何,AVFoundation在這種情況下是不錯的選擇?
我希望對此有任何建議。
對我來說,一個主要問題是我嘗試使用Swift,但沒有太多示例代碼可用,並且文檔更少。我覺得切換到用於音頻編程的Objective-C會更好,並停止嘗試在Swift中獲取所有內容。我很好奇這是否會是一個更好的時間投資?
這非常有幫助!非常感謝。根據您的評論以及我在Swift中使用Core Audio的經驗,我只是決定切換到Objective-C。儘管我通過「學習Core Audio」工作,但我可能需要更多地提高我的Objective-C技能,但我一定會嘗試更詳細地瞭解您的代碼。現在我想知道你實現的ringbuffer和Apple的CARingBuffer以及Michael Tyson的TPCircularBuffer是否有很大的區別? – Gerard
自從我看了TP以來已經有一段時間了。但通常泰森先生寫的東西都很好。我沒有看過CA,但我確信它是穩定的。 大多數環形緩衝區允許您「消耗」並刪除緩衝區(FIFO)中的最早數據。所以從環中讀取得到最老的數據。礦山工作在最新的數據。它在2秒前和現在之間獲得數據。假設你有一個6秒的緩衝區。我的讀取得到了第4到第6秒,其他環形緩衝區實現的秒數從0到2,所以我就像一個LIFO。 如果您沒有任何實時限制,TP或CA可能正常工作。 – jaybers
我終於完成了你的代碼,並且我很瞭解它。但是,在運行代碼時,播放不起作用(只是正弦波)。我觀察到渲染回調(outRenderProc)中沒有AudioUnitRender從系統輸入(只是正弦波發生器)中繪製。但是當我添加AudioUnitRender時沒有任何改變。可能是因爲interruptListener配置不正確?我試圖修改它,但無法使其工作。我希望你能對此發表評論。 – Gerard