From eafdef4a5e7bb6cbed75b17a38a9b0e30c6e51a6 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Tue, 23 Apr 2013 20:43:59 +0200 Subject: Add some sliders to control internal parameters of the editor. --- dgedit/canvastoollisten.cc | 14 +++++++++++++- dgedit/canvastoollisten.h | 4 ++++ dgedit/canvastoolselections.cc | 16 +++++++++++++--- dgedit/canvastoolselections.h | 6 +++++- dgedit/mainwindow.cc | 26 +++++++++++++++++++++++++- 5 files changed, 60 insertions(+), 6 deletions(-) (limited to 'dgedit') 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 &)), -- cgit v1.2.3