In this callback, you call ::soundio_outstream_begin_write and
::soundio_outstream_end_write as many times as necessary to write
at minimum frame_count_min frames and at maximum frame_count_max
frames. frame_count_max will always be greater than 0. Note that you
should write as many frames as you can; frame_count_min might be 0 and
you can still get a buffer underflow if you always write
frame_count_min frames.
For Dummy, ALSA, and PulseAudio, frame_count_min will be 0. For JACK
and CoreAudio frame_count_min will be equal to frame_count_max.
The code in the supplied function must be suitable for real-time
execution. That means that it cannot call functions that might block
for a long time. This includes all I/O functions (disk, TTY, network),
malloc, free, printf, pthread_mutex_lock, sleep, wait, poll, select,
pthread_join, pthread_cond_wait, etc.
In this callback, you call ::soundio_outstream_begin_write and ::soundio_outstream_end_write as many times as necessary to write at minimum frame_count_min frames and at maximum frame_count_max frames. frame_count_max will always be greater than 0. Note that you should write as many frames as you can; frame_count_min might be 0 and you can still get a buffer underflow if you always write frame_count_min frames.
For Dummy, ALSA, and PulseAudio, frame_count_min will be 0. For JACK and CoreAudio frame_count_min will be equal to frame_count_max.
The code in the supplied function must be suitable for real-time execution. That means that it cannot call functions that might block for a long time. This includes all I/O functions (disk, TTY, network), malloc, free, printf, pthread_mutex_lock, sleep, wait, poll, select, pthread_join, pthread_cond_wait, etc.