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 | eeca35408122b9fc020139a20255f3c1ad8254cd (patch) | |
| tree | 1cd66b9cf28691271c67a3ed1a424d1ccf407065 /tests/qmidiin.cpp | |
Version 1.0.0
Diffstat (limited to 'tests/qmidiin.cpp')
| -rw-r--r-- | tests/qmidiin.cpp | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/tests/qmidiin.cpp b/tests/qmidiin.cpp new file mode 100644 index 0000000..639820a --- /dev/null +++ b/tests/qmidiin.cpp @@ -0,0 +1,97 @@ +//*****************************************// +// qmidiin.cpp +// by Gary Scavone, 2003-2004. +// +// Simple program to test MIDI input and +// retrieval from the queue. +// +//*****************************************// + +#include <iostream> +#include <signal.h> +#include "RtMidi.h" + +// Platform-dependent sleep routines. +#if defined(__WINDOWS_MM__) + #include <windows.h> + #define SLEEP( milliseconds ) Sleep( (DWORD) milliseconds ) +#else // Unix variants + #include <unistd.h> + #define SLEEP( milliseconds ) usleep( (unsigned long) (milliseconds * 1000.0) ) +#endif + +bool done; +static void finish(int ignore){ done = true; } + +void usage(void) { + // Error function in case of incorrect command-line + // argument specifications. + std::cout << "\nuseage: qmidiin <port>\n"; + std::cout << " where port = the device to use (default = 0).\n\n"; + exit(0); +} + +int main(int argc, char *argv[]) +{ + RtMidiIn *midiin = 0; + std::vector<unsigned char> message; + int nBytes, i; + double stamp; + + // Minimal command-line check. + if ( argc > 2 ) usage(); + + // RtMidiIn constructor + try { + midiin = new RtMidiIn(); + } + catch (RtError &error) { + error.printMessage(); + exit(EXIT_FAILURE); + } + + // Check available ports vs. specified. + unsigned int port = 0; + unsigned int nPorts = midiin->getPortCount(); + if ( argc == 2 ) port = (unsigned int) atoi( argv[1] ); + if ( port >= nPorts ) { + delete midiin; + std::cout << "Invalid port specifier!\n"; + usage(); + } + + try { + midiin->openPort( port ); + } + catch (RtError &error) { + error.printMessage(); + goto cleanup; + } + + // Don't ignore sysex, timing, or active sensing messages. + midiin->ignoreTypes( false, false, false ); + + // Install an interrupt handler function. + done = false; + (void) signal(SIGINT, finish); + + // Periodically check input queue. + std::cout << "Reading MIDI from port ... quit with Ctrl-C.\n"; + while ( !done ) { + stamp = midiin->getMessage( &message ); + nBytes = message.size(); + for ( i=0; i<nBytes; i++ ) + std::cout << "Byte " << i << " = " << (int)message[i] << ", "; + if ( nBytes > 0 ) + std::cout << "stamp = " << stamp << '\n'; + + // Sleep for 10 milliseconds. + SLEEP( 10 ); + } + + // Clean up + cleanup: + delete midiin; + + return 0; +} |
