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
|
MIDIStateManager{
var <>verbose, <deviceStates;
*new{
arg verbose;
^super.newCopyArgs(verbose).initManager();
}
initManager{
deviceStates = Array();
}
// request a state
// if a stored and unconnected state is available return that, else return a
// new MIDIState
// TODO: improve search algorithm
requestState{
arg name, uid, inPortNum, outPortNum;
var devicePosition = -1, stateAvailable = false;
deviceStates.do({|storedDevice, i|
if((name == storedDevice.name) && (storedDevice.connected.not),{
stateAvailable = true;
devicePosition = i;
});
});
if(stateAvailable && (devicePosition >= 0),{
deviceStates[devicePosition].connected=true;
deviceStates[devicePosition].takeOver();
^deviceStates[devicePosition];
},{
deviceStates = deviceStates.add(
MIDIState.new(name, uid, inPortNum, outPortNum, verbose)
);
^deviceStates[deviceStates.size-1];
});
}
listStates{
deviceStates.do({|state, i|
postln(i.asString++": ["++state.name++", "++state.uid++", "
++state.inPortNum++", "++state.outPortNum++", "
++state.connected++"]");
});
}
}
|