[alsa-devel] how to handle buffer underrun in a softsynth
alsa at henning-thielemann.de
Mon Nov 28 17:06:03 CET 2011
I have written a software synthesizer in Haskell that fetches MIDI events
from ALSA sequencer and plays the rendered signal via ALSA pcm. However it
cannot cope correctly with buffer underruns.
I tried to learn the correct way from the miniFMsynth example of
however this program floods my terminal with buffer underrun messages
without even being connected to any MIDI event source. This is independent
from how large I choose the BUFSIZE constant.
$ pkg-config --modversion alsa
Also, as far as I understand, that program allows to start notes only at
block boundaries. This way it can ignore the timestamps of the incoming
events. But this is crucial for me: I want to allow large blocksizes
and thus I must allow notes to start anywhere inside a block.
Now when I detect a buffer underrun on writing a block to an ALSA pcm
sink, I like to know the time gap in order to adjust the timestamps of the
incoming MIDI events.
My question in short is: Is there an example software synthesizer as
simple as miniFMsynth, that works (on my machine), supports note start
within a block and copes with buffer underruns in a reasonable way? If no
working example, is there some documentation on how this is intended to
Thank you for your help
More information about the Alsa-devel