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
|
<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> <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.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.0, 17 September 2004</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 <string></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">protected</span>:
00049
00050 <a class="code" href="classRtMidi.html">RtMidi</a>();
00051
00052 <span class="keyword">virtual</span> ~<a class="code" href="classRtMidi.html">RtMidi</a>() {};
00053
00054 <span class="comment">// A basic error reporting function for internal use in the RtMidi</span>
00055 <span class="comment">// subclasses. The behavior of this function can be modified to</span>
00056 <span class="comment">// suit specific needs.</span>
00057 <span class="keywordtype">void</span> error( RtError::Type type );
00058
00059 <span class="keyword">virtual</span> <span class="keywordtype">void</span> openPort( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 ) = 0;
00060
00061 <span class="keywordtype">void</span> *apiData_;
00062 <span class="keywordtype">bool</span> connected_;
00063 std::string errorString_;
00064 };
00065
00066 <span class="comment">/**********************************************************************/</span>
00082 <span class="comment">/**********************************************************************/</span>
00083
00084 <span class="preprocessor">#include <vector></span>
00085 <span class="preprocessor">#include <queue></span>
00086
<a name="l00087"></a><a class="code" href="classRtMidiIn.html">00087</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>
00088 {
00089 <span class="keyword">public</span>:
00090
<a name="l00092"></a><a class="code" href="classRtMidiIn.html#s0">00092</a> <span class="keyword">typedef</span> void (*RtMidiCallback)( <span class="keywordtype">double</span> timeStamp, std::vector<unsigned char> *message, <span class="keywordtype">void</span> *userData);
00093
00095
00098 <a class="code" href="classRtMidiIn.html#a0">RtMidiIn</a>();
00099
00101 <a class="code" href="classRtMidiIn.html#a1">~RtMidiIn</a>();
00102
00104
00108 <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 );
00109
00111
00117 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a3">openVirtualPort</a>();
00118
00120
00126 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a4">setCallback</a>( RtMidiCallback callback, <span class="keywordtype">void</span> *userData = 0 );
00127
00129
00133 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a5">cancelCallback</a>();
00134
00136 <span class="keywordtype">void</span> <a class="code" href="classRtMidiIn.html#a6">closePort</a>( <span class="keywordtype">void</span> );
00137
00139 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidiIn.html#a7">getPortCount</a>();
00140
00142
00145 std::string <a class="code" href="classRtMidiIn.html#a8">getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber = 0 );
00146
00148
00152 <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 );
00153
00155
00162 <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> );
00163
00165
00172 <span class="keywordtype">double</span> <a class="code" href="classRtMidiIn.html#a11">getMessage</a>( std::vector<unsigned char> *message );
00173
00174 <span class="comment">// A MIDI structure used internally by the class to store incoming</span>
00175 <span class="comment">// messages. Each message represents one and only one MIDI message.</span>
00176 <span class="keyword">struct </span>MidiMessage {
00177 std::vector<unsigned char> bytes;
00178 <span class="keywordtype">double</span> timeStamp;
00179
00180 <span class="comment">// Default constructor.</span>
00181 MidiMessage()
00182 :bytes(3), timeStamp(0.0) {}
00183 };
00184
00185 <span class="comment">// The RtMidiInData structure is used to pass private class data to</span>
00186 <span class="comment">// the MIDI input handling function or thread.</span>
00187 <span class="keyword">struct </span>RtMidiInData {
00188 std::queue<MidiMessage> queue;
00189 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> queueLimit;
00190 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> ignoreFlags;
00191 <span class="keywordtype">bool</span> doInput;
00192 <span class="keywordtype">bool</span> firstMessage;
00193 <span class="keywordtype">void</span> *apiData;
00194 <span class="keywordtype">bool</span> usingCallback;
00195 <span class="keywordtype">void</span> *userCallback;
00196 <span class="keywordtype">void</span> *userData;
00197
00198 <span class="comment">// Default constructor.</span>
00199 RtMidiInData()
00200 : queueLimit(1024), ignoreFlags(7), doInput(false), firstMessage(true),
00201 apiData(0), usingCallback(false), userCallback(0), userData(0) {}
00202 };
00203
00204 <span class="keyword">private</span>:
00205
00206 <span class="keywordtype">void</span> initialize( <span class="keywordtype">void</span> );
00207 RtMidiInData inputData_;
00208
00209 };
00210
00211 <span class="comment">/**********************************************************************/</span>
00223 <span class="comment">/**********************************************************************/</span>
00224
<a name="l00225"></a><a class="code" href="classRtMidiOut.html">00225</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>
00226 {
00227 <span class="keyword">public</span>:
00228
00230
00233 <a class="code" href="classRtMidiOut.html#a0">RtMidiOut</a>();
00234
00236 <a class="code" href="classRtMidiOut.html#a1">~RtMidiOut</a>();
00237
00239
00245 <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 );
00246
00248 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a3">closePort</a>();
00249
00251
00259 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a4">openVirtualPort</a>();
00260
00262 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classRtMidiOut.html#a5">getPortCount</a>();
00263
00265
00268 std::string <a class="code" href="classRtMidiOut.html#a6">getPortName</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> portNumber );
00269
00271
00275 <span class="keywordtype">void</span> <a class="code" href="classRtMidiOut.html#a7">sendMessage</a>( std::vector<unsigned char> *message );
00276
00277 <span class="keyword">private</span>:
00278
00279 <span class="keywordtype">void</span> initialize( <span class="keywordtype">void</span> );
00280 };
00281
00282 <span class="preprocessor">#endif</span>
</pre></div><HR>
<table><tr><td><img src="../images/mcgill.gif" width=165></td>
<td>©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>
|