summaryrefslogtreecommitdiff
path: root/tests/midiout.cpp
diff options
context:
space:
mode:
authorGary Scavone <gary@music.mcgill.ca>2013-10-11 14:49:10 +0200
committerStephen Sinclair <sinclair@music.mcgill.ca>2013-10-11 14:49:10 +0200
commiteeca35408122b9fc020139a20255f3c1ad8254cd (patch)
tree1cd66b9cf28691271c67a3ed1a424d1ccf407065 /tests/midiout.cpp
Version 1.0.0
Diffstat (limited to 'tests/midiout.cpp')
-rw-r--r--tests/midiout.cpp106
1 files changed, 106 insertions, 0 deletions
diff --git a/tests/midiout.cpp b/tests/midiout.cpp
new file mode 100644
index 0000000..32781b9
--- /dev/null
+++ b/tests/midiout.cpp
@@ -0,0 +1,106 @@
+//*****************************************//
+// midiout.cpp
+// by Gary Scavone, 2003-2004.
+//
+// Simple program to test MIDI output.
+//
+//*****************************************//
+
+#include <iostream>
+#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
+
+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);
+}
+
+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();
+ }
+ catch (RtError &error) {
+ error.printMessage();
+ 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();
+ }
+
+ try {
+ midiout->openPort( port );
+ //midiout->openVirtualPort();
+ }
+ catch (RtError &error) {
+ error.printMessage();
+ goto cleanup;
+ }
+
+ // Send out a series of MIDI messages.
+
+ // Program change: 192, 5
+ message.push_back( 192 );
+ message.push_back( 5 );
+ midiout->sendMessage( &message );
+
+ // Control Change: 176, 7, 100 (volume)
+ message[0] = 176;
+ message[1] = 7;
+ message.push_back( 100 );
+ midiout->sendMessage( &message );
+
+ // Note On: 144, 64, 90
+ message[0] = 144;
+ message[1] = 64;
+ message[2] = 90;
+ midiout->sendMessage( &message );
+
+ SLEEP( 500 );
+
+ // Note Off: 128, 64, 40
+ message[0] = 128;
+ message[1] = 64;
+ message[2] = 40;
+ midiout->sendMessage( &message );
+
+ // Sysex: 240, 67, 16, 4, 3, 2, 247
+ message[0] = 240;
+ message[1] = 67;
+ message[2] = 4;
+ message.push_back( 3 );
+ message.push_back( 2 );
+ message.push_back( 247 );
+ midiout->sendMessage( &message );
+
+ // Clean up
+ cleanup:
+ delete midiout;
+
+ return 0;
+}