Fix a signed-unsigned comparison.
[rtaudio-cdist.git] / RtAudio.cpp
index a5439a2394b7bd243d92230884ecc8204bcf616b..603da0a163699d25b77512d19f505292e5d8d69d 100644 (file)
@@ -3887,24 +3887,24 @@ void convertBufferWasapi( char* outBuffer,
 \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
@@ -3917,75 +3917,78 @@ void convertBufferWasapi( char* outBuffer,
     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
       {\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