diff options
author | David Runge <dave@sleepmap.de> | 2018-03-18 00:57:06 +0100 |
---|---|---|
committer | David Runge <dave@sleepmap.de> | 2018-03-18 00:57:06 +0100 |
commit | 6a213f643bcee208afe6f1808e7ce4b634e39852 (patch) | |
tree | 44f738a741ab1dd3fd4df01522455cff0facecf4 /classes/MIDIStateManager.sc | |
parent | 755cc2bc11e9c571c08df809935b68c5f4cf6652 (diff) | |
download | usbmidiism-6a213f643bcee208afe6f1808e7ce4b634e39852.tar.gz usbmidiism-6a213f643bcee208afe6f1808e7ce4b634e39852.tar.bz2 usbmidiism-6a213f643bcee208afe6f1808e7ce4b634e39852.tar.xz usbmidiism-6a213f643bcee208afe6f1808e7ce4b634e39852.zip |
Adding classes/MIDIState{,Manager}.sc, taking care of early stages of state management.
Making constructors more readable. Adding MIDIStateManager to USBMIDIIsm. Creating/recycling states for new and re-recognized MIDI devices.
Diffstat (limited to 'classes/MIDIStateManager.sc')
-rw-r--r-- | classes/MIDIStateManager.sc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/classes/MIDIStateManager.sc b/classes/MIDIStateManager.sc new file mode 100644 index 0000000..ec4b53c --- /dev/null +++ b/classes/MIDIStateManager.sc @@ -0,0 +1,41 @@ +MIDIStateManager{ + + var <deviceStates; + + *new{ + ^super.new.initManager(); + } + + initManager{ + deviceStates = Array(); + } + + // request a state + // if a stored and unconnected state is available return that, else return a + // new MIDIState + 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]; + },{ + deviceStates = deviceStates.add( + MIDIState.new(name, uid, inPortNum, outPortNum) + ); + ^deviceStates[deviceStates.size-1]; + }); + } + + listStates{ + deviceStates.do({|state, i| + postln(i.asString++": ["++state.name++", "++state.uid++", "++state.inPortNum++", "++state.outPortNum++", "++state.connected++"]"); + }); + } +} |