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