Takashi Iwai | e7030c9 | 2016-11-10 16:31:07 +0100 | [diff] [blame] | 1 | ================================================================= |
| 2 | Low latency, multichannel audio with JACK and the emu10k1/emu10k2 |
| 3 | ================================================================= |
| 4 | |
Lee Revell | 9c220a3 | 2005-03-30 14:04:34 +0200 | [diff] [blame] | 5 | This document is a guide to using the emu10k1 based devices with JACK for low |
| 6 | latency, multichannel recording functionality. All of my recent work to allow |
| 7 | Linux users to use the full capabilities of their hardware has been inspired |
| 8 | by the kX Project. Without their work I never would have discovered the true |
| 9 | power of this hardware. |
| 10 | |
| 11 | http://www.kxproject.com |
| 12 | - Lee Revell, 2005.03.30 |
| 13 | |
Lee Revell | 9c220a3 | 2005-03-30 14:04:34 +0200 | [diff] [blame] | 14 | |
| 15 | Until recently, emu10k1 users on Linux did not have access to the same low |
| 16 | latency, multichannel features offered by the "kX ASIO" feature of their |
| 17 | Windows driver. As of ALSA 1.0.9 this is no more! |
| 18 | |
| 19 | For those unfamiliar with kX ASIO, this consists of 16 capture and 16 playback |
| 20 | channels. With a post 2.6.9 Linux kernel, latencies down to 64 (1.33 ms) or |
| 21 | even 32 (0.66ms) frames should work well. |
| 22 | |
| 23 | The configuration is slightly more involved than on Windows, as you have to |
| 24 | select the correct device for JACK to use. Actually, for qjackctl users it's |
| 25 | fairly self explanatory - select Duplex, then for capture and playback select |
| 26 | the multichannel devices, set the in and out channels to 16, and the sample |
| 27 | rate to 48000Hz. The command line looks like this: |
Takashi Iwai | e7030c9 | 2016-11-10 16:31:07 +0100 | [diff] [blame] | 28 | :: |
Lee Revell | 9c220a3 | 2005-03-30 14:04:34 +0200 | [diff] [blame] | 29 | |
Takashi Iwai | e7030c9 | 2016-11-10 16:31:07 +0100 | [diff] [blame] | 30 | /usr/local/bin/jackd -R -dalsa -r48000 -p64 -n2 -D -Chw:0,2 -Phw:0,3 -S |
Lee Revell | 9c220a3 | 2005-03-30 14:04:34 +0200 | [diff] [blame] | 31 | |
| 32 | This will give you 16 input ports and 16 output ports. |
| 33 | |
| 34 | The 16 output ports map onto the 16 FX buses (or the first 16 of 64, for the |
| 35 | Audigy). The mapping from FX bus to physical output is described in |
Takashi Iwai | e7030c9 | 2016-11-10 16:31:07 +0100 | [diff] [blame] | 36 | sb-live-mixer.rst (or audigy-mixer.rst). |
Lee Revell | 9c220a3 | 2005-03-30 14:04:34 +0200 | [diff] [blame] | 37 | |
| 38 | The 16 input ports are connected to the 16 physical inputs. Contrary to |
| 39 | popular belief, all emu10k1 cards are multichannel cards. Which of these |
| 40 | input channels have physical inputs connected to them depends on the card |
| 41 | model. Trial and error is highly recommended; the pinout diagrams |
| 42 | for the card have been reverse engineered by some enterprising kX users and are |
| 43 | available on the internet. Meterbridge is helpful here, and the kX forums are |
| 44 | packed with useful information. |
| 45 | |
| 46 | Each input port will either correspond to a digital (SPDIF) input, an analog |
| 47 | input, or nothing. The one exception is the SBLive! 5.1. On these devices, |
| 48 | the second and third input ports are wired to the center/LFE output. You will |
| 49 | still see 16 capture channels, but only 14 are available for recording inputs. |
| 50 | |
| 51 | This chart, borrowed from kxfxlib/da_asio51.cpp, describes the mapping of JACK |
| 52 | ports to FXBUS2 (multitrack recording input) and EXTOUT (physical output) |
| 53 | channels. |
| 54 | |
Takashi Iwai | e7030c9 | 2016-11-10 16:31:07 +0100 | [diff] [blame] | 55 | JACK (& ASIO) mappings on 10k1 5.1 SBLive cards: |
| 56 | |
| 57 | ============== ======== ============ |
Lee Revell | 9c220a3 | 2005-03-30 14:04:34 +0200 | [diff] [blame] | 58 | JACK Epilog FXBUS2(nr) |
Takashi Iwai | e7030c9 | 2016-11-10 16:31:07 +0100 | [diff] [blame] | 59 | ============== ======== ============ |
Lee Revell | 9c220a3 | 2005-03-30 14:04:34 +0200 | [diff] [blame] | 60 | capture_1 asio14 FXBUS2(0xe) |
| 61 | capture_2 asio15 FXBUS2(0xf) |
| 62 | capture_3 asio0 FXBUS2(0x0) |
| 63 | ~capture_4 Center EXTOUT(0x11) // mapped to by Center |
| 64 | ~capture_5 LFE EXTOUT(0x12) // mapped to by LFE |
| 65 | capture_6 asio3 FXBUS2(0x3) |
| 66 | capture_7 asio4 FXBUS2(0x4) |
| 67 | capture_8 asio5 FXBUS2(0x5) |
| 68 | capture_9 asio6 FXBUS2(0x6) |
| 69 | capture_10 asio7 FXBUS2(0x7) |
| 70 | capture_11 asio8 FXBUS2(0x8) |
| 71 | capture_12 asio9 FXBUS2(0x9) |
| 72 | capture_13 asio10 FXBUS2(0xa) |
| 73 | capture_14 asio11 FXBUS2(0xb) |
| 74 | capture_15 asio12 FXBUS2(0xc) |
| 75 | capture_16 asio13 FXBUS2(0xd) |
Takashi Iwai | e7030c9 | 2016-11-10 16:31:07 +0100 | [diff] [blame] | 76 | ============== ======== ============ |
Lee Revell | 9c220a3 | 2005-03-30 14:04:34 +0200 | [diff] [blame] | 77 | |
| 78 | TODO: describe use of ld10k1/qlo10k1 in conjunction with JACK |