I'm writing what I found regarding OpenAL issues of Mac OS X and wish it will be hints for somebody. I couldn't understand how to loop sound. Certainly the loop flag is set to the sound source but the program looks it unqueue the buffers which are processed, and then delete them. Anyway, it causes an error on Mac OS X. If you set the loop flag, you can't unqueue the buffers. This is the reason for the error of alSourceUnqueueBuffers() in vsrc_deque_finished_bufs(). In this case, avoidance is quite simple. I mean, we don't need to call alSourceUnqueueBuffers() when the loop flag is set. A second issue is big. It may require to change the sound manager. Apple's OpenAL (on top of Core Audio) is always running in another thread. Stop Sound command (issued by alSourceStop) is queued in the internal queue. This means we can't delete the buffer associated the sound source which we stopped just after calling alSourceStop. There is a delay to stop sound really. The sound manager uses fire-and-forget style. This doesn't match Apple's OpenAL.