From: werner s. <wsc...@us...> - 2006-02-08 17:33:49
|
Update of /cvsroot/lmuse/muse/muse In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13468/muse Modified Files: exportmidi.cpp midifile.cpp midifile.h song.h Log Message: misc updates Index: midifile.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midifile.h,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** midifile.h 25 Jan 2006 16:24:32 -0000 1.8 --- midifile.h 8 Feb 2006 17:33:41 -0000 1.9 *************** *** 75,84 **** MidiFileTrackList* trackList() { return _tracks; } int tracks() const { return ntracks; } ! void setTrackList(MidiFileTrackList* tr, int n) { _tracks = tr; - ntracks = n; } ! void setDivision(int d) { _division = d; } int division() const { return _division; } MidiInstrumentType midiType() const { return _midiType; } }; --- 75,84 ---- MidiFileTrackList* trackList() { return _tracks; } int tracks() const { return ntracks; } ! void setTrackList(MidiFileTrackList* tr) { _tracks = tr; } ! void setDivision(int d) { _division = d; } int division() const { return _division; } + void setFormat(int val) { format = val; } MidiInstrumentType midiType() const { return _midiType; } }; Index: song.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/song.h,v retrieving revision 1.86 retrieving revision 1.87 diff -C2 -d -r1.86 -r1.87 *** song.h 7 Feb 2006 16:59:35 -0000 1.86 --- song.h 8 Feb 2006 17:33:41 -0000 1.87 *************** *** 366,370 **** void markerChanged(int); void midiPortsChanged(); ! void midiEvent(MidiEvent); void trackAdded(Track*, int idx); void trackRemoved(Track*); --- 366,370 ---- void markerChanged(int); void midiPortsChanged(); ! void midiEvent(const MidiEvent&); void trackAdded(Track*, int idx); void trackRemoved(Track*); Index: midifile.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midifile.cpp,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** midifile.cpp 25 Jan 2006 16:24:32 -0000 1.28 --- midifile.cpp 8 Feb 2006 17:33:41 -0000 1.29 *************** *** 593,599 **** write("MThd", 4); writeLong(6); // header len ! writeShort(config.smfFormat); ! if (config.smfFormat == 0) { ! writeShort(1); MidiFileTrack dst; for (iMidiFileTrack i = _tracks->begin(); i != _tracks->end(); ++i) { --- 593,599 ---- write("MThd", 4); writeLong(6); // header len ! writeShort(format); ! if (format == 0) { ! // ?? writeShort(1); MidiFileTrack dst; for (iMidiFileTrack i = _tracks->begin(); i != _tracks->end(); ++i) { *************** *** 607,612 **** } else { ! writeShort(ntracks); ! writeShort(_division); for (ciMidiFileTrack i = _tracks->begin(); i != _tracks->end(); ++i) --- 607,611 ---- } else { ! writeShort(_tracks->size()); writeShort(_division); for (ciMidiFileTrack i = _tracks->begin(); i != _tracks->end(); ++i) Index: exportmidi.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/exportmidi.cpp,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** exportmidi.cpp 2 Feb 2006 18:00:22 -0000 1.23 --- exportmidi.cpp 8 Feb 2006 17:33:41 -0000 1.24 *************** *** 121,229 **** return; } - printf("write\n"); fp.open(QIODevice::WriteOnly); MidiFile mf(&fp); - MidiTrackList* tl = song->midis(); - int ntracks = tl->size(); MidiFileTrackList* mtl = new MidiFileTrackList; ! int i = 0; ! for (iMidiTrack im = tl->begin(); im != tl->end(); ++im, ++i) { MidiTrack* track = *im; MidiFileTrack* mft = new MidiFileTrack; mtl->push_back(mft); MPEventList* l = &(mft->events); int port = 0; // track->channel()->port(); int channel = track->channel()->channelNo(); - //--------------------------------------------------- - // only first midi track contains - // - Track Marker - // - copyright - // - time signature - // - tempo map - // - GM/GS/XG Initialization - //--------------------------------------------------- - - if (i == 0) { - //--------------------------------------------------- - // Write Track Marker - // - AL::MarkerList* ml = song->marker(); - for (AL::ciMarker m = ml->begin(); m != ml->end(); ++m) { - const char* name = m->second.name().toLatin1().data(); - int len = strlen(name); - MidiEvent ev(m->first, ME_META, (unsigned char*)name, len); - ev.setA(0x6); - l->add(ev); - } - - //--------------------------------------------------- - // Write Copyright - // - const char* copyright = config.copyright.toLatin1().data(); - if (copyright && *copyright) { - int len = strlen(copyright); - MidiEvent ev(0, ME_META, (unsigned char*)copyright, len); - ev.setA(0x2); - l->add(ev); - } - - //--------------------------------------------------- - // Write Coment - // - QString comment = track->comment(); - if (!comment.isEmpty()) { - int len = comment.length(); - MidiEvent ev(0, ME_META, (const unsigned char*)(comment.toLatin1().data()), len); - ev.setA(0x1); - l->add(ev); - } - - //--------------------------------------------------- - // Write Tempomap - // - AL::TempoList* tl = &AL::tempomap; - for (AL::ciTEvent e = tl->begin(); e != tl->end(); ++e) { - AL::TEvent* event = e->second; - unsigned char data[3]; - int tempo = event->tempo; - data[2] = tempo & 0xff; - data[1] = (tempo >> 8) & 0xff; - data[0] = (tempo >> 16) & 0xff; - MidiEvent ev(event->tick, ME_META, data, 3); - ev.setA(0x51); - l->add(ev); - } - - //--------------------------------------------------- - // Write Signatures - // - const AL::SigList* sl = &AL::sigmap; - for (AL::ciSigEvent e = sl->begin(); e != sl->end(); ++e) { - AL::SigEvent* event = e->second; - unsigned char data[2]; - data[0] = event->sig.z; - switch(event->sig.n) { - case 1: data[1] = 0; break; - case 2: data[1] = 1; break; - case 4: data[1] = 2; break; - case 8: data[1] = 3; break; - case 16: data[1] = 4; break; - case 32: data[1] = 5; break; - case 64: data[1] = 6; break; - default: - fprintf(stderr, "falsche Signatur; nenner %d\n", event->sig.n); - break; - } - MidiEvent ev(event->tick, ME_META, data, 2); - ev.setA(0x58); - l->add(ev); - } - } - //----------------------------------- // managed controller --- 121,143 ---- return; } fp.open(QIODevice::WriteOnly); MidiFile mf(&fp); + int format = exportMidiDialog->smf0->isChecked() ? 0 : 1; + mf.setFormat(format); MidiFileTrackList* mtl = new MidiFileTrackList; ! MidiTrackList* mt = song->midis(); ! for (iMidiTrack im = mt->begin(); im != mt->end(); ++im) { MidiTrack* track = *im; MidiFileTrack* mft = new MidiFileTrack; mtl->push_back(mft); + MPEventList* l = &(mft->events); int port = 0; // track->channel()->port(); int channel = track->channel()->channelNo(); //----------------------------------- // managed controller *************** *** 341,346 **** } } mf.setDivision(config.midiDivision); ! mf.setTrackList(mtl, ntracks); mf.write(); fp.close(); --- 255,328 ---- } } + + MidiFileTrack* mft = mtl->front(); + MPEventList* l = &(mft->events); + + //--------------------------------------------------- + // Write Track Marker + // + AL::MarkerList* ml = song->marker(); + for (AL::ciMarker m = ml->begin(); m != ml->end(); ++m) { + const char* name = m->second.name().toLatin1().data(); + int len = strlen(name); + MidiEvent ev(m->first, ME_META, (unsigned char*)name, len); + ev.setA(0x6); + l->add(ev); + } + + //--------------------------------------------------- + // Write Copyright + // + const char* copyright = config.copyright.toLatin1().data(); + if (copyright && *copyright) { + int len = strlen(copyright); + MidiEvent ev(0, ME_META, (unsigned char*)copyright, len); + ev.setA(0x2); + l->add(ev); + } + + //--------------------------------------------------- + // Write Tempomap + // + AL::TempoList* tl = &AL::tempomap; + for (AL::ciTEvent e = tl->begin(); e != tl->end(); ++e) { + AL::TEvent* event = e->second; + unsigned char data[3]; + int tempo = event->tempo; + data[2] = tempo & 0xff; + data[1] = (tempo >> 8) & 0xff; + data[0] = (tempo >> 16) & 0xff; + MidiEvent ev(event->tick, ME_META, data, 3); + ev.setA(0x51); + l->add(ev); + } + + //--------------------------------------------------- + // Write Signatures + // + const AL::SigList* sl = &AL::sigmap; + for (AL::ciSigEvent e = sl->begin(); e != sl->end(); ++e) { + AL::SigEvent* event = e->second; + unsigned char data[2]; + data[0] = event->sig.z; + switch(event->sig.n) { + case 1: data[1] = 0; break; + case 2: data[1] = 1; break; + case 4: data[1] = 2; break; + case 8: data[1] = 3; break; + case 16: data[1] = 4; break; + case 32: data[1] = 5; break; + case 64: data[1] = 6; break; + default: + fprintf(stderr, "falsche Signatur; nenner %d\n", event->sig.n); + break; + } + MidiEvent ev(event->tick, ME_META, data, 2); + ev.setA(0x58); + l->add(ev); + } + mf.setDivision(config.midiDivision); ! mf.setTrackList(mtl); mf.write(); fp.close(); *************** *** 356,359 **** --- 338,343 ---- setupUi(this); + smf0->setChecked(config.smfFormat == 0); + smf1->setChecked(config.smfFormat == 1); QFileInfo fi(name); QString s(fi.path() + "/" + fi.baseName() + ".mid"); |