Skip to content

Commit

Permalink
Merge branch 'feature/output-adjustments'
Browse files Browse the repository at this point in the history
  • Loading branch information
oddbear committed May 30, 2022
2 parents 654d1ff + d80deed commit 1febf10
Show file tree
Hide file tree
Showing 22 changed files with 575 additions and 242 deletions.
14 changes: 14 additions & 0 deletions Revelator.io24.Api/Enums/DeviceOut.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.ComponentModel;

namespace Revelator.io24.Api.Enums
{
public enum DeviceOut
{
[Description("Main Out")]
MainOut,
[Description("Phones")]
Phones,
[Description("Blend")]
Blend
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Revelator.io24.Api.Enums
{
public enum Output
public enum MixOut
{
[Description("Main")]
Main,
Expand Down
76 changes: 38 additions & 38 deletions Revelator.io24.Api/RoutingTable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,30 +14,30 @@ public class RoutingTable
{
private readonly RawService _rawService;

public event EventHandler<(Input, Output)> RouteUpdated;
public event EventHandler<(Input, Output)> VolumeUpdated;
public event EventHandler<(Input, MixOut)> RouteUpdated;
public event EventHandler<(Input, MixOut)> VolumeUpdated;

public RoutingTable(RawService rawService)
{
_rawService = rawService;
SetupRoutes();
}

private Dictionary<(Input input, Output output), (string route, string volume)> _routes = new Dictionary<(Input input, Output output), (string route, string volume)>();
private Dictionary<string, (Input input, Output output)> _routeToKey = new Dictionary<string, (Input input, Output output)>();
private Dictionary<(Input input, MixOut output), (string route, string volume)> _routes = new Dictionary<(Input input, MixOut output), (string route, string volume)>();
private Dictionary<string, (Input input, MixOut output)> _routeToKey = new Dictionary<string, (Input input, MixOut output)>();

public bool GetRouting(Input input, Output output)
public bool GetRouting(Input input, MixOut mixOut)
{
if (!_routes.TryGetValue((input, output), out var routes))
if (!_routes.TryGetValue((input, mixOut), out var routes))
return false;

var value = _rawService.GetValue(routes.route);
return IsRouted(routes.route, value);
}

public void SetRouting(Input input, Output output, Value value)
public void SetRouting(Input input, MixOut mixOut, Value value)
{
if (!_routes.TryGetValue((input, output), out var routes))
if (!_routes.TryGetValue((input, mixOut), out var routes))
return;

var on = GetOnState(routes.route);
Expand All @@ -64,9 +64,9 @@ public void SetRouting(Input input, Output output, Value value)
/// <summary>
/// Get volume in range of 0% - 100%
/// </summary>
public float GetVolume(Input input, Output output)
public float GetVolume(Input input, MixOut mixOut)
{
if (!_routes.TryGetValue((input, output), out var routes))
if (!_routes.TryGetValue((input, mixOut), out var routes))
return 0;

var value = _rawService.GetValue(routes.volume);
Expand All @@ -79,9 +79,9 @@ public float GetVolume(Input input, Output output)
/// <summary>
/// Set volume in range of 0% - 100%
/// </summary>
public void SetVolume(Input input, Output output, float value)
public void SetVolume(Input input, MixOut mixOut, float value)
{
if (!_routes.TryGetValue((input, output), out var routes))
if (!_routes.TryGetValue((input, mixOut), out var routes))
return;

var floatValue = EnsureVolumeRange(value) / 100f;
Expand All @@ -93,9 +93,9 @@ public void SetVolume(Input input, Output output, float value)
/// Gets the volume in dB range -96dB to +10dB
/// WARNING: This is a little off when it comes do decimals.
/// </summary>
public float GetVolumeInDb(Input input, Output output)
public float GetVolumeInDb(Input input, MixOut mixOut)
{
if (!_routes.TryGetValue((input, output), out var routes))
if (!_routes.TryGetValue((input, mixOut), out var routes))
return -96;

//We round to skip decimals (the UI is to tight):
Expand Down Expand Up @@ -133,9 +133,9 @@ public float GetVolumeInDb(Input input, Output output)
/// Sets the volume in dB range -96dB to +10dB
/// WARNING: This is a little off when it comes do decimals.
/// </summary>
public void SetVolumeInDb(Input input, Output output, float dbValue)
public void SetVolumeInDb(Input input, MixOut mixOut, float dbValue)
{
if (!_routes.TryGetValue((input, output), out var routes))
if (!_routes.TryGetValue((input, mixOut), out var routes))
return;

var a = 0.47f;
Expand Down Expand Up @@ -234,81 +234,81 @@ private void Syncronized()

private void SetupRoutes()
{
SetupRouting((Input.Mic_L, Output.Main),
SetupRouting((Input.Mic_L, MixOut.Main),
"line/ch1/mute",
"line/ch1/volume");
SetupRouting((Input.Mic_L, Output.Mix_A),
SetupRouting((Input.Mic_L, MixOut.Mix_A),
"line/ch1/assign_aux1",
"line/ch1/aux1");
SetupRouting((Input.Mic_L, Output.Mix_B),
SetupRouting((Input.Mic_L, MixOut.Mix_B),
"line/ch1/assign_aux2",
"line/ch1/aux2");

SetupRouting((Input.Mic_R, Output.Main),
SetupRouting((Input.Mic_R, MixOut.Main),
"line/ch2/mute",
"line/ch2/volume");
SetupRouting((Input.Mic_R, Output.Mix_A),
SetupRouting((Input.Mic_R, MixOut.Mix_A),
"line/ch2/assign_aux1",
"line/ch2/aux1");
SetupRouting((Input.Mic_R, Output.Mix_B),
SetupRouting((Input.Mic_R, MixOut.Mix_B),
"line/ch2/assign_aux2",
"line/ch2/aux2");

SetupRouting((Input.Playback, Output.Main),
SetupRouting((Input.Playback, MixOut.Main),
"return/ch1/mute",
"return/ch1/volume");
SetupRouting((Input.Playback, Output.Mix_A),
SetupRouting((Input.Playback, MixOut.Mix_A),
"return/ch1/assign_aux1",
"return/ch1/aux1");
SetupRouting((Input.Playback, Output.Mix_B),
SetupRouting((Input.Playback, MixOut.Mix_B),
"return/ch1/assign_aux2",
"return/ch1/aux2");

SetupRouting((Input.Virtual_A, Output.Main),
SetupRouting((Input.Virtual_A, MixOut.Main),
"return/ch2/mute",
"return/ch2/volume");
SetupRouting((Input.Virtual_A, Output.Mix_A),
SetupRouting((Input.Virtual_A, MixOut.Mix_A),
"return/ch2/assign_aux1",
"return/ch2/aux1");
SetupRouting((Input.Virtual_A, Output.Mix_B),
SetupRouting((Input.Virtual_A, MixOut.Mix_B),
"return/ch2/assign_aux2",
"return/ch2/aux2");

SetupRouting((Input.Virtual_B, Output.Main),
SetupRouting((Input.Virtual_B, MixOut.Main),
"return/ch3/mute",
"return/ch3/volume");
SetupRouting((Input.Virtual_B, Output.Mix_A),
SetupRouting((Input.Virtual_B, MixOut.Mix_A),
"return/ch3/assign_aux1",
"return/ch3/aux1");
SetupRouting((Input.Virtual_B, Output.Mix_B),
SetupRouting((Input.Virtual_B, MixOut.Mix_B),
"return/ch3/assign_aux2",
"return/ch3/aux2");

SetupRouting((Input.Reverb, Output.Main),
SetupRouting((Input.Reverb, MixOut.Main),
"fxreturn/ch1/mute",
"fxreturn/ch1/volume");
SetupRouting((Input.Reverb, Output.Mix_A),
SetupRouting((Input.Reverb, MixOut.Mix_A),
"fxreturn/ch1/assign_aux1",
"fxreturn/ch1/aux1");
SetupRouting((Input.Reverb, Output.Mix_B),
SetupRouting((Input.Reverb, MixOut.Mix_B),
"fxreturn/ch1/assign_aux2",
"fxreturn/ch1/aux2");

SetupRouting((Input.Mix, Output.Main),
SetupRouting((Input.Mix, MixOut.Main),
"main/ch1/mute",
"main/ch1/volume");
SetupRouting((Input.Mix, Output.Mix_A),
SetupRouting((Input.Mix, MixOut.Mix_A),
"aux/ch1/mute",
"aux/ch1/volume");
SetupRouting((Input.Mix, Output.Mix_B),
SetupRouting((Input.Mix, MixOut.Mix_B),
"aux/ch2/mute",
"aux/ch2/volume");

_rawService.Syncronized += Syncronized;
_rawService.ValueStateUpdated += ValueStateUpdated;
}

private void SetupRouting((Input input, Output output) key, string routeAssign, string routeVolume)
private void SetupRouting((Input input, MixOut output) key, string routeAssign, string routeVolume)
{
_routeToKey[routeAssign] = key;
_routeToKey[routeVolume] = key;
Expand Down
18 changes: 17 additions & 1 deletion Revelator.io24.Api/Services/BroadcastService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace Revelator.io24.Api.Services
Expand Down Expand Up @@ -85,7 +86,22 @@ private void Listener()
continue;
}

//TODO: What if... multiple devices?
//try
//{
// var deviceString = Encoding.UTF8.GetString(data.Range(32));
// var segments = deviceString.Split('\0');
// var deviceName = segments[0].Split('/')[0]; //"Revelator IO 24" or "Revelator IO 44"
// var firmware = segments[0].Split('/')[1]; //289
// var deviceType = segments[1]; //AUD
// var serialNumber = segments[2]; //AB1234567890

// if (deviceName != "Revelator IO 44")
// continue;
//}
//catch (Exception)
//{
// continue;
//}

if (!_communicationService.IsConnected)
{
Expand Down
103 changes: 103 additions & 0 deletions Revelator.io24.Loupedeck/Adjustments/BlendOutAdjustment.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
using System.ComponentModel;
using Revelator.io24.Api.Models.Global;

namespace Loupedeck.RevelatorIo24Plugin.Adjustments
{
class BlendOutAdjustment : PluginDynamicAdjustment
{
protected RevelatorIo24Plugin _plugin;

public BlendOutAdjustment()
: base("Blend", "Adjust Main Out and Phones blend ratio", "Device Outputs", true)
{
//
}

protected override bool OnLoad()
{
_plugin = (RevelatorIo24Plugin)base.Plugin;
_plugin.Device.Global.PropertyChanged += PropertyChanged;
return true;
}

protected override bool OnUnload()
{
_plugin.Device.Global.PropertyChanged -= PropertyChanged;

return true;
}

private void PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName != nameof(Global.MonitorBlend))
return;

base.AdjustmentValueChanged();
}

protected override void RunCommand(string actionParameter)
{
_plugin.Device.Global.MonitorBlend = 0.5f;

base.ActionImageChanged(actionParameter);
}

protected override void ApplyAdjustment(string actionParameter, int diff)
{
var volume = _plugin.Device.Global.MonitorBlend * 100;

volume += (diff * 2);
volume /= 100;

if (volume < 0)
volume = 0;

if (volume > 1)
volume = 1;

_plugin.Device.Global.MonitorBlend = volume;

base.AdjustmentValueChanged(actionParameter);
}

protected override string GetAdjustmentValue(string actionParameter)
{
//-1.0: 0f
//+0.0: 0.5f
//+1.0: 1f
var value = _plugin.Device.Global.MonitorBlend;
var blendRatio = (value - 0.5f) * 2;

return $"{blendRatio:0.00}";
}

protected override BitmapImage GetCommandImage(string actionParameter, PluginImageSize imageSize)
{
if (_plugin.Device is null)
return base.GetCommandImage(actionParameter, imageSize);

using (var bitmapBuilder = new BitmapBuilder(imageSize))
{
bitmapBuilder.Clear(BitmapColor.Black);

var path = "Loupedeck.RevelatorIo24Plugin.Resources.Plugin.blend-80.png";

var background = EmbeddedResources.ReadImage(path);
var outputName = "Blend";
if (imageSize == PluginImageSize.Width60)
{
background.Resize(50, 50);
bitmapBuilder.SetBackgroundImage(background);
bitmapBuilder.DrawText(outputName, 0, 40, 50, 0);
}
else
{
bitmapBuilder.SetBackgroundImage(background);
bitmapBuilder.DrawText(outputName, 0, 60, 80, 0);
}

return bitmapBuilder.ToImage();
}
}
}
}
Loading

0 comments on commit 1febf10

Please sign in to comment.