Mercurial > hg > sv-dependency-builds
comparison osx/include/portaudio.h @ 29:27d4e7152c95
PortAudio on OS/X
author | Chris Cannam |
---|---|
date | Thu, 09 Jan 2014 21:33:28 +0000 |
parents | |
children | af97cad61ff0 |
comparison
equal
deleted
inserted
replaced
28:a988521943bc | 29:27d4e7152c95 |
---|---|
1 #ifndef PORTAUDIO_H | |
2 #define PORTAUDIO_H | |
3 /* | |
4 * $Id: portaudio.h 1594 2011-02-05 14:33:29Z 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, | |
99 paCanNotWriteToACallbackStream, | |
100 paCanNotReadFromAnOutputOnlyStream, | |
101 paCanNotWriteToAnInputOnlyStream, | |
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 initializes 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 initialized 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 asynchronously 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 constraining 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 default 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. PaTime is | |
402 used for the fields of the PaStreamCallbackTimeInfo argument to the | |
403 PaStreamCallback and as the result of Pa_GetStreamTime(). | |
404 | |
405 PaTime values have unspecified origin. | |
406 | |
407 @see PaStreamCallback, PaStreamCallbackTimeInfo, Pa_GetStreamTime | |
408 */ | |
409 typedef double PaTime; | |
410 | |
411 | |
412 /** A type used to specify one or more sample formats. Each value indicates | |
413 a possible format for sound data passed to and from the stream callback, | |
414 Pa_ReadStream and Pa_WriteStream. | |
415 | |
416 The standard formats paFloat32, paInt16, paInt32, paInt24, paInt8 | |
417 and aUInt8 are usually implemented by all implementations. | |
418 | |
419 The floating point representation (paFloat32) uses +1.0 and -1.0 as the | |
420 maximum and minimum respectively. | |
421 | |
422 paUInt8 is an unsigned 8 bit format where 128 is considered "ground" | |
423 | |
424 The paNonInterleaved flag indicates that audio data is passed as an array | |
425 of pointers to separate buffers, one buffer for each channel. Usually, | |
426 when this flag is not used, audio data is passed as a single buffer with | |
427 all channels interleaved. | |
428 | |
429 @see Pa_OpenStream, Pa_OpenDefaultStream, PaDeviceInfo | |
430 @see paFloat32, paInt16, paInt32, paInt24, paInt8 | |
431 @see paUInt8, paCustomFormat, paNonInterleaved | |
432 */ | |
433 typedef unsigned long PaSampleFormat; | |
434 | |
435 | |
436 #define paFloat32 ((PaSampleFormat) 0x00000001) /**< @see PaSampleFormat */ | |
437 #define paInt32 ((PaSampleFormat) 0x00000002) /**< @see PaSampleFormat */ | |
438 #define paInt24 ((PaSampleFormat) 0x00000004) /**< Packed 24 bit format. @see PaSampleFormat */ | |
439 #define paInt16 ((PaSampleFormat) 0x00000008) /**< @see PaSampleFormat */ | |
440 #define paInt8 ((PaSampleFormat) 0x00000010) /**< @see PaSampleFormat */ | |
441 #define paUInt8 ((PaSampleFormat) 0x00000020) /**< @see PaSampleFormat */ | |
442 #define paCustomFormat ((PaSampleFormat) 0x00010000) /**< @see PaSampleFormat */ | |
443 | |
444 #define paNonInterleaved ((PaSampleFormat) 0x80000000) /**< @see PaSampleFormat */ | |
445 | |
446 /** A structure providing information and capabilities of PortAudio devices. | |
447 Devices may support input, output or both input and output. | |
448 */ | |
449 typedef struct PaDeviceInfo | |
450 { | |
451 int structVersion; /* this is struct version 2 */ | |
452 const char *name; | |
453 PaHostApiIndex hostApi; /* note this is a host API index, not a type id*/ | |
454 | |
455 int maxInputChannels; | |
456 int maxOutputChannels; | |
457 | |
458 /* Default latency values for interactive performance. */ | |
459 PaTime defaultLowInputLatency; | |
460 PaTime defaultLowOutputLatency; | |
461 /* Default latency values for robust non-interactive applications (eg. playing sound files). */ | |
462 PaTime defaultHighInputLatency; | |
463 PaTime defaultHighOutputLatency; | |
464 | |
465 double defaultSampleRate; | |
466 } PaDeviceInfo; | |
467 | |
468 | |
469 /** Retrieve a pointer to a PaDeviceInfo structure containing information | |
470 about the specified device. | |
471 @return A pointer to an immutable PaDeviceInfo structure. If the device | |
472 parameter is out of range the function returns NULL. | |
473 | |
474 @param device A valid device index in the range 0 to (Pa_GetDeviceCount()-1) | |
475 | |
476 @note PortAudio manages the memory referenced by the returned pointer, | |
477 the client must not manipulate or free the memory. The pointer is only | |
478 guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate(). | |
479 | |
480 @see PaDeviceInfo, PaDeviceIndex | |
481 */ | |
482 const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device ); | |
483 | |
484 | |
485 /** Parameters for one direction (input or output) of a stream. | |
486 */ | |
487 typedef struct PaStreamParameters | |
488 { | |
489 /** A valid device index in the range 0 to (Pa_GetDeviceCount()-1) | |
490 specifying the device to be used or the special constant | |
491 paUseHostApiSpecificDeviceSpecification which indicates that the actual | |
492 device(s) to use are specified in hostApiSpecificStreamInfo. | |
493 This field must not be set to paNoDevice. | |
494 */ | |
495 PaDeviceIndex device; | |
496 | |
497 /** The number of channels of sound to be delivered to the | |
498 stream callback or accessed by Pa_ReadStream() or Pa_WriteStream(). | |
499 It can range from 1 to the value of maxInputChannels in the | |
500 PaDeviceInfo record for the device specified by the device parameter. | |
501 */ | |
502 int channelCount; | |
503 | |
504 /** The sample format of the buffer provided to the stream callback, | |
505 a_ReadStream() or Pa_WriteStream(). It may be any of the formats described | |
506 by the PaSampleFormat enumeration. | |
507 */ | |
508 PaSampleFormat sampleFormat; | |
509 | |
510 /** The desired latency in seconds. Where practical, implementations should | |
511 configure their latency based on these parameters, otherwise they may | |
512 choose the closest viable latency instead. Unless the suggested latency | |
513 is greater than the absolute upper limit for the device implementations | |
514 should round the suggestedLatency up to the next practical value - ie to | |
515 provide an equal or higher latency than suggestedLatency wherever possible. | |
516 Actual latency values for an open stream may be retrieved using the | |
517 inputLatency and outputLatency fields of the PaStreamInfo structure | |
518 returned by Pa_GetStreamInfo(). | |
519 @see default*Latency in PaDeviceInfo, *Latency in PaStreamInfo | |
520 */ | |
521 PaTime suggestedLatency; | |
522 | |
523 /** An optional pointer to a host api specific data structure | |
524 containing additional information for device setup and/or stream processing. | |
525 hostApiSpecificStreamInfo is never required for correct operation, | |
526 if not used it should be set to NULL. | |
527 */ | |
528 void *hostApiSpecificStreamInfo; | |
529 | |
530 } PaStreamParameters; | |
531 | |
532 | |
533 /** Return code for Pa_IsFormatSupported indicating success. */ | |
534 #define paFormatIsSupported (0) | |
535 | |
536 /** Determine whether it would be possible to open a stream with the specified | |
537 parameters. | |
538 | |
539 @param inputParameters A structure that describes the input parameters used to | |
540 open a stream. The suggestedLatency field is ignored. See PaStreamParameters | |
541 for a description of these parameters. inputParameters must be NULL for | |
542 output-only streams. | |
543 | |
544 @param outputParameters A structure that describes the output parameters used | |
545 to open a stream. The suggestedLatency field is ignored. See PaStreamParameters | |
546 for a description of these parameters. outputParameters must be NULL for | |
547 input-only streams. | |
548 | |
549 @param sampleRate The required sampleRate. For full-duplex streams it is the | |
550 sample rate for both input and output | |
551 | |
552 @return Returns 0 if the format is supported, and an error code indicating why | |
553 the format is not supported otherwise. The constant paFormatIsSupported is | |
554 provided to compare with the return value for success. | |
555 | |
556 @see paFormatIsSupported, PaStreamParameters | |
557 */ | |
558 PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters, | |
559 const PaStreamParameters *outputParameters, | |
560 double sampleRate ); | |
561 | |
562 | |
563 | |
564 /* Streaming types and functions */ | |
565 | |
566 | |
567 /** | |
568 A single PaStream can provide multiple channels of real-time | |
569 streaming audio input and output to a client application. A stream | |
570 provides access to audio hardware represented by one or more | |
571 PaDevices. Depending on the underlying Host API, it may be possible | |
572 to open multiple streams using the same device, however this behavior | |
573 is implementation defined. Portable applications should assume that | |
574 a PaDevice may be simultaneously used by at most one PaStream. | |
575 | |
576 Pointers to PaStream objects are passed between PortAudio functions that | |
577 operate on streams. | |
578 | |
579 @see Pa_OpenStream, Pa_OpenDefaultStream, Pa_OpenDefaultStream, Pa_CloseStream, | |
580 Pa_StartStream, Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive, | |
581 Pa_GetStreamTime, Pa_GetStreamCpuLoad | |
582 | |
583 */ | |
584 typedef void PaStream; | |
585 | |
586 | |
587 /** Can be passed as the framesPerBuffer parameter to Pa_OpenStream() | |
588 or Pa_OpenDefaultStream() to indicate that the stream callback will | |
589 accept buffers of any size. | |
590 */ | |
591 #define paFramesPerBufferUnspecified (0) | |
592 | |
593 | |
594 /** Flags used to control the behavior of a stream. They are passed as | |
595 parameters to Pa_OpenStream or Pa_OpenDefaultStream. Multiple flags may be | |
596 ORed together. | |
597 | |
598 @see Pa_OpenStream, Pa_OpenDefaultStream | |
599 @see paNoFlag, paClipOff, paDitherOff, paNeverDropInput, | |
600 paPrimeOutputBuffersUsingStreamCallback, paPlatformSpecificFlags | |
601 */ | |
602 typedef unsigned long PaStreamFlags; | |
603 | |
604 /** @see PaStreamFlags */ | |
605 #define paNoFlag ((PaStreamFlags) 0) | |
606 | |
607 /** Disable default clipping of out of range samples. | |
608 @see PaStreamFlags | |
609 */ | |
610 #define paClipOff ((PaStreamFlags) 0x00000001) | |
611 | |
612 /** Disable default dithering. | |
613 @see PaStreamFlags | |
614 */ | |
615 #define paDitherOff ((PaStreamFlags) 0x00000002) | |
616 | |
617 /** Flag requests that where possible a full duplex stream will not discard | |
618 overflowed input samples without calling the stream callback. This flag is | |
619 only valid for full duplex callback streams and only when used in combination | |
620 with the paFramesPerBufferUnspecified (0) framesPerBuffer parameter. Using | |
621 this flag incorrectly results in a paInvalidFlag error being returned from | |
622 Pa_OpenStream and Pa_OpenDefaultStream. | |
623 | |
624 @see PaStreamFlags, paFramesPerBufferUnspecified | |
625 */ | |
626 #define paNeverDropInput ((PaStreamFlags) 0x00000004) | |
627 | |
628 /** Call the stream callback to fill initial output buffers, rather than the | |
629 default behavior of priming the buffers with zeros (silence). This flag has | |
630 no effect for input-only and blocking read/write streams. | |
631 | |
632 @see PaStreamFlags | |
633 */ | |
634 #define paPrimeOutputBuffersUsingStreamCallback ((PaStreamFlags) 0x00000008) | |
635 | |
636 /** A mask specifying the platform specific bits. | |
637 @see PaStreamFlags | |
638 */ | |
639 #define paPlatformSpecificFlags ((PaStreamFlags)0xFFFF0000) | |
640 | |
641 /** | |
642 Timing information for the buffers passed to the stream callback. | |
643 */ | |
644 typedef struct PaStreamCallbackTimeInfo{ | |
645 PaTime inputBufferAdcTime; | |
646 PaTime currentTime; | |
647 PaTime outputBufferDacTime; | |
648 } PaStreamCallbackTimeInfo; | |
649 | |
650 | |
651 /** | |
652 Flag bit constants for the statusFlags to PaStreamCallback. | |
653 | |
654 @see paInputUnderflow, paInputOverflow, paOutputUnderflow, paOutputOverflow, | |
655 paPrimingOutput | |
656 */ | |
657 typedef unsigned long PaStreamCallbackFlags; | |
658 | |
659 /** In a stream opened with paFramesPerBufferUnspecified, indicates that | |
660 input data is all silence (zeros) because no real data is available. In a | |
661 stream opened without paFramesPerBufferUnspecified, it indicates that one or | |
662 more zero samples have been inserted into the input buffer to compensate | |
663 for an input underflow. | |
664 @see PaStreamCallbackFlags | |
665 */ | |
666 #define paInputUnderflow ((PaStreamCallbackFlags) 0x00000001) | |
667 | |
668 /** In a stream opened with paFramesPerBufferUnspecified, indicates that data | |
669 prior to the first sample of the input buffer was discarded due to an | |
670 overflow, possibly because the stream callback is using too much CPU time. | |
671 Otherwise indicates that data prior to one or more samples in the | |
672 input buffer was discarded. | |
673 @see PaStreamCallbackFlags | |
674 */ | |
675 #define paInputOverflow ((PaStreamCallbackFlags) 0x00000002) | |
676 | |
677 /** Indicates that output data (or a gap) was inserted, possibly because the | |
678 stream callback is using too much CPU time. | |
679 @see PaStreamCallbackFlags | |
680 */ | |
681 #define paOutputUnderflow ((PaStreamCallbackFlags) 0x00000004) | |
682 | |
683 /** Indicates that output data will be discarded because no room is available. | |
684 @see PaStreamCallbackFlags | |
685 */ | |
686 #define paOutputOverflow ((PaStreamCallbackFlags) 0x00000008) | |
687 | |
688 /** Some of all of the output data will be used to prime the stream, input | |
689 data may be zero. | |
690 @see PaStreamCallbackFlags | |
691 */ | |
692 #define paPrimingOutput ((PaStreamCallbackFlags) 0x00000010) | |
693 | |
694 /** | |
695 Allowable return values for the PaStreamCallback. | |
696 @see PaStreamCallback | |
697 */ | |
698 typedef enum PaStreamCallbackResult | |
699 { | |
700 paContinue=0, | |
701 paComplete=1, | |
702 paAbort=2 | |
703 } PaStreamCallbackResult; | |
704 | |
705 | |
706 /** | |
707 Functions of type PaStreamCallback are implemented by PortAudio clients. | |
708 They consume, process or generate audio in response to requests from an | |
709 active PortAudio stream. | |
710 | |
711 @param input and @param output are either arrays of interleaved samples or; | |
712 if non-interleaved samples were requested using the paNonInterleaved sample | |
713 format flag, an array of buffer pointers, one non-interleaved buffer for | |
714 each channel. | |
715 | |
716 The format, packing and number of channels used by the buffers are | |
717 determined by parameters to Pa_OpenStream(). | |
718 | |
719 @param frameCount The number of sample frames to be processed by | |
720 the stream callback. | |
721 | |
722 @param timeInfo The time in seconds when the first sample of the input | |
723 buffer was received at the audio input, the time in seconds when the first | |
724 sample of the output buffer will begin being played at the audio output, and | |
725 the time in seconds when the stream callback was called. | |
726 See also Pa_GetStreamTime() | |
727 | |
728 @param statusFlags Flags indicating whether input and/or output buffers | |
729 have been inserted or will be dropped to overcome underflow or overflow | |
730 conditions. | |
731 | |
732 @param userData The value of a user supplied pointer passed to | |
733 Pa_OpenStream() intended for storing synthesis data etc. | |
734 | |
735 @return | |
736 The stream callback should return one of the values in the | |
737 PaStreamCallbackResult enumeration. To ensure that the callback continues | |
738 to be called, it should return paContinue (0). Either paComplete or paAbort | |
739 can be returned to finish stream processing, after either of these values is | |
740 returned the callback will not be called again. If paAbort is returned the | |
741 stream will finish as soon as possible. If paComplete is returned, the stream | |
742 will continue until all buffers generated by the callback have been played. | |
743 This may be useful in applications such as soundfile players where a specific | |
744 duration of output is required. However, it is not necessary to utilize this | |
745 mechanism as Pa_StopStream(), Pa_AbortStream() or Pa_CloseStream() can also | |
746 be used to stop the stream. The callback must always fill the entire output | |
747 buffer irrespective of its return value. | |
748 | |
749 @see Pa_OpenStream, Pa_OpenDefaultStream | |
750 | |
751 @note With the exception of Pa_GetStreamCpuLoad() it is not permissible to call | |
752 PortAudio API functions from within the stream callback. | |
753 */ | |
754 typedef int PaStreamCallback( | |
755 const void *input, void *output, | |
756 unsigned long frameCount, | |
757 const PaStreamCallbackTimeInfo* timeInfo, | |
758 PaStreamCallbackFlags statusFlags, | |
759 void *userData ); | |
760 | |
761 | |
762 /** Opens a stream for either input, output or both. | |
763 | |
764 @param stream The address of a PaStream pointer which will receive | |
765 a pointer to the newly opened stream. | |
766 | |
767 @param inputParameters A structure that describes the input parameters used by | |
768 the opened stream. See PaStreamParameters for a description of these parameters. | |
769 inputParameters must be NULL for output-only streams. | |
770 | |
771 @param outputParameters A structure that describes the output parameters used by | |
772 the opened stream. See PaStreamParameters for a description of these parameters. | |
773 outputParameters must be NULL for input-only streams. | |
774 | |
775 @param sampleRate The desired sampleRate. For full-duplex streams it is the | |
776 sample rate for both input and output | |
777 | |
778 @param framesPerBuffer The number of frames passed to the stream callback | |
779 function, or the preferred block granularity for a blocking read/write stream. | |
780 The special value paFramesPerBufferUnspecified (0) may be used to request that | |
781 the stream callback will receive an optimal (and possibly varying) number of | |
782 frames based on host requirements and the requested latency settings. | |
783 Note: With some host APIs, the use of non-zero framesPerBuffer for a callback | |
784 stream may introduce an additional layer of buffering which could introduce | |
785 additional latency. PortAudio guarantees that the additional latency | |
786 will be kept to the theoretical minimum however, it is strongly recommended | |
787 that a non-zero framesPerBuffer value only be used when your algorithm | |
788 requires a fixed number of frames per stream callback. | |
789 | |
790 @param streamFlags Flags which modify the behavior of the streaming process. | |
791 This parameter may contain a combination of flags ORed together. Some flags may | |
792 only be relevant to certain buffer formats. | |
793 | |
794 @param streamCallback A pointer to a client supplied function that is responsible | |
795 for processing and filling input and output buffers. If this parameter is NULL | |
796 the stream will be opened in 'blocking read/write' mode. In blocking mode, | |
797 the client can receive sample data using Pa_ReadStream and write sample data | |
798 using Pa_WriteStream, the number of samples that may be read or written | |
799 without blocking is returned by Pa_GetStreamReadAvailable and | |
800 Pa_GetStreamWriteAvailable respectively. | |
801 | |
802 @param userData A client supplied pointer which is passed to the stream callback | |
803 function. It could for example, contain a pointer to instance data necessary | |
804 for processing the audio buffers. This parameter is ignored if streamCallback | |
805 is NULL. | |
806 | |
807 @return | |
808 Upon success Pa_OpenStream() returns paNoError and places a pointer to a | |
809 valid PaStream in the stream argument. The stream is inactive (stopped). | |
810 If a call to Pa_OpenStream() fails, a non-zero error code is returned (see | |
811 PaError for possible error codes) and the value of stream is invalid. | |
812 | |
813 @see PaStreamParameters, PaStreamCallback, Pa_ReadStream, Pa_WriteStream, | |
814 Pa_GetStreamReadAvailable, Pa_GetStreamWriteAvailable | |
815 */ | |
816 PaError Pa_OpenStream( PaStream** stream, | |
817 const PaStreamParameters *inputParameters, | |
818 const PaStreamParameters *outputParameters, | |
819 double sampleRate, | |
820 unsigned long framesPerBuffer, | |
821 PaStreamFlags streamFlags, | |
822 PaStreamCallback *streamCallback, | |
823 void *userData ); | |
824 | |
825 | |
826 /** A simplified version of Pa_OpenStream() that opens the default input | |
827 and/or output devices. | |
828 | |
829 @param stream The address of a PaStream pointer which will receive | |
830 a pointer to the newly opened stream. | |
831 | |
832 @param numInputChannels The number of channels of sound that will be supplied | |
833 to the stream callback or returned by Pa_ReadStream. It can range from 1 to | |
834 the value of maxInputChannels in the PaDeviceInfo record for the default input | |
835 device. If 0 the stream is opened as an output-only stream. | |
836 | |
837 @param numOutputChannels The number of channels of sound to be delivered to the | |
838 stream callback or passed to Pa_WriteStream. It can range from 1 to the value | |
839 of maxOutputChannels in the PaDeviceInfo record for the default output device. | |
840 If 0 the stream is opened as an output-only stream. | |
841 | |
842 @param sampleFormat The sample format of both the input and output buffers | |
843 provided to the callback or passed to and from Pa_ReadStream and Pa_WriteStream. | |
844 sampleFormat may be any of the formats described by the PaSampleFormat | |
845 enumeration. | |
846 | |
847 @param sampleRate Same as Pa_OpenStream parameter of the same name. | |
848 @param framesPerBuffer Same as Pa_OpenStream parameter of the same name. | |
849 @param streamCallback Same as Pa_OpenStream parameter of the same name. | |
850 @param userData Same as Pa_OpenStream parameter of the same name. | |
851 | |
852 @return As for Pa_OpenStream | |
853 | |
854 @see Pa_OpenStream, PaStreamCallback | |
855 */ | |
856 PaError Pa_OpenDefaultStream( PaStream** stream, | |
857 int numInputChannels, | |
858 int numOutputChannels, | |
859 PaSampleFormat sampleFormat, | |
860 double sampleRate, | |
861 unsigned long framesPerBuffer, | |
862 PaStreamCallback *streamCallback, | |
863 void *userData ); | |
864 | |
865 | |
866 /** Closes an audio stream. If the audio stream is active it | |
867 discards any pending buffers as if Pa_AbortStream() had been called. | |
868 */ | |
869 PaError Pa_CloseStream( PaStream *stream ); | |
870 | |
871 | |
872 /** Functions of type PaStreamFinishedCallback are implemented by PortAudio | |
873 clients. They can be registered with a stream using the Pa_SetStreamFinishedCallback | |
874 function. Once registered they are called when the stream becomes inactive | |
875 (ie once a call to Pa_StopStream() will not block). | |
876 A stream will become inactive after the stream callback returns non-zero, | |
877 or when Pa_StopStream or Pa_AbortStream is called. For a stream providing audio | |
878 output, if the stream callback returns paComplete, or Pa_StopStream is called, | |
879 the stream finished callback will not be called until all generated sample data | |
880 has been played. | |
881 | |
882 @param userData The userData parameter supplied to Pa_OpenStream() | |
883 | |
884 @see Pa_SetStreamFinishedCallback | |
885 */ | |
886 typedef void PaStreamFinishedCallback( void *userData ); | |
887 | |
888 | |
889 /** Register a stream finished callback function which will be called when the | |
890 stream becomes inactive. See the description of PaStreamFinishedCallback for | |
891 further details about when the callback will be called. | |
892 | |
893 @param stream a pointer to a PaStream that is in the stopped state - if the | |
894 stream is not stopped, the stream's finished callback will remain unchanged | |
895 and an error code will be returned. | |
896 | |
897 @param streamFinishedCallback a pointer to a function with the same signature | |
898 as PaStreamFinishedCallback, that will be called when the stream becomes | |
899 inactive. Passing NULL for this parameter will un-register a previously | |
900 registered stream finished callback function. | |
901 | |
902 @return on success returns paNoError, otherwise an error code indicating the cause | |
903 of the error. | |
904 | |
905 @see PaStreamFinishedCallback | |
906 */ | |
907 PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ); | |
908 | |
909 | |
910 /** Commences audio processing. | |
911 */ | |
912 PaError Pa_StartStream( PaStream *stream ); | |
913 | |
914 | |
915 /** Terminates audio processing. It waits until all pending | |
916 audio buffers have been played before it returns. | |
917 */ | |
918 PaError Pa_StopStream( PaStream *stream ); | |
919 | |
920 | |
921 /** Terminates audio processing immediately without waiting for pending | |
922 buffers to complete. | |
923 */ | |
924 PaError Pa_AbortStream( PaStream *stream ); | |
925 | |
926 | |
927 /** Determine whether the stream is stopped. | |
928 A stream is considered to be stopped prior to a successful call to | |
929 Pa_StartStream and after a successful call to Pa_StopStream or Pa_AbortStream. | |
930 If a stream callback returns a value other than paContinue the stream is NOT | |
931 considered to be stopped. | |
932 | |
933 @return Returns one (1) when the stream is stopped, zero (0) when | |
934 the stream is running or, a PaErrorCode (which are always negative) if | |
935 PortAudio is not initialized or an error is encountered. | |
936 | |
937 @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive | |
938 */ | |
939 PaError Pa_IsStreamStopped( PaStream *stream ); | |
940 | |
941 | |
942 /** Determine whether the stream is active. | |
943 A stream is active after a successful call to Pa_StartStream(), until it | |
944 becomes inactive either as a result of a call to Pa_StopStream() or | |
945 Pa_AbortStream(), or as a result of a return value other than paContinue from | |
946 the stream callback. In the latter case, the stream is considered inactive | |
947 after the last buffer has finished playing. | |
948 | |
949 @return Returns one (1) when the stream is active (ie playing or recording | |
950 audio), zero (0) when not playing or, a PaErrorCode (which are always negative) | |
951 if PortAudio is not initialized or an error is encountered. | |
952 | |
953 @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamStopped | |
954 */ | |
955 PaError Pa_IsStreamActive( PaStream *stream ); | |
956 | |
957 | |
958 | |
959 /** A structure containing unchanging information about an open stream. | |
960 @see Pa_GetStreamInfo | |
961 */ | |
962 | |
963 typedef struct PaStreamInfo | |
964 { | |
965 /** this is struct version 1 */ | |
966 int structVersion; | |
967 | |
968 /** The input latency of the stream in seconds. This value provides the most | |
969 accurate estimate of input 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 output-only streams. | |
972 @see PaTime | |
973 */ | |
974 PaTime inputLatency; | |
975 | |
976 /** The output latency of the stream in seconds. This value provides the most | |
977 accurate estimate of output latency available to the implementation. It may | |
978 differ significantly from the suggestedLatency value passed to Pa_OpenStream(). | |
979 The value of this field will be zero (0.) for input-only streams. | |
980 @see PaTime | |
981 */ | |
982 PaTime outputLatency; | |
983 | |
984 /** The sample rate of the stream in Hertz (samples per second). In cases | |
985 where the hardware sample rate is inaccurate and PortAudio is aware of it, | |
986 the value of this field may be different from the sampleRate parameter | |
987 passed to Pa_OpenStream(). If information about the actual hardware sample | |
988 rate is not available, this field will have the same value as the sampleRate | |
989 parameter passed to Pa_OpenStream(). | |
990 */ | |
991 double sampleRate; | |
992 | |
993 } PaStreamInfo; | |
994 | |
995 | |
996 /** Retrieve a pointer to a PaStreamInfo structure containing information | |
997 about the specified stream. | |
998 @return A pointer to an immutable PaStreamInfo structure. If the stream | |
999 parameter invalid, or an error is encountered, the function returns NULL. | |
1000 | |
1001 @param stream A pointer to an open stream previously created with Pa_OpenStream. | |
1002 | |
1003 @note PortAudio manages the memory referenced by the returned pointer, | |
1004 the client must not manipulate or free the memory. The pointer is only | |
1005 guaranteed to be valid until the specified stream is closed. | |
1006 | |
1007 @see PaStreamInfo | |
1008 */ | |
1009 const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream ); | |
1010 | |
1011 | |
1012 /** Returns the current time in seconds for a stream according to the same clock used | |
1013 to generate callback PaStreamCallbackTimeInfo timestamps. The time values are | |
1014 monotonically increasing and have unspecified origin. | |
1015 | |
1016 Pa_GetStreamTime returns valid time values for the entire life of the stream, | |
1017 from when the stream is opened until it is closed. Starting and stopping the stream | |
1018 does not affect the passage of time returned by Pa_GetStreamTime. | |
1019 | |
1020 This time may be used for synchronizing other events to the audio stream, for | |
1021 example synchronizing audio to MIDI. | |
1022 | |
1023 @return The stream's current time in seconds, or 0 if an error occurred. | |
1024 | |
1025 @see PaTime, PaStreamCallback, PaStreamCallbackTimeInfo | |
1026 */ | |
1027 PaTime Pa_GetStreamTime( PaStream *stream ); | |
1028 | |
1029 | |
1030 /** Retrieve CPU usage information for the specified stream. | |
1031 The "CPU Load" is a fraction of total CPU time consumed by a callback stream's | |
1032 audio processing routines including, but not limited to the client supplied | |
1033 stream callback. This function does not work with blocking read/write streams. | |
1034 | |
1035 This function may be called from the stream callback function or the | |
1036 application. | |
1037 | |
1038 @return | |
1039 A floating point value, typically between 0.0 and 1.0, where 1.0 indicates | |
1040 that the stream callback is consuming the maximum number of CPU cycles possible | |
1041 to maintain real-time operation. A value of 0.5 would imply that PortAudio and | |
1042 the stream callback was consuming roughly 50% of the available CPU time. The | |
1043 return value may exceed 1.0. A value of 0.0 will always be returned for a | |
1044 blocking read/write stream, or if an error occurs. | |
1045 */ | |
1046 double Pa_GetStreamCpuLoad( PaStream* stream ); | |
1047 | |
1048 | |
1049 /** Read samples from an input stream. The function doesn't return until | |
1050 the entire buffer has been filled - this may involve waiting for the operating | |
1051 system to supply the data. | |
1052 | |
1053 @param stream A pointer to an open stream previously created with Pa_OpenStream. | |
1054 | |
1055 @param buffer A pointer to a buffer of sample frames. The buffer contains | |
1056 samples in the format specified by the inputParameters->sampleFormat field | |
1057 used to open the stream, and the number of channels specified by | |
1058 inputParameters->numChannels. If non-interleaved samples were requested using | |
1059 the paNonInterleaved sample format flag, buffer is a pointer to the first element | |
1060 of an array of buffer pointers, one non-interleaved buffer for each channel. | |
1061 | |
1062 @param frames The number of frames to be read into buffer. This parameter | |
1063 is not constrained to a specific range, however high performance applications | |
1064 will want to match this parameter to the framesPerBuffer parameter used | |
1065 when opening the stream. | |
1066 | |
1067 @return On success PaNoError will be returned, or PaInputOverflowed if input | |
1068 data was discarded by PortAudio after the previous call and before this call. | |
1069 */ | |
1070 PaError Pa_ReadStream( PaStream* stream, | |
1071 void *buffer, | |
1072 unsigned long frames ); | |
1073 | |
1074 | |
1075 /** Write samples to an output stream. This function doesn't return until the | |
1076 entire buffer has been consumed - this may involve waiting for the operating | |
1077 system to consume the data. | |
1078 | |
1079 @param stream A pointer to an open stream previously created with Pa_OpenStream. | |
1080 | |
1081 @param buffer A pointer to a buffer of sample frames. The buffer contains | |
1082 samples in the format specified by the outputParameters->sampleFormat field | |
1083 used to open the stream, and the number of channels specified by | |
1084 outputParameters->numChannels. If non-interleaved samples were requested using | |
1085 the paNonInterleaved sample format flag, buffer is a pointer to the first element | |
1086 of an array of buffer pointers, one non-interleaved buffer for each channel. | |
1087 | |
1088 @param frames The number of frames to be written from buffer. This parameter | |
1089 is not constrained to a specific range, however high performance applications | |
1090 will want to match this parameter to the framesPerBuffer parameter used | |
1091 when opening the stream. | |
1092 | |
1093 @return On success PaNoError will be returned, or paOutputUnderflowed if | |
1094 additional output data was inserted after the previous call and before this | |
1095 call. | |
1096 */ | |
1097 PaError Pa_WriteStream( PaStream* stream, | |
1098 const void *buffer, | |
1099 unsigned long frames ); | |
1100 | |
1101 | |
1102 /** Retrieve the number of frames that can be read from the stream without | |
1103 waiting. | |
1104 | |
1105 @return Returns a non-negative value representing the maximum number of frames | |
1106 that can be read from the stream without blocking or busy waiting or, a | |
1107 PaErrorCode (which are always negative) if PortAudio is not initialized or an | |
1108 error is encountered. | |
1109 */ | |
1110 signed long Pa_GetStreamReadAvailable( PaStream* stream ); | |
1111 | |
1112 | |
1113 /** Retrieve the number of frames that can be written to the stream without | |
1114 waiting. | |
1115 | |
1116 @return Returns a non-negative value representing the maximum number of frames | |
1117 that can be written to the stream without blocking or busy waiting or, a | |
1118 PaErrorCode (which are always negative) if PortAudio is not initialized or an | |
1119 error is encountered. | |
1120 */ | |
1121 signed long Pa_GetStreamWriteAvailable( PaStream* stream ); | |
1122 | |
1123 | |
1124 /* Miscellaneous utilities */ | |
1125 | |
1126 | |
1127 /** Retrieve the size of a given sample format in bytes. | |
1128 | |
1129 @return The size in bytes of a single sample in the specified format, | |
1130 or paSampleFormatNotSupported if the format is not supported. | |
1131 */ | |
1132 PaError Pa_GetSampleSize( PaSampleFormat format ); | |
1133 | |
1134 | |
1135 /** Put the caller to sleep for at least 'msec' milliseconds. This function is | |
1136 provided only as a convenience for authors of portable code (such as the tests | |
1137 and examples in the PortAudio distribution.) | |
1138 | |
1139 The function may sleep longer than requested so don't rely on this for accurate | |
1140 musical timing. | |
1141 */ | |
1142 void Pa_Sleep( long msec ); | |
1143 | |
1144 | |
1145 | |
1146 #ifdef __cplusplus | |
1147 } | |
1148 #endif /* __cplusplus */ | |
1149 #endif /* PORTAUDIO_H */ |