- 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
{
private readonly IMidiCommunication _midiCommunication;
private readonly int _channelNumber;
private IMidiMessage? _acknowledgeMessage;
public Channel(XmlChannel xmlChannel,
IMidiCommunication midiCommunication,
IFaderFactory faderFactory,
IKnobFactory knobFactory,
IButtonFactory buttonFactory)
{
_midiCommunication = midiCommunication;
_channelNumber = xmlChannel.ChannelNumber;
if (xmlChannel.Fader != null)
@ -51,7 +54,19 @@ namespace Lib.Audio
public List<IButton>? Buttons { get; }
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)
{
if (message is NoteOnMessage noteOnMessage)
@ -84,12 +99,12 @@ namespace Lib.Audio
}
}
public void SendAcknowledge(IMidiCommunication midiCommunication)
public void SendAcknowledge()
{
if (_acknowledgeMessage == null)
return;
midiCommunication.Send(_acknowledgeMessage);
_midiCommunication.Send(_acknowledgeMessage);
_acknowledgeMessage = null;
}

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

@ -3,6 +3,8 @@
// Copyright(c) 2021 SimonG. All Rights Reserved.
using Lib.Audio.Controls.Buttons.Interfaces;
using Lib.Audio.Interfaces;
using Lib.Midi.Messages.Interfaces;
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);
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)
{
Channels[message.ChannelNumber - 1].HandleMessage(message);
Channels[message.ChannelNumber - 1].SendAcknowledge(_midiCommunication);
Channels[message.ChannelNumber - 1].SendAcknowledge();
}
private void OnMidiCommunicationErrorReceived(object? sender, IMidiMessage message) =>

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

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