From edaf9de1fb0fddcb3bef4402d291bae305ab9774 Mon Sep 17 00:00:00 2001 From: Simon G Date: Wed, 12 May 2021 19:02:52 +0200 Subject: [PATCH] - add channel number - handle controlChangeMessage --- Lib.Audio/Channel.cs | 21 +++++++++++++-------- Lib.Audio/Interfaces/IChannel.cs | 2 ++ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Lib.Audio/Channel.cs b/Lib.Audio/Channel.cs index b9fbe18..d7bf73a 100644 --- a/Lib.Audio/Channel.cs +++ b/Lib.Audio/Channel.cs @@ -25,8 +25,6 @@ namespace Lib.Audio private readonly IMidiCommunication _midiCommunication; private readonly IProcessManager _processManager; - private readonly int _channelNumber; - private IMidiMessage? _acknowledgeMessage; public Channel(XmlChannel xmlChannel, @@ -40,7 +38,8 @@ namespace Lib.Audio _controllableCollector = controllableCollector; _midiCommunication = midiCommunication; _processManager = processManager; - _channelNumber = xmlChannel.ChannelNumber; + + ChannelNumber = xmlChannel.ChannelNumber; if (xmlChannel.Fader != null) { @@ -55,13 +54,14 @@ namespace Lib.Audio if (xmlChannel.Buttons != null) { foreach (var button in xmlChannel.Buttons) - Buttons.Add(buttonFactory.Create(button, _channelNumber)); + Buttons.Add(buttonFactory.Create(button, ChannelNumber)); } _processManager.ProcessStarted += OnProcessManagerProcessStarted; _processManager.ProcessExited += OnProcessManagerProcessExited; } + public int ChannelNumber { get; } public IFader? Fader { get; } public IKnob? Knob { get; } public List Buttons { get; } @@ -105,7 +105,7 @@ namespace Lib.Audio if (Fader?.NoteNumber == noteMessage.NoteNumber) { Fader.IsTouched = false; - _acknowledgeMessage = new PitchWheelChangeMessage(0, _channelNumber, Fader.Position); + _acknowledgeMessage = new PitchWheelChangeMessage(0, ChannelNumber, Fader.Position); } else { @@ -118,6 +118,11 @@ namespace Lib.Audio if (Fader != null) Fader.Position = pitchWheelChangeMessage.Pitch; } + else if (message is ControlChangeMessage controlChangeMessage) + { + if (Fader != null && Fader.Controller == controlChangeMessage.Controller) + Fader.Position = controlChangeMessage.Value; + } } public void SendAcknowledge() @@ -137,7 +142,7 @@ namespace Lib.Audio float volume = Controllable.GetVolume(); Fader.RelativePosition = volume; - _midiCommunication.Send(new PitchWheelChangeMessage(0, _channelNumber, Fader.Position)); + _midiCommunication.Send(new PitchWheelChangeMessage(0, ChannelNumber, Fader.Position)); } private void ToggleButtonLed(LedState ledState) where TButton : IButton @@ -185,7 +190,7 @@ namespace Lib.Audio ToggleButtonLed(LedState.Off); } - public override string ToString() => $"Channel {_channelNumber}"; + public override string ToString() => $"Channel {ChannelNumber}"; public void Dispose() { @@ -193,7 +198,7 @@ namespace Lib.Audio _processManager.ProcessExited -= OnProcessManagerProcessExited; UnMapControllable(); - _midiCommunication.Send(new PitchWheelChangeMessage(0, _channelNumber, 0)); + _midiCommunication.Send(new PitchWheelChangeMessage(0, ChannelNumber, 0)); foreach (IMidiMessage ledOffMessage in Buttons.Select(b => b.ToggleLed(LedState.Off))) _midiCommunication.Send(ledOffMessage); diff --git a/Lib.Audio/Interfaces/IChannel.cs b/Lib.Audio/Interfaces/IChannel.cs index 9b19e3a..99c851b 100644 --- a/Lib.Audio/Interfaces/IChannel.cs +++ b/Lib.Audio/Interfaces/IChannel.cs @@ -12,6 +12,8 @@ namespace Lib.Audio.Interfaces { public interface IChannel : IDisposable { + int ChannelNumber { get; } + IFader? Fader { get; } IKnob? Knob { get; } List? Buttons { get; }