// 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 Buttons { get; } public IControllable? Controllable { get; private set; } public void AllocateControllable(IControllable controllable) => Controllable = controllable; //TODO: fix button handling private List InitializeButtons(IDeviceButtonConfiguration buttonConfiguration, IButtonFactory buttonFactory) { List 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}"; } }