08-27-01 Implementation of hostBufferSize < userBufferSize case, better management of the ouput buffer when
the stream is stopped : Stephane Letz
08-28-01 Check the stream pointer for null in bufferSwitchTimeInfo, correct bug in bufferSwitchTimeInfo when
- the stream is stopped : Stephane Letz
+ the stream is stopped : Stephane Letz
10-12-01 Correct the PaHost_CalcNumHostBuffers function: computes FramesPerHostBuffer to be the lowest that
- respect requested FramesPerUserBuffer and userBuffersPerHostBuffer : Stephane Letz
+ respect requested FramesPerUserBuffer and userBuffersPerHostBuffer : Stephane Letz
10-26-01 Management of hostBufferSize and userBufferSize of any size : Stephane Letz
10-27-01 Improve calculus of hostBufferSize to be multiple or divisor of userBufferSize if possible : Stephane and Phil
10-29-01 Change MAX_INT32_FP to (2147483520.0f) to prevent roundup to 0x80000000 : Phil Burk
10-31-01 Clear the ouput buffer and user buffers in PaHost_StartOutput, correct bug in GetFirstMultiple : Stephane Letz
11-06-01 Rename functions : Stephane Letz
11-08-01 New Pa_ASIO_Adaptor_Init function to init Callback adpatation variables, cleanup of Pa_ASIO_Callback_Input: Stephane Letz
- 11-29-01 Break apart device loading to debug random failure in Pa_ASIO_QueryDeviceInfo ; Phil Burk
- 01-03-02 Desallocate all resources in PaHost_Term for cases where Pa_CloseStream is not called properly : Stephane Letz
+ 11-29-01 Break apart device loading to debug random failure in Pa_ASIO_QueryDeviceInfo ; Phil Burk
+ 01-03-02 Desallocate all resources in PaHost_Term for cases where Pa_CloseStream is not called properly : Stephane Letz
02-01-02 Cleanup, test of multiple-stream opening : Stephane Letz
- 19-02-02 New Pa_ASIO_loadDriver that calls CoInitialize on each thread on Windows: Stephane Letz
+ 19-02-02 New Pa_ASIO_loadDriver that calls CoInitialize on each thread on Windows : Stephane Letz
+ 09-04-02 Correct error code management in PaHost_Term, removes various compiler warning : Stephane Letz
TO DO :
#endif
// Prototypes
-void bufferSwitch(long index, ASIOBool processNow);
-ASIOTime *bufferSwitchTimeInfo(ASIOTime *timeInfo, long index, ASIOBool processNow);
-void sampleRateChanged(ASIOSampleRate sRate);
-long asioMessages(long selector, long value, void* message, double* opt);
+static void bufferSwitch(long index, ASIOBool processNow);
+static ASIOTime *bufferSwitchTimeInfo(ASIOTime *timeInfo, long index, ASIOBool processNow);
+static void sampleRateChanged(ASIOSampleRate sRate);
+static long asioMessages(long selector, long value, void* message, double* opt);
static void Pa_StartUsageCalculation( internalPortAudioStream *past );
static void Pa_EndUsageCalculation( internalPortAudioStream *past );
-void Pa_ASIO_Convert_Inter_Input(
+static void Pa_ASIO_Convert_Inter_Input(
ASIOBufferInfo* nativeBuffer,
void* inputBuffer,
- short NumInputChannels,
- short NumOuputChannels,
- short framePerBuffer,
- short hostFrameOffset,
- short userFrameOffset,
+ long NumInputChannels,
+ long NumOuputChannels,
+ long framePerBuffer,
+ long hostFrameOffset,
+ long userFrameOffset,
ASIOSampleType nativeFormat,
PaSampleFormat paFormat,
PaStreamFlags flags,
- short index);
+ long index);
-void Pa_ASIO_Convert_Inter_Output(
+static void Pa_ASIO_Convert_Inter_Output(
ASIOBufferInfo* nativeBuffer,
void* outputBuffer,
- short NumInputChannels,
- short NumOuputChannels,
- short framePerBuffer,
- short hostFrameOffset,
- short userFrameOffset,
+ long NumInputChannels,
+ long NumOuputChannels,
+ long framePerBuffer,
+ long hostFrameOffset,
+ long userFrameOffset,
ASIOSampleType nativeFormat,
PaSampleFormat paFormat,
PaStreamFlags flags,
- short index);
+ long index);
- void Pa_ASIO_Clear_Output(ASIOBufferInfo* nativeBuffer,
+static void Pa_ASIO_Clear_Output(ASIOBufferInfo* nativeBuffer,
ASIOSampleType nativeFormat,
- short NumInputChannels,
- short NumOuputChannels,
- int index,
- int hostFrameOffset,
- int frames);
+ long NumInputChannels,
+ long NumOuputChannels,
+ long index,
+ long hostFrameOffset,
+ long frames);
-void Pa_ASIO_Callback_Input(long index);
-void Pa_ASIO_Callback_Output(long index, long framePerBuffer);
-void Pa_ASIO_Callback_End();
-void Pa_ASIO_Clear_User_Buffers();
+static void Pa_ASIO_Callback_Input(long index);
+static void Pa_ASIO_Callback_Output(long index, long framePerBuffer);
+static void Pa_ASIO_Callback_End();
+static void Pa_ASIO_Clear_User_Buffers();
// Some external references
extern AsioDrivers* asioDrivers ;
#endif
-bool Pa_ASIO_loadAsioDriver(char *name)
+static bool Pa_ASIO_loadAsioDriver(char *name)
{
#ifdef WINDOWS
CoInitialize(0);
// Utilities for alignement buffer size computation
-int PGCD (int a, int b) {return (b == 0) ? a : PGCD (b,a%b);}
-int PPCM (int a, int b) {return (a*b) / PGCD (a,b);}
+static int PGCD (int a, int b) {return (b == 0) ? a : PGCD (b,a%b);}
+static int PPCM (int a, int b) {return (a*b) / PGCD (a,b);}
// Takes the size of host buffer and user buffer : returns the number of frames needed for buffer alignement
-int Pa_ASIO_CalcFrameShift (int M, int N)
+static int Pa_ASIO_CalcFrameShift (int M, int N)
{
int res = 0;
for (int i = M; i < PPCM (M,N) ; i+=M) { res = max (res, i%N); }
//----------------------------------------------------------------------------------
// TAKEN FROM THE ASIO SDK:
-void sampleRateChanged(ASIOSampleRate sRate)
+static void sampleRateChanged(ASIOSampleRate sRate)
{
// do whatever you need to do if the sample rate changed
// usually this only happens during external sync.
#endif
-ASIOTime *bufferSwitchTimeInfo(ASIOTime *timeInfo, long index, ASIOBool processNow)
+static ASIOTime *bufferSwitchTimeInfo(ASIOTime *timeInfo, long index, ASIOBool processNow)
{
// the actual processing callback.
// Beware that this is normally in a seperate thread, hence be sure that you take care
// about thread synchronization. This is omitted here for simplicity.
- static processedSamples = 0;
+ // static processedSamples = 0;
int result = 0;
// store the timeInfo for later use
// TO BE COMPLETED WITH ALL SUPPORTED PA SAMPLE TYPES
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Input_Int16_Flot32 (ASIOBufferInfo* nativeBuffer, float *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
+static void Input_Int16_Float32 (ASIOBufferInfo* nativeBuffer, float *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
{
long temp;
int i,j;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Input_Int32_Flot32 (ASIOBufferInfo* nativeBuffer, float *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset,bool swap)
+static void Input_Int32_Float32 (ASIOBufferInfo* nativeBuffer, float *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset,bool swap)
{
long temp;
int i,j;
//-------------------------------------------------------------------------------------------------------------------------------------------------------
// MUST BE TESTED
- void Input_Float32_Flot32 (ASIOBufferInfo* nativeBuffer, float *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset,bool swap)
+static void Input_Float32_Float32 (ASIOBufferInfo* nativeBuffer, float *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset,bool swap)
{
- long temp;
+ unsigned long temp;
int i,j;
for( j=0; j<NumInputChannels; j++ ) {
- float *asioBufPtr = &((float*)nativeBuffer[j].buffers[index])[hostFrameOffset];
+ unsigned long *asioBufPtr = &((unsigned long*)nativeBuffer[j].buffers[index])[hostFrameOffset];
float *userBufPtr = &inBufPtr[j+(userFrameOffset*NumInputChannels)];
for (i= 0; i < framePerBuffer; i++)
{
- temp = (long)asioBufPtr[i];
+ temp = asioBufPtr[i];
if (swap) temp = SwapLong(temp);
*userBufPtr = (float)temp;
userBufPtr += NumInputChannels;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Input_Int16_Int32 (ASIOBufferInfo* nativeBuffer, long *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset,bool swap)
+static void Input_Int16_Int32 (ASIOBufferInfo* nativeBuffer, long *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset,bool swap)
{
long temp;
int i,j;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Input_Int32_Int32 (ASIOBufferInfo* nativeBuffer, long *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset,bool swap)
+static void Input_Int32_Int32 (ASIOBufferInfo* nativeBuffer, long *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset,bool swap)
{
long temp;
int i,j;
//-------------------------------------------------------------------------------------------------------------------------------------------------------
// MUST BE TESTED
- void Input_Float32_Int32 (ASIOBufferInfo* nativeBuffer, long *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset,bool swap)
+static void Input_Float32_Int32 (ASIOBufferInfo* nativeBuffer, long *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset,bool swap)
{
- long temp;
+ unsigned long temp;
int i,j;
for( j=0; j<NumInputChannels; j++ ) {
- float *asioBufPtr = &((float*)nativeBuffer[j].buffers[index])[hostFrameOffset];
+ unsigned long *asioBufPtr = &((unsigned long*)nativeBuffer[j].buffers[index])[hostFrameOffset];
long *userBufPtr = &inBufPtr[j+(userFrameOffset*NumInputChannels)];
for (i= 0; i < framePerBuffer; i++)
{
- temp = (long) asioBufPtr[i];
+ temp = asioBufPtr[i];
if (swap) temp = SwapLong(temp);
*userBufPtr = (long)((float)temp * MAX_INT32_FP); // Is temp a value between -1.0 and 1.0 ??
userBufPtr += NumInputChannels;
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Input_Int16_Int16 (ASIOBufferInfo* nativeBuffer, short *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset,bool swap)
+static void Input_Int16_Int16 (ASIOBufferInfo* nativeBuffer, short *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset,bool swap)
{
long temp;
int i,j;
{
temp = asioBufPtr[i];
if (swap) temp = SwapShort(temp);
- *userBufPtr = temp;
+ *userBufPtr = (short)temp;
userBufPtr += NumInputChannels;
}
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Input_Int32_Int16 (ASIOBufferInfo* nativeBuffer, short *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset, int userFrameOffset,uint32 flags,bool swap)
+static void Input_Int32_Int16 (ASIOBufferInfo* nativeBuffer, short *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset, int userFrameOffset,uint32 flags,bool swap)
{
long temp;
int i,j;
{
temp = asioBufPtr[i];
if (swap) temp = SwapLong(temp);
- *userBufPtr = temp>>16;
+ *userBufPtr = (short)(temp>>16);
userBufPtr += NumInputChannels;
}
}
temp = (temp >> 1) + Pa_TriangularDither();
temp = temp >> 15;
temp = (short) ClipShort(temp);
- *userBufPtr = temp;
+ *userBufPtr = (short)temp;
userBufPtr += NumInputChannels;
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
// MUST BE TESTED
- void Input_Float32_Int16 (ASIOBufferInfo* nativeBuffer, short *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset,uint32 flags,bool swap)
+static void Input_Float32_Int16 (ASIOBufferInfo* nativeBuffer, short *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset,uint32 flags,bool swap)
{
- long temp;
+ unsigned long temp;
int i,j;
if( flags & paDitherOff )
{
for( j=0; j<NumInputChannels; j++ ) {
- float *asioBufPtr = &((float*)nativeBuffer[j].buffers[index])[hostFrameOffset];
+ unsigned long *asioBufPtr = &((unsigned long*)nativeBuffer[j].buffers[index])[hostFrameOffset];
short *userBufPtr = &inBufPtr[j+(userFrameOffset*NumInputChannels)];
for (i= 0; i < framePerBuffer; i++)
{
- temp = (long)asioBufPtr[i];
+ temp = asioBufPtr[i];
if (swap) temp = SwapLong(temp);
*userBufPtr = (short)((float)temp * MAX_INT16_FP); // Is temp a value between -1.0 and 1.0 ??
userBufPtr += NumInputChannels;
else
{
for( j=0; j<NumInputChannels; j++ ) {
- float *asioBufPtr = &((float*)nativeBuffer[j].buffers[index])[hostFrameOffset];
+ unsigned long *asioBufPtr = &((unsigned long*)nativeBuffer[j].buffers[index])[hostFrameOffset];
short *userBufPtr = &inBufPtr[j+(userFrameOffset*NumInputChannels)];
for (i= 0; i < framePerBuffer; i++)
{
float dither = Pa_TriangularDither()*DITHER_SCALE;
- temp = (long)asioBufPtr[i];
+ temp = asioBufPtr[i];
if (swap) temp = SwapLong(temp);
temp = (short)(((float)temp * MAX_INT16_FP) + dither);
temp = ClipShort(temp);
- *userBufPtr = temp;
+ *userBufPtr = (short)temp;
userBufPtr += NumInputChannels;
}
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Input_Int16_Int8 (ASIOBufferInfo* nativeBuffer, char *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset, uint32 flags,bool swap)
+static void Input_Int16_Int8 (ASIOBufferInfo* nativeBuffer, char *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset, uint32 flags,bool swap)
{
long temp;
int i,j;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Input_Int32_Int8 (ASIOBufferInfo* nativeBuffer, char *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset, int userFrameOffset, uint32 flags,bool swap)
+static void Input_Int32_Int8 (ASIOBufferInfo* nativeBuffer, char *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset, int userFrameOffset, uint32 flags,bool swap)
{
long temp;
int i,j;
//-------------------------------------------------------------------------------------------------------------------------------------------------------
// MUST BE TESTED
- void Input_Float32_Int8 (ASIOBufferInfo* nativeBuffer, char *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset, uint32 flags,bool swap)
+static void Input_Float32_Int8 (ASIOBufferInfo* nativeBuffer, char *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset, uint32 flags,bool swap)
{
- long temp;
+ unsigned long temp;
int i,j;
if( flags & paDitherOff )
{
for( j=0; j<NumInputChannels; j++ ) {
- long *asioBufPtr = &((long*)nativeBuffer[j].buffers[index])[hostFrameOffset];
+ unsigned long *asioBufPtr = &((unsigned long*)nativeBuffer[j].buffers[index])[hostFrameOffset];
char *userBufPtr = &inBufPtr[j+(userFrameOffset*NumInputChannels)];
for (i= 0; i < framePerBuffer; i++)
{
else
{
for( j=0; j<NumInputChannels; j++ ) {
- long *asioBufPtr = &((long*)nativeBuffer[j].buffers[index])[hostFrameOffset];
+ unsigned long *asioBufPtr = &((unsigned long*)nativeBuffer[j].buffers[index])[hostFrameOffset];
char *userBufPtr = &inBufPtr[j+(userFrameOffset*NumInputChannels)];
for (i= 0; i < framePerBuffer; i++)
{
if (swap) temp = SwapLong(temp);
temp = (char)(((float)temp * MAX_INT8_FP) + dither);
temp = ClipChar(temp);
- *userBufPtr = temp ;
+ *userBufPtr = (char)temp;
userBufPtr += NumInputChannels;
}
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Input_Int16_IntU8 (ASIOBufferInfo* nativeBuffer, unsigned char *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset, uint32 flags,bool swap)
+static void Input_Int16_IntU8 (ASIOBufferInfo* nativeBuffer, unsigned char *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset, uint32 flags,bool swap)
{
long temp;
int i,j;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Input_Int32_IntU8 (ASIOBufferInfo* nativeBuffer, unsigned char *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset, int userFrameOffset,uint32 flags,bool swap)
+static void Input_Int32_IntU8 (ASIOBufferInfo* nativeBuffer, unsigned char *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset, int userFrameOffset,uint32 flags,bool swap)
{
long temp;
int i,j;
//-------------------------------------------------------------------------------------------------------------------------------------------------------
// MUST BE TESTED
- void Input_Float32_IntU8 (ASIOBufferInfo* nativeBuffer, unsigned char *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset, uint32 flags,bool swap)
+static void Input_Float32_IntU8 (ASIOBufferInfo* nativeBuffer, unsigned char *inBufPtr, int framePerBuffer, int NumInputChannels, int index, int hostFrameOffset,int userFrameOffset, uint32 flags,bool swap)
{
- long temp;
+ unsigned long temp;
int i,j;
if( flags & paDitherOff )
{
for( j=0; j<NumInputChannels; j++ ) {
- float *asioBufPtr = &((float*)nativeBuffer[j].buffers[index])[hostFrameOffset];
+ unsigned long *asioBufPtr = &((unsigned long*)nativeBuffer[j].buffers[index])[hostFrameOffset];
unsigned char *userBufPtr = &inBufPtr[j+(userFrameOffset*NumInputChannels)];
for (i= 0; i < framePerBuffer; i++)
{
- temp = (float) asioBufPtr[i];
+ temp = asioBufPtr[i];
if (swap) temp = SwapLong(temp);
*userBufPtr = (unsigned char)(((float)temp*MAX_INT8_FP) + 0x80);
userBufPtr += NumInputChannels;
else
{
for( j=0; j<NumInputChannels; j++ ) {
- float *asioBufPtr = &((float*)nativeBuffer[j].buffers[index])[hostFrameOffset];
+ unsigned long *asioBufPtr = &((unsigned long*)nativeBuffer[j].buffers[index])[hostFrameOffset];
unsigned char *userBufPtr = &inBufPtr[j+(userFrameOffset*NumInputChannels)];
for (i= 0; i < framePerBuffer; i++)
{
float dither = Pa_TriangularDither()*DITHER_SCALE;
- temp = (float) asioBufPtr[i];
+ temp = asioBufPtr[i];
if (swap) temp = SwapLong(temp);
temp = (char)(((float)temp * MAX_INT8_FP) + dither);
temp = ClipChar(temp);
// OUPUT
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Output_Float32_Int16 (ASIOBufferInfo* nativeBuffer, float *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset, int userFrameOffset,uint32 flags, bool swap)
+static void Output_Float32_Int16 (ASIOBufferInfo* nativeBuffer, float *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset, int userFrameOffset,uint32 flags, bool swap)
{
long temp;
int i,j;
{
temp = (short) (*userBufPtr * MAX_INT16_FP);
if (swap) temp = SwapShort(temp);
- asioBufPtr[i] = temp;
+ asioBufPtr[i] = (short)temp;
userBufPtr += NumOuputChannels;
}
}
temp = (long) (*userBufPtr * MAX_INT16_FP);
temp = ClipShort(temp);
if (swap) temp = SwapShort(temp);
- asioBufPtr[i] = temp;
+ asioBufPtr[i] = (short)temp;
userBufPtr += NumOuputChannels;
}
}
{
/* If you dither then you have to clip because dithering could push the signal out of range! */
for( j=0; j<NumOuputChannels; j++ ) {
- short *asioBufPtr = &((short*)nativeBuffer[j+NumInputChannels].buffers[index])[hostFrameOffset];
- float *userBufPtr = &outBufPtr[j+(userFrameOffset*NumOuputChannels)];
-
- for (i= 0; i < framePerBuffer; i++)
- {
- float dither = Pa_TriangularDither()*DITHER_SCALE;
- temp = (long) ((*userBufPtr * MAX_INT16_FP) + dither);
- temp = ClipShort(temp);
- if (swap) temp = SwapShort(temp);
- asioBufPtr[i] = temp;
- userBufPtr += NumOuputChannels;
- }
+ short *asioBufPtr = &((short*)nativeBuffer[j+NumInputChannels].buffers[index])[hostFrameOffset];
+ float *userBufPtr = &outBufPtr[j+(userFrameOffset*NumOuputChannels)];
+
+ for (i= 0; i < framePerBuffer; i++)
+ {
+ float dither = Pa_TriangularDither()*DITHER_SCALE;
+ temp = (long) ((*userBufPtr * MAX_INT16_FP) + dither);
+ temp = ClipShort(temp);
+ if (swap) temp = SwapShort(temp);
+ asioBufPtr[i] = (short)temp;
+ userBufPtr += NumOuputChannels;
}
+ }
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Output_Float32_Int32 (ASIOBufferInfo* nativeBuffer, float *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset, int userFrameOffset,uint32 flags,bool swap)
+static void Output_Float32_Int32 (ASIOBufferInfo* nativeBuffer, float *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset, int userFrameOffset,uint32 flags,bool swap)
{
long temp;
int i,j;
}
}
+
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Output_Int32_Int16(ASIOBufferInfo* nativeBuffer, long *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset,uint32 flags,bool swap)
+static void Output_Int32_Int16(ASIOBufferInfo* nativeBuffer, long *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset,uint32 flags,bool swap)
{
long temp;
int i,j;
{
temp = (short) ((*userBufPtr) >> 16);
if (swap) temp = SwapShort(temp);
- asioBufPtr[i] = temp;
+ asioBufPtr[i] = (short)temp;
userBufPtr += NumOuputChannels;
}
}
temp = temp >> 15;
temp = (short) ClipShort(temp);
if (swap) temp = SwapShort(temp);
- asioBufPtr[i] = temp;
+ asioBufPtr[i] = (short)temp;
userBufPtr += NumOuputChannels;
}
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Output_Int32_Int32(ASIOBufferInfo* nativeBuffer, long *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset,uint32 flags,bool swap)
+static void Output_Int32_Int32(ASIOBufferInfo* nativeBuffer, long *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset,uint32 flags,bool swap)
{
long temp;
int i,j;
//-------------------------------------------------------------------------------------------------------------------------------------------------------
// MUST BE CHECKED
- void Output_Int32_Float32(ASIOBufferInfo* nativeBuffer, long *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset,uint32 flags,bool swap)
+static void Output_Int32_Float32(ASIOBufferInfo* nativeBuffer, long *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset,uint32 flags,bool swap)
{
long temp;
int i,j;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Output_Int16_Int16(ASIOBufferInfo* nativeBuffer, short *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset, int userFrameOffset,bool swap)
+static void Output_Int16_Int16(ASIOBufferInfo* nativeBuffer, short *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset, int userFrameOffset,bool swap)
{
long temp;
int i,j;
{
temp = *userBufPtr;
if (swap) temp = SwapShort(temp);
- asioBufPtr[i] = temp;
+ asioBufPtr[i] = (short)temp;
userBufPtr += NumOuputChannels;
}
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Output_Int16_Int32(ASIOBufferInfo* nativeBuffer, short *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
+static void Output_Int16_Int32(ASIOBufferInfo* nativeBuffer, short *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
{
long temp;
int i,j;
//-------------------------------------------------------------------------------------------------------------------------------------------------------
// MUST BE CHECKED
- void Output_Int16_Float32(ASIOBufferInfo* nativeBuffer, short *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
+static void Output_Int16_Float32(ASIOBufferInfo* nativeBuffer, short *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
{
long temp;
int i,j;
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Output_Int8_Int16(ASIOBufferInfo* nativeBuffer, char *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
+static void Output_Int8_Int16(ASIOBufferInfo* nativeBuffer, char *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
{
long temp;
int i,j;
{
temp = (short)(*userBufPtr)<<8;
if (swap) temp = SwapShort(temp);
- asioBufPtr[i] = temp;
+ asioBufPtr[i] = (short)temp;
userBufPtr += NumOuputChannels;
}
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Output_Int8_Int32(ASIOBufferInfo* nativeBuffer, char *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
+static void Output_Int8_Int32(ASIOBufferInfo* nativeBuffer, char *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
{
long temp;
int i,j;
//-------------------------------------------------------------------------------------------------------------------------------------------------------
// MUST BE CHECKED
- void Output_Int8_Float32(ASIOBufferInfo* nativeBuffer, char *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
+static void Output_Int8_Float32(ASIOBufferInfo* nativeBuffer, char *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
{
long temp;
int i,j;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Output_IntU8_Int16(ASIOBufferInfo* nativeBuffer, unsigned char *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
+static void Output_IntU8_Int16(ASIOBufferInfo* nativeBuffer, unsigned char *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
{
long temp;
int i,j;
{
temp = ((short)((*userBufPtr) - 0x80)) << 8;
if (swap) temp = SwapShort(temp);
- asioBufPtr[i] = temp;
+ asioBufPtr[i] = (short)temp;
userBufPtr += NumOuputChannels;
}
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Output_IntU8_Int32(ASIOBufferInfo* nativeBuffer, unsigned char *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
+static void Output_IntU8_Int32(ASIOBufferInfo* nativeBuffer, unsigned char *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
{
long temp;
int i,j;
//-------------------------------------------------------------------------------------------------------------------------------------------------------
// MUST BE CHECKED
- void Output_IntU8_Float32(ASIOBufferInfo* nativeBuffer, unsigned char *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
+static void Output_IntU8_Float32(ASIOBufferInfo* nativeBuffer, unsigned char *outBufPtr, int framePerBuffer, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset,int userFrameOffset, bool swap)
{
long temp;
int i,j;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Pa_ASIO_Clear_Output_16 (ASIOBufferInfo* nativeBuffer, int frames, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset)
+static void Pa_ASIO_Clear_Output_16 (ASIOBufferInfo* nativeBuffer, long frames, long NumInputChannels, long NumOuputChannels, long index, long hostFrameOffset)
{
int i,j;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Pa_ASIO_Clear_Output_32 (ASIOBufferInfo* nativeBuffer, int frames, int NumInputChannels, int NumOuputChannels, int index, int hostFrameOffset)
+static void Pa_ASIO_Clear_Output_32 (ASIOBufferInfo* nativeBuffer, long frames, long NumInputChannels, long NumOuputChannels, long index, long hostFrameOffset)
{
int i,j;
//-------------------------------------------------------------------------------------------------------------------------------------------------------
-void Pa_ASIO_Adaptor_Init()
+static void Pa_ASIO_Adaptor_Init()
{
if (asioDriverInfo.past->past_FramesPerUserBuffer <= asioDriverInfo.past_FramesPerHostBuffer) {
asioDriverInfo.pahsc_hostOutputBufferFrameOffset = asioDriverInfo.pahsc_OutputBufferOffset;
//-------------------------------------------------------------------------------------------------------------------------------------------------------
// FIXME : optimization for Input only or output only modes (really necessary ??)
-void Pa_ASIO_Callback_Input( long index)
+static void Pa_ASIO_Callback_Input( long index)
{
internalPortAudioStream *past = asioDriverInfo.past;
long framesInputHostBuffer = asioDriverInfo.past_FramesPerHostBuffer; // number of frames available into the host input buffer
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
-void Pa_ASIO_Callback_Output(long index, long framePerBuffer)
+static void Pa_ASIO_Callback_Output(long index, long framePerBuffer)
{
internalPortAudioStream *past = asioDriverInfo.past;
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Pa_ASIO_Callback_End()
+static void Pa_ASIO_Callback_End()
{
/* Empty ASIO ouput : write offset */
asioDriverInfo.pahsc_hostOutputBufferFrameOffset = 0;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
-void Pa_ASIO_Clear_User_Buffers()
+static void Pa_ASIO_Clear_User_Buffers()
{
if( asioDriverInfo.past->past_InputBuffer != NULL )
{
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------
- void Pa_ASIO_Clear_Output(ASIOBufferInfo* nativeBuffer,
+ static void Pa_ASIO_Clear_Output(ASIOBufferInfo* nativeBuffer,
ASIOSampleType nativeFormat,
- short NumInputChannels,
- short NumOuputChannels,
- int index,
- int hostFrameOffset,
- int frames)
+ long NumInputChannels,
+ long NumOuputChannels,
+ long index,
+ long hostFrameOffset,
+ long frames)
{
switch (nativeFormat) {
//---------------------------------------------------------------------------------------
-void Pa_ASIO_Convert_Inter_Input(
+static void Pa_ASIO_Convert_Inter_Input(
ASIOBufferInfo* nativeBuffer,
void* inputBuffer,
- short NumInputChannels,
- short NumOuputChannels,
- short framePerBuffer,
- short hostFrameOffset,
- short userFrameOffset,
+ long NumInputChannels,
+ long NumOuputChannels,
+ long framePerBuffer,
+ long hostFrameOffset,
+ long userFrameOffset,
ASIOSampleType nativeFormat,
PaSampleFormat paFormat,
PaStreamFlags flags,
- short index)
+ long index)
{
if((NumInputChannels > 0) && (nativeBuffer != NULL))
switch (nativeFormat) {
case ASIOSTInt16LSB:
- Input_Int16_Flot32(nativeBuffer, inBufPtr, framePerBuffer, NumInputChannels, index, hostFrameOffset, userFrameOffset, swap);
+ Input_Int16_Float32(nativeBuffer, inBufPtr, framePerBuffer, NumInputChannels, index, hostFrameOffset, userFrameOffset, swap);
break;
case ASIOSTInt16MSB:
- Input_Int16_Flot32(nativeBuffer, inBufPtr, framePerBuffer, NumInputChannels, index, hostFrameOffset, userFrameOffset,!swap);
+ Input_Int16_Float32(nativeBuffer, inBufPtr, framePerBuffer, NumInputChannels, index, hostFrameOffset, userFrameOffset,!swap);
break;
case ASIOSTInt32LSB:
- Input_Int32_Flot32(nativeBuffer, inBufPtr, framePerBuffer, NumInputChannels, index, hostFrameOffset, userFrameOffset,swap);
+ Input_Int32_Float32(nativeBuffer, inBufPtr, framePerBuffer, NumInputChannels, index, hostFrameOffset, userFrameOffset,swap);
break;
case ASIOSTInt32MSB:
- Input_Int32_Flot32(nativeBuffer, inBufPtr, framePerBuffer, NumInputChannels, index, hostFrameOffset, userFrameOffset,!swap);
+ Input_Int32_Float32(nativeBuffer, inBufPtr, framePerBuffer, NumInputChannels, index, hostFrameOffset, userFrameOffset,!swap);
break;
case ASIOSTFloat32LSB: // IEEE 754 32 bit float, as found on Intel x86 architecture
- Input_Float32_Flot32(nativeBuffer, inBufPtr, framePerBuffer, NumInputChannels, index, hostFrameOffset, userFrameOffset,swap);
+ Input_Float32_Float32(nativeBuffer, inBufPtr, framePerBuffer, NumInputChannels, index, hostFrameOffset, userFrameOffset,swap);
break;
case ASIOSTFloat32MSB: // IEEE 754 32 bit float, as found on Intel x86 architecture
- Input_Float32_Flot32(nativeBuffer, inBufPtr, framePerBuffer, NumInputChannels, index, hostFrameOffset, userFrameOffset,!swap);
+ Input_Float32_Float32(nativeBuffer, inBufPtr, framePerBuffer, NumInputChannels, index, hostFrameOffset, userFrameOffset,!swap);
break;
case ASIOSTInt24LSB: // used for 20 bits as well
//---------------------------------------------------------------------------------------
-void Pa_ASIO_Convert_Inter_Output(ASIOBufferInfo* nativeBuffer,
+static void Pa_ASIO_Convert_Inter_Output(ASIOBufferInfo* nativeBuffer,
void* outputBuffer,
- short NumInputChannels,
- short NumOuputChannels,
- short framePerBuffer,
- short hostFrameOffset,
- short userFrameOffset,
+ long NumInputChannels,
+ long NumOuputChannels,
+ long framePerBuffer,
+ long hostFrameOffset,
+ long userFrameOffset,
ASIOSampleType nativeFormat,
PaSampleFormat paFormat,
PaStreamFlags flags,
- short index)
+ long index)
{
- if((NumOuputChannels > 0) && (nativeBuffer != NULL))
+ if((NumOuputChannels > 0) && (nativeBuffer != NULL))
{
/* Convert from PA format to native format */
}
//---------------------------------------------------
-static int GetHighestBitPosition( unsigned long n )
+static int GetHighestBitPosition (unsigned long n)
{
int pos = -1;
while( n != 0 )
return pos;
}
-//-----------------------------------------------------------------------------
+//------------------------------------------------------------------------------------------
static int GetFirstMultiple(long min, long val ){ return ((min + val - 1) / val) * val; }
-//-----------------------------------------------------------------------------
+//------------------------------------------------------------------------------------------
static int GetFirstPossibleDivisor(long max, long val )
{
for (int i = 2; i < 20; i++) {if (((val%i) == 0) && ((val/i) <= max)) return (val/i); }
int i;
PaDeviceInfo *dev;
double *rates;
- PaError result = paNoError;
-
- /* Free allocated sample rate arrays and names*/
- for( i=0; i<sNumDevices; i++ ){
- dev = &sDevices[i].pad_Info;
- rates = (double *) dev->sampleRates;
- if((rates != NULL)) PaHost_FreeFastMemory(rates, MAX_NUMSAMPLINGRATES * sizeof(double));
- dev->sampleRates = NULL;
- if(dev->name != NULL) PaHost_FreeFastMemory((void *) dev->name, 32);
- dev->name = NULL;
- }
-
- sNumDevices = 0;
-
- /* Dispose : if not done by Pa_CloseStream */
- if(ASIODisposeBuffers() != ASE_OK) result = paHostError;
- if(ASIOExit() != ASE_OK) result = paHostError;
-
- /* remove the loaded ASIO driver */
- asioDrivers->removeCurrentDriver();
+ PaError result = paNoError;
+
+ if (sNumDevices > 0) {
+
+ /* Free allocated sample rate arrays and names*/
+ for( i=0; i<sNumDevices; i++ ){
+ dev = &sDevices[i].pad_Info;
+ rates = (double *) dev->sampleRates;
+ if((rates != NULL)) PaHost_FreeFastMemory(rates, MAX_NUMSAMPLINGRATES * sizeof(double));
+ dev->sampleRates = NULL;
+ if(dev->name != NULL) PaHost_FreeFastMemory((void *) dev->name, 32);
+ dev->name = NULL;
+ }
+
+ sNumDevices = 0;
+
+ /* Dispose : if not done by Pa_CloseStream */
+ if(ASIODisposeBuffers() != ASE_OK) result = paHostError;
+ if(ASIOExit() != ASE_OK) result = paHostError;
+
+ /* remove the loaded ASIO driver */
+ asioDrivers->removeCurrentDriver();
+ }
return result;
}