- only send acknowledge message for veloctiy.on

master
Simon G 5 years ago
parent 2217e8e7de
commit 623690aaec
  1. 5
      Lib.Audio/Channel.cs
  2. 22
      Lib.Audio/Controls/Buttons/Button.cs
  3. 3
      Lib.Audio/Controls/Buttons/Interfaces/IButton.cs
  4. 15
      Lib.Audio/Controls/Buttons/MuteButton.cs

@ -4,6 +4,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Lib.Audio.Controls;
using Lib.Audio.Controls.Buttons.Factories; using Lib.Audio.Controls.Buttons.Factories;
using Lib.Audio.Controls.Buttons.Interfaces; using Lib.Audio.Controls.Buttons.Interfaces;
using Lib.Audio.Controls.Factories; using Lib.Audio.Controls.Factories;
@ -60,7 +61,7 @@ namespace Lib.Audio
else else
{ {
IButton? button = Buttons?.FirstOrDefault(b => b.NoteNumber == noteOnMessage.NoteNumber); IButton? button = Buttons?.FirstOrDefault(b => b.NoteNumber == noteOnMessage.NoteNumber);
_acknowledgeMessage = button?.HandleOn(Controllable, noteOnMessage.Velocity); _acknowledgeMessage = button?.Handle(Controllable, (Velocity) noteOnMessage.Velocity);
} }
} }
else if (message is NoteMessage noteMessage) else if (message is NoteMessage noteMessage)
@ -73,7 +74,7 @@ namespace Lib.Audio
else else
{ {
IButton? button = Buttons?.FirstOrDefault(b => b.NoteNumber == noteMessage.NoteNumber); IButton? button = Buttons?.FirstOrDefault(b => b.NoteNumber == noteMessage.NoteNumber);
_acknowledgeMessage = button?.HandleOff(Controllable, noteMessage.Velocity); _acknowledgeMessage = button?.Handle(Controllable, (Velocity) noteMessage.Velocity);
} }
} }
else if (message is PitchWheelChangeMessage pitchWheelChangeMessage) else if (message is PitchWheelChangeMessage pitchWheelChangeMessage)

@ -20,11 +20,23 @@ namespace Lib.Audio.Controls.Buttons
} }
public int NoteNumber { get; } public int NoteNumber { get; }
protected bool IsActive { get; private set; }
public virtual IMidiMessage HandleOn(IControllable? controllable, int velocity) => public virtual IMidiMessage? Handle(IControllable? controllable, Velocity velocity)
new NoteOnMessage(0, _channelNumber, NoteNumber, velocity, 0); {
if (velocity != Velocity.On)
public virtual IMidiMessage HandleOff(IControllable? controllable, int velocity) => return null;
new NoteMessage(0, _channelNumber, NoteNumber, velocity);
IsActive = !IsActive;
Handle(controllable);
return IsActive ? new NoteOnMessage(0, _channelNumber, NoteNumber, (int) Velocity.On, 0)
: new NoteMessage(0, _channelNumber, NoteNumber, (int) Velocity.Off);
}
protected virtual void Handle(IControllable? controllable)
{
}
} }
} }

@ -11,7 +11,6 @@ namespace Lib.Audio.Controls.Buttons.Interfaces
{ {
int NoteNumber { get; } int NoteNumber { get; }
IMidiMessage HandleOn(IControllable? controllable, int velocity); IMidiMessage? Handle(IControllable? controllable, Velocity velocity);
IMidiMessage HandleOff(IControllable? controllable, int velocity);
} }
} }

@ -4,7 +4,6 @@
using Lib.Audio.Controls.Buttons.Interfaces; using Lib.Audio.Controls.Buttons.Interfaces;
using Lib.Audio.Interfaces; using Lib.Audio.Interfaces;
using Lib.Midi.Messages.Interfaces;
namespace Lib.Audio.Controls.Buttons namespace Lib.Audio.Controls.Buttons
{ {
@ -16,16 +15,12 @@ namespace Lib.Audio.Controls.Buttons
} }
public override IMidiMessage HandleOn(IControllable? controllable, int velocity) protected override void Handle(IControllable? controllable)
{ {
controllable?.Mute(); if (IsActive)
return base.HandleOn(controllable, velocity); controllable?.Mute();
} else
controllable?.UnMute();
public override IMidiMessage HandleOff(IControllable? controllable, int velocity)
{
controllable?.UnMute();
return base.HandleOff(controllable, velocity);
} }
} }
} }
Loading…
Cancel
Save