summaryrefslogtreecommitdiff
path: root/dgedit
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2013-04-23 20:43:59 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2013-04-23 20:43:59 +0200
commiteafdef4a5e7bb6cbed75b17a38a9b0e30c6e51a6 (patch)
tree61e74113c3b38df8aff60a764d36a884da1a597a /dgedit
parent75ca97372cdcf9b42ada94bfdd13589d677cba91 (diff)
Add some sliders to control internal parameters of the editor.
Diffstat (limited to 'dgedit')
-rw-r--r--dgedit/canvastoollisten.cc14
-rw-r--r--dgedit/canvastoollisten.h4
-rw-r--r--dgedit/canvastoolselections.cc16
-rw-r--r--dgedit/canvastoolselections.h6
-rw-r--r--dgedit/mainwindow.cc26
5 files changed, 60 insertions, 6 deletions
diff --git a/dgedit/canvastoollisten.cc b/dgedit/canvastoollisten.cc
index 4254137..f638f93 100644
--- a/dgedit/canvastoollisten.cc
+++ b/dgedit/canvastoollisten.cc
@@ -43,6 +43,8 @@ Player::Player(Canvas *c)
sf.byte_format = AO_FMT_NATIVE;
dev = ao_open_live(ao_default_driver_id(), &sf, 0);
+
+ volume = 1000;
}
Player::~Player()
@@ -57,7 +59,7 @@ void Player::run()
if(playing) {
short s[BUFSZ];
for(size_t i = 0; i < BUFSZ; i++) {
- if(i + pos < canvas->size) s[i] = canvas->data[pos + i] * ((2<<16) - 1);
+ if(i + pos < canvas->size) s[i] = canvas->data[pos + i] * volume;
else {
s[i] = 0;
playing = false;
@@ -75,6 +77,11 @@ void Player::run()
}
}
+void Player::setVolume(double v)
+{
+ volume = v;
+}
+
CanvasToolListen::CanvasToolListen(Canvas *c)
: player(c)
{
@@ -128,3 +135,8 @@ void CanvasToolListen::update()
canvas->update(r);
lastpos = pos;
}
+
+void CanvasToolListen::setVolume(int v)
+{
+ player.setVolume(v);
+}
diff --git a/dgedit/canvastoollisten.h b/dgedit/canvastoollisten.h
index 74a7831..090d83b 100644
--- a/dgedit/canvastoollisten.h
+++ b/dgedit/canvastoollisten.h
@@ -46,9 +46,12 @@ public:
volatile bool playing;
volatile size_t pos;
+ void setVolume(double v);
+
private:
ao_device *dev;
Canvas *canvas;
+ double volume;
};
class CanvasToolListen : public CanvasTool {
@@ -63,6 +66,7 @@ public:
public slots:
void update();
+ void setVolume(int v);
private:
Canvas *canvas;
diff --git a/dgedit/canvastoolselections.cc b/dgedit/canvastoolselections.cc
index 35c8e05..5188cb0 100644
--- a/dgedit/canvastoolselections.cc
+++ b/dgedit/canvastoolselections.cc
@@ -194,6 +194,17 @@ void CanvasToolSelections::thresholdChanged(double t)
threshold = t;
}
+void CanvasToolSelections::noiseFloorChanged(int t)
+{
+ double div = 666.0 / 0.00003;
+ noise_floor = (double)t/div;
+}
+
+void CanvasToolSelections::fadeoutChanged(int t)
+{
+ fadeout = (double)t/1000.0;
+}
+
void CanvasToolSelections::autoCreateSelections()
{
float *data = canvas->data;
@@ -218,17 +229,16 @@ void CanvasToolSelections::autoCreateSelections()
}
int minsize = 100; // attack.
- float minval = 0.00003; // noise floor
int to = i;
float runavg = fabs(data[from]);
- while((runavg > minval ||
+ while((runavg > noise_floor ||
to < from + minsize) &&
to < (int)size) {
double p = 0.9;
runavg = runavg * p + fabs(data[to]) * (1 - p);
to++;
}
- _selections[from] = Selection(from, to, 2, (to - from) / 3);
+ _selections[from] = Selection(from, to, 2, ((to - from) / 3) * fadeout);
i = to+1;
}
diff --git a/dgedit/canvastoolselections.h b/dgedit/canvastoolselections.h
index a9e4d56..99114de 100644
--- a/dgedit/canvastoolselections.h
+++ b/dgedit/canvastoolselections.h
@@ -57,6 +57,8 @@ public slots:
void autoCreateSelections();
void clearSelections();
void thresholdChanged(double threshold);
+ void noiseFloorChanged(int t);
+ void fadeoutChanged(int t);
private:
bool selection_is_moving_left;
@@ -67,7 +69,9 @@ private:
Canvas *canvas;
double threshold;
-
+ double noise_floor;
+ double fadeout;
+
QColor colSelBg;
QColor colSel;
QColor colActiveSelBg;
diff --git a/dgedit/mainwindow.cc b/dgedit/mainwindow.cc
index afa8a16..ada7f95 100644
--- a/dgedit/mainwindow.cc
+++ b/dgedit/mainwindow.cc
@@ -151,11 +151,35 @@ MainWindow::MainWindow()
configs->addWidget(new QLabel("Attack length:"));
QSlider *slider = new QSlider(Qt::Horizontal);
- slider->setRange(10, 10000);
+ slider->setRange(10, 1000);
slider->setValue(666);
connect(slider, SIGNAL(sliderMoved(int)), sorter, SLOT(setAttackLength(int)));
configs->addWidget(slider);
+ configs->addWidget(new QLabel("Falloff:"));
+ QSlider *slider2 = new QSlider(Qt::Horizontal);
+ slider2->setRange(1, 10000);
+ slider2->setValue(666);
+ connect(slider2, SIGNAL(sliderMoved(int)),
+ selections, SLOT(noiseFloorChanged(int)));
+ configs->addWidget(slider2);
+
+ configs->addWidget(new QLabel("Fadelength:"));
+ QSlider *slider3 = new QSlider(Qt::Horizontal);
+ slider3->setRange(1, 2000);
+ slider3->setValue(666);
+ connect(slider3, SIGNAL(sliderMoved(int)),
+ selections, SLOT(fadeoutChanged(int)));
+ configs->addWidget(slider3);
+
+ configs->addWidget(new QLabel("Player volume:"));
+ QSlider *slider4 = new QSlider(Qt::Horizontal);
+ slider4->setRange(0, 1000000);
+ slider4->setValue(100000);
+ connect(slider4, SIGNAL(sliderMoved(int)),
+ listen, SLOT(setVolume(int)));
+ configs->addWidget(slider4);
+
configs->addWidget(new QLabel("Prefix:"));
QLineEdit *prefix = new QLineEdit();
connect(prefix, SIGNAL(textChanged(const QString &)),