Hi Antonio,
On Wednesday 04 February 2004 02.21, Antonio wrote:
Hi to all,
I'm tryng to tune my machine to get the lower latency I can get with my
hardware and linux of course.
I have an audigy player with a debian sarge with the audio apps take
from the unstable branch. I've recompiled the 2.4.22 kernel with
capabilities, low latency, preempted patches. I've compiled the source
packages of alsa 1.0.1 and jack 0.94.
I can obtain a clean sound playing timidity thru my midi keyboard using
3 fragments each of 256 (but only if I'm root, otherwise I get "can't
set sched_setscheduler" and the sound became dirty, maybe I have to
recompile it?)
This is normal, programs that wish to run with realtime-capabilities have to
have elevated capabilities. The easiest, and most insecure, way of achieving
this is to run the program directly as root. Another possibility to provide
this is to set the application SUID, e.g. add the +s 'bit' to the binary with
chmod. There are other (better?) ways also, using capabilities is probably
what most people suggest. I tend to stick to running the apps as root...not
the best way...
which means a pretty low latency for me.
Yep, should work pretty good.
On the other side I can run jack (jackstart works
fine) with a period
not less than 512,
The difference between the two is that timidity probably opens the soundcard
with write-only, whereas jack by default opens it read-write (full duplex).
The emu10k driver doesn't allow any setting below -p 512 if you run in full
duplex. If you change the output of jack so it only writes you could set it
lower here too.
I think this is a shortcoming of the driver. I've come to understand that the
emu10k1 is capable of much lower settings with the kx drivers in windows.
and I can't change the number of periods (neither
increase) that is 2 by default. For example:
$ jackstart -R -d alsa -d hw:0 -r 48000 -p 512 -n 1
[snip]
hw:0|hw:0|512|1|48000|0|0|nomon|swmeter|rt|32bit
control device hw:0
configuring for 48000Hz, period = 512 frames, buffer = 1 periods
Couldn't open hw:0 for 32bit samples trying 24bit instead
Couldn't open hw:0 for 24bit samples trying 16bit instead
ALSA: cannot set number of periods to 1 for capture
Very few cards/drivers support using only one buffer. If I understand things
correctly it means that whenever the buffer runs empty the program has to
rewrite the buffer _before_ the soundcard needs another single sample. Which
is a _very_ short time.
In practice this setup is unusable.
ALSA: cannot configure capture channel
cannot load driver module alsa
$
The same it is if I set number of periods higher than two (and that's
strange, can be a configuration issue?)
I routinely run with two buffers so it was a while since I tried...it should
work though...
- Is it an hardware/driver limit, can't I reach
the same latency that I
have with timidity with jack?
- Is it normal having 16 bit samples with my card?
I suppose. The original audigy was marketeded as a 24bit card in the
beginning, but I think they where forced to stop. I don't recall the
reasons... probably because it was really a marketing ploy...still a 16bit
card.
The last but not least, I have a general question about jack: if I a
stream pass twice or more times into jack (for example alsa in -> jack
rack -> ardour -> alsa out, 3 times) does the latency increases twice or
more, proportionally, or it is only related to the various apps latency?
Somebody more knowledgeable than me should answer that :)
Ok, I stop to bother anymore you with my (maybe stupid) doubts...
Not stupid at all. I hope my answers where correct and satisfactory.
Thanks for the attention, every answer will be greatly apprecciated.
Ciao, Antonio
/Robert