summaryrefslogtreecommitdiff
path: root/muse2/muse/ctrl.cpp
diff options
context:
space:
mode:
authorRobert Jonsson <spamatica@gmail.com>2011-02-15 21:35:24 +0000
committerRobert Jonsson <spamatica@gmail.com>2011-02-15 21:35:24 +0000
commitc9f1ce13e1d785191b112d5ef0291cb93f5a6393 (patch)
tree69e85aa69d0c3ef9229ef2664d2a465df52e70a0 /muse2/muse/ctrl.cpp
parentaec6829af3ae4a7925ac5926f033702226db6a55 (diff)
automation fixes
Diffstat (limited to 'muse2/muse/ctrl.cpp')
-rw-r--r--muse2/muse/ctrl.cpp69
1 files changed, 44 insertions, 25 deletions
diff --git a/muse2/muse/ctrl.cpp b/muse2/muse/ctrl.cpp
index bb77e0c5..922da337 100644
--- a/muse2/muse/ctrl.cpp
+++ b/muse2/muse/ctrl.cpp
@@ -13,6 +13,9 @@
#include <QColor>
//#include <stdlib.h>
+#include "gconfig.h"
+#include "fastlog.h"
+#include "math.h"
#include "globals.h"
#include "ctrl.h"
#include "xml.h"
@@ -79,19 +82,20 @@ CtrlList::CtrlList()
//---------------------------------------------------------
double CtrlList::value(int frame)
- {
+{
if (!automation || empty()) {
return _curVal;
}
- ciCtrl i = upper_bound(frame);
- if (i == end()) {
+
+ ciCtrl i = upper_bound(frame); // get the index after current frame
+
+ if (i == end()) { // if we are past all items just return the last value
ciCtrl i = end();
--i;
const CtrlVal& val = i->second;
_curVal = val.val;
}
- else
- if(_mode == DISCRETE)
+ else if(_mode == DISCRETE)
{
if(i == begin())
_curVal = _default;
@@ -103,28 +107,43 @@ double CtrlList::value(int frame)
}
}
else {
- int frame2 = i->second.frame;
- double val2 = i->second.val;
- int frame1;
- double val1;
- if (i == begin()) {
- frame1 = 0;
- val1 = _default;
- }
- else {
- --i;
- frame1 = i->second.frame;
- val1 = i->second.val;
- }
- frame -= frame1;
- val2 -= val1;
- frame2 -= frame1;
- val1 += (frame * val2)/frame2;
- _curVal = val1;
- }
+ int frame2 = i->second.frame;
+ double val2 = i->second.val;
+ int frame1;
+ double val1;
+ if (i == begin()) {
+ frame1 = 0;
+ val1 = _default;
+ }
+ else {
+ --i;
+ frame1 = i->second.frame;
+ val1 = i->second.val;
+ }
+ //printf("before val1=%f val2=%f\n", val1,val2);
+ if (_valueType == VAL_LOG) {
+ val1 = 20.0*fast_log10(val1);
+ if (val1 < config.minSlider)
+ val1=config.minSlider;
+ val2 = 20.0*fast_log10(val2);
+ if (val2 < config.minSlider)
+ val2=config.minSlider;
+ }
+ //printf("after val1=%f val2=%f\n", val1,val2);
+ frame -= frame1;
+ val2 -= val1;
+ frame2 -= frame1;
+ val1 += (double(frame) * val2)/double(frame2);
+
+ if (_valueType == VAL_LOG) {
+ val1 = exp10(val1/20.0);
+ }
+ //printf("after val1=%f\n", val1);
+ _curVal = val1;
+ }
// printf("autoVal %d %f\n", frame, _curVal);
return _curVal;
- }
+}
//---------------------------------------------------------