Browse Source

Some optimisation

tags/5.0.0
Marcus Tomlinson 8 years ago
parent
commit
d3b158f40f
1 changed files with 33 additions and 24 deletions
  1. +33
    -24
      RtAudio.cpp

+ 33
- 24
RtAudio.cpp View File

@@ -3917,72 +3917,81 @@ void convertBufferWasapi( char* outBuffer,
for ( unsigned int outSample = 0; outSample < outSampleCount; outSample++ )
{
unsigned int inSample = ( unsigned int ) inSampleFraction;
float inSampleDec = inSampleFraction - inSample;
unsigned int frameInSample = inSample * channelCount;
unsigned int frameOutSample = outSample * channelCount;
switch ( format )
{
case RTAUDIO_SINT8:
{
char* convInBuffer = ( char* ) inBuffer;
for ( unsigned int channel = 0; channel < channelCount; channel++ )
{
char fromSample = ( ( char* ) inBuffer )[ ( inSample * channelCount ) + channel ];
char toSample = ( ( char* ) inBuffer )[ ( ( inSample + 1 ) * channelCount ) + channel ];
float sampleDiff = ( toSample - fromSample ) * ( inSampleFraction - inSample );
( ( char* ) outBuffer )[ ( outSample * channelCount ) + channel ] = fromSample + ( char ) sampleDiff;
char fromSample = convInBuffer[ frameInSample + channel ];
char toSample = convInBuffer[ frameInSample + channelCount + channel ];
char sampleDiff = ( char ) ( ( toSample - fromSample ) * inSampleDec );
( ( char* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;
}
break;
}
case RTAUDIO_SINT16:
{
short* convInBuffer = ( short* ) inBuffer;
for ( unsigned int channel = 0; channel < channelCount; channel++ )
{
short fromSample = ( ( short* ) inBuffer )[ ( inSample * channelCount ) + channel ];
short toSample = ( ( short* ) inBuffer )[ ( ( inSample + 1 ) * channelCount ) + channel ];
float sampleDiff = ( toSample - fromSample ) * ( inSampleFraction - inSample );
( ( short* ) outBuffer )[ ( outSample * channelCount ) + channel ] = fromSample + ( short ) sampleDiff;
short fromSample = convInBuffer[ frameInSample + channel ];
short toSample = convInBuffer[ frameInSample + channelCount + channel ];
short sampleDiff = ( short ) ( ( toSample - fromSample ) * inSampleDec );
( ( short* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;
}
break;
}
case RTAUDIO_SINT24:
{
S24* convInBuffer = ( S24* ) inBuffer;
for ( unsigned int channel = 0; channel < channelCount; channel++ )
{
int fromSample = ( ( S24* ) inBuffer )[ ( inSample * channelCount ) + channel ].asInt();
int toSample = ( ( S24* ) inBuffer )[ ( ( inSample + 1 ) * channelCount ) + channel ].asInt();
float sampleDiff = ( toSample - fromSample ) * ( inSampleFraction - inSample );
( ( S24* ) outBuffer )[ ( outSample * channelCount ) + channel ] = fromSample + ( int ) sampleDiff;
int fromSample = convInBuffer[ frameInSample + channel ].asInt();
int toSample = convInBuffer[ frameInSample + channelCount + channel ].asInt();
int sampleDiff = ( int ) ( ( toSample - fromSample ) * inSampleDec );
( ( S24* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;
}
break;
}
case RTAUDIO_SINT32:
{
int* convInBuffer = ( int* ) inBuffer;
for ( unsigned int channel = 0; channel < channelCount; channel++ )
{
int fromSample = ( ( int* ) inBuffer )[ ( inSample * channelCount ) + channel ];
int toSample = ( ( int* ) inBuffer )[ ( ( inSample + 1 ) * channelCount ) + channel ];
float sampleDiff = ( toSample - fromSample ) * ( inSampleFraction - inSample );
( ( int* ) outBuffer )[ ( outSample * channelCount ) + channel ] = fromSample + ( int ) sampleDiff;
int fromSample = convInBuffer[ frameInSample + channel ];
int toSample = convInBuffer[ frameInSample + channelCount + channel ];
int sampleDiff = ( int ) ( ( toSample - fromSample ) * inSampleDec );
( ( int* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;
}
break;
}
case RTAUDIO_FLOAT32:
{
float* convInBuffer = ( float* ) inBuffer;
for ( unsigned int channel = 0; channel < channelCount; channel++ )
{
float fromSample = ( ( float* ) inBuffer )[ ( inSample * channelCount ) + channel ];
float toSample = ( ( float* ) inBuffer )[ ( ( inSample + 1 ) * channelCount ) + channel ];
float sampleDiff = ( toSample - fromSample ) * ( inSampleFraction - inSample );
( ( float* ) outBuffer )[ ( outSample * channelCount ) + channel ] = fromSample + sampleDiff;
float fromSample = convInBuffer[ frameInSample + channel ];
float toSample = convInBuffer[ frameInSample + channelCount + channel ];
float sampleDiff = ( toSample - fromSample ) * inSampleDec;
( ( float* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;
}
break;
}
case RTAUDIO_FLOAT64:
{
double* convInBuffer = ( double* ) inBuffer;
for ( unsigned int channel = 0; channel < channelCount; channel++ )
{
double fromSample = ( ( double* ) inBuffer )[ ( inSample * channelCount ) + channel ];
double toSample = ( ( double* ) inBuffer )[ ( ( inSample + 1 ) * channelCount ) + channel ];
double sampleDiff = ( toSample - fromSample ) * ( inSampleFraction - inSample );
( ( double* ) outBuffer )[ ( outSample * channelCount ) + channel ] = fromSample + sampleDiff;
double fromSample = convInBuffer[ frameInSample + channel ];
double toSample = convInBuffer[ frameInSample + channelCount + channel ];
double sampleDiff = ( toSample - fromSample ) * inSampleDec;
( ( double* ) outBuffer )[ frameOutSample + channel ] = fromSample + sampleDiff;
}
break;
}


Loading…
Cancel
Save