diff options
| author | Gary Scavone <gary@music.mcgill.ca> | 2013-10-11 14:49:10 +0200 |
|---|---|---|
| committer | Stephen Sinclair <sinclair@music.mcgill.ca> | 2013-10-11 14:49:10 +0200 |
| commit | 71b723e4cb7a1b641b5214306e56a1bca5b1b98c (patch) | |
| tree | 98830b2353d96dd99d449c0f34afa961c643a63d /tests | |
| parent | ca0e6a91d0c68ad51c8945f7b1c3a06274e90339 (diff) | |
Version 1.0.3
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/midiout.cpp | 80 |
1 files changed, 58 insertions, 22 deletions
diff --git a/tests/midiout.cpp b/tests/midiout.cpp index 32781b9..d8ecf7b 100644 --- a/tests/midiout.cpp +++ b/tests/midiout.cpp @@ -18,22 +18,16 @@ #define SLEEP( milliseconds ) usleep( (unsigned long) (milliseconds * 1000.0) ) #endif -void usage(void) { - // Error function in case of incorrect command-line - // argument specifications. - std::cout << "\nuseage: midiout <port>\n"; - std::cout << " where port = the device to use (default = 0).\n\n"; - exit(0); -} +// This function should be embedded in a try/catch block in case of +// an exception. It offers the user a choice of MIDI ports to open. +// It returns false if there are no ports available. +bool chooseMidiPort( RtMidi *rtmidi ); int main(int argc, char *argv[]) { RtMidiOut *midiout = 0; std::vector<unsigned char> message; - // Minimal command-line check. - if ( argc > 2 ) usage(); - // RtMidiOut constructor try { midiout = new RtMidiOut(); @@ -43,19 +37,9 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } - // Check available ports vs. specified. - unsigned int port = 0; - unsigned int nPorts = midiout->getPortCount(); - if ( argc == 2 ) port = (unsigned int) atoi( argv[1] ); - if ( port >= nPorts ) { - delete midiout; - std::cout << "Invalid port specifier!\n"; - usage(); - } - + // Call function to select port. try { - midiout->openPort( port ); - //midiout->openVirtualPort(); + if ( chooseMidiPort( midiout ) == false ) goto cleanup; } catch (RtError &error) { error.printMessage(); @@ -104,3 +88,55 @@ int main(int argc, char *argv[]) return 0; } + +bool chooseMidiPort( RtMidi *rtmidi ) +{ + bool isInput = false; + if ( typeid( *rtmidi ) == typeid( RtMidiIn ) ) + isInput = true; + + if ( isInput ) + std::cout << "\nWould you like to open a virtual input port? [y/N] "; + else + std::cout << "\nWould you like to open a virtual output port? [y/N] "; + + std::string keyHit; + std::getline( std::cin, keyHit ); + if ( keyHit == "y" ) { + rtmidi->openVirtualPort(); + return true; + } + + std::string portName; + unsigned int i = 0, nPorts = rtmidi->getPortCount(); + if ( nPorts == 0 ) { + if ( isInput ) + std::cout << "No input ports available!" << std::endl; + else + std::cout << "No output ports available!" << std::endl; + return false; + } + + if ( nPorts == 1 ) { + std::cout << "\nOpening " << rtmidi->getPortName() << std::endl; + } + else { + for ( i=0; i<nPorts; i++ ) { + portName = rtmidi->getPortName(i); + if ( isInput ) + std::cout << " Input port #" << i << ": " << portName << '\n'; + else + std::cout << " Output port #" << i << ": " << portName << '\n'; + } + + do { + std::cout << "\nChoose a port number: "; + std::cin >> i; + } while ( i >= nPorts ); + } + + std::cout << "\n"; + rtmidi->openPort( i ); + + return true; +} |
