- add channel number

- handle controlChangeMessage
master
Simon G 5 years ago
parent a970514bf2
commit edaf9de1fb
  1. 21
      Lib.Audio/Channel.cs
  2. 2
      Lib.Audio/Interfaces/IChannel.cs

@ -25,8 +25,6 @@ namespace Lib.Audio
private readonly IMidiCommunication _midiCommunication; private readonly IMidiCommunication _midiCommunication;
private readonly IProcessManager _processManager; private readonly IProcessManager _processManager;
private readonly int _channelNumber;
private IMidiMessage? _acknowledgeMessage; private IMidiMessage? _acknowledgeMessage;
public Channel(XmlChannel xmlChannel, public Channel(XmlChannel xmlChannel,
@ -40,7 +38,8 @@ namespace Lib.Audio
_controllableCollector = controllableCollector; _controllableCollector = controllableCollector;
_midiCommunication = midiCommunication; _midiCommunication = midiCommunication;
_processManager = processManager; _processManager = processManager;
_channelNumber = xmlChannel.ChannelNumber;
ChannelNumber = xmlChannel.ChannelNumber;
if (xmlChannel.Fader != null) if (xmlChannel.Fader != null)
{ {
@ -55,13 +54,14 @@ namespace Lib.Audio
if (xmlChannel.Buttons != null) if (xmlChannel.Buttons != null)
{ {
foreach (var button in xmlChannel.Buttons) foreach (var button in xmlChannel.Buttons)
Buttons.Add(buttonFactory.Create(button, _channelNumber)); Buttons.Add(buttonFactory.Create(button, ChannelNumber));
} }
_processManager.ProcessStarted += OnProcessManagerProcessStarted; _processManager.ProcessStarted += OnProcessManagerProcessStarted;
_processManager.ProcessExited += OnProcessManagerProcessExited; _processManager.ProcessExited += OnProcessManagerProcessExited;
} }
public int ChannelNumber { get; }
public IFader? Fader { get; } public IFader? Fader { get; }
public IKnob? Knob { get; } public IKnob? Knob { get; }
public List<IButton> Buttons { get; } public List<IButton> Buttons { get; }
@ -105,7 +105,7 @@ namespace Lib.Audio
if (Fader?.NoteNumber == noteMessage.NoteNumber) if (Fader?.NoteNumber == noteMessage.NoteNumber)
{ {
Fader.IsTouched = false; Fader.IsTouched = false;
_acknowledgeMessage = new PitchWheelChangeMessage(0, _channelNumber, Fader.Position); _acknowledgeMessage = new PitchWheelChangeMessage(0, ChannelNumber, Fader.Position);
} }
else else
{ {
@ -118,6 +118,11 @@ namespace Lib.Audio
if (Fader != null) if (Fader != null)
Fader.Position = pitchWheelChangeMessage.Pitch; Fader.Position = pitchWheelChangeMessage.Pitch;
} }
else if (message is ControlChangeMessage controlChangeMessage)
{
if (Fader != null && Fader.Controller == controlChangeMessage.Controller)
Fader.Position = controlChangeMessage.Value;
}
} }
public void SendAcknowledge() public void SendAcknowledge()
@ -137,7 +142,7 @@ namespace Lib.Audio
float volume = Controllable.GetVolume(); float volume = Controllable.GetVolume();
Fader.RelativePosition = volume; Fader.RelativePosition = volume;
_midiCommunication.Send(new PitchWheelChangeMessage(0, _channelNumber, Fader.Position)); _midiCommunication.Send(new PitchWheelChangeMessage(0, ChannelNumber, Fader.Position));
} }
private void ToggleButtonLed<TButton>(LedState ledState) where TButton : IButton private void ToggleButtonLed<TButton>(LedState ledState) where TButton : IButton
@ -185,7 +190,7 @@ namespace Lib.Audio
ToggleButtonLed<IRecordButton>(LedState.Off); ToggleButtonLed<IRecordButton>(LedState.Off);
} }
public override string ToString() => $"Channel {_channelNumber}"; public override string ToString() => $"Channel {ChannelNumber}";
public void Dispose() public void Dispose()
{ {
@ -193,7 +198,7 @@ namespace Lib.Audio
_processManager.ProcessExited -= OnProcessManagerProcessExited; _processManager.ProcessExited -= OnProcessManagerProcessExited;
UnMapControllable(); 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))) foreach (IMidiMessage ledOffMessage in Buttons.Select(b => b.ToggleLed(LedState.Off)))
_midiCommunication.Send(ledOffMessage); _midiCommunication.Send(ledOffMessage);

@ -12,6 +12,8 @@ namespace Lib.Audio.Interfaces
{ {
public interface IChannel : IDisposable public interface IChannel : IDisposable
{ {
int ChannelNumber { get; }
IFader? Fader { get; } IFader? Fader { get; }
IKnob? Knob { get; } IKnob? Knob { get; }
List<IButton>? Buttons { get; } List<IButton>? Buttons { get; }

Loading…
Cancel
Save