Cross Platform Application to allow control with a MIDI controller
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.8 KiB

// Author: Gockner, Simon
// Created: 2021-04-07
// Copyright(c) 2021 SimonG. All Rights Reserved.
using System.Collections.Generic;
using Lib.Audio.Controls.Buttons.Factories;
using Lib.Audio.Controls.Buttons.Interfaces;
using Lib.Audio.Controls.Factories;
using Lib.Audio.Controls.Interfaces;
using Lib.Audio.Interfaces;
namespace Lib.Audio
{
public class Channel : IChannel
{
private readonly uint _channelNumber;
public Channel(uint channelNumber,
IDeviceButtonConfiguration buttonConfiguration,
IFaderFactory faderFactory,
IKnobFactory knobFactory,
IButtonFactory buttonFactory)
{
_channelNumber = channelNumber;
Fader = faderFactory.Create();
Knob = knobFactory.Create();
Buttons = InitializeButtons(buttonConfiguration, buttonFactory);
Fader.PositionChanged += OnFaderPositionChanged;
}
public IFader Fader { get; }
public IKnob Knob { get; }
public List<IButton> Buttons { get; }
public IControllable? Controllable { get; private set; }
public void AllocateControllable(IControllable controllable) => Controllable = controllable;
//TODO: fix button handling
private List<IButton> InitializeButtons(IDeviceButtonConfiguration buttonConfiguration, IButtonFactory buttonFactory)
{
List<IButton> buttons = new();
for (int i = 0; i < buttonConfiguration.NumberOfButtons; i++)
buttons.Add(buttonFactory.Create());
return buttons;
}
private void OnFaderPositionChanged(object? sender, float position) => Controllable?.SetVolume(position);
public override string ToString() => $"Channel {_channelNumber}";
}
}