-
Notifications
You must be signed in to change notification settings - Fork 1
/
MidiDevices.cs
134 lines (101 loc) · 3.36 KB
/
MidiDevices.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
126
127
128
129
130
131
132
133
134
using IntegraXL.Core;
using IntegraXL.Interfaces;
using MidiXL;
using System;
using System.Collections.Generic;
namespace IntegraEditorXL
{
public class MidiXLOutputDevice : IMIDIOutputDevice
{
private MidiOutputDevice _MidiOutputDevice;
public MidiXLOutputDevice(int id)
{
_MidiOutputDevice = DeviceManager.GetMidiOutputDevice(id);
ID = id;
Name = _MidiOutputDevice.Name;
}
#region Interfaces: IMidiOutputDevice
public int ID { get; private set; }
public string Name { get; private set; }
public IEnumerable<MidiXLOutputDevice> GetDevices
{
get
{
List<MidiXLOutputDevice> devices = new();
foreach (var device in DeviceManager.MidiOutputDevices)
{
devices.Add(new MidiXLOutputDevice(device.ID));
}
return devices;
}
}
public void Close()
{
_MidiOutputDevice.Close();
}
public void Open()
{
_MidiOutputDevice.Open();
}
public void SendLongMessage(byte[] data)
{
_MidiOutputDevice.Send(new SystemExclusiveMessage(data));
}
public void SendNoteOn(int channel, int note, int velocity)
{
_MidiOutputDevice.Send(new NoteOnMessage((MidiChannels)channel, note, velocity));
}
#endregion
}
public class MidiXLInputDevice : IMIDIInputDevice
{
private MidiInputDevice _MidiInputDevice;
public MidiXLInputDevice(int id)
{
_MidiInputDevice = DeviceManager.GetMidiInputDevice(id);
_MidiInputDevice.SystemExclusiveReceived += SystemExclusiveReceived;
_MidiInputDevice.UniversalNonRealTimeReceived += UniversalNonRealTimeReceived;
ID = id;
Name = _MidiInputDevice.Name;
}
private void UniversalNonRealTimeReceived(object sender, UniversalNonRealTimeMessageEventArgs e)
{
LongMessageEventHandler(sender, new LongMessageEventArgs(e.Message.Data));
}
private void SystemExclusiveReceived(object sender, SystemExclusiveMessageEventArgs e)
{
LongMessageEventHandler(sender, new LongMessageEventArgs(e.Message.Data));
}
#region Interfaces: IMidiInputDevice
public event EventHandler<LongMessageEventArgs> LongMessageReceived;
public int ID { get; private set; }
public string Name { get; private set; }
public IEnumerable<MidiXLInputDevice> GetDevices
{
get
{
List<MidiXLInputDevice> devices = new ();
foreach (var device in DeviceManager.MidiInputDevices)
devices.Add(new MidiXLInputDevice(device.ID) { Name = device.Name });
return devices;
}
}
public void Close()
{
_MidiInputDevice.Close();
}
public void Open()
{
_MidiInputDevice.Open();
}
public void Start()
{
_MidiInputDevice.Start();
}
public void LongMessageEventHandler(object sender, LongMessageEventArgs e)
{
LongMessageReceived?.Invoke(this, e);
}
#endregion
}
}