# HG changeset patch # User Andrew McPherson # Date 1385228849 0 # Node ID c0c62ccf4bfd406d482ad2808f7a067003423de7 # Parent 73703cb77094f19ada789e71bf262bf67ad66e31 Enable virtual MIDI output ports diff -r 73703cb77094 -r c0c62ccf4bfd Builds/MacOSX/TouchKeys.xcodeproj/project.xcworkspace/xcuserdata/apm.xcuserdatad/UserInterfaceState.xcuserstate Binary file Builds/MacOSX/TouchKeys.xcodeproj/project.xcworkspace/xcuserdata/apm.xcuserdatad/UserInterfaceState.xcuserstate has changed diff -r 73703cb77094 -r c0c62ccf4bfd Source/MainApplicationController.cpp --- a/Source/MainApplicationController.cpp Sat Nov 23 15:13:27 2013 +0000 +++ b/Source/MainApplicationController.cpp Sat Nov 23 17:47:29 2013 +0000 @@ -298,6 +298,19 @@ return newSegment; } +// Remove a MIDI keyboard segment. +void MainApplicationController::midiSegmentRemove(MidiKeyboardSegment *segment) { + if(segment == 0) + return; + // Check if this segment uses a virtual output port. Right now, we have a unique + // output per segment. If it does, then disable the virtual output port. + int identifier = segment->outputPort(); + if(midiOutputController_.enabledPort(identifier) == MidiOutputController::kMidiVirtualOutputPortNumber) + midiOutputController_.disablePort(identifier); + midiInputController_.removeSegment(segment); +} + + // Enable TouchKeys standalone mode void MainApplicationController::midiTouchkeysStandaloneModeEnable() { touchkeyStandaloneModeEnabled_ = true; diff -r 73703cb77094 -r c0c62ccf4bfd Source/MainApplicationController.h --- a/Source/MainApplicationController.h Sat Nov 23 15:13:27 2013 +0000 +++ b/Source/MainApplicationController.h Sat Nov 23 17:47:29 2013 +0000 @@ -162,9 +162,7 @@ // stored MidiKeyboardSegment* midiSegmentAdd(); // Remove a segment - void midiSegmentRemove(MidiKeyboardSegment *segment) { - midiInputController_.removeSegment(segment); - } + void midiSegmentRemove(MidiKeyboardSegment *segment); // Select MIDI input/output devices void enableMIDIInputPort(int portNumber) { diff -r 73703cb77094 -r c0c62ccf4bfd Source/TouchKeys/MidiOutputController.cpp --- a/Source/TouchKeys/MidiOutputController.cpp Sat Nov 23 15:13:27 2013 +0000 +++ b/Source/TouchKeys/MidiOutputController.cpp Sat Nov 23 17:47:29 2013 +0000 @@ -77,24 +77,30 @@ record.portNumber = deviceNumber; record.output = device; - activePorts_[identifier] = record;//{deviceNumber, device}; + activePorts_[identifier] = record; return true; } bool MidiOutputController::enableVirtualPort(int identifier, const char *name) { - /* + // Check if there is a port for this identifier, and disable it if so + if(activePorts_.count(identifier) > 0) + disablePort(identifier); + // Try to create a new port - MidiOutput* device = MidiOutput::createNewDevice(kMidiVirtualOutputName); - if(device == 0) + MidiOutput* device = MidiOutput::createNewDevice(name); + if(device == 0) { + cout << "Failed to enable MIDI virtual output port " << name << ")\n"; return false; + } - midiOut_ = device; - portNumber_ = kMidiVirtualOutputPortNumber; + MidiOutputControllerRecord record; + record.portNumber = kMidiVirtualOutputPortNumber; + record.output = device; + + activePorts_[identifier] = record; return true; - */ - return 0; // TODO: implement me } void MidiOutputController::disablePort(int identifier) { diff -r 73703cb77094 -r c0c62ccf4bfd Source/TouchKeys/TouchkeyEntropyGenerator.cpp --- a/Source/TouchKeys/TouchkeyEntropyGenerator.cpp Sat Nov 23 15:13:27 2013 +0000 +++ b/Source/TouchKeys/TouchkeyEntropyGenerator.cpp Sat Nov 23 17:47:29 2013 +0000 @@ -21,6 +21,7 @@ */ #include "TouchkeyEntropyGenerator.h" +#include TouchkeyEntropyGenerator::TouchkeyEntropyGenerator(PianoKeyboard& keyboard) : Thread("TouchkeyEntropyGenerator"), keyboard_(keyboard), @@ -28,7 +29,7 @@ keyboardRangeLow_(36), keyboardRangeHigh_(60), dataInterval_(milliseconds_to_timestamp(5.0)) { - sranddev(); + srand(time(NULL)); } // Start the thread handling the scheduling.