Jump to content


music program timing troubles


6 replies to this topic

#1 rouncer

    Senior Member

  • Members
  • PipPipPipPip
  • 2758 posts

Posted 22 March 2006 - 07:47 PM

im writing a tracker program, but i cant get the ticks to play
straight.
have you done this before, can you help me?
Sleep() doesnt seem to work it gets delays in it.
i tried QueryPerformanceCounter() and stuck it in the main loop
but even that gets delays in it.
any help would be appreciated.

#2 rouncer

    Senior Member

  • Members
  • PipPipPipPip
  • 2758 posts

Posted 22 March 2006 - 11:20 PM

yeh i worked it out, you dont use sleep, what you do is

while((double)(end-start)/frequency.QuadPart<(double)frame*program_time)
{
QueryPerformanceCounter(&counter);
end=counter.QuadPart;
}

which basicly means you hog cpu time so queryperformance counter
can return exactly on time. you just time the loop to how fast your
song is playing.

and thats how... phew.

#3 Reedbeta

    DevMaster Staff

  • Administrators
  • 5344 posts
  • LocationSanta Clara, CA

Posted 22 March 2006 - 11:22 PM

Accurate timing is one of the thorniest issues in software development...it's a headache for running game update loops, too. QueryPerformanceCounter is only good for measuring small time intervals, over large ones it is inaccurate and gets continually reset, causing (sometimes negative) jumps. I find the most reliable timer is timeGetTime, with timeStartPeriod and timeEndPeriod. But it still isn't perfect. On Intel computers there is also the rdtsc instruction, but it comes with its own can of worms (not the least of which is that it isn't portable).
reedbeta.com - developer blog, OpenGL demos, and other projects

#4 Reedbeta

    DevMaster Staff

  • Administrators
  • 5344 posts
  • LocationSanta Clara, CA

Posted 22 March 2006 - 11:22 PM

Ahh, you figured it out while I was typing =)

Glad you got it to work, though it's still not such a great idea to hog the CPU like that.
reedbeta.com - developer blog, OpenGL demos, and other projects

#5 L1zb3th

    New Member

  • Members
  • PipPip
  • 10 posts

Posted 06 April 2007 - 04:19 AM

Sleep is usefull...
but, it receives ms or miliseconds ...
1000 ms = 1 s
check that :P

#6 SamuraiCrow

    Senior Member

  • Members
  • PipPipPipPip
  • 459 posts

Posted 06 April 2007 - 04:54 PM

I don't know about the PC or DirectSound but on the Amiga platform there is a call-back built in to the AHI drivers and the old-style Trackers used to run on a timer-based interrupt. The oldest Trackers used Amiga's video-blank interrupt but that meant that the tempo playback was tied to the vertical scan rate of the graphics chips.

#7 fhein

    New Member

  • Members
  • PipPip
  • 10 posts

Posted 19 September 2007 - 02:53 PM

Maybe you could create a custom mixer with a few seconds buffer and stream from that? Should give pretty good timing if possible. Haven't started with audio programming myself yet, but I think it sounds like a suitable solution for a tracker kind of program.

Ahh, Amiga.. Now that's a fine computer :)





1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users