public void PlayLevelMusic(GMD stalk, GMD fight)
{
_bIsPlayingLevelMusic = true;
MidiFile stalkMidi = new MidiFile(stalk.MidiData);
_stalkSequences = new MusicSequences();
_stalkSequences.FirstTrack = 0;
_stalkSequences.NumTracks = stalkMidi.Tracks.Length;
foreach (var Track in stalkMidi.Tracks) {
_stalkSequences.TrackSections.Add(Track.Sections);
}
if (fight != null) {
MidiFile fightMidi = new MidiFile(fight.MidiData);
_fightSequences = new MusicSequences();
_fightSequences.FirstTrack = _stalkSequences.NumTracks;
_fightSequences.NumTracks = fightMidi.Tracks.Length;
foreach (var Track in fightMidi.Tracks) {
_fightSequences.TrackSections.Add(Track.Sections);
}
// merge
stalkMidi.AddTracks(fightMidi);
}
PitchTo(0f, 0f);
lock (this) {
_midiSequencer.LoadMidi(stalkMidi, false);
_currentTrack = 0;
_currentSection = _stalkSequences.TrackSections[0][0];
_midiSequencer.Play();
_midiSequencer.SwitchSection(_currentTrack, _currentSection, 0f);
}
}