|
|
|
|
@ -9,6 +9,9 @@ using Lib.Audio.Controls.Factories; |
|
|
|
|
using Lib.Audio.Controls.Interfaces; |
|
|
|
|
using Lib.Audio.Interfaces; |
|
|
|
|
using Lib.Driver.Xml; |
|
|
|
|
using Lib.Midi.Interfaces; |
|
|
|
|
using Lib.Midi.Messages; |
|
|
|
|
using Lib.Midi.Messages.Interfaces; |
|
|
|
|
|
|
|
|
|
namespace Lib.Audio |
|
|
|
|
{ |
|
|
|
|
@ -16,17 +19,18 @@ namespace Lib.Audio |
|
|
|
|
{ |
|
|
|
|
private readonly int _channelNumber; |
|
|
|
|
|
|
|
|
|
public Channel(int channelNumber, |
|
|
|
|
XmlChannel xmlChannel, |
|
|
|
|
private IMidiMessage? _acknowledgeMessage; |
|
|
|
|
|
|
|
|
|
public Channel(XmlChannel xmlChannel, |
|
|
|
|
IFaderFactory faderFactory, |
|
|
|
|
IKnobFactory knobFactory, |
|
|
|
|
IButtonFactory buttonFactory) |
|
|
|
|
{ |
|
|
|
|
_channelNumber = channelNumber; |
|
|
|
|
_channelNumber = xmlChannel.ChannelNumber; |
|
|
|
|
|
|
|
|
|
if (xmlChannel.Fader != null) |
|
|
|
|
{ |
|
|
|
|
Fader = faderFactory.Create(); |
|
|
|
|
Fader = faderFactory.Create(xmlChannel.Fader); |
|
|
|
|
Fader.PositionChanged += OnFaderPositionChanged; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -47,6 +51,37 @@ namespace Lib.Audio |
|
|
|
|
public IControllable? Controllable { get; private set; } |
|
|
|
|
|
|
|
|
|
public void AllocateControllable(IControllable controllable) => Controllable = controllable; |
|
|
|
|
public void HandleMessage(IMidiMessage message) |
|
|
|
|
{ |
|
|
|
|
if (message is NoteOnMessage noteOnMessage) |
|
|
|
|
{ |
|
|
|
|
if (Fader?.NoteNumber == noteOnMessage.NoteNumber) |
|
|
|
|
Fader.IsTouched = true; |
|
|
|
|
} |
|
|
|
|
else if (message is NoteMessage noteMessage) |
|
|
|
|
{ |
|
|
|
|
if (Fader?.NoteNumber == noteMessage.NoteNumber) |
|
|
|
|
{ |
|
|
|
|
Fader.IsTouched = false; |
|
|
|
|
_acknowledgeMessage = new PitchWheelChangeMessage(0, _channelNumber, Fader.Position); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else if (message is PitchWheelChangeMessage pitchWheelChangeMessage) |
|
|
|
|
{ |
|
|
|
|
if (Fader != null) |
|
|
|
|
Fader.Position = pitchWheelChangeMessage.Pitch; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void SendAcknowledge(IMidiCommunication midiCommunication) |
|
|
|
|
{ |
|
|
|
|
if (_acknowledgeMessage == null) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
midiCommunication.Send(_acknowledgeMessage); |
|
|
|
|
_acknowledgeMessage = null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void OnFaderPositionChanged(object? sender, float position) => Controllable?.SetVolume(position); |
|
|
|
|
|
|
|
|
|
public override string ToString() => $"Channel {_channelNumber}"; |
|
|
|
|
|