Hey,

I posted this a few weeks ago, here is the original thread:

http://eca.cx/lad/2004/06/0046.html

After doing some research it seems that the issue is actually with
JACK.  The SBLive does not allow the hardware capture buffer to be set
to any values other than these:

static unsigned int capture_period_sizes[31] = { 
        384, 448, 512, 640, 
        384*2, 448*2, 512*2, 640*2, 
        384*4, 448*4, 512*4, 640*4, 
        384*8, 448*8, 512*8, 640*8, 
        384*16, 448*16, 512*16, 640*16, 
        384*32, 448*32, 512*32, 640*32, 
        384*64, 448*64, 512*64, 640*64, 
        384*128,448*128,512*128 
};

This limits the allowed period sizes you can set with
snd_pcm_hw_params_set_period_size; this is what jackd uses to set the
period size to whatever is specified in the -p argument.

However as far as I can tell, you should be able to use the ALSA
xfer_align parameter to set this to, say, 128.  Then, you set the
playback period size to 128, and whenever you get an interrupt from the
playback buffer running low you write the next 128 frames to the output
device and read the next 128 from the capture buffer.

Since the different sized hardware buffers for capture and playback are
a quirk of the SBLive, I think this would require hardware-specific code
for the EMU10K1 in JACK, the way there is one for the Hammerfall, HDSP,
and ICE1712 already.

Would someone with more low level knowledge of JACK and ALSA care to
comment?

Lee


Reply via email to