MIPI - Physical Interface for MIDI Files
Loading...
Searching...
No Matches
MidiMessage.h
Go to the documentation of this file.
1//
2// Programmer: Craig Stuart Sapp <craig@ccrma.stanford.edu>
3// Creation Date: Sat Feb 14 20:36:32 PST 2015
4// Last Modified: Sat Apr 21 10:52:19 PDT 2018 Removed using namespace std;
5// Filename: midifile/include/MidiMessage.h
6// Website: http://midifile.sapp.org
7// Syntax: C++11
8// vim: ts=3 noexpandtab
9//
10// Description: Storage for bytes of a MIDI message for use in MidiFile
11// class.
12//
13
14#ifndef _MIDIMESSAGE_H_INCLUDED
15#define _MIDIMESSAGE_H_INCLUDED
16
17#include <iostream>
18#include <string>
19#include <utility>
20#include <vector>
21
22
23namespace smf {
24
25typedef unsigned char uchar;
26typedef unsigned short ushort;
27typedef unsigned long ulong;
28
29class MidiMessage : public std::vector<uchar> {
30
31 public:
32 MidiMessage (void);
33 MidiMessage (int command);
34 MidiMessage (int command, int p1);
35 MidiMessage (int command, int p1, int p2);
36 MidiMessage (const MidiMessage& message);
37 MidiMessage (const std::vector<uchar>& message);
38 MidiMessage (const std::vector<char>& message);
39 MidiMessage (const std::vector<int>& message);
40
41 ~MidiMessage ();
42
43 MidiMessage& operator= (const MidiMessage& message);
44 MidiMessage& operator= (const std::vector<uchar>& bytes);
45 MidiMessage& operator= (const std::vector<char>& bytes);
46 MidiMessage& operator= (const std::vector<int>& bytes);
47 MidiMessage& operator= (const std::initializer_list<int>& list);
48
49 void sortTrack (void);
51
52 static std::vector<uchar> intToVlv (int value);
53 static double frequencyToSemitones (double frequency, double a4frequency = 440.0);
54
55 // data access convenience functions (returns -1 if not present):
56 int getP0 (void) const;
57 int getP1 (void) const;
58 int getP2 (void) const;
59 int getP3 (void) const;
60 void setP0 (int value);
61 void setP1 (int value);
62 void setP2 (int value);
63 void setP3 (int value);
64
65 int getSize (void) const;
66 void setSize (int asize);
67 int setSizeToCommand (void);
68 int resizeToCommand (void);
69
70 // note-message convenience functions:
71 int getKeyNumber (void) const;
72 int getVelocity (void) const;
73 void setKeyNumber (int value);
74 void setVelocity (int value);
75 void setSpelling (int base7, int accidental);
76 void getSpelling (int& base7, int& accidental);
77
78 // controller-message convenience functions:
79 int getControllerNumber (void) const;
80 int getControllerValue (void) const;
81
82 int getCommandNibble (void) const;
83 int getCommandByte (void) const;
84 int getChannelNibble (void) const;
85 int getChannel (void) const;
86
87 void setCommandByte (int value);
88 void setCommand (int value);
89 void setCommand (int value, int p1);
90 void setCommand (int value, int p1, int p2);
91 void setCommandNibble (int value);
92 void setChannelNibble (int value);
93 void setChannel (int value);
94 void setParameters (int p1, int p2);
95 void setParameters (int p1);
96 void setMessage (const std::vector<uchar>& message);
97 void setMessage (const std::vector<char>& message);
98 void setMessage (const std::vector<int>& message);
99
100 // message-type convenience functions:
101 bool isMetaMessage (void) const;
102 bool isMeta (void) const;
103 bool isNote (void) const;
104 bool isNoteOff (void) const;
105 bool isNoteOn (void) const;
106 bool isAftertouch (void) const;
107 bool isController (void) const;
108 bool isSustain (void) const; // controller 64
109 bool isSustainOn (void) const;
110 bool isSustainOff (void) const;
111 bool isSoft (void) const; // controller 67
112 bool isSoftOn (void) const;
113 bool isSoftOff (void) const;
114 bool isPatchChange (void) const;
115 bool isTimbre (void) const;
116 bool isPressure (void) const;
117 bool isPitchbend (void) const;
118 bool isEmpty (void) const; // see MidiFile::removeEmpties()
119
120 // helper functions to create various MidiMessages:
121 void makeNoteOn (int channel, int key, int velocity);
122 void makeNoteOff (int channel, int key, int velocity);
123 void makeNoteOff (int channel, int key);
124 void makeNoteOff (void);
125 void makePatchChange (int channel, int patchnum);
126 void makeTimbre (int channel, int patchnum);
127 void makeController (int channel, int num, int value);
128 void makePitchBend (int channel, int lsb, int msb);
129 void makePitchBend (int channel, int value);
130 void makePitchBendDouble (int channel, double value);
131 void makePitchbend (int channel, int lsb, int msb) { makePitchBend(channel, lsb, msb); }
132 void makePitchbend (int channel, int value) { makePitchBend(channel, value); }
133 void makePitchbendDouble (int channel, double value) { makePitchBendDouble(channel, value); }
134
135 // helper functions to create various continuous controller messages:
136 void makeSustain (int channel, int value);
137 void makeSustainPedal (int channel, int value);
138 void makeSustainOn (int channel);
139 void makeSustainPedalOn (int channel);
140 void makeSustainOff (int channel);
141 void makeSustainPedalOff (int channel);
142
143 // meta-message creation and helper functions:
144 void makeMetaMessage (int mnum, const std::string& data);
145 void makeText (const std::string& name);
146 void makeCopyright (const std::string& text);
147 void makeTrackName (const std::string& name);
148 void makeInstrumentName (const std::string& name);
149 void makeLyric (const std::string& text);
150 void makeMarker (const std::string& text);
151 void makeCue (const std::string& text);
152 void makeKeySignature (int fifths, bool mode = 0);
153 void makeTimeSignature (int top, int bottom,
154 int clocksPerClick = 24,
155 int num32dsPerQuarter = 8);
156
157 void makeTempo (double tempo) { setTempo(tempo); }
158 int getTempoMicro (void) const;
159 int getTempoMicroseconds (void) const;
160 double getTempoSeconds (void) const;
161 double getTempoBPM (void) const;
162 double getTempoTPS (int tpq) const;
163 double getTempoSPT (int tpq) const;
164
165 int getMetaType (void) const;
166 bool isText (void) const;
167 bool isCopyright (void) const;
168 bool isTrackName (void) const;
169 bool isInstrumentName (void) const;
170 bool isLyricText (void) const;
171 bool isMarkerText (void) const;
172 bool isTempo (void) const;
173 bool isTimeSignature (void) const;
174 bool isKeySignature (void) const;
175 bool isEndOfTrack (void) const;
176
177 std::string getMetaContent (void) const;
178 void setMetaContent (const std::string& content);
179 void setTempo (double tempo);
180 void setTempoMicroseconds (int microseconds);
181 void setMetaTempo (double tempo);
182
183
184 void makeSysExMessage (const std::vector<uchar>& data);
185
186 // helper functions to create MTS tunings by key (real-time sysex)
187
188 // MTS type 2: Real-time frequency assignment to a arbitrary list of MIDI key numbers.
189 // See page 2 of: https://docs.google.com/viewer?url=https://www.midi.org/component/edocman/midi-tuning-updated/fdocument?Itemid=9999
190 void makeMts2_KeyTuningByFrequency (int key, double frequency, int program = 0);
191 void makeMts2_KeyTuningsByFrequency (int key, double frequency, int program = 0);
192 void makeMts2_KeyTuningsByFrequency (std::vector<std::pair<int, double>>& mapping, int program = 0);
193 void makeMts2_KeyTuningBySemitone (int key, double semitone, int program = 0);
194 void makeMts2_KeyTuningsBySemitone (int key, double semitone, int program = 0);
195 void makeMts2_KeyTuningsBySemitone (std::vector<std::pair<int, double>>& mapping, int program = 0);
196
197 // MTS type 9: Real-time octave temperaments by +/- 100 cents deviation from ET
198 // See page 7 of: https://docs.google.com/viewer?url=https://www.midi.org/component/edocman/midi-tuning-updated/fdocument?Itemid=9999
199 void makeMts9_TemperamentByCentsDeviationFromET (std::vector<double>& mapping, int referencePitchClass = 0, int channelMask = 0b1111111111111111);
200 void makeTemperamentEqual(int referencePitchClass = 0, int channelMask = 0b1111111111111111);
201 void makeTemperamentBad(double maxDeviationCents = 100.0, int referencePitchClass = 0, int channelMask = 0b1111111111111111);
202 void makeTemperamentPythagorean(int referencePitchClass = 2, int channelMask = 0b1111111111111111);
203 void makeTemperamentMeantone(double fraction = 0.25, int referencePitchClass = 2, int channelMask = 0b1111111111111111);
204 void makeTemperamentMeantoneCommaQuarter(int referencePitchClass = 2, int channelMask = 0b1111111111111111);
205 void makeTemperamentMeantoneCommaThird(int referencePitchClass = 2, int channelMask = 0b1111111111111111);
206 void makeTemperamentMeantoneCommaHalf(int referencePitchClass = 2, int channelMask = 0b1111111111111111);
207
208};
209
210
211std::ostream& operator<<(std::ostream& out, MidiMessage& event);
212
213
214} // end of namespace smf
215
216
217#endif /* _MIDIMESSAGE_H_INCLUDED */
218
219
220
Definition MidiMessage.h:29
void makeSustainOff(int channel)
Definition MidiMessage.cpp:1880
bool isPitchbend(void) const
Definition MidiMessage.cpp:573
void makeMts9_TemperamentByCentsDeviationFromET(std::vector< double > &mapping, int referencePitchClass=0, int channelMask=0b1111111111111111)
Definition MidiMessage.cpp:2202
void makeTemperamentMeantone(double fraction=0.25, int referencePitchClass=2, int channelMask=0b1111111111111111)
Definition MidiMessage.cpp:2313
bool isMarkerText(void) const
Definition MidiMessage.cpp:714
void setP1(int value)
Definition MidiMessage.cpp:966
bool isSoftOn(void) const
Definition MidiMessage.cpp:494
void makeTemperamentPythagorean(int referencePitchClass=2, int channelMask=0b1111111111111111)
Definition MidiMessage.cpp:2288
double getTempoBPM(void) const
Definition MidiMessage.cpp:250
bool isEmpty(void) const
Definition MidiMessage.cpp:590
bool isMeta(void) const
Definition MidiMessage.cpp:298
void setP2(int value)
Definition MidiMessage.cpp:985
bool isNote(void) const
Definition MidiMessage.cpp:370
void makeInstrumentName(const std::string &name)
Definition MidiMessage.cpp:1957
void makePatchChange(int channel, int patchnum)
Definition MidiMessage.cpp:1751
void setChannel(int value)
Definition MidiMessage.cpp:1176
void makePitchbend(int channel, int value)
Definition MidiMessage.h:132
int getControllerNumber(void) const
Definition MidiMessage.cpp:901
bool isText(void) const
Definition MidiMessage.cpp:619
void setP0(int value)
Definition MidiMessage.cpp:948
double getTempoSPT(int tpq) const
Definition MidiMessage.cpp:281
int setSizeToCommand(void)
Definition MidiMessage.cpp:165
bool isEndOfTrack(void) const
Definition MidiMessage.cpp:798
void makeSustainPedalOff(int channel)
Definition MidiMessage.cpp:1888
void makeSustainPedalOn(int channel)
Definition MidiMessage.cpp:1869
bool isNoteOn(void) const
Definition MidiMessage.cpp:350
bool isInstrumentName(void) const
Definition MidiMessage.cpp:677
bool isLyricText(void) const
Definition MidiMessage.cpp:696
int getTempoMicroseconds(void) const
Definition MidiMessage.cpp:220
void makeController(int channel, int num, int value)
Definition MidiMessage.cpp:1771
void makeTemperamentMeantoneCommaHalf(int referencePitchClass=2, int channelMask=0b1111111111111111)
Definition MidiMessage.cpp:2360
void sortTrack(void)
bool isAftertouch(void) const
Definition MidiMessage.cpp:382
bool isSoftOff(void) const
Definition MidiMessage.cpp:513
double getTempoTPS(int tpq) const
Definition MidiMessage.cpp:265
void setKeyNumber(int value)
Definition MidiMessage.cpp:1020
static std::vector< uchar > intToVlv(int value)
Definition MidiMessage.cpp:2006
void makeText(const std::string &name)
Definition MidiMessage.cpp:1918
void makeSustain(int channel, int value)
Definition MidiMessage.cpp:1842
bool isMetaMessage(void) const
Definition MidiMessage.cpp:316
void makeMetaMessage(int mnum, const std::string &data)
Definition MidiMessage.cpp:1902
void setCommandByte(int value)
Definition MidiMessage.cpp:1107
bool isTempo(void) const
Definition MidiMessage.cpp:732
int resizeToCommand(void)
Definition MidiMessage.cpp:198
double getTempoSeconds(void) const
Definition MidiMessage.cpp:233
int getSize(void) const
Definition MidiMessage.cpp:150
void setSpelling(int base7, int accidental)
Definition MidiMessage.cpp:1269
int getP3(void) const
Definition MidiMessage.cpp:842
void makeTemperamentMeantoneCommaQuarter(int referencePitchClass=2, int channelMask=0b1111111111111111)
Definition MidiMessage.cpp:2338
static double frequencyToSemitones(double frequency, double a4frequency=440.0)
Definition MidiMessage.cpp:2088
void makeKeySignature(int fifths, bool mode=0)
Definition MidiMessage.cpp:1624
void setTempo(double tempo)
Definition MidiMessage.cpp:1586
~MidiMessage()
Definition MidiMessage.cpp:80
void makeTimeSignature(int top, int bottom, int clocksPerClick=24, int num32dsPerQuarter=8)
Definition MidiMessage.cpp:1659
bool isCopyright(void) const
Definition MidiMessage.cpp:640
int getMetaType(void) const
Definition MidiMessage.cpp:603
void makeMts2_KeyTuningBySemitone(int key, double semitone, int program=0)
Definition MidiMessage.cpp:2147
int getVelocity(void) const
Definition MidiMessage.cpp:878
int getTempoMicro(void) const
Definition MidiMessage.cpp:211
void sortTrackWithSequence(void)
bool isNoteOff(void) const
Definition MidiMessage.cpp:328
void makeSysExMessage(const std::vector< uchar > &data)
Definition MidiMessage.cpp:2049
void setVelocity(int value)
Definition MidiMessage.cpp:1037
MidiMessage & operator=(const MidiMessage &message)
Definition MidiMessage.cpp:91
void makePitchbend(int channel, int lsb, int msb)
Definition MidiMessage.h:131
void makeMarker(const std::string &text)
Definition MidiMessage.cpp:1983
int getChannelNibble(void) const
Definition MidiMessage.cpp:1087
void makePitchbendDouble(int channel, double value)
Definition MidiMessage.h:133
void makePitchBendDouble(int channel, double value)
Definition MidiMessage.cpp:1815
void makeTemperamentMeantoneCommaThird(int referencePitchClass=2, int channelMask=0b1111111111111111)
Definition MidiMessage.cpp:2349
void makeTrackName(const std::string &name)
Definition MidiMessage.cpp:1944
bool isController(void) const
Definition MidiMessage.cpp:400
void makeMts2_KeyTuningsByFrequency(int key, double frequency, int program=0)
Definition MidiMessage.cpp:2111
void setMetaTempo(double tempo)
Definition MidiMessage.cpp:1574
void setP3(int value)
Definition MidiMessage.cpp:1004
bool isSustainOff(void) const
Definition MidiMessage.cpp:456
void setCommandNibble(int value)
Definition MidiMessage.cpp:1149
int getP2(void) const
Definition MidiMessage.cpp:831
void setMessage(const std::vector< uchar > &message)
Definition MidiMessage.cpp:1216
void makeNoteOn(int channel, int key, int velocity)
Definition MidiMessage.cpp:1691
void makeMts2_KeyTuningsBySemitone(int key, double semitone, int program=0)
Definition MidiMessage.cpp:2140
bool isKeySignature(void) const
Definition MidiMessage.cpp:777
void makePitchBend(int channel, int lsb, int msb)
Definition MidiMessage.cpp:1790
void makeMts2_KeyTuningByFrequency(int key, double frequency, int program=0)
Definition MidiMessage.cpp:2118
void setParameters(int p1, int p2)
Definition MidiMessage.cpp:1199
int getP0(void) const
Definition MidiMessage.cpp:809
int getKeyNumber(void) const
Definition MidiMessage.cpp:856
void makeNoteOff(void)
Definition MidiMessage.cpp:1733
int getCommandByte(void) const
Definition MidiMessage.cpp:1069
int getCommandNibble(void) const
Definition MidiMessage.cpp:1053
void makeCue(const std::string &text)
Definition MidiMessage.cpp:1996
void setTempoMicroseconds(int microseconds)
Definition MidiMessage.cpp:1598
void setMetaContent(const std::string &content)
Definition MidiMessage.cpp:1546
void setSize(int asize)
Definition MidiMessage.cpp:139
bool isSoft(void) const
Definition MidiMessage.cpp:475
bool isTimeSignature(void) const
Definition MidiMessage.cpp:754
void makeSustainOn(int channel)
Definition MidiMessage.cpp:1861
void makeTimbre(int channel, int patchnum)
Definition MidiMessage.cpp:1761
bool isPressure(void) const
Definition MidiMessage.cpp:555
void setCommand(int value)
Definition MidiMessage.cpp:1115
int getChannel(void) const
Definition MidiMessage.cpp:1096
MidiMessage(void)
Definition MidiMessage.cpp:31
void makeTemperamentEqual(int referencePitchClass=0, int channelMask=0b1111111111111111)
Definition MidiMessage.cpp:2255
bool isSustainOn(void) const
Definition MidiMessage.cpp:437
void getSpelling(int &base7, int &accidental)
Definition MidiMessage.cpp:1384
void setChannelNibble(int value)
Definition MidiMessage.cpp:1168
bool isPatchChange(void) const
Definition MidiMessage.cpp:543
int getP1(void) const
Definition MidiMessage.cpp:820
bool isTrackName(void) const
Definition MidiMessage.cpp:658
bool isSustain(void) const
Definition MidiMessage.cpp:418
void makeLyric(const std::string &text)
Definition MidiMessage.cpp:1970
void makeSustainPedal(int channel, int value)
Definition MidiMessage.cpp:1850
bool isTimbre(void) const
Definition MidiMessage.cpp:532
std::string getMetaContent(void) const
Definition MidiMessage.cpp:1509
int getControllerValue(void) const
Definition MidiMessage.cpp:924
void makeTemperamentBad(double maxDeviationCents=100.0, int referencePitchClass=0, int channelMask=0b1111111111111111)
Definition MidiMessage.cpp:2267
void makeCopyright(const std::string &text)
Definition MidiMessage.cpp:1931
void makeTempo(double tempo)
Definition MidiMessage.h:157
Definition Binasc.h:22
unsigned short ushort
Definition Binasc.h:25
unsigned char uchar
Definition Binasc.h:24
std::ostream & operator<<(std::ostream &out, MidiEvent &event)
Definition MidiEvent.cpp:296
unsigned long ulong
Definition Binasc.h:26