|
| 1 | +#ifndef PA_ASIO_H |
| 2 | +#define PA_ASIO_H |
| 3 | +/* |
| 4 | + * $Id$ |
| 5 | + * PortAudio Portable Real-Time Audio Library |
| 6 | + * ASIO specific extensions |
| 7 | + * |
| 8 | + * Copyright (c) 1999-2000 Ross Bencina and Phil Burk |
| 9 | + * |
| 10 | + * Permission is hereby granted, free of charge, to any person obtaining |
| 11 | + * a copy of this software and associated documentation files |
| 12 | + * (the "Software"), to deal in the Software without restriction, |
| 13 | + * including without limitation the rights to use, copy, modify, merge, |
| 14 | + * publish, distribute, sublicense, and/or sell copies of the Software, |
| 15 | + * and to permit persons to whom the Software is furnished to do so, |
| 16 | + * subject to the following conditions: |
| 17 | + * |
| 18 | + * The above copyright notice and this permission notice shall be |
| 19 | + * included in all copies or substantial portions of the Software. |
| 20 | + * |
| 21 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| 22 | + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| 23 | + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
| 24 | + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR |
| 25 | + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF |
| 26 | + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
| 27 | + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| 28 | + */ |
| 29 | + |
| 30 | +/* |
| 31 | + * The text above constitutes the entire PortAudio license; however, |
| 32 | + * the PortAudio community also makes the following non-binding requests: |
| 33 | + * |
| 34 | + * Any person wishing to distribute modifications to the Software is |
| 35 | + * requested to send the modifications to the original developer so that |
| 36 | + * they can be incorporated into the canonical version. It is also |
| 37 | + * requested that these non-binding requests be included along with the |
| 38 | + * license above. |
| 39 | + */ |
| 40 | + |
| 41 | + |
| 42 | +/** @file |
| 43 | + @ingroup public_header |
| 44 | + @brief ASIO-specific PortAudio API extension header file. |
| 45 | +*/ |
| 46 | + |
| 47 | +#include "portaudio.h" |
| 48 | + |
| 49 | +#ifdef __cplusplus |
| 50 | +extern "C" |
| 51 | +{ |
| 52 | +#endif /* __cplusplus */ |
| 53 | + |
| 54 | + |
| 55 | +/** Retrieve legal native buffer sizes for the specified device, in sample frames. |
| 56 | +
|
| 57 | + @param device The global index of the device about which the query is being made. |
| 58 | + @param minBufferSizeFrames A pointer to the location which will receive the minimum buffer size value. |
| 59 | + @param maxBufferSizeFrames A pointer to the location which will receive the maximum buffer size value. |
| 60 | + @param preferredBufferSizeFrames A pointer to the location which will receive the preferred buffer size value. |
| 61 | + @param granularity A pointer to the location which will receive the "granularity". This value determines |
| 62 | + the step size used to compute the legal values between minBufferSizeFrames and maxBufferSizeFrames. |
| 63 | + If granularity is -1 then available buffer size values are powers of two. |
| 64 | +
|
| 65 | + @see ASIOGetBufferSize in the ASIO SDK. |
| 66 | +
|
| 67 | + @note: this function used to be called PaAsio_GetAvailableLatencyValues. There is a |
| 68 | + #define that maps PaAsio_GetAvailableLatencyValues to this function for backwards compatibility. |
| 69 | +*/ |
| 70 | +PaError PaAsio_GetAvailableBufferSizes( PaDeviceIndex device, |
| 71 | + long *minBufferSizeFrames, long *maxBufferSizeFrames, long *preferredBufferSizeFrames, long *granularity ); |
| 72 | + |
| 73 | + |
| 74 | +/** Backwards compatibility alias for PaAsio_GetAvailableBufferSizes |
| 75 | +
|
| 76 | + @see PaAsio_GetAvailableBufferSizes |
| 77 | +*/ |
| 78 | +#define PaAsio_GetAvailableLatencyValues PaAsio_GetAvailableBufferSizes |
| 79 | + |
| 80 | + |
| 81 | +/** Display the ASIO control panel for the specified device. |
| 82 | +
|
| 83 | + @param device The global index of the device whose control panel is to be displayed. |
| 84 | + @param systemSpecific On Windows, the calling application's main window handle, |
| 85 | + on Macintosh this value should be zero. |
| 86 | +*/ |
| 87 | +PaError PaAsio_ShowControlPanel( PaDeviceIndex device, void* systemSpecific ); |
| 88 | + |
| 89 | + |
| 90 | + |
| 91 | + |
| 92 | +/** Retrieve a pointer to a string containing the name of the specified |
| 93 | + input channel. The string is valid until Pa_Terminate is called. |
| 94 | +
|
| 95 | + The string will be no longer than 32 characters including the null terminator. |
| 96 | +*/ |
| 97 | +PaError PaAsio_GetInputChannelName( PaDeviceIndex device, int channelIndex, |
| 98 | + const char** channelName ); |
| 99 | + |
| 100 | + |
| 101 | +/** Retrieve a pointer to a string containing the name of the specified |
| 102 | + input channel. The string is valid until Pa_Terminate is called. |
| 103 | +
|
| 104 | + The string will be no longer than 32 characters including the null terminator. |
| 105 | +*/ |
| 106 | +PaError PaAsio_GetOutputChannelName( PaDeviceIndex device, int channelIndex, |
| 107 | + const char** channelName ); |
| 108 | + |
| 109 | + |
| 110 | +/** Set the sample rate of an open paASIO stream. |
| 111 | +
|
| 112 | + @param stream The stream to operate on. |
| 113 | + @param sampleRate The new sample rate. |
| 114 | +
|
| 115 | + Note that this function may fail if the stream is already running and the |
| 116 | + ASIO driver does not support switching the sample rate of a running stream. |
| 117 | +
|
| 118 | + Returns paIncompatibleStreamHostApi if stream is not a paASIO stream. |
| 119 | +*/ |
| 120 | +PaError PaAsio_SetStreamSampleRate( PaStream* stream, double sampleRate ); |
| 121 | + |
| 122 | + |
| 123 | +#define paAsioUseChannelSelectors (0x01) |
| 124 | + |
| 125 | +typedef struct PaAsioStreamInfo{ |
| 126 | + unsigned long size; /**< sizeof(PaAsioStreamInfo) */ |
| 127 | + PaHostApiTypeId hostApiType; /**< paASIO */ |
| 128 | + unsigned long version; /**< 1 */ |
| 129 | + |
| 130 | + unsigned long flags; |
| 131 | + |
| 132 | + /* Support for opening only specific channels of an ASIO device. |
| 133 | + If the paAsioUseChannelSelectors flag is set, channelSelectors is a |
| 134 | + pointer to an array of integers specifying the device channels to use. |
| 135 | + When used, the length of the channelSelectors array must match the |
| 136 | + corresponding channelCount parameter to Pa_OpenStream() otherwise a |
| 137 | + crash may result. |
| 138 | + The values in the selectors array must specify channels within the |
| 139 | + range of supported channels for the device or paInvalidChannelCount will |
| 140 | + result. |
| 141 | + */ |
| 142 | + int *channelSelectors; |
| 143 | +}PaAsioStreamInfo; |
| 144 | + |
| 145 | + |
| 146 | +#ifdef __cplusplus |
| 147 | +} |
| 148 | +#endif /* __cplusplus */ |
| 149 | + |
| 150 | +#endif /* PA_ASIO_H */ |
0 commit comments