使用 JACK 和 emu10k1/emu10k2 实现低延迟、多通道音频¶
本文档是关于如何使用基于 emu10k1 的设备和 JACK 实现低延迟、多通道录音功能的指南。我最近为使 Linux 用户能够使用其硬件的全部功能所做的所有工作都受到了 kX 项目的启发。没有他们的工作,我永远不会发现这个硬件的真正力量。
- 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 毫秒)甚至 32 帧(0.66 毫秒)应该都可以正常工作。
配置比 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 总线到物理输出的映射在 Sound Blaster Live 混音器 / 默认 DSP 代码 (或 Sound Blaster 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 结合使用的方法