Fix a signed-unsigned comparison.
[rtaudio-cdist.git] / RtAudio.cpp
index 95cf91093a0c60d01fedf6b0affd59d840a78ee3..603da0a163699d25b77512d19f505292e5d8d69d 100644 (file)
@@ -3878,33 +3878,33 @@ void convertBufferWasapi( char* outBuffer,
   outSampleCount = ( unsigned int ) roundf( inSampleCount * sampleRatio );\r
 \r
   // if inSampleRate is a multiple of outSampleRate (or vice versa) there's no need to interpolate\r
-  if (floor( sampleRatio ) == sampleRatio || floor( sampleRatioInv ) == sampleRatioInv)\r
+  if ( floor( sampleRatio ) == sampleRatio || floor( sampleRatioInv ) == sampleRatioInv )\r
   {\r
     // frame-by-frame, copy each relative input sample into it's corresponding output sample\r
-    for (unsigned int outSample = 0; outSample < outSampleCount; outSample++)\r
+    for ( unsigned int outSample = 0; outSample < outSampleCount; outSample++ )\r
     {\r
       unsigned int inSample = ( unsigned int ) inSampleFraction;\r
 \r
-      switch (format)\r
+      switch ( format )\r
       {\r
-      case RTAUDIO_SINT8:\r
-        memcpy( &(( char* ) outBuffer)[outSample * channelCount], &(( char* ) inBuffer)[inSample * channelCount], channelCount * sizeof( char ) );\r
-        break;\r
-      case RTAUDIO_SINT16:\r
-        memcpy( &(( short* ) outBuffer)[outSample * channelCount], &(( short* ) inBuffer)[inSample * channelCount], channelCount * sizeof( short ) );\r
-        break;\r
-      case RTAUDIO_SINT24:\r
-        memcpy( &(( S24* ) outBuffer)[outSample * channelCount], &(( S24* ) inBuffer)[inSample * channelCount], channelCount * sizeof( S24 ) );\r
-        break;\r
-      case RTAUDIO_SINT32:\r
-        memcpy( &(( int* ) outBuffer)[outSample * channelCount], &(( int* ) inBuffer)[inSample * channelCount], channelCount * sizeof( int ) );\r
-        break;\r
-      case RTAUDIO_FLOAT32:\r
-        memcpy( &(( float* ) outBuffer)[outSample * channelCount], &(( float* ) inBuffer)[inSample * channelCount], channelCount * sizeof( float ) );\r
-        break;\r
-      case RTAUDIO_FLOAT64:\r
-        memcpy( &(( double* ) outBuffer)[outSample * channelCount], &(( double* ) inBuffer)[inSample * channelCount], channelCount * sizeof( double ) );\r
-        break;\r
+        case RTAUDIO_SINT8:\r
+          memcpy( &( ( char* ) outBuffer )[ outSample * channelCount ], &( ( char* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( char ) );\r
+          break;\r
+        case RTAUDIO_SINT16:\r
+          memcpy( &( ( short* ) outBuffer )[ outSample * channelCount ], &( ( short* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( short ) );\r
+          break;\r
+        case RTAUDIO_SINT24:\r
+          memcpy( &( ( S24* ) outBuffer )[ outSample * channelCount ], &( ( S24* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( S24 ) );\r
+          break;\r
+        case RTAUDIO_SINT32:\r
+          memcpy( &( ( int* ) outBuffer )[ outSample * channelCount ], &( ( int* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( int ) );\r
+          break;\r
+        case RTAUDIO_FLOAT32:\r
+          memcpy( &( ( float* ) outBuffer )[ outSample * channelCount ], &( ( float* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( float ) );\r
+          break;\r
+        case RTAUDIO_FLOAT64:\r
+          memcpy( &( ( double* ) outBuffer )[ outSample * channelCount ], &( ( double* ) inBuffer )[ inSample * channelCount ], channelCount * sizeof( double ) );\r
+          break;\r
       }\r
 \r
       // jump to next in sample\r
@@ -3914,78 +3914,81 @@ void convertBufferWasapi( char* outBuffer,
   else // else interpolate\r
   {\r
     // frame-by-frame, copy each relative input sample into it's corresponding output sample\r
-    for (unsigned int outSample = 0; outSample < outSampleCount; outSample++)\r
+    for ( unsigned int outSample = 0; outSample < outSampleCount; outSample++ )\r
     {\r
       unsigned int inSample = ( unsigned int ) inSampleFraction;\r
+      float inSampleDec = inSampleFraction - inSample;\r
+      unsigned int frameInSample = inSample * channelCount;\r
+      unsigned int frameOutSample = outSample * channelCount;\r
 \r
-      switch (format)\r
+      switch ( format )\r
       {\r
-      case RTAUDIO_SINT8:\r
-      {\r
-        for (unsigned int channel = 0; channel < channelCount; channel++)\r
+        case RTAUDIO_SINT8:\r
         {\r
-          char fromSample = (( char* ) inBuffer)[(inSample * channelCount) + channel];\r
-          char toSample = (( char* ) inBuffer)[((inSample + 1) * channelCount) + channel];\r
-          float sampleDiff = (toSample - fromSample) * (inSampleFraction - floor( inSampleFraction ));\r
-          (( char* ) outBuffer)[(outSample * channelCount) + channel] = fromSample + ( char ) sampleDiff;\r
+          for ( unsigned int channel = 0; channel < channelCount; channel++ )\r
+          {\r
+            char fromSample = ( ( char* ) inBuffer )[ frameInSample + channel ];\r
+            char toSample = ( ( char* ) inBuffer )[ frameInSample + channelCount + channel ];\r
+            char sampleDiff = ( char ) ( ( toSample - fromSample ) * inSampleDec );\r
+            ( ( char* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;\r
+          }\r
+          break;\r
         }\r
-        break;\r
-      }\r
-      case RTAUDIO_SINT16:\r
-      {\r
-        for (unsigned int channel = 0; channel < channelCount; channel++)\r
+        case RTAUDIO_SINT16:\r
         {\r
-          short fromSample = (( short* ) inBuffer)[(inSample * channelCount) + channel];\r
-          short toSample = (( short* ) inBuffer)[((inSample + 1) * channelCount) + channel];\r
-          float sampleDiff = (toSample - fromSample) * (inSampleFraction - floor( inSampleFraction ));\r
-          (( short* ) outBuffer)[(outSample * channelCount) + channel] = fromSample + ( short ) sampleDiff;\r
+          for ( unsigned int channel = 0; channel < channelCount; channel++ )\r
+          {\r
+            short fromSample = ( ( short* ) inBuffer )[ frameInSample + channel ];\r
+            short toSample = ( ( short* ) inBuffer )[ frameInSample + channelCount + channel ];\r
+            short sampleDiff = ( short ) ( ( toSample - fromSample ) * inSampleDec );\r
+            ( ( short* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;\r
+          }\r
+          break;\r
         }\r
-        break;\r
-      }\r
-      case RTAUDIO_SINT24:\r
-      {\r
-        for (unsigned int channel = 0; channel < channelCount; channel++)\r
+        case RTAUDIO_SINT24:\r
         {\r
-          int fromSample = (( S24* ) inBuffer)[(inSample * channelCount) + channel].asInt();\r
-          int toSample = (( S24* ) inBuffer)[((inSample + 1) * channelCount) + channel].asInt();\r
-          float sampleDiff = (toSample - fromSample) * (inSampleFraction - floor( inSampleFraction ));\r
-          (( S24* ) outBuffer)[(outSample * channelCount) + channel] = fromSample + ( int ) sampleDiff;\r
+          for ( unsigned int channel = 0; channel < channelCount; channel++ )\r
+          {\r
+            int fromSample = ( ( S24* ) inBuffer )[ frameInSample + channel ].asInt();\r
+            int toSample = ( ( S24* ) inBuffer )[ frameInSample + channelCount + channel ].asInt();\r
+            int sampleDiff = ( int ) ( ( toSample - fromSample ) * inSampleDec );\r
+            ( ( S24* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;\r
+          }\r
+          break;\r
         }\r
-        break;\r
-      }\r
-      case RTAUDIO_SINT32:\r
-      {\r
-        for (unsigned int channel = 0; channel < channelCount; channel++)\r
+        case RTAUDIO_SINT32:\r
         {\r
-          int fromSample = (( int* ) inBuffer)[(inSample * channelCount) + channel];\r
-          int toSample = (( int* ) inBuffer)[((inSample + 1) * channelCount) + channel];\r
-          float sampleDiff = (toSample - fromSample) * (inSampleFraction - floor( inSampleFraction ));\r
-          (( int* ) outBuffer)[(outSample * channelCount) + channel] = fromSample + ( int ) sampleDiff;\r
+          for ( unsigned int channel = 0; channel < channelCount; channel++ )\r
+          {\r
+            int fromSample = ( ( int* ) inBuffer )[ frameInSample + channel ];\r
+            int toSample = ( ( int* ) inBuffer )[ frameInSample + channelCount + channel ];\r
+            int sampleDiff = ( int ) ( ( toSample - fromSample ) * inSampleDec );\r
+            ( ( int* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;\r
+          }\r
+          break;\r
         }\r
-        break;\r
-      }\r
-      case RTAUDIO_FLOAT32:\r
-      {\r
-        for (unsigned int channel = 0; channel < channelCount; channel++)\r
+        case RTAUDIO_FLOAT32:\r
         {\r
-          float fromSample = (( float* ) inBuffer)[(inSample * channelCount) + channel];\r
-          float toSample = (( float* ) inBuffer)[((inSample + 1) * channelCount) + channel];\r
-          float sampleDiff = (toSample - fromSample) * (inSampleFraction - floor( inSampleFraction ));\r
-          (( float* ) outBuffer)[(outSample * channelCount) + channel] = fromSample + sampleDiff;\r
+          for ( unsigned int channel = 0; channel < channelCount; channel++ )\r
+          {\r
+            float fromSample = ( ( float* ) inBuffer )[ frameInSample + channel ];\r
+            float toSample = ( ( float* ) inBuffer )[ frameInSample + channelCount + channel ];\r
+            float sampleDiff = ( toSample - fromSample ) * inSampleDec;\r
+            ( ( float* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;\r
+          }\r
+          break;\r
         }\r
-        break;\r
-      }\r
-      case RTAUDIO_FLOAT64:\r
-      {\r
-        for (unsigned int channel = 0; channel < channelCount; channel++)\r
+        case RTAUDIO_FLOAT64:\r
         {\r
-          double fromSample = (( double* ) inBuffer)[(inSample * channelCount) + channel];\r
-          double toSample = (( double* ) inBuffer)[((inSample + 1) * channelCount) + channel];\r
-          double sampleDiff = (toSample - fromSample) * (inSampleFraction - floor( inSampleFraction ));\r
-          (( double* ) outBuffer)[(outSample * channelCount) + channel] = fromSample + sampleDiff;\r
+          for ( unsigned int channel = 0; channel < channelCount; channel++ )\r
+          {\r
+            double fromSample = ( ( double* ) inBuffer )[ frameInSample + channel ];\r
+            double toSample = ( ( double* ) inBuffer )[ frameInSample + channelCount + channel ];\r
+            double sampleDiff = ( toSample - fromSample ) * inSampleDec;\r
+            ( ( double* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;\r
+          }\r
+          break;\r
         }\r
-        break;\r
-      }\r
       }\r
 \r
       // jump to next in sample\r
@@ -8780,8 +8783,10 @@ RtAudio::DeviceInfo RtApiOss :: getDeviceInfo( unsigned int device )
     info.nativeFormats |= RTAUDIO_SINT8;\r
   if ( mask & AFMT_S32_LE || mask & AFMT_S32_BE )\r
     info.nativeFormats |= RTAUDIO_SINT32;\r
+#ifdef AFMT_FLOAT
   if ( mask & AFMT_FLOAT )\r
     info.nativeFormats |= RTAUDIO_FLOAT32;\r
+#endif
   if ( mask & AFMT_S24_LE || mask & AFMT_S24_BE )\r
     info.nativeFormats |= RTAUDIO_SINT24;\r
 \r
@@ -9108,7 +9113,7 @@ bool RtApiOss :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigned
   }\r
 \r
   // Verify the sample rate setup worked.\r
-  if ( abs( srate - sampleRate ) > 100 ) {\r
+  if ( abs( srate - (int)sampleRate ) > 100 ) {
     close( fd );\r
     errorStream_ << "RtApiOss::probeDeviceOpen: device (" << ainfo.name << ") does not support sample rate (" << sampleRate << ").";\r
     errorText_ = errorStream_.str();\r