From 6e5e3f9216120582e25f032c1626f670355dd604 Mon Sep 17 00:00:00 2001 From: Robert Jonsson Date: Sat, 29 Dec 2012 15:47:30 +0000 Subject: write automation paramters names --- muse2/muse/arranger/pcanvas.cpp | 41 ++++++++++++++++++++++++++--------------- muse2/muse/arranger/tlist.cpp | 13 ++++++++++++- muse2/muse/midiseq.cpp | 5 ++++- 3 files changed, 42 insertions(+), 17 deletions(-) diff --git a/muse2/muse/arranger/pcanvas.cpp b/muse2/muse/arranger/pcanvas.cpp index ccd727aa..b842a532 100644 --- a/muse2/muse/arranger/pcanvas.cpp +++ b/muse2/muse/arranger/pcanvas.cpp @@ -3564,7 +3564,8 @@ void PartCanvas::drawAutomation(QPainter& p, const QRect& rr, MusECore::AudioTra { //p.restore(); return; - } + } + int xpixel = oldX; int oldY = -1; int ypixel = oldY; @@ -3575,24 +3576,30 @@ void PartCanvas::drawAutomation(QPainter& p, const QRect& rr, MusECore::AudioTra QPen pen2(cl->color(), 2); pen2.setCosmetic(true); - // First check that there ARE automation, ic == cl->end means no automation - if (ic == cl->end()) + // Store first value for later + double yfirst; { - double y; - if (cl->valueType() == MusECore::VAL_LOG ) { // use db scale for volume - y = logToVal(cl->curVal(), min, max); // represent volume between 0 and 1 - if (y < 0) y = 0.0; - } - else - y = (cl->curVal() - min)/(max-min); // we need to set curVal between 0 and 1 - ypixel = oldY = bottom - rmapy_f(y) * height; + if (cl->valueType() == MusECore::VAL_LOG ) { // use db scale for volume + yfirst = logToVal(cl->curVal(), min, max); // represent volume between 0 and 1 + if (yfirst < 0) yfirst = 0.0; + } + else { + yfirst = (cl->curVal() - min)/(max-min); // we need to set curVal between 0 and 1 + } + yfirst = oldY = bottom - rmapy_f(yfirst) * height; + } + + // Check that there IS automation, ic == cl->end means no automation + if (ic == cl->end()) + { + ypixel = yfirst; } else { for (; ic !=cl->end(); ++ic) { double y = ic->second.val; - if (cl->valueType() == MusECore::VAL_LOG ) { // use db scale for volume + if (cl->valueType() == MusECore::VAL_LOG ) { y = logToVal(y, min, max); // represent volume between 0 and 1 if (y < 0) y = 0.0; } @@ -3617,8 +3624,6 @@ void PartCanvas::drawAutomation(QPainter& p, const QRect& rr, MusECore::AudioTra break; // draw a square around the point - //p.drawRect(mapx(MusEGlobal::tempomap.frame2tick(prevPosFrame))-2, (rr.bottom()-2)-prevVal*height-2, 5, 5); - //p.drawRect(mapx(MusEGlobal::tempomap.frame2tick(prevPosFrame))-1, (rr.bottom()-1)-prevVal*height-2, 3, 3); pen2.setColor((automation.currentCtrlValid && automation.currentCtrlList == cl && automation.currentCtrlFrameList.contains(ic->second.frame)) ? Qt::white : cl->color()); @@ -3637,10 +3642,16 @@ void PartCanvas::drawAutomation(QPainter& p, const QRect& rr, MusECore::AudioTra if (cl->valueType() == MusECore::VAL_LOG) { val = MusECore::fast_log10(ic->second.val) * 20.0; } - p.drawText(textRect, QString("Value: %1").arg(val)); + p.drawText(textRect, QString("Param: %1, Value: %2").arg(cl->name()).arg(val)); } } } + + p.setPen(pen1); + //int xTextPos = mapx(0) > rmapx(0) ? mapx(0) + 5 : rmapx(0) + 5; // follow window..(doesn't work very well) + int xTextPos = mapx(0) + 5; + p.drawText(xTextPos,yfirst,100,height-2,0,cl->name()); + if (xpixel <= rr.right()) { p.setPen(pen1); diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp index cbc1614f..262527a9 100644 --- a/muse2/muse/arranger/tlist.cpp +++ b/muse2/muse/arranger/tlist.cpp @@ -1446,7 +1446,18 @@ void TList::changeAutomation(QAction* act) if (id == cl->id()) // got it, change state cl->setVisible(act->isChecked()); } - MusEGlobal::song->update(SC_TRACK_MODIFIED); + + // if automation is OFF for the track we change it to READ as a convenience + // hopefully this confuses users far less than not understanding why the + // automation does not do anything. + if (((MusECore::AudioTrack*)editAutomation)->automationType() == AUTO_OFF) + { + MusEGlobal::audio->msgSetTrackAutomationType((MusECore::AudioTrack*)editAutomation, AUTO_READ); + if (MusEGlobal::debugMsg) + printf("Changing automation from OFF to READ\n"); + } + + MusEGlobal::song->update(SC_TRACK_MODIFIED|SC_AUTOMATION); } //--------------------------------------------------------- diff --git a/muse2/muse/midiseq.cpp b/muse2/muse/midiseq.cpp index 8e636658..8d0427d8 100644 --- a/muse2/muse/midiseq.cpp +++ b/muse2/muse/midiseq.cpp @@ -481,7 +481,9 @@ void MidiSeq::threadStop() int MidiSeq::setRtcTicks() { int gotTicks = timer->setTimerFreq(MusEGlobal::config.rtcTicks); - + if (MusEGlobal::config.rtcTicks-24 > gotTicks) { + printf("INFO: Could not get the wanted frequency %d, got %d, still it should suffice.\n", MusEGlobal::config.rtcTicks, gotTicks); + } timer->startTimer(); return gotTicks; } @@ -507,6 +509,7 @@ void MidiSeq::start(int priority) void MidiSeq::checkAndReportTimingResolution() { int freq = timer->getTimerFreq(); + printf("Aquired timer frequency: %d\n", freq); if (freq < 500) { if(MusEGlobal::config.warnIfBadTiming) { -- cgit v1.2.3