I'm working on an NES emulator, and having problems with syncing the sound.. I'm using the Perf-timer to time the framerate, but it seems I'm still producing the audio too fast.
The sourcedataline buffer will very quickly fill up, and introduce considerable lag from when an event takes place in the game until it's eventually reflected in the music/sound fx.
The amount of samples produced each frame is constant, so it seems I'm producing a little bit too much. The problem now is writing the produced samples to the line without the buffer emptying, and also without writing too much.
What would be the best way to sync this? I've tried adjusting the sleep time between frames, and also sleep some extra when too many frames are produced, but it seems that no matter how I do it, I either get lots of buffer underflows, or a horrible lag..
I guess the real problem is, I don't know how much data is in the buffer at any given moment. The method for getting the available bytes before blocking doesn't seem to be updated frequently enough, so I can't rely on it. Is there any solution to this? Any sound package I can use that is better at this?
Any help will be appreciated :-)