我們的應用程序不斷記錄和處理來自iPhone麥克風的音頻。實時音頻處理Swift
目前我使用AVAudioRecorder和AVFoundation並將音頻輸入錄製到8秒「.wav」文件中。我想連續將音頻輸入記錄到緩衝區並處理8秒長的緩衝區塊。
如何將音頻輸入記錄到緩衝區以及如何從那裏讀取8秒長度的塊?
謝謝!
我們的應用程序不斷記錄和處理來自iPhone麥克風的音頻。實時音頻處理Swift
目前我使用AVAudioRecorder和AVFoundation並將音頻輸入錄製到8秒「.wav」文件中。我想連續將音頻輸入記錄到緩衝區並處理8秒長的緩衝區塊。
如何將音頻輸入記錄到緩衝區以及如何從那裏讀取8秒長度的塊?
謝謝!
您可以通過多種方式接收原始PCM(在AV Foundation中:來自AVCaptureDevice的AVCaptureAudioDataOutput或插入了處理分接頭的AVAudioEngine;在Audio Toolbox:Audio Queue Services中,RemoteIO音頻單元),然後寫入文件,您可以使用Audio Toolbox的AudioFile或ExtAudioFile,只需計算您已寫入的幀數,並決定何時啓動新的8秒文件。
正如藝術Fistman上面所指出的,這將是安全,如果你不喜歡的東西
捕捉回調--pushes到 - >環形緩衝區< --pulls-from--文件寫入代碼
因爲當你關閉一個文件並打開另一個文件時,捕獲回調仍然會進入,如果你阻止了文件I/O,你很有可能將一些數據放在地板上。
我想另一種方法是從回調中填充內存中的8秒緩衝區,當它完成時,讓另一個線程寫入該文件,同時你malloc一個新的緩衝區並開始記錄到該文件中(顯然,文件作者會在完成之後處置舊的緩衝區)。
編輯:另外,我沒有看到任何關於Swift的問題,但是這些都可以在Swift或C/Obj-C中正常工作。
環形緩衝區可能是你要找的。 –
感謝您的回答,您能舉一些插入緩衝區代碼的例子嗎? –
老實說,如果您想要實時處理音頻,您可能希望使用比AVAudioRecorder更低的級別。 - > https://developer.apple.com/library/content/documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/AQRecord/RecordingAudio.html#//apple_ref/doc/uid/TP40005343-CH4-SW1 –