[英]Which approach to use for reading audio samples in real-time
對於特定項目,我需要:
我研究過各種方法-音頻單元,音頻圖,AVAudioEngine,AudioTapProcessor-但不確定哪一個是僅針對iOS8和iOS9的Swift項目的正確路徑。 AudioTapProcessor可以很好地用於訪問音頻文件中的音頻樣本,但不能確定麥克風輸入或Swift支持。
哪種方法最符合這些要求? 謝謝閱讀。
更新:我使用了AVAudioEngine,到目前為止,它非常適合。
音頻單元和圖表將齊頭並進。 音頻單元是組件,圖形是將它們連接在一起的機制。 使用單位和圖表將為您提供最佳的實時(低延遲)性能和選項。 由於核心音頻最初是ac api,因此我發現Objective C更適合核心音頻。
我最近回答了一個有關環形緩沖區的問題,並將該項目用作演示。 該項目在從麥克風錄音時會發出聲音,並允許您通過讀取鈴聲中的最新樣本進行處理。 這可能是一個很好的起點。 您可以根據需要刪除正在播放的音調。
我相信,具有kAudioUnitSubType_RemoteIO的單個音頻組件的簡約低級方法在低延遲和Swift支持方面將可靠地執行。 假定該接口 (這里命名為方便起見)myAudioController正確聲明和初始化, 注冊呈現回調 中下面的代碼應該做的實時I / O映射(這里用C寫的,雖然):
myAudioController *myController = (myAudioController *)inRefCon;
//this would render inNumberFrames of data from audio input...
AudioUnitRender(myController->audioUnit,
ioActionFlags,
inTimeStamp,
bus1,
inNumberFrames,
ioData);
//from here on, individual samples can be monitored and processed...
AudioBuffer buffer = ioData->mBuffers[0];
Swift中的等效代碼片段可能如下所示:
let myController = UnsafeMutablePointer<myAudioController>(inRefCon).memory
AudioUnitRender(myController.audioUnit,
ioActionFlags,
inTimeStamp,
bus1,
inNumberFrames,
ioData)
for buffer in UnsafeMutableAudioBufferListPointer(ioData) { ... }
請隨時查閱Apple的參考頁面以獲取詳細信息-記錄非常清楚: https : //developer.apple.com/library/ios/documentation/AudioUnit/Reference/AUComponentServicesReference/#//apple_ref/c/func/AudioUnitRender
這可能也是一個有價值的站點,其中的必需閱讀教科書中的C示例已用Swift重新編寫: https : //github.com/AlesTsurko/LearningCoreAudioWithSwift2.0
重要的是要了解自己在做什么。 其他所有內容都應該是不言自明的,不應涉及過多的工作。 希望這可以幫助...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.