PortAudio  2.0
Data Structures | Macros | Typedefs | Functions | Variables
pa_asio.cpp File Reference
#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <new>
#include <windows.h>
#include <mmsystem.h>
#include "portaudio.h"
#include "pa_asio.h"
#include "pa_util.h"
#include "pa_allocation.h"
#include "pa_hostapi.h"
#include "pa_stream.h"
#include "pa_cpuload.h"
#include "pa_process.h"
#include "pa_debugprint.h"
#include "pa_ringbuffer.h"
#include "pa_win_coinitialize.h"
#include "asiosys.h"
#include "asio.h"
#include "asiodrivers.h"
#include "iasiothiscallresolver.h"

Data Structures

struct  PaAsioDriverInfo
 
struct  PaAsioHostApiRepresentation
 
struct  PaAsioDeviceInfo
 
struct  PaAsioStreamBlockingState
 
struct  PaAsioStream
 

Macros

#define WIN32
 
#define CARBON_COMPATIBLE   (0)
 
#define PA_ASIO_SET_LAST_HOST_ERROR(errorCode, errorText)   PaUtil_SetLastHostErrorInfo( paASIO, errorCode, errorText )
 
#define PA_ASIO_SET_LAST_SYSTEM_ERROR(errorCode)   PaAsio_SetLastSystemError( errorCode )
 
#define PA_ASIO_SET_LAST_ASIO_ERROR(asioError)   PaUtil_SetLastHostErrorInfo( paASIO, asioError, PaAsio_GetAsioErrorText( asioError ) )
 
#define PA_SWAP32_(x)   ((x>>24) | ((x>>8)&0xFF00) | ((x<<8)&0xFF0000) | (x<<24));
 
#define PA_SWAP_(x, y)   temp=x; x = y; y = temp;
 
#define PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_   13 /* must be the same number of elements as in the array below */
 
#define ASIO64toDouble(a)   ((a).lo + (a).hi * twoRaisedTo32)
 

Typedefs

typedef struct PaAsioDriverInfo PaAsioDriverInfo
 
typedef void PaAsioBufferConverter (void *, long, long)
 
typedef struct PaAsioDeviceInfo PaAsioDeviceInfo
 
typedef BOOL(WINAPIIsDebuggerPresentPtr )(VOID)
 
typedef struct
PaAsioStreamBlockingState 
PaAsioStreamBlockingState
 
typedef struct PaAsioStream PaAsioStream
 

Functions

PaError PaAsio_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex)
 
void AsioSampleTypeLOG (ASIOSampleType type)
 
PaError PaAsio_GetAvailableBufferSizes (PaDeviceIndex device, long *minBufferSizeFrames, long *maxBufferSizeFrames, long *preferredBufferSizeFrames, long *granularity)
 
PaError PaAsio_ShowControlPanel (PaDeviceIndex device, void *systemSpecific)
 
PaError PaAsio_GetInputChannelName (PaDeviceIndex device, int channelIndex, const char **channelName)
 
PaError PaAsio_GetOutputChannelName (PaDeviceIndex device, int channelIndex, const char **channelName)
 
PaError PaAsio_SetStreamSampleRate (PaStream *s, double sampleRate)
 

Variables

AsioDrivers * asioDrivers
 
IsDebuggerPresentPtr IsDebuggerPresent_ = 0
 
const double twoRaisedTo32 = 4294967296.
 

Detailed Description

Note that specific support for paInputUnderflow, paOutputOverflow and paNeverDropInput is not necessary or possible with this driver due to the synchronous full duplex double-buffered architecture of ASIO.

Macro Definition Documentation

#define ASIO64toDouble (   a)    ((a).lo + (a).hi * twoRaisedTo32)
#define CARBON_COMPATIBLE   (0)
#define PA_ASIO_SET_LAST_ASIO_ERROR (   asioError)    PaUtil_SetLastHostErrorInfo( paASIO, asioError, PaAsio_GetAsioErrorText( asioError ) )

Referenced by PaAsio_ShowControlPanel().

#define PA_ASIO_SET_LAST_HOST_ERROR (   errorCode,
  errorText 
)    PaUtil_SetLastHostErrorInfo( paASIO, errorCode, errorText )
#define PA_ASIO_SET_LAST_SYSTEM_ERROR (   errorCode)    PaAsio_SetLastSystemError( errorCode )
#define PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_   13 /* must be the same number of elements as in the array below */
#define PA_SWAP32_ (   x)    ((x>>24) | ((x>>8)&0xFF00) | ((x<<8)&0xFF0000) | (x<<24));
#define PA_SWAP_ (   x,
 
)    temp=x; x = y; y = temp;
#define WIN32

Typedef Documentation

typedef BOOL(WINAPI * IsDebuggerPresentPtr)(VOID)
typedef void PaAsioBufferConverter(void *, long, long)
typedef struct PaAsioStream PaAsioStream

A data structure specifically for storing blocking i/o related data.

Function Documentation

void AsioSampleTypeLOG ( ASIOSampleType  type)

References PA_DEBUG.

PaError PaAsio_GetAvailableBufferSizes ( PaDeviceIndex  device,
long *  minBufferSizeFrames,
long *  maxBufferSizeFrames,
long *  preferredBufferSizeFrames,
long *  granularity 
)

Retrieve legal native buffer sizes for the specificed device, in sample frames.

Parameters
deviceThe global index of the device about which the query is being made.
minBufferSizeFramesA pointer to the location which will receive the minimum buffer size value.
maxBufferSizeFramesA pointer to the location which will receive the maximum buffer size value.
preferredBufferSizeFramesA pointer to the location which will receive the preferred buffer size value.
granularityA pointer to the location which will receive the "granularity". This value determines the step size used to compute the legal values between minBufferSizeFrames and maxBufferSizeFrames. If granularity is -1 then available buffer size values are powers of two.
See Also
ASIOGetBufferSize in the ASIO SDK.
Note
: this function used to be called PaAsio_GetAvailableLatencyValues. There is a #define that maps PaAsio_GetAvailableLatencyValues to this function for backwards compatibility.

References PaAsioDeviceInfo::bufferGranularity, PaUtilHostApiRepresentation::deviceInfos, PaAsioDeviceInfo::maxBufferSize, PaAsioDeviceInfo::minBufferSize, paASIO, paNoError, PaUtil_DeviceIndexToHostApiDeviceIndex(), PaUtil_GetHostApiRepresentation(), and PaAsioDeviceInfo::preferredBufferSize.

PaError PaAsio_GetInputChannelName ( PaDeviceIndex  device,
int  channelIndex,
const char **  channelName 
)

Retrieve a pointer to a string containing the name of the specified input channel. The string is valid until Pa_Terminate is called.

The string will be no longer than 32 characters including the null terminator.

References PaAsioDeviceInfo::asioChannelInfos, PaAsioDeviceInfo::commonDeviceInfo, PaUtilHostApiRepresentation::deviceInfos, PaDeviceInfo::maxInputChannels, paASIO, paInvalidChannelCount, paNoError, PaUtil_DeviceIndexToHostApiDeviceIndex(), and PaUtil_GetHostApiRepresentation().

PaError PaAsio_GetOutputChannelName ( PaDeviceIndex  device,
int  channelIndex,
const char **  channelName 
)

Retrieve a pointer to a string containing the name of the specified input channel. The string is valid until Pa_Terminate is called.

The string will be no longer than 32 characters including the null terminator.

References PaAsioDeviceInfo::asioChannelInfos, PaAsioDeviceInfo::commonDeviceInfo, PaUtilHostApiRepresentation::deviceInfos, PaDeviceInfo::maxInputChannels, PaDeviceInfo::maxOutputChannels, paASIO, paInvalidChannelCount, paNoError, PaUtil_DeviceIndexToHostApiDeviceIndex(), and PaUtil_GetHostApiRepresentation().

PaError PaAsio_Initialize ( PaUtilHostApiRepresentation **  hostApi,
PaHostApiIndex  hostApiIndex 
)
PaError PaAsio_SetStreamSampleRate ( PaStream stream,
double  sampleRate 
)

Set the sample rate of an open paASIO stream.

Parameters
streamThe stream to operate on.
sampleRateThe new sample rate.

Note that this function may fail if the stream is alredy running and the ASIO driver does not support switching the sample rate of a running stream.

Returns paIncompatibleStreamHostApi if stream is not a paASIO stream.

References paBadStreamPtr, and paNoError.

PaError PaAsio_ShowControlPanel ( PaDeviceIndex  device,
void *  systemSpecific 
)

Display the ASIO control panel for the specified device.

Parameters
deviceThe global index of the device whose control panel is to be displayed.
systemSpecificOn Windows, the calling application's main window handle, on Macintosh this value should be zero.

References PaAsioHostApiRepresentation::asioDrivers, PaAsioDeviceInfo::commonDeviceInfo, PaUtilHostApiRepresentation::deviceInfos, PaDeviceInfo::name, PaAsioHostApiRepresentation::openAsioDeviceIndex, PA_ASIO_SET_LAST_ASIO_ERROR, PA_DEBUG, paASIO, paDeviceUnavailable, paNoDevice, paNoError, paUnanticipatedHostError, PaUtil_DeviceIndexToHostApiDeviceIndex(), PaUtil_GetHostApiRepresentation(), PaWinUtil_CoInitialize(), and PaWinUtil_CoUninitialize().

Variable Documentation

AsioDrivers* asioDrivers

Referenced by PaAsio_Initialize().

IsDebuggerPresentPtr IsDebuggerPresent_ = 0

Referenced by PaAsio_Initialize().

const double twoRaisedTo32 = 4294967296.