public void TestBundle() { var listener = new UDPListener(55555); var sender1 = new SharpOSC.UDPSender("localhost", 55555); var msg1 = new SharpOSC.OscMessage("/test/address1", 23, 42.42f, "hello world", new byte[3] { 2, 3, 4 }); var msg2 = new SharpOSC.OscMessage("/test/address2", 34, 24.24f, "hello again", new byte[5] { 5, 6, 7, 8, 9 }); var dt = DateTime.Now; var bundle = new SharpOSC.OscBundle(Utils.DateTimeToTimetag(dt), msg1, msg2); sender1.Send(bundle); sender1.Send(bundle); sender1.Send(bundle); var recv = (OscBundle)listener.Receive(); recv = (OscBundle)listener.Receive(); recv = (OscBundle)listener.Receive(); Assert.AreEqual(dt.Date, recv.Timestamp.Date); Assert.AreEqual(dt.Hour, recv.Timestamp.Hour); Assert.AreEqual(dt.Minute, recv.Timestamp.Minute); Assert.AreEqual(dt.Second, recv.Timestamp.Second); //Assert.AreEqual(dt.Millisecond, recv.DateTime.Millisecond); Ventus not accurate enough Assert.AreEqual("/test/address1", recv.Messages[0].Address); Assert.AreEqual(4, recv.Messages[0].Arguments.Count); Assert.AreEqual(23, recv.Messages[0].Arguments[0]); Assert.AreEqual(42.42f, recv.Messages[0].Arguments[1]); Assert.AreEqual("hello world", recv.Messages[0].Arguments[2]); Assert.AreEqual(new byte[3] { 2, 3, 4 }, recv.Messages[0].Arguments[3]); Assert.AreEqual("/test/address2", recv.Messages[1].Address); Assert.AreEqual(4, recv.Messages[1].Arguments.Count); Assert.AreEqual(34, recv.Messages[1].Arguments[0]); Assert.AreEqual(24.24f, recv.Messages[1].Arguments[1]); Assert.AreEqual("hello again", recv.Messages[1].Arguments[2]); Assert.AreEqual(new byte[5] { 5, 6, 7, 8, 9 }, recv.Messages[1].Arguments[3]); listener.Close(); }
public void ListenerSingleMSG() { var listener = new UDPListener(55555); var sender = new SharpOSC.UDPSender("localhost", 55555); var msg = new SharpOSC.OscMessage("/test/", 23.42f); sender.Send(msg); while (true) { var pack = listener.Receive(); if (pack == null) { Thread.Sleep(1); } else { break; } } listener.Dispose(); }
public void TestMessage() { var listener = new UDPListener(55555); var sender = new SharpOSC.UDPSender("localhost", 55555); // Test every message type (except Symbol) var msg1 = new SharpOSC.OscMessage( "/test/address", 23, 42.42f, "hello world", new byte[3] { 2, 3, 4 }, -123456789123, new Timetag(DateTime.Now.Date).Tag, new Timetag(DateTime.Now.Date.AddMonths(1)), (double)1234567.890, new Symbol("wut wut"), (char)'x', new RGBA(20, 40, 60, 255), new Midi(3, 110, 55, 66), true, false, null, Double.PositiveInfinity ); OscMessage msgRevc = null; sender.Send(msg1); msgRevc = (OscMessage)listener.Receive(); Assert.NotNull(msgRevc); Assert.AreEqual("/test/address", msgRevc.Address); Assert.AreEqual(16, msgRevc.Arguments.Count); Assert.AreEqual(23, msgRevc.Arguments[0]); Assert.AreEqual(42.42f, msgRevc.Arguments[1]); Assert.AreEqual("hello world", msgRevc.Arguments[2]); Assert.AreEqual(new byte[3] { 2, 3, 4 }, msgRevc.Arguments[3]); Assert.AreEqual(-123456789123, msgRevc.Arguments[4]); Assert.AreEqual(new Timetag(DateTime.Now.Date), msgRevc.Arguments[5]); Assert.AreEqual(new Timetag(DateTime.Now.Date.AddMonths(1)), msgRevc.Arguments[6]); Assert.AreEqual((double)1234567.890, msgRevc.Arguments[7]); Assert.AreEqual(new Symbol("wut wut"), msgRevc.Arguments[8]); Assert.AreEqual((char)'x', msgRevc.Arguments[9]); Assert.AreEqual(new RGBA(20, 40, 60, 255), msgRevc.Arguments[10]); Assert.AreEqual(new Midi(3, 110, 55, 66), msgRevc.Arguments[11]); Assert.AreEqual(true, msgRevc.Arguments[12]); Assert.AreEqual(false, msgRevc.Arguments[13]); Assert.AreEqual(null, msgRevc.Arguments[14]); Assert.AreEqual(Double.PositiveInfinity, msgRevc.Arguments[15]); listener.Close(); }
public void CloseListener() { var l1 = new UDPListener(55555); var isnull = l1.Receive(); l1.Close(); var l2 = new UDPListener(55555); isnull = l2.Receive(); l2.Close(); }
void Update() { var bundle = li.Receive(); if (bundle != null) { //var msg = (bundle).Messages[0]; //Debug.Log(msg.Arguments[0].ToString()); Debug.Log(bundle); } }
public void CloseListener() { var l1 = new UDPListener(55555); var isnull = l1.Receive(); l1.Close(); var l2 = new UDPListener(55555); isnull = l2.Receive(); l2.Close(); }
public void TestBundle() { var listener = new UDPListener(55555); var sender1 = new SharpOSC.UDPSender("localhost", 55555); var msg1 = new SharpOSC.OscMessage("/test/address1", 23, 42.42f, "hello world", new byte[3] { 2, 3, 4 }); var msg2 = new SharpOSC.OscMessage("/test/address2", 34, 24.24f, "hello again", new byte[5] { 5, 6, 7, 8, 9 }); var dt = DateTime.Now; var bundle = new SharpOSC.OscBundle(Utils.DateTimeToTimetag(dt), msg1, msg2); sender1.Send(bundle); sender1.Send(bundle); sender1.Send(bundle); var recv = (OscBundle)listener.Receive(); recv = (OscBundle)listener.Receive(); recv = (OscBundle)listener.Receive(); Assert.AreEqual(dt.Date, recv.Timestamp.Date); Assert.AreEqual(dt.Hour, recv.Timestamp.Hour); Assert.AreEqual(dt.Minute, recv.Timestamp.Minute); Assert.AreEqual(dt.Second, recv.Timestamp.Second); //Assert.AreEqual(dt.Millisecond, recv.DateTime.Millisecond); Ventus not accurate enough Assert.AreEqual("/test/address1", recv.Messages[0].Address); Assert.AreEqual(4, recv.Messages[0].Arguments.Count); Assert.AreEqual(23, recv.Messages[0].Arguments[0]); Assert.AreEqual(42.42f, recv.Messages[0].Arguments[1]); Assert.AreEqual("hello world", recv.Messages[0].Arguments[2]); Assert.AreEqual(new byte[3] { 2, 3, 4 }, recv.Messages[0].Arguments[3]); Assert.AreEqual("/test/address2", recv.Messages[1].Address); Assert.AreEqual(4, recv.Messages[1].Arguments.Count); Assert.AreEqual(34, recv.Messages[1].Arguments[0]); Assert.AreEqual(24.24f, recv.Messages[1].Arguments[1]); Assert.AreEqual("hello again", recv.Messages[1].Arguments[2]); Assert.AreEqual(new byte[5] { 5, 6, 7, 8, 9 }, recv.Messages[1].Arguments[3]); listener.Close(); }
// Update is called once per frame void Update() { messageReceived = (OscMessage)listener.Receive(); if (messageReceived != null) { boxcollider.enabled = true; s = (string)messageReceived.Arguments[0]; string[] w = s.Split(','); x = -(Int32.Parse(w[0]) - 200); y = -(Int32.Parse(w[1]) - 240); v.Set(x, y, 10); rigidbody.MovePosition(v); } }
public void CloseListenerException() { UDPListener l1 = null; bool ex = false; try { l1 = new UDPListener(55555); var isnull = l1.Receive(); var l2 = new UDPListener(55555); } catch (Exception e) { ex = true; } Assert.IsTrue(ex); l1.Close(); }
public void ListenerLoadTest() { var listener = new UDPListener(55555); var sender = new SharpOSC.UDPSender("localhost", 55555); var msg = new SharpOSC.OscMessage("/test/", 23.42f); for (int i = 0; i < 1000; i++) sender.Send(msg); for (int i = 0; i < 1000; i++) { var receivedMessage = listener.Receive(); Assert.NotNull(receivedMessage); } listener.Dispose(); }
// Update is called once per frame protected void Update() { if (port == -1) { port = 12001; } OscBundle p = (OscBundle)listener.Receive(); if (p != null) { Debug.Log("Receiving OSC"); int count = 0; foreach (OscMessage m in p.Messages) { HandleOSCMeassage(m, count); count++; } } }
public void CloseListenerException() { UDPListener l1 = null; bool ex = false; try { l1 = new UDPListener(55555); var isnull = l1.Receive(); var l2 = new UDPListener(55555); } catch (Exception e) { ex = true; } Assert.IsTrue(ex); l1.Close(); }
public void ListenerLoadTest() { var listener = new UDPListener(55555); var sender = new SharpOSC.UDPSender("localhost", 55555); var msg = new SharpOSC.OscMessage("/test/", 23.42f); for (int i = 0; i < 1000; i++) { sender.Send(msg); } for (int i = 0; i < 1000; i++) { var receivedMessage = listener.Receive(); Assert.NotNull(receivedMessage); } listener.Dispose(); }
void Run() { while (!stopRequested) { var packet = listener.Receive(); if (packet != null) { lastPacketRecieved = DateTime.UtcNow; OnOSCMessageReceived(packet); } if (DateTime.UtcNow.Subtract(lastPacketRecieved).TotalMilliseconds > HANGUP_TIME) { lastPacketRecieved = DateTime.UtcNow; EmitData( new EEGEvent( DateTime.UtcNow, EEGDataType.CONTACT_QUALITY, new double[] { 4, 4, 4, 4 } ) ); } } }
public void TestMessage() { var listener = new UDPListener(55555); var sender = new SharpOSC.UDPSender("localhost", 55555); // Test every message type (except Symbol) var msg1 = new SharpOSC.OscMessage( "/test/address", 23, 42.42f, "hello world", new byte[3] { 2, 3, 4 }, -123456789123, new Timetag(DateTime.Now.Date).Tag, new Timetag(DateTime.Now.Date.AddMonths(1)), (double)1234567.890, new Symbol("wut wut"), (char)'x', new RGBA(20, 40, 60, 255), new Midi(3, 110, 55, 66), true, false, null, Double.PositiveInfinity ); OscMessage msgRevc = null; sender.Send(msg1); msgRevc = (OscMessage)listener.Receive(); Assert.NotNull(msgRevc); Assert.AreEqual("/test/address", msgRevc.Address); Assert.AreEqual(16, msgRevc.Arguments.Count); Assert.AreEqual(23, msgRevc.Arguments[0]); Assert.AreEqual(42.42f, msgRevc.Arguments[1]); Assert.AreEqual("hello world", msgRevc.Arguments[2]); Assert.AreEqual(new byte[3] { 2, 3, 4 }, msgRevc.Arguments[3]); Assert.AreEqual(-123456789123, msgRevc.Arguments[4]); Assert.AreEqual(new Timetag(DateTime.Now.Date), msgRevc.Arguments[5]); Assert.AreEqual(new Timetag(DateTime.Now.Date.AddMonths(1)), msgRevc.Arguments[6]); Assert.AreEqual((double)1234567.890, msgRevc.Arguments[7]); Assert.AreEqual(new Symbol("wut wut"), msgRevc.Arguments[8]); Assert.AreEqual((char)'x', msgRevc.Arguments[9]); Assert.AreEqual(new RGBA(20, 40, 60, 255), msgRevc.Arguments[10]); Assert.AreEqual(new Midi(3, 110, 55, 66), msgRevc.Arguments[11]); Assert.AreEqual(true, msgRevc.Arguments[12]); Assert.AreEqual(false, msgRevc.Arguments[13]); Assert.AreEqual(null, msgRevc.Arguments[14]); Assert.AreEqual(Double.PositiveInfinity, msgRevc.Arguments[15]); listener.Close(); }
public void ListenerSingleMSG() { var listener = new UDPListener(55555); var sender = new SharpOSC.UDPSender("localhost", 55555); var msg = new SharpOSC.OscMessage("/test/", 23.42f); sender.Send(msg); while (true) { var pack = listener.Receive(); if (pack == null) Thread.Sleep(1); else break; } listener.Dispose(); }
private void frmMain_Load(object sender, EventArgs e) { updateThread = new Thread(() => { var listener = new UDPListener(PORT); OscMessage messageReceived = null; int nameUpdateCounter = 0; Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); while (runThread == true) { /** * Tuning Packet Descriptor * Actual Value, Requested Value, IAccum, System Name */ if (!initCompleted) { //Initialize the connection sendIAccumReset(); initCompleted = true; } messageReceived = (OscMessage)listener.Receive(); if (messageReceived != null) { switch (messageReceived.Address) { case "/PIDData": try { double actualVal = (double)messageReceived.Arguments[0]; double requestedVal = (double)messageReceived.Arguments[1]; actualPoints.Add(actualVal); requestedPoints.Add(requestedVal); if (stopWatch.ElapsedMilliseconds > 200) { //Update TextBox UI Every 200ms to avoid slowing down the app double iAccum = (double)messageReceived.Arguments[2]; double err = requestedVal - actualVal; averageError.AddNumber(err); txtActualVal.Invoke((MethodInvoker) delegate { txtActualVal.Text = actualVal.ToString("0.####"); }); txtDesiredVal.Invoke((MethodInvoker) delegate { txtDesiredVal.Text = requestedVal.ToString("0.####"); }); txtDeviation.Invoke((MethodInvoker) delegate { txtDeviation.Text = err.ToString("0.####"); }); txtAverageDev.Invoke((MethodInvoker) delegate { txtAverageDev.Text = averageError.GetAverage().ToString("0.####"); }); txtIAccum.Invoke((MethodInvoker) delegate { txtIAccum.Text = iAccum.ToString("0.####"); }); if (nameUpdateCounter++ % 5 == 0) { txtSysName.Invoke((MethodInvoker) delegate { txtSysName.Text = (string)messageReceived.Arguments[3]; }); } if (messageCounter > 200) { sleepRate = 0; } else { sleepRate = (int)((200.0 / messageCounter) / 2.0); } messageCounter = 0; stopWatch.Restart(); } } catch (Exception) { } break; default: break; } messageCounter++; } if (sleepRate > 0) { Thread.Sleep(sleepRate); } } listener.Close(); }); updateThread.Start(); pidChart.Hoverable = false; pidChart.DisableAnimations = true; pidChart.DataTooltip = null; numkP.LostFocus += sendPIDUpdate; numkI.LostFocus += sendPIDUpdate; numkD.LostFocus += sendPIDUpdate; numkF.LostFocus += sendPIDUpdate; numAccel.LostFocus += sendPIDUpdate; numVel.LostFocus += sendPIDUpdate; numRamp.LostFocus += sendPIDUpdate; numIZone.LostFocus += sendPIDUpdate; numSetpoint.LostFocus += sendPIDUpdate; numMaxIAccum.LostFocus += sendPIDUpdate; numkP.KeyDown += checkEnter_Pressed; numkI.KeyDown += checkEnter_Pressed; numkD.KeyDown += checkEnter_Pressed; numkF.KeyDown += checkEnter_Pressed; numAccel.KeyDown += checkEnter_Pressed; numVel.KeyDown += checkEnter_Pressed; numRamp.KeyDown += checkEnter_Pressed; numIZone.KeyDown += checkEnter_Pressed; numSetpoint.KeyDown += checkEnter_Pressed; numMaxIAccum.KeyDown += checkEnter_Pressed; }
static void RunOptions(Options o) { Console.WriteLine("OSC will listen on port " + o.ListenPort + " and send to " + o.SendIp + ":" + o.SendPort + ""); remote.Login(); var listener = new UDPListener(o.ListenPort); var sender = new UDPSender(o.SendIp, o.SendPort); VoicemeeterType vmType = remote.GetVMType(); Console.WriteLine("Successfully connect to " + vmType + " version: " + remote.GetVMVersion()); while (true) { try { OscMessage messageReceived = (OscMessage)listener.Receive(); if (messageReceived != null) { // /vm/type/channel/cmd if (messageReceived.Address.StartsWith("/vm/")) { String[] d = messageReceived.Address.Split('/'); if (d[2] == "strip" || d[2] == "bus") { switch (d[4]) { case "gain": remote.SetParameterFloat(d[2] + "[" + d[3] + "].Gain", (float)messageReceived.Arguments[0]); break; case "mute": remote.SetParameterFloat(d[2] + "[" + d[3] + "].Mute", (float)messageReceived.Arguments[0]); break; } } } if (o.Verbose) { Console.WriteLine(messageReceived.Address + " = " + messageReceived.Arguments[0].ToString()); } } } catch (Exception e) { Console.WriteLine("Unknown exception occured: " + e.Message); } if (vmType.ToString() == VoicemeeterType.VOICEMEETER.ToString()) { } if (vmType.ToString() == VoicemeeterType.VOICEMEETER_BANANA.ToString()) { } if (vmType.ToString() == VoicemeeterType.VOICEMEETER_POATATO.ToString()) { } for (int i = 0; i < (vmType.PhysicalCount + vmType.VirtualCount); i++) { remote.IsParametersDirty(); sender.Send(new SharpOSC.OscMessage("/vm/bus/" + i.ToString() + "/gain", remote.GetParameterFloat("Bus[" + i.ToString() + "].Gain"))); sender.Send(new SharpOSC.OscMessage("/vm/bus/" + i.ToString() + "/mute", remote.GetParameterFloat("Bus[" + i.ToString() + "].Mute"))); sender.Send(new SharpOSC.OscMessage("/vm/bus/" + i.ToString() + "/level", 1, remote.GetLevel(VoicemeeterLevelType.OUTPUT, (VoicemeeterChannels)(i * vmType.PhysicalOutputChannelCount)))); sender.Send(new SharpOSC.OscMessage("/vm/bus/" + i.ToString() + "/level", 2, remote.GetLevel(VoicemeeterLevelType.OUTPUT, (VoicemeeterChannels)(i * vmType.PhysicalOutputChannelCount + 1)))); remote.IsParametersDirty(); sender.Send(new SharpOSC.OscMessage("/vm/strip/" + i.ToString() + "/gain", remote.GetParameterFloat("Strip[" + i.ToString() + "].Gain"))); sender.Send(new SharpOSC.OscMessage("/vm/strip/" + i.ToString() + "/mute", remote.GetParameterFloat("Strip[" + i.ToString() + "].Mute"))); sender.Send(new SharpOSC.OscMessage("/vm/strip/" + i.ToString() + "/label", stringOR(remote.GetParameterStringUNICODE("Strip[" + i.ToString() + "].Label"), "A" + (i + 1).ToString()))); sender.Send(new SharpOSC.OscMessage("/vm/strip/" + i.ToString() + "/level", 1, remote.GetLevel(VoicemeeterLevelType.INPUT_POST_MUTE, (VoicemeeterChannels)(i < vmType.PhysicalCount ? (i * vmType.PhysicalInputChannelCount + 0) : (vmType.PhysicalCount * 2 + (i - vmType.PhysicalCount) * vmType.VirtualChannelCount + 0))))); sender.Send(new SharpOSC.OscMessage("/vm/strip/" + i.ToString() + "/level", 2, remote.GetLevel(VoicemeeterLevelType.INPUT_POST_MUTE, (VoicemeeterChannels)(i < vmType.PhysicalCount ? (i * vmType.PhysicalInputChannelCount + 1) : (vmType.PhysicalCount * 2 + (i - vmType.PhysicalCount) * vmType.VirtualChannelCount + 1))))); } System.Threading.Thread.Sleep(10); } }
public void Update(object sender, DoWorkEventArgs e) { // Receive loop from Sharp OSC. while (true) { try { // If the receiver exists, then receive the packet. Skip if it's null. if (Receiver == null) { Thread.Sleep(1); continue; } OscPacket Packet = Receiver.Receive(); if (Packet == null) { Thread.Sleep(1); continue; } if (Packet.GetType().Name == "OscMessage") { // Get the next message. This receive will not block. OscMessage ReceivedMessage = (OscMessage)Packet; // Show any received Limelight values. if (ReceivedMessage.Address.Equals("/Robot/Limelight/X")) { Application.Current.Dispatcher.InvokeAsync(new Action(() => LimelightWidget.UpdateX((double)ReceivedMessage.Arguments[0]))); } if (ReceivedMessage.Address.Equals("/Robot/Limelight/Y")) { Application.Current.Dispatcher.InvokeAsync(new Action(() => LimelightWidget.UpdateY((double)ReceivedMessage.Arguments[0]))); } if (ReceivedMessage.Address.Equals("/Robot/Limelight/A")) { Application.Current.Dispatcher.InvokeAsync(new Action(() => LimelightWidget.UpdateA((double)ReceivedMessage.Arguments[0]))); } // Show any received Console values. if (ReceivedMessage.Address.Equals("/Robot/Console/Text")) { Application.Current.Dispatcher.InvokeAsync(new Action(() => ConsoleBox.PrintLine((string)ReceivedMessage.Arguments[0]))); } } else { // The packet is actually a bundle, and should be logged. OscBundle Bundle = (OscBundle)Packet; // Log the bundle data if the bundle ID contains the word log. if (((string)Bundle.Messages[0].Arguments[0]).Contains("Log")) { // Create the relevant data for the CSV file. string BundleIdentifier = ""; string HeaderLine = ""; string DataLine = ""; // Iterate through all the messages and generate the header and data rows. foreach (OscMessage Message in Bundle.Messages) { if (Message.Address.Equals("/BundleIdentifier")) { BundleIdentifier = (string)Message.Arguments[0]; continue; } HeaderLine += Message.Address + ","; DataLine += ((double)Message.Arguments[0]).ToString() + ","; } // Call the log data function. Application.Current.Dispatcher.InvokeAsync(new Action(() => LoggerWidget.LogData(BundleIdentifier, HeaderLine, DataLine))); } // If the bundle ID is "CurrentBundle" then send the data to the current widget. if (((string)Bundle.Messages[0].Arguments[0]).Equals("CurrentBundle")) { // Iterate through all the messages and generate the header and data rows. foreach (OscMessage Message in Bundle.Messages) { if (!Message.Address.Equals("/BundleIdentifier")) { Application.Current.Dispatcher.InvokeAsync(new Action(() => CurrentWidget.SetCurrentMeter((double)Message.Arguments[0], Message.Address))); } } } // If the bundle ID is "SensorInputBundle" then send the data to the current widget. if (((string)Bundle.Messages[0].Arguments[0]).Equals("SensorInputBundle")) { // Iterate through all the messages and generate the header and data rows. foreach (OscMessage Message in Bundle.Messages) { if (!Message.Address.Equals("/BundleIdentifier")) { Application.Current.Dispatcher.InvokeAsync(new Action(() => SensorInputWidget.SetSensorValue((double)Message.Arguments[0], Message.Address))); } } } // If the bundle ID is "ErrorBundle" then send the data to the error reporter. if (((string)Bundle.Messages[0].Arguments[0]).Equals("ErrorBundle")) { List <string> Errors = new List <string>(); // Iterate through all the messages and generate the header and data rows. foreach (OscMessage Message in Bundle.Messages) { if (!Message.Address.Equals("/BundleIdentifier")) { foreach (int Argument in Message.Arguments) { if (Argument != -1) { Errors.Add(ConvertErrorAddress(Message.Address) + ConvertFault(Argument)); } } } } Application.Current.Dispatcher.InvokeAsync(new Action(() => ErrorWidget.SetErrors(Errors))); } if (((string)Bundle.Messages[0].Arguments[0]).Equals("ControllerDataBundle")) { // Iterate through all the messages and save controller data. foreach (OscMessage Message in Bundle.Messages) { switch (Message.Address) { case "/BundleIdentifier": break; case "/DriverController/Buttons": foreach (int ButtonState in Message.Arguments) { } break; case "/DriverController/Axis": foreach (double AxisValue in Message.Arguments) { } break; case "/OperatorController/Buttons": foreach (int ButtonState in Message.Arguments) { } break; default: break; } } } } } catch (Exception Ex) { // Catch any exceptions. MessageBox.Show(Ex.Message + Ex.StackTrace, "OSC Receive Exception", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK); } } }
public Task TotalMixListener(string bus, string ip, int port) { bankSettingInputBus.Clear(); bankSettingPlaybackBus.Clear(); bankSettingOutputBus.Clear(); var listener = new UDPListener(settings.ListeningPort); OscBundle message = null; bool done = false; string snapRegEx = @"^\/$"; Regex r = new Regex(snapRegEx, RegexOptions.IgnoreCase); SendOscCommand("/1/bus" + bus, 1.0f, ip, port); while (done == false) { message = (OscBundle)listener.Receive(); if (message != null) { Match m = r.Match(message.Messages[0].Address); if (bus == "Input") { for (int i = 0; i < message.Messages.Count; i++) { if (bankSettingInputBus.ContainsKey(message.Messages[i].Address)) { bankSettingInputBus.Remove(message.Messages[i].Address); } bankSettingInputBus.Add(message.Messages[i].Address, message.Messages[i].Arguments[0].ToString()); } if ((m.Success && bankSettingInputBus.Count >= 5) || bankSettingInputBus.Count > 145) { break; } } if (bus == "Playback") { for (int i = 0; i < message.Messages.Count; i++) { if (bankSettingPlaybackBus.ContainsKey(message.Messages[i].Address)) { bankSettingPlaybackBus.Remove(message.Messages[i].Address); } bankSettingPlaybackBus.Add(message.Messages[i].Address, message.Messages[i].Arguments[0].ToString()); } break; } if (bus == "Output") { for (int i = 0; i < message.Messages.Count; i++) { if (bankSettingOutputBus.ContainsKey(message.Messages[i].Address)) { bankSettingOutputBus.Remove(message.Messages[i].Address); } bankSettingOutputBus.Add(message.Messages[i].Address, message.Messages[i].Arguments[0].ToString()); } break; } } } listener.Close(); return(Task.CompletedTask); }
public void poll() { OscBundle bundle = null; while (bundle == null) { bundle = (OscBundle)listener.Receive(); Thread.Sleep(1); } //Debug.Log("Received a bundle!"); List <OscMessage> messages = bundle.Messages; OscMessage lastMessage = bundle.Messages[bundle.Messages.Count - 1]; switch (lastMessage.Address) { case "/notes_receiver": Note note = new Note(); object midiNumber = lastMessage.Arguments[0]; object start = lastMessage.Arguments[1]; object duration = lastMessage.Arguments[2]; // Typecheck to make sure that message is intact if (midiNumber is int midiNumberInt) { note.MidiNumber = midiNumberInt; note.Start = (float)start; note.Duration = (float)duration; note.Starts.Add((float)start); note.Durations.Add((float)duration); individualNote = note; receivedNote = true; } break; case "/notes_complete": isDoneReceivingNotes = true; break; case "/chords_receiver": int i = 0; object commonName = lastMessage.Arguments[i]; // Typecheck to make sure that message is intact if (commonName is string commonNameString) { // Initialise chord object chord = new Chord(); chord.CommonName = commonNameString; // Add all subsequent ints (notes) to the chord object until separator "|" is hit object next = lastMessage.Arguments[++i]; while (next is int nextMidiNumberInt) { Note individualNote = new Note(nextMidiNumberInt); chord.AddNote(individualNote); next = lastMessage.Arguments[++i]; } // After notes (int) in OSC message it's beat and duration (floats) var chordStart = (float)next; next = lastMessage.Arguments[++i]; var chordDuration = (float)next; chord.Start = chordStart; chord.Duration = chordDuration; receivedChord = true; } break; } poll(); }