Hello to all,
This is my first post at devmaster.net and I'm glad to be part of the
community.
I am working on project using openGL(win32) and I was wanted to
use openAL for the audio. My problem is with getting audio loops (.wav)
to playback in sync.
I've used GetClickCount() and timeGetTime() to attempt to keep track
of the musical measures. Since I'm still early in the development stage of
this project, I'm starting with 2 .wav files both at 80bpm. At 80bpm
the time between each quarter note is 750ms (1000ms*60sec)/80bpm.
My code is set to check if 750ms or more have expired and if so, I
increment a "quarter note" variable. If I've got more than 4 quarter notes
then I set the value to 1 and increment a "measure" variable. So it’s kind of
like a metronome or measure/beat counter common in sequencing software.
In my test, I count down 4 quarter notes and then start playing the first
loop. On the first down note of the ninth measure, the second loop starts
to play as well. So...I was doing this at work on my fat Dell XPS and
hurray!!!! not only did it work, but my measure/beat counter (which
is displayed on screen) seemed to be keeping "perfect" time. But when
I got home to test it out on my 1.5ghz p4 boo!!!!!!!! it was starting to
get out of sync by the 9th measure...which made me very very sad.
As I said I've tried using both GetClickCount() and timeGetTime().
GetClickCount() worked on the Dell at work, but timeGetTime()
did not, and of course neither worked at home. The only thing I have
not tried is QueryPerformanceCounter which I have not figured out how
to implement, and I have also seen many recommending to stay clear of it.
Ultimately, I'd like to have 1 or 2 major loops (about 8 measures each)
and then have maybe 10 or so other shorter sounds that would not loop but
would play back in sync on user events. Seems reasonable, but its
gonna sound pretty crappy if I have a bunch of 80bmp loops playing
at the same time out of sync.
I am hoping that someone can give me some advice on how to manage
a timing system accurate enough so when a new sound plays it can
do so on the next down beat or next measure. I'd be happy with that,
I won’t even worry about eighth or sixteenth notes.
Since I am still in early development, I would be open to options other
than openAL if there are other technologies better suited.
I hope that I'm not being over ambitious here. I'm optimistic that
it can be done, but I have run out of ideas.
Sorry for the book here.:blush:
Thanks in advance
Cheers
dudeBot
openAl timing woes (my first post)
Started by dudeBot, Jul 21 2006 11:46 PM
3 replies to this topic
#1
Posted 21 July 2006 - 11:46 PM
#2
Posted 22 July 2006 - 11:03 AM
DirectMusic might be what you need, one of its features is 'Schedule the timing of musical events with high precision'.
Check it out at http://msdn.microsof...directmusic.asp
Check it out at http://msdn.microsof...directmusic.asp
"Stupid bug! You go squish now!!" - Homer Simpson
#3
Posted 22 July 2006 - 11:35 AM
Thanks Kenneth,
Now I have good excuse not to help my wife rennovate the bathroom
this weekend.
I also downloaded fmod last night and an going to check it out.
I'm sure that there are others who may interested in doing something
similiar to my goals. I'll post the results of any successes I am met
with
Now I have good excuse not to help my wife rennovate the bathroom
this weekend.
I also downloaded fmod last night and an going to check it out.
I'm sure that there are others who may interested in doing something
similiar to my goals. I'll post the results of any successes I am met
with
#4
Posted 27 September 2006 - 05:56 AM
ive made a couple of music programs before, queryperformancecounter is the best, but you dont even need it timegettime times to the millisecond and its ok to use. (trust me, theres heaps of lame bullshit about timers on the net, your computer couldnt even run
if it couldnt time 1000ths of milliseconds)
its not the timing function thats the problem, your going out of time because somethings running during or after the time has checked over, if your using a thread then that could be the problem, i recommend not using threads at all.
stick the "sound player?" in the main loop, every cycle of the loop count how much time went by, using whatever timer your using, and using what time went by calculate how many quarter notes went by.
try that, did you understand?
i can guarantee this works, its just hard doing it your first time, i was running around complaining about timers not working my
first time too :) which wasnt that long ago hehe.
if it couldnt time 1000ths of milliseconds)
its not the timing function thats the problem, your going out of time because somethings running during or after the time has checked over, if your using a thread then that could be the problem, i recommend not using threads at all.
stick the "sound player?" in the main loop, every cycle of the loop count how much time went by, using whatever timer your using, and using what time went by calculate how many quarter notes went by.
try that, did you understand?
i can guarantee this works, its just hard doing it your first time, i was running around complaining about timers not working my
first time too :) which wasnt that long ago hehe.
1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users











