使用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结合使用的情况