12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- //*****************************************//
- // 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 << "\nusage: 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;
- }
|