- 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 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<IButton> 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<TButton>(LedState ledState) where TButton : IButton
@ -185,7 +190,7 @@ namespace Lib.Audio
ToggleButtonLed<IRecordButton>(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);

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

Loading…
Cancel
Save