private static void ToggleVoiceMeeter(VmClient client, string paramCommand)
        {
            var vmVal       = client.GetParam(paramCommand);
            var currentFlag = vmVal == 1;

            client.SetParam(paramCommand, currentFlag ? 0 : 1);
        }
Exemplo n.º 2
0
 VMManager()
 {
     client                 = new VmClient();
     IsConnected            = true;
     tmrCheckDirty          = new Timer();
     tmrCheckDirty.Elapsed += TmrCheckDirty_Elapsed;
     tmrCheckDirty.Interval = 10;
     tmrCheckDirty.Start();
 }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
0
 public VoiceMeeterControlFunction()
 {
     VmClient = new VmClient();
 }
Exemplo n.º 5
0
        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);
                            }
                        }
                    }
        }
Exemplo n.º 6
0
        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);
 }