From: Mathias L. <lun...@us...> - 2004-07-16 23:31:52
|
Update of /cvsroot/lmuse/muse/muse In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27941/muse Modified Files: midi.cpp Log Message: bugfix for handling of recorded events (vs played events). earlier, velocity + transposition settings for the track followed along to the recorded events, resulting in transposition or velocity modification being done twice (1st time when recording, 2nd time during playback). this handling is a bit messy, but i don't want to clean up here before 0.7....... Index: midi.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/midi.cpp,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -d -r1.41 -r1.42 *** midi.cpp 14 Jul 2004 15:27:26 -0000 1.41 --- midi.cpp 16 Jul 2004 23:31:42 -0000 1.42 *************** *** 772,776 **** // if (track->recordFlag()) { - //TODO: Map events for drumtracks according to the drumInmap int portMask = track->inPortMask(); int channelMask = track->inChannelMask(); --- 772,775 ---- *************** *** 792,796 **** MidiPlayEvent event(*ie); ! int drumRecPitch; event.setChannel(track->outChannel()); --- 791,796 ---- MidiPlayEvent event(*ie); ! int drumRecPitch; //Hmmm, hehhh... TODO: Clean up a bit around here when it comes to separate events for rec & for playback. But not before 0.7 (ml) ! int prePitch = 0, preVelo = 0; event.setChannel(track->outChannel()); *************** *** 812,816 **** } else { //Track transpose if non-drum ! int pitch = event.dataA() + track->transposition; if (pitch > 127) pitch = 127; --- 812,817 ---- } else { //Track transpose if non-drum ! prePitch = event.dataA(); ! int pitch = prePitch + track->transposition; if (pitch > 127) pitch = 127; *************** *** 821,825 **** if (!event.isNoteOff()) { ! int velo = event.dataB() + track->velocity; velo = (velo * track->compression) / 100; if (velo > 127) --- 822,827 ---- if (!event.isNoteOff()) { ! preVelo = event.dataB(); ! int velo = preVelo + track->velocity; velo = (velo * track->compression) / 100; if (velo > 127) *************** *** 849,862 **** time = tempomap.frame2tick(event.time()); event.setTime(time); // set tick time if (recording) { if (track->type() == Track::DRUM) { MidiPlayEvent drumRecEvent = event; drumRecEvent.setA(drumRecPitch); drumRecEvent.setPort(port); drumRecEvent.setChannel(track->outChannel()); //rec-event to current channel rl->add(drumRecEvent); } ! else ! rl->add(event); } } --- 851,874 ---- time = tempomap.frame2tick(event.time()); event.setTime(time); // set tick time + + // Special handling of events stored in rec-lists. a bit hACKish. TODO: Clean up (after 0.7)! :-/ (ml) if (recording) { if (track->type() == Track::DRUM) { MidiPlayEvent drumRecEvent = event; drumRecEvent.setA(drumRecPitch); + drumRecEvent.setB(preVelo); drumRecEvent.setPort(port); drumRecEvent.setChannel(track->outChannel()); //rec-event to current channel rl->add(drumRecEvent); } ! else { ! // Restore record-pitch to non-transposed value since we don't want the note transposed twice next ! MidiPlayEvent recEvent = event; ! if (prePitch) ! recEvent.setA(prePitch); ! if (preVelo) ! recEvent.setB(preVelo); ! rl->add(recEvent); ! } } } |