public MidiSequencerEvent Process(int frame)
{
seqEvt.Events.Clear();
//stop or loop
if ((sampleTime >= (int)_MidiFile.Tracks[trackNumber].TotalTime)/* || ((trackSection != null) && (sampleTime >= (int)trackSection.EndSample))*/)
{
sampleTime = 0;
eventIndex = 0;
trackSection = null;
if (looping == true)
{
//Clear the current programs for the channels.
Array.Clear(currentPrograms, 0, currentPrograms.Length);
//Clear vol, pan, and tune
ResetControllers();
//set bpm
_MidiFile.BeatsPerMinute = 120;
} else if (HandleEndOfTrack(synth)) {
//Clear vol, pan, and tune
ResetControllers();
//set bpm
_MidiFile.BeatsPerMinute = 120;
} else {
playing = false;
synth.NoteOffAll(true);
return null;
}
}
while (eventIndex < _MidiFile.Tracks[trackNumber].EventCount && _MidiFile.Tracks[trackNumber].MidiEvents[eventIndex].deltaTime < (sampleTime + frame))
{
seqEvt.Events.Add(_MidiFile.Tracks[trackNumber].MidiEvents[eventIndex]);
eventIndex++;
}
return seqEvt;
}