1 |
#ifndef PORTAUDIO_H |
2 |
#define PORTAUDIO_H |
3 |
/* |
4 |
* $Id: portaudio.h 1337 2008-02-15 07:32:09Z rossb $ |
5 |
* PortAudio Portable Real-Time Audio Library |
6 |
* PortAudio API Header File |
7 |
* Latest version available at: http://www.portaudio.com/ |
8 |
* |
9 |
* Copyright (c) 1999-2002 Ross Bencina and Phil Burk |
10 |
* |
11 |
* Permission is hereby granted, free of charge, to any person obtaining |
12 |
* a copy of this software and associated documentation files |
13 |
* (the "Software"), to deal in the Software without restriction, |
14 |
* including without limitation the rights to use, copy, modify, merge, |
15 |
* publish, distribute, sublicense, and/or sell copies of the Software, |
16 |
* and to permit persons to whom the Software is furnished to do so, |
17 |
* subject to the following conditions: |
18 |
* |
19 |
* The above copyright notice and this permission notice shall be |
20 |
* included in all copies or substantial portions of the Software. |
21 |
* |
22 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
23 |
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
24 |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
25 |
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR |
26 |
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF |
27 |
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
28 |
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
29 |
*/ |
30 |
|
31 |
/* |
32 |
* The text above constitutes the entire PortAudio license; however, |
33 |
* the PortAudio community also makes the following non-binding requests: |
34 |
* |
35 |
* Any person wishing to distribute modifications to the Software is |
36 |
* requested to send the modifications to the original developer so that |
37 |
* they can be incorporated into the canonical version. It is also |
38 |
* requested that these non-binding requests be included along with the |
39 |
* license above. |
40 |
*/ |
41 |
|
42 |
/** @file |
43 |
@ingroup public_header |
44 |
@brief The portable PortAudio API. |
45 |
*/ |
46 |
|
47 |
|
48 |
#ifdef __cplusplus |
49 |
extern "C" |
50 |
{ |
51 |
#endif /* __cplusplus */ |
52 |
|
53 |
|
54 |
/** Retrieve the release number of the currently running PortAudio build, |
55 |
eg 1900. |
56 |
*/ |
57 |
int Pa_GetVersion( void ); |
58 |
|
59 |
|
60 |
/** Retrieve a textual description of the current PortAudio build, |
61 |
eg "PortAudio V19-devel 13 October 2002". |
62 |
*/ |
63 |
const char* Pa_GetVersionText( void ); |
64 |
|
65 |
|
66 |
/** Error codes returned by PortAudio functions. |
67 |
Note that with the exception of paNoError, all PaErrorCodes are negative. |
68 |
*/ |
69 |
|
70 |
typedef int PaError; |
71 |
typedef enum PaErrorCode |
72 |
{ |
73 |
paNoError = 0, |
74 |
|
75 |
paNotInitialized = -10000, |
76 |
paUnanticipatedHostError, |
77 |
paInvalidChannelCount, |
78 |
paInvalidSampleRate, |
79 |
paInvalidDevice, |
80 |
paInvalidFlag, |
81 |
paSampleFormatNotSupported, |
82 |
paBadIODeviceCombination, |
83 |
paInsufficientMemory, |
84 |
paBufferTooBig, |
85 |
paBufferTooSmall, |
86 |
paNullCallback, |
87 |
paBadStreamPtr, |
88 |
paTimedOut, |
89 |
paInternalError, |
90 |
paDeviceUnavailable, |
91 |
paIncompatibleHostApiSpecificStreamInfo, |
92 |
paStreamIsStopped, |
93 |
paStreamIsNotStopped, |
94 |
paInputOverflowed, |
95 |
paOutputUnderflowed, |
96 |
paHostApiNotFound, |
97 |
paInvalidHostApi, |
98 |
paCanNotReadFromACallbackStream, /**< @todo review error code name */ |
99 |
paCanNotWriteToACallbackStream, /**< @todo review error code name */ |
100 |
paCanNotReadFromAnOutputOnlyStream, /**< @todo review error code name */ |
101 |
paCanNotWriteToAnInputOnlyStream, /**< @todo review error code name */ |
102 |
paIncompatibleStreamHostApi, |
103 |
paBadBufferPtr |
104 |
} PaErrorCode; |
105 |
|
106 |
|
107 |
/** Translate the supplied PortAudio error code into a human readable |
108 |
message. |
109 |
*/ |
110 |
const char *Pa_GetErrorText( PaError errorCode ); |
111 |
|
112 |
|
113 |
/** Library initialization function - call this before using PortAudio. |
114 |
This function initialises internal data structures and prepares underlying |
115 |
host APIs for use. With the exception of Pa_GetVersion(), Pa_GetVersionText(), |
116 |
and Pa_GetErrorText(), this function MUST be called before using any other |
117 |
PortAudio API functions. |
118 |
|
119 |
If Pa_Initialize() is called multiple times, each successful |
120 |
call must be matched with a corresponding call to Pa_Terminate(). |
121 |
Pairs of calls to Pa_Initialize()/Pa_Terminate() may overlap, and are not |
122 |
required to be fully nested. |
123 |
|
124 |
Note that if Pa_Initialize() returns an error code, Pa_Terminate() should |
125 |
NOT be called. |
126 |
|
127 |
@return paNoError if successful, otherwise an error code indicating the cause |
128 |
of failure. |
129 |
|
130 |
@see Pa_Terminate |
131 |
*/ |
132 |
PaError Pa_Initialize( void ); |
133 |
|
134 |
|
135 |
/** Library termination function - call this when finished using PortAudio. |
136 |
This function deallocates all resources allocated by PortAudio since it was |
137 |
initializied by a call to Pa_Initialize(). In cases where Pa_Initialise() has |
138 |
been called multiple times, each call must be matched with a corresponding call |
139 |
to Pa_Terminate(). The final matching call to Pa_Terminate() will automatically |
140 |
close any PortAudio streams that are still open. |
141 |
|
142 |
Pa_Terminate() MUST be called before exiting a program which uses PortAudio. |
143 |
Failure to do so may result in serious resource leaks, such as audio devices |
144 |
not being available until the next reboot. |
145 |
|
146 |
@return paNoError if successful, otherwise an error code indicating the cause |
147 |
of failure. |
148 |
|
149 |
@see Pa_Initialize |
150 |
*/ |
151 |
PaError Pa_Terminate( void ); |
152 |
|
153 |
|
154 |
|
155 |
/** The type used to refer to audio devices. Values of this type usually |
156 |
range from 0 to (Pa_GetDeviceCount()-1), and may also take on the PaNoDevice |
157 |
and paUseHostApiSpecificDeviceSpecification values. |
158 |
|
159 |
@see Pa_GetDeviceCount, paNoDevice, paUseHostApiSpecificDeviceSpecification |
160 |
*/ |
161 |
typedef int PaDeviceIndex; |
162 |
|
163 |
|
164 |
/** A special PaDeviceIndex value indicating that no device is available, |
165 |
or should be used. |
166 |
|
167 |
@see PaDeviceIndex |
168 |
*/ |
169 |
#define paNoDevice ((PaDeviceIndex)-1) |
170 |
|
171 |
|
172 |
/** A special PaDeviceIndex value indicating that the device(s) to be used |
173 |
are specified in the host api specific stream info structure. |
174 |
|
175 |
@see PaDeviceIndex |
176 |
*/ |
177 |
#define paUseHostApiSpecificDeviceSpecification ((PaDeviceIndex)-2) |
178 |
|
179 |
|
180 |
/* Host API enumeration mechanism */ |
181 |
|
182 |
/** The type used to enumerate to host APIs at runtime. Values of this type |
183 |
range from 0 to (Pa_GetHostApiCount()-1). |
184 |
|
185 |
@see Pa_GetHostApiCount |
186 |
*/ |
187 |
typedef int PaHostApiIndex; |
188 |
|
189 |
|
190 |
/** Retrieve the number of available host APIs. Even if a host API is |
191 |
available it may have no devices available. |
192 |
|
193 |
@return A non-negative value indicating the number of available host APIs |
194 |
or, a PaErrorCode (which are always negative) if PortAudio is not initialized |
195 |
or an error is encountered. |
196 |
|
197 |
@see PaHostApiIndex |
198 |
*/ |
199 |
PaHostApiIndex Pa_GetHostApiCount( void ); |
200 |
|
201 |
|
202 |
/** Retrieve the index of the default host API. The default host API will be |
203 |
the lowest common denominator host API on the current platform and is |
204 |
unlikely to provide the best performance. |
205 |
|
206 |
@return A non-negative value ranging from 0 to (Pa_GetHostApiCount()-1) |
207 |
indicating the default host API index or, a PaErrorCode (which are always |
208 |
negative) if PortAudio is not initialized or an error is encountered. |
209 |
*/ |
210 |
PaHostApiIndex Pa_GetDefaultHostApi( void ); |
211 |
|
212 |
|
213 |
/** Unchanging unique identifiers for each supported host API. This type |
214 |
is used in the PaHostApiInfo structure. The values are guaranteed to be |
215 |
unique and to never change, thus allowing code to be written that |
216 |
conditionally uses host API specific extensions. |
217 |
|
218 |
New type ids will be allocated when support for a host API reaches |
219 |
"public alpha" status, prior to that developers should use the |
220 |
paInDevelopment type id. |
221 |
|
222 |
@see PaHostApiInfo |
223 |
*/ |
224 |
typedef enum PaHostApiTypeId |
225 |
{ |
226 |
paInDevelopment=0, /* use while developing support for a new host API */ |
227 |
paDirectSound=1, |
228 |
paMME=2, |
229 |
paASIO=3, |
230 |
paSoundManager=4, |
231 |
paCoreAudio=5, |
232 |
paOSS=7, |
233 |
paALSA=8, |
234 |
paAL=9, |
235 |
paBeOS=10, |
236 |
paWDMKS=11, |
237 |
paJACK=12, |
238 |
paWASAPI=13, |
239 |
paAudioScienceHPI=14 |
240 |
} PaHostApiTypeId; |
241 |
|
242 |
|
243 |
/** A structure containing information about a particular host API. */ |
244 |
|
245 |
typedef struct PaHostApiInfo |
246 |
{ |
247 |
/** this is struct version 1 */ |
248 |
int structVersion; |
249 |
/** The well known unique identifier of this host API @see PaHostApiTypeId */ |
250 |
PaHostApiTypeId type; |
251 |
/** A textual description of the host API for display on user interfaces. */ |
252 |
const char *name; |
253 |
|
254 |
/** The number of devices belonging to this host API. This field may be |
255 |
used in conjunction with Pa_HostApiDeviceIndexToDeviceIndex() to enumerate |
256 |
all devices for this host API. |
257 |
@see Pa_HostApiDeviceIndexToDeviceIndex |
258 |
*/ |
259 |
int deviceCount; |
260 |
|
261 |
/** The default input device for this host API. The value will be a |
262 |
device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice |
263 |
if no default input device is available. |
264 |
*/ |
265 |
PaDeviceIndex defaultInputDevice; |
266 |
|
267 |
/** The default output device for this host API. The value will be a |
268 |
device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice |
269 |
if no default output device is available. |
270 |
*/ |
271 |
PaDeviceIndex defaultOutputDevice; |
272 |
|
273 |
} PaHostApiInfo; |
274 |
|
275 |
|
276 |
/** Retrieve a pointer to a structure containing information about a specific |
277 |
host Api. |
278 |
|
279 |
@param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) |
280 |
|
281 |
@return A pointer to an immutable PaHostApiInfo structure describing |
282 |
a specific host API. If the hostApi parameter is out of range or an error |
283 |
is encountered, the function returns NULL. |
284 |
|
285 |
The returned structure is owned by the PortAudio implementation and must not |
286 |
be manipulated or freed. The pointer is only guaranteed to be valid between |
287 |
calls to Pa_Initialize() and Pa_Terminate(). |
288 |
*/ |
289 |
const PaHostApiInfo * Pa_GetHostApiInfo( PaHostApiIndex hostApi ); |
290 |
|
291 |
|
292 |
/** Convert a static host API unique identifier, into a runtime |
293 |
host API index. |
294 |
|
295 |
@param type A unique host API identifier belonging to the PaHostApiTypeId |
296 |
enumeration. |
297 |
|
298 |
@return A valid PaHostApiIndex ranging from 0 to (Pa_GetHostApiCount()-1) or, |
299 |
a PaErrorCode (which are always negative) if PortAudio is not initialized |
300 |
or an error is encountered. |
301 |
|
302 |
The paHostApiNotFound error code indicates that the host API specified by the |
303 |
type parameter is not available. |
304 |
|
305 |
@see PaHostApiTypeId |
306 |
*/ |
307 |
PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type ); |
308 |
|
309 |
|
310 |
/** Convert a host-API-specific device index to standard PortAudio device index. |
311 |
This function may be used in conjunction with the deviceCount field of |
312 |
PaHostApiInfo to enumerate all devices for the specified host API. |
313 |
|
314 |
@param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) |
315 |
|
316 |
@param hostApiDeviceIndex A valid per-host device index in the range |
317 |
0 to (Pa_GetHostApiInfo(hostApi)->deviceCount-1) |
318 |
|
319 |
@return A non-negative PaDeviceIndex ranging from 0 to (Pa_GetDeviceCount()-1) |
320 |
or, a PaErrorCode (which are always negative) if PortAudio is not initialized |
321 |
or an error is encountered. |
322 |
|
323 |
A paInvalidHostApi error code indicates that the host API index specified by |
324 |
the hostApi parameter is out of range. |
325 |
|
326 |
A paInvalidDevice error code indicates that the hostApiDeviceIndex parameter |
327 |
is out of range. |
328 |
|
329 |
@see PaHostApiInfo |
330 |
*/ |
331 |
PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex( PaHostApiIndex hostApi, |
332 |
int hostApiDeviceIndex ); |
333 |
|
334 |
|
335 |
|
336 |
/** Structure used to return information about a host error condition. |
337 |
*/ |
338 |
typedef struct PaHostErrorInfo{ |
339 |
PaHostApiTypeId hostApiType; /**< the host API which returned the error code */ |
340 |
long errorCode; /**< the error code returned */ |
341 |
const char *errorText; /**< a textual description of the error if available, otherwise a zero-length string */ |
342 |
}PaHostErrorInfo; |
343 |
|
344 |
|
345 |
/** Return information about the last host error encountered. The error |
346 |
information returned by Pa_GetLastHostErrorInfo() will never be modified |
347 |
asyncronously by errors occurring in other PortAudio owned threads |
348 |
(such as the thread that manages the stream callback.) |
349 |
|
350 |
This function is provided as a last resort, primarily to enhance debugging |
351 |
by providing clients with access to all available error information. |
352 |
|
353 |
@return A pointer to an immutable structure constaining information about |
354 |
the host error. The values in this structure will only be valid if a |
355 |
PortAudio function has previously returned the paUnanticipatedHostError |
356 |
error code. |
357 |
*/ |
358 |
const PaHostErrorInfo* Pa_GetLastHostErrorInfo( void ); |
359 |
|
360 |
|
361 |
|
362 |
/* Device enumeration and capabilities */ |
363 |
|
364 |
/** Retrieve the number of available devices. The number of available devices |
365 |
may be zero. |
366 |
|
367 |
@return A non-negative value indicating the number of available devices or, |
368 |
a PaErrorCode (which are always negative) if PortAudio is not initialized |
369 |
or an error is encountered. |
370 |
*/ |
371 |
PaDeviceIndex Pa_GetDeviceCount( void ); |
372 |
|
373 |
|
374 |
/** Retrieve the index of the default input device. The result can be |
375 |
used in the inputDevice parameter to Pa_OpenStream(). |
376 |
|
377 |
@return The default input device index for the default host API, or paNoDevice |
378 |
if no default input device is available or an error was encountered. |
379 |
*/ |
380 |
PaDeviceIndex Pa_GetDefaultInputDevice( void ); |
381 |
|
382 |
|
383 |
/** Retrieve the index of the default output device. The result can be |
384 |
used in the outputDevice parameter to Pa_OpenStream(). |
385 |
|
386 |
@return The default output device index for the defualt host API, or paNoDevice |
387 |
if no default output device is available or an error was encountered. |
388 |
|
389 |
@note |
390 |
On the PC, the user can specify a default device by |
391 |
setting an environment variable. For example, to use device #1. |
392 |
<pre> |
393 |
set PA_RECOMMENDED_OUTPUT_DEVICE=1 |
394 |
</pre> |
395 |
The user should first determine the available device ids by using |
396 |
the supplied application "pa_devs". |
397 |
*/ |
398 |
PaDeviceIndex Pa_GetDefaultOutputDevice( void ); |
399 |
|
400 |
|
401 |
/** The type used to represent monotonic time in seconds that can be used |
402 |
for syncronisation. The type is used for the outTime argument to the |
403 |
PaStreamCallback and as the result of Pa_GetStreamTime(). |
404 |
|
405 |
@see PaStreamCallback, Pa_GetStreamTime |
406 |
*/ |
407 |
typedef double PaTime; |
408 |
|
409 |
|
410 |
/** A type used to specify one or more sample formats. Each value indicates |
411 |
a possible format for sound data passed to and from the stream callback, |
412 |
Pa_ReadStream and Pa_WriteStream. |
413 |
|
414 |
The standard formats paFloat32, paInt16, paInt32, paInt24, paInt8 |
415 |
and aUInt8 are usually implemented by all implementations. |
416 |
|
417 |
The floating point representation (paFloat32) uses +1.0 and -1.0 as the |
418 |
maximum and minimum respectively. |
419 |
|
420 |
paUInt8 is an unsigned 8 bit format where 128 is considered "ground" |
421 |
|
422 |
The paNonInterleaved flag indicates that a multichannel buffer is passed |
423 |
as a set of non-interleaved pointers. |
424 |
|
425 |
@see Pa_OpenStream, Pa_OpenDefaultStream, PaDeviceInfo |
426 |
@see paFloat32, paInt16, paInt32, paInt24, paInt8 |
427 |
@see paUInt8, paCustomFormat, paNonInterleaved |
428 |
*/ |
429 |
typedef unsigned long PaSampleFormat; |
430 |
|
431 |
|
432 |
#define paFloat32 ((PaSampleFormat) 0x00000001) /**< @see PaSampleFormat */ |
433 |
#define paInt32 ((PaSampleFormat) 0x00000002) /**< @see PaSampleFormat */ |
434 |
#define paInt24 ((PaSampleFormat) 0x00000004) /**< Packed 24 bit format. @see PaSampleFormat */ |
435 |
#define paInt16 ((PaSampleFormat) 0x00000008) /**< @see PaSampleFormat */ |
436 |
#define paInt8 ((PaSampleFormat) 0x00000010) /**< @see PaSampleFormat */ |
437 |
#define paUInt8 ((PaSampleFormat) 0x00000020) /**< @see PaSampleFormat */ |
438 |
#define paCustomFormat ((PaSampleFormat) 0x00010000)/**< @see PaSampleFormat */ |
439 |
|
440 |
#define paNonInterleaved ((PaSampleFormat) 0x80000000) |
441 |
|
442 |
/** A structure providing information and capabilities of PortAudio devices. |
443 |
Devices may support input, output or both input and output. |
444 |
*/ |
445 |
typedef struct PaDeviceInfo |
446 |
{ |
447 |
int structVersion; /* this is struct version 2 */ |
448 |
const char *name; |
449 |
PaHostApiIndex hostApi; /* note this is a host API index, not a type id*/ |
450 |
|
451 |
int maxInputChannels; |
452 |
int maxOutputChannels; |
453 |
|
454 |
/* Default latency values for interactive performance. */ |
455 |
PaTime defaultLowInputLatency; |
456 |
PaTime defaultLowOutputLatency; |
457 |
/* Default latency values for robust non-interactive applications (eg. playing sound files). */ |
458 |
PaTime defaultHighInputLatency; |
459 |
PaTime defaultHighOutputLatency; |
460 |
|
461 |
double defaultSampleRate; |
462 |
} PaDeviceInfo; |
463 |
|
464 |
|
465 |
/** Retrieve a pointer to a PaDeviceInfo structure containing information |
466 |
about the specified device. |
467 |
@return A pointer to an immutable PaDeviceInfo structure. If the device |
468 |
parameter is out of range the function returns NULL. |
469 |
|
470 |
@param device A valid device index in the range 0 to (Pa_GetDeviceCount()-1) |
471 |
|
472 |
@note PortAudio manages the memory referenced by the returned pointer, |
473 |
the client must not manipulate or free the memory. The pointer is only |
474 |
guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate(). |
475 |
|
476 |
@see PaDeviceInfo, PaDeviceIndex |
477 |
*/ |
478 |
const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device ); |
479 |
|
480 |
|
481 |
/** Parameters for one direction (input or output) of a stream. |
482 |
*/ |
483 |
typedef struct PaStreamParameters |
484 |
{ |
485 |
/** A valid device index in the range 0 to (Pa_GetDeviceCount()-1) |
486 |
specifying the device to be used or the special constant |
487 |
paUseHostApiSpecificDeviceSpecification which indicates that the actual |
488 |
device(s) to use are specified in hostApiSpecificStreamInfo. |
489 |
This field must not be set to paNoDevice. |
490 |
*/ |
491 |
PaDeviceIndex device; |
492 |
|
493 |
/** The number of channels of sound to be delivered to the |
494 |
stream callback or accessed by Pa_ReadStream() or Pa_WriteStream(). |
495 |
It can range from 1 to the value of maxInputChannels in the |
496 |
PaDeviceInfo record for the device specified by the device parameter. |
497 |
*/ |
498 |
int channelCount; |
499 |
|
500 |
/** The sample format of the buffer provided to the stream callback, |
501 |
a_ReadStream() or Pa_WriteStream(). It may be any of the formats described |
502 |
by the PaSampleFormat enumeration. |
503 |
*/ |
504 |
PaSampleFormat sampleFormat; |
505 |
|
506 |
/** The desired latency in seconds. Where practical, implementations should |
507 |
configure their latency based on these parameters, otherwise they may |
508 |
choose the closest viable latency instead. Unless the suggested latency |
509 |
is greater than the absolute upper limit for the device implementations |
510 |
should round the suggestedLatency up to the next practial value - ie to |
511 |
provide an equal or higher latency than suggestedLatency wherever possibe. |
512 |
Actual latency values for an open stream may be retrieved using the |
513 |
inputLatency and outputLatency fields of the PaStreamInfo structure |
514 |
returned by Pa_GetStreamInfo(). |
515 |
@see default*Latency in PaDeviceInfo, *Latency in PaStreamInfo |
516 |
*/ |
517 |
PaTime suggestedLatency; |
518 |
|
519 |
/** An optional pointer to a host api specific data structure |
520 |
containing additional information for device setup and/or stream processing. |
521 |
hostApiSpecificStreamInfo is never required for correct operation, |
522 |
if not used it should be set to NULL. |
523 |
*/ |
524 |
void *hostApiSpecificStreamInfo; |
525 |
|
526 |
} PaStreamParameters; |
527 |
|
528 |
|
529 |
/** Return code for Pa_IsFormatSupported indicating success. */ |
530 |
#define paFormatIsSupported (0) |
531 |
|
532 |
/** Determine whether it would be possible to open a stream with the specified |
533 |
parameters. |
534 |
|
535 |
@param inputParameters A structure that describes the input parameters used to |
536 |
open a stream. The suggestedLatency field is ignored. See PaStreamParameters |
537 |
for a description of these parameters. inputParameters must be NULL for |
538 |
output-only streams. |
539 |
|
540 |
@param outputParameters A structure that describes the output parameters used |
541 |
to open a stream. The suggestedLatency field is ignored. See PaStreamParameters |
542 |
for a description of these parameters. outputParameters must be NULL for |
543 |
input-only streams. |
544 |
|
545 |
@param sampleRate The required sampleRate. For full-duplex streams it is the |
546 |
sample rate for both input and output |
547 |
|
548 |
@return Returns 0 if the format is supported, and an error code indicating why |
549 |
the format is not supported otherwise. The constant paFormatIsSupported is |
550 |
provided to compare with the return value for success. |
551 |
|
552 |
@see paFormatIsSupported, PaStreamParameters |
553 |
*/ |
554 |
PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters, |
555 |
const PaStreamParameters *outputParameters, |
556 |
double sampleRate ); |
557 |
|
558 |
|
559 |
|
560 |
/* Streaming types and functions */ |
561 |
|
562 |
|
563 |
/** |
564 |
A single PaStream can provide multiple channels of real-time |
565 |
streaming audio input and output to a client application. A stream |
566 |
provides access to audio hardware represented by one or more |
567 |
PaDevices. Depending on the underlying Host API, it may be possible |
568 |
to open multiple streams using the same device, however this behavior |
569 |
is implementation defined. Portable applications should assume that |
570 |
a PaDevice may be simultaneously used by at most one PaStream. |
571 |
|
572 |
Pointers to PaStream objects are passed between PortAudio functions that |
573 |
operate on streams. |
574 |
|
575 |
@see Pa_OpenStream, Pa_OpenDefaultStream, Pa_OpenDefaultStream, Pa_CloseStream, |
576 |
Pa_StartStream, Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive, |
577 |
Pa_GetStreamTime, Pa_GetStreamCpuLoad |
578 |
|
579 |
*/ |
580 |
typedef void PaStream; |
581 |
|
582 |
|
583 |
/** Can be passed as the framesPerBuffer parameter to Pa_OpenStream() |
584 |
or Pa_OpenDefaultStream() to indicate that the stream callback will |
585 |
accept buffers of any size. |
586 |
*/ |
587 |
#define paFramesPerBufferUnspecified (0) |
588 |
|
589 |
|
590 |
/** Flags used to control the behavior of a stream. They are passed as |
591 |
parameters to Pa_OpenStream or Pa_OpenDefaultStream. Multiple flags may be |
592 |
ORed together. |
593 |
|
594 |
@see Pa_OpenStream, Pa_OpenDefaultStream |
595 |
@see paNoFlag, paClipOff, paDitherOff, paNeverDropInput, |
596 |
paPrimeOutputBuffersUsingStreamCallback, paPlatformSpecificFlags |
597 |
*/ |
598 |
typedef unsigned long PaStreamFlags; |
599 |
|
600 |
/** @see PaStreamFlags */ |
601 |
#define paNoFlag ((PaStreamFlags) 0) |
602 |
|
603 |
/** Disable default clipping of out of range samples. |
604 |
@see PaStreamFlags |
605 |
*/ |
606 |
#define paClipOff ((PaStreamFlags) 0x00000001) |
607 |
|
608 |
/** Disable default dithering. |
609 |
@see PaStreamFlags |
610 |
*/ |
611 |
#define paDitherOff ((PaStreamFlags) 0x00000002) |
612 |
|
613 |
/** Flag requests that where possible a full duplex stream will not discard |
614 |
overflowed input samples without calling the stream callback. This flag is |
615 |
only valid for full duplex callback streams and only when used in combination |
616 |
with the paFramesPerBufferUnspecified (0) framesPerBuffer parameter. Using |
617 |
this flag incorrectly results in a paInvalidFlag error being returned from |
618 |
Pa_OpenStream and Pa_OpenDefaultStream. |
619 |
|
620 |
@see PaStreamFlags, paFramesPerBufferUnspecified |
621 |
*/ |
622 |
#define paNeverDropInput ((PaStreamFlags) 0x00000004) |
623 |
|
624 |
/** Call the stream callback to fill initial output buffers, rather than the |
625 |
default behavior of priming the buffers with zeros (silence). This flag has |
626 |
no effect for input-only and blocking read/write streams. |
627 |
|
628 |
@see PaStreamFlags |
629 |
*/ |
630 |
#define paPrimeOutputBuffersUsingStreamCallback ((PaStreamFlags) 0x00000008) |
631 |
|
632 |
/** A mask specifying the platform specific bits. |
633 |
@see PaStreamFlags |
634 |
*/ |
635 |
#define paPlatformSpecificFlags ((PaStreamFlags)0xFFFF0000) |
636 |
|
637 |
/** |
638 |
Timing information for the buffers passed to the stream callback. |
639 |
*/ |
640 |
typedef struct PaStreamCallbackTimeInfo{ |
641 |
PaTime inputBufferAdcTime; |
642 |
PaTime currentTime; |
643 |
PaTime outputBufferDacTime; |
644 |
} PaStreamCallbackTimeInfo; |
645 |
|
646 |
|
647 |
/** |
648 |
Flag bit constants for the statusFlags to PaStreamCallback. |
649 |
|
650 |
@see paInputUnderflow, paInputOverflow, paOutputUnderflow, paOutputOverflow, |
651 |
paPrimingOutput |
652 |
*/ |
653 |
typedef unsigned long PaStreamCallbackFlags; |
654 |
|
655 |
/** In a stream opened with paFramesPerBufferUnspecified, indicates that |
656 |
input data is all silence (zeros) because no real data is available. In a |
657 |
stream opened without paFramesPerBufferUnspecified, it indicates that one or |
658 |
more zero samples have been inserted into the input buffer to compensate |
659 |
for an input underflow. |
660 |
@see PaStreamCallbackFlags |
661 |
*/ |
662 |
#define paInputUnderflow ((PaStreamCallbackFlags) 0x00000001) |
663 |
|
664 |
/** In a stream opened with paFramesPerBufferUnspecified, indicates that data |
665 |
prior to the first sample of the input buffer was discarded due to an |
666 |
overflow, possibly because the stream callback is using too much CPU time. |
667 |
Otherwise indicates that data prior to one or more samples in the |
668 |
input buffer was discarded. |
669 |
@see PaStreamCallbackFlags |
670 |
*/ |
671 |
#define paInputOverflow ((PaStreamCallbackFlags) 0x00000002) |
672 |
|
673 |
/** Indicates that output data (or a gap) was inserted, possibly because the |
674 |
stream callback is using too much CPU time. |
675 |
@see PaStreamCallbackFlags |
676 |
*/ |
677 |
#define paOutputUnderflow ((PaStreamCallbackFlags) 0x00000004) |
678 |
|
679 |
/** Indicates that output data will be discarded because no room is available. |
680 |
@see PaStreamCallbackFlags |
681 |
*/ |
682 |
#define paOutputOverflow ((PaStreamCallbackFlags) 0x00000008) |
683 |
|
684 |
/** Some of all of the output data will be used to prime the stream, input |
685 |
data may be zero. |
686 |
@see PaStreamCallbackFlags |
687 |
*/ |
688 |
#define paPrimingOutput ((PaStreamCallbackFlags) 0x00000010) |
689 |
|
690 |
/** |
691 |
Allowable return values for the PaStreamCallback. |
692 |
@see PaStreamCallback |
693 |
*/ |
694 |
typedef enum PaStreamCallbackResult |
695 |
{ |
696 |
paContinue=0, |
697 |
paComplete=1, |
698 |
paAbort=2 |
699 |
} PaStreamCallbackResult; |
700 |
|
701 |
|
702 |
/** |
703 |
Functions of type PaStreamCallback are implemented by PortAudio clients. |
704 |
They consume, process or generate audio in response to requests from an |
705 |
active PortAudio stream. |
706 |
|
707 |
@param input and @param output are arrays of interleaved samples, |
708 |
the format, packing and number of channels used by the buffers are |
709 |
determined by parameters to Pa_OpenStream(). |
710 |
|
711 |
@param frameCount The number of sample frames to be processed by |
712 |
the stream callback. |
713 |
|
714 |
@param timeInfo The time in seconds when the first sample of the input |
715 |
buffer was received at the audio input, the time in seconds when the first |
716 |
sample of the output buffer will begin being played at the audio output, and |
717 |
the time in seconds when the stream callback was called. |
718 |
See also Pa_GetStreamTime() |
719 |
|
720 |
@param statusFlags Flags indicating whether input and/or output buffers |
721 |
have been inserted or will be dropped to overcome underflow or overflow |
722 |
conditions. |
723 |
|
724 |
@param userData The value of a user supplied pointer passed to |
725 |
Pa_OpenStream() intended for storing synthesis data etc. |
726 |
|
727 |
@return |
728 |
The stream callback should return one of the values in the |
729 |
PaStreamCallbackResult enumeration. To ensure that the callback continues |
730 |
to be called, it should return paContinue (0). Either paComplete or paAbort |
731 |
can be returned to finish stream processing, after either of these values is |
732 |
returned the callback will not be called again. If paAbort is returned the |
733 |
stream will finish as soon as possible. If paComplete is returned, the stream |
734 |
will continue until all buffers generated by the callback have been played. |
735 |
This may be useful in applications such as soundfile players where a specific |
736 |
duration of output is required. However, it is not necessary to utilise this |
737 |
mechanism as Pa_StopStream(), Pa_AbortStream() or Pa_CloseStream() can also |
738 |
be used to stop the stream. The callback must always fill the entire output |
739 |
buffer irrespective of its return value. |
740 |
|
741 |
@see Pa_OpenStream, Pa_OpenDefaultStream |
742 |
|
743 |
@note With the exception of Pa_GetStreamCpuLoad() it is not permissable to call |
744 |
PortAudio API functions from within the stream callback. |
745 |
*/ |
746 |
typedef int PaStreamCallback( |
747 |
const void *input, void *output, |
748 |
unsigned long frameCount, |
749 |
const PaStreamCallbackTimeInfo* timeInfo, |
750 |
PaStreamCallbackFlags statusFlags, |
751 |
void *userData ); |
752 |
|
753 |
|
754 |
/** Opens a stream for either input, output or both. |
755 |
|
756 |
@param stream The address of a PaStream pointer which will receive |
757 |
a pointer to the newly opened stream. |
758 |
|
759 |
@param inputParameters A structure that describes the input parameters used by |
760 |
the opened stream. See PaStreamParameters for a description of these parameters. |
761 |
inputParameters must be NULL for output-only streams. |
762 |
|
763 |
@param outputParameters A structure that describes the output parameters used by |
764 |
the opened stream. See PaStreamParameters for a description of these parameters. |
765 |
outputParameters must be NULL for input-only streams. |
766 |
|
767 |
@param sampleRate The desired sampleRate. For full-duplex streams it is the |
768 |
sample rate for both input and output |
769 |
|
770 |
@param framesPerBuffer The number of frames passed to the stream callback |
771 |
function, or the preferred block granularity for a blocking read/write stream. |
772 |
The special value paFramesPerBufferUnspecified (0) may be used to request that |
773 |
the stream callback will recieve an optimal (and possibly varying) number of |
774 |
frames based on host requirements and the requested latency settings. |
775 |
Note: With some host APIs, the use of non-zero framesPerBuffer for a callback |
776 |
stream may introduce an additional layer of buffering which could introduce |
777 |
additional latency. PortAudio guarantees that the additional latency |
778 |
will be kept to the theoretical minimum however, it is strongly recommended |
779 |
that a non-zero framesPerBuffer value only be used when your algorithm |
780 |
requires a fixed number of frames per stream callback. |
781 |
|
782 |
@param streamFlags Flags which modify the behaviour of the streaming process. |
783 |
This parameter may contain a combination of flags ORed together. Some flags may |
784 |
only be relevant to certain buffer formats. |
785 |
|
786 |
@param streamCallback A pointer to a client supplied function that is responsible |
787 |
for processing and filling input and output buffers. If this parameter is NULL |
788 |
the stream will be opened in 'blocking read/write' mode. In blocking mode, |
789 |
the client can receive sample data using Pa_ReadStream and write sample data |
790 |
using Pa_WriteStream, the number of samples that may be read or written |
791 |
without blocking is returned by Pa_GetStreamReadAvailable and |
792 |
Pa_GetStreamWriteAvailable respectively. |
793 |
|
794 |
@param userData A client supplied pointer which is passed to the stream callback |
795 |
function. It could for example, contain a pointer to instance data necessary |
796 |
for processing the audio buffers. This parameter is ignored if streamCallback |
797 |
is NULL. |
798 |
|
799 |
@return |
800 |
Upon success Pa_OpenStream() returns paNoError and places a pointer to a |
801 |
valid PaStream in the stream argument. The stream is inactive (stopped). |
802 |
If a call to Pa_OpenStream() fails, a non-zero error code is returned (see |
803 |
PaError for possible error codes) and the value of stream is invalid. |
804 |
|
805 |
@see PaStreamParameters, PaStreamCallback, Pa_ReadStream, Pa_WriteStream, |
806 |
Pa_GetStreamReadAvailable, Pa_GetStreamWriteAvailable |
807 |
*/ |
808 |
PaError Pa_OpenStream( PaStream** stream, |
809 |
const PaStreamParameters *inputParameters, |
810 |
const PaStreamParameters *outputParameters, |
811 |
double sampleRate, |
812 |
unsigned long framesPerBuffer, |
813 |
PaStreamFlags streamFlags, |
814 |
PaStreamCallback *streamCallback, |
815 |
void *userData ); |
816 |
|
817 |
|
818 |
/** A simplified version of Pa_OpenStream() that opens the default input |
819 |
and/or output devices. |
820 |
|
821 |
@param stream The address of a PaStream pointer which will receive |
822 |
a pointer to the newly opened stream. |
823 |
|
824 |
@param numInputChannels The number of channels of sound that will be supplied |
825 |
to the stream callback or returned by Pa_ReadStream. It can range from 1 to |
826 |
the value of maxInputChannels in the PaDeviceInfo record for the default input |
827 |
device. If 0 the stream is opened as an output-only stream. |
828 |
|
829 |
@param numOutputChannels The number of channels of sound to be delivered to the |
830 |
stream callback or passed to Pa_WriteStream. It can range from 1 to the value |
831 |
of maxOutputChannels in the PaDeviceInfo record for the default output dvice. |
832 |
If 0 the stream is opened as an output-only stream. |
833 |
|
834 |
@param sampleFormat The sample format of both the input and output buffers |
835 |
provided to the callback or passed to and from Pa_ReadStream and Pa_WriteStream. |
836 |
sampleFormat may be any of the formats described by the PaSampleFormat |
837 |
enumeration. |
838 |
|
839 |
@param sampleRate Same as Pa_OpenStream parameter of the same name. |
840 |
@param framesPerBuffer Same as Pa_OpenStream parameter of the same name. |
841 |
@param streamCallback Same as Pa_OpenStream parameter of the same name. |
842 |
@param userData Same as Pa_OpenStream parameter of the same name. |
843 |
|
844 |
@return As for Pa_OpenStream |
845 |
|
846 |
@see Pa_OpenStream, PaStreamCallback |
847 |
*/ |
848 |
PaError Pa_OpenDefaultStream( PaStream** stream, |
849 |
int numInputChannels, |
850 |
int numOutputChannels, |
851 |
PaSampleFormat sampleFormat, |
852 |
double sampleRate, |
853 |
unsigned long framesPerBuffer, |
854 |
PaStreamCallback *streamCallback, |
855 |
void *userData ); |
856 |
|
857 |
|
858 |
/** Closes an audio stream. If the audio stream is active it |
859 |
discards any pending buffers as if Pa_AbortStream() had been called. |
860 |
*/ |
861 |
PaError Pa_CloseStream( PaStream *stream ); |
862 |
|
863 |
|
864 |
/** Functions of type PaStreamFinishedCallback are implemented by PortAudio |
865 |
clients. They can be registered with a stream using the Pa_SetStreamFinishedCallback |
866 |
function. Once registered they are called when the stream becomes inactive |
867 |
(ie once a call to Pa_StopStream() will not block). |
868 |
A stream will become inactive after the stream callback returns non-zero, |
869 |
or when Pa_StopStream or Pa_AbortStream is called. For a stream providing audio |
870 |
output, if the stream callback returns paComplete, or Pa_StopStream is called, |
871 |
the stream finished callback will not be called until all generated sample data |
872 |
has been played. |
873 |
|
874 |
@param userData The userData parameter supplied to Pa_OpenStream() |
875 |
|
876 |
@see Pa_SetStreamFinishedCallback |
877 |
*/ |
878 |
typedef void PaStreamFinishedCallback( void *userData ); |
879 |
|
880 |
|
881 |
/** Register a stream finished callback function which will be called when the |
882 |
stream becomes inactive. See the description of PaStreamFinishedCallback for |
883 |
further details about when the callback will be called. |
884 |
|
885 |
@param stream a pointer to a PaStream that is in the stopped state - if the |
886 |
stream is not stopped, the stream's finished callback will remain unchanged |
887 |
and an error code will be returned. |
888 |
|
889 |
@param streamFinishedCallback a pointer to a function with the same signature |
890 |
as PaStreamFinishedCallback, that will be called when the stream becomes |
891 |
inactive. Passing NULL for this parameter will un-register a previously |
892 |
registered stream finished callback function. |
893 |
|
894 |
@return on success returns paNoError, otherwise an error code indicating the cause |
895 |
of the error. |
896 |
|
897 |
@see PaStreamFinishedCallback |
898 |
*/ |
899 |
PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ); |
900 |
|
901 |
|
902 |
/** Commences audio processing. |
903 |
*/ |
904 |
PaError Pa_StartStream( PaStream *stream ); |
905 |
|
906 |
|
907 |
/** Terminates audio processing. It waits until all pending |
908 |
audio buffers have been played before it returns. |
909 |
*/ |
910 |
PaError Pa_StopStream( PaStream *stream ); |
911 |
|
912 |
|
913 |
/** Terminates audio processing immediately without waiting for pending |
914 |
buffers to complete. |
915 |
*/ |
916 |
PaError Pa_AbortStream( PaStream *stream ); |
917 |
|
918 |
|
919 |
/** Determine whether the stream is stopped. |
920 |
A stream is considered to be stopped prior to a successful call to |
921 |
Pa_StartStream and after a successful call to Pa_StopStream or Pa_AbortStream. |
922 |
If a stream callback returns a value other than paContinue the stream is NOT |
923 |
considered to be stopped. |
924 |
|
925 |
@return Returns one (1) when the stream is stopped, zero (0) when |
926 |
the stream is running or, a PaErrorCode (which are always negative) if |
927 |
PortAudio is not initialized or an error is encountered. |
928 |
|
929 |
@see Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive |
930 |
*/ |
931 |
PaError Pa_IsStreamStopped( PaStream *stream ); |
932 |
|
933 |
|
934 |
/** Determine whether the stream is active. |
935 |
A stream is active after a successful call to Pa_StartStream(), until it |
936 |
becomes inactive either as a result of a call to Pa_StopStream() or |
937 |
Pa_AbortStream(), or as a result of a return value other than paContinue from |
938 |
the stream callback. In the latter case, the stream is considered inactive |
939 |
after the last buffer has finished playing. |
940 |
|
941 |
@return Returns one (1) when the stream is active (ie playing or recording |
942 |
audio), zero (0) when not playing or, a PaErrorCode (which are always negative) |
943 |
if PortAudio is not initialized or an error is encountered. |
944 |
|
945 |
@see Pa_StopStream, Pa_AbortStream, Pa_IsStreamStopped |
946 |
*/ |
947 |
PaError Pa_IsStreamActive( PaStream *stream ); |
948 |
|
949 |
|
950 |
|
951 |
/** A structure containing unchanging information about an open stream. |
952 |
@see Pa_GetStreamInfo |
953 |
*/ |
954 |
|
955 |
typedef struct PaStreamInfo |
956 |
{ |
957 |
/** this is struct version 1 */ |
958 |
int structVersion; |
959 |
|
960 |
/** The input latency of the stream in seconds. This value provides the most |
961 |
accurate estimate of input latency available to the implementation. It may |
962 |
differ significantly from the suggestedLatency value passed to Pa_OpenStream(). |
963 |
The value of this field will be zero (0.) for output-only streams. |
964 |
@see PaTime |
965 |
*/ |
966 |
PaTime inputLatency; |
967 |
|
968 |
/** The output latency of the stream in seconds. This value provides the most |
969 |
accurate estimate of output latency available to the implementation. It may |
970 |
differ significantly from the suggestedLatency value passed to Pa_OpenStream(). |
971 |
The value of this field will be zero (0.) for input-only streams. |
972 |
@see PaTime |
973 |
*/ |
974 |
PaTime outputLatency; |
975 |
|
976 |
/** The sample rate of the stream in Hertz (samples per second). In cases |
977 |
where the hardware sample rate is inaccurate and PortAudio is aware of it, |
978 |
the value of this field may be different from the sampleRate parameter |
979 |
passed to Pa_OpenStream(). If information about the actual hardware sample |
980 |
rate is not available, this field will have the same value as the sampleRate |
981 |
parameter passed to Pa_OpenStream(). |
982 |
*/ |
983 |
double sampleRate; |
984 |
|
985 |
} PaStreamInfo; |
986 |
|
987 |
|
988 |
/** Retrieve a pointer to a PaStreamInfo structure containing information |
989 |
about the specified stream. |
990 |
@return A pointer to an immutable PaStreamInfo structure. If the stream |
991 |
parameter invalid, or an error is encountered, the function returns NULL. |
992 |
|
993 |
@param stream A pointer to an open stream previously created with Pa_OpenStream. |
994 |
|
995 |
@note PortAudio manages the memory referenced by the returned pointer, |
996 |
the client must not manipulate or free the memory. The pointer is only |
997 |
guaranteed to be valid until the specified stream is closed. |
998 |
|
999 |
@see PaStreamInfo |
1000 |
*/ |
1001 |
const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream ); |
1002 |
|
1003 |
|
1004 |
/** Determine the current time for the stream according to the same clock used |
1005 |
to generate buffer timestamps. This time may be used for syncronising other |
1006 |
events to the audio stream, for example synchronizing audio to MIDI. |
1007 |
|
1008 |
@return The stream's current time in seconds, or 0 if an error occurred. |
1009 |
|
1010 |
@see PaTime, PaStreamCallback |
1011 |
*/ |
1012 |
PaTime Pa_GetStreamTime( PaStream *stream ); |
1013 |
|
1014 |
|
1015 |
/** Retrieve CPU usage information for the specified stream. |
1016 |
The "CPU Load" is a fraction of total CPU time consumed by a callback stream's |
1017 |
audio processing routines including, but not limited to the client supplied |
1018 |
stream callback. This function does not work with blocking read/write streams. |
1019 |
|
1020 |
This function may be called from the stream callback function or the |
1021 |
application. |
1022 |
|
1023 |
@return |
1024 |
A floating point value, typically between 0.0 and 1.0, where 1.0 indicates |
1025 |
that the stream callback is consuming the maximum number of CPU cycles possible |
1026 |
to maintain real-time operation. A value of 0.5 would imply that PortAudio and |
1027 |
the stream callback was consuming roughly 50% of the available CPU time. The |
1028 |
return value may exceed 1.0. A value of 0.0 will always be returned for a |
1029 |
blocking read/write stream, or if an error occurrs. |
1030 |
*/ |
1031 |
double Pa_GetStreamCpuLoad( PaStream* stream ); |
1032 |
|
1033 |
|
1034 |
/** Read samples from an input stream. The function doesn't return until |
1035 |
the entire buffer has been filled - this may involve waiting for the operating |
1036 |
system to supply the data. |
1037 |
|
1038 |
@param stream A pointer to an open stream previously created with Pa_OpenStream. |
1039 |
|
1040 |
@param buffer A pointer to a buffer of sample frames. The buffer contains |
1041 |
samples in the format specified by the inputParameters->sampleFormat field |
1042 |
used to open the stream, and the number of channels specified by |
1043 |
inputParameters->numChannels. If non-interleaved samples were requested, |
1044 |
buffer is a pointer to the first element of an array of non-interleaved |
1045 |
buffer pointers, one for each channel. |
1046 |
|
1047 |
@param frames The number of frames to be read into buffer. This parameter |
1048 |
is not constrained to a specific range, however high performance applications |
1049 |
will want to match this parameter to the framesPerBuffer parameter used |
1050 |
when opening the stream. |
1051 |
|
1052 |
@return On success PaNoError will be returned, or PaInputOverflowed if input |
1053 |
data was discarded by PortAudio after the previous call and before this call. |
1054 |
*/ |
1055 |
PaError Pa_ReadStream( PaStream* stream, |
1056 |
void *buffer, |
1057 |
unsigned long frames ); |
1058 |
|
1059 |
|
1060 |
/** Write samples to an output stream. This function doesn't return until the |
1061 |
entire buffer has been consumed - this may involve waiting for the operating |
1062 |
system to consume the data. |
1063 |
|
1064 |
@param stream A pointer to an open stream previously created with Pa_OpenStream. |
1065 |
|
1066 |
@param buffer A pointer to a buffer of sample frames. The buffer contains |
1067 |
samples in the format specified by the outputParameters->sampleFormat field |
1068 |
used to open the stream, and the number of channels specified by |
1069 |
outputParameters->numChannels. If non-interleaved samples were requested, |
1070 |
buffer is a pointer to the first element of an array of non-interleaved |
1071 |
buffer pointers, one for each channel. |
1072 |
|
1073 |
@param frames The number of frames to be written from buffer. This parameter |
1074 |
is not constrained to a specific range, however high performance applications |
1075 |
will want to match this parameter to the framesPerBuffer parameter used |
1076 |
when opening the stream. |
1077 |
|
1078 |
@return On success PaNoError will be returned, or paOutputUnderflowed if |
1079 |
additional output data was inserted after the previous call and before this |
1080 |
call. |
1081 |
*/ |
1082 |
PaError Pa_WriteStream( PaStream* stream, |
1083 |
const void *buffer, |
1084 |
unsigned long frames ); |
1085 |
|
1086 |
|
1087 |
/** Retrieve the number of frames that can be read from the stream without |
1088 |
waiting. |
1089 |
|
1090 |
@return Returns a non-negative value representing the maximum number of frames |
1091 |
that can be read from the stream without blocking or busy waiting or, a |
1092 |
PaErrorCode (which are always negative) if PortAudio is not initialized or an |
1093 |
error is encountered. |
1094 |
*/ |
1095 |
signed long Pa_GetStreamReadAvailable( PaStream* stream ); |
1096 |
|
1097 |
|
1098 |
/** Retrieve the number of frames that can be written to the stream without |
1099 |
waiting. |
1100 |
|
1101 |
@return Returns a non-negative value representing the maximum number of frames |
1102 |
that can be written to the stream without blocking or busy waiting or, a |
1103 |
PaErrorCode (which are always negative) if PortAudio is not initialized or an |
1104 |
error is encountered. |
1105 |
*/ |
1106 |
signed long Pa_GetStreamWriteAvailable( PaStream* stream ); |
1107 |
|
1108 |
|
1109 |
/* Miscellaneous utilities */ |
1110 |
|
1111 |
|
1112 |
/** Retrieve the size of a given sample format in bytes. |
1113 |
|
1114 |
@return The size in bytes of a single sample in the specified format, |
1115 |
or paSampleFormatNotSupported if the format is not supported. |
1116 |
*/ |
1117 |
PaError Pa_GetSampleSize( PaSampleFormat format ); |
1118 |
|
1119 |
|
1120 |
/** Put the caller to sleep for at least 'msec' milliseconds. This function is |
1121 |
provided only as a convenience for authors of portable code (such as the tests |
1122 |
and examples in the PortAudio distribution.) |
1123 |
|
1124 |
The function may sleep longer than requested so don't rely on this for accurate |
1125 |
musical timing. |
1126 |
*/ |
1127 |
void Pa_Sleep( long msec ); |
1128 |
|
1129 |
|
1130 |
|
1131 |
#ifdef __cplusplus |
1132 |
} |
1133 |
#endif /* __cplusplus */ |
1134 |
#endif /* PORTAUDIO_H */ |