CSharpSynth.Sequencer.MidiSequencer.ProcessMidiEvent C# (CSharp) Method

ProcessMidiEvent() public method

public ProcessMidiEvent ( MidiEvent midiEvent ) : bool
midiEvent CSharpSynth.Midi.MidiEvent
return bool
        public bool ProcessMidiEvent(MidiEvent midiEvent)
        {
            if (midiEvent.midiChannelEvent != MidiHelper.MidiChannelEvent.None)
            {
                switch (midiEvent.midiChannelEvent)
                {
                    case MidiHelper.MidiChannelEvent.Program_Change:
                        if (midiEvent.channel != 9)
                        {
                            if (midiEvent.parameter1 < synth.SoundBank.InstrumentCount)
                                currentPrograms[midiEvent.channel] = midiEvent.parameter1;
                        }
                        else //its the drum channel
                        {
                            if (midiEvent.parameter1 < synth.SoundBank.DrumCount)
                                currentPrograms[midiEvent.channel] = midiEvent.parameter1;
                        }
                        break;
                    case MidiHelper.MidiChannelEvent.Note_On:
                        if (blockList.Contains(midiEvent.channel))
                            return false;
                        if (this.NoteOnEvent != null)
                            this.NoteOnEvent(midiEvent.channel, midiEvent.parameter1, midiEvent.parameter2);
                        synth.NoteOn(midiEvent.channel, midiEvent.parameter1, midiEvent.parameter2, currentPrograms[midiEvent.channel]);
                        break;
                    case MidiHelper.MidiChannelEvent.Note_Off:
                        if (this.NoteOffEvent != null)
                            this.NoteOffEvent(midiEvent.channel, midiEvent.parameter1);
                        synth.NoteOff(midiEvent.channel, midiEvent.parameter1);
                        break;
                    case MidiHelper.MidiChannelEvent.Pitch_Bend:
                        //Store PitchBend as the # of semitones higher or lower
                        synth.TunePositions[midiEvent.channel] = (double)midiEvent.Parameters[1] * PitchWheelSemitoneRange;
                        break;
                    case MidiHelper.MidiChannelEvent.Controller:
                        switch (midiEvent.GetControllerType())
                        {
                            case MidiHelper.ControllerType.AllNotesOff:
                                synth.NoteOffAll(true);
                                break;
                            case MidiHelper.ControllerType.MainVolume:
                                synth.VolPositions[midiEvent.channel] = midiEvent.parameter2 / 127.0f;
                                break;
                            case MidiHelper.ControllerType.Pan:
                                synth.PanPositions[midiEvent.channel] = (midiEvent.parameter2 - 64) == 63 ? 1.00f : (midiEvent.parameter2 - 64) / 64.0f;
                                break;
                            case MidiHelper.ControllerType.ResetControllers:
                                ResetControllers();
                                break;
                            default:
                                break;
                        }
                        break;
                    default:
                        break;
                }
            }
            else if (midiEvent.midiMetaEvent != MidiHelper.MidiMetaEvent.None)
            {
                switch (midiEvent.midiMetaEvent)
                {
                    case MidiHelper.MidiMetaEvent.Tempo:
                        _MidiFile.BeatsPerMinute = MidiHelper.MicroSecondsPerMinute / System.Convert.ToUInt32(midiEvent.Parameters[0]);
                        break;
                    default:
                        break;
                }
            } else if (midiEvent.midiSysExEvent != MidiHelper.MidiSysExEvent.None) {
                return ProcessSysExEvent(midiEvent);
            }

            return false;
        }