summaryrefslogtreecommitdiff
path: root/doc/html/RtMidi_8h-source.html
blob: f8e4af97867dc9110c649f0de2e8cb6a0622034a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
<HTML>
<HEAD>
<TITLE>The RtMidi Tutorial</TITLE>
<LINK HREF="doxygen.css" REL="stylesheet" TYPE="text/css">
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<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>
<HR>
<!-- Generated by Doxygen 1.3-rc3 -->
<h1>RtMidi.h</h1><div class="fragment"><pre>00001 <span class="comment">/**********************************************************************/</span>
00036 <span class="comment">/**********************************************************************/</span>
00037 
00038 <span class="comment">// RtMidi: Version 1.0.3, ??</span>
00039 
00040 <span class="preprocessor">#ifndef RTMIDI_H</span>
00041 <span class="preprocessor"></span><span class="preprocessor">#define RTMIDI_H</span>
00042 <span class="preprocessor"></span>
00043 <span class="preprocessor">#include "RtError.h"</span>
00044 <span class="preprocessor">#include &lt;string&gt;</span>
00045 
<a name="l00046"></a><a class="code" href="classRtMidi.html">00046</a> <span class="keyword">class </span><a class="code" href="classRtMidi.html">RtMidi</a>
00047 {
00048  <span class="keyword">public</span>:
00049 
00051   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a0">openPort</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 ) = 0;
00052 
00054   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a1">openVirtualPort</a>() = 0;
00055 
00057   <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidi.html#a2">getPortCount</a>() = 0;
00058 
00060   <span class="keyword">virtual</span> std::string <a class="code" href="classRtMidi.html#a3">getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 ) = 0;
00061 
00063   <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classRtMidi.html#a4">closePort</a>( <span class="keywordtype">void</span> ) = 0;
00064 
00065  <span class="keyword">protected</span>:
00066 
00067   <a class="code" href="classRtMidi.html">RtMidi</a>();
00068   <span class="keyword">virtual</span> ~<a class="code" href="classRtMidi.html">RtMidi</a>() {};
00069 
00070   <span class="comment">// A basic error reporting function for internal use in the RtMidi</span>
00071   <span class="comment">// subclasses.  The behavior of this function can be modified to</span>
00072   <span class="comment">// suit specific needs.</span>
00073   <span class="keywordtype">void</span> error( RtError::Type type );
00074 
00075   <span class="keywordtype">void</span> *apiData_;
00076   <span class="keywordtype">bool</span> connected_;
00077   std::string errorString_;
00078 };
00079 
00080 <span class="comment">/**********************************************************************/</span>
00096 <span class="comment">/**********************************************************************/</span>
00097 
00098 <span class="preprocessor">#include &lt;vector&gt;</span>
00099 <span class="preprocessor">#include &lt;queue&gt;</span>
00100 
<a name="l00101"></a><a class="code" href="classRtMidiIn.html">00101</a> <span class="keyword">class </span><a class="code" href="classRtMidiIn.html">RtMidiIn</a> : <span class="keyword">public</span> <a class="code" href="classRtMidi.html">RtMidi</a>
00102 {
00103  <span class="keyword">public</span>:
00104 
<a name="l00106"></a><a class="code" href="classRtMidiIn.html#s0">00106</a>   <span class="keyword">typedef</span> void (*RtMidiCallback)( <span class="keywordtype">double</span> timeStamp, std::vector&lt;unsigned char&gt; *message, <span class="keywordtype">void</span> *userData);
00107 
00109 
00112   <a class="code" href="classRtMidiIn.html#a0">RtMidiIn</a>();
00113 
00115   <a class="code" href="classRtMidiIn.html#a1">~RtMidiIn</a>();
00116 
00118 
00122   <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a2">openPort</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
00123 
00125 
00131   <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a3">openVirtualPort</a>();
00132 
00134 
00140   <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a4">setCallback</a>( RtMidiCallback callback, <span class="keywordtype">void</span> *userData = 0 );
00141 
00143 
00147   <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a5">cancelCallback</a>();
00148 
00150   <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a6">closePort</a>( <span class="keywordtype">void</span> );
00151 
00153   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidiIn.html#a7">getPortCount</a>();
00154 
00156 
00159   std::string <a class="code" href="classRtMidiIn.html#a8">getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
00160 
00162 
00166   <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a9">setQueueSizeLimit</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueSize );
00167 
00169 
00176   <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a10">ignoreTypes</a>( <span class="keywordtype">bool</span> midiSysex = <span class="keyword">true</span>, <span class="keywordtype">bool</span> midiTime = <span class="keyword">true</span>, <span class="keywordtype">bool</span> midiSense = <span class="keyword">true</span> );
00177 
00179 
00186   <span class="keywordtype">double</span> <a class="code" href="classRtMidiIn.html#a11">getMessage</a>( std::vector&lt;unsigned char&gt; *message );
00187 
00188   <span class="comment">// A MIDI structure used internally by the class to store incoming</span>
00189   <span class="comment">// messages.  Each message represents one and only one MIDI message.</span>
00190   <span class="keyword">struct </span>MidiMessage { 
00191     std::vector&lt;unsigned char&gt; bytes; 
00192     <span class="keywordtype">double</span> timeStamp;
00193 
00194     <span class="comment">// Default constructor.</span>
00195     MidiMessage()
00196       :bytes(3), timeStamp(0.0) {}
00197   };
00198 
00199   <span class="comment">// The RtMidiInData structure is used to pass private class data to</span>
00200   <span class="comment">// the MIDI input handling function or thread.</span>
00201   <span class="keyword">struct </span>RtMidiInData {
00202     std::queue&lt;MidiMessage&gt; queue;
00203     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueLimit;
00204     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ignoreFlags;
00205     <span class="keywordtype">bool</span> doInput;
00206     <span class="keywordtype">bool</span> firstMessage;
00207     <span class="keywordtype">void</span> *apiData;
00208     <span class="keywordtype">bool</span> usingCallback;
00209     <span class="keywordtype">void</span> *userCallback;
00210     <span class="keywordtype">void</span> *userData;
00211 
00212     <span class="comment">// Default constructor.</span>
00213     RtMidiInData()
00214       : queueLimit(1024), ignoreFlags(7), doInput(false), firstMessage(true),
00215         apiData(0), usingCallback(false), userCallback(0), userData(0) {}
00216   };
00217 
00218  <span class="keyword">private</span>:
00219 
00220   <span class="keywordtype">void</span> initialize( <span class="keywordtype">void</span> );
00221   RtMidiInData inputData_;
00222 
00223 };
00224 
00225 <span class="comment">/**********************************************************************/</span>
00237 <span class="comment">/**********************************************************************/</span>
00238 
<a name="l00239"></a><a class="code" href="classRtMidiOut.html">00239</a> <span class="keyword">class </span><a class="code" href="classRtMidiOut.html">RtMidiOut</a> : <span class="keyword">public</span> <a class="code" href="classRtMidi.html">RtMidi</a>
00240 {
00241  <span class="keyword">public</span>:
00242 
00244 
00247   <a class="code" href="classRtMidiOut.html#a0">RtMidiOut</a>();
00248 
00250   <a class="code" href="classRtMidiOut.html#a1">~RtMidiOut</a>();
00251 
00253 
00259   <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a2">openPort</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
00260 
00262   <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a3">closePort</a>();
00263 
00265 
00273   <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a4">openVirtualPort</a>();
00274 
00276   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidiOut.html#a5">getPortCount</a>();
00277 
00279 
00282   std::string <a class="code" href="classRtMidiOut.html#a6">getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber );
00283 
00285 
00289   <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a7">sendMessage</a>( std::vector&lt;unsigned char&gt; *message );
00290 
00291  <span class="keyword">private</span>:
00292 
00293   <span class="keywordtype">void</span> initialize( <span class="keywordtype">void</span> );
00294 };
00295 
00296 <span class="preprocessor">#endif</span>
</pre></div><HR>

<table><tr><td><img src="../images/mcgill.gif" width=165></td>
  <td>&copy;2003-2004 Gary P. Scavone, McGill University. All Rights Reserved.<br>
  Maintained by Gary P. Scavone, gary at music.mcgill.ca</td></tr>
</table>

</BODY>
</HTML>