| 
					
				 | 
			
			
				@@ -26,11 +26,6 @@ void usage( void ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   #define SLEEP( milliseconds ) usleep( (unsigned long) (milliseconds * 1000.0) ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// 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 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void mycallback( double deltatime, std::vector< unsigned char > *message, void *userData ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   unsigned int nBytes = message->size(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -64,10 +59,9 @@ int main( int argc, char *argv[] ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Don't ignore sysex, timing, or active sensing messages. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   midiin->ignoreTypes( false, true, true ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // Call function to select ports 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if ( chooseMidiPort( midiin ) == false ) goto cleanup; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if ( chooseMidiPort( midiout ) == false ) goto cleanup; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  midiin->openVirtualPort( "MyVirtualInputPort" ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  midiout->openPort( 0 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   catch ( RtMidiError &error ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     error.printMessage(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -80,18 +74,17 @@ int main( int argc, char *argv[] ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   midiout->sendMessage( &message ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   SLEEP( 500 ); // pause a little 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // Create a long sysex message of numbered bytes and send it out. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // Create a long sysex message of numbered bytes and send it out ... twice. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for ( int n=0; n<2; n++ ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  message.clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  message.push_back( 240 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  for ( i=0; i<nBytes; i++ ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    message.push_back( i % 128 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  message.push_back( 247 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  midiout->sendMessage( &message ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  SLEEP( 500 ); // pause a little 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message.clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message.push_back( 240 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for ( i=0; i<nBytes; i++ ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      message.push_back( i % 128 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    message.push_back( 247 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    midiout->sendMessage( &message ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    SLEEP( 500 ); // pause a little 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Clean up 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  cleanup: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -100,55 +93,3 @@ 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 << std::endl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  rtmidi->openPort( i ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 |