|
DirectMusic:
Looping Playback
By: Jack Hoxley
Written: June 2000
Difficulty: Medium
Description: How to loop the music that you are playing.
Looping
music is very important for games; a piece of music may well last only
3 minutes, but they may well be playing the same level for 2 hours. This
tutorial will show you two ways of looping; and it will also show you
how to detect when the music is finished playing - which can cue you to
shuffle the music/play the next track.
Method
1: The easy way
This involves checking every second whether or not the segment is still
playing. If the SegmentState variables states that it is no longer playing
you can start it again. This is useful for games as you aren't checking
quite so often, and it really doesn't matter in a game how far through
the piece you are. This method will also show you whether or not it as
finished - so you can shoose to loop it or change the music track.
'This part goes in
a timer, or in the main game loop
'The smaller the interval the less-of a delay
'there is before it picks up on changes.
If seg Is Nothing Then Exit Sub
If perf.IsPlaying(seg, segstate) Then
lblPlay.Caption = "Is it still playing: Yes!"
Else
lblPlay.Caption = "Is it still playing: No!"
'At this point we decide:
'A. Loop the same piece
MsgBox "We've got to the end; now we start again"
Set segstate = perf.PlaySegment(seg, 0, 0)
'B. Play another piece
End If |
Method 2: The Even Easier Way
There is a simple function call built into DirectMusic that you can use
to set loop points. You set two values, the start of the loop and the
end of the loop - if these are set to the beginning and the end then it'll
loop the whole track.
'Where Segment is
already loaded, and is NOT playing.
Segment.SetLoopPoints 0, 0
'If they are both set to 0 then it will loop
the entire segment.
Segment.SetRepeats ??
'This will set it to repeat ?? many times -
which may well be useful to you. |
Although
these two methods could be used to repeat any segment of a piece of music;
they're easy to use for repeating the whole segment.
|