Nathaniel Virgo wrote: > On a related note, is there a JACK configuration HOWTO anywhere? > Things I am currently mystified by include the meaning of the phrase > "periods per buffer" and how to tell whether my (cheapo laptop > internal) soundcard should work better at 44100Hz or 48000. Hi Nathaniel: You might want to read the recent traffic on this list in response to my query re: JACK options and their significance to the normal user. Lots of helpful stuff there. I've completed an article about JACK from the user's perspective, hopefully it will run soon in an upcoming issue of the Linux Journal. Meanwhile here's the relevant section dealing with JACK's run-time options: <begin_text> When you first meet JACK you may be confused by some of its options, so I've prepared a summary of those options with user-level descriptions. First we'll look at the parameter settings. -R, --realtime Starts JACK with realtime scheduler priority. Normally you will want this option activated, but be aware that it functions only if you have root status or are running a kernel that grants such status to a normal user. Kernels from AGNULA/Demudi and Planet CCRMA are prepared for such status, but any kernel can be patched and modified for low-latency, with root-user capabilities enabled. See the Resources for this article for information on configuring and building a low-latency Linux kernel. I asked members of the Linux Audio Users mail list whether there might be good reasons to *not* use the realtime option. I learned that JACK is still useful on systems without realtime capability, hence the option. Additionally, realtime capabilities might be unwanted while testing an application whose realtime performance needed debugged. -m, --no-mlock Signals JACK to keep memory unlocked. Paul Davis explained that it could be useful when running JACK in realtime on a system whose physical RAM is being consumed by JACK and its clients. Generally speaking, most users will not need to activate this option. -u, --unlock Unlocks memory claimed by graphics toolkits (GTK, QT, FLTK, WINE). Again, this option is useful for machines with low amounts of memory (physical RAM), but it is especially useful for users running VST/VSTi plugins and other WINE-dependent applications. In some cases such applications may not run at all until this option is selected. You might also want to unlock memory held by GTK or QT if you're running many graphics-intensive applications in a memory-hungry environment. -s, --softmode Ignores xruns reported by an ALSA driver, making JACK less likely to disconnect unresponsive ports when run without realtime status. You might select this option to avoid too-copious error reports. -S, --shorts Forces JACK's internal processing to 16 bits instead of the default 32 bits. Bit resolution affects dynamics resolution, so normally you would prefer the default value. JACK attempts to set the sample bit resolution to 32, 24, and 16, in that order, reporting success or failure with each attempt. Users with cards known to work optimally at 16 bits may want to use this option to avoid the error reports. Clemens Ladisch also noted that some audio devices offer higher sample rates or more I/O channels only at the lower sample rate, due to audio chipsets with limited bandwidth. -H, --hwmon Enables hardware monitoring of ALSA's capture ports, providing zero-latency monitoring of audio input. Requires hardware and device driver support. The jackd man page says this about hardware monitoring : "When enabled, requests to monitor capture ports will be satisfied by creating a direct signal path between audio interface input and output connectors, with no processing by the host computer at all. This offers the lowest possible latency for the monitored signal." Note that this option is currently an ALSA-only option available for the RME Hammerfall cards and cards based on the ICE1712 chipset (M-Audio Delta 44/66/1010, Terratec, others). The ALSA soundcard database lists cards that support hardware monitoring, see this article's Resources for a link to the database. -M, --hwmeter Another ALSA-only option. Turns on hardware metering if your soundcard supports it. -z, --dither Dithering is a process that minimizes unwanted side-effects of reducing an audio file's bit-depth. Low-level noise is mixed into a signal to randomize digital audio quantization errors, turning audible and unpleasant digital distortion into something more closely resembling analog noise. According to Paul Davis, dithering is especially helpful when your soundcard's output is less than 24-bit resolution and you run JACK at the hardware's real sample rate. Paul further noted that its a good idea to choose dithering for almost any consumer-grade hardware, though he added that the sonic difference might not be very noticeable in the speaker systems usually associated with consumer-grade soundcards. -P, --realtime-priority Sets the realtime scheduler priority. Normally you can leave this setting at its default value of 0. -p, --port-max Sets the maximum number of JACK output ports. The default of 128 should be sufficient for most users, but up to 512 ports can be made available. -d, --driver Select hardware driver. In fact, you're selecting the audio system back-end with this option. Currently supported systems include ALSA, OSS/Linux, CoreAudio, PortAudio, and a dummy system (useful for testing). Most Linux users will want to choose either ALSA or OSS. -r, --rate Sets JACK's sample rate. The default is set to 48000 Hz, but you may need to experiment to determine the best sample rate for your system. Lower-powered systems may find it necessary to bring down the sample rate to improve performance, but generally you want a rate of at least 44100 Hz for high-quality sound. -p, --period Specifies the number of frames between JACK's process() function calls. The default value is 1024, but for low latency you should set -p as low as possible without producing xruns. Larger periods yield higher latency, but also make xruns less likely, so you may have to experiment to find the optimal setting for your hardware. Incidentally, 'man jackd' tells us that JACK's input latency (measured in seconds) is --period divided by --rate. -i, --inchannels -o, --outchannels These settings determine the number of I/O channels. The default is the maximum number supported by your hardware, so for most purposes you can just use the default values. -n, --nperiods Specifies the number of periods in the hardware buffer. The default value is 2. The period size (-p) times --nperiods times four will equal the JACK buffer size in bytes. By the way, JACK's output latency (again in seconds) is the number of periods (-n) times the period size (-p) divided by the sample rate (-r). -C, --capture -P, --playback -D, --duplex Set JACK to record-only, playback-only, or full duplex status (simultaneous play and record). This setting can be very important: Some cards will simply not perform well in duplex mode but work quite well in the simplex modes. For example, on my laptop JACK will report a steady stream of xruns if I run the CS4232 chipset in duplex mode. The xruns disappear if JACK is set for either record-only or playback-only mode. When trying to find the best settings for lowest latency and fewest xruns you'll want to focus your adjustments on the period size, the sample rate, and the number of periods. You may need to experiment to find the best overall settings. <end_text> I hope that helps a little. Best, dp