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; }
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(); }
public void SendOscMessage(OscEventArgs msg) { WriteDebug($"Sending OSC: {msg}"); OscOut.Send(new OscMessage(msg.Address, msg.Args)); }