簡體   English   中英

C ++中的實時音頻處理

[英]real time audio processing in C++

我想生產一種軟件,該軟件可以從外部音頻接口(Focusrite Scarlett 2i2)讀取原始音頻,並在返回到接口進行播放之前用C ++處理它。 我目前正在運行Windows 8,並且想知道如何以最小的延遲做到這一點?

我花了一段時間研究(增強)ASIO,但是文檔似乎相當差。 我也一直在考慮OpenCL,但有人告訴我OpenCL很可能具有更高的延遲。 理想情況下,我希望能夠直接訪問Focusrite驅動程序。

很抱歉,這是一個懸而未決的問題,但是我一直在尋找有關音頻編程的教學材料時遇到一些麻煩,而不僅僅是在第三方插件設計套件(例如RackAFX)提供音頻時操縱音頻。 如果有人能推薦這樣的低水平內容閱讀,我也將不勝感激。

通過直接與Focuswrite ASIO驅動程序進行通信,您可以獲得非常低的延遲(這與boost ASIO完全不同)。 要使用此工具,您需要從Steinberg注冊並下載ASIO SDK。 在API下載中,有一個名為hostsample的Visual C ++示例項目,這是一個很好的起點,並且有很多關於ASIO使用的緩沖過程的很好的文檔。

ASIO使用雙重緩沖。 您的應用程序可以在驅動程序的限制范圍內選擇緩沖區大小。 對於每個輸入通道和每個輸出通道,將創建2個相同大小的緩沖區。 當驅動程序從一組緩沖區播放並向其中記錄時,您的程序正在從另一組緩沖區讀取和寫入。 如果您的程序正在執行簡單的環回,那么它將在記錄后有權訪問輸入的1個緩沖時間段,將直接寫入輸出緩沖區,該緩沖區將在下一個周期播放,因此會有2個緩沖時間段的延遲。 您將需要進行實驗,以找到可以容忍的最小緩沖區大小,而不會出現毛刺,這將使您的延遲最小。 當然,信號處理代碼也需要進行充分優化以跟上潮流。 並非聞所未聞的是64個樣本(1.3 ms @ 48kHz)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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