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