view dynamin/c/portaudio.d @ 0:aa4efef0f0b1

Initial commit of code.
author Jordan Miner <jminer7@gmail.com>
date Mon, 15 Jun 2009 22:10:48 -0500
parents
children
line wrap: on
line source

module dynamin.c.portaudio;

/*
 * A complete binding to the core of the PortAudio library v19.
 */

version(build) { pragma(link, portaudio); }

extern(C):

int Pa_GetVersion();

char* Pa_GetVersionText();

alias int PaError;

alias int PaErrorCode;
enum : PaErrorCode {
	paNoError = 0,

	paNotInitialized = -10000,
	paUnanticipatedHostError,
	paInvalidChannelCount,
	paInvalidSampleRate,
	paInvalidDevice,
	paInvalidFlag,
	paSampleFormatNotSupported,
	paBadIODeviceCombination,
	paInsufficientMemory,
	paBufferTooBig,
	paBufferTooSmall,
	paNullCallback,
	paBadStreamPtr,
	paTimedOut,
	paInternalError,
	paDeviceUnavailable,
	paIncompatibleHostApiSpecificStreamInfo,
	paStreamIsStopped,
	paStreamIsNotStopped,
	paInputOverflowed,
	paOutputUnderflowed,
	paHostApiNotFound,
	paInvalidHostApi,
	paCanNotReadFromACallbackStream,
	paCanNotWriteToACallbackStream,
	paCanNotReadFromAnOutputOnlyStream,
	paCanNotWriteToAnInputOnlyStream,
	paIncompatibleStreamHostApi,
	paBadBufferPtr
}

char* Pa_GetErrorText(PaError errorCode);

PaError Pa_Initialize();

PaError Pa_Terminate();

alias int PaDeviceIndex;

enum : PaDeviceIndex {
	paNoDevice = -1,
	paUseHostApiSpecificDeviceSpecification  = -2
}

alias int PaHostApiIndex;

PaHostApiIndex Pa_GetHostApiCount();

PaHostApiIndex Pa_GetDefaultHostApi();

alias int PaHostApiTypeId;
enum : PaHostApiTypeId {
	paInDevelopment = 0,
	paDirectSound = 1,
	paMME = 2,
	paASIO = 3,
	paSoundManager = 4,
	paCoreAudio = 5,
	paOSS = 7,
	paALSA = 8,
	paAL = 9,
	paBeOS = 10,
	paWDMKS = 11,
	paJACK = 12,
	paWASAPI = 13,
	paAudioScienceHPI = 14
}

struct PaHostApiInfo {
	int structVersion;
	PaHostApiTypeId type;
	char* name;

	int deviceCount;

	PaDeviceIndex defaultInputDevice;

	PaDeviceIndex defaultOutputDevice;

}

PaHostApiInfo* Pa_GetHostApiInfo(PaHostApiIndex hostApi);

PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex(PaHostApiTypeId type);

PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex(
	PaHostApiIndex hostApi,
	int hostApiDeviceIndex);

struct PaHostErrorInfo {
	PaHostApiTypeId hostApiType;
	int errorCode;
	char* errorText;
}


PaHostErrorInfo* Pa_GetLastHostErrorInfo();

PaDeviceIndex Pa_GetDeviceCount();

PaDeviceIndex Pa_GetDefaultInputDevice();

PaDeviceIndex Pa_GetDefaultOutputDevice();

alias double PaTime;

alias uint PaSampleFormat;

enum : PaSampleFormat {
	paFloat32        = 0x00000001,
	paInt32          = 0x00000002,
	paInt24          = 0x00000004,
	paInt16          = 0x00000008,
	paInt8           = 0x00000010,
	paUInt8          = 0x00000020,
	paCustomFormat   = 0x00010000,

	paNonInterleaved = 0x80000000
}

struct PaDeviceInfo {
	int structVersion;
	char* name;
	PaHostApiIndex hostApi;

	int maxInputChannels;
	int maxOutputChannels;

	PaTime defaultLowInputLatency;
	PaTime defaultLowOutputLatency;
	PaTime defaultHighInputLatency;
	PaTime defaultHighOutputLatency;

	double defaultSampleRate;
}

PaDeviceInfo* Pa_GetDeviceInfo(PaDeviceIndex device);

struct PaStreamParameters {
	PaDeviceIndex device;

	int channelCount;

	PaSampleFormat sampleFormat;

	PaTime suggestedLatency;

	void* hostApiSpecificStreamInfo;
}

const paFormatIsSupported = 0;

PaError Pa_IsFormatSupported(
	PaStreamParameters* inputParameters,
	PaStreamParameters* outputParameters,
	double sampleRate);

alias void PaStream;

const paFramesPerBufferUnspecified = 0;

alias uint PaStreamFlags;
enum : PaStreamFlags {
	paNoFlag                = 0,
	paClipOff               = 0x00000001,
	paDitherOff             = 0x00000002,
	paNeverDropInput        = 0x00000004,
	paPrimeOutputBuffersUsingStreamCallback = 0x00000008,
	paPlatformSpecificFlags = 0xFFFF0000
}

struct PaStreamCallbackTimeInfo {
	PaTime inputBufferAdcTime;
	PaTime currentTime;
	PaTime outputBufferDacTime;
}

alias uint PaStreamCallbackFlags;
enum : PaStreamCallbackFlags {
	paInputUnderflow  = 0x00000001,
	paInputOverflow   = 0x00000002,
	paOutputUnderflow = 0x00000004,
	paOutputOverflow  = 0x00000008,
	paPrimingOutput   = 0x00000010
}

alias uint PaStreamCallbackResult;
enum : PaStreamCallbackResult {
	paContinue = 0,
	paComplete = 1,
	paAbort = 2
}

alias int function(
	void* input, void* output,
	uint frameCount,
	PaStreamCallbackTimeInfo* timeInfo,
	PaStreamCallbackFlags statusFlags,
	void* userData) PaStreamCallback;

PaError Pa_OpenStream(
	PaStream** stream,
	PaStreamParameters* inputParameters,
	PaStreamParameters* outputParameters,
	double sampleRate,
	uint framesPerBuffer,
	PaStreamFlags streamFlags,
	PaStreamCallback streamCallback,
	void* userData);

PaError Pa_OpenDefaultStream(
	PaStream** stream,
	int numInputChannels,
	int numOutputChannels,
	PaSampleFormat sampleFormat,
	double sampleRate,
	uint framesPerBuffer,
	PaStreamCallback streamCallback,
	void* userData);

PaError Pa_CloseStream(PaStream* stream);

alias void function(void* userData) PaStreamFinishedCallback;

PaError Pa_SetStreamFinishedCallback(
	PaStream* stream, PaStreamFinishedCallback streamFinishedCallback);

PaError Pa_StartStream(PaStream* stream);

PaError Pa_StopStream(PaStream* stream);

PaError Pa_AbortStream(PaStream* stream);

PaError Pa_IsStreamStopped(PaStream* stream);

PaError Pa_IsStreamActive(PaStream* stream);

struct PaStreamInfo {
	int structVersion;

	PaTime inputLatency;

	PaTime outputLatency;

	double sampleRate;
}

PaStreamInfo* Pa_GetStreamInfo(PaStream* stream);

PaTime Pa_GetStreamTime(PaStream* stream);

double Pa_GetStreamCpuLoad(PaStream* stream);

PaError Pa_ReadStream(
	PaStream* stream,
	void* buffer,
	uint frames);


PaError Pa_WriteStream(
	PaStream* stream,
	void* buffer,
	uint frames);

int Pa_GetStreamReadAvailable(PaStream* stream);

int Pa_GetStreamWriteAvailable(PaStream* stream);

PaError Pa_GetSampleSize(PaSampleFormat format);

void Pa_Sleep(long msec);