You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

541 lines
36KB

  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, 11 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">// :apiHandle(0), mode(UNINITIALIZED), state(STREAM_STOPPED),</span>
  161. 00190 <span class="comment">// userBuffer(0), deviceBuffer(0) {}</span>
  162. 00191 };
  163. 00192
  164. 00193 <span class="comment">// A protected device structure for audio devices.</span>
  165. 00194 <span class="keyword">struct </span>RtApiDevice {
  166. 00195 std::string name;
  167. 00196 <span class="keywordtype">bool</span> probed;
  168. 00197 <span class="keywordtype">void</span> *apiDeviceId; <span class="comment">// void pointer for API specific device information</span>
  169. 00198 <span class="keywordtype">int</span> maxOutputChannels;
  170. 00199 <span class="keywordtype">int</span> maxInputChannels;
  171. 00200 <span class="keywordtype">int</span> maxDuplexChannels;
  172. 00201 <span class="keywordtype">int</span> minOutputChannels;
  173. 00202 <span class="keywordtype">int</span> minInputChannels;
  174. 00203 <span class="keywordtype">int</span> minDuplexChannels;
  175. 00204 <span class="keywordtype">bool</span> hasDuplexSupport;
  176. 00205 <span class="keywordtype">bool</span> isDefault;
  177. 00206 std::vector&lt;int&gt; sampleRates;
  178. 00207 RtAudioFormat nativeFormats;
  179. 00209 <span class="comment">// Default constructor.</span>
  180. 00210 RtApiDevice()
  181. 00211 :probed(false), apiDeviceId(0), maxOutputChannels(0), maxInputChannels(0),
  182. 00212 maxDuplexChannels(0), minOutputChannels(0), minInputChannels(0),
  183. 00213 minDuplexChannels(0), isDefault(false), nativeFormats(0) {}
  184. 00214 };
  185. 00215
  186. 00216 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">short</span> Int16;
  187. 00217 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">int</span> Int32;
  188. 00218 <span class="keyword">typedef</span> <span class="keywordtype">float</span> Float32;
  189. 00219 <span class="keyword">typedef</span> <span class="keywordtype">double</span> Float64;
  190. 00220
  191. 00221 <span class="keywordtype">char</span> message_[256];
  192. 00222 <span class="keywordtype">int</span> nDevices_;
  193. 00223 std::vector&lt;RtApiDevice&gt; devices_;
  194. 00224 RtApiStream stream_;
  195. 00225
  196. 00230 <span class="keyword">virtual</span> <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>) = 0;
  197. 00231
  198. 00240 <span class="keyword">virtual</span> <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
  199. 00241
  200. 00250 <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,
  201. 00251 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
  202. 00252 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
  203. 00253
  204. 00258 <span class="keyword">virtual</span> <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>);
  205. 00259
  206. 00264 <span class="keyword">virtual</span> <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>);
  207. 00265
  208. 00267 <span class="keywordtype">void</span> clearDeviceInfo( RtApiDevice *info );
  209. 00268
  210. 00270 <span class="keywordtype">void</span> clearStreamInfo();
  211. 00271
  212. 00273 <span class="keywordtype">void</span> error( RtError::Type type );
  213. 00274
  214. 00279 <span class="keywordtype">void</span> verifyStream();
  215. 00280
  216. 00285 <span class="keywordtype">void</span> convertStreamBuffer( StreamMode mode );
  217. 00286
  218. 00288 <span class="keywordtype">void</span> byteSwapBuffer( <span class="keywordtype">char</span> *buffer, <span class="keywordtype">int</span> samples, RtAudioFormat format );
  219. 00289
  220. 00291 <span class="keywordtype">int</span> formatBytes( RtAudioFormat format );
  221. 00292 };
  222. 00293
  223. 00294
  224. 00295 <span class="comment">// **************************************************************** //</span>
  225. 00296 <span class="comment">//</span>
  226. 00297 <span class="comment">// RtAudio class declaration.</span>
  227. 00298 <span class="comment">//</span>
  228. 00299 <span class="comment">// RtAudio is a "controller" used to select an available audio i/o</span>
  229. 00300 <span class="comment">// interface. It presents a common API for the user to call but all</span>
  230. 00301 <span class="comment">// functionality is implemented by the class RtAudioApi and its</span>
  231. 00302 <span class="comment">// subclasses. RtAudio creates an instance of an RtAudioApi subclass</span>
  232. 00303 <span class="comment">// based on the user's API choice. If no choice is made, RtAudio</span>
  233. 00304 <span class="comment">// attempts to make a "logical" API selection.</span>
  234. 00305 <span class="comment">//</span>
  235. 00306 <span class="comment">// **************************************************************** //</span>
  236. 00307
  237. <a name="l00308"></a><a class="code" href="classRtAudio.html">00308</a> <span class="keyword">class </span><a class="code" href="classRtAudio.html">RtAudio</a>
  238. 00309 {
  239. 00310 <span class="keyword">public</span>:
  240. 00311
  241. <a name="l00313"></a><a class="code" href="classRtAudio.html#w8">00313</a> <span class="keyword">enum</span> <a class="code" href="classRtAudio.html#w8">RtAudioApi</a> {
  242. 00314 <a class="code" href="classRtAudio.html#w8w0">UNSPECIFIED</a>,
  243. 00315 <a class="code" href="classRtAudio.html#w8w1">LINUX_ALSA</a>,
  244. 00316 <a class="code" href="classRtAudio.html#w8w2">LINUX_OSS</a>,
  245. 00317 <a class="code" href="classRtAudio.html#w8w3">LINUX_JACK</a>,
  246. 00318 <a class="code" href="classRtAudio.html#w8w4">MACOSX_CORE</a>,
  247. 00319 <a class="code" href="classRtAudio.html#w8w5">IRIX_AL</a>,
  248. 00320 <a class="code" href="classRtAudio.html#w8w6">WINDOWS_ASIO</a>,
  249. 00321 <a class="code" href="classRtAudio.html#w8w7">WINDOWS_DS</a>
  250. 00322 };
  251. 00323
  252. 00325
  253. 00335 <a class="code" href="classRtAudio.html#a0">RtAudio</a>( RtAudioApi api=UNSPECIFIED );
  254. 00336
  255. 00338
  256. 00349 <a class="code" href="classRtAudio.html#a0">RtAudio</a>( <span class="keywordtype">int</span> outputDevice, <span class="keywordtype">int</span> outputChannels,
  257. 00350 <span class="keywordtype">int</span> inputDevice, <span class="keywordtype">int</span> inputChannels,
  258. 00351 RtAudioFormat format, <span class="keywordtype">int</span> sampleRate,
  259. 00352 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers, RtAudioApi api=UNSPECIFIED );
  260. 00353
  261. 00355
  262. 00359 <a class="code" href="classRtAudio.html#a2">~RtAudio</a>();
  263. 00360
  264. 00362
  265. 00388 <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,
  266. 00389 <span class="keywordtype">int</span> inputDevice, <span class="keywordtype">int</span> inputChannels,
  267. 00390 RtAudioFormat format, <span class="keywordtype">int</span> sampleRate,
  268. 00391 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
  269. 00392
  270. 00394
  271. <a name="l00413"></a><a class="code" href="classRtAudio.html#a4">00413</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 ); };
  272. 00414
  273. 00416
  274. <a name="l00423"></a><a class="code" href="classRtAudio.html#a5">00423</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a5">cancelStreamCallback</a>() { rtapi_-&gt;cancelStreamCallback(); };
  275. 00424
  276. <a name="l00426"></a><a class="code" href="classRtAudio.html#a6">00426</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(); };
  277. 00427
  278. 00429
  279. <a name="l00437"></a><a class="code" href="classRtAudio.html#a7">00437</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 ); };
  280. 00438
  281. 00440
  282. <a name="l00445"></a><a class="code" href="classRtAudio.html#a8">00445</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(); };
  283. 00446
  284. 00448
  285. <a name="l00453"></a><a class="code" href="classRtAudio.html#a9">00453</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a9">tickStream</a>() { rtapi_-&gt;tickStream(); };
  286. 00454
  287. 00456
  288. <a name="l00460"></a><a class="code" href="classRtAudio.html#a10">00460</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a10">closeStream</a>() { rtapi_-&gt;closeStream(); };
  289. 00461
  290. 00463
  291. <a name="l00467"></a><a class="code" href="classRtAudio.html#a11">00467</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a11">startStream</a>() { rtapi_-&gt;startStream(); };
  292. 00468
  293. 00470
  294. <a name="l00474"></a><a class="code" href="classRtAudio.html#a12">00474</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a12">stopStream</a>() { rtapi_-&gt;stopStream(); };
  295. 00475
  296. 00477
  297. <a name="l00481"></a><a class="code" href="classRtAudio.html#a13">00481</a> <span class="keywordtype">void</span> <a class="code" href="classRtAudio.html#a13">abortStream</a>() { rtapi_-&gt;abortStream(); };
  298. 00482
  299. 00483
  300. 00484 <span class="keyword">protected</span>:
  301. 00485
  302. 00486 <span class="keywordtype">void</span> initialize( RtAudioApi api );
  303. 00487
  304. 00488 RtApi *rtapi_;
  305. 00489 };
  306. 00490
  307. 00491
  308. 00492 <span class="comment">// RtApi Subclass prototypes.</span>
  309. 00493
  310. 00494 <span class="preprocessor">#if defined(__LINUX_ALSA__)</span>
  311. 00495 <span class="preprocessor"></span>
  312. 00496 <span class="keyword">class </span>RtApiAlsa: <span class="keyword">public</span> RtApi
  313. 00497 {
  314. 00498 <span class="keyword">public</span>:
  315. 00499
  316. 00500 RtApiAlsa();
  317. 00501 ~RtApiAlsa();
  318. 00502 <span class="keywordtype">void</span> tickStream();
  319. 00503 <span class="keywordtype">void</span> closeStream();
  320. 00504 <span class="keywordtype">void</span> startStream();
  321. 00505 <span class="keywordtype">void</span> stopStream();
  322. 00506 <span class="keywordtype">void</span> abortStream();
  323. 00507 <span class="keywordtype">int</span> streamWillBlock();
  324. 00508 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
  325. 00509 <span class="keywordtype">void</span> cancelStreamCallback();
  326. 00510
  327. 00511 <span class="keyword">private</span>:
  328. 00512
  329. 00513 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
  330. 00514 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
  331. 00515 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
  332. 00516 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
  333. 00517 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
  334. 00518 };
  335. 00519
  336. 00520 <span class="preprocessor">#endif</span>
  337. 00521 <span class="preprocessor"></span>
  338. 00522 <span class="preprocessor">#if defined(__LINUX_JACK__)</span>
  339. 00523 <span class="preprocessor"></span>
  340. 00524 <span class="keyword">class </span>RtApiJack: <span class="keyword">public</span> RtApi
  341. 00525 {
  342. 00526 <span class="keyword">public</span>:
  343. 00527
  344. 00528 RtApiJack();
  345. 00529 ~RtApiJack();
  346. 00530 <span class="keywordtype">void</span> tickStream();
  347. 00531 <span class="keywordtype">void</span> closeStream();
  348. 00532 <span class="keywordtype">void</span> startStream();
  349. 00533 <span class="keywordtype">void</span> stopStream();
  350. 00534 <span class="keywordtype">void</span> abortStream();
  351. 00535 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
  352. 00536 <span class="keywordtype">void</span> cancelStreamCallback();
  353. 00537 <span class="comment">// This function is intended for internal use only. It must be</span>
  354. 00538 <span class="comment">// public because it is called by the internal callback handler,</span>
  355. 00539 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
  356. 00540 <span class="comment">// will most likely produce highly undesireable results!</span>
  357. 00541 <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> nframes );
  358. 00542
  359. 00543 <span class="keyword">private</span>:
  360. 00544
  361. 00545 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
  362. 00546 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
  363. 00547 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
  364. 00548 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
  365. 00549 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
  366. 00550 };
  367. 00551
  368. 00552 <span class="preprocessor">#endif</span>
  369. 00553 <span class="preprocessor"></span>
  370. 00554 <span class="preprocessor">#if defined(__LINUX_OSS__)</span>
  371. 00555 <span class="preprocessor"></span>
  372. 00556 <span class="keyword">class </span>RtApiOss: <span class="keyword">public</span> RtApi
  373. 00557 {
  374. 00558 <span class="keyword">public</span>:
  375. 00559
  376. 00560 RtApiOss();
  377. 00561 ~RtApiOss();
  378. 00562 <span class="keywordtype">void</span> tickStream();
  379. 00563 <span class="keywordtype">void</span> closeStream();
  380. 00564 <span class="keywordtype">void</span> startStream();
  381. 00565 <span class="keywordtype">void</span> stopStream();
  382. 00566 <span class="keywordtype">void</span> abortStream();
  383. 00567 <span class="keywordtype">int</span> streamWillBlock();
  384. 00568 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
  385. 00569 <span class="keywordtype">void</span> cancelStreamCallback();
  386. 00570
  387. 00571 <span class="keyword">private</span>:
  388. 00572
  389. 00573 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
  390. 00574 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
  391. 00575 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
  392. 00576 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
  393. 00577 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
  394. 00578 };
  395. 00579
  396. 00580 <span class="preprocessor">#endif</span>
  397. 00581 <span class="preprocessor"></span>
  398. 00582 <span class="preprocessor">#if defined(__MACOSX_CORE__)</span>
  399. 00583 <span class="preprocessor"></span>
  400. 00584 <span class="preprocessor">#include &lt;CoreAudio/AudioHardware.h&gt;</span>
  401. 00585
  402. 00586 <span class="keyword">class </span>RtApiCore: <span class="keyword">public</span> RtApi
  403. 00587 {
  404. 00588 <span class="keyword">public</span>:
  405. 00589
  406. 00590 RtApiCore();
  407. 00591 ~RtApiCore();
  408. 00592 <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>);
  409. 00593 <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>);
  410. 00594 <span class="keywordtype">void</span> tickStream();
  411. 00595 <span class="keywordtype">void</span> closeStream();
  412. 00596 <span class="keywordtype">void</span> startStream();
  413. 00597 <span class="keywordtype">void</span> stopStream();
  414. 00598 <span class="keywordtype">void</span> abortStream();
  415. 00599 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
  416. 00600 <span class="keywordtype">void</span> cancelStreamCallback();
  417. 00601
  418. 00602 <span class="comment">// This function is intended for internal use only. It must be</span>
  419. 00603 <span class="comment">// public because it is called by the internal callback handler,</span>
  420. 00604 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
  421. 00605 <span class="comment">// will most likely produce highly undesireable results!</span>
  422. 00606 <span class="keywordtype">void</span> callbackEvent( AudioDeviceID deviceId, <span class="keywordtype">void</span> *inData, <span class="keywordtype">void</span> *outData );
  423. 00607
  424. 00608 <span class="keyword">private</span>:
  425. 00609
  426. 00610 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
  427. 00611 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
  428. 00612 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
  429. 00613 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
  430. 00614 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
  431. 00615 };
  432. 00616
  433. 00617 <span class="preprocessor">#endif</span>
  434. 00618 <span class="preprocessor"></span>
  435. 00619 <span class="preprocessor">#if defined(__WINDOWS_DS__)</span>
  436. 00620 <span class="preprocessor"></span>
  437. 00621 <span class="keyword">class </span>RtApiDs: <span class="keyword">public</span> RtApi
  438. 00622 {
  439. 00623 <span class="keyword">public</span>:
  440. 00624
  441. 00625 RtApiDs();
  442. 00626 ~RtApiDs();
  443. 00627 <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>);
  444. 00628 <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>);
  445. 00629 <span class="keywordtype">void</span> tickStream();
  446. 00630 <span class="keywordtype">void</span> closeStream();
  447. 00631 <span class="keywordtype">void</span> startStream();
  448. 00632 <span class="keywordtype">void</span> stopStream();
  449. 00633 <span class="keywordtype">void</span> abortStream();
  450. 00634 <span class="keywordtype">int</span> streamWillBlock();
  451. 00635 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
  452. 00636 <span class="keywordtype">void</span> cancelStreamCallback();
  453. 00637
  454. 00638 <span class="keyword">private</span>:
  455. 00639
  456. 00640 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
  457. 00641 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
  458. 00642 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
  459. 00643 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
  460. 00644 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
  461. 00645 };
  462. 00646
  463. 00647 <span class="preprocessor">#endif</span>
  464. 00648 <span class="preprocessor"></span>
  465. 00649 <span class="preprocessor">#if defined(__WINDOWS_ASIO__)</span>
  466. 00650 <span class="preprocessor"></span>
  467. 00651 <span class="keyword">class </span>RtApiAsio: <span class="keyword">public</span> RtApi
  468. 00652 {
  469. 00653 <span class="keyword">public</span>:
  470. 00654
  471. 00655 RtApiAsio();
  472. 00656 ~RtApiAsio();
  473. 00657 <span class="keywordtype">void</span> tickStream();
  474. 00658 <span class="keywordtype">void</span> closeStream();
  475. 00659 <span class="keywordtype">void</span> startStream();
  476. 00660 <span class="keywordtype">void</span> stopStream();
  477. 00661 <span class="keywordtype">void</span> abortStream();
  478. 00662 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
  479. 00663 <span class="keywordtype">void</span> cancelStreamCallback();
  480. 00664
  481. 00665 <span class="comment">// This function is intended for internal use only. It must be</span>
  482. 00666 <span class="comment">// public because it is called by the internal callback handler,</span>
  483. 00667 <span class="comment">// which is not a member of RtAudio. External use of this function</span>
  484. 00668 <span class="comment">// will most likely produce highly undesireable results!</span>
  485. 00669 <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">long</span> bufferIndex );
  486. 00670
  487. 00671 <span class="keyword">private</span>:
  488. 00672
  489. 00673 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
  490. 00674 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
  491. 00675 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
  492. 00676 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
  493. 00677 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
  494. 00678 };
  495. 00679
  496. 00680 <span class="preprocessor">#endif</span>
  497. 00681 <span class="preprocessor"></span>
  498. 00682 <span class="preprocessor">#if defined(__IRIX_AL__)</span>
  499. 00683 <span class="preprocessor"></span>
  500. 00684 <span class="keyword">class </span>RtApiAl: <span class="keyword">public</span> RtApi
  501. 00685 {
  502. 00686 <span class="keyword">public</span>:
  503. 00687
  504. 00688 RtApiAl();
  505. 00689 ~RtApiAl();
  506. 00690 <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>);
  507. 00691 <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>);
  508. 00692 <span class="keywordtype">void</span> tickStream();
  509. 00693 <span class="keywordtype">void</span> closeStream();
  510. 00694 <span class="keywordtype">void</span> startStream();
  511. 00695 <span class="keywordtype">void</span> stopStream();
  512. 00696 <span class="keywordtype">void</span> abortStream();
  513. 00697 <span class="keywordtype">int</span> streamWillBlock();
  514. 00698 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData );
  515. 00699 <span class="keywordtype">void</span> cancelStreamCallback();
  516. 00700
  517. 00701 <span class="keyword">private</span>:
  518. 00702
  519. 00703 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>);
  520. 00704 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info );
  521. 00705 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels,
  522. 00706 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format,
  523. 00707 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers );
  524. 00708 };
  525. 00709
  526. 00710 <span class="preprocessor">#endif</span>
  527. 00711 <span class="preprocessor"></span>
  528. 00712 <span class="comment">// Define the following flag to have extra information spewed to stderr.</span>
  529. 00713 <span class="comment">//#define __RTAUDIO_DEBUG__</span>
  530. 00714
  531. 00715 <span class="preprocessor">#endif</span>
  532. </pre></div><HR>
  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. </BODY>
  538. </HTML>