Hum, i do not understand your "correct way". I give a simple example and you propose something complicated. But of course, it is possible to add 2 seconds of "muted wave buffer" (buffer with data = 0) in uos.
using sleep(2000) is the worst part of the code. I can understand sleep for command-line example, but not GUI. Just very bad practice.
Adding a "mute buffer" vs doing a time delay (using sleep or actual timer) - is a matter of required accuracy.
If it's fine to have +2 seconds offsets - then using the timer offset the way to go, since it's easier.
But if a better accuracy is needed, "mute buffer" is necessary.
Also i do not understand why you propose OpenAl. It seems to me that OpenAl is a library to apply 3 D effect on sound, like OpenGl does for graphic...
Apart from 3d effects, that I guess used in very rare cases, OpenAL is an awesome cross-platform audio API over a system-native APIs.