App autostart update and UI refinement

This commit is contained in:
2024-04-10 19:43:06 -05:00
parent 880274554c
commit ac36aeb3cf
7 changed files with 350 additions and 48 deletions

View File

@@ -2,10 +2,37 @@
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="HidSliders.Gui.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="VoicemeeterSliders.Gui.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<HidSliders.Gui.Properties.Settings>
<setting name="VMVersion" serializeAs="String">
<value>0</value>
</setting>
<setting name="Channel1Strip" serializeAs="String">
<value>0</value>
</setting>
<setting name="Channel2Strip" serializeAs="String">
<value>0</value>
</setting>
<setting name="Channel3Strip" serializeAs="String">
<value>0</value>
</setting>
<setting name="Channel4Strip" serializeAs="String">
<value>0</value>
</setting>
<setting name="Channel5Strip" serializeAs="String">
<value>0</value>
</setting>
<setting name="AutoConnect" serializeAs="String">
<value>False</value>
</setting>
<setting name="MixerAutoConnect" serializeAs="String">
<value>False</value>
</setting>
</HidSliders.Gui.Properties.Settings>
<VoicemeeterSliders.Gui.Properties.Settings>
<setting name="VMVersion" serializeAs="String">
<value>0</value>

View File

@@ -16,9 +16,10 @@ public class ChannelControlCollection
public CheckBox BusB3Checkbox { get; }
public CheckBox SoloCheckBox { get; }
public CheckBox MuteCheckBox { get; }
public Label IndicatorLabel { get; }
public int CurrentStrip => (int)ChannelSelector.Value;
public ChannelControlCollection(NumericUpDown channelSelector, TrackBar trackBar, CheckBox busA1Checkbox, CheckBox busA2Checkbox, CheckBox busA3Checkbox, CheckBox busA4Checkbox, CheckBox busA5Checkbox, CheckBox busB1Checkbox, CheckBox busB2Checkbox, CheckBox busB3Checkbox, CheckBox soloCheckBox, CheckBox muteCheckBox)
public ChannelControlCollection(NumericUpDown channelSelector, TrackBar trackBar, CheckBox busA1Checkbox, CheckBox busA2Checkbox, CheckBox busA3Checkbox, CheckBox busA4Checkbox, CheckBox busA5Checkbox, CheckBox busB1Checkbox, CheckBox busB2Checkbox, CheckBox busB3Checkbox, CheckBox soloCheckBox, CheckBox muteCheckBox, Label indicatorLabel)
{
ChannelSelector = channelSelector;
TrackBar = trackBar;
@@ -40,6 +41,7 @@ public class ChannelControlCollection
BusB3Checkbox.Tag = VMBus.B3;
SoloCheckBox = soloCheckBox;
MuteCheckBox = muteCheckBox;
IndicatorLabel = indicatorLabel;
}
public void EnableBusses(RunVoicemeeterParam version)

View File

@@ -28,12 +28,15 @@
/// </summary>
private void InitializeComponent()
{
label1 = new Label();
components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
voicemeeterStatusLabel = new Label();
connectButton = new Button();
vmRadio = new RadioButton();
vmBananaRadio = new RadioButton();
vmPotatoRadio = new RadioButton();
groupBox1 = new GroupBox();
autoConnectCheckBox = new CheckBox();
button1 = new Button();
backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
trackBar1 = new TrackBar();
@@ -96,7 +99,15 @@
checkBox40 = new CheckBox();
checkBox41 = new CheckBox();
checkBox42 = new CheckBox();
checkBox43 = new CheckBox();
slider1Label = new Label();
slider2Label = new Label();
slider3Label = new Label();
slider4Label = new Label();
slider5Label = new Label();
groupBox2 = new GroupBox();
mixerAutoConnectCheckbox = new CheckBox();
mixerLabel = new Label();
notifyIcon1 = new NotifyIcon(components);
groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackBar1).BeginInit();
((System.ComponentModel.ISupportInitialize)trackBar2).BeginInit();
@@ -108,16 +119,17 @@
((System.ComponentModel.ISupportInitialize)numericUpDown3).BeginInit();
((System.ComponentModel.ISupportInitialize)numericUpDown4).BeginInit();
((System.ComponentModel.ISupportInitialize)numericUpDown5).BeginInit();
groupBox2.SuspendLayout();
SuspendLayout();
//
// label1
// voicemeeterStatusLabel
//
label1.AutoSize = true;
label1.Location = new Point(12, 224);
label1.Name = "label1";
label1.Size = new Size(38, 15);
label1.TabIndex = 0;
label1.Text = "label1";
voicemeeterStatusLabel.AutoSize = true;
voicemeeterStatusLabel.Location = new Point(88, 126);
voicemeeterStatusLabel.Name = "voicemeeterStatusLabel";
voicemeeterStatusLabel.Size = new Size(38, 15);
voicemeeterStatusLabel.TabIndex = 0;
voicemeeterStatusLabel.Text = "label1";
//
// connectButton
//
@@ -168,11 +180,12 @@
//
// groupBox1
//
groupBox1.Controls.Add(checkBox43);
groupBox1.Controls.Add(autoConnectCheckBox);
groupBox1.Controls.Add(vmRadio);
groupBox1.Controls.Add(vmPotatoRadio);
groupBox1.Controls.Add(vmBananaRadio);
groupBox1.Controls.Add(connectButton);
groupBox1.Controls.Add(voicemeeterStatusLabel);
groupBox1.Location = new Point(12, 12);
groupBox1.Name = "groupBox1";
groupBox1.Size = new Size(200, 154);
@@ -180,13 +193,23 @@
groupBox1.TabStop = false;
groupBox1.Text = "VoiceMeeter";
//
// autoConnectCheckBox
//
autoConnectCheckBox.AutoSize = true;
autoConnectCheckBox.Location = new Point(7, 97);
autoConnectCheckBox.Name = "autoConnectCheckBox";
autoConnectCheckBox.Size = new Size(143, 19);
autoConnectCheckBox.TabIndex = 71;
autoConnectCheckBox.Text = "Auto-connect on start";
autoConnectCheckBox.UseVisualStyleBackColor = true;
//
// button1
//
button1.Location = new Point(12, 198);
button1.Location = new Point(6, 22);
button1.Name = "button1";
button1.Size = new Size(75, 23);
button1.TabIndex = 6;
button1.Text = "button1";
button1.Text = "Connect";
button1.UseVisualStyleBackColor = true;
button1.Click += button1_Click;
//
@@ -257,7 +280,7 @@
//
// numericUpDown1
//
numericUpDown1.Location = new Point(218, 323);
numericUpDown1.Location = new Point(273, 323);
numericUpDown1.Maximum = new decimal(new int[] { 2, 0, 0, 0 });
numericUpDown1.Name = "numericUpDown1";
numericUpDown1.Size = new Size(45, 23);
@@ -266,7 +289,7 @@
//
// numericUpDown2
//
numericUpDown2.Location = new Point(333, 323);
numericUpDown2.Location = new Point(388, 323);
numericUpDown2.Maximum = new decimal(new int[] { 2, 0, 0, 0 });
numericUpDown2.Name = "numericUpDown2";
numericUpDown2.Size = new Size(45, 23);
@@ -275,7 +298,7 @@
//
// numericUpDown3
//
numericUpDown3.Location = new Point(444, 323);
numericUpDown3.Location = new Point(499, 323);
numericUpDown3.Maximum = new decimal(new int[] { 2, 0, 0, 0 });
numericUpDown3.Name = "numericUpDown3";
numericUpDown3.Size = new Size(45, 23);
@@ -284,7 +307,7 @@
//
// numericUpDown4
//
numericUpDown4.Location = new Point(555, 323);
numericUpDown4.Location = new Point(610, 323);
numericUpDown4.Maximum = new decimal(new int[] { 2, 0, 0, 0 });
numericUpDown4.Name = "numericUpDown4";
numericUpDown4.Size = new Size(45, 23);
@@ -293,7 +316,7 @@
//
// numericUpDown5
//
numericUpDown5.Location = new Point(666, 323);
numericUpDown5.Location = new Point(726, 323);
numericUpDown5.Maximum = new decimal(new int[] { 2, 0, 0, 0 });
numericUpDown5.Name = "numericUpDown5";
numericUpDown5.Size = new Size(45, 23);
@@ -878,21 +901,99 @@
checkBox42.Text = "A1";
checkBox42.UseVisualStyleBackColor = true;
//
// checkBox43
// slider1Label
//
checkBox43.AutoSize = true;
checkBox43.Location = new Point(7, 97);
checkBox43.Name = "checkBox43";
checkBox43.Size = new Size(100, 19);
checkBox43.TabIndex = 71;
checkBox43.Text = "Auto-connect";
checkBox43.UseVisualStyleBackColor = true;
slider1Label.AutoSize = true;
slider1Label.Location = new Point(218, 325);
slider1Label.Name = "slider1Label";
slider1Label.Size = new Size(39, 15);
slider1Label.TabIndex = 71;
slider1Label.Text = "0.0 dB";
//
// slider2Label
//
slider2Label.AutoSize = true;
slider2Label.Location = new Point(333, 325);
slider2Label.Name = "slider2Label";
slider2Label.Size = new Size(39, 15);
slider2Label.TabIndex = 72;
slider2Label.Text = "0.0 dB";
//
// slider3Label
//
slider3Label.AutoSize = true;
slider3Label.Location = new Point(444, 325);
slider3Label.Name = "slider3Label";
slider3Label.Size = new Size(39, 15);
slider3Label.TabIndex = 73;
slider3Label.Text = "0.0 dB";
//
// slider4Label
//
slider4Label.AutoSize = true;
slider4Label.Location = new Point(555, 325);
slider4Label.Name = "slider4Label";
slider4Label.Size = new Size(39, 15);
slider4Label.TabIndex = 74;
slider4Label.Text = "0.0 dB";
//
// slider5Label
//
slider5Label.AutoSize = true;
slider5Label.Location = new Point(666, 325);
slider5Label.Name = "slider5Label";
slider5Label.Size = new Size(39, 15);
slider5Label.TabIndex = 75;
slider5Label.Text = "0.0 dB";
//
// groupBox2
//
groupBox2.Controls.Add(mixerAutoConnectCheckbox);
groupBox2.Controls.Add(mixerLabel);
groupBox2.Controls.Add(button1);
groupBox2.Location = new Point(12, 172);
groupBox2.Name = "groupBox2";
groupBox2.Size = new Size(200, 100);
groupBox2.TabIndex = 76;
groupBox2.TabStop = false;
groupBox2.Text = "USB Mixer";
//
// mixerAutoConnectCheckbox
//
mixerAutoConnectCheckbox.AutoSize = true;
mixerAutoConnectCheckbox.Location = new Point(7, 51);
mixerAutoConnectCheckbox.Name = "mixerAutoConnectCheckbox";
mixerAutoConnectCheckbox.Size = new Size(143, 19);
mixerAutoConnectCheckbox.TabIndex = 8;
mixerAutoConnectCheckbox.Text = "Auto-connect on start";
mixerAutoConnectCheckbox.UseVisualStyleBackColor = true;
//
// mixerLabel
//
mixerLabel.AutoSize = true;
mixerLabel.Location = new Point(87, 26);
mixerLabel.Name = "mixerLabel";
mixerLabel.Size = new Size(38, 15);
mixerLabel.TabIndex = 7;
mixerLabel.Text = "label1";
//
// notifyIcon1
//
notifyIcon1.Icon = (Icon)resources.GetObject("notifyIcon1.Icon");
notifyIcon1.Text = "notifyIcon1";
notifyIcon1.Visible = true;
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(780, 363);
Controls.Add(groupBox2);
Controls.Add(slider5Label);
Controls.Add(slider4Label);
Controls.Add(slider3Label);
Controls.Add(slider2Label);
Controls.Add(slider1Label);
Controls.Add(checkBox33);
Controls.Add(checkBox34);
Controls.Add(checkBox35);
@@ -953,9 +1054,7 @@
Controls.Add(trackBar3);
Controls.Add(trackBar2);
Controls.Add(trackBar1);
Controls.Add(button1);
Controls.Add(groupBox1);
Controls.Add(label1);
Name = "Form1";
Text = "Form1";
FormClosing += Form1_FormClosing;
@@ -971,13 +1070,15 @@
((System.ComponentModel.ISupportInitialize)numericUpDown3).EndInit();
((System.ComponentModel.ISupportInitialize)numericUpDown4).EndInit();
((System.ComponentModel.ISupportInitialize)numericUpDown5).EndInit();
groupBox2.ResumeLayout(false);
groupBox2.PerformLayout();
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label label1;
private Label voicemeeterStatusLabel;
private Button connectButton;
private RadioButton vmRadio;
private RadioButton vmBananaRadio;
@@ -1045,6 +1146,15 @@
private CheckBox checkBox40;
private CheckBox checkBox41;
private CheckBox checkBox42;
private CheckBox checkBox43;
private CheckBox autoConnectCheckBox;
private Label slider1Label;
private Label slider2Label;
private Label slider3Label;
private Label slider4Label;
private Label slider5Label;
private GroupBox groupBox2;
private CheckBox mixerAutoConnectCheckbox;
private Label mixerLabel;
private NotifyIcon notifyIcon1;
}
}

View File

@@ -17,11 +17,11 @@ namespace HidSliders.Gui
InitializeComponent();
_channels = new List<ChannelControlCollection>
{
new (numericUpDown1, trackBar1, ch1A1Checkbox, ch1A2Checkbox, ch1A3Checkbox, ch1A4Checkbox, ch1A5Checkbox, ch1B1Checkbox, ch1B2Checkbox, ch1B3Checkbox, checkBox1, checkBox2),
new (numericUpDown2, trackBar2, checkBox12, checkBox11, checkBox10, checkBox9, checkBox8, checkBox7, checkBox6, checkBox5, checkBox4, checkBox3),
new (numericUpDown3, trackBar3, checkBox22, checkBox21, checkBox20, checkBox19, checkBox18, checkBox17, checkBox16, checkBox15, checkBox14, checkBox13),
new (numericUpDown4, trackBar4, checkBox32, checkBox31, checkBox30, checkBox29, checkBox28, checkBox27, checkBox26, checkBox25, checkBox24, checkBox23),
new (numericUpDown5, trackBar5, checkBox42, checkBox41, checkBox40, checkBox39, checkBox38, checkBox37, checkBox36, checkBox35, checkBox34, checkBox33),
new (numericUpDown1, trackBar1, ch1A1Checkbox, ch1A2Checkbox, ch1A3Checkbox, ch1A4Checkbox, ch1A5Checkbox, ch1B1Checkbox, ch1B2Checkbox, ch1B3Checkbox, checkBox1, checkBox2, slider1Label),
new (numericUpDown2, trackBar2, checkBox12, checkBox11, checkBox10, checkBox9, checkBox8, checkBox7, checkBox6, checkBox5, checkBox4, checkBox3, slider2Label),
new (numericUpDown3, trackBar3, checkBox22, checkBox21, checkBox20, checkBox19, checkBox18, checkBox17, checkBox16, checkBox15, checkBox14, checkBox13, slider3Label),
new (numericUpDown4, trackBar4, checkBox32, checkBox31, checkBox30, checkBox29, checkBox28, checkBox27, checkBox26, checkBox25, checkBox24, checkBox23, slider4Label),
new (numericUpDown5, trackBar5, checkBox42, checkBox41, checkBox40, checkBox39, checkBox38, checkBox37, checkBox36, checkBox35, checkBox34, checkBox33, slider5Label),
};
@@ -44,13 +44,25 @@ namespace HidSliders.Gui
_channels[3].ChannelSelector.Value = Properties.Settings.Default.Channel4Strip;
_channels[4].ChannelSelector.Value = Properties.Settings.Default.Channel5Strip;
if (Properties.Settings.Default.AutoConnect)
{
autoConnectCheckBox.Checked = true;
Task.Run(ConnectVoicemeeter).Wait();
}
var enumerator = new HidEnumerator();
var hidDevices = enumerator.Enumerate(0x0359, [0x6497]);
_hidDevice = hidDevices.FirstOrDefault();
label1.Text = $"Mixer {(_hidDevice?.IsConnected == true ? "" : "not ")}connected";
voicemeeterStatusLabel.Text = $"Mixer {(_hidDevice?.IsConnected == true ? "" : "not ")}connected";
if (_hidDevice?.IsConnected == true && Properties.Settings.Default.MixerAutoConnect)
{
UsbListenerLoop();
mixerAutoConnectCheckbox.Checked = true;
}
}
private async void connectButton_Click(object sender, EventArgs e)
private async Task ConnectVoicemeeter()
{
RunVoicemeeterParam version = RunVoicemeeterParam.None;
if (vmRadio.Checked)
@@ -71,9 +83,15 @@ namespace HidSliders.Gui
if (_vmClient != null)
{
EnableVMControls(version);
voicemeeterStatusLabel.Text = "Connected";
}
}
private async void connectButton_Click(object sender, EventArgs e)
{
await ConnectVoicemeeter();
}
private void EnableVMControls(RunVoicemeeterParam version)
{
foreach (var channel in _channels)
@@ -115,21 +133,19 @@ namespace HidSliders.Gui
Properties.Settings.Default.Save();
}
private async void button1_Click(object sender, EventArgs e)
private async void UsbListenerLoop()
{
if (_hidDevice == null) return;
var stopwatch = new Stopwatch();
mixerLabel.Text = "Mixer online";
while (true)
{
if (_hidDevice.IsConnected)
{
button1.Enabled = false;
stopwatch.Start();
//label1.Text = "waiting for report";
var progress = new Progress<string>();
progress.ProgressChanged += (o, s) => label1.Text = s;
progress.ProgressChanged += (o, s) => voicemeeterStatusLabel.Text = s;
var report = await Task.Run(() => _hidDevice.ReadReport());
var labelText = string.Empty;
if (report.ReadStatus == HidDeviceData.ReadStatus.Success)
{
var reportChunk = new byte[2];
@@ -138,15 +154,11 @@ namespace HidSliders.Gui
Array.Copy(report.Data, i * 2, reportChunk, 0, 2);
var sliderVal = BitConverter.ToInt16(reportChunk);
var gain = HidToGain(sliderVal);
labelText += $"Value {i}: {sliderVal} ({gain}dB)\n";
SetStripGain(_channels[i].CurrentStrip, gain);
_channels[i].TrackBar.Value = (int)gain;
_channels[i].IndicatorLabel.Text = $"{gain} dB";
}
}
stopwatch.Stop();
labelText += $"Report time: {stopwatch.ElapsedMilliseconds}ms";
stopwatch.Reset();
label1.Text = labelText;
//button1.Enabled = true;
}
else
@@ -156,6 +168,11 @@ namespace HidSliders.Gui
}
}
private void button1_Click(object sender, EventArgs e)
{
UsbListenerLoop();
}
private float HidToGain(int hidValue)
{
// adjusted regression of yamaha board is approx y = 5.8456 + 17.0486 * ln(x)
@@ -289,5 +306,34 @@ namespace HidSliders.Gui
SetChannelMute(channel.CurrentStrip, checkBox.Checked);
}
}
private void autoConnectCheckBox_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.AutoConnect = autoConnectCheckBox.Checked;
}
private void checkBox43_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.MixerAutoConnect = mixerAutoConnectCheckbox.Checked;
}
private void Form1_Resize(object sender, EventArgs e)
{
if (FormWindowState.Minimized == this.WindowState)
{
notifyIcon1.Visible = true;
this.Hide();
}
else if (FormWindowState.Normal == this.WindowState)
{
notifyIcon1.Visible = false;
}
}
private void notifyIcon1_Click(object sender, EventArgs e)
{
this.Show();
WindowState = FormWindowState.Normal;
}
}
}

View File

@@ -120,4 +120,91 @@
<metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="notifyIcon1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>179, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="notifyIcon1.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
RK5CYII=
</value>
</data>
</root>

View File

@@ -94,5 +94,29 @@ namespace HidSliders.Gui.Properties {
this["Channel5Strip"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool AutoConnect {
get {
return ((bool)(this["AutoConnect"]));
}
set {
this["AutoConnect"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool MixerAutoConnect {
get {
return ((bool)(this["MixerAutoConnect"]));
}
set {
this["MixerAutoConnect"] = value;
}
}
}
}

View File

@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="VoicemeeterSliders.Gui.Properties" GeneratedClassName="Settings">
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HidSliders.Gui.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="VMVersion" Type="System.Int32" Scope="User">
@@ -20,5 +20,11 @@
<Setting Name="Channel5Strip" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="AutoConnect" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="MixerAutoConnect" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
</Settings>
</SettingsFile>