使用JACK和emu10k1/emu10k2實現低延遲、多聲道音訊

本文件旨在指導如何使用基於emu10k1的裝置與JACK一起實現低延遲、多聲道錄音功能。我最近所做的一切工作,都是為了讓Linux使用者能夠充分利用其硬體的全部功能,這都受到了kX Project的啟發。如果沒有他們的工作,我永遠不會發現這種硬體的真正力量。

http://www.kxproject.com
  • Lee Revell, 2005.03.30

直到最近,Linux上的emu10k1使用者還無法獲得與其Windows驅動程式的“kX ASIO”功能相同的低延遲、多聲道功能。從ALSA 1.0.9開始,情況不再如此!

對於那些不熟悉kX ASIO的人來說,它包含16個捕獲和16個播放通道。對於2.6.9之後的Linux核心,低至64(1.33 ms)甚至32(0.66ms)幀的延遲應該可以很好地工作。

配置比Windows上稍微複雜一些,因為您必須選擇正確的裝置供JACK使用。實際上,對於qjackctl使用者來說,這非常容易理解 - 選擇Duplex,然後為捕獲和播放選擇多聲道裝置,將輸入和輸出通道設定為16,並將取樣率設定為48000Hz。命令列如下所示

/usr/local/bin/jackd -R -dalsa -r48000 -p64 -n2 -D -Chw:0,2 -Phw:0,3 -S

這將為您提供16個輸入埠和16個輸出埠。

這16個輸出埠對映到16個FX匯流排(或Audigy的64箇中的前16個)。從FX匯流排到物理輸出的對映在聲霸卡 Live 混音器/預設DSP程式碼(或聲霸卡 Audigy 混音器/預設DSP程式碼)中描述。

這16個輸入埠連線到16個物理輸入。與普遍的看法相反,所有emu10k1卡都是多聲道卡。這些輸入通道中哪些連線了物理輸入取決於卡型號。強烈建議進行試錯;該卡的引腳圖已被一些有進取心的kX使用者逆向工程,並且可以在網際網路上找到。Meterbridge在這裡很有用,並且kX論壇上擠滿了有用的資訊。

每個輸入埠將對應於一個數字(SPDIF)輸入、一個模擬輸入或什麼都沒有。唯一的例外是SBLive! 5.1。在這些裝置上,第二個和第三個輸入埠連線到中央/LFE輸出。您仍然會看到16個捕獲通道,但只有14個可用於錄製輸入。

此圖表借用了kxfxlib/da_asio51.cpp,描述了JACK埠到FXBUS2(多軌錄音輸入)和EXTOUT(物理輸出)通道的對映。

10k1 5.1 SBLive卡上的JACK (& ASIO) 對映

JACK

後記

FXBUS2(nr)

capture_1

asio14

FXBUS2(0xe)

capture_2

asio15

FXBUS2(0xf)

capture_3

asio0

FXBUS2(0x0)

~capture_4

中央

EXTOUT(0x11) // 由中央對映到

~capture_5

LFE

EXTOUT(0x12) // 由LFE對映到

capture_6

asio3

FXBUS2(0x3)

capture_7

asio4

FXBUS2(0x4)

capture_8

asio5

FXBUS2(0x5)

capture_9

asio6

FXBUS2(0x6)

capture_10

asio7

FXBUS2(0x7)

capture_11

asio8

FXBUS2(0x8)

capture_12

asio9

FXBUS2(0x9)

capture_13

asio10

FXBUS2(0xa)

capture_14

asio11

FXBUS2(0xb)

capture_15

asio12

FXBUS2(0xc)

capture_16

asio13

FXBUS2(0xd)

TODO:描述ld10k1/qlo10k1與JACK結合使用的情況