From: terminator356 <ter...@us...> - 2009-03-09 02:05:41
|
Update of /cvsroot/lmuse/muse/muse/arranger In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv15085/muse/arranger Modified Files: Tag: REL07 arranger.cpp arranger.h pcanvas.cpp trackinfo.cpp Log Message: See ChangeLog Index: trackinfo.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/arranger/trackinfo.cpp,v retrieving revision 1.10.2.5 retrieving revision 1.10.2.6 diff -C2 -d -r1.10.2.5 -r1.10.2.6 *** trackinfo.cpp 18 Feb 2009 04:51:17 -0000 1.10.2.5 --- trackinfo.cpp 9 Mar 2009 02:05:18 -0000 1.10.2.6 *************** *** 209,216 **** //--------------------------------------------------------- ! // iProgramChanged //--------------------------------------------------------- ! void Arranger::iProgramChanged() { MidiTrack* track = (MidiTrack*)selected; --- 209,216 ---- //--------------------------------------------------------- ! // iProgHBankChanged //--------------------------------------------------------- ! void Arranger::iProgHBankChanged() { MidiTrack* track = (MidiTrack*)selected; *************** *** 220,224 **** int lbank = midiTrackInfo->iLBank->value(); int prog = midiTrackInfo->iProgram->value(); - //MidiPort *mp = &midiPorts[port]; if (hbank > 0 && hbank < 129) --- 220,223 ---- *************** *** 235,260 **** prog = 0xff; ! /* ! int curval = mp->hwCtrlState(channel, CTRL_PROGRAM); ! int lastv = mp->lastValidHWCtrlState(channel, CTRL_PROGRAM); ! ! if(prog == 0xff) ! { ! //if(lastv != CTRL_VAL_UNKNOWN || ((lastv & 0xffffff) != 0xffffff)) ! if(lastv != CTRL_VAL_UNKNOWN) audio->msgSetHwCtrlState(mp, channel, CTRL_PROGRAM, CTRL_VAL_UNKNOWN); } else { ! if(lastv == CTRL_VAL_UNKNOWN) ! program = 0xffff00 | prog; ! else ! program = (lastv & 0xffff00) | prog; } ! */ ! program = (hbank << 16) + (lbank << 8) + prog; MidiPlayEvent ev(0, port, channel, ME_CONTROLLER, CTRL_PROGRAM, program); audio->msgPlayMidiEvent(&ev); MidiInstrument* instr = midiPorts[port].instrument(); const char* name = instr->getPatchName(channel, program, song->mtype(), track->type() == Track::DRUM); --- 234,359 ---- prog = 0xff; ! MidiPort* mp = &midiPorts[port]; ! if(prog == 0xff && hbank == 0xff && lbank == 0xff) ! { ! program = CTRL_VAL_UNKNOWN; ! if(mp->hwCtrlState(channel, CTRL_PROGRAM) != CTRL_VAL_UNKNOWN) audio->msgSetHwCtrlState(mp, channel, CTRL_PROGRAM, CTRL_VAL_UNKNOWN); + return; } + + int np = mp->hwCtrlState(channel, CTRL_PROGRAM); + if(np == CTRL_VAL_UNKNOWN) + { + np = mp->lastValidHWCtrlState(channel, CTRL_PROGRAM); + if(np != CTRL_VAL_UNKNOWN) + { + lbank = (np & 0xff00) >> 8; + prog = np & 0xff; + if(prog == 0xff) + prog = 0; + int ilbnk = lbank; + int iprog = prog; + if(ilbnk == 0xff) + ilbnk = -1; + ++ilbnk; + ++iprog; + midiTrackInfo->iLBank->blockSignals(true); + midiTrackInfo->iProgram->blockSignals(true); + midiTrackInfo->iLBank->setValue(ilbnk); + midiTrackInfo->iProgram->setValue(iprog); + midiTrackInfo->iLBank->blockSignals(false); + midiTrackInfo->iProgram->blockSignals(false); + } + } + + if(prog == 0xff && (hbank != 0xff || lbank != 0xff)) + { + prog = 0; + midiTrackInfo->iProgram->blockSignals(true); + midiTrackInfo->iProgram->setValue(1); + midiTrackInfo->iProgram->blockSignals(false); + } + program = (hbank << 16) + (lbank << 8) + prog; + MidiPlayEvent ev(0, port, channel, ME_CONTROLLER, CTRL_PROGRAM, program); + audio->msgPlayMidiEvent(&ev); + + MidiInstrument* instr = midiPorts[port].instrument(); + const char* name = instr->getPatchName(channel, program, song->mtype(), track->type() == Track::DRUM); + midiTrackInfo->iPatch->setText(QString(name)); + // updateTrackInfo(); + } + + //--------------------------------------------------------- + // iProgLBankChanged + //--------------------------------------------------------- + + void Arranger::iProgLBankChanged() + { + MidiTrack* track = (MidiTrack*)selected; + int channel = track->outChannel(); + int port = track->outPort(); + int hbank = midiTrackInfo->iHBank->value(); + int lbank = midiTrackInfo->iLBank->value(); + int prog = midiTrackInfo->iProgram->value(); + + if (hbank > 0 && hbank < 129) + hbank -= 1; + else + hbank = 0xff; + if (lbank > 0 && lbank < 129) + lbank -= 1; + else + lbank = 0xff; + if (prog > 0 && prog < 129) + prog -= 1; else + prog = 0xff; + + MidiPort* mp = &midiPorts[port]; + if(prog == 0xff && hbank == 0xff && lbank == 0xff) { ! program = CTRL_VAL_UNKNOWN; ! if(mp->hwCtrlState(channel, CTRL_PROGRAM) != CTRL_VAL_UNKNOWN) ! audio->msgSetHwCtrlState(mp, channel, CTRL_PROGRAM, CTRL_VAL_UNKNOWN); ! return; } ! ! int np = mp->hwCtrlState(channel, CTRL_PROGRAM); ! if(np == CTRL_VAL_UNKNOWN) ! { ! np = mp->lastValidHWCtrlState(channel, CTRL_PROGRAM); ! if(np != CTRL_VAL_UNKNOWN) ! { ! hbank = (np & 0xff0000) >> 16; ! prog = np & 0xff; ! if(prog == 0xff) ! prog = 0; ! int ihbnk = hbank; ! int iprog = prog; ! if(ihbnk == 0xff) ! ihbnk = -1; ! ++ihbnk; ! ++iprog; ! midiTrackInfo->iHBank->blockSignals(true); ! midiTrackInfo->iProgram->blockSignals(true); ! midiTrackInfo->iHBank->setValue(ihbnk); ! midiTrackInfo->iProgram->setValue(iprog); ! midiTrackInfo->iHBank->blockSignals(false); ! midiTrackInfo->iProgram->blockSignals(false); ! } ! } ! ! if(prog == 0xff && (hbank != 0xff || lbank != 0xff)) ! { ! prog = 0; ! midiTrackInfo->iProgram->blockSignals(true); ! midiTrackInfo->iProgram->setValue(1); ! midiTrackInfo->iProgram->blockSignals(false); ! } program = (hbank << 16) + (lbank << 8) + prog; MidiPlayEvent ev(0, port, channel, ME_CONTROLLER, CTRL_PROGRAM, program); audio->msgPlayMidiEvent(&ev); + MidiInstrument* instr = midiPorts[port].instrument(); const char* name = instr->getPatchName(channel, program, song->mtype(), track->type() == Track::DRUM); *************** *** 264,267 **** --- 363,445 ---- //--------------------------------------------------------- + // iProgramChanged + //--------------------------------------------------------- + + void Arranger::iProgramChanged() + { + MidiTrack* track = (MidiTrack*)selected; + int channel = track->outChannel(); + int port = track->outPort(); + int hbank = midiTrackInfo->iHBank->value(); + int lbank = midiTrackInfo->iLBank->value(); + int prog = midiTrackInfo->iProgram->value(); + + if (hbank > 0 && hbank < 129) + hbank -= 1; + else + hbank = 0xff; + if (lbank > 0 && lbank < 129) + lbank -= 1; + else + lbank = 0xff; + if (prog > 0 && prog < 129) + prog -= 1; + else + prog = 0xff; + + MidiPort *mp = &midiPorts[port]; + if(prog == 0xff) + { + program = CTRL_VAL_UNKNOWN; + midiTrackInfo->iHBank->blockSignals(true); + midiTrackInfo->iLBank->blockSignals(true); + midiTrackInfo->iHBank->setValue(0); + midiTrackInfo->iLBank->setValue(0); + midiTrackInfo->iHBank->blockSignals(false); + midiTrackInfo->iLBank->blockSignals(false); + + if(mp->hwCtrlState(channel, CTRL_PROGRAM) != CTRL_VAL_UNKNOWN) + audio->msgSetHwCtrlState(mp, channel, CTRL_PROGRAM, CTRL_VAL_UNKNOWN); + return; + } + else + { + int np = mp->hwCtrlState(channel, CTRL_PROGRAM); + if(np == CTRL_VAL_UNKNOWN) + { + np = mp->lastValidHWCtrlState(channel, CTRL_PROGRAM); + if(np != CTRL_VAL_UNKNOWN) + { + hbank = (np & 0xff0000) >> 16; + lbank = (np & 0xff00) >> 8; + int ihbnk = hbank; + int ilbnk = lbank; + if(ihbnk == 0xff) + ihbnk = -1; + if(ilbnk == 0xff) + ilbnk = -1; + ++ihbnk; + ++ilbnk; + midiTrackInfo->iHBank->blockSignals(true); + midiTrackInfo->iLBank->blockSignals(true); + midiTrackInfo->iHBank->setValue(ihbnk); + midiTrackInfo->iLBank->setValue(ilbnk); + midiTrackInfo->iHBank->blockSignals(false); + midiTrackInfo->iLBank->blockSignals(false); + } + } + program = (hbank << 16) + (lbank << 8) + prog; + MidiPlayEvent ev(0, port, channel, ME_CONTROLLER, CTRL_PROGRAM, program); + audio->msgPlayMidiEvent(&ev); + + MidiInstrument* instr = midiPorts[port].instrument(); + const char* name = instr->getPatchName(channel, program, song->mtype(), track->type() == Track::DRUM); + midiTrackInfo->iPatch->setText(QString(name)); + } + + // updateTrackInfo(); + } + + //--------------------------------------------------------- // iLautstChanged //--------------------------------------------------------- *************** *** 405,412 **** return; ! int num = mctl->num(); ! ! int lastv = mp->lastValidHWCtrlState(chan, num); ! int curv = mp->hwCtrlState(chan, num); if(curv == CTRL_VAL_UNKNOWN) --- 583,588 ---- return; ! int lastv = mp->lastValidHWCtrlState(chan, CTRL_PROGRAM); ! int curv = mp->hwCtrlState(chan, CTRL_PROGRAM); if(curv == CTRL_VAL_UNKNOWN) *************** *** 429,438 **** //} ! MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, num, kiv); audio->msgPlayMidiEvent(&ev); } else { ! MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, num, lastv); audio->msgPlayMidiEvent(&ev); } --- 605,615 ---- //} ! //MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, num, kiv); ! MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_PROGRAM, kiv); audio->msgPlayMidiEvent(&ev); } else { ! MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_PROGRAM, lastv); audio->msgPlayMidiEvent(&ev); } *************** *** 440,445 **** else { ! if(mp->hwCtrlState(chan, num) != CTRL_VAL_UNKNOWN) ! audio->msgSetHwCtrlState(mp, chan, num, CTRL_VAL_UNKNOWN); } --- 617,622 ---- else { ! if(mp->hwCtrlState(chan, CTRL_PROGRAM) != CTRL_VAL_UNKNOWN) ! audio->msgSetHwCtrlState(mp, chan, CTRL_PROGRAM, CTRL_VAL_UNKNOWN); } *************** *** 462,469 **** return; ! int num = mctl->num(); ! ! int lastv = mp->lastValidHWCtrlState(chan, num); ! int curv = mp->hwCtrlState(chan, num); if(curv == CTRL_VAL_UNKNOWN) --- 639,644 ---- return; ! int lastv = mp->lastValidHWCtrlState(chan, CTRL_VOLUME); ! int curv = mp->hwCtrlState(chan, CTRL_VOLUME); if(curv == CTRL_VAL_UNKNOWN) *************** *** 487,496 **** } ! MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, num, kiv); audio->msgPlayMidiEvent(&ev); } else { ! MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, num, lastv); audio->msgPlayMidiEvent(&ev); } --- 662,671 ---- } ! MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_VOLUME, kiv); audio->msgPlayMidiEvent(&ev); } else { ! MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_VOLUME, lastv); audio->msgPlayMidiEvent(&ev); } *************** *** 498,503 **** else { ! if(mp->hwCtrlState(chan, num) != CTRL_VAL_UNKNOWN) ! audio->msgSetHwCtrlState(mp, chan, num, CTRL_VAL_UNKNOWN); } --- 673,678 ---- else { ! if(mp->hwCtrlState(chan, CTRL_VOLUME) != CTRL_VAL_UNKNOWN) ! audio->msgSetHwCtrlState(mp, chan, CTRL_VOLUME, CTRL_VAL_UNKNOWN); } *************** *** 520,527 **** return; ! int num = mctl->num(); ! ! int lastv = mp->lastValidHWCtrlState(chan, num); ! int curv = mp->hwCtrlState(chan, num); if(curv == CTRL_VAL_UNKNOWN) --- 695,700 ---- return; ! int lastv = mp->lastValidHWCtrlState(chan, CTRL_PANPOT); ! int curv = mp->hwCtrlState(chan, CTRL_PANPOT); if(curv == CTRL_VAL_UNKNOWN) *************** *** 545,554 **** } ! MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, num, kiv); audio->msgPlayMidiEvent(&ev); } else { ! MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, num, lastv); audio->msgPlayMidiEvent(&ev); } --- 718,727 ---- } ! MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_PANPOT, kiv); audio->msgPlayMidiEvent(&ev); } else { ! MidiPlayEvent ev(0, port, chan, ME_CONTROLLER, CTRL_PANPOT, lastv); audio->msgPlayMidiEvent(&ev); } *************** *** 556,561 **** else { ! if(mp->hwCtrlState(chan, num) != CTRL_VAL_UNKNOWN) ! audio->msgSetHwCtrlState(mp, chan, num, CTRL_VAL_UNKNOWN); } --- 729,734 ---- else { ! if(mp->hwCtrlState(chan, CTRL_PANPOT) != CTRL_VAL_UNKNOWN) ! audio->msgSetHwCtrlState(mp, chan, CTRL_PANPOT, CTRL_VAL_UNKNOWN); } *************** *** 577,582 **** connect(midiTrackInfo->iOutputChannel, SIGNAL(valueChanged(int)), SLOT(iOutputChannelChanged(int))); connect(midiTrackInfo->iInputChannel, SIGNAL(textChanged(const QString&)), SLOT(iInputChannelChanged(const QString&))); ! connect(midiTrackInfo->iHBank, SIGNAL(valueChanged(int)), SLOT(iProgramChanged())); ! connect(midiTrackInfo->iLBank, SIGNAL(valueChanged(int)), SLOT(iProgramChanged())); connect(midiTrackInfo->iProgram, SIGNAL(valueChanged(int)), SLOT(iProgramChanged())); connect(midiTrackInfo->iHBank, SIGNAL(doubleClicked()), SLOT(iProgramDoubleClicked())); --- 750,755 ---- connect(midiTrackInfo->iOutputChannel, SIGNAL(valueChanged(int)), SLOT(iOutputChannelChanged(int))); connect(midiTrackInfo->iInputChannel, SIGNAL(textChanged(const QString&)), SLOT(iInputChannelChanged(const QString&))); ! connect(midiTrackInfo->iHBank, SIGNAL(valueChanged(int)), SLOT(iProgHBankChanged())); ! connect(midiTrackInfo->iLBank, SIGNAL(valueChanged(int)), SLOT(iProgLBankChanged())); connect(midiTrackInfo->iProgram, SIGNAL(valueChanged(int)), SLOT(iProgramChanged())); connect(midiTrackInfo->iHBank, SIGNAL(doubleClicked()), SLOT(iProgramDoubleClicked())); *************** *** 595,598 **** --- 768,774 ---- connect(midiTrackInfo->iInput, SIGNAL(textChanged(const QString&)), SLOT(iInputPortChanged(const QString&))); connect(midiTrackInfo->recordButton, SIGNAL(clicked()), SLOT(recordClicked())); + connect(midiTrackInfo->progRecButton, SIGNAL(clicked()), SLOT(progRecClicked())); + connect(midiTrackInfo->volRecButton, SIGNAL(clicked()), SLOT(volRecClicked())); + connect(midiTrackInfo->panRecButton, SIGNAL(clicked()), SLOT(panRecClicked())); } *************** *** 708,711 **** --- 884,909 ---- // int nprogram = mp->getCtrl(outChannel, tick, CTRL_PROGRAM); int nprogram = mp->hwCtrlState(outChannel, CTRL_PROGRAM); + if(nprogram == CTRL_VAL_UNKNOWN) + { + midiTrackInfo->iHBank->blockSignals(true); + midiTrackInfo->iLBank->blockSignals(true); + midiTrackInfo->iProgram->blockSignals(true); + midiTrackInfo->iHBank->setValue(0); + midiTrackInfo->iLBank->setValue(0); + midiTrackInfo->iProgram->setValue(0); + midiTrackInfo->iHBank->blockSignals(false); + midiTrackInfo->iLBank->blockSignals(false); + midiTrackInfo->iProgram->blockSignals(false); + + program = CTRL_VAL_UNKNOWN; + nprogram = mp->lastValidHWCtrlState(outChannel, CTRL_PROGRAM); + if(nprogram != CTRL_VAL_UNKNOWN) + { + MidiInstrument* instr = midiPorts[outPort].instrument(); + const char* name = instr->getPatchName(outChannel, nprogram, song->mtype(), track->type() == Track::DRUM); + midiTrackInfo->iPatch->setText(QString(name)); + } + } + else if (program != nprogram) { program = nprogram; Index: arranger.h =================================================================== RCS file: /cvsroot/lmuse/muse/muse/arranger/arranger.h,v retrieving revision 1.17.2.10 retrieving revision 1.17.2.11 diff -C2 -d -r1.17.2.10 -r1.17.2.11 *** arranger.h 2 Feb 2009 21:38:00 -0000 1.17.2.10 --- arranger.h 9 Mar 2009 02:05:18 -0000 1.17.2.11 *************** *** 125,128 **** --- 125,130 ---- void iInputPortChanged(const QString&); void iOutputPortChanged(int); + void iProgHBankChanged(); + void iProgLBankChanged(); void iProgramChanged(); void iProgramDoubleClicked(); *************** *** 148,151 **** --- 150,156 ---- void seek(); void recordClicked(); + void progRecClicked(); + void volRecClicked(); + void panRecClicked(); void verticalScrollSetYpos(unsigned); Index: pcanvas.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/arranger/Attic/pcanvas.cpp,v retrieving revision 1.48.2.18 retrieving revision 1.48.2.19 diff -C2 -d -r1.48.2.18 -r1.48.2.19 *** pcanvas.cpp 2 Feb 2009 21:38:00 -0000 1.48.2.18 --- pcanvas.cpp 9 Mar 2009 02:05:18 -0000 1.48.2.19 *************** *** 1260,1263 **** --- 1260,1267 ---- from -= pTick; to -= pTick; + if(from < 0) + from = 0; + if((unsigned int)to > part->lenTick()) + to = part->lenTick(); QRect r = item->bbox(); Index: arranger.cpp =================================================================== RCS file: /cvsroot/lmuse/muse/muse/arranger/arranger.cpp,v retrieving revision 1.33.2.15 retrieving revision 1.33.2.16 diff -C2 -d -r1.33.2.15 -r1.33.2.16 *** arranger.cpp 10 Feb 2009 01:18:57 -0000 1.33.2.15 --- arranger.cpp 9 Mar 2009 02:05:18 -0000 1.33.2.16 *************** *** 699,706 **** //--------------------------------------------------------- ! // recordClicked //--------------------------------------------------------- ! void Arranger::recordClicked() { MidiTrack* track = (MidiTrack*)selected; --- 699,706 ---- //--------------------------------------------------------- ! // progRecClicked //--------------------------------------------------------- ! void Arranger::progRecClicked() { MidiTrack* track = (MidiTrack*)selected; *************** *** 709,733 **** MidiPort* port = &midiPorts[portno]; int program = port->hwCtrlState(channel, CTRL_PROGRAM); ! int volume = port->hwCtrlState(channel, CTRL_VOLUME); ! int pan = port->hwCtrlState(channel, CTRL_PANPOT); unsigned tick = song->cpos(); ! Event a(Controller), b(Controller), c(Controller); a.setTick(tick); - b.setTick(tick); - c.setTick(tick); a.setA(CTRL_PROGRAM); a.setB(program); - b.setA(CTRL_VOLUME); - b.setB(volume); - c.setA(CTRL_PANPOT); - c.setB(pan); song->recordEvent(track, a); - song->recordEvent(track, b); - song->recordEvent(track, c); } //--------------------------------------------------------- // trackInfoScroll //--------------------------------------------------------- --- 709,812 ---- MidiPort* port = &midiPorts[portno]; int program = port->hwCtrlState(channel, CTRL_PROGRAM); ! if(program == CTRL_VAL_UNKNOWN || program == 0xffffff) ! return; unsigned tick = song->cpos(); ! Event a(Controller); a.setTick(tick); a.setA(CTRL_PROGRAM); a.setB(program); song->recordEvent(track, a); } //--------------------------------------------------------- + // volRecClicked + //--------------------------------------------------------- + + void Arranger::volRecClicked() + { + MidiTrack* track = (MidiTrack*)selected; + int portno = track->outPort(); + int channel = track->outChannel(); + MidiPort* port = &midiPorts[portno]; + int volume = port->hwCtrlState(channel, CTRL_VOLUME); + if(volume == CTRL_VAL_UNKNOWN) + return; + + unsigned tick = song->cpos(); + Event a(Controller); + a.setTick(tick); + a.setA(CTRL_VOLUME); + a.setB(volume); + + song->recordEvent(track, a); + } + + //--------------------------------------------------------- + // panRecClicked + //--------------------------------------------------------- + + void Arranger::panRecClicked() + { + MidiTrack* track = (MidiTrack*)selected; + int portno = track->outPort(); + int channel = track->outChannel(); + MidiPort* port = &midiPorts[portno]; + int pan = port->hwCtrlState(channel, CTRL_PANPOT); + if(pan == CTRL_VAL_UNKNOWN) + return; + + unsigned tick = song->cpos(); + Event a(Controller); + a.setTick(tick); + a.setA(CTRL_PANPOT); + a.setB(pan); + + song->recordEvent(track, a); + } + + //--------------------------------------------------------- + // recordClicked + //--------------------------------------------------------- + + void Arranger::recordClicked() + { + MidiTrack* track = (MidiTrack*)selected; + int portno = track->outPort(); + int channel = track->outChannel(); + MidiPort* port = &midiPorts[portno]; + unsigned tick = song->cpos(); + + int program = port->hwCtrlState(channel, CTRL_PROGRAM); + if(program != CTRL_VAL_UNKNOWN && program != 0xffffff) + { + Event a(Controller); + a.setTick(tick); + a.setA(CTRL_PROGRAM); + a.setB(program); + song->recordEvent(track, a); + } + int volume = port->hwCtrlState(channel, CTRL_VOLUME); + if(volume != CTRL_VAL_UNKNOWN) + { + Event a(Controller); + a.setTick(tick); + a.setA(CTRL_VOLUME); + a.setB(volume); + song->recordEvent(track, a); + } + int pan = port->hwCtrlState(channel, CTRL_PANPOT); + if(pan != CTRL_VAL_UNKNOWN) + { + Event a(Controller); + a.setTick(tick); + a.setA(CTRL_PANPOT); + a.setB(pan); + song->recordEvent(track, a); + } + } + + //--------------------------------------------------------- // trackInfoScroll //--------------------------------------------------------- |