diff --git a/Lib.Midi/Messages/Factories/MidiMessageFactory.cs b/Lib.Midi/Messages/Factories/MidiMessageFactory.cs index d25dd91..b7510c2 100644 --- a/Lib.Midi/Messages/Factories/MidiMessageFactory.cs +++ b/Lib.Midi/Messages/Factories/MidiMessageFactory.cs @@ -2,7 +2,6 @@ // Created: 2021-04-09 // Copyright(c) 2021 SimonG. All Rights Reserved. -using System; using Lib.Midi.Messages.Interfaces; using NAudio.Midi; @@ -12,41 +11,12 @@ namespace Lib.Midi.Messages.Factories { public IMidiMessage Create(MidiInMessageEventArgs midiInMessageEventArgs) { - switch (midiInMessageEventArgs.MidiEvent.CommandCode) - { - case MidiCommandCode.NoteOff: - break; - case MidiCommandCode.NoteOn: - break; - case MidiCommandCode.KeyAfterTouch: - break; - case MidiCommandCode.ControlChange: - break; - case MidiCommandCode.PatchChange: - break; - case MidiCommandCode.ChannelAfterTouch: - break; - case MidiCommandCode.PitchWheelChange: - return new PitchWheelChangeMessage(midiInMessageEventArgs); - case MidiCommandCode.Sysex: - break; - case MidiCommandCode.Eox: - break; - case MidiCommandCode.TimingClock: - break; - case MidiCommandCode.StartSequence: - break; - case MidiCommandCode.ContinueSequence: - break; - case MidiCommandCode.StopSequence: - break; - case MidiCommandCode.AutoSensing: - break; - case MidiCommandCode.MetaEvent: - break; - default: - throw new ArgumentOutOfRangeException(); - } + if (midiInMessageEventArgs.MidiEvent is PitchWheelChangeEvent pitchWheelChangeEvent) + return new PitchWheelChangeMessage(pitchWheelChangeEvent, midiInMessageEventArgs.RawMessage); + else if (midiInMessageEventArgs.MidiEvent is NoteOnEvent noteOnEvent) + return new NoteOnMessage(noteOnEvent, midiInMessageEventArgs.RawMessage); + else if (midiInMessageEventArgs.MidiEvent is NoteEvent noteEvent) + return new NoteMessage(noteEvent, midiInMessageEventArgs.RawMessage); return null; } diff --git a/Lib.Midi/Messages/MidiMessage.cs b/Lib.Midi/Messages/MidiMessage.cs index 5955188..83e6ae9 100644 --- a/Lib.Midi/Messages/MidiMessage.cs +++ b/Lib.Midi/Messages/MidiMessage.cs @@ -9,10 +9,10 @@ namespace Lib.Midi.Messages { public abstract class MidiMessage : IMidiMessage { - protected MidiMessage(MidiInMessageEventArgs midiInMessageEventArgs) + protected MidiMessage(MidiEvent midiEvent, int rawMessage) { - ChannelNumber = midiInMessageEventArgs.MidiEvent.Channel; - RawMessage = midiInMessageEventArgs.RawMessage; + ChannelNumber = midiEvent.Channel; + RawMessage = rawMessage; } protected MidiMessage() diff --git a/Lib.Midi/Messages/NoteMessage.cs b/Lib.Midi/Messages/NoteMessage.cs new file mode 100644 index 0000000..71159d0 --- /dev/null +++ b/Lib.Midi/Messages/NoteMessage.cs @@ -0,0 +1,17 @@ +// Author: Simon Gockner +// Created: 2021-04-10 +// Copyright(c) 2021 SimonG. All Rights Reserved. + +using NAudio.Midi; + +namespace Lib.Midi.Messages +{ + public class NoteMessage : MidiMessage + { + public NoteMessage(NoteEvent noteEvent, int rawMessage) + : base(noteEvent, rawMessage) => + NoteNumber = noteEvent.NoteNumber; + + public int NoteNumber { get; } + } +} \ No newline at end of file diff --git a/Lib.Midi/Messages/NoteOnMessage.cs b/Lib.Midi/Messages/NoteOnMessage.cs index c08b66e..a60c386 100644 --- a/Lib.Midi/Messages/NoteOnMessage.cs +++ b/Lib.Midi/Messages/NoteOnMessage.cs @@ -8,10 +8,15 @@ namespace Lib.Midi.Messages { public class NoteOnMessage : MidiMessage { - public NoteOnMessage(MidiInMessageEventArgs midiInMessageEventArgs) - : base(midiInMessageEventArgs) + public NoteOnMessage(NoteOnEvent noteOnEvent, int rawMessage) + : base(noteOnEvent, rawMessage) => + NoteNumber = noteOnEvent.NoteNumber; + + public NoteOnMessage() { - + // NoteOnEvent noteOnEvent = new NoteOnEvent() } + + public int NoteNumber { get; } } } \ No newline at end of file diff --git a/Lib.Midi/Messages/PitchWheelChangeMessage.cs b/Lib.Midi/Messages/PitchWheelChangeMessage.cs index cceb2d2..6e75d9b 100644 --- a/Lib.Midi/Messages/PitchWheelChangeMessage.cs +++ b/Lib.Midi/Messages/PitchWheelChangeMessage.cs @@ -8,11 +8,9 @@ namespace Lib.Midi.Messages { public class PitchWheelChangeMessage : MidiMessage { - public PitchWheelChangeMessage(MidiInMessageEventArgs midiInMessageEventArgs) - : base(midiInMessageEventArgs) - { - - } + public PitchWheelChangeMessage(PitchWheelChangeEvent pitchWheelChangeEvent, int rawMessage) + : base(pitchWheelChangeEvent, rawMessage) => + Pitch = pitchWheelChangeEvent.Pitch; public PitchWheelChangeMessage(long absoluteTime, int channelNumber, int pitch) { @@ -20,5 +18,7 @@ namespace Lib.Midi.Messages ChannelNumber = channelNumber; RawMessage = pitchWheelChangeEvent.GetAsShortMessage(); } + + public int Pitch { get; } } } \ No newline at end of file