~ubuntu-branches/ubuntu/gutsy/audacity/gutsy-backports

« back to all changes in this revision

Viewing changes to lib-src/rtaudio/doc/html/RtAudio_8h-source.html

  • Committer: Bazaar Package Importer
  • Author(s): John Dong
  • Date: 2008-02-18 21:58:19 UTC
  • mfrom: (13.1.2 hardy)
  • Revision ID: james.westby@ubuntu.com-20080218215819-tmbcf1rx238r8gdv
Tags: 1.3.4-1.1ubuntu1~gutsy1
Automated backport upload; no source changes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<HTML>
2
 
<HEAD>
3
 
<TITLE>The RtAudio Tutorial</TITLE>
4
 
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
5
 
</HEAD>
6
 
<BODY BGCOLOR="#FFFFFF">
7
 
<CENTER>
8
 
<a class="qindex" href="index.html">Tutorial</a> &nbsp; <a class="qindex" href="annotated.html">Class/Enum List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </CENTER>
9
 
<HR>
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>
13
 
00039 
14
 
00040 <span class="comment">// RtAudio: Version 3.0.1, 22 March 2004</span>
15
 
00041 
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 &lt;string&gt;</span>
21
 
00047 <span class="preprocessor">#include &lt;vector&gt;</span>
22
 
00048 
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 &lt;windows.h&gt;</span>
26
 
00052 <span class="preprocessor">  #include &lt;process.h&gt;</span>
27
 
00053 
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;
30
 
00056 
31
 
00057 <span class="preprocessor">#else // Various unix flavors with pthread support.</span>
32
 
00058 <span class="preprocessor"></span><span class="preprocessor">  #include &lt;pthread.h&gt;</span>
33
 
00059 
34
 
00060   <span class="keyword">typedef</span> pthread_t ThreadHandle;
35
 
00061   <span class="keyword">typedef</span> pthread_mutex_t StreamMutex;
36
 
00062 
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>
49
 
00075 
50
 
00076   <span class="comment">// Default constructor.</span>
51
 
00077   CallbackInfo()
52
 
00078     :object(0), usingCallback(false), callback(0),
53
 
00079      userData(0), apiInfo(0) {}
54
 
00080 };
55
 
00081 
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);
70
 
00097 
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&lt;int&gt; <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) {}
84
 
00113 };
85
 
00114 
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>
96
 
00125 
97
 
00126 <span class="keyword">class </span>RtApi
98
 
00127 {
99
 
00128 <span class="keyword">public</span>:
100
 
00129 
101
 
00130   RtApi();
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;
117
 
00146 
118
 
00147 <span class="keyword">protected</span>:
119
 
00148 
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[];
122
 
00151 
123
 
00152   <span class="keyword">enum</span> { FAILURE, SUCCESS };
124
 
00153 
125
 
00154   <span class="keyword">enum</span> StreamMode {
126
 
00155     OUTPUT,
127
 
00156     INPUT,
128
 
00157     DUPLEX,
129
 
00158     UNINITIALIZED = -75
130
 
00159   };
131
 
00160 
132
 
00161   <span class="keyword">enum</span> StreamState {
133
 
00162     STREAM_STOPPED,
134
 
00163     STREAM_RUNNING
135
 
00164   };
136
 
00165 
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;
157
 
00186 
158
 
00187     RtApiStream()
159
 
00188       :apiHandle(0), userBuffer(0), deviceBuffer(0) {}
160
 
00189     <span class="comment">//      mode(UNINITIALIZED), state(STREAM_STOPPED),</span>
161
 
00190   };
162
 
00191 
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&lt;int&gt; sampleRates; 
177
 
00206     RtAudioFormat nativeFormats;  
178
 
00208     <span class="comment">// Default constructor.</span>
179
 
00209     RtApiDevice()
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) {}
183
 
00213   };
184
 
00214 
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;
189
 
00219 
190
 
00220   <span class="keywordtype">char</span> message_[256];
191
 
00221   <span class="keywordtype">int</span> nDevices_;
192
 
00222   std::vector&lt;RtApiDevice&gt; devices_;
193
 
00223   RtApiStream stream_;
194
 
00224 
195
 
00229   <span class="keyword">virtual</span> <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>) = 0;
196
 
00230 
197
 
00239   <span class="keyword">virtual</span> <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
198
 
00240 
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 );
202
 
00252 
203
 
00257   <span class="keyword">virtual</span> <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>);
204
 
00258 
205
 
00263   <span class="keyword">virtual</span> <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>);
206
 
00264 
207
 
00266   <span class="keywordtype">void</span> clearDeviceInfo( RtApiDevice *info );
208
 
00267 
209
 
00269   <span class="keywordtype">void</span> clearStreamInfo();
210
 
00270 
211
 
00272   <span class="keywordtype">void</span> error( RtError::Type type );
212
 
00273 
213
 
00278   <span class="keywordtype">void</span> verifyStream();
214
 
00279 
215
 
00284   <span class="keywordtype">void</span> convertStreamBuffer( StreamMode mode );
216
 
00285 
217
 
00287   <span class="keywordtype">void</span> byteSwapBuffer( <span class="keywordtype">char</span> *buffer, <span class="keywordtype">int</span> samples, RtAudioFormat format );
218
 
00288 
219
 
00290   <span class="keywordtype">int</span> formatBytes( RtAudioFormat format );
220
 
00291 };
221
 
00292 
222
 
00293 
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>
235
 
00306 
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>
237
 
00308 {
238
 
00309 <span class="keyword">public</span>:
239
 
00310 
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>      
249
 
00321   };
250
 
00322 
251
 
00324 
252
 
00334   <a class="code" href="classRtAudio.html#a0">RtAudio</a>( RtAudioApi api=UNSPECIFIED );
253
 
00335 
254
 
00337 
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 );
259
 
00352 
260
 
00354 
261
 
00358   <a class="code" href="classRtAudio.html#a2">~RtAudio</a>();
262
 
00359 
263
 
00361 
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 );
268
 
00391 
269
 
00393 
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_-&gt;setStreamCallback( callback, userData ); };
271
 
00413 
272
 
00415 
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_-&gt;cancelStreamCallback(); };
274
 
00423 
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_-&gt;getDeviceCount(); };
276
 
00426 
277
 
00428 
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_-&gt;getDeviceInfo( device ); };
279
 
00437 
280
 
00439 
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_-&gt;getStreamBuffer(); };
282
 
00445 
283
 
00447 
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_-&gt;tickStream(); };
285
 
00453 
286
 
00455 
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_-&gt;closeStream(); };
288
 
00460 
289
 
00462 
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_-&gt;startStream(); };
291
 
00467 
292
 
00469 
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_-&gt;stopStream(); };
294
 
00474 
295
 
00476 
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_-&gt;abortStream(); };
297
 
00481 
298
 
00482 
299
 
00483  <span class="keyword">protected</span>:
300
 
00484 
301
 
00485   <span class="keywordtype">void</span> initialize( RtAudioApi api );
302
 
00486 
303
 
00487   RtApi *rtapi_;
304
 
00488 };
305
 
00489 
306
 
00490 
307
 
00491 <span class="comment">// RtApi Subclass prototypes.</span>
308
 
00492 
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
312
 
00496 {
313
 
00497 <span class="keyword">public</span>:
314
 
00498 
315
 
00499   RtApiAlsa();
316
 
00500   ~RtApiAlsa();
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();
325
 
00509 
326
 
00510   <span class="keyword">private</span>:
327
 
00511 
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 );
333
 
00517 };
334
 
00518 
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
340
 
00524 {
341
 
00525 <span class="keyword">public</span>:
342
 
00526 
343
 
00527   RtApiJack();
344
 
00528   ~RtApiJack();
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 );
357
 
00541 
358
 
00542   <span class="keyword">private</span>:
359
 
00543 
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 );
365
 
00549 };
366
 
00550 
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
372
 
00556 {
373
 
00557 <span class="keyword">public</span>:
374
 
00558 
375
 
00559   RtApiOss();
376
 
00560   ~RtApiOss();
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();
385
 
00569 
386
 
00570   <span class="keyword">private</span>:
387
 
00571 
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 );
393
 
00577 };
394
 
00578 
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 &lt;CoreAudio/AudioHardware.h&gt;</span>
400
 
00584 
401
 
00585 <span class="keyword">class </span>RtApiCore: <span class="keyword">public</span> RtApi
402
 
00586 {
403
 
00587 <span class="keyword">public</span>:
404
 
00588 
405
 
00589   RtApiCore();
406
 
00590   ~RtApiCore();
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();
416
 
00600 
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 );
422
 
00606 
423
 
00607   <span class="keyword">private</span>:
424
 
00608 
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 );
430
 
00614 };
431
 
00615 
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
437
 
00621 {
438
 
00622 <span class="keyword">public</span>:
439
 
00623 
440
 
00624   RtApiDs();
441
 
00625   ~RtApiDs();
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();
452
 
00636 
453
 
00637   <span class="keyword">private</span>:
454
 
00638 
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 );
460
 
00644 };
461
 
00645 
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
467
 
00651 {
468
 
00652 <span class="keyword">public</span>:
469
 
00653 
470
 
00654   RtApiAsio();
471
 
00655   ~RtApiAsio();
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();
479
 
00663 
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 );
485
 
00669 
486
 
00670   <span class="keyword">private</span>:
487
 
00671 
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 );
493
 
00677 };
494
 
00678 
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
500
 
00684 {
501
 
00685 <span class="keyword">public</span>:
502
 
00686 
503
 
00687   RtApiAl();
504
 
00688   ~RtApiAl();
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();
515
 
00699 
516
 
00700   <span class="keyword">private</span>:
517
 
00701 
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 );
523
 
00707 };
524
 
00708 
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>
529
 
00713 
530
 
00714 <span class="preprocessor">#endif</span>
531
 
</pre></div><HR>
532
 
 
533
 
<table><tr><td><img src="../images/mcgill.gif" width=165></td>
534
 
  <td>&copy;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>
536
 
</table>
537
 
 
538
 
</BODY>
539
 
</HTML>