Ver código fonte

Reverted sysextest.cpp to previous version and added warning flag to configure.ac

Gary Scavone 11 anos atrás
pai
commit
b07a6e0432
2 arquivos alterados com 61 adições e 4 exclusões
  1. 2 2
      configure.ac
  2. 59 2
      tests/sysextest.cpp

+ 2 - 2
configure.ac

@@ -27,7 +27,7 @@ AC_ARG_ENABLE(debug,
   [AC_SUBST( cppflag, [] ) AC_SUBST( cxxflag, [-O3] ) AC_SUBST( object_path, [Release] ) AC_MSG_RESULT(no)])
 
 # Set paths if prefix is defined
-if test x"$prefix" != x && test x$prefix != xNONE; then
+if test "x$prefix" != "x" && test "x$prefix" != "xNONE"; then
   LIBS="$LIBS -L$prefix/lib"
   CPPFLAGS="$CPPFLAGS -I$prefix/include"
 fi
@@ -41,7 +41,7 @@ CXXFLAGS="$cxxflag"
 
 # Check compiler and use -Wall if gnu.
 if [test $GXX = "yes" ;] then
-  AC_SUBST( cxxflag, [-Wall] )
+  AC_SUBST( cxxflag, ["-Wall -Wextra"] )
 fi
 
 CXXFLAGS="$CXXFLAGS $cxxflag"

+ 59 - 2
tests/sysextest.cpp

@@ -26,6 +26,11 @@ 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();
@@ -60,8 +65,8 @@ int main( int argc, char *argv[] )
   midiin->ignoreTypes( false, true, true );
 
   try {
-  midiin->openVirtualPort( "MyVirtualInputPort" );
-  midiout->openPort( 0 );
+    if ( chooseMidiPort( midiin ) == false ) goto cleanup;
+    if ( chooseMidiPort( midiout ) == false ) goto cleanup;
   }
   catch ( RtMidiError &error ) {
     error.printMessage();
@@ -93,3 +98,55 @@ 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;
+}