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); } }