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
{\r
for ( unsigned int channel = 0; channel < channelCount; channel++ )\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
+ 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
{\r
for ( unsigned int channel = 0; channel < channelCount; channel++ )\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
+ 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
{\r
for ( unsigned int channel = 0; channel < channelCount; channel++ )\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
+ 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
{\r
for ( unsigned int channel = 0; channel < channelCount; channel++ )\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
+ 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
{\r
for ( unsigned int channel = 0; channel < channelCount; channel++ )\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
+ 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
{\r
for ( unsigned int channel = 0; channel < channelCount; channel++ )\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
+ 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