-
Notifications
You must be signed in to change notification settings - Fork 0
/
OSCHandler.cs
125 lines (109 loc) · 3.23 KB
/
OSCHandler.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Rug.Osc;
using System.Net;
namespace LeapTempoC.Objects
{
class OSCHandler :IDisposable
{
private IPAddress address;
private int port;
private readonly string tempoAddr = "/tempo";
private readonly string panAddr = "/pan";
private readonly string volumeAddr = "/volume";
private int lastSentTempo;
private double lastSentPan;
private double lastSentVolume;
public OSCHandler()
{
address = IPAddress.Parse("127.0.0.1");
port = 8590;
Initialize();
}
public OSCHandler(IPAddress addr, int p)
{
address = addr;
port = p;
Initialize();
}
public void Initialize()
{
lastSentPan = -1;
lastSentTempo = -1;
lastSentVolume = -1;
}
public void SendMessage(string str, int num)
{
var mess = new OscMessage(str, num);
using (OscSender sender = new OscSender(address, port))
{
sender.Connect();
sender.Send(mess);
}
}
public void SendTempo()
{
SendTempo(lastSentTempo);
}
public void SendTempo(int t)
{
if (t != lastSentTempo)
{
var mess = new OscMessage(tempoAddr, t);
Console.WriteLine(string.Format("Sending tempo {0}", t));
using (OscSender sender = new OscSender(address, port))
{
sender.Connect();
sender.Send(mess);
}
lastSentTempo = t;
}
}
public void SendPan(double p)
{
if (p != lastSentPan )
{
int val = (int)(p * 100);
var mess = new OscMessage(panAddr, val);
Console.WriteLine(string.Format("Sending pan {0}", val));
using (OscSender sender = new OscSender(address, port))
{
sender.Connect();
sender.Send(mess);
}
lastSentPan = p;
}
}
public void SendVolume(double v)
{
if (v != lastSentVolume)
{
int val = (int)(v * 100);
var mess = new OscMessage(volumeAddr, val);
Console.WriteLine(string.Format("Sending volume {0}", val));
using (OscSender sender = new OscSender(address, port))
{
sender.Connect();
sender.Send(mess);
}
lastSentPan = v;
}
}
public void SendFermata()
{
var mess = new OscMessage(tempoAddr, 0);
Console.WriteLine(string.Format("Sending tempo {0}", 0));
using (OscSender sender = new OscSender(address, port))
{
sender.Connect();
sender.Send(mess);
}
}
public void Dispose()
{
}
}
}