14#ifndef _MIDIFILE_H_INCLUDED
15#define _MIDIFILE_H_INCLUDED
47 MidiFile (
const std::string& filename);
60 bool read (
const std::string& filename);
61 bool read (std::istream& instream);
62 bool readBase64 (
const std::string& base64data);
66 bool readSmf (
const std::string& filename);
67 bool readSmf (std::istream& instream);
69 bool write (
const std::string& filename);
70 bool write (std::ostream& out);
71 bool writeBase64 (
const std::string& out,
int width = 0);
72 bool writeBase64 (std::ostream& out,
int width = 0);
74 bool writeHex (
const std::string& filename,
int width = 25);
75 bool writeHex (std::ostream& out,
int width = 25);
87 int size (
void)
const;
160 std::vector<uchar>& midiData);
174 int aChannel,
int key,
177 int aChannel,
int key,
180 int aChannel,
int key);
182 int aChannel,
int num,
185 int aChannel,
int patchnum);
187 int aChannel,
int patchnum);
189 int aChannel,
double amount);
193 int aChannel,
double range);
197 int aChannel,
int value);
199 int aChannel,
int value);
212 std::vector<uchar>& metaData);
215 const std::string& metaData);
217 const std::string& text);
219 const std::string& text);
221 const std::string& name);
223 const std::string& name);
225 const std::string& text);
227 const std::string& text);
229 const std::string& text);
233 int fifths,
bool mode = 0);
236 int clocksPerClick = 24,
237 int num32dsPerQuarter = 8);
240 int clocksPerClick = 36,
241 int num32dsPerQuarter = 8);
311 std::vector<uchar>& array,
312 uchar& runningCommand);
318 std::vector<uchar>& data);
320 static int ticksearch (
const void* A,
const void* B);
std::ostream & operator<<(std::ostream &out, smf::MidiFile &aMidiFile)
Definition MidiFile.cpp:3501
Definition MidiEventList.h:23
Definition MidiEvent.h:25
void setPitchBendRange(int aTrack, int aTick, int aChannel, double range)
Definition MidiFile.cpp:2154
void deleteTrack(int aTrack)
Definition MidiFile.cpp:2298
int getTrackCount(void) const
Definition MidiFile.cpp:922
void setDeltaTicks(void)
Definition MidiFile.h:92
int hasSplitTracks(void) const
Definition MidiFile.cpp:1225
static std::ostream & writeBigEndianULong(std::ostream &out, ulong value)
Definition MidiFile.cpp:3288
MidiEvent * addLyric(int aTrack, int aTick, const std::string &text)
Definition MidiFile.cpp:1815
void sortTrackNoteOffsBeforeOns(int track)
Definition MidiFile.cpp:2512
static std::ostream & writeLittleEndianShort(std::ostream &out, short value)
Definition MidiFile.cpp:3241
MidiEvent * addTempo(int aTrack, int aTick, double aTempo)
Definition MidiFile.cpp:1860
std::string base64Encode(const std::string &input)
Definition MidiFile.cpp:3434
MidiEvent * addPitchBend(int aTrack, int aTick, int aChannel, double amount)
Definition MidiFile.cpp:2109
int size(void) const
Definition MidiFile.cpp:938
void setFilename(const std::string &aname)
Definition MidiFile.cpp:1633
void clearLinks(void)
Definition MidiFile.cpp:2579
MidiEvent * addSustainPedalOff(int aTrack, int aTick, int aChannel)
Definition MidiFile.cpp:2233
int getTicksPerQuarterNote(void) const
Definition MidiFile.cpp:2367
MidiEvent * addKeySignature(int aTrack, int aTick, int fifths, bool mode=0)
Definition MidiFile.cpp:1884
double getFileDurationInSeconds(void)
Definition MidiFile.cpp:1453
void clear_no_deallocate(void)
Definition MidiFile.cpp:3090
static const char * GMinstrument[128]
Definition MidiFile.h:330
static std::ostream & writeLittleEndianUShort(std::ostream &out, ushort value)
Definition MidiFile.cpp:3211
void splitTracksByChannel(void)
Definition MidiFile.cpp:1132
void erase(void)
Definition MidiFile.cpp:2338
void setTPQ(int ticks)
Definition MidiFile.cpp:2468
void doTimeAnalysis(void)
Definition MidiFile.cpp:1491
static std::ostream & writeLittleEndianULong(std::ostream &out, ulong value)
Definition MidiFile.cpp:3271
MidiFile(void)
Definition MidiFile.cpp:77
void makeAbsoluteTicks(void)
Definition MidiFile.cpp:1327
int linkNotePairsFIFO(void)
Definition MidiFile.cpp:1586
void sortTrackNoteOnsBeforeOffs(int track)
Definition MidiFile.cpp:2504
ulong readVLValue(std::istream &inputfile)
Definition MidiFile.cpp:2998
MidiFile & operator=(const MidiFile &other)
Definition MidiFile.cpp:141
void mergeTracks(int aTrack1, int aTrack2)
Definition MidiFile.cpp:2416
void setTicksPerQuarterNote(int ticks)
Definition MidiFile.cpp:2460
int makeVLV(uchar *buffer, int number)
Definition MidiFile.cpp:1956
MidiEvent * addMarker(int aTrack, int aTick, const std::string &text)
Definition MidiFile.cpp:1830
static std::ostream & writeBigEndianLong(std::ostream &out, long value)
Definition MidiFile.cpp:3322
MidiEvent * addSustainPedalOn(int aTrack, int aTick, int aChannel)
Definition MidiFile.cpp:2214
MidiEvent * addTimeSignature(int aTrack, int aTick, int top, int bottom, int clocksPerClick=24, int num32dsPerQuarter=8)
Definition MidiFile.cpp:1917
MidiEvent * addCompoundTimeSignature(int aTrack, int aTick, int top, int bottom, int clocksPerClick=36, int num32dsPerQuarter=8)
Definition MidiFile.cpp:1940
bool m_rwstatus
Definition MidiFile.h:304
int getNumTracks(void) const
Definition MidiFile.cpp:930
ulong unpackVLV(uchar a=0, uchar b=0, uchar c=0, uchar d=0, uchar e=0)
Definition MidiFile.cpp:3024
double linearTickInterpolationAtSecond(double seconds)
Definition MidiFile.cpp:2602
int linkNotePairs(void)
Definition MidiFile.h:150
bool write(const std::string &filename)
Definition MidiFile.cpp:556
MidiEvent * addNoteOn(int aTrack, int aTick, int aChannel, int key, int vel)
Definition MidiFile.cpp:2010
bool m_timemapvalid
Definition MidiFile.h:298
bool read(const std::string &filename)
Definition MidiFile.cpp:195
MidiEvent * addPatchChange(int aTrack, int aTick, int aChannel, int patchnum)
Definition MidiFile.cpp:2075
void makeDeltaTicks(void)
Definition MidiFile.cpp:1276
int getTickState(void) const
Definition MidiFile.cpp:1366
MidiEvent * addSustainOff(int aTrack, int aTick, int aChannel)
Definition MidiFile.cpp:2225
void removeEmpties(void)
Definition MidiFile.cpp:950
bool isDeltaTicks(void) const
Definition MidiFile.cpp:1378
int getFileDurationInTicks(void)
Definition MidiFile.cpp:1407
static std::ostream & writeBigEndianShort(std::ostream &out, short value)
Definition MidiFile.cpp:3256
std::string m_readFileName
Definition MidiFile.h:295
static const std::vector< int > decodeLookup
Definition MidiFile.h:329
void sortTracksNoteOnsBeforeOffs(void)
Definition MidiFile.cpp:2527
MidiEvent * addTimbre(int aTrack, int aTick, int aChannel, int patchnum)
Definition MidiFile.cpp:2093
void clear(void)
Definition MidiFile.cpp:2323
std::string getBase64(int width=0)
Definition MidiFile.cpp:742
double getFileDurationInQuarters(void)
Definition MidiFile.cpp:1437
std::vector< _TickTime > m_timemap
Definition MidiFile.h:301
bool writeHex(const std::string &filename, int width=25)
Definition MidiFile.cpp:764
MidiEvent * addNoteOff(int aTrack, int aTick, int aChannel, int key, int vel)
Definition MidiFile.cpp:2025
static std::ostream & writeLittleEndianFloat(std::ostream &out, float value)
Definition MidiFile.cpp:3357
int getSplitTrack(int track, int index) const
Definition MidiFile.cpp:1240
void deltaTicks(void)
Definition MidiFile.cpp:1311
static int ticksearch(const void *A, const void *B)
Definition MidiFile.cpp:3110
MidiEvent * addTrackName(int aTrack, int aTick, const std::string &name)
Definition MidiFile.cpp:1784
int linkNotePairsLIFO(void)
Definition MidiFile.cpp:1600
static std::ostream & writeBigEndianDouble(std::ostream &out, double value)
Definition MidiFile.cpp:3374
MidiEvent * addController(int aTrack, int aTick, int aChannel, int num, int value)
Definition MidiFile.cpp:2058
double getAbsoluteTickTime(double starttime)
Definition MidiFile.cpp:1545
void setMillisecondTicks(void)
Definition MidiFile.cpp:2488
void buildTimeMap(void)
Definition MidiFile.cpp:2750
bool isAbsoluteTicks(void) const
Definition MidiFile.cpp:1390
bool writeBinasc(const std::string &filename)
Definition MidiFile.cpp:814
int hasJoinedTracks(void) const
Definition MidiFile.cpp:1213
void absoluteTicks(void)
Definition MidiFile.cpp:1354
static std::ostream & writeLittleEndianDouble(std::ostream &out, double value)
Definition MidiFile.cpp:3395
bool writeBinascWithComments(const std::string &filename)
Definition MidiFile.cpp:853
void sortTracks(void)
Definition MidiFile.h:115
MidiEvent * addSustain(int aTrack, int aTick, int aChannel, int value)
Definition MidiFile.cpp:2187
void writeVLValue(long aValue, std::vector< uchar > &data)
Definition MidiFile.cpp:3056
MidiEvent * addEvent(int aTrack, int aTick, std::vector< uchar > &midiData)
Definition MidiFile.cpp:1661
void sortTrack(int track)
Definition MidiFile.h:112
static std::ostream & writeBigEndianFloat(std::ostream &out, float value)
Definition MidiFile.cpp:3340
MidiEvent * addSustainPedal(int aTrack, int aTick, int aChannel, int value)
Definition MidiFile.cpp:2195
void clearSequence(void)
Definition MidiFile.cpp:1000
void splitTracks(void)
Definition MidiFile.cpp:1079
MidiEvent * addCue(int aTrack, int aTick, const std::string &text)
Definition MidiFile.cpp:1845
~MidiFile()
Definition MidiFile.cpp:121
const MidiEventList & operator[](int aTrack) const
Definition MidiFile.cpp:911
int addTrack(void)
Definition MidiFile.cpp:2246
int m_ticksPerQuarterNote
Definition MidiFile.h:282
static std::string getGMInstrumentName(int patchIndex)
Definition MidiFile.cpp:3417
bool writeBase64(const std::string &out, int width=0)
Definition MidiFile.cpp:697
void allocateEvents(int track, int aSize)
Definition MidiFile.cpp:2283
bool readBase64(const std::string &base64data)
Definition MidiFile.cpp:249
int extractMidiData(std::istream &inputfile, std::vector< uchar > &array, uchar &runningCommand)
Definition MidiFile.cpp:2823
int getTrackState(void) const
Definition MidiFile.cpp:1201
static const std::string encodeLookup
Definition MidiFile.h:328
int getTrackCountAsType1(void)
Definition MidiFile.cpp:2557
std::string base64Decode(const std::string &input)
Definition MidiFile.cpp:3463
int m_theTrackState
Definition MidiFile.h:286
double linearSecondInterpolationAtTick(int ticktime)
Definition MidiFile.cpp:2670
void markSequence(void)
Definition MidiFile.cpp:971
int getNumEvents(int aTrack) const
Definition MidiFile.cpp:2400
bool readSmf(const std::string &filename)
Definition MidiFile.cpp:271
const char * getFilename(void) const
Definition MidiFile.cpp:1650
uchar readByte(std::istream &input)
Definition MidiFile.cpp:3193
static std::ostream & writeBigEndianUShort(std::ostream &out, ushort value)
Definition MidiFile.cpp:3226
void sortTracksNoteOffsBeforeOns(void)
Definition MidiFile.cpp:2537
static ushort readLittleEndian2Bytes(std::istream &input)
Definition MidiFile.cpp:3174
MidiEvent * addSustainOn(int aTrack, int aTick, int aChannel)
Definition MidiFile.cpp:2206
bool status(void) const
Definition MidiFile.cpp:892
double getTimeInSeconds(int aTrack, int anIndex)
Definition MidiFile.cpp:1503
static std::ostream & writeLittleEndianLong(std::ostream &out, long value)
Definition MidiFile.cpp:3305
void setAbsoluteTicks(void)
Definition MidiFile.h:95
bool m_linkedEventsQ
Definition MidiFile.h:307
MidiEvent * addCopyright(int aTrack, int aTick, const std::string &text)
Definition MidiFile.cpp:1769
MidiEvent & getEvent(int aTrack, int anIndex)
Definition MidiFile.cpp:2350
int addTracks(int count)
Definition MidiFile.cpp:2271
int linkEventPairs(void)
Definition MidiFile.cpp:1617
int getTPQ(void) const
Definition MidiFile.cpp:2383
static ulong readLittleEndian4Bytes(std::istream &input)
Definition MidiFile.cpp:3155
void joinTracks(void)
Definition MidiFile.cpp:1028
std::vector< MidiEventList * > m_events
Definition MidiFile.h:276
int getEventCount(int aTrack) const
Definition MidiFile.cpp:2395
int m_theTimeState
Definition MidiFile.h:291
MidiEvent * addText(int aTrack, int aTick, const std::string &text)
Definition MidiFile.cpp:1754
static int secondsearch(const void *A, const void *B)
Definition MidiFile.cpp:3129
MidiEvent * addInstrumentName(int aTrack, int aTick, const std::string &name)
Definition MidiFile.cpp:1799
MidiEvent * addMetaEvent(int aTrack, int aTick, int aType, std::vector< uchar > &metaData)
Definition MidiFile.cpp:1712
int tick
Definition MidiFile.h:39
double seconds
Definition MidiFile.h:40
@ TIME_STATE_ABSOLUTE
Definition MidiFile.h:34
@ TIME_STATE_DELTA
Definition MidiFile.h:33
unsigned short ushort
Definition Binasc.h:25
unsigned char uchar
Definition Binasc.h:24
unsigned long ulong
Definition Binasc.h:26
@ TRACK_STATE_JOINED
Definition MidiFile.h:29
@ TRACK_STATE_SPLIT
Definition MidiFile.h:28