automake: fix inconsistency between --with-ds and --with-dsound
[rtaudio-cdist.git] / tests / testall.cpp
index af14809c3885f417d49961b566860b8ba802c9a5..b94ce696d194114e1f36db55fe8a46e37134af13 100644 (file)
@@ -1,7 +1,7 @@
 /******************************************/
 /*
   testall.cpp
-  by Gary P. Scavone, 2007
+  by Gary P. Scavone, 2007-2008
 
   This program will make a variety of calls
   to extensively test RtAudio functionality.
@@ -10,6 +10,8 @@
 
 #include "RtAudio.h"
 #include <iostream>
+#include <cstdlib>
+#include <cstring>
 
 #define BASE_RATE 0.005
 #define TIME   1.0
 void usage( void ) {
   // Error function in case of incorrect command-line
   // argument specifications
-  std::cout << "\nuseage: testall N fs <device> <channelOffset>\n";
+  std::cout << "\nuseage: testall N fs <iDevice> <oDevice> <iChannelOffset> <oChannelOffset>\n";
   std::cout << "    where N = number of channels,\n";
   std::cout << "    fs = the sample rate,\n";
-  std::cout << "    device = optional device to use (default = 0),\n";
-  std::cout << "    and channelOffset = an optional channel offset on the device (default = 0).\n\n";
+  std::cout << "    iDevice = optional input device to use (default = 0),\n";
+  std::cout << "    oDevice = optional output device to use (default = 0),\n";
+  std::cout << "    iChannelOffset = an optional input channel offset (default = 0),\n";
+  std::cout << "    and oChannelOffset = optional output channel offset (default = 0).\n\n";
   exit( 0 );
 }
 
 unsigned int channels;
 
 // Interleaved buffers
-int sawi( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames,
-          double streamTime, RtAudioStreamStatus status, void *data )
+int sawi( void *outputBuffer, void * /*inputBuffer*/, unsigned int nBufferFrames,
+          double /*streamTime*/, RtAudioStreamStatus status, void *data )
 {
   unsigned int i, j;
   extern unsigned int channels;
@@ -51,8 +55,8 @@ int sawi( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames,
 }
 
 // Non-interleaved buffers
-int sawni( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames,
-           double streamTime, RtAudioStreamStatus status, void *data )
+int sawni( void *outputBuffer, void * /*inputBuffer*/, unsigned int nBufferFrames,
+           double /*streamTime*/, RtAudioStreamStatus status, void *data )
 {
   unsigned int i, j;
   extern unsigned int channels;
@@ -62,7 +66,7 @@ int sawni( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames,
   if ( status )
     std::cout << "Stream underflow detected!" << std::endl;
 
-  float increment;
+  double increment;
   for ( j=0; j<channels; j++ ) {
     increment = BASE_RATE * (j+1+(j*0.1));
     for ( i=0; i<nBufferFrames; i++ ) {
@@ -75,51 +79,57 @@ int sawni( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames,
   return 0;
 }
 
-int inout( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames,
-           double streamTime, RtAudioStreamStatus status, void *data )
+int inout( void *outputBuffer, void *inputBuffer, unsigned int /*nBufferFrames*/,
+           double /*streamTime*/, RtAudioStreamStatus status, void *data )
 {
   // Since the number of input and output channels is equal, we can do
   // a simple buffer copy operation here.
   if ( status ) std::cout << "Stream over/underflow detected." << std::endl;
 
-  unsigned long *bytes = (unsigned long *) data;
+  unsigned int *bytes = (unsigned int *) data;
   memcpy( outputBuffer, inputBuffer, *bytes );
   return 0;
 }
 
 int main( int argc, char *argv[] )
 {
-  unsigned int bufferFrames, fs, device = 0, offset = 0;
+  unsigned int bufferFrames, fs, oDevice = 0, iDevice = 0, iOffset = 0, oOffset = 0;
   char input;
 
   // minimal command-line checking
-  if (argc < 3 || argc > 5 ) usage();
+  if (argc < 3 || argc > 7 ) usage();
 
   RtAudio dac;
   if ( dac.getDeviceCount() < 1 ) {
     std::cout << "\nNo audio devices found!\n";
-    exit( 0 );
+    exit( 1 );
   }
 
-  channels = (unsigned int) atoi(argv[1]);
-  fs = (unsigned int) atoi(argv[2]);
+  channels = (unsigned int) atoi( argv[1] );
+  fs = (unsigned int) atoi( argv[2] );
   if ( argc > 3 )
-    device = (unsigned int) atoi(argv[3]);
+    iDevice = (unsigned int) atoi( argv[3] );
   if ( argc > 4 )
-    offset = (unsigned int) atoi(argv[4]);
+    oDevice = (unsigned int) atoi(argv[4]);
+  if ( argc > 5 )
+    iOffset = (unsigned int) atoi(argv[5]);
+  if ( argc > 6 )
+    oOffset = (unsigned int) atoi(argv[6]);
 
-  double *data;
-  data = (double *) calloc( channels, sizeof( double ) );
+  double *data = (double *) calloc( channels, sizeof( double ) );
 
   // Let RtAudio print messages to stderr.
   dac.showWarnings( true );
 
   // Set our stream parameters for output only.
-  bufferFrames = 256;
+  bufferFrames = 512;
   RtAudio::StreamParameters oParams, iParams;
-  oParams.deviceId = device;
+  oParams.deviceId = oDevice;
   oParams.nChannels = channels;
-  oParams.firstChannel = offset;
+  oParams.firstChannel = oOffset;
+
+  if ( oDevice == 0 )
+    oParams.deviceId = dac.getDefaultOutputDevice();
 
   RtAudio::StreamOptions options;
   options.flags = RTAUDIO_HOG_DEVICE;
@@ -153,7 +163,7 @@ int main( int argc, char *argv[] )
     std::cout << "Playing again ... press <enter> to close the stream.\n";
     std::cin.get( input );
   }
-  catch ( RtError& e ) {
+  catch ( RtAudioError& e ) {
     e.printMessage();
     goto cleanup;
   }
@@ -173,7 +183,7 @@ int main( int argc, char *argv[] )
     std::cout << "\nPlaying ... press <enter> to stop.\n";
     std::cin.get( input );
   }
-  catch ( RtError& e ) {
+  catch ( RtAudioError& e ) {
     e.printMessage();
     goto cleanup;
   }
@@ -182,9 +192,11 @@ int main( int argc, char *argv[] )
 
   // Now open a duplex stream.
   unsigned int bufferBytes;
-  iParams.deviceId = device;
+  iParams.deviceId = iDevice;
   iParams.nChannels = channels;
-  iParams.firstChannel = offset;
+  iParams.firstChannel = iOffset;
+  if ( iDevice == 0 )
+    iParams.deviceId = dac.getDefaultInputDevice();
   options.flags = RTAUDIO_NONINTERLEAVED;
   try {
     dac.openStream( &oParams, &iParams, RTAUDIO_SINT32, fs, &bufferFrames, &inout, (void *)&bufferBytes, &options );
@@ -209,7 +221,7 @@ int main( int argc, char *argv[] )
     std::cout << "\nRunning ... press <enter> to stop.\n";
     std::cin.get( input );
   }
-  catch ( RtError& e ) {
+  catch ( RtAudioError& e ) {
     e.printMessage();
   }