簡體   English   中英

使用哪種方法實時讀取音頻樣本

[英]Which approach to use for reading audio samples in real-time

對於特定項目,我需要:

  1. 從麥克風或音頻文件訪問單個音頻樣本,
  2. 每隔250毫秒左右從這些值中提取一個屬性,然后
  3. 在屏幕上實時顯示該屬性(最多可以延遲100毫秒)。

我研究過各種方法-音頻單元,音頻圖,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM