sol_hsa
One thing I'd like to point out about all these calculations..
You're assuming audio plays at exactly 48khz. You're assuming frame rate is exactly 60hz. You're also probably assuming the computer clock keeps exact time.
I almost decided not to respond because I smelled stench of internet arguments. Anyway, you are asuming lot about my implementations when I actually gave very general idea. Lot of that is maybe because I am not good with communicating my ideas.
Actually I am not assuming those things. But I made mistake of saying that I am not using play cursor. Actually my timing/updating is based on play cursor. When play cursor advances enough that signals for me that it is time to upload audio data for next write bucket. Maybe I should have skipped mentioning framerate. I am not asuming fixed framerate, maybe I should have used term like target framerate or something. Also when I mentioned word constant, I did not mean hardcoded, but something that can be deduced and calculated at start up.
Of course this not some final form of shipping quality audio engine, rather my way of thinking about it. But this way of updating audio buffer is for me easier to visualize in my head. I find it easier to think audio buffer at this granularity.