2015-09-22 15 views
1

我正在開發iOS應用程序。該應用旨在模擬助聽器。它應該能夠先錄製聲音,然後修改聲音(如濾波或頻譜增強),並在最後播放。整個過程應該及時進行,這意味着記錄和回放之間的延遲應該在1秒之內。我已閱讀aurioTouch的示例代碼,並發現在錄製時會調用回調函數。我可以修改回調中的聲音嗎?我擔心的是修改過程有點費時(比如0.3秒)。我可以在回調中做到嗎?如果不是,爲什麼?我該怎麼做?如何同時錄製,修改和回放?

+0

@abbood您能幫我嗎? –

回答

1

你可能有一個錯字在你的問題「記錄和回放之間的延遲應該是一秒鐘之內」(一秒是音頻應用非常高的等待時間......尤其是對的助聽器。脣動和音頻是出路同步)

不經任何處理,你可以根據你如何設置RemoteIO得到麥克風入爲5ms到10ms範圍揚聲器/耳機一段音頻。

您的系統非常簡單。這只是一個環回系統,但你想在它們之間插入一些信號處理。 (如eq或其他增強功能,如背景噪聲消除,回聲抑制等)。

你需要決定是否要手動做信號處理,或者如果你想使用目前的iOS提供的可用信號處理的音頻單元。如果您想使用ios中的現有音頻單元,則可以創建一個音頻圖,其中包含以下項目 - 遠程io(連接輸入總線1上的麥克風,連接輸出總線1上的揚聲器) - 音頻單元效果

如果你想自己編寫所有DSP的東西,你只需要一個remoteIO單元。
要回答你的問題「我可以修改回調中的聲音嗎」

是的 - 你可以在麥克風的回調中編寫你的信號處理代碼。 但是,在下一次回調發生之前,您必須完成所有處理。如果您的音頻處理時間過長,則需要通過使用AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration,...)建議新的緩衝區持續時間來增加回調時間(從而增加更多的延遲)...

您提到您的處理需要很長時間「大約0.3s)「
這是300ms,在音頻世界中絕對不被認爲是」接近實時「或」低延遲「。但是,您給出的測量是開放式的,因爲您沒有說明處理了多少音頻?需要0.3s來處理5秒的音頻嗎?處理0.1s音頻需要0.3s嗎?

+0

非常感謝您的詳細回覆!有一些觀點我不太滿意得到,但我現在還沒有得到我的Mac,我會問你以後:) –

+0

我目前的緩衝區持續時間是0.1秒,播放是間歇性的。我懷疑這是因爲DSP過程有時會超過0.1s。我嘗試通過PreferredIOBufferDuration設置緩衝區持續時間,但0.1s似乎是最大值。如果將其設置爲大於0.1s,則緩衝區持續時間仍爲0.1s。它可以設置爲大於0.1s嗎?還是我必須優化DSP算法? –

+0

另一個問題是,回放中似乎有一些點擊聲音,點擊的頻率等於回調函數的頻率。如果我移除DSP部分,只播放記錄,點擊聲消失。我也嘗試用一些簡單快速的算法替換DSP(如隨機更改輸出音量),再次出現點擊。你有什麼線索我做錯了什麼? –