diff options
| author | Gary Scavone <gary@music.mcgill.ca> | 2013-10-11 00:00:56 +0200 |
|---|---|---|
| committer | Stephen Sinclair <sinclair@music.mcgill.ca> | 2013-10-11 00:00:56 +0200 |
| commit | 830706e4368bb27d4c7d8138fbce4e393cedcd2f (patch) | |
| tree | f549855bc7641bfb77728111a9ec11e67c46390b /doc/html/RtAudio_8h-source.html | |
| parent | 7ab3b73d98f92e07d6915e6620a7fa54f6164586 (diff) | |
Release 3.0 tarball3.0
Diffstat (limited to 'doc/html/RtAudio_8h-source.html')
| -rw-r--r-- | doc/html/RtAudio_8h-source.html | 823 |
1 files changed, 514 insertions, 309 deletions
diff --git a/doc/html/RtAudio_8h-source.html b/doc/html/RtAudio_8h-source.html index ffe382d..7c78353 100644 --- a/doc/html/RtAudio_8h-source.html +++ b/doc/html/RtAudio_8h-source.html @@ -7,328 +7,533 @@ <CENTER> <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> <HR> -<!-- Generated by Doxygen 1.2.8.1 --> -<h1>RtAudio.h</h1><div class="fragment"><pre>00001 <font class="comment">/************************************************************************/</font> -00038 <font class="comment">/************************************************************************/</font> +<!-- Generated by Doxygen 1.3.4 --> +<h1>RtAudio.h</h1><div class="fragment"><pre>00001 <span class="comment">/************************************************************************/</span> +00038 <span class="comment">/************************************************************************/</span> 00039 -00040 <font class="preprocessor">#if !defined(__RTAUDIO_H)</font> -00041 <font class="preprocessor"></font><font class="preprocessor">#define __RTAUDIO_H</font> -00042 <font class="preprocessor"></font> -00043 <font class="preprocessor">#include <map></font> -00044 -00045 <font class="preprocessor">#if defined(__LINUX_ALSA__)</font> -00046 <font class="preprocessor"></font><font class="preprocessor"> #include <alsa/asoundlib.h></font> -00047 <font class="preprocessor"> #include <pthread.h></font> -00048 <font class="preprocessor"> #include <unistd.h></font> -00049 -00050 <font class="keyword">typedef</font> snd_pcm_t *AUDIO_HANDLE; -00051 <font class="keyword">typedef</font> <font class="keywordtype">int</font> DEVICE_ID; -00052 <font class="keyword">typedef</font> pthread_t THREAD_HANDLE; -00053 <font class="keyword">typedef</font> pthread_mutex_t MUTEX; -00054 -00055 <font class="preprocessor">#elif defined(__LINUX_OSS__)</font> -00056 <font class="preprocessor"></font><font class="preprocessor"> #include <pthread.h></font> -00057 <font class="preprocessor"> #include <unistd.h></font> -00058 -00059 <font class="keyword">typedef</font> <font class="keywordtype">int</font> AUDIO_HANDLE; -00060 <font class="keyword">typedef</font> <font class="keywordtype">int</font> DEVICE_ID; -00061 <font class="keyword">typedef</font> pthread_t THREAD_HANDLE; -00062 <font class="keyword">typedef</font> pthread_mutex_t MUTEX; -00063 -00064 <font class="preprocessor">#elif defined(__WINDOWS_DS__)</font> -00065 <font class="preprocessor"></font><font class="preprocessor"> #include <windows.h></font> -00066 <font class="preprocessor"> #include <process.h></font> -00067 -00068 <font class="comment">// The following struct is used to hold the extra variables</font> -00069 <font class="comment">// specific to the DirectSound implementation.</font> -00070 <font class="keyword">typedef</font> <font class="keyword">struct </font>{ -00071 <font class="keywordtype">void</font> * object; -00072 <font class="keywordtype">void</font> * buffer; -00073 UINT bufferPointer; -00074 } AUDIO_HANDLE; +00040 <span class="comment">// RtAudio: Version 3.0, 11 March 2004</span> +00041 +00042 <span class="preprocessor">#ifndef __RTAUDIO_H</span> +00043 <span class="preprocessor"></span><span class="preprocessor">#define __RTAUDIO_H</span> +00044 <span class="preprocessor"></span> +00045 <span class="preprocessor">#include "RtError.h"</span> +00046 <span class="preprocessor">#include <string></span> +00047 <span class="preprocessor">#include <vector></span> +00048 +00049 <span class="comment">// Operating system dependent thread functionality.</span> +00050 <span class="preprocessor">#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__)</span> +00051 <span class="preprocessor"></span><span class="preprocessor"> #include <windows.h></span> +00052 <span class="preprocessor"> #include <process.h></span> +00053 +00054 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ThreadHandle; +00055 <span class="keyword">typedef</span> CRITICAL_SECTION StreamMutex; +00056 +00057 <span class="preprocessor">#else // Various unix flavors with pthread support.</span> +00058 <span class="preprocessor"></span><span class="preprocessor"> #include <pthread.h></span> +00059 +00060 <span class="keyword">typedef</span> pthread_t ThreadHandle; +00061 <span class="keyword">typedef</span> pthread_mutex_t StreamMutex; +00062 +00063 <span class="preprocessor">#endif</span> +00064 <span class="preprocessor"></span> +00065 <span class="comment">// This global structure type is used to pass callback information</span> +00066 <span class="comment">// between the private RtAudio stream structure and global callback</span> +00067 <span class="comment">// handling functions.</span> +00068 <span class="keyword">struct </span>CallbackInfo { +00069 <span class="keywordtype">void</span> *object; <span class="comment">// Used as a "this" pointer.</span> +00070 ThreadHandle thread; +00071 <span class="keywordtype">bool</span> usingCallback; +00072 <span class="keywordtype">void</span> *callback; +00073 <span class="keywordtype">void</span> *userData; +00074 <span class="keywordtype">void</span> *apiInfo; <span class="comment">// void pointer for API specific callback information</span> 00075 -00076 <font class="keyword">typedef</font> LPGUID DEVICE_ID; -00077 <font class="keyword">typedef</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> THREAD_HANDLE; -00078 <font class="keyword">typedef</font> CRITICAL_SECTION MUTEX; -00079 -00080 <font class="preprocessor">#elif defined(__WINDOWS_ASIO__)</font> -00081 <font class="preprocessor"></font><font class="preprocessor"> #include <windows.h></font> -00082 <font class="preprocessor"> #include <process.h></font> -00083 -00084 <font class="keyword">typedef</font> <font class="keywordtype">int</font> AUDIO_HANDLE; -00085 <font class="keyword">typedef</font> <font class="keywordtype">int</font> DEVICE_ID; -00086 <font class="keyword">typedef</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> THREAD_HANDLE; -00087 <font class="keyword">typedef</font> CRITICAL_SECTION MUTEX; -00088 -00089 <font class="preprocessor">#elif defined(__IRIX_AL__)</font> -00090 <font class="preprocessor"></font><font class="preprocessor"> #include <dmedia/audio.h></font> -00091 <font class="preprocessor"> #include <pthread.h></font> -00092 <font class="preprocessor"> #include <unistd.h></font> -00093 -00094 <font class="keyword">typedef</font> ALport AUDIO_HANDLE; -00095 <font class="keyword">typedef</font> <font class="keywordtype">long</font> DEVICE_ID; -00096 <font class="keyword">typedef</font> pthread_t THREAD_HANDLE; -00097 <font class="keyword">typedef</font> pthread_mutex_t MUTEX; -00098 -00099 <font class="preprocessor">#elif defined(__MACOSX_CORE__)</font> -00100 <font class="preprocessor"></font> -00101 <font class="preprocessor"> #include <CoreAudio/AudioHardware.h></font> -00102 <font class="preprocessor"> #include <pthread.h></font> -00103 -00104 <font class="keyword">typedef</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> AUDIO_HANDLE; -00105 <font class="keyword">typedef</font> AudioDeviceID DEVICE_ID; -00106 <font class="keyword">typedef</font> pthread_t THREAD_HANDLE; -00107 <font class="keyword">typedef</font> pthread_mutex_t MUTEX; -00108 -00109 <font class="preprocessor">#endif</font> -00110 <font class="preprocessor"></font> -00111 -00112 <font class="comment">/************************************************************************/</font> -00125 <font class="comment">/************************************************************************/</font> -00126 -00127 <font class="keyword">class </font><a class="code" href="classRtError.html">RtError</a> -00128 { -00129 <font class="keyword">public</font>: -<a name="l00131"></a><a class="code" href="classRtError.html#s11">00131</a> <font class="keyword">enum</font> TYPE { -00132 WARNING, -00133 DEBUG_WARNING, -00134 UNSPECIFIED, -00135 NO_DEVICES_FOUND, -00136 INVALID_DEVICE, -00137 INVALID_STREAM, -00138 MEMORY_ERROR, -00139 INVALID_PARAMETER, -00140 DRIVER_ERROR, -00141 SYSTEM_ERROR, -00142 THREAD_ERROR -00143 }; -00144 -00145 <font class="keyword">protected</font>: -00146 <font class="keywordtype">char</font> error_message[256]; -00147 TYPE type; +00076 <span class="comment">// Default constructor.</span> +00077 CallbackInfo() +00078 :object(0), usingCallback(false), callback(0), +00079 userData(0), apiInfo(0) {} +00080 }; +00081 +00082 <span class="comment">// Support for signed integers and floats. Audio data fed to/from</span> +00083 <span class="comment">// the tickStream() routine is assumed to ALWAYS be in host</span> +00084 <span class="comment">// byte order. The internal routines will automatically take care of</span> +00085 <span class="comment">// any necessary byte-swapping between the host format and the</span> +00086 <span class="comment">// soundcard. Thus, endian-ness is not a concern in the following</span> +00087 <span class="comment">// format definitions.</span> +00088 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> RtAudioFormat; +00089 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_SINT8 = 0x1; +00090 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_SINT16 = 0x2; +00091 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_SINT24 = 0x4; +00092 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_SINT32 = 0x8; +00093 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_FLOAT32 = 0x10; +00094 <span class="keyword">static</span> <span class="keyword">const</span> RtAudioFormat RTAUDIO_FLOAT64 = 0x20; +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); +00097 +<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> { +<a name="l00100"></a><a class="code" href="structRtAudioDeviceInfo.html#o0">00100</a> std::string <a class="code" href="structRtAudioDeviceInfo.html#o0">name</a>; +<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>; +<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>; +<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>; +<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>; +<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>; +<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>; +<a name="l00107"></a><a class="code" href="structRtAudioDeviceInfo.html#o7">00107</a> RtAudioFormat <a class="code" href="structRtAudioDeviceInfo.html#o7">nativeFormats</a>; +00109 <span class="comment">// Default constructor.</span> +00110 <a class="code" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a>() +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), +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) {} +00113 }; +00114 +00115 <span class="comment">// **************************************************************** //</span> +00116 <span class="comment">//</span> +00117 <span class="comment">// RtApi class declaration.</span> +00118 <span class="comment">//</span> +00119 <span class="comment">// Note that RtApi is an abstract base class and cannot be</span> +00120 <span class="comment">// explicitly instantiated. The class RtAudio will create an</span> +00121 <span class="comment">// instance of an RtApi subclass (RtApiOss, RtApiAlsa,</span> +00122 <span class="comment">// RtApiJack, RtApiCore, RtApiAl, RtApiDs, or RtApiAsio).</span> +00123 <span class="comment">//</span> +00124 <span class="comment">// **************************************************************** //</span> +00125 +00126 <span class="keyword">class </span>RtApi +00127 { +00128 <span class="keyword">public</span>: +00129 +00130 RtApi(); +00131 <span class="keyword">virtual</span> ~RtApi(); +00132 <span class="keywordtype">void</span> openStream( <span class="keywordtype">int</span> outputDevice, <span class="keywordtype">int</span> outputChannels, +00133 <span class="keywordtype">int</span> inputDevice, <span class="keywordtype">int</span> inputChannels, +00134 RtAudioFormat format, <span class="keywordtype">int</span> sampleRate, +00135 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers ); +00136 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData ) = 0; +00137 <span class="keyword">virtual</span> <span class="keywordtype">void</span> cancelStreamCallback() = 0; +00138 <span class="keywordtype">int</span> getDeviceCount(<span class="keywordtype">void</span>); +00139 <a class="code" href="structRtAudioDeviceInfo.html">RtAudioDeviceInfo</a> getDeviceInfo( <span class="keywordtype">int</span> device ); +00140 <span class="keywordtype">char</span> * <span class="keyword">const</span> getStreamBuffer(); +00141 <span class="keyword">virtual</span> <span class="keywordtype">void</span> tickStream() = 0; +00142 <span class="keyword">virtual</span> <span class="keywordtype">void</span> closeStream(); +00143 <span class="keyword">virtual</span> <span class="keywordtype">void</span> startStream() = 0; +00144 <span class="keyword">virtual</span> <span class="keywordtype">void</span> stopStream() = 0; +00145 <span class="keyword">virtual</span> <span class="keywordtype">void</span> abortStream() = 0; +00146 +00147 <span class="keyword">protected</span>: 00148 -00149 <font class="keyword">public</font>: -00151 <a class="code" href="classRtError.html#a0">RtError</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *p, TYPE tipe = RtError::UNSPECIFIED); -00152 -00154 <font class="keyword">virtual</font> <a class="code" href="classRtError.html#a1">~RtError</a>(<font class="keywordtype">void</font>); -00155 -00157 <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classRtError.html#a2">printMessage</a>(<font class="keywordtype">void</font>); -00158 -<a name="l00160"></a><a class="code" href="classRtError.html#a3">00160</a> <font class="keyword">virtual</font> <font class="keyword">const</font> TYPE& <a class="code" href="classRtError.html#a3">getType</a>(<font class="keywordtype">void</font>)<font class="keyword"> </font>{ <font class="keywordflow">return</font> type; } -00161 -<a name="l00163"></a><a class="code" href="classRtError.html#a4">00163</a> <font class="keyword">virtual</font> <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="classRtError.html#a4">getMessage</a>(<font class="keywordtype">void</font>)<font class="keyword"> </font>{ <font class="keywordflow">return</font> error_message; } -00164 }; +00149 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MAX_SAMPLE_RATES; +00150 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> SAMPLE_RATES[]; +00151 +00152 <span class="keyword">enum</span> { FAILURE, SUCCESS }; +00153 +00154 <span class="keyword">enum</span> StreamMode { +00155 OUTPUT, +00156 INPUT, +00157 DUPLEX, +00158 UNINITIALIZED = -75 +00159 }; +00160 +00161 <span class="keyword">enum</span> StreamState { +00162 STREAM_STOPPED, +00163 STREAM_RUNNING +00164 }; 00165 -00166 -00167 <font class="comment">// This public structure type is used to pass callback information</font> -00168 <font class="comment">// between the private RtAudio stream structure and global callback</font> -00169 <font class="comment">// handling functions.</font> -00170 <font class="keyword">typedef</font> <font class="keyword">struct </font>{ -00171 <font class="keywordtype">void</font> *object; <font class="comment">// Used as a "this" pointer.</font> -00172 <font class="keywordtype">int</font> streamId; -00173 DEVICE_ID device[2]; -00174 THREAD_HANDLE thread; -00175 <font class="keywordtype">void</font> *callback; -00176 <font class="keywordtype">void</font> *buffers; -00177 <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> waitTime; -00178 <font class="keywordtype">bool</font> blockTick; -00179 <font class="keywordtype">bool</font> stopStream; -00180 <font class="keywordtype">bool</font> usingCallback; -00181 <font class="keywordtype">void</font> *userData; -00182 } CALLBACK_INFO; -00183 -00184 -00185 <font class="comment">// *************************************************** //</font> -00186 <font class="comment">//</font> -00187 <font class="comment">// RtAudio class declaration.</font> -00188 <font class="comment">//</font> -00189 <font class="comment">// *************************************************** //</font> -00190 -00191 <font class="keyword">class </font><a class="code" href="classRtAudio.html">RtAudio</a> -00192 { -00193 <font class="keyword">public</font>: -00194 -00195 <font class="comment">// Support for signed integers and floats. Audio data fed to/from</font> -00196 <font class="comment">// the tickStream() routine is assumed to ALWAYS be in host</font> -00197 <font class="comment">// byte order. The internal routines will automatically take care of</font> -00198 <font class="comment">// any necessary byte-swapping between the host format and the</font> -00199 <font class="comment">// soundcard. Thus, endian-ness is not a concern in the following</font> -00200 <font class="comment">// format definitions.</font> -00201 <font class="keyword">typedef</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> RTAUDIO_FORMAT; -<a name="l00202"></a><a class="code" href="classRtAudio.html#p0">00202</a> <font class="keyword">static</font> <font class="keyword">const</font> RTAUDIO_FORMAT RTAUDIO_SINT8; -<a name="l00203"></a><a class="code" href="classRtAudio.html#p1">00203</a> <font class="keyword">static</font> <font class="keyword">const</font> RTAUDIO_FORMAT RTAUDIO_SINT16; -<a name="l00204"></a><a class="code" href="classRtAudio.html#p2">00204</a> <font class="keyword">static</font> <font class="keyword">const</font> RTAUDIO_FORMAT RTAUDIO_SINT24; -<a name="l00205"></a><a class="code" href="classRtAudio.html#p3">00205</a> <font class="keyword">static</font> <font class="keyword">const</font> RTAUDIO_FORMAT RTAUDIO_SINT32; -<a name="l00206"></a><a class="code" href="classRtAudio.html#p4">00206</a> <font class="keyword">static</font> <font class="keyword">const</font> RTAUDIO_FORMAT RTAUDIO_FLOAT32; -<a name="l00207"></a><a class="code" href="classRtAudio.html#p5">00207</a> <font class="keyword">static</font> <font class="keyword">const</font> RTAUDIO_FORMAT RTAUDIO_FLOAT64; -00209 <font class="comment">//static const int MAX_SAMPLE_RATES = 14;</font> -00210 <font class="keyword">enum</font> { MAX_SAMPLE_RATES = 14 }; -00211 -00212 <font class="keyword">typedef</font> int (*RTAUDIO_CALLBACK)(<font class="keywordtype">char</font> *buffer, <font class="keywordtype">int</font> bufferSize, <font class="keywordtype">void</font> *userData); -00213 -<a name="l00215"></a><a class="code" href="structRtAudio_1_1RTAUDIO__DEVICE.html">00215</a> <font class="keyword">typedef</font> <font class="keyword">struct </font>{ -<a name="l00216"></a><a class="code" href="structRtAudio_1_1RTAUDIO__DEVICE.html#m0">00216</a> <font class="keywordtype">char</font> name[128]; -00217 DEVICE_ID id[2]; <font class="comment">/* No value reported by getDeviceInfo(). */</font> -<a name="l00218"></a><a class="code" href="structRtAudio_1_1RTAUDIO__DEVICE.html#m2">00218</a> <font class="keywordtype">bool</font> probed; -<a name="l00219"></a><a class="code" href="structRtAudio_1_1RTAUDIO__DEVICE.html#m3">00219</a> <font class="keywordtype">int</font> maxOutputChannels; -<a name="l00220"></a><a class="code" href="structRtAudio_1_1RTAUDIO__DEVICE.html#m4">00220</a> <font class="keywordtype">int</font> maxInputChannels; -<a name="l00221"></a><a class="code" href="structRtAudio_1_1RTAUDIO__DEVICE.html#m5">00221</a> <font class="keywordtype">int</font> maxDuplexChannels; -<a name="l00222"></a><a class="code" href="structRtAudio_1_1RTAUDIO__DEVICE.html#m6">00222</a> <font class="keywordtype">int</font> minOutputChannels; -<a name="l00223"></a><a class="code" href="structRtAudio_1_1RTAUDIO__DEVICE.html#m7">00223</a> <font class="keywordtype">int</font> minInputChannels; -<a name="l00224"></a><a class="code" href="structRtAudio_1_1RTAUDIO__DEVICE.html#m8">00224</a> <font class="keywordtype">int</font> minDuplexChannels; -<a name="l00225"></a><a class="code" href="structRtAudio_1_1RTAUDIO__DEVICE.html#m9">00225</a> <font class="keywordtype">bool</font> hasDuplexSupport; -<a name="l00226"></a><a class="code" href="structRtAudio_1_1RTAUDIO__DEVICE.html#m10">00226</a> <font class="keywordtype">bool</font> isDefault; -<a name="l00227"></a><a class="code" href="structRtAudio_1_1RTAUDIO__DEVICE.html#m11">00227</a> <font class="keywordtype">int</font> nSampleRates; -<a name="l00228"></a><a class="code" href="structRtAudio_1_1RTAUDIO__DEVICE.html#m12">00228</a> <font class="keywordtype">int</font> sampleRates[MAX_SAMPLE_RATES]; -<a name="l00229"></a><a class="code" href="structRtAudio_1_1RTAUDIO__DEVICE.html#m13">00229</a> RTAUDIO_FORMAT nativeFormats; -00230 } RTAUDIO_DEVICE; +00166 <span class="comment">// A protected structure for audio streams.</span> +00167 <span class="keyword">struct </span>RtApiStream { +00168 <span class="keywordtype">int</span> device[2]; <span class="comment">// Playback and record, respectively.</span> +00169 <span class="keywordtype">void</span> *apiHandle; <span class="comment">// void pointer for API specific stream handle information</span> +00170 StreamMode mode; <span class="comment">// OUTPUT, INPUT, or DUPLEX.</span> +00171 StreamState state; <span class="comment">// STOPPED or RUNNING</span> +00172 <span class="keywordtype">char</span> *userBuffer; +00173 <span class="keywordtype">char</span> *deviceBuffer; +00174 <span class="keywordtype">bool</span> doConvertBuffer[2]; <span class="comment">// Playback and record, respectively.</span> +00175 <span class="keywordtype">bool</span> deInterleave[2]; <span class="comment">// Playback and record, respectively.</span> +00176 <span class="keywordtype">bool</span> doByteSwap[2]; <span class="comment">// Playback and record, respectively.</span> +00177 <span class="keywordtype">int</span> sampleRate; +00178 <span class="keywordtype">int</span> bufferSize; +00179 <span class="keywordtype">int</span> nBuffers; +00180 <span class="keywordtype">int</span> nUserChannels[2]; <span class="comment">// Playback and record, respectively.</span> +00181 <span class="keywordtype">int</span> nDeviceChannels[2]; <span class="comment">// Playback and record channels, respectively.</span> +00182 RtAudioFormat userFormat; +00183 RtAudioFormat deviceFormat[2]; <span class="comment">// Playback and record, respectively.</span> +00184 StreamMutex mutex; +00185 CallbackInfo callbackInfo; +00186 +00187 RtApiStream() +00188 :apiHandle(0), userBuffer(0), deviceBuffer(0) {} +00189 <span class="comment">// :apiHandle(0), mode(UNINITIALIZED), state(STREAM_STOPPED),</span> +00190 <span class="comment">// userBuffer(0), deviceBuffer(0) {}</span> +00191 }; +00192 +00193 <span class="comment">// A protected device structure for audio devices.</span> +00194 <span class="keyword">struct </span>RtApiDevice { +00195 std::string name; +00196 <span class="keywordtype">bool</span> probed; +00197 <span class="keywordtype">void</span> *apiDeviceId; <span class="comment">// void pointer for API specific device information</span> +00198 <span class="keywordtype">int</span> maxOutputChannels; +00199 <span class="keywordtype">int</span> maxInputChannels; +00200 <span class="keywordtype">int</span> maxDuplexChannels; +00201 <span class="keywordtype">int</span> minOutputChannels; +00202 <span class="keywordtype">int</span> minInputChannels; +00203 <span class="keywordtype">int</span> minDuplexChannels; +00204 <span class="keywordtype">bool</span> hasDuplexSupport; +00205 <span class="keywordtype">bool</span> isDefault; +00206 std::vector<int> sampleRates; +00207 RtAudioFormat nativeFormats; +00209 <span class="comment">// Default constructor.</span> +00210 RtApiDevice() +00211 :probed(false), apiDeviceId(0), maxOutputChannels(0), maxInputChannels(0), +00212 maxDuplexChannels(0), minOutputChannels(0), minInputChannels(0), +00213 minDuplexChannels(0), isDefault(false), nativeFormats(0) {} +00214 }; +00215 +00216 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">short</span> Int16; +00217 <span class="keyword">typedef</span> <span class="keywordtype">signed</span> <span class="keywordtype">int</span> Int32; +00218 <span class="keyword">typedef</span> <span class="keywordtype">float</span> Float32; +00219 <span class="keyword">typedef</span> <span class="keywordtype">double</span> Float64; +00220 +00221 <span class="keywordtype">char</span> message_[256]; +00222 <span class="keywordtype">int</span> nDevices_; +00223 std::vector<RtApiDevice> devices_; +00224 RtApiStream stream_; +00225 +00230 <span class="keyword">virtual</span> <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>) = 0; 00231 -00233 -00239 <a class="code" href="classRtAudio.html#a0">RtAudio</a>(); -00240 -00242 -00253 <a class="code" href="classRtAudio.html#a0">RtAudio</a>(<font class="keywordtype">int</font> *streamId, -00254 <font class="keywordtype">int</font> outputDevice, <font class="keywordtype">int</font> outputChannels, -00255 <font class="keywordtype">int</font> inputDevice, <font class="keywordtype">int</font> inputChannels, -00256 RTAUDIO_FORMAT format, <font class="keywordtype">int</font> sampleRate, -00257 <font class="keywordtype">int</font> *bufferSize, <font class="keywordtype">int</font> numberOfBuffers); -00258 -00260 -00264 <a class="code" href="classRtAudio.html#a2">~RtAudio</a>(); +00240 <span class="keyword">virtual</span> <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info ); +00241 +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, +00251 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format, +00252 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers ); +00253 +00258 <span class="keyword">virtual</span> <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>); +00259 +00264 <span class="keyword">virtual</span> <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>); 00265 -00267 -00294 <font class="keywordtype">int</font> <a class="code" href="classRtAudio.html#a3">openStream</a>(<font class="keywordtype">int</font> outputDevice, <font class="keywordtype">int</font> outputChannels, -00295 <font class="keywordtype">int</font> inputDevice, <font class="keywordtype">int</font> inputChannels, -00296 RTAUDIO_FORMAT format, <font class="keywordtype">int</font> sampleRate, -00297 <font class="keywordtype">int</font> *bufferSize, <font class="keywordtype">int</font> numberOfBuffers); -00298 -00300 -00319 <font class="keywordtype">void</font> <a class="code" href="classRtAudio.html#a4">setStreamCallback</a>(<font class="keywordtype">int</font> streamId, RTAUDIO_CALLBACK callback, <font class="keywordtype">void</font> *userData); -00320 -00322 -00329 <font class="keywordtype">void</font> <a class="code" href="classRtAudio.html#a5">cancelStreamCallback</a>(<font class="keywordtype">int</font> streamId); -00330 -00332 <font class="keywordtype">int</font> <a class="code" href="classRtAudio.html#a6">getDeviceCount</a>(<font class="keywordtype">void</font>); -00333 -00335 -00343 <font class="keywordtype">void</font> <a class="code" href="classRtAudio.html#a7">getDeviceInfo</a>(<font class="keywordtype">int</font> device, RTAUDIO_DEVICE *info); -00344 -00346 -00351 <font class="keywordtype">char</font> * <font class="keyword">const</font> <a class="code" href="classRtAudio.html#a8">getStreamBuffer</a>(<font class="keywordtype">int</font> streamId); -00352 -00354 -00359 <font class="keywordtype">void</font> <a class="code" href="classRtAudio.html#a9">tickStream</a>(<font class="keywordtype">int</font> streamId); +00267 <span class="keywordtype">void</span> clearDeviceInfo( RtApiDevice *info ); +00268 +00270 <span class="keywordtype">void</span> clearStreamInfo(); +00271 +00273 <span class="keywordtype">void</span> error( RtError::Type type ); +00274 +00279 <span class="keywordtype">void</span> verifyStream(); +00280 +00285 <span class="keywordtype">void</span> convertStreamBuffer( StreamMode mode ); +00286 +00288 <span class="keywordtype">void</span> byteSwapBuffer( <span class="keywordtype">char</span> *buffer, <span class="keywordtype">int</span> samples, RtAudioFormat format ); +00289 +00291 <span class="keywordtype">int</span> formatBytes( RtAudioFormat format ); +00292 }; +00293 +00294 +00295 <span class="comment">// **************************************************************** //</span> +00296 <span class="comment">//</span> +00297 <span class="comment">// RtAudio class declaration.</span> +00298 <span class="comment">//</span> +00299 <span class="comment">// RtAudio is a "controller" used to select an available audio i/o</span> +00300 <span class="comment">// interface. It presents a common API for the user to call but all</span> +00301 <span class="comment">// functionality is implemented by the class RtAudioApi and its</span> +00302 <span class="comment">// subclasses. RtAudio creates an instance of an RtAudioApi subclass</span> +00303 <span class="comment">// based on the user's API choice. If no choice is made, RtAudio</span> +00304 <span class="comment">// attempts to make a "logical" API selection.</span> +00305 <span class="comment">//</span> +00306 <span class="comment">// **************************************************************** //</span> +00307 +<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> +00309 { +00310 <span class="keyword">public</span>: +00311 +<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> { +00314 <a class="code" href="classRtAudio.html#w8w0">UNSPECIFIED</a>, +00315 <a class="code" href="classRtAudio.html#w8w1">LINUX_ALSA</a>, +00316 <a class="code" href="classRtAudio.html#w8w2">LINUX_OSS</a>, +00317 <a class="code" href="classRtAudio.html#w8w3">LINUX_JACK</a>, +00318 <a class="code" href="classRtAudio.html#w8w4">MACOSX_CORE</a>, +00319 <a class="code" href="classRtAudio.html#w8w5">IRIX_AL</a>, +00320 <a class="code" href="classRtAudio.html#w8w6">WINDOWS_ASIO</a>, +00321 <a class="code" href="classRtAudio.html#w8w7">WINDOWS_DS</a> +00322 }; +00323 +00325 +00335 <a class="code" href="classRtAudio.html#a0">RtAudio</a>( RtAudioApi api=UNSPECIFIED ); +00336 +00338 +00349 <a class="code" href="classRtAudio.html#a0">RtAudio</a>( <span class="keywordtype">int</span> outputDevice, <span class="keywordtype">int</span> outputChannels, +00350 <span class="keywordtype">int</span> inputDevice, <span class="keywordtype">int</span> inputChannels, +00351 RtAudioFormat format, <span class="keywordtype">int</span> sampleRate, +00352 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers, RtAudioApi api=UNSPECIFIED ); +00353 +00355 +00359 <a class="code" href="classRtAudio.html#a2">~RtAudio</a>(); 00360 00362 -00366 <font class="keywordtype">void</font> <a class="code" href="classRtAudio.html#a10">closeStream</a>(<font class="keywordtype">int</font> streamId); -00367 -00369 -00373 <font class="keywordtype">void</font> <a class="code" href="classRtAudio.html#a11">startStream</a>(<font class="keywordtype">int</font> streamId); -00374 -00376 -00380 <font class="keywordtype">void</font> <a class="code" href="classRtAudio.html#a12">stopStream</a>(<font class="keywordtype">int</font> streamId); -00381 -00383 -00387 <font class="keywordtype">void</font> <a class="code" href="classRtAudio.html#a13">abortStream</a>(<font class="keywordtype">int</font> streamId); -00388 -00390 -00395 <font class="keywordtype">int</font> <a class="code" href="classRtAudio.html#a14">streamWillBlock</a>(<font class="keywordtype">int</font> streamId); -00396 -00397 <font class="preprocessor">#if (defined(__MACOSX_CORE__) || defined(__WINDOWS_ASIO__))</font> -00398 <font class="preprocessor"></font> <font class="comment">// This function is intended for internal use only. It must be</font> -00399 <font class="comment">// public because it is called by the internal callback handler,</font> -00400 <font class="comment">// which is not a member of RtAudio. External use of this function</font> -00401 <font class="comment">// will most likely produce highly undesireable results!</font> -00402 <font class="keywordtype">void</font> callbackEvent(<font class="keywordtype">int</font> streamId, DEVICE_ID deviceId, <font class="keywordtype">void</font> *inData, <font class="keywordtype">void</font> *outData); -00403 <font class="preprocessor">#endif</font> -00404 <font class="preprocessor"></font> -00405 <font class="keyword">protected</font>: -00406 -00407 <font class="keyword">private</font>: -00408 -00409 <font class="keyword">static</font> <font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> SAMPLE_RATES[MAX_SAMPLE_RATES]; -00410 -00411 <font class="keyword">enum</font> { FAILURE, SUCCESS }; -00412 -00413 <font class="keyword">enum</font> STREAM_MODE { -00414 OUTPUT, -00415 INPUT, -00416 DUPLEX, -00417 UNINITIALIZED = -75 -00418 }; -00419 -00420 <font class="keyword">enum</font> STREAM_STATE { -00421 STREAM_STOPPED, -00422 STREAM_RUNNING -00423 }; +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, +00389 <span class="keywordtype">int</span> inputDevice, <span class="keywordtype">int</span> inputChannels, +00390 RtAudioFormat format, <span class="keywordtype">int</span> sampleRate, +00391 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers ); +00392 +00394 +<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_->setStreamCallback( callback, userData ); }; +00414 +00416 +<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_->cancelStreamCallback(); }; 00424 -00425 <font class="keyword">typedef</font> <font class="keyword">struct </font>{ -00426 <font class="keywordtype">int</font> device[2]; <font class="comment">// Playback and record, respectively.</font> -00427 STREAM_MODE mode; <font class="comment">// OUTPUT, INPUT, or DUPLEX.</font> -00428 AUDIO_HANDLE handle[2]; <font class="comment">// Playback and record handles, respectively.</font> -00429 STREAM_STATE state; <font class="comment">// STOPPED or RUNNING</font> -00430 <font class="keywordtype">char</font> *userBuffer; -00431 <font class="keywordtype">char</font> *deviceBuffer; -00432 <font class="keywordtype">bool</font> doConvertBuffer[2]; <font class="comment">// Playback and record, respectively.</font> -00433 <font class="keywordtype">bool</font> deInterleave[2]; <font class="comment">// Playback and record, respectively.</font> -00434 <font class="keywordtype">bool</font> doByteSwap[2]; <font class="comment">// Playback and record, respectively.</font> -00435 <font class="keywordtype">int</font> sampleRate; -00436 <font class="keywordtype">int</font> bufferSize; -00437 <font class="keywordtype">int</font> nBuffers; -00438 <font class="keywordtype">int</font> nUserChannels[2]; <font class="comment">// Playback and record, respectively.</font> -00439 <font class="keywordtype">int</font> nDeviceChannels[2]; <font class="comment">// Playback and record channels, respectively.</font> -00440 RTAUDIO_FORMAT userFormat; -00441 RTAUDIO_FORMAT deviceFormat[2]; <font class="comment">// Playback and record, respectively.</font> -00442 MUTEX mutex; -00443 CALLBACK_INFO callbackInfo; -00444 } RTAUDIO_STREAM; -00445 -00446 <font class="keyword">typedef</font> <font class="keywordtype">signed</font> <font class="keywordtype">short</font> INT16; -00447 <font class="keyword">typedef</font> <font class="keywordtype">signed</font> <font class="keywordtype">int</font> INT32; -00448 <font class="keyword">typedef</font> <font class="keywordtype">float</font> FLOAT32; -00449 <font class="keyword">typedef</font> <font class="keywordtype">double</font> FLOAT64; -00450 -00451 <font class="keywordtype">char</font> message[256]; -00452 <font class="keywordtype">int</font> nDevices; -00453 RTAUDIO_DEVICE *devices; +<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_->getDeviceCount(); }; +00427 +00429 +<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_->getDeviceInfo( device ); }; +00438 +00440 +<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_->getStreamBuffer(); }; +00446 +00448 +<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_->tickStream(); }; 00454 -00455 std::map<int, void *> streams; 00456 -00458 <font class="keywordtype">void</font> error(RtError::TYPE type); -00459 -00464 <font class="keywordtype">void</font> initialize(<font class="keywordtype">void</font>); -00465 -00470 <font class="keywordtype">int</font> getDefaultInputDevice(<font class="keywordtype">void</font>); -00471 -00476 <font class="keywordtype">int</font> getDefaultOutputDevice(<font class="keywordtype">void</font>); +<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_->closeStream(); }; +00461 +00463 +<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_->startStream(); }; +00468 +00470 +<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_->stopStream(); }; +00475 00477 -00479 <font class="keywordtype">void</font> clearDeviceInfo(RTAUDIO_DEVICE *info); -00480 -00488 <font class="keywordtype">void</font> probeDeviceInfo(RTAUDIO_DEVICE *info); -00489 -00496 <font class="keywordtype">bool</font> probeDeviceOpen(<font class="keywordtype">int</font> device, RTAUDIO_STREAM *stream, -00497 STREAM_MODE mode, <font class="keywordtype">int</font> channels, -00498 <font class="keywordtype">int</font> sampleRate, RTAUDIO_FORMAT format, -00499 <font class="keywordtype">int</font> *bufferSize, <font class="keywordtype">int</font> numberOfBuffers); -00500 -00507 <font class="keywordtype">void</font> *verifyStream(<font class="keywordtype">int</font> streamId); -00508 -00513 <font class="keywordtype">void</font> convertStreamBuffer(RTAUDIO_STREAM *stream, STREAM_MODE mode); -00514 -00516 <font class="keywordtype">void</font> byteSwapBuffer(<font class="keywordtype">char</font> *buffer, <font class="keywordtype">int</font> samples, RTAUDIO_FORMAT format); -00517 -00519 <font class="keywordtype">int</font> formatBytes(RTAUDIO_FORMAT format); -00520 }; -00521 -00522 <font class="comment">// Define the following flag to have extra information spewed to stderr.</font> -00523 <font class="comment">//#define __RTAUDIO_DEBUG__</font> -00524 -00525 <font class="preprocessor">#endif</font> -</font></pre></div><HR> +<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_->abortStream(); }; +00482 +00483 +00484 <span class="keyword">protected</span>: +00485 +00486 <span class="keywordtype">void</span> initialize( RtAudioApi api ); +00487 +00488 RtApi *rtapi_; +00489 }; +00490 +00491 +00492 <span class="comment">// RtApi Subclass prototypes.</span> +00493 +00494 <span class="preprocessor">#if defined(__LINUX_ALSA__)</span> +00495 <span class="preprocessor"></span> +00496 <span class="keyword">class </span>RtApiAlsa: <span class="keyword">public</span> RtApi +00497 { +00498 <span class="keyword">public</span>: +00499 +00500 RtApiAlsa(); +00501 ~RtApiAlsa(); +00502 <span class="keywordtype">void</span> tickStream(); +00503 <span class="keywordtype">void</span> closeStream(); +00504 <span class="keywordtype">void</span> startStream(); +00505 <span class="keywordtype">void</span> stopStream(); +00506 <span class="keywordtype">void</span> abortStream(); +00507 <span class="keywordtype">int</span> streamWillBlock(); +00508 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData ); +00509 <span class="keywordtype">void</span> cancelStreamCallback(); +00510 +00511 <span class="keyword">private</span>: +00512 +00513 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>); +00514 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info ); +00515 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels, +00516 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format, +00517 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers ); +00518 }; +00519 +00520 <span class="preprocessor">#endif</span> +00521 <span class="preprocessor"></span> +00522 <span class="preprocessor">#if defined(__LINUX_JACK__)</span> +00523 <span class="preprocessor"></span> +00524 <span class="keyword">class </span>RtApiJack: <span class="keyword">public</span> RtApi +00525 { +00526 <span class="keyword">public</span>: +00527 +00528 RtApiJack(); +00529 ~RtApiJack(); +00530 <span class="keywordtype">void</span> tickStream(); +00531 <span class="keywordtype">void</span> closeStream(); +00532 <span class="keywordtype">void</span> startStream(); +00533 <span class="keywordtype">void</span> stopStream(); +00534 <span class="keywordtype">void</span> abortStream(); +00535 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData ); +00536 <span class="keywordtype">void</span> cancelStreamCallback(); +00537 <span class="comment">// This function is intended for internal use only. It must be</span> +00538 <span class="comment">// public because it is called by the internal callback handler,</span> +00539 <span class="comment">// which is not a member of RtAudio. External use of this function</span> +00540 <span class="comment">// will most likely produce highly undesireable results!</span> +00541 <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> nframes ); +00542 +00543 <span class="keyword">private</span>: +00544 +00545 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>); +00546 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info ); +00547 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels, +00548 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format, +00549 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers ); +00550 }; +00551 +00552 <span class="preprocessor">#endif</span> +00553 <span class="preprocessor"></span> +00554 <span class="preprocessor">#if defined(__LINUX_OSS__)</span> +00555 <span class="preprocessor"></span> +00556 <span class="keyword">class </span>RtApiOss: <span class="keyword">public</span> RtApi +00557 { +00558 <span class="keyword">public</span>: +00559 +00560 RtApiOss(); +00561 ~RtApiOss(); +00562 <span class="keywordtype">void</span> tickStream(); +00563 <span class="keywordtype">void</span> closeStream(); +00564 <span class="keywordtype">void</span> startStream(); +00565 <span class="keywordtype">void</span> stopStream(); +00566 <span class="keywordtype">void</span> abortStream(); +00567 <span class="keywordtype">int</span> streamWillBlock(); +00568 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData ); +00569 <span class="keywordtype">void</span> cancelStreamCallback(); +00570 +00571 <span class="keyword">private</span>: +00572 +00573 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>); +00574 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info ); +00575 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels, +00576 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format, +00577 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers ); +00578 }; +00579 +00580 <span class="preprocessor">#endif</span> +00581 <span class="preprocessor"></span> +00582 <span class="preprocessor">#if defined(__MACOSX_CORE__)</span> +00583 <span class="preprocessor"></span> +00584 <span class="preprocessor">#include <CoreAudio/AudioHardware.h></span> +00585 +00586 <span class="keyword">class </span>RtApiCore: <span class="keyword">public</span> RtApi +00587 { +00588 <span class="keyword">public</span>: +00589 +00590 RtApiCore(); +00591 ~RtApiCore(); +00592 <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>); +00593 <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>); +00594 <span class="keywordtype">void</span> tickStream(); +00595 <span class="keywordtype">void</span> closeStream(); +00596 <span class="keywordtype">void</span> startStream(); +00597 <span class="keywordtype">void</span> stopStream(); +00598 <span class="keywordtype">void</span> abortStream(); +00599 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData ); +00600 <span class="keywordtype">void</span> cancelStreamCallback(); +00601 +00602 <span class="comment">// This function is intended for internal use only. It must be</span> +00603 <span class="comment">// public because it is called by the internal callback handler,</span> +00604 <span class="comment">// which is not a member of RtAudio. External use of this function</span> +00605 <span class="comment">// will most likely produce highly undesireable results!</span> +00606 <span class="keywordtype">void</span> callbackEvent( AudioDeviceID deviceId, <span class="keywordtype">void</span> *inData, <span class="keywordtype">void</span> *outData ); +00607 +00608 <span class="keyword">private</span>: +00609 +00610 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>); +00611 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info ); +00612 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels, +00613 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format, +00614 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers ); +00615 }; +00616 +00617 <span class="preprocessor">#endif</span> +00618 <span class="preprocessor"></span> +00619 <span class="preprocessor">#if defined(__WINDOWS_DS__)</span> +00620 <span class="preprocessor"></span> +00621 <span class="keyword">class </span>RtApiDs: <span class="keyword">public</span> RtApi +00622 { +00623 <span class="keyword">public</span>: +00624 +00625 RtApiDs(); +00626 ~RtApiDs(); +00627 <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>); +00628 <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>); +00629 <span class="keywordtype">void</span> tickStream(); +00630 <span class="keywordtype">void</span> closeStream(); +00631 <span class="keywordtype">void</span> startStream(); +00632 <span class="keywordtype">void</span> stopStream(); +00633 <span class="keywordtype">void</span> abortStream(); +00634 <span class="keywordtype">int</span> streamWillBlock(); +00635 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData ); +00636 <span class="keywordtype">void</span> cancelStreamCallback(); +00637 +00638 <span class="keyword">private</span>: +00639 +00640 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>); +00641 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info ); +00642 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels, +00643 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format, +00644 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers ); +00645 }; +00646 +00647 <span class="preprocessor">#endif</span> +00648 <span class="preprocessor"></span> +00649 <span class="preprocessor">#if defined(__WINDOWS_ASIO__)</span> +00650 <span class="preprocessor"></span> +00651 <span class="keyword">class </span>RtApiAsio: <span class="keyword">public</span> RtApi +00652 { +00653 <span class="keyword">public</span>: +00654 +00655 RtApiAsio(); +00656 ~RtApiAsio(); +00657 <span class="keywordtype">void</span> tickStream(); +00658 <span class="keywordtype">void</span> closeStream(); +00659 <span class="keywordtype">void</span> startStream(); +00660 <span class="keywordtype">void</span> stopStream(); +00661 <span class="keywordtype">void</span> abortStream(); +00662 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData ); +00663 <span class="keywordtype">void</span> cancelStreamCallback(); +00664 +00665 <span class="comment">// This function is intended for internal use only. It must be</span> +00666 <span class="comment">// public because it is called by the internal callback handler,</span> +00667 <span class="comment">// which is not a member of RtAudio. External use of this function</span> +00668 <span class="comment">// will most likely produce highly undesireable results!</span> +00669 <span class="keywordtype">void</span> callbackEvent( <span class="keywordtype">long</span> bufferIndex ); +00670 +00671 <span class="keyword">private</span>: +00672 +00673 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>); +00674 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info ); +00675 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels, +00676 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format, +00677 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers ); +00678 }; +00679 +00680 <span class="preprocessor">#endif</span> +00681 <span class="preprocessor"></span> +00682 <span class="preprocessor">#if defined(__IRIX_AL__)</span> +00683 <span class="preprocessor"></span> +00684 <span class="keyword">class </span>RtApiAl: <span class="keyword">public</span> RtApi +00685 { +00686 <span class="keyword">public</span>: +00687 +00688 RtApiAl(); +00689 ~RtApiAl(); +00690 <span class="keywordtype">int</span> getDefaultOutputDevice(<span class="keywordtype">void</span>); +00691 <span class="keywordtype">int</span> getDefaultInputDevice(<span class="keywordtype">void</span>); +00692 <span class="keywordtype">void</span> tickStream(); +00693 <span class="keywordtype">void</span> closeStream(); +00694 <span class="keywordtype">void</span> startStream(); +00695 <span class="keywordtype">void</span> stopStream(); +00696 <span class="keywordtype">void</span> abortStream(); +00697 <span class="keywordtype">int</span> streamWillBlock(); +00698 <span class="keywordtype">void</span> setStreamCallback( RtAudioCallback callback, <span class="keywordtype">void</span> *userData ); +00699 <span class="keywordtype">void</span> cancelStreamCallback(); +00700 +00701 <span class="keyword">private</span>: +00702 +00703 <span class="keywordtype">void</span> initialize(<span class="keywordtype">void</span>); +00704 <span class="keywordtype">void</span> probeDeviceInfo( RtApiDevice *info ); +00705 <span class="keywordtype">bool</span> probeDeviceOpen( <span class="keywordtype">int</span> device, StreamMode mode, <span class="keywordtype">int</span> channels, +00706 <span class="keywordtype">int</span> sampleRate, RtAudioFormat format, +00707 <span class="keywordtype">int</span> *bufferSize, <span class="keywordtype">int</span> numberOfBuffers ); +00708 }; +00709 +00710 <span class="preprocessor">#endif</span> +00711 <span class="preprocessor"></span> +00712 <span class="comment">// Define the following flag to have extra information spewed to stderr.</span> +00713 <span class="comment">//#define __RTAUDIO_DEBUG__</span> +00714 +00715 <span class="preprocessor">#endif</span> +</pre></div><HR> -<table><tr><td><img src="../images/ccrma.gif"> - <td>©2001-2002 Gary P. Scavone, CCRMA, Stanford University. All Rights Reserved.<br> - Maintained by Gary P. Scavone, <a href="mailto:gary@ccrma.stanford.edu">gary@ccrma.stanford.edu</a><P> +<table><tr><td><img src="../images/mcgill.gif" width=165></td> + <td>©2001-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br> + Maintained by Gary P. Scavone, <a href="mailto:gary@music.mcgill.ca">gary@music.mcgill.ca</a></td></tr> </table> </BODY> |
