85
paIncompatibleHostApiSpecificStreamInfo,
92
paCanNotReadFromACallbackStream, /**< @todo review error code name */
93
paCanNotWriteToACallbackStream, /**< @todo review error code name */
94
paCanNotReadFromAnOutputOnlyStream, /**< @todo review error code name */
95
paCanNotWriteToAnInputOnlyStream, /**< @todo review error code name */
96
paIncompatibleStreamHostApi,
101
/** Translate the supplied PortAudio error code into a human readable
104
const char *Pa_GetErrorText( PaError errorCode );
107
/** Library initialization function - call this before using PortAudio.
108
This function initialises internal data structures and prepares underlying
109
host APIs for use. This function MUST be called before using any other
110
PortAudio API functions.
112
If Pa_Initialize() is called multiple times, each successful
113
call must be matched with a corresponding call to Pa_Terminate().
114
Pairs of calls to Pa_Initialize()/Pa_Terminate() may overlap, and are not
115
required to be fully nested.
117
Note that if Pa_Initialize() returns an error code, Pa_Terminate() should
120
@return paNoError if successful, otherwise an error code indicating the cause
67
Pa_Initialize() is the library initialisation function - call this before
125
72
PaError Pa_Initialize( void );
128
/** Library termination function - call this when finished using PortAudio.
129
This function deallocates all resources allocated by PortAudio since it was
130
initializied by a call to Pa_Initialize(). In cases where Pa_Initialise() has
131
been called multiple times, each call must be matched with a corresponding call
132
to Pa_Terminate(). The final matching call to Pa_Terminate() will automatically
133
close any PortAudio streams that are still open.
135
Pa_Terminate() MUST be called before exiting a program which uses PortAudio.
136
Failure to do so may result in serious resource leaks, such as audio devices
137
not being available until the next reboot.
139
@return paNoError if successful, otherwise an error code indicating the cause
75
Pa_Terminate() is the library termination function - call this after
144
80
PaError Pa_Terminate( void );
148
/** The type used to refer to audio devices. Values of this type usually
149
range from 0 to (Pa_DeviceCount-1), and may also take on the PaNoDevice
150
and paUseHostApiSpecificDeviceSpecification values.
152
@see Pa_DeviceCount, paNoDevice, paUseHostApiSpecificDeviceSpecification
154
typedef int PaDeviceIndex;
157
/** A special PaDeviceIndex value indicating that no device is available,
162
#define paNoDevice ((PaDeviceIndex)-1)
165
/** A special PaDeviceIndex value indicating that the device(s) to be used
166
are specified in the host api specific stream info structure.
170
#define paUseHostApiSpecificDeviceSpecification ((PaDeviceIndex)-2)
173
/* Host API enumeration mechanism */
175
/** The type used to enumerate to host APIs at runtime. Values of this type
176
range from 0 to (Pa_GetHostApiCount()-1).
178
@see Pa_GetHostApiCount
180
typedef int PaHostApiIndex;
183
/** Retrieve the number of available host APIs. Even if a host API is
184
available it may have no devices available.
186
@return A non-negative value indicating the number of available host APIs
187
or, a PaErrorCode (which are always negative) if PortAudio is not initialized
188
or an error is encountered.
192
PaHostApiIndex Pa_GetHostApiCount( void );
195
/** Retrieve the index of the default host API. The default host API will be
196
the lowest common denominator host API on the current platform and is
197
unlikely to provide the best performance.
199
@return A non-negative value ranging from 0 to (Pa_GetHostApiCount()-1)
200
indicating the default host API index or, a PaErrorCode (which are always
201
negative) if PortAudio is not initialized or an error is encountered.
203
PaHostApiIndex Pa_GetDefaultHostApi( void );
206
/** Unchanging unique identifiers for each supported host API. This type
207
is used in the PaHostApiInfo structure. The values are guaranteed to be
208
unique and to never change, thus allowing code to be written that
209
conditionally uses host API specific extensions.
211
New type ids will be allocated when support for a host API reaches
212
"public alpha" status, prior to that developers should use the
213
paInDevelopment type id.
217
typedef enum PaHostApiTypeId
219
paInDevelopment=0, /* use while developing support for a new host API */
236
/** A structure containing information about a particular host API. */
238
typedef struct PaHostApiInfo
240
/** this is struct version 1 */
242
/** The well known unique identifier of this host API @see PaHostApiTypeId */
243
PaHostApiTypeId type;
244
/** A textual description of the host API for display on user interfaces. */
247
/** The number of devices belonging to this host API. This field may be
248
used in conjunction with Pa_HostApiDeviceIndexToDeviceIndex() to enumerate
249
all devices for this host API.
250
@see Pa_HostApiDeviceIndexToDeviceIndex
254
/** The default input device for this host API. The value will be a
255
device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice
256
if no default input device is available.
258
PaDeviceIndex defaultInputDevice;
260
/** The default output device for this host API. The value will be a
261
device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice
262
if no default output device is available.
264
PaDeviceIndex defaultOutputDevice;
269
/** Retrieve a pointer to a structure containing information about a specific
272
@param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1)
274
@return A pointer to an immutable PaHostApiInfo structure describing
275
a specific host API. If the hostApi parameter is out of range or an error
276
is encountered, the function returns NULL.
278
The returned structure is owned by the PortAudio implementation and must not
279
be manipulated or freed. The pointer is only guaranteed to be valid between
280
calls to Pa_Initialize() and Pa_Terminate().
282
const PaHostApiInfo * Pa_GetHostApiInfo( PaHostApiIndex hostApi );
285
/** Convert a static host API unique identifier, into a runtime
288
@param type A unique host API identifier belonging to the PaHostApiTypeId
291
@return A valid PaHostApiIndex ranging from 0 to (Pa_GetHostApiCount()-1) or,
292
a PaErrorCode (which are always negative) if PortAudio is not initialized
293
or an error is encountered.
295
The paHostApiNotFound error code indicates that the host API specified by the
296
type parameter is not available.
300
PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type );
303
/** Convert a host-API-specific device index to standard PortAudio device index.
304
This function may be used in conjunction with the deviceCount field of
305
PaHostApiInfo to enumerate all devices for the specified host API.
307
@param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1)
309
@param hostApiDeviceIndex A valid per-host device index in the range
310
0 to (Pa_GetHostApiInfo(hostApi)->deviceCount-1)
312
@return A non-negative PaDeviceIndex ranging from 0 to (Pa_GetDeviceCount()-1)
313
or, a PaErrorCode (which are always negative) if PortAudio is not initialized
314
or an error is encountered.
316
A paInvalidHostApi error code indicates that the host API index specified by
317
the hostApi parameter is out of range.
319
A paInvalidDevice error code indicates that the hostApiDeviceIndex parameter
324
PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex( PaHostApiIndex hostApi,
325
int hostApiDeviceIndex );
329
/** Structure used to return information about a host error condition.
331
typedef struct PaHostErrorInfo{
332
PaHostApiTypeId hostApiType; /**< the host API which returned the error code */
333
long errorCode; /**< the error code returned */
334
const char *errorText; /**< a textual description of the error if available, otherwise a zero-length string */
338
/** Return information about the last host error encountered. The error
339
information returned by Pa_GetLastHostErrorInfo() will never be modified
340
asyncronously by errors occurring in other PortAudio owned threads
341
(such as the thread that manages the stream callback.)
343
This function is provided as a last resort, primarily to enhance debugging
344
by providing clients with access to all available error information.
346
@return A pointer to an immutable structure constaining information about
347
the host error. The values in this structure will only be valid if a
348
PortAudio function has previously returned the paUnanticipatedHostError
351
const PaHostErrorInfo* Pa_GetLastHostErrorInfo( void );
355
/* Device enumeration and capabilities */
357
/** Retrieve the number of available devices. The number of available devices
360
@return A non-negative value indicating the number of available devices or,
361
a PaErrorCode (which are always negative) if PortAudio is not initialized
362
or an error is encountered.
364
PaDeviceIndex Pa_GetDeviceCount( void );
367
/** Retrieve the index of the default input device. The result can be
368
used in the inputDevice parameter to Pa_OpenStream().
370
@return The default input device index for the default host API, or paNoDevice
371
if no default input device is available or an error was encountered.
373
PaDeviceIndex Pa_GetDefaultInputDevice( void );
376
/** Retrieve the index of the default output device. The result can be
377
used in the outputDevice parameter to Pa_OpenStream().
379
@return The default output device index for the defualt host API, or paNoDevice
380
if no default output device is available or an error was encountered.
383
On the PC, the user can specify a default device by
384
setting an environment variable. For example, to use device #1.
386
set PA_RECOMMENDED_OUTPUT_DEVICE=1
388
The user should first determine the available device ids by using
389
the supplied application "pa_devs".
391
PaDeviceIndex Pa_GetDefaultOutputDevice( void );
394
/** The type used to represent monotonic time in seconds that can be used
395
for syncronisation. The type is used for the outTime argument to the
396
PaStreamCallback and as the result of Pa_GetStreamTime().
398
@see PaStreamCallback, Pa_GetStreamTime
400
typedef double PaTime;
403
/** A type used to specify one or more sample formats. Each value indicates
404
a possible format for sound data passed to and from the stream callback,
405
Pa_ReadStream and Pa_WriteStream.
407
The standard formats paFloat32, paInt16, paInt32, paInt24, paInt8
408
and aUInt8 are usually implemented by all implementations.
410
The floating point representation (paFloat32) uses +1.0 and -1.0 as the
83
Pa_GetHostError() returns a host specific error code.
84
This can be called after receiving a PortAudio error code of paHostError.
88
long Pa_GetHostError( void );
91
Pa_GetErrorText() translates the supplied PortAudio error number
92
into a human readable message.
96
const char *Pa_GetErrorText( PaError errnum );
101
These are formats used to pass sound data between the callback and the
102
stream. Each device has a "native" format which may be used when optimum
103
efficiency or control over conversion is required.
105
Formats marked "always available" are supported (emulated) by all
106
PortAudio implementations.
108
The floating point representation (paFloat32) uses +1.0 and -1.0 as the
411
109
maximum and minimum respectively.
413
111
paUInt8 is an unsigned 8 bit format where 128 is considered "ground"
415
The paNonInterleaved flag indicates that a multichannel buffer is passed
416
as a set of non-interleaved pointers.
418
@see Pa_OpenStream, Pa_OpenDefaultStream, PaDeviceInfo
419
@see paFloat32, paInt16, paInt32, paInt24, paInt8
420
@see paUInt8, paCustomFormat, paNonInterleaved
422
115
typedef unsigned long PaSampleFormat;
425
#define paFloat32 ((PaSampleFormat) 0x00000001) /**< @see PaSampleFormat */
426
#define paInt32 ((PaSampleFormat) 0x00000002) /**< @see PaSampleFormat */
427
#define paInt24 ((PaSampleFormat) 0x00000004) /**< Packed 24 bit format. @see PaSampleFormat */
428
#define paInt16 ((PaSampleFormat) 0x00000008) /**< @see PaSampleFormat */
429
#define paInt8 ((PaSampleFormat) 0x00000010) /**< @see PaSampleFormat */
430
#define paUInt8 ((PaSampleFormat) 0x00000020) /**< @see PaSampleFormat */
431
#define paCustomFormat ((PaSampleFormat) 0x00010000)/**< @see PaSampleFormat */
433
#define paNonInterleaved ((PaSampleFormat) 0x80000000)
435
/** A structure providing information and capabilities of PortAudio devices.
436
Devices may support input, output or both input and output.
116
#define paFloat32 ((PaSampleFormat) (1<<0)) /*always available*/
117
#define paInt16 ((PaSampleFormat) (1<<1)) /*always available*/
118
#define paInt32 ((PaSampleFormat) (1<<2)) /*always available*/
119
#define paInt24 ((PaSampleFormat) (1<<3))
120
#define paPackedInt24 ((PaSampleFormat) (1<<4))
121
#define paInt8 ((PaSampleFormat) (1<<5))
122
#define paUInt8 ((PaSampleFormat) (1<<6))
123
#define paCustomFormat ((PaSampleFormat) (1<<16))
126
Device enumeration mechanism.
128
Device ids range from 0 to Pa_CountDevices()-1.
130
Devices may support input, output or both.
438
typedef struct PaDeviceInfo
134
typedef int PaDeviceID;
135
#define paNoDevice -1
137
int Pa_CountDevices( void );
440
int structVersion; /* this is struct version 2 */
441
142
const char *name;
442
PaHostApiIndex hostApi; /* note this is a host API index, not a type id*/
444
143
int maxInputChannels;
445
144
int maxOutputChannels;
447
/* Default latency values for interactive performance. */
448
PaTime defaultLowInputLatency;
449
PaTime defaultLowOutputLatency;
450
/* Default latency values for robust non-interactive applications (eg. playing sound files). */
451
PaTime defaultHighInputLatency;
452
PaTime defaultHighOutputLatency;
454
double defaultSampleRate;
458
/** Retrieve a pointer to a PaDeviceInfo structure containing information
459
about the specified device.
460
@return A pointer to an immutable PaDeviceInfo structure. If the device
461
parameter is out of range the function returns NULL.
463
@param device A valid device index in the range 0 to (Pa_GetDeviceCount()-1)
465
@note PortAudio manages the memory referenced by the returned pointer,
466
the client must not manipulate or free the memory. The pointer is only
467
guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate().
469
@see PaDeviceInfo, PaDeviceIndex
471
const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device );
474
/** Parameters for one direction (input or output) of a stream.
476
typedef struct PaStreamParameters
478
/** A valid device index in the range 0 to (Pa_GetDeviceCount()-1)
479
specifying the device to be used or the special constant
480
paUseHostApiSpecificDeviceSpecification which indicates that the actual
481
device(s) to use are specified in hostApiSpecificStreamInfo.
482
This field must not be set to paNoDevice.
484
PaDeviceIndex device;
486
/** The number of channels of sound to be delivered to the
487
stream callback or accessed by Pa_ReadStream() or Pa_WriteStream().
488
It can range from 1 to the value of maxInputChannels in the
489
PaDeviceInfo record for the device specified by the device parameter.
493
/** The sample format of the buffer provided to the stream callback,
494
a_ReadStream() or Pa_WriteStream(). It may be any of the formats described
495
by the PaSampleFormat enumeration.
497
PaSampleFormat sampleFormat;
499
/** The desired latency in seconds. Where practical, implementations should
500
configure their latency based on these parameters, otherwise they may
501
choose the closest viable latency instead. Unless the suggested latency
502
is greater than the absolute upper limit for the device implementations
503
should round the suggestedLatency up to the next practial value - ie to
504
provide an equal or higher latency than suggestedLatency wherever possibe.
505
Actual latency values for an open stream may be retrieved using the
506
inputLatency and outputLatency fields of the PaStreamInfo structure
507
returned by Pa_GetStreamInfo().
508
@see default*Latency in PaDeviceInfo, *Latency in PaStreamInfo
510
PaTime suggestedLatency;
512
/** An optional pointer to a host api specific data structure
513
containing additional information for device setup and/or stream processing.
514
hostApiSpecificStreamInfo is never required for correct operation,
515
if not used it should be set to NULL.
517
void *hostApiSpecificStreamInfo;
519
} PaStreamParameters;
522
/** Return code for Pa_IsFormatSupported indicating success. */
523
#define paFormatIsSupported (0)
525
/** Determine whether it would be possible to open a stream with the specified
528
@param inputParameters A structure that describes the input parameters used to
529
open a stream. The suggestedLatency field is ignored. See PaStreamParameters
530
for a description of these parameters. inputParameters must be NULL for
533
@param outputParameters A structure that describes the output parameters used
534
to open a stream. The suggestedLatency field is ignored. See PaStreamParameters
535
for a description of these parameters. outputParameters must be NULL for
538
@param sampleRate The required sampleRate. For full-duplex streams it is the
539
sample rate for both input and output
541
@return Returns 0 if the format is supported, and an error code indicating why
542
the format is not supported otherwise. The constant paFormatIsSupported is
543
provided to compare with the return value for success.
545
@see paFormatIsSupported, PaStreamParameters
547
PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters,
548
const PaStreamParameters *outputParameters,
553
/* Streaming types and functions */
557
A single PaStream can provide multiple channels of real-time
558
streaming audio input and output to a client application. A stream
559
provides access to audio hardware represented by one or more
560
PaDevices. Depending on the underlying Host API, it may be possible
561
to open multiple streams using the same device, however this behavior
562
is implementation defined. Portable applications should assume that
563
a PaDevice may be simultaneously used by at most one PaStream.
565
Pointers to PaStream objects are passed between PortAudio functions that
568
@see Pa_OpenStream, Pa_OpenDefaultStream, Pa_OpenDefaultStream, Pa_CloseStream,
569
Pa_StartStream, Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive,
570
Pa_GetStreamTime, Pa_GetStreamCpuLoad
573
typedef void PaStream;
576
/** Can be passed as the framesPerBuffer parameter to Pa_OpenStream()
577
or Pa_OpenDefaultStream() to indicate that the stream callback will
578
accept buffers of any size.
580
#define paFramesPerBufferUnspecified (0)
583
/** Flags used to control the behavior of a stream. They are passed as
584
parameters to Pa_OpenStream or Pa_OpenDefaultStream. Multiple flags may be
587
@see Pa_OpenStream, Pa_OpenDefaultStream
588
@see paNoFlag, paClipOff, paDitherOff, paNeverDropInput,
589
paPrimeOutputBuffersUsingStreamCallback, paPlatformSpecificFlags
591
typedef unsigned long PaStreamFlags;
593
/** @see PaStreamFlags */
594
#define paNoFlag ((PaStreamFlags) 0)
596
/** Disable default clipping of out of range samples.
599
#define paClipOff ((PaStreamFlags) 0x00000001)
601
/** Disable default dithering.
604
#define paDitherOff ((PaStreamFlags) 0x00000002)
606
/** Flag requests that where possible a full duplex stream will not discard
607
overflowed input samples without calling the stream callback. This flag is
608
only valid for full duplex callback streams and only when used in combination
609
with the paFramesPerBufferUnspecified (0) framesPerBuffer parameter. Using
610
this flag incorrectly results in a paInvalidFlag error being returned from
611
Pa_OpenStream and Pa_OpenDefaultStream.
613
@see PaStreamFlags, paFramesPerBufferUnspecified
615
#define paNeverDropInput ((PaStreamFlags) 0x00000004)
617
/** Call the stream callback to fill initial output buffers, rather than the
618
default behavior of priming the buffers with zeros (silence). This flag has
619
no effect for input-only and blocking read/write streams.
623
#define paPrimeOutputBuffersUsingStreamCallback ((PaStreamFlags) 0x00000008)
625
/** A mask specifying the platform specific bits.
628
#define paPlatformSpecificFlags ((PaStreamFlags)0xFFFF0000)
631
Timing information for the buffers passed to the stream callback.
633
typedef struct PaStreamCallbackTimeInfo{
634
PaTime inputBufferAdcTime;
636
PaTime outputBufferDacTime;
637
} PaStreamCallbackTimeInfo;
641
Flag bit constants for the statusFlags to PaStreamCallback.
643
@see paInputUnderflow, paInputOverflow, paOutputUnderflow, paOutputOverflow,
646
typedef unsigned long PaStreamCallbackFlags;
648
/** In a stream opened with paFramesPerBufferUnspecified, indicates that
649
input data is all silence (zeros) because no real data is available. In a
650
stream opened without paFramesPerBufferUnspecified, it indicates that one or
651
more zero samples have been inserted into the input buffer to compensate
652
for an input underflow.
653
@see PaStreamCallbackFlags
655
#define paInputUnderflow ((PaStreamCallbackFlags) 0x00000001)
657
/** In a stream opened with paFramesPerBufferUnspecified, indicates that data
658
prior to the first sample of the input buffer was discarded due to an
659
overflow, possibly because the stream callback is using too much CPU time.
660
Otherwise indicates that data prior to one or more samples in the
661
input buffer was discarded.
662
@see PaStreamCallbackFlags
664
#define paInputOverflow ((PaStreamCallbackFlags) 0x00000002)
666
/** Indicates that output data (or a gap) was inserted, possibly because the
667
stream callback is using too much CPU time.
668
@see PaStreamCallbackFlags
670
#define paOutputUnderflow ((PaStreamCallbackFlags) 0x00000004)
672
/** Indicates that output data will be discarded because no room is available.
673
@see PaStreamCallbackFlags
675
#define paOutputOverflow ((PaStreamCallbackFlags) 0x00000008)
677
/** Some of all of the output data will be used to prime the stream, input
679
@see PaStreamCallbackFlags
681
#define paPrimingOutput ((PaStreamCallbackFlags) 0x00000010)
684
Allowable return values for the PaStreamCallback.
685
@see PaStreamCallback
687
typedef enum PaStreamCallbackResult
692
} PaStreamCallbackResult;
696
Functions of type PaStreamCallback are implemented by PortAudio clients.
697
They consume, process or generate audio in response to requests from an
698
active PortAudio stream.
700
@param input and @param output are arrays of interleaved samples,
145
/* Number of discrete rates, or -1 if range supported. */
147
/* Array of supported sample rates, or {min,max} if range supported. */
148
const double *sampleRates;
149
PaSampleFormat nativeSampleFormats;
154
Pa_GetDefaultInputDeviceID(), Pa_GetDefaultOutputDeviceID() return the
155
default device ids for input and output respectively, or paNoDevice if
156
no device is available.
157
The result can be passed to Pa_OpenStream().
159
On the PC, the user can specify a default device by
160
setting an environment variable. For example, to use device #1.
162
set PA_RECOMMENDED_OUTPUT_DEVICE=1
164
The user should first determine the available device ids by using
165
the supplied application "pa_devs".
169
PaDeviceID Pa_GetDefaultInputDeviceID( void );
170
PaDeviceID Pa_GetDefaultOutputDeviceID( void );
175
Pa_GetDeviceInfo() returns a pointer to an immutable PaDeviceInfo structure
176
for the device specified.
177
If the device parameter is out of range the function returns NULL.
179
PortAudio manages the memory referenced by the returned pointer, the client
180
must not manipulate or free the memory. The pointer is only guaranteed to be
181
valid between calls to Pa_Initialize() and Pa_Terminate().
185
const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceID device );
188
PaTimestamp is used to represent a continuous sample clock with arbitrary
189
start time that can be used for syncronization. The type is used for the
190
outTime argument to the PortAudioCallback and as the result of Pa_StreamTime()
194
typedef double PaTimestamp;
197
PortAudioCallback is implemented by PortAudio clients.
199
inputBuffer and outputBuffer are arrays of interleaved samples,
701
200
the format, packing and number of channels used by the buffers are
702
determined by parameters to Pa_OpenStream().
704
@param frameCount The number of sample frames to be processed by
707
@param timeInfo The time in seconds when the first sample of the input
708
buffer was received at the audio input, the time in seconds when the first
709
sample of the output buffer will begin being played at the audio output, and
710
the time in seconds when the stream callback was called.
711
See also Pa_GetStreamTime()
713
@param statusFlags Flags indicating whether input and/or output buffers
714
have been inserted or will be dropped to overcome underflow or overflow
717
@param userData The value of a user supplied pointer passed to
718
Pa_OpenStream() intended for storing synthesis data etc.
721
The stream callback should return one of the values in the
722
PaStreamCallbackResult enumeration. To ensure that the callback continues
723
to be called, it should return paContinue (0). Either paComplete or paAbort
724
can be returned to finish stream processing, after either of these values is
725
returned the callback will not be called again. If paAbort is returned the
726
stream will finish as soon as possible. If paComplete is returned, the stream
727
will continue until all buffers generated by the callback have been played.
728
This may be useful in applications such as soundfile players where a specific
729
duration of output is required. However, it is not necessary to utilise this
730
mechanism as Pa_StopStream(), Pa_AbortStream() or Pa_CloseStream() can also
731
be used to stop the stream. The callback must always fill the entire output
732
buffer irrespective of its return value.
734
@see Pa_OpenStream, Pa_OpenDefaultStream
736
@note With the exception of Pa_GetStreamCpuLoad() it is not permissable to call
737
PortAudio API functions from within the stream callback.
739
typedef int PaStreamCallback(
740
const void *input, void *output,
741
unsigned long frameCount,
742
const PaStreamCallbackTimeInfo* timeInfo,
743
PaStreamCallbackFlags statusFlags,
747
/** Opens a stream for either input, output or both.
749
@param stream The address of a PaStream pointer which will receive
201
determined by parameters to Pa_OpenStream() (see below).
203
framesPerBuffer is the number of sample frames to be processed by the callback.
205
outTime is the time in samples when the buffer(s) processed by
206
this callback will begin being played at the audio output.
207
See also Pa_StreamTime()
209
userData is the value of a user supplied pointer passed to Pa_OpenStream()
210
intended for storing synthesis data etc.
213
The callback can return a non-zero value to stop the stream. This may be
214
useful in applications such as soundfile players where a specific duration
215
of output is required. However, it is not necessary to utilise this mechanism
216
as StopStream() will also terminate the stream. A callback returning a
217
non-zero value must fill the entire outputBuffer.
219
NOTE: None of the other stream functions may be called from within the
220
callback function except for Pa_GetCPULoad().
224
typedef int (PortAudioCallback)(
225
void *inputBuffer, void *outputBuffer,
226
unsigned long framesPerBuffer,
227
PaTimestamp outTime, void *userData );
233
These flags may be supplied (ored together) in the streamFlags argument to
234
the Pa_OpenStream() function.
239
#define paClipOff (1<<0) /* disable default clipping of out of range samples */
240
#define paDitherOff (1<<1) /* disable default dithering */
241
#define paPlatformSpecificFlags (0x00010000)
242
typedef unsigned long PaStreamFlags;
245
A single PortAudioStream provides multiple channels of real-time
246
input and output audio streaming to a client application.
247
Pointers to PortAudioStream objects are passed between PortAudio functions.
250
typedef void PortAudioStream;
251
#define PaStream PortAudioStream
254
Pa_OpenStream() opens a stream for either input, output or both.
256
stream is the address of a PortAudioStream pointer which will receive
750
257
a pointer to the newly opened stream.
752
@param inputParameters A structure that describes the input parameters used by
753
the opened stream. See PaStreamParameters for a description of these parameters.
754
inputParameters must be NULL for output-only streams.
756
@param outputParameters A structure that describes the output parameters used by
757
the opened stream. See PaStreamParameters for a description of these parameters.
758
outputParameters must be NULL for input-only streams.
760
@param sampleRate The desired sampleRate. For full-duplex streams it is the
259
inputDevice is the id of the device used for input (see PaDeviceID above.)
260
inputDevice may be paNoDevice to indicate that an input device is not required.
262
numInputChannels is the number of channels of sound to be delivered to the
263
callback. It can range from 1 to the value of maxInputChannels in the
264
PaDeviceInfo record for the device specified by the inputDevice parameter.
265
If inputDevice is paNoDevice numInputChannels is ignored.
267
inputSampleFormat is the sample format of inputBuffer provided to the callback
268
function. inputSampleFormat may be any of the formats described by the
269
PaSampleFormat enumeration (see above). PortAudio guarantees support for
270
the device's native formats (nativeSampleFormats in the device info record)
271
and additionally 16 and 32 bit integer and 32 bit floating point formats.
272
Support for other formats is implementation defined.
274
inputDriverInfo is a pointer to an optional driver specific data structure
275
containing additional information for device setup or stream processing.
276
inputDriverInfo is never required for correct operation. If not used
277
inputDriverInfo should be NULL.
279
outputDevice is the id of the device used for output (see PaDeviceID above.)
280
outputDevice may be paNoDevice to indicate that an output device is not required.
282
numOutputChannels is the number of channels of sound to be supplied by the
283
callback. See the definition of numInputChannels above for more details.
285
outputSampleFormat is the sample format of the outputBuffer filled by the
286
callback function. See the definition of inputSampleFormat above for more
289
outputDriverInfo is a pointer to an optional driver specific data structure
290
containing additional information for device setup or stream processing.
291
outputDriverInfo is never required for correct operation. If not used
292
outputDriverInfo should be NULL.
294
sampleRate is the desired sampleRate. For full-duplex streams it is the
761
295
sample rate for both input and output
763
@param framesPerBuffer The number of frames passed to the stream callback
764
function, or the preferred block granularity for a blocking read/write stream.
765
The special value paFramesPerBufferUnspecified (0) may be used to request that
766
the stream callback will recieve an optimal (and possibly varying) number of
767
frames based on host requirements and the requested latency settings.
768
Note: With some host APIs, the use of non-zero framesPerBuffer for a callback
769
stream may introduce an additional layer of buffering which could introduce
770
additional latency. PortAudio guarantees that the additional latency
771
will be kept to the theoretical minimum however, it is strongly recommended
772
that a non-zero framesPerBuffer value only be used when your algorithm
773
requires a fixed number of frames per stream callback.
775
@param streamFlags Flags which modify the behaviour of the streaming process.
776
This parameter may contain a combination of flags ORed together. Some flags may
777
only be relevant to certain buffer formats.
779
@param streamCallback A pointer to a client supplied function that is responsible
780
for processing and filling input and output buffers. If this parameter is NULL
781
the stream will be opened in 'blocking read/write' mode. In blocking mode,
782
the client can receive sample data using Pa_ReadStream and write sample data
783
using Pa_WriteStream, the number of samples that may be read or written
784
without blocking is returned by Pa_GetStreamReadAvailable and
785
Pa_GetStreamWriteAvailable respectively.
787
@param userData A client supplied pointer which is passed to the stream callback
297
framesPerBuffer is the length in sample frames of all internal sample buffers
298
used for communication with platform specific audio routines. Wherever
299
possible this corresponds to the framesPerBuffer parameter passed to the
302
numberOfBuffers is the number of buffers used for multibuffered communication
303
with the platform specific audio routines. If you pass zero, then an optimum
304
value will be chosen for you internally. This parameter is provided only
305
as a guide - and does not imply that an implementation must use multibuffered
306
i/o when reliable double buffering is available (such as SndPlayDoubleBuffer()
309
streamFlags may contain a combination of flags ORed together.
310
These flags modify the behaviour of the streaming process. Some flags may only
311
be relevant to certain buffer formats.
313
callback is a pointer to a client supplied function that is responsible
314
for processing and filling input and output buffers (see above for details.)
316
userData is a client supplied pointer which is passed to the callback
788
317
function. It could for example, contain a pointer to instance data necessary
789
for processing the audio buffers. This parameter is ignored if streamCallback
793
Upon success Pa_OpenStream() returns paNoError and places a pointer to a
794
valid PaStream in the stream argument. The stream is inactive (stopped).
795
If a call to Pa_OpenStream() fails, a non-zero error code is returned (see
796
PaError for possible error codes) and the value of stream is invalid.
318
for processing the audio buffers.
321
Upon success Pa_OpenStream() returns PaNoError and places a pointer to a
322
valid PortAudioStream in the stream argument. The stream is inactive (stopped).
323
If a call to Pa_OpenStream() fails a non-zero error code is returned (see
324
PaError above) and the value of stream is invalid.
798
@see PaStreamParameters, PaStreamCallback, Pa_ReadStream, Pa_WriteStream,
799
Pa_GetStreamReadAvailable, Pa_GetStreamWriteAvailable
801
PaError Pa_OpenStream( PaStream** stream,
802
const PaStreamParameters *inputParameters,
803
const PaStreamParameters *outputParameters,
328
PaError Pa_OpenStream( PortAudioStream** stream,
329
PaDeviceID inputDevice,
330
int numInputChannels,
331
PaSampleFormat inputSampleFormat,
332
void *inputDriverInfo,
333
PaDeviceID outputDevice,
334
int numOutputChannels,
335
PaSampleFormat outputSampleFormat,
336
void *outputDriverInfo,
804
337
double sampleRate,
805
338
unsigned long framesPerBuffer,
339
unsigned long numberOfBuffers,
806
340
PaStreamFlags streamFlags,
807
PaStreamCallback *streamCallback,
341
PortAudioCallback *callback,
808
342
void *userData );
811
/** A simplified version of Pa_OpenStream() that opens the default input
812
and/or output devices.
814
@param stream The address of a PaStream pointer which will receive
815
a pointer to the newly opened stream.
817
@param numInputChannels The number of channels of sound that will be supplied
818
to the stream callback or returned by Pa_ReadStream. It can range from 1 to
819
the value of maxInputChannels in the PaDeviceInfo record for the default input
820
device. If 0 the stream is opened as an output-only stream.
822
@param numOutputChannels The number of channels of sound to be delivered to the
823
stream callback or passed to Pa_WriteStream. It can range from 1 to the value
824
of maxOutputChannels in the PaDeviceInfo record for the default output dvice.
825
If 0 the stream is opened as an output-only stream.
827
@param sampleFormat The sample format of both the input and output buffers
828
provided to the callback or passed to and from Pa_ReadStream and Pa_WriteStream.
829
sampleFormat may be any of the formats described by the PaSampleFormat
832
@param sampleRate Same as Pa_OpenStream parameter of the same name.
833
@param framesPerBuffer Same as Pa_OpenStream parameter of the same name.
834
@param streamCallback Same as Pa_OpenStream parameter of the same name.
835
@param userData Same as Pa_OpenStream parameter of the same name.
837
@return As for Pa_OpenStream
839
@see Pa_OpenStream, PaStreamCallback
346
Pa_OpenDefaultStream() is a simplified version of Pa_OpenStream() that opens
347
the default input and/or output devices. Most parameters have identical meaning
348
to their Pa_OpenStream() counterparts, with the following exceptions:
350
If either numInputChannels or numOutputChannels is 0 the respective device
351
is not opened. This has the same effect as passing paNoDevice in the device
352
arguments to Pa_OpenStream().
354
sampleFormat applies to both the input and output buffers.
841
PaError Pa_OpenDefaultStream( PaStream** stream,
358
PaError Pa_OpenDefaultStream( PortAudioStream** stream,
842
359
int numInputChannels,
843
360
int numOutputChannels,
844
361
PaSampleFormat sampleFormat,
845
362
double sampleRate,
846
363
unsigned long framesPerBuffer,
847
PaStreamCallback *streamCallback,
364
unsigned long numberOfBuffers,
365
PortAudioCallback *callback,
848
366
void *userData );
851
/** Closes an audio stream. If the audio stream is active it
852
discards any pending buffers as if Pa_AbortStream() had been called.
854
PaError Pa_CloseStream( PaStream *stream );
857
/** Functions of type PaStreamFinishedCallback are implemented by PortAudio
858
clients. They can be registered with a stream using the Pa_SetStreamFinishedCallback
859
function. Once registered they are called when the stream becomes inactive
860
(ie once a call to Pa_StopStream() will not block).
861
A stream will become inactive after the stream callback returns non-zero,
862
or when Pa_StopStream or Pa_AbortStream is called. For a stream providing audio
863
output, if the stream callback returns paComplete, or Pa_StopStream is called,
864
the stream finished callback will not be called until all generated sample data
867
@param userData The userData parameter supplied to Pa_OpenStream()
869
@see Pa_SetStreamFinishedCallback
871
typedef void PaStreamFinishedCallback( void *userData );
874
/** Register a stream finished callback function which will be called when the
875
stream becomes inactive. See the description of PaStreamFinishedCallback for
876
further details about when the callback will be called.
878
@param stream a pointer to a PaStream that is in the stopped state - if the
879
stream is not stopped, the stream's finished callback will remain unchanged
880
and an error code will be returned.
882
@param streamFinishedCallback a pointer to a function with the same signature
883
as PaStreamFinishedCallback, that will be called when the stream becomes
884
inactive. Passing NULL for this parameter will un-register a previously
885
registered stream finished callback function.
887
@return on success returns paNoError, otherwise an error code indicating the cause
890
@see PaStreamFinishedCallback
892
PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback );
895
/** Commences audio processing.
897
PaError Pa_StartStream( PaStream *stream );
900
/** Terminates audio processing. It waits until all pending
901
audio buffers have been played before it returns.
903
PaError Pa_StopStream( PaStream *stream );
906
/** Terminates audio processing immediately without waiting for pending
369
Pa_CloseStream() closes an audio stream, flushing any pending buffers.
373
PaError Pa_CloseStream( PortAudioStream* );
376
Pa_StartStream() and Pa_StopStream() begin and terminate audio processing.
377
Pa_StopStream() waits until all pending audio buffers have been played.
378
Pa_AbortStream() stops playing immediately without waiting for pending
907
379
buffers to complete.
909
PaError Pa_AbortStream( PaStream *stream );
912
/** Determine whether the stream is stopped.
913
A stream is considered to be stopped prior to a successful call to
914
Pa_StartStream and after a successful call to Pa_StopStream or Pa_AbortStream.
915
If a stream callback returns a value other than paContinue the stream is NOT
916
considered to be stopped.
918
@return Returns one (1) when the stream is stopped, zero (0) when
919
the stream is running or, a PaErrorCode (which are always negative) if
920
PortAudio is not initialized or an error is encountered.
922
@see Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive
924
PaError Pa_IsStreamStopped( PaStream *stream );
927
/** Determine whether the stream is active.
928
A stream is active after a successful call to Pa_StartStream(), until it
929
becomes inactive either as a result of a call to Pa_StopStream() or
930
Pa_AbortStream(), or as a result of a return value other than paContinue from
931
the stream callback. In the latter case, the stream is considered inactive
932
after the last buffer has finished playing.
934
@return Returns one (1) when the stream is active (ie playing or recording
935
audio), zero (0) when not playing or, a PaErrorCode (which are always negative)
936
if PortAudio is not initialized or an error is encountered.
938
@see Pa_StopStream, Pa_AbortStream, Pa_IsStreamStopped
940
PaError Pa_IsStreamActive( PaStream *stream );
944
/** A structure containing unchanging information about an open stream.
945
@see Pa_GetStreamInfo
948
typedef struct PaStreamInfo
950
/** this is struct version 1 */
953
/** The input latency of the stream in seconds. This value provides the most
954
accurate estimate of input latency available to the implementation. It may
955
differ significantly from the suggestedLatency value passed to Pa_OpenStream().
956
The value of this field will be zero (0.) for output-only streams.
961
/** The output latency of the stream in seconds. This value provides the most
962
accurate estimate of output latency available to the implementation. It may
963
differ significantly from the suggestedLatency value passed to Pa_OpenStream().
964
The value of this field will be zero (0.) for input-only streams.
967
PaTime outputLatency;
969
/** The sample rate of the stream in Hertz (samples per second). In cases
970
where the hardware sample rate is inaccurate and PortAudio is aware of it,
971
the value of this field may be different from the sampleRate parameter
972
passed to Pa_OpenStream(). If information about the actual hardware sample
973
rate is not available, this field will have the same value as the sampleRate
974
parameter passed to Pa_OpenStream().
981
/** Retrieve a pointer to a PaStreamInfo structure containing information
982
about the specified stream.
983
@return A pointer to an immutable PaStreamInfo structure. If the stream
984
parameter invalid, or an error is encountered, the function returns NULL.
986
@param stream A pointer to an open stream previously created with Pa_OpenStream.
988
@note PortAudio manages the memory referenced by the returned pointer,
989
the client must not manipulate or free the memory. The pointer is only
990
guaranteed to be valid until the specified stream is closed.
994
const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream );
997
/** Determine the current time for the stream according to the same clock used
998
to generate buffer timestamps. This time may be used for syncronising other
999
events to the audio stream, for example synchronizing audio to MIDI.
1001
@return The stream's current time in seconds, or 0 if an error occurred.
1003
@see PaTime, PaStreamCallback
1005
PaTime Pa_GetStreamTime( PaStream *stream );
1008
/** Retrieve CPU usage information for the specified stream.
1009
The "CPU Load" is a fraction of total CPU time consumed by a callback stream's
383
PaError Pa_StartStream( PortAudioStream *stream );
385
PaError Pa_StopStream( PortAudioStream *stream );
387
PaError Pa_AbortStream( PortAudioStream *stream );
390
Pa_StreamActive() returns one (1) when the stream is active (ie playing
391
or recording audio), zero (0) when not playing, or a negative error number
392
if the stream is invalid.
393
The stream is active between calls to Pa_StartStream() and Pa_StopStream(),
394
but may also become inactive if the callback returns a non-zero value.
395
In the latter case, the stream is considered inactive after the last
396
buffer has finished playing.
400
PaError Pa_StreamActive( PortAudioStream *stream );
403
Pa_StreamTime() returns the current output time in samples for the stream.
404
This time may be used as a time reference (for example synchronizing audio to
409
PaTimestamp Pa_StreamTime( PortAudioStream *stream );
412
Pa_GetCPULoad() returns the CPU Load for the stream.
413
The "CPU Load" is a fraction of total CPU time consumed by the stream's
1010
414
audio processing routines including, but not limited to the client supplied
1011
stream callback. This function does not work with blocking read/write streams.
1013
This function may be called from the stream callback function or the
1017
A floating point value, typically between 0.0 and 1.0, where 1.0 indicates
1018
that the stream callback is consuming the maximum number of CPU cycles possible
1019
to maintain real-time operation. A value of 0.5 would imply that PortAudio and
1020
the stream callback was consuming roughly 50% of the available CPU time. The
1021
return value may exceed 1.0. A value of 0.0 will always be returned for a
1022
blocking read/write stream, or if an error occurrs.
1024
double Pa_GetStreamCpuLoad( PaStream* stream );
1027
/** Read samples from an input stream. The function doesn't return until
1028
the entire buffer has been filled - this may involve waiting for the operating
1029
system to supply the data.
1031
@param stream A pointer to an open stream previously created with Pa_OpenStream.
1033
@param buffer A pointer to a buffer of sample frames. The buffer contains
1034
samples in the format specified by the inputParameters->sampleFormat field
1035
used to open the stream, and the number of channels specified by
1036
inputParameters->numChannels. If non-interleaved samples were requested,
1037
buffer is a pointer to the first element of an array of non-interleaved
1038
buffer pointers, one for each channel.
1040
@param frames The number of frames to be read into buffer. This parameter
1041
is not constrained to a specific range, however high performance applications
1042
will want to match this parameter to the framesPerBuffer parameter used
1043
when opening the stream.
1045
@return On success PaNoError will be returned, or PaInputOverflowed if input
1046
data was discarded by PortAudio after the previous call and before this call.
1048
PaError Pa_ReadStream( PaStream* stream,
1050
unsigned long frames );
1053
/** Write samples to an output stream. This function doesn't return until the
1054
entire buffer has been consumed - this may involve waiting for the operating
1055
system to consume the data.
1057
@param stream A pointer to an open stream previously created with Pa_OpenStream.
1059
@param buffer A pointer to a buffer of sample frames. The buffer contains
1060
samples in the format specified by the outputParameters->sampleFormat field
1061
used to open the stream, and the number of channels specified by
1062
outputParameters->numChannels. If non-interleaved samples were requested,
1063
buffer is a pointer to the first element of an array of non-interleaved
1064
buffer pointers, one for each channel.
1066
@param frames The number of frames to be written from buffer. This parameter
1067
is not constrained to a specific range, however high performance applications
1068
will want to match this parameter to the framesPerBuffer parameter used
1069
when opening the stream.
1071
@return On success PaNoError will be returned, or paOutputUnderflowed if
1072
additional output data was inserted after the previous call and before this
1075
PaError Pa_WriteStream( PaStream* stream,
1077
unsigned long frames );
1080
/** Retrieve the number of frames that can be read from the stream without
1083
@return Returns a non-negative value representing the maximum number of frames
1084
that can be read from the stream without blocking or busy waiting or, a
1085
PaErrorCode (which are always negative) if PortAudio is not initialized or an
1086
error is encountered.
1088
signed long Pa_GetStreamReadAvailable( PaStream* stream );
1091
/** Retrieve the number of frames that can be written to the stream without
1094
@return Returns a non-negative value representing the maximum number of frames
1095
that can be written to the stream without blocking or busy waiting or, a
1096
PaErrorCode (which are always negative) if PortAudio is not initialized or an
1097
error is encountered.
1099
signed long Pa_GetStreamWriteAvailable( PaStream* stream );
1102
/* Miscellaneous utilities */
1105
/** Retrieve the size of a given sample format in bytes.
1107
@return The size in bytes of a single sample in the specified format,
1108
or paSampleFormatNotSupported if the format is not supported.
416
A value of 0.5 would imply that PortAudio and the sound generating
417
callback was consuming roughly 50% of the available CPU time.
418
This function may be called from the callback function or the application.
422
double Pa_GetCPULoad( PortAudioStream* stream );
425
Pa_GetMinNumBuffers() returns the minimum number of buffers required by
426
the current host based on minimum latency.
427
On the PC, for the DirectSound implementation, latency can be optionally set
428
by user by setting an environment variable.
429
For example, to set latency to 200 msec, put:
431
set PA_MIN_LATENCY_MSEC=200
433
in the AUTOEXEC.BAT file and reboot.
434
If the environment variable is not set, then the latency will be determined
435
based on the OS. Windows NT has higher latency than Win95.
439
int Pa_GetMinNumBuffers( int framesPerBuffer, double sampleRate );
442
Pa_Sleep() puts the caller to sleep for at least 'msec' milliseconds.
443
You may sleep longer than the requested time so don't rely on this for
444
accurate musical timing.
446
Pa_Sleep() is provided as a convenience for authors of portable code (such as
447
the tests and examples in the PortAudio distribution.)
451
void Pa_Sleep( long msec );
454
Pa_GetSampleSize() returns the size in bytes of a single sample in the
455
supplied PaSampleFormat, or paSampleFormatNotSupported if the format is
1110
460
PaError Pa_GetSampleSize( PaSampleFormat format );
1113
/** Put the caller to sleep for at least 'msec' milliseconds. This function is
1114
provided only as a convenience for authors of portable code (such as the tests
1115
and examples in the PortAudio distribution.)
1117
The function may sleep longer than requested so don't rely on this for accurate
1120
void Pa_Sleep( long msec );
1124
463
#ifdef __cplusplus
1126
465
#endif /* __cplusplus */
1127
#endif /* PORTAUDIO_H */
466
#endif /* PORT_AUDIO_H */