// Author: Gockner, Simon // Created: 2021-04-07 // Copyright(c) 2021 SimonG. All Rights Reserved. using Lib.Audio.Controls.Buttons.Interfaces; using Lib.Audio.Interfaces; using Lib.Midi.Messages; using Lib.Midi.Messages.Interfaces; namespace Lib.Audio.Controls.Buttons { public class Button : IButton //TODO: Make abstract? { private readonly int _channelNumber; public Button(int noteNumber, int channelNumber) { NoteNumber = noteNumber; _channelNumber = channelNumber; } public int NoteNumber { get; } protected bool IsActive { get; private set; } public virtual IMidiMessage? HandlePressed(IControllable? controllable, Velocity velocity) { if (velocity != Velocity.On) return null; IsActive = !IsActive; Handle(controllable); return IsActive ? LedOn() : LedOff(); } public IMidiMessage ToggleLed(LedState ledState) => ledState == LedState.Off ? LedOff() : LedOn(); protected virtual void Handle(IControllable? controllable) { } private IMidiMessage LedOn() => new NoteOnMessage(0, _channelNumber, NoteNumber, (int) Velocity.On, 0); private IMidiMessage LedOff() => new NoteMessage(0, _channelNumber, NoteNumber, (int) Velocity.Off); } }