Now that my audio pipe is a lot cleaner, I thought it might be a good time to spend some time looking at latency and performance for the beagleboard. For sequencing internally, latency isn’t too much of an issue but if I want to turn it into a playable synth, it becomes important.
The good news is that the internal audio supports really low latency, even if it is not a real-time kernel. The alsa wrapper I’m using supports settings as low as 16 samples which is a third of a millisecond !
Of course, depending on how heavy the programmed synth is, you may not be able to use such a low setting because of the overhead of computing a lot of small buffer is bigger than computing one big single buffer. My current setup has still 2 oscillators, 2 filters and an envelope – which as such isn’t that much – but the DFM filters are pretty heavy to calculate.
Here’s the number of voice that can run without crackling, depending on the buffer size:
8 samples – 0 voice
16 samples – 1 voice
32 samples – 3 voices
64 samples – 7 voices
128 samples – 9 voices
256 samples – 11 voices
All in all, it’s very encouraging. Even 64 samples only lead to 1.5 millisecond of latency and could already run 7 voices which might be completely acceptable for a performance synth while higher sample buffer like 256 gives plenty of room for a sequencer type application.