Ultimately i think with ALSA we could do away with the concept of calling 
update_jsound() in the game loop and instead use asyncrosnous mode and use 
update_jsound() as my callback function? Although i'd need to get ALSA to call 
update_jsound() when we are in our last period, so we can write another one ahead... 
any ideas?  

   In the meantime can i not use  snd_pcm_avail_update() to determine if we need to 
write a period ahead?;

  avail = snd_pcm_avail_update(pcm_handle);
  if (avail >= (buffer_size - period_size)){ 
      mix_sound(MIXBUFFER, period_size);   // mix a period wirth of channels
      ret = snd_pcm_writen(pcm_handle, (void *) &MIXBUFFER, period_size); // write it
  }

  


Many Thanks,
James 


On Sun, 11 Jan 2004 13:28:57 -0500
Paul Davis <[EMAIL PROTECTED]> wrote:

> >   I am currently looking into rewriting our current OSS sound routines to nat
> >ive ALSA, as it seems OSS will invariably be phased out now that the ALSA driv
> >er is distrubuted with the Linux kernel, plus ALSA seems to have a great numbe
> >r of benefits for us. 
> >
> >  Our current sound routines perform software sound sample mixing for use in g
> >ames. All the  mixing and transfers happen in a non-blocking function called u
> >pdate_jsound() which we call every 1/60th of a second in our main game loop. W
> >e find the total size of the hardware ring buffer and use MMAP writes to it. W
> >e effectively break the ring buffer into 1024 byte "fragments", and always kee
> >p one whole fragment ahead to ensure no underruns. We do this by the follwing:
> 
> best method:
> -----------
> 1) set the avail_min s/w parameter to the period size
> 2) call poll on the file descriptor(s) returned from
>    snd_pcm_poll_descriptors(). when you return from poll,
>    you know you have at least one period of data ready (possibly
>    more, so you need to check).
> 3) use snd_pcm_mmap_*() to handle mmap access. ALSA
>    doesn't provide simple access to mmap'ped buffers 
>    because this could not work for some classes of
>    ALSA devices.
> 
> survey the source of JACK (jackit.sf.net) for some ideas.
> 
> however, that probably won't work so well for you it doesn't integrate
> into your "game loop". for that, use snd_pcm_delay() to find out the
> gap between the application (s/w) pointer and the hardware pointer,
> then use the snd_pcm_mmap_*() calls from there.
> 
> its a lot more complex under ALSA. but thats because ALSA provides a
> lot of things that OSS does not, and doing everything via the simple
> system call interface that OSS uses makes it impossible to provide
> them "appropriately".
> 
> if you were writing software for musicians and studios rather than
> games and consumer media apps, check out JACK for a different, simpler
> and more powerful API (that uses ALSA internally).
> 
> --p
> 


-------------------------------------------------------
This SF.net email is sponsored by: Perforce Software.
Perforce is the Fast Software Configuration Management System offering
advanced branching capabilities and atomic changes on 50+ platforms.
Free Eval! http://www.perforce.com/perforce/loadprog.html
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel

Reply via email to