[music-dsp] Boulez

David Olofson david at olofson.net
Sat Feb 25 18:07:06 EST 2012

On Saturday 25 February 2012, at 15.40.59, Adam Puckett 
<adotsdothmusic at gmail.com> wrote:
> Would it be possible to design a callback that dynamically filled the
> buffer as it was being called, or if the buffer didn't exist, create
> it and put one sample in it? that way there wouldn't be any "dropped
> calls" in the process. Or am I missing something?

Well, no matter how you go about implementing it, what it comes down to is 
that every sample MUST be in place when the sound card needs it. There's just 
no way around that. :-)

There is one "trick" along those lines, though, often used in video games: Use 
a shared memory DMA buffer of "substantial" size (half a second or so), and 
split the mixing code into two parts;

	1) one that mixes playing sounds/streams in somewhere
	   down the buffer, for minimal risk of drop-outs, and

	2) one that mixes in the initial parts of newly started
	   sounds from pretty the current DMA position (that is,
	   near zero latency), and down to where the other mixer
	   part will take over.

However, this won't really eliminate the drop-out problem. All it does is 
reduce the damage caused by scheduling latency peaks. Instead of the whole 
stream (soundscape, music, playing effects - everything) glitching or having a 
dubstep moment, the first few moments of newly started sounds will be lost, 
while the "old" streams keep playing as usual.

I'd say this method is just a complicated band-aid with lots of issues, and 
not even suitable for musical applications - but if all else fails...

//David Olofson - Consultant, Developer, Artist, Open Source Advocate

.--- Games, examples, libraries, scripting, sound, music, graphics ---.
|   http://consulting.olofson.net          http://olofsonarcade.com   |

More information about the music-dsp mailing list