private static void ToggleVoiceMeeter(VmClient client, string paramCommand) { var vmVal = client.GetParam(paramCommand); var currentFlag = vmVal == 1; client.SetParam(paramCommand, currentFlag ? 0 : 1); }
VMManager() { client = new VmClient(); IsConnected = true; tmrCheckDirty = new Timer(); tmrCheckDirty.Elapsed += TmrCheckDirty_Elapsed; tmrCheckDirty.Interval = 10; tmrCheckDirty.Start(); }
public void Main() { tr.Elapsed += OnTime; vm = new VmClient(); tr.AutoReset = true; tr.Enabled = true; vL.cVol = VolumeLane.Vol.Music; Thread.Sleep(50); while (true) { while (cmd.Count == 0) { Thread.Sleep(1); } if (cmd[0] == 0xff) { break; } switch (cmd[0]) { case 0x29: case 0x2a: case 0x2b: SwitchVolOutput(cmd[0]); break; case 0x28: SwitchMute(); break; case 0x027: SwitchMode(); break; case 0x22: VolumeUp(vol); break; case 0x21: VolumeDown(vol); break; case 0x26: vm.SetParam("Command.Restart", 1.0f); break; case 0x23: vol = vol == 3 ? 1 : 3; break; } cmd.RemoveAt(0); } tr.Dispose(); vm.Dispose(); }
public VoiceMeeterControlFunction() { VmClient = new VmClient(); }
static void Main(string[] args) { _handler += new ConsoleCtrlHandlerDelegate(Handler); SetConsoleCtrlHandler(_handler, true); var internalConfig = args.Length > 0 && args[0] == "internal-config"; var confTxt = internalConfig ? LoadInternalConfig() : LoadConfig(); var config = ConfigParsing.ParseConfig(confTxt); var inputMap = config.Bindings.Where(x => (x.Dir & BindingDir.FromBoard) != 0).ToDictionary(x => x.ControlId); using (var od = new OutputDevice(GetMidiOutputDevice(config.DeviceName))) using (var id = new InputDevice(GetMidiInputDevice(config.DeviceName))) using (var vb = new VmClient()) { disps.Add(vb); disps.Add(id); disps.Add(od); //voicemeeter doesn't have midi bindings for arm/disarm recording. We'll do it ourselves. //Note that the voicemeeter UI doesn't update until you start recording something. Console.WriteLine("All initialised"); id.ChannelMessageReceived += (ob, e) => { var m = e.Message; if (m.MessageType == MessageType.Channel && m.Command == ChannelCommand.Controller) { if (inputMap.ContainsKey(m.Data1)) { var v = inputMap[m.Data1]; if (v.ControlToggle && m.Data2 == v.ControlTo) { var current = vb.GetParam(v.VoicemeeterParam); vb.SetParam(v.VoicemeeterParam, v.VmTo - current); } else if (!v.ControlToggle) { var scaledVal = Scale(m.Data2, v.ControlFrom, v.ControlTo, v.VmFrom, v.VmTo); vb.SetParam(v.VoicemeeterParam, scaledVal); } } } }; id.StartRecording(); vb.OnClose(() => { foreach (var x in config.Bindings.Where(x => (x.Dir & BindingDir.ToBoard) != 0)) { od.Send(new ChannelMessage(ChannelCommand.Controller, 0, x.ControlId, (int)x.ControlFrom)); } }); while (!shouldStop) { if (vb.Poll()) { foreach (var x in config.Bindings.Where(x => (x.Dir & BindingDir.ToBoard) != 0)) { var vmVal = vb.GetParam(x.VoicemeeterParam); var scaled = Scale(vmVal, x.VmFrom, x.VmTo, x.ControlFrom, x.ControlTo); od.Send(new ChannelMessage(ChannelCommand.Controller, 0, x.ControlId, (int)scaled)); } } else { Thread.Sleep(20); } } } }
private void Form1_Load(object sender, EventArgs e) { //defaulting to Banana setStrings(isPotato); DialogResult r; VMInit: while (true) { try { vm = new VmClient(); Thread.Sleep(100); if (!vm.Poll()) { throw new Exception(); } break; } catch (Exception ex) { r = MessageBox.Show("Couldn't connect to VoiceMeeter!\nIs it running?", "Error", MessageBoxButtons.RetryCancel); if (r == DialogResult.Cancel) { start = StartResult.VM; this.Close(); return; } } } while (true) { try { ti = new TelnetConnection("localhost", 25639); //hardcoding for now string fileName = String.Format(@"{0}\TS_API_key", Application.StartupPath); if (!File.Exists(fileName) || new FileInfo(fileName).Length == 0) { //this.Hide(); InputAuthKey inputAuthKey = new InputAuthKey(); inputAuthKey.ShowDialog(); inputAuthKey.VisibleChanged += InputAuthKey_VisibleChanged; } if (File.Exists(fileName)) { TS_API_KEY = File.ReadAllText(fileName); } else { TS_API_KEY = "ERROR"; } //TS_API_KEY = "TJP8-5MKV-B1DG-HWM2-3X6Z-Q99B"; ti.WriteLine("auth apikey=" + TS_API_KEY); //Console.WriteLine(ti.Read()); break; } catch (Exception ex) { r = MessageBox.Show("Couldn't connect to TeamSpeak!\nIs it running?", "Error", MessageBoxButtons.RetryCancel); if (r == DialogResult.Cancel) { start = StartResult.TS; this.Close(); return; } } } if (!(ti.Read().Contains("error id=0 msg=ok"))) { r = MessageBox.Show("Couldn't connect to TeamSpeak!\nThe API key was not accepted. Do you want to reenter it?", "Error", MessageBoxButtons.OKCancel); if (r == DialogResult.Cancel) { start = StartResult.Success; this.Close(); return; } else { InputAuthKey inputAuthKey = new InputAuthKey(); inputAuthKey.ShowDialog(); inputAuthKey.VisibleChanged += InputAuthKey_VisibleChanged; } } else { Console.WriteLine("Successfully connected to TeamSpeak!"); } //Get all active TeamSpeak sessions. We'll only be using the first two, but we'll query anyway in case the user has closed tabs before. while (true) { try { ti.WriteLine("serverconnectionhandlerlist"); string serverconnectionhandler_result = ti.Read(); List <int> conn = new List <int>(); foreach (char c in serverconnectionhandler_result) { if (Char.GetNumericValue(c) > 0.0) { conn.Add((int)Char.GetNumericValue(c)); } } TSConnection1 = conn[0]; TSConnection2 = conn[1]; break; } catch { r = MessageBox.Show("Please confirm that you have two open TeamSpeak tabs.", "Error", MessageBoxButtons.RetryCancel); if (r == DialogResult.Cancel) { start = StartResult.Success; this.Close(); return; } } } //conn.ForEach(Console.WriteLine); getDefaultVoiceMeeter(); }
static void Main(string[] args) { var isCanceled = false; Console.CancelKeyPress += (sender, eventArgs) => { Console.WriteLine("Got the Ctrl-C"); isCanceled = true; eventArgs.Cancel = true; }; var deviceName = "X"; var vb = new VmClient(); var od = new OutputDevice(GetMidiOutputDevice(deviceName)); var id = new InputDevice(GetMidiInputDevice(deviceName)); for (int channel = 1; channel <= 8; channel++) { od.Send(new ChannelMessage(ChannelCommand.Controller, 0, channel, 0)); } //UpdateCCVoiceMeter(vb, "Bus[0].Gain", 116); //UpdateCCVoiceMeter(vb, "Bus[1].Gain", 89); //UpdateCCVoiceMeter(vb, "Bus[2].Gain", 0); //UpdateCCVoiceMeter(vb, "Bus[3].Gain", 127, 12.0f); //UpdateCCVoiceMeter(vb, "Bus[4].Gain", 127, 12.0f); //UpdateCCVoiceMeter(vb, "Strip[0].Gain", 102); //UpdateCCVoiceMeter(vb, "Strip[1].Gain", 102); //UpdateCCVoiceMeter(vb, "Strip[2].Gain", 127, 12.0f); //UpdateCCVoiceMeter(vb, "Strip[3].Gain", 102); //UpdateCCVoiceMeter(vb, "Strip[4].Gain", 102); id.ChannelMessageReceived += (ob, e) => { var m = e.Message; if (m.MessageType == MessageType.Channel && m.Command == ChannelCommand.NoteOff) { float vmVal; switch (m.Data1) { case 8: ToggleVoiceMeeter(vb, "Strip[0].B1"); break; case 16: ToggleVoiceMeeter(vb, "Strip[0].B2"); break; case 9: ToggleVoiceMeeter(vb, "Strip[1].B1"); break; case 17: ToggleVoiceMeeter(vb, "Strip[1].B2"); break; case 10: ToggleVoiceMeeter(vb, "Strip[2].B1"); break; case 18: ToggleVoiceMeeter(vb, "Strip[2].B2"); break; case 12: ToggleVoiceMeeter(vb, "Strip[3].A1"); break; case 20: ToggleVoiceMeeter(vb, "Strip[3].A2"); break; case 13: ToggleVoiceMeeter(vb, "Strip[4].A1"); break; case 21: ToggleVoiceMeeter(vb, "Strip[4].A2"); break; case 14: ToggleVoiceMeeter(vb, "Bus[0].Mute"); break; case 15: ToggleVoiceMeeter(vb, "Bus[1].Mute"); break; case 23: ToggleVoiceMeeter(vb, "Bus[2].Mute"); break; } } else if (m.MessageType == MessageType.Channel && m.Command == ChannelCommand.Controller) { switch (m.Data1) { case 1: // CC1 UpdateCCVoiceMeter(vb, "Strip[0].Gain", m.Data2); break; case 2: // CC2 UpdateCCVoiceMeter(vb, "Strip[1].Gain", m.Data2); break; case 3: UpdateCCVoiceMeter(vb, "Strip[2].Gain", m.Data2); //UpdateCCVoiceMeter(vb, "Strip[2].Gain", m.Data2, 12.0f); break; case 5: UpdateCCVoiceMeter(vb, "Strip[3].Gain", m.Data2); break; case 6: UpdateCCVoiceMeter(vb, "Strip[4].Gain", m.Data2); break; case 7: UpdateCCVoiceMeter(vb, "Bus[0].Gain", m.Data2); break; case 8: UpdateCCVoiceMeter(vb, "Bus[1].Gain", m.Data2); break; case 9: UpdateCCVoiceMeter(vb, "Bus[2].Gain", m.Data2); break; } } }; id.StartRecording(); while (!isCanceled) { if (vb.Poll()) { //strip 0 var vmVal = vb.GetParam($"Strip[0].B1"); od.Send(new ChannelMessage(ChannelCommand.NoteOn, 0, 0, (int)vmVal)); vmVal = vb.GetParam($"Strip[0].B2"); od.Send(new ChannelMessage(ChannelCommand.NoteOn, 0, 8, (int)vmVal)); //strip 1 vmVal = vb.GetParam($"Strip[1].B1"); od.Send(new ChannelMessage(ChannelCommand.NoteOn, 0, 1, (int)vmVal)); vmVal = vb.GetParam($"Strip[1].B2"); od.Send(new ChannelMessage(ChannelCommand.NoteOn, 0, 9, vmVal == 1 ? 2 : 0)); //strip 2 vmVal = vb.GetParam($"Strip[2].B1"); od.Send(new ChannelMessage(ChannelCommand.NoteOn, 0, 2, (int)vmVal)); vmVal = vb.GetParam($"Strip[2].B2"); od.Send(new ChannelMessage(ChannelCommand.NoteOn, 0, 10, vmVal == 1 ? 2 : 0)); //strip 3 vmVal = vb.GetParam($"Strip[3].A1"); od.Send(new ChannelMessage(ChannelCommand.NoteOn, 0, 4, (int)vmVal)); vmVal = vb.GetParam($"Strip[3].A2"); od.Send(new ChannelMessage(ChannelCommand.NoteOn, 0, 12, (int)vmVal)); //strip 4 vmVal = vb.GetParam($"Strip[4].A1"); od.Send(new ChannelMessage(ChannelCommand.NoteOn, 0, 5, (int)vmVal)); vmVal = vb.GetParam($"Strip[4].A2"); od.Send(new ChannelMessage(ChannelCommand.NoteOn, 0, 13, (int)vmVal)); //Bus 0 vmVal = vb.GetParam($"Bus[0].Mute"); od.Send(new ChannelMessage(ChannelCommand.NoteOn, 0, 6, vmVal == 1 ? 2 : 0)); vmVal = vb.GetParam($"Bus[1].Mute"); od.Send(new ChannelMessage(ChannelCommand.NoteOn, 0, 7, vmVal == 1 ? 2 : 0)); vmVal = vb.GetParam($"Bus[2].Mute"); od.Send(new ChannelMessage(ChannelCommand.NoteOn, 0, 15, vmVal == 1 ? 2 : 0)); } Thread.Sleep(20); } id.Dispose(); od.Dispose(); vb.Dispose(); }
private static void UpdateCCVoiceMeter(VmClient client, string stripCommand, float value, float fromMin, float fromMax, float toMin, float toMax) { var scaledVal = Scale(value, fromMin, fromMax, toMin, toMax); client.SetParam(stripCommand, scaledVal); }
private static void UpdateCCVoiceMeter(VmClient client, string stripCommand, int value, float toMax = 0.0f) { UpdateCCVoiceMeter(client, stripCommand, value, 0, 127, -60, toMax); }