1d211a19db
- make it work with 24-bit formats (as with azalia and envy) - use the correct member of struct sio_par for the buffer size - check both poll(2) revents as well as calculated buffer positions to know when we can read/write data sun_driver.c: - make it work with 24-bit formats (as with azalia and envy) jackd/engine.c: - don't spam error messages every time a client quits add README.OpenBSD |
||
---|---|---|
.. | ||
Makefile.am | ||
README.OpenBSD | ||
sndio_driver.c | ||
sndio_driver.h |
In this package of jackd, the 'dummy', 'sun' and 'sndio' drivers are supported. The 'dummy' driver is mostly useful for testing jackd itself. The 'sun' driver uses the audio(4) subsystem. The 'sndio' driver uses sndio(7). To start jackd with default driver parameters, use the command 'jackd -d <driver>'. By default, jackd runs in full-duplex mode with a relatively low latency. This may not be exactly what you want, and it may not be possible with all hardware. Therefore, some configuration options may be necessary to effectively use jackd. The 'sun' and 'sndio' drivers use mostly the same configuration options, which can be viewed with the command 'jackd -d <driver> -h'. Below are some tips and caveats to consider when using jackd on OpenBSD. Some audio devices do not support full-duplex operation. If jackd errors out on startup with a message about opening a full-duplex device, this is likely the problem. If the device only supports playback, then the driver needs to be configured to use 0 input channels. For example 'jackd -d <driver> -i 0' starts jackd in half-duplex play-only mode. By default jackd uses 2 periods (blocks) of 1024 frames each. This means there will be at most 2048 frames in the playback buffer. Some slower or loaded machines may not be able to keep the playback buffer from underrunning with these conditions. Jackd is designed to use 2 periods, so if underruns are observed, it is best to first increase the period size with the driver's -p option. The period size should be a power of two. The number of periods can be increased with the -n option. For example, 'jackd -d <driver> -p 2048 -n 3'. The 'sun' driver uses 48000 and the sndio driver uses 44100 Hz sampling rates by default. Some devices may not support the default sampe rate. Or it may be that most of the audio that will pass through jackd is based on a different sample rate. Avoiding sample rate conversion will use less CPU cycles and perserve audio quality. The -r option can be used to change the sampling rate as in 'jackd -d sun -r 44100'. The realtime option -R is commonly used on other operating systems. However, this option is inconsequential on OpenBSD. The 'sun' driver reports xruns on stdout. The 'sndio' driver does not. The 'sndio' driver is more likely to continue to be developed. Unless you need xrun reporting, the 'sndio' driver is recommended. It is possible to run jackd on top of aucat(1) with the 'sndio' driver. However, there are some caveats. First, the aucat server must be running at a higher than default scheduling priority. aucat(1) has an example for doing this with renice(8). Secondly, it is a very good idea to make sure the sample rates used for jackd and aucat are the same. Third, period sizes in aucat and jackd must be the same. Finally, jackd must be configured to use at least 4 periods. The following command sequence starts aucat and jackd such that they can work together. $ aucat -l -b 512 -z 256 -r 48000 $ sudo renice -10 `pgrep -x aucat` $ jackd -d sndio -p 256 -n 4 -r 48000 There is no MIDI driver for OpenBSD in jackd.