// // Programmer: Craig Stuart Sapp // Creation Date: Tue Feb 2 15:06:12 PST 2016 // Last Modified: Tue Feb 2 15:06:15 PST 2016 // Filename: tools/mid2mtb.cpp // URL: https://github.com/craigsapp/midifile/blob/master/tools/mid2mtb.cpp // Syntax: C++11 // vim: ts=3 // // Description: Converts a MIDI file into a MIDI Toolbox compatible // text file. // #include "MidiFile.h" #include "Options.h" #include #include #include #include #include using namespace std; using namespace smf; void convertMidiFile (MidiFile& midifile, vector >& matlab); void checkOptions (Options& opts, int argc, char** argv); void example (void); void usage (const char* command); void printEvent (vector& event); void printLegend (MidiFile& midifile); void printMatlabArray (MidiFile& midifile, vector >& matlab); // User interface variables Options options; vector > matlabarray; ////////////////////////////////////////////////////////////////////////// int main(int argc, char* argv[]) { matlabarray.reserve(100000); matlabarray.clear(); checkOptions(options, argc, argv); MidiFile midifile(options.getArg(1)); convertMidiFile(midifile, matlabarray); printMatlabArray(midifile, matlabarray); return 0; } ////////////////////////////////////////////////////////////////////////// ////////////////////////////// // // convertMidiFile -- // void convertMidiFile(MidiFile& midifile, vector >& matlab) { midifile.absoluteTicks(); midifile.linkNotePairs(); midifile.joinTracks(); midifile.doTimeAnalysis(); vector parameters(8); // 1: beat on time // 2: beat duration // 3: channel // 4: pitch # // 5: velocity // 6: start time (seconds) // 7: duration (seconds) // 8: track double tpq = midifile.getTicksPerQuarterNote(); double beatstart; double beatdur; double starttime; double duration; double channel; double key; double velocity; double track; for (int i=0; i >& matlab) { int i; printLegend(midifile); for (i=0; i<(int)matlab.size(); i++) { printEvent(matlab[i]); } } ////////////////////////////// // // printEvent -- print the event // void printEvent(vector& event) { for (int i=0; i<(int)event.size(); i++) { cout << event[i]; if (i<(int)event.size()-1) { cout << "\t"; } } cout << "\n"; }