コード例 #1
0
        private void HostOnOscMessageReceived(object sender, OscEventArgs e)
        {
            // reacts to track messages, extracting track number and name and adds it to 'Tracks' list
            var m = Regex.Match(e.Address, "/track(/(?<trackNo>[0-9]+))?/name");

            if (!m.Success)
            {
                return;
            }

            var trackNoStr = m.Groups["trackNo"].Value;
            var trackNo    = String.IsNullOrEmpty(trackNoStr) ? 0 : int.Parse(trackNoStr);

            if (trackNo == 0)
            {
                return;
            }
            var trackName = (string)e.Args[0];

            var track = Tracks.FirstOrDefault(t => t.Id == trackNo);

            if (track == null)
            {
                track = new TrackInfo();
                Tracks.Add(track);
            }
            track.Id   = trackNo;
            track.Name = trackName;
        }
コード例 #2
0
        protected override void OnStart(string[] args)
        {
            MidiIn = CreateMidiIn(Settings.Default.InputMidiDevice);

            OscOut = new OscSender(IPAddress.Parse(Settings.Default.OscHost), 0, Settings.Default.OscPortOut);
            OscOut.Connect();

            OscIn = new OscReceiver(IPAddress.Parse(Settings.Default.OscHost), Settings.Default.OscPortIn);
            Task.Run(() =>
            {
                OscIn.Connect();
                var running = true;
                while (running)
                {
                    try
                    {
                        var packet   = OscIn.Receive();
                        var messages = ExplodeBundle(packet);
                        foreach (var message in messages)
                        {
                            try
                            {
                                var msg = new OscEventArgs(message.Address, message.ToArray());
                                WriteDebug($"Got OSC: {msg}");
                                OscMessageReceived?.Invoke(this, msg);
                            }
                            catch
                            {
                                // ignore
                            }
                        }
                    }
                    catch
                    {
                        running = false;
                    }
                }
            });

            LoadPlugins();
        }
コード例 #3
0
 public void SendOscMessage(OscEventArgs msg)
 {
     WriteDebug($"Sending OSC: {msg}");
     OscOut.Send(new OscMessage(msg.Address, msg.Args));
 }