|
|
|
|
@ -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); |
|
|
|
|
|