summaryrefslogtreecommitdiff
path: root/doc/html/RtMidi_8h-source.html
blob: 9bda7a296dbfa00fdf548f1f2f71bd15e1d2e7cc (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
<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.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 &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">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 &lt;vector&gt;</span>
00085 <span class="preprocessor">#include &lt;queue&gt;</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&lt;unsigned char&gt; *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&lt;unsigned char&gt; *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&lt;unsigned char&gt; 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&lt;MidiMessage&gt; 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&lt;unsigned char&gt; *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>&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>