3
<TITLE>The RtAudio Tutorial</TITLE>
4
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
6
<BODY BGCOLOR="#FFFFFF">
8
<a class="qindex" href="index.html">Tutorial</a> <a class="qindex" href="annotated.html">Class/Enum List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> </CENTER>
10
<!-- Generated by Doxygen 1.3.4 -->
11
<h1>RtAudio.h</h1><div class="fragment"><pre>00001 <span class="comment">/************************************************************************/</span>
12
00038 <span class="comment">/************************************************************************/</span>
14
00040 <span class="comment">// RtAudio: Version 3.0.1, 22 March 2004</span>
16
00042 <span class="preprocessor">#ifndef __RTAUDIO_H</span>
17
00043 <span class="preprocessor"></span><span class="preprocessor">#define __RTAUDIO_H</span>
18
00044 <span class="preprocessor"></span>
19
00045 <span class="preprocessor">#include "RtError.h"</span>
20
00046 <span class="preprocessor">#include <string></span>
21
00047 <span class="preprocessor">#include <vector></span>
23
00049 <span class="comment">// Operating system dependent thread functionality.</span>
24
00050 <span class="preprocessor">#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__)</span>
25
00051 <span class="preprocessor"></span><span class="preprocessor"> #include <windows.h></span>
26
00052 <span class="preprocessor"> #include <process.h></span>
28
00054 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ThreadHandle;
29
00055 <span class="keyword">typedef</span> CRITICAL_SECTION StreamMutex;
31
00057 <span class="preprocessor">#else // Various unix flavors with pthread support.</span>
32
00058 <span class="preprocessor"></span><span class="preprocessor"> #include <pthread.h></span>
34
00060 <span class="keyword">typedef</span> pthread_t ThreadHandle;
35
00061 <span class="keyword">typedef</span> pthread_mutex_t StreamMutex;
37
00063 <span class="preprocessor">#endif</span>
38
00064 <span class="preprocessor"></span>
39
00065 <span class="comment">// This global structure type is used to pass callback information</span>
40
00066 <span class="comment">// between the private RtAudio stream structure and global callback</span>
41
00067 <span class="comment">// handling functions.</span>
42
00068 <span class="keyword">struct </span>CallbackInfo {
43
00069 <span class="keywordtype">void</span> *object; <span class="comment">// Used as a "this" pointer.</span>
44
00070 ThreadHandle thread;
45
00071 <span class="keywordtype">bool</span> usingCallback;
46
00072 <span class="keywordtype">void</span> *callback;
47
00073 <span class="keywordtype">void</span> *userData;
48
00074 <span class="keywordtype">void</span> *apiInfo; <span class="comment">// void pointer for API specific callback information</span>
50
00076 <span class="comment">// Default constructor.</span>
52
00078 :object(0), usingCallback(false), callback(0),
53
00079 userData(0), apiInfo(0) {}
56
00082 <span class="comment">// Support for signed integers and floats. Audio data fed to/from</span>
57
00083 <span class="comment">// the tickStream() routine is assumed to ALWAYS be in host</span>
58
00084 <span class="comment">// byte order. The internal routines will automatically take care of</span>
59
00085 <span class="comment">// any necessary byte-swapping between the host format and the</span>
60
00086 <span class="comment">// soundcard. Thus, endian-ness is not a concern in the following</span>
61
00087 <span class="comment">// format definitions.</span>
62
00088 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> RtAudioFormat;
63
00089 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_SINT8 = 0x1;
64
00090 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_SINT16 = 0x2;
65
00091 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_SINT24 = 0x4;
66
00092 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_SINT32 = 0x8;
67
00093 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_FLOAT32 = 0x10;
68
00094 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_FLOAT64 = 0x20;
69
00096 <span class="keyword">typedef</span> int (*RtAudioCallback)(<span class="keywordtype">char</span> *buffer, <span class="keywordtype">int</span> bufferSize, <span class="keywordtype">void</span> *userData);
71
<a name="l00099"></a><a class="code" href="structRtAudioDeviceInfo.html">00099</a> <span class="keyword">struct </span><a class="code" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> {
72
<a name="l00100"></a><a class="code" href="structRtAudioDeviceInfo.html#o0">00100</a> std::string <a class="code" href="structRtAudioDeviceInfo.html#o0">name</a>;
73
<a name="l00101"></a><a class="code" href="structRtAudioDeviceInfo.html#o1">00101</a> <span class="keywordtype">bool</span> <a class="code" href="structRtAudioDeviceInfo.html#o1">probed</a>;
74
<a name="l00102"></a><a class="code" href="structRtAudioDeviceInfo.html#o2">00102</a> <span class="keywordtype">int</span> <a class="code" href="structRtAudioDeviceInfo.html#o2">outputChannels</a>;
75
<a name="l00103"></a><a class="code" href="structRtAudioDeviceInfo.html#o3">00103</a> <span class="keywordtype">int</span> <a class="code" href="structRtAudioDeviceInfo.html#o3">inputChannels</a>;
76
<a name="l00104"></a><a class="code" href="structRtAudioDeviceInfo.html#o4">00104</a> <span class="keywordtype">int</span> <a class="code" href="structRtAudioDeviceInfo.html#o4">duplexChannels</a>;
77
<a name="l00105"></a><a class="code" href="structRtAudioDeviceInfo.html#o5">00105</a> <span class="keywordtype">bool</span> <a class="code" href="structRtAudioDeviceInfo.html#o5">isDefault</a>;
78
<a name="l00106"></a><a class="code" href="structRtAudioDeviceInfo.html#o6">00106</a> std::vector<int> <a class="code" href="structRtAudioDeviceInfo.html#o6">sampleRates</a>;
79
<a name="l00107"></a><a class="code" href="structRtAudioDeviceInfo.html#o7">00107</a> RtAudioFormat <a class="code" href="structRtAudioDeviceInfo.html#o7">nativeFormats</a>;
80
00109 <span class="comment">// Default constructor.</span>
81
00110 <a class="code" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a>()
82
00111 :<a class="code" href="structRtAudioDeviceInfo.html#o1">probed</a>(false), <a class="code" href="structRtAudioDeviceInfo.html#o2">outputChannels</a>(0), <a class="code" href="structRtAudioDeviceInfo.html#o3">inputChannels</a>(0),
83
00112 <a class="code" href="structRtAudioDeviceInfo.html#o4">duplexChannels</a>(0), <a class="code" href="structRtAudioDeviceInfo.html#o5">isDefault</a>(false), <a class="code" href="structRtAudioDeviceInfo.html#o7">nativeFormats</a>(0) {}
86
00115 <span class="comment">// **************************************************************** //</span>
87
00116 <span class="comment">//</span>
88
00117 <span class="comment">// RtApi class declaration.</span>
89
00118 <span class="comment">//</span>
90
00119 <span class="comment">// Note that RtApi is an abstract base class and cannot be</span>
91
00120 <span class="comment">// explicitly instantiated. The class RtAudio will create an</span>
92
00121 <span class="comment">// instance of an RtApi subclass (RtApiOss, RtApiAlsa,</span>
93
00122 <span class="comment">// RtApiJack, RtApiCore, RtApiAl, RtApiDs, or RtApiAsio).</span>
94
00123 <span class="comment">//</span>
95
00124 <span class="comment">// **************************************************************** //</span>
97
00126 <span class="keyword">class </span>RtApi
99
00128 <span class="keyword">public</span>:
102
00131 <span class="keyword">virtual</span> ~RtApi();
103
00132 <span class="keywordtype">void</span> openStream( <span class="keywordtype">int</span> outputDevice, <span class="keywordtype">int</span> outputChannels,
104
00133 <span class="keywordtype">int</span> inputDevice, <span class="keywordtype">int</span> inputChannels,
105
00134 RtAudioFormat format, <span class="keywordtype">int</span> sampleRate,
106
00135 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
107
00136 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData ) = 0;
108
00137 <span class="keyword">virtual</span> <span class="keywordtype">void</span> cancelStreamCallback() = 0;
109
00138 <span class="keywordtype">int</span> getDeviceCount(<span class="keywordtype">void</span>);
110
00139 <a class="code" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> getDeviceInfo( <span class="keywordtype">int</span> device );
111
00140 <span class="keywordtype">char</span> * <span class="keyword">const</span> getStreamBuffer();
112
00141 <span class="keyword">virtual</span> <span class="keywordtype">void</span> tickStream() = 0;
113
00142 <span class="keyword">virtual</span> <span class="keywordtype">void</span> closeStream();
114
00143 <span class="keyword">virtual</span> <span class="keywordtype">void</span> startStream() = 0;
115
00144 <span class="keyword">virtual</span> <span class="keywordtype">void</span> stopStream() = 0;
116
00145 <span class="keyword">virtual</span> <span class="keywordtype">void</span> abortStream() = 0;
118
00147 <span class="keyword">protected</span>:
120
00149 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MAX_SAMPLE_RATES;
121
00150 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> SAMPLE_RATES[];
123
00152 <span class="keyword">enum</span> { FAILURE, SUCCESS };
125
00154 <span class="keyword">enum</span> StreamMode {
129
00158 UNINITIALIZED = -75
132
00161 <span class="keyword">enum</span> StreamState {
133
00162 STREAM_STOPPED,
137
00166 <span class="comment">// A protected structure for audio streams.</span>
138
00167 <span class="keyword">struct </span>RtApiStream {
139
00168 <span class="keywordtype">int</span> device[2]; <span class="comment">// Playback and record, respectively.</span>
140
00169 <span class="keywordtype">void</span> *apiHandle; <span class="comment">// void pointer for API specific stream handle information</span>
141
00170 StreamMode mode; <span class="comment">// OUTPUT, INPUT, or DUPLEX.</span>
142
00171 StreamState state; <span class="comment">// STOPPED or RUNNING</span>
143
00172 <span class="keywordtype">char</span> *userBuffer;
144
00173 <span class="keywordtype">char</span> *deviceBuffer;
145
00174 <span class="keywordtype">bool</span> doConvertBuffer[2]; <span class="comment">// Playback and record, respectively.</span>
146
00175 <span class="keywordtype">bool</span> deInterleave[2]; <span class="comment">// Playback and record, respectively.</span>
147
00176 <span class="keywordtype">bool</span> doByteSwap[2]; <span class="comment">// Playback and record, respectively.</span>
148
00177 <span class="keywordtype">int</span> sampleRate;
149
00178 <span class="keywordtype">int</span> bufferSize;
150
00179 <span class="keywordtype">int</span> nBuffers;
151
00180 <span class="keywordtype">int</span> nUserChannels[2]; <span class="comment">// Playback and record, respectively.</span>
152
00181 <span class="keywordtype">int</span> nDeviceChannels[2]; <span class="comment">// Playback and record channels, respectively.</span>
153
00182 RtAudioFormat userFormat;
154
00183 RtAudioFormat deviceFormat[2]; <span class="comment">// Playback and record, respectively.</span>
155
00184 StreamMutex mutex;
156
00185 CallbackInfo callbackInfo;
159
00188 :apiHandle(0), userBuffer(0), deviceBuffer(0) {}
160
00189 <span class="comment">// mode(UNINITIALIZED), state(STREAM_STOPPED),</span>
163
00192 <span class="comment">// A protected device structure for audio devices.</span>
164
00193 <span class="keyword">struct </span>RtApiDevice {
165
00194 std::string name;
166
00195 <span class="keywordtype">bool</span> probed;
167
00196 <span class="keywordtype">void</span> *apiDeviceId; <span class="comment">// void pointer for API specific device information</span>
168
00197 <span class="keywordtype">int</span> maxOutputChannels;
169
00198 <span class="keywordtype">int</span> maxInputChannels;
170
00199 <span class="keywordtype">int</span> maxDuplexChannels;
171
00200 <span class="keywordtype">int</span> minOutputChannels;
172
00201 <span class="keywordtype">int</span> minInputChannels;
173
00202 <span class="keywordtype">int</span> minDuplexChannels;
174
00203 <span class="keywordtype">bool</span> hasDuplexSupport;
175
00204 <span class="keywordtype">bool</span> isDefault;
176
00205 std::vector<int> sampleRates;
177
00206 RtAudioFormat nativeFormats;
178
00208 <span class="comment">// Default constructor.</span>
180
00210 :probed(false), apiDeviceId(0), maxOutputChannels(0), maxInputChannels(0),
181
00211 maxDuplexChannels(0), minOutputChannels(0), minInputChannels(0),
182
00212 minDuplexChannels(0), isDefault(false), nativeFormats(0) {}
185
00215 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">short</span> Int16;
186
00216 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">int</span> Int32;
187
00217 <span class="keyword">typedef</span> <span class="keywordtype">float</span> Float32;
188
00218 <span class="keyword">typedef</span> <span class="keywordtype">double</span> Float64;
190
00220 <span class="keywordtype">char</span> message_[256];
191
00221 <span class="keywordtype">int</span> nDevices_;
192
00222 std::vector<RtApiDevice> devices_;
193
00223 RtApiStream stream_;
195
00229 <span class="keyword">virtual</span> <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>) = 0;
197
00239 <span class="keyword">virtual</span> <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
199
00249 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
200
00250 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
201
00251 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
203
00257 <span class="keyword">virtual</span> <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>);
205
00263 <span class="keyword">virtual</span> <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>);
207
00266 <span class="keywordtype">void</span> clearDeviceInfo( RtApiDevice *info );
209
00269 <span class="keywordtype">void</span> clearStreamInfo();
211
00272 <span class="keywordtype">void</span> error( RtError::Type type );
213
00278 <span class="keywordtype">void</span> verifyStream();
215
00284 <span class="keywordtype">void</span> convertStreamBuffer( StreamMode mode );
217
00287 <span class="keywordtype">void</span> byteSwapBuffer( <span class="keywordtype">char</span> *buffer, <span class="keywordtype">int</span> samples, RtAudioFormat format );
219
00290 <span class="keywordtype">int</span> formatBytes( RtAudioFormat format );
223
00294 <span class="comment">// **************************************************************** //</span>
224
00295 <span class="comment">//</span>
225
00296 <span class="comment">// RtAudio class declaration.</span>
226
00297 <span class="comment">//</span>
227
00298 <span class="comment">// RtAudio is a "controller" used to select an available audio i/o</span>
228
00299 <span class="comment">// interface. It presents a common API for the user to call but all</span>
229
00300 <span class="comment">// functionality is implemented by the class RtAudioApi and its</span>
230
00301 <span class="comment">// subclasses. RtAudio creates an instance of an RtAudioApi subclass</span>
231
00302 <span class="comment">// based on the user's API choice. If no choice is made, RtAudio</span>
232
00303 <span class="comment">// attempts to make a "logical" API selection.</span>
233
00304 <span class="comment">//</span>
234
00305 <span class="comment">// **************************************************************** //</span>
236
<a name="l00307"></a><a class="code" href="classRtAudio.html">00307</a> <span class="keyword">class </span><a class="code" href="classRtAudio.html">RtAudio</a>
238
00309 <span class="keyword">public</span>:
240
<a name="l00312"></a><a class="code" href="classRtAudio.html#w8">00312</a> <span class="keyword">enum</span> <a class="code" href="classRtAudio.html#w8">RtAudioApi</a> {
241
00313 <a class="code" href="classRtAudio.html#w8w0">UNSPECIFIED</a>,
242
00314 <a class="code" href="classRtAudio.html#w8w1">LINUX_ALSA</a>,
243
00315 <a class="code" href="classRtAudio.html#w8w2">LINUX_OSS</a>,
244
00316 <a class="code" href="classRtAudio.html#w8w3">LINUX_JACK</a>,
245
00317 <a class="code" href="classRtAudio.html#w8w4">MACOSX_CORE</a>,
246
00318 <a class="code" href="classRtAudio.html#w8w5">IRIX_AL</a>,
247
00319 <a class="code" href="classRtAudio.html#w8w6">WINDOWS_ASIO</a>,
248
00320 <a class="code" href="classRtAudio.html#w8w7">WINDOWS_DS</a>
252
00334 <a class="code" href="classRtAudio.html#a0">RtAudio</a>( RtAudioApi api=UNSPECIFIED );
255
00348 <a class="code" href="classRtAudio.html#a0">RtAudio</a>( <span class="keywordtype">int</span> outputDevice, <span class="keywordtype">int</span> outputChannels,
256
00349 <span class="keywordtype">int</span> inputDevice, <span class="keywordtype">int</span> inputChannels,
257
00350 RtAudioFormat format, <span class="keywordtype">int</span> sampleRate,
258
00351 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers, RtAudioApi api=UNSPECIFIED );
261
00358 <a class="code" href="classRtAudio.html#a2">~RtAudio</a>();
264
00387 <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a3">openStream</a>( <span class="keywordtype">int</span> outputDevice, <span class="keywordtype">int</span> outputChannels,
265
00388 <span class="keywordtype">int</span> inputDevice, <span class="keywordtype">int</span> inputChannels,
266
00389 RtAudioFormat format, <span class="keywordtype">int</span> sampleRate,
267
00390 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
270
<a name="l00412"></a><a class="code" href="classRtAudio.html#a4">00412</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a4">setStreamCallback</a>(RtAudioCallback callback, <span class="keywordtype">void</span> *userData) { rtapi_->setStreamCallback( callback, userData ); };
273
<a name="l00422"></a><a class="code" href="classRtAudio.html#a5">00422</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a5">cancelStreamCallback</a>() { rtapi_->cancelStreamCallback(); };
275
<a name="l00425"></a><a class="code" href="classRtAudio.html#a6">00425</a> <span class="keywordtype">int</span> <a class="code" href="classRtAudio.html#a6">getDeviceCount</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> rtapi_->getDeviceCount(); };
278
<a name="l00436"></a><a class="code" href="classRtAudio.html#a7">00436</a> <a class="code" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> <a class="code" href="classRtAudio.html#a7">getDeviceInfo</a>(<span class="keywordtype">int</span> device) { <span class="keywordflow">return</span> rtapi_->getDeviceInfo( device ); };
281
<a name="l00444"></a><a class="code" href="classRtAudio.html#a8">00444</a> <span class="keywordtype">char</span> * <span class="keyword">const</span> <a class="code" href="classRtAudio.html#a8">getStreamBuffer</a>() { <span class="keywordflow">return</span> rtapi_->getStreamBuffer(); };
284
<a name="l00452"></a><a class="code" href="classRtAudio.html#a9">00452</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a9">tickStream</a>() { rtapi_->tickStream(); };
287
<a name="l00459"></a><a class="code" href="classRtAudio.html#a10">00459</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a10">closeStream</a>() { rtapi_->closeStream(); };
290
<a name="l00466"></a><a class="code" href="classRtAudio.html#a11">00466</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a11">startStream</a>() { rtapi_->startStream(); };
293
<a name="l00473"></a><a class="code" href="classRtAudio.html#a12">00473</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a12">stopStream</a>() { rtapi_->stopStream(); };
296
<a name="l00480"></a><a class="code" href="classRtAudio.html#a13">00480</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a13">abortStream</a>() { rtapi_->abortStream(); };
299
00483 <span class="keyword">protected</span>:
301
00485 <span class="keywordtype">void</span> initialize( RtAudioApi api );
307
00491 <span class="comment">// RtApi Subclass prototypes.</span>
309
00493 <span class="preprocessor">#if defined(__LINUX_ALSA__)</span>
310
00494 <span class="preprocessor"></span>
311
00495 <span class="keyword">class </span>RtApiAlsa: <span class="keyword">public</span> RtApi
313
00497 <span class="keyword">public</span>:
317
00501 <span class="keywordtype">void</span> tickStream();
318
00502 <span class="keywordtype">void</span> closeStream();
319
00503 <span class="keywordtype">void</span> startStream();
320
00504 <span class="keywordtype">void</span> stopStream();
321
00505 <span class="keywordtype">void</span> abortStream();
322
00506 <span class="keywordtype">int</span> streamWillBlock();
323
00507 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
324
00508 <span class="keywordtype">void</span> cancelStreamCallback();
326
00510 <span class="keyword">private</span>:
328
00512 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
329
00513 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
330
00514 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
331
00515 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
332
00516 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
335
00519 <span class="preprocessor">#endif</span>
336
00520 <span class="preprocessor"></span>
337
00521 <span class="preprocessor">#if defined(__LINUX_JACK__)</span>
338
00522 <span class="preprocessor"></span>
339
00523 <span class="keyword">class </span>RtApiJack: <span class="keyword">public</span> RtApi
341
00525 <span class="keyword">public</span>:
345
00529 <span class="keywordtype">void</span> tickStream();
346
00530 <span class="keywordtype">void</span> closeStream();
347
00531 <span class="keywordtype">void</span> startStream();
348
00532 <span class="keywordtype">void</span> stopStream();
349
00533 <span class="keywordtype">void</span> abortStream();
350
00534 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
351
00535 <span class="keywordtype">void</span> cancelStreamCallback();
352
00536 <span class="comment">// This function is intended for internal use only. It must be</span>
353
00537 <span class="comment">// public because it is called by the internal callback handler,</span>
354
00538 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
355
00539 <span class="comment">// will most likely produce highly undesireable results!</span>
356
00540 <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> nframes );
358
00542 <span class="keyword">private</span>:
360
00544 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
361
00545 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
362
00546 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
363
00547 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
364
00548 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
367
00551 <span class="preprocessor">#endif</span>
368
00552 <span class="preprocessor"></span>
369
00553 <span class="preprocessor">#if defined(__LINUX_OSS__)</span>
370
00554 <span class="preprocessor"></span>
371
00555 <span class="keyword">class </span>RtApiOss: <span class="keyword">public</span> RtApi
373
00557 <span class="keyword">public</span>:
377
00561 <span class="keywordtype">void</span> tickStream();
378
00562 <span class="keywordtype">void</span> closeStream();
379
00563 <span class="keywordtype">void</span> startStream();
380
00564 <span class="keywordtype">void</span> stopStream();
381
00565 <span class="keywordtype">void</span> abortStream();
382
00566 <span class="keywordtype">int</span> streamWillBlock();
383
00567 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
384
00568 <span class="keywordtype">void</span> cancelStreamCallback();
386
00570 <span class="keyword">private</span>:
388
00572 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
389
00573 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
390
00574 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
391
00575 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
392
00576 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
395
00579 <span class="preprocessor">#endif</span>
396
00580 <span class="preprocessor"></span>
397
00581 <span class="preprocessor">#if defined(__MACOSX_CORE__)</span>
398
00582 <span class="preprocessor"></span>
399
00583 <span class="preprocessor">#include <CoreAudio/AudioHardware.h></span>
401
00585 <span class="keyword">class </span>RtApiCore: <span class="keyword">public</span> RtApi
403
00587 <span class="keyword">public</span>:
407
00591 <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>);
408
00592 <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>);
409
00593 <span class="keywordtype">void</span> tickStream();
410
00594 <span class="keywordtype">void</span> closeStream();
411
00595 <span class="keywordtype">void</span> startStream();
412
00596 <span class="keywordtype">void</span> stopStream();
413
00597 <span class="keywordtype">void</span> abortStream();
414
00598 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
415
00599 <span class="keywordtype">void</span> cancelStreamCallback();
417
00601 <span class="comment">// This function is intended for internal use only. It must be</span>
418
00602 <span class="comment">// public because it is called by the internal callback handler,</span>
419
00603 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
420
00604 <span class="comment">// will most likely produce highly undesireable results!</span>
421
00605 <span class="keywordtype">void</span> callbackEvent( AudioDeviceID deviceId, <span class="keywordtype">void</span> *inData, <span class="keywordtype">void</span> *outData );
423
00607 <span class="keyword">private</span>:
425
00609 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
426
00610 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
427
00611 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
428
00612 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
429
00613 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
432
00616 <span class="preprocessor">#endif</span>
433
00617 <span class="preprocessor"></span>
434
00618 <span class="preprocessor">#if defined(__WINDOWS_DS__)</span>
435
00619 <span class="preprocessor"></span>
436
00620 <span class="keyword">class </span>RtApiDs: <span class="keyword">public</span> RtApi
438
00622 <span class="keyword">public</span>:
442
00626 <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>);
443
00627 <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>);
444
00628 <span class="keywordtype">void</span> tickStream();
445
00629 <span class="keywordtype">void</span> closeStream();
446
00630 <span class="keywordtype">void</span> startStream();
447
00631 <span class="keywordtype">void</span> stopStream();
448
00632 <span class="keywordtype">void</span> abortStream();
449
00633 <span class="keywordtype">int</span> streamWillBlock();
450
00634 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
451
00635 <span class="keywordtype">void</span> cancelStreamCallback();
453
00637 <span class="keyword">private</span>:
455
00639 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
456
00640 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
457
00641 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
458
00642 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
459
00643 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
462
00646 <span class="preprocessor">#endif</span>
463
00647 <span class="preprocessor"></span>
464
00648 <span class="preprocessor">#if defined(__WINDOWS_ASIO__)</span>
465
00649 <span class="preprocessor"></span>
466
00650 <span class="keyword">class </span>RtApiAsio: <span class="keyword">public</span> RtApi
468
00652 <span class="keyword">public</span>:
472
00656 <span class="keywordtype">void</span> tickStream();
473
00657 <span class="keywordtype">void</span> closeStream();
474
00658 <span class="keywordtype">void</span> startStream();
475
00659 <span class="keywordtype">void</span> stopStream();
476
00660 <span class="keywordtype">void</span> abortStream();
477
00661 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
478
00662 <span class="keywordtype">void</span> cancelStreamCallback();
480
00664 <span class="comment">// This function is intended for internal use only. It must be</span>
481
00665 <span class="comment">// public because it is called by the internal callback handler,</span>
482
00666 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
483
00667 <span class="comment">// will most likely produce highly undesireable results!</span>
484
00668 <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">long</span> bufferIndex );
486
00670 <span class="keyword">private</span>:
488
00672 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
489
00673 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
490
00674 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
491
00675 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
492
00676 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
495
00679 <span class="preprocessor">#endif</span>
496
00680 <span class="preprocessor"></span>
497
00681 <span class="preprocessor">#if defined(__IRIX_AL__)</span>
498
00682 <span class="preprocessor"></span>
499
00683 <span class="keyword">class </span>RtApiAl: <span class="keyword">public</span> RtApi
501
00685 <span class="keyword">public</span>:
505
00689 <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>);
506
00690 <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>);
507
00691 <span class="keywordtype">void</span> tickStream();
508
00692 <span class="keywordtype">void</span> closeStream();
509
00693 <span class="keywordtype">void</span> startStream();
510
00694 <span class="keywordtype">void</span> stopStream();
511
00695 <span class="keywordtype">void</span> abortStream();
512
00696 <span class="keywordtype">int</span> streamWillBlock();
513
00697 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
514
00698 <span class="keywordtype">void</span> cancelStreamCallback();
516
00700 <span class="keyword">private</span>:
518
00702 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
519
00703 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
520
00704 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
521
00705 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
522
00706 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
525
00709 <span class="preprocessor">#endif</span>
526
00710 <span class="preprocessor"></span>
527
00711 <span class="comment">// Define the following flag to have extra information spewed to stderr.</span>
528
00712 <span class="comment">//#define __RTAUDIO_DEBUG__</span>
530
00714 <span class="preprocessor">#endif</span>
533
<table><tr><td><img src="../images/mcgill.gif" width=165></td>
534
<td>©2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
535
Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr>