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