Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.93 KB | None | 0 0
  1. //*****************************************//
  2. //  midiout.cpp
  3. //  by Gary Scavone, 2003-2004.
  4. //
  5. //  Simple program to test MIDI output.
  6. //
  7. //*****************************************//
  8.  
  9. #include <iostream>
  10. #include <cstdlib>
  11. #include "RtMidi.h"
  12.  
  13. // Platform-dependent sleep routines.
  14. #if defined(__WINDOWS_MM__)
  15.   #include <windows.h>
  16.   #define SLEEP( milliseconds ) Sleep( (DWORD) milliseconds )
  17. #else // Unix variants
  18.   #include <unistd.h>
  19.   #define SLEEP( milliseconds ) usleep( (unsigned long) (milliseconds * 1000.0) )
  20. #endif
  21.  
  22. // This function should be embedded in a try/catch block in case of
  23. // an exception.  It offers the user a choice of MIDI ports to open.
  24. // It returns false if there are no ports available.
  25. bool chooseMidiPort( RtMidiOut *rtmidi );
  26. using namespace std;
  27. int main( int argc, char *argv[] )
  28. {
  29.   RtMidiOut *midiout = 0;
  30.   std::vector<unsigned char> message;
  31.  
  32.   // RtMidiOut constructor
  33.   try {
  34.     midiout = new RtMidiOut();
  35.   }
  36.   catch ( RtError &error ) {
  37.     error.printMessage();
  38.     exit( EXIT_FAILURE );
  39.   }
  40.  
  41.   // Call function to select port.
  42.   try {
  43.     if ( chooseMidiPort( midiout ) == false ) goto cleanup;
  44.   }
  45.   catch ( RtError &error ) {
  46.     error.printMessage();
  47.     goto cleanup;
  48.   }
  49.         // Program change: 192, 5
  50.     message.push_back( 192 );
  51.     message.push_back( 5 );
  52.     midiout->sendMessage( &message );
  53.  
  54.     // Control Change: 176, 7, 100 (volume)
  55.     message[0] = 176;
  56.     message[1] = 7;
  57.     message.push_back( 100 );
  58.     midiout->sendMessage( &message );
  59. while (1){
  60.  
  61.  
  62.   int keyin;
  63.   cout << "enter a number 1 2 or 3" << endl;
  64.   cin >> keyin;
  65.  
  66.   if (keyin == 1)
  67.   {
  68.     // Send out a series of MIDI messages.
  69.  
  70.  
  71.     // Note On: 144, 64, 90
  72.     message[0] = 144;
  73.     message[1] = 64;
  74.     message[2] = 90;
  75.     midiout->sendMessage( &message );
  76.  
  77.     SLEEP( 500 );
  78.  
  79.     // Note Off: 128, 64, 40
  80.     message[0] = 128;
  81.     message[1] = 64;
  82.     message[2] = 40;
  83.     midiout->sendMessage( &message );
  84.  
  85.  
  86.   }
  87.   else if (keyin ==2)
  88.   {
  89.     // Send out a series of MIDI messages.
  90.  
  91.  
  92.  
  93.     // Note On: 144, 77, 90
  94.     message[0] = 144;
  95.     message[1] = 77;
  96.     message[2] = 90;
  97.     midiout->sendMessage( &message );
  98.  
  99.     SLEEP( 500 );
  100.  
  101.     // Note Off: 128, 77, 40
  102.     message[0] = 128;
  103.     message[1] = 77;
  104.     message[2] = 40;
  105.     midiout->sendMessage( &message );
  106.  
  107.   }
  108.   else if (keyin == 3)
  109.   {
  110.         // Send out a series of MIDI messages.
  111.  
  112.  
  113.  
  114.     // Note On: 144, 55, 90
  115.     message[0] = 144;
  116.     message[1] = 55;
  117.     message[2] = 90;
  118.     midiout->sendMessage( &message );
  119.  
  120.     SLEEP( 500 );
  121.  
  122.     // Note Off: 128, 55, 40
  123.     message[0] = 128;
  124.     message[1] = 55;
  125.     message[2] = 40;
  126.     midiout->sendMessage( &message );
  127.   }
  128.    
  129. }
  130.     // Sysex: 240, 67, 16, 4, 3, 2, 247
  131.     message[0] = 240;
  132.     message[1] = 67;
  133.     message[2] = 4;
  134.     message.push_back( 3 );
  135.     message.push_back( 2 );
  136.     message.push_back( 247 );
  137.     midiout->sendMessage( &message );
  138.   // Clean up
  139.  cleanup:
  140.   delete midiout;
  141.  
  142.  
  143.   return 0;
  144. }
  145.  
  146. bool chooseMidiPort( RtMidiOut *rtmidi )
  147. {
  148.   std::cout << "\nWould you like to open a virtual output port? [y/N] ";
  149.  
  150.   std::string keyHit;
  151.   std::getline( std::cin, keyHit );
  152.   if ( keyHit == "y" ) {
  153.     rtmidi->openVirtualPort();
  154.     return true;
  155.   }
  156.  
  157.   std::string portName;
  158.   unsigned int i = 0, nPorts = rtmidi->getPortCount();
  159.   if ( nPorts == 0 ) {
  160.     std::cout << "No output ports available!" << std::endl;
  161.     return false;
  162.   }
  163.  
  164.   if ( nPorts == 1 ) {
  165.     std::cout << "\nOpening " << rtmidi->getPortName() << std::endl;
  166.   }
  167.   else {
  168.     for ( i=0; i<nPorts; i++ ) {
  169.       portName = rtmidi->getPortName(i);
  170.       std::cout << "  Output port #" << i << ": " << portName << '\n';
  171.     }
  172.  
  173.     do {
  174.       std::cout << "\nChoose a port number: ";
  175.       std::cin >> i;
  176.     } while ( i >= nPorts );
  177.   }
  178.  
  179.   std::cout << "\n";
  180.   rtmidi->openPort( i );
  181.  
  182.   return true;
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement