- add select method

master
Simon G 5 years ago
parent b21a5e0e2b
commit a58f112ea9
  1. 21
      Lib.Audio/Channel.cs
  2. 4
      Lib.Audio/Controls/Buttons/Interfaces/ISelectButton.cs
  3. 5
      Lib.Audio/Controls/Buttons/SelectButton.cs
  4. 4
      Lib.Audio/Device.cs
  5. 3
      Lib.Audio/Factories/IChannelFactory.cs
  6. 3
      Lib.Audio/Interfaces/IChannel.cs

@ -19,14 +19,17 @@ namespace Lib.Audio
{ {
public class Channel : IChannel public class Channel : IChannel
{ {
private readonly IMidiCommunication _midiCommunication;
private readonly int _channelNumber; private readonly int _channelNumber;
private IMidiMessage? _acknowledgeMessage; private IMidiMessage? _acknowledgeMessage;
public Channel(XmlChannel xmlChannel, public Channel(XmlChannel xmlChannel,
IMidiCommunication midiCommunication,
IFaderFactory faderFactory, IFaderFactory faderFactory,
IKnobFactory knobFactory, IKnobFactory knobFactory,
IButtonFactory buttonFactory) IButtonFactory buttonFactory)
{ {
_midiCommunication = midiCommunication;
_channelNumber = xmlChannel.ChannelNumber; _channelNumber = xmlChannel.ChannelNumber;
if (xmlChannel.Fader != null) if (xmlChannel.Fader != null)
@ -51,7 +54,19 @@ namespace Lib.Audio
public List<IButton>? Buttons { get; } public List<IButton>? Buttons { get; }
public IControllable? Controllable { get; private set; } public IControllable? Controllable { get; private set; }
public void MapControllable(IControllable controllable) => Controllable = controllable; public void MapControllable(IControllable controllable)
{
Controllable = controllable;
ISelectButton? selectButton = Buttons?.OfType<ISelectButton>().FirstOrDefault();
IMidiMessage? selectMessage = selectButton?.Select();
if (selectMessage != null)
_midiCommunication.Send(selectMessage);
}
public void HandleMessage(IMidiMessage message) public void HandleMessage(IMidiMessage message)
{ {
if (message is NoteOnMessage noteOnMessage) if (message is NoteOnMessage noteOnMessage)
@ -84,12 +99,12 @@ namespace Lib.Audio
} }
} }
public void SendAcknowledge(IMidiCommunication midiCommunication) public void SendAcknowledge()
{ {
if (_acknowledgeMessage == null) if (_acknowledgeMessage == null)
return; return;
midiCommunication.Send(_acknowledgeMessage); _midiCommunication.Send(_acknowledgeMessage);
_acknowledgeMessage = null; _acknowledgeMessage = null;
} }

@ -2,10 +2,12 @@
// Created: 2021-04-17 // Created: 2021-04-17
// Copyright(c) 2021 SimonG. All Rights Reserved. // Copyright(c) 2021 SimonG. All Rights Reserved.
using Lib.Midi.Messages.Interfaces;
namespace Lib.Audio.Controls.Buttons.Interfaces namespace Lib.Audio.Controls.Buttons.Interfaces
{ {
public interface ISelectButton : IButton public interface ISelectButton : IButton
{ {
IMidiMessage? Select();
} }
} }

@ -3,6 +3,8 @@
// Copyright(c) 2021 SimonG. All Rights Reserved. // Copyright(c) 2021 SimonG. All Rights Reserved.
using Lib.Audio.Controls.Buttons.Interfaces; using Lib.Audio.Controls.Buttons.Interfaces;
using Lib.Audio.Interfaces;
using Lib.Midi.Messages.Interfaces;
namespace Lib.Audio.Controls.Buttons namespace Lib.Audio.Controls.Buttons
{ {
@ -13,5 +15,8 @@ namespace Lib.Audio.Controls.Buttons
{ {
} }
public override IMidiMessage? Handle(IControllable? controllable, Velocity velocity) => null; //for now don't do anything when pressed
public IMidiMessage? Select() => base.Handle(null, Velocity.On);
} }
} }

@ -37,12 +37,12 @@ namespace Lib.Audio
public void StartCommunication(bool useMidiView) => _midiCommunication.Open(useMidiView); public void StartCommunication(bool useMidiView) => _midiCommunication.Open(useMidiView);
private List<IChannel> InitializeChannels() => _driver.Channels == null ? new List<IChannel>() private List<IChannel> InitializeChannels() => _driver.Channels == null ? new List<IChannel>()
: _driver.Channels.Select(c => _channelFactory.Create(c)).ToList(); : _driver.Channels.Select(c => _channelFactory.Create(c, _midiCommunication)).ToList();
private void OnMidiCommunicationMessageReceived(object? sender, IMidiMessage message) private void OnMidiCommunicationMessageReceived(object? sender, IMidiMessage message)
{ {
Channels[message.ChannelNumber - 1].HandleMessage(message); Channels[message.ChannelNumber - 1].HandleMessage(message);
Channels[message.ChannelNumber - 1].SendAcknowledge(_midiCommunication); Channels[message.ChannelNumber - 1].SendAcknowledge();
} }
private void OnMidiCommunicationErrorReceived(object? sender, IMidiMessage message) => private void OnMidiCommunicationErrorReceived(object? sender, IMidiMessage message) =>

@ -4,11 +4,12 @@
using Lib.Audio.Interfaces; using Lib.Audio.Interfaces;
using Lib.Driver.Xml; using Lib.Driver.Xml;
using Lib.Midi.Interfaces;
namespace Lib.Audio.Factories namespace Lib.Audio.Factories
{ {
public interface IChannelFactory public interface IChannelFactory
{ {
IChannel Create(XmlChannel xmlChannel); IChannel Create(XmlChannel xmlChannel, IMidiCommunication midiCommunication);
} }
} }

@ -5,7 +5,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using Lib.Audio.Controls.Buttons.Interfaces; using Lib.Audio.Controls.Buttons.Interfaces;
using Lib.Audio.Controls.Interfaces; using Lib.Audio.Controls.Interfaces;
using Lib.Midi.Interfaces;
using Lib.Midi.Messages.Interfaces; using Lib.Midi.Messages.Interfaces;
namespace Lib.Audio.Interfaces namespace Lib.Audio.Interfaces
@ -20,6 +19,6 @@ namespace Lib.Audio.Interfaces
void MapControllable(IControllable controllable); void MapControllable(IControllable controllable);
void HandleMessage(IMidiMessage message); void HandleMessage(IMidiMessage message);
void SendAcknowledge(IMidiCommunication midiCommunication); void SendAcknowledge();
} }
} }
Loading…
Cancel
Save