diff options
Diffstat (limited to 'dgedit')
-rw-r--r-- | dgedit/canvastoollisten.cc | 18 | ||||
-rw-r--r-- | dgedit/canvastoollisten.h | 2 | ||||
-rw-r--r-- | dgedit/mainwindow.cc | 36 | ||||
-rw-r--r-- | dgedit/mainwindow.h | 2 |
4 files changed, 56 insertions, 2 deletions
diff --git a/dgedit/canvastoollisten.cc b/dgedit/canvastoollisten.cc index f638f93..35b619b 100644 --- a/dgedit/canvastoollisten.cc +++ b/dgedit/canvastoollisten.cc @@ -26,6 +26,8 @@ */ #include "canvastoollisten.h" +#include <QApplication> + #define BUFSZ 1024 * 2 Player::Player(Canvas *c) @@ -140,3 +142,19 @@ void CanvasToolListen::setVolume(int v) { player.setVolume(v); } + +#include <unistd.h> +void CanvasToolListen::playRange(unsigned int from, unsigned int to) +{ + player.pos = from; + player.playing = true; + canvas->update(); + timer.start(50); + printf("start\n"); + while(player.pos < to) { + qApp->processEvents(); + usleep(10000); + } + player.playing = false; + printf("stop\n"); +} diff --git a/dgedit/canvastoollisten.h b/dgedit/canvastoollisten.h index 090d83b..dccc3f9 100644 --- a/dgedit/canvastoollisten.h +++ b/dgedit/canvastoollisten.h @@ -64,6 +64,8 @@ public: bool mouseReleaseEvent(QMouseEvent *event); void paintEvent(QPaintEvent *event, QPainter &painter); + void playRange(unsigned int from, unsigned int to); + public slots: void update(); void setVolume(int v); diff --git a/dgedit/mainwindow.cc b/dgedit/mainwindow.cc index 3436c25..dfc150c 100644 --- a/dgedit/mainwindow.cc +++ b/dgedit/mainwindow.cc @@ -57,6 +57,7 @@ static void addTool(QToolBar *toolbar, Canvas *canvas, CanvasTool *tool) canvas->tools.push_back(tool); } +static CanvasToolListen *g_listen; MainWindow::MainWindow() { QWidget *central = new QWidget(); @@ -69,7 +70,8 @@ MainWindow::MainWindow() canvas = new Canvas(this); QToolBar *toolbar = addToolBar("Tools"); - CanvasTool *listen = new CanvasToolListen(canvas); + g_listen = new CanvasToolListen(canvas); + CanvasTool *listen = g_listen; addTool(toolbar, canvas, listen); CanvasTool *threshold = new CanvasToolThreshold(canvas); addTool(toolbar, canvas, threshold); @@ -117,6 +119,13 @@ MainWindow::MainWindow() connect(sorter, SIGNAL(activeSelectionChanged(Selection)), selections, SLOT(setActiveSelection(Selection))); + QPushButton *btn_playsamples = new QPushButton("Play samples"); + connect(btn_playsamples, SIGNAL(clicked()), this, SLOT(playSamples())); + + sb_playsamples = new QScrollBar(Qt::Horizontal); + sb_playsamples->setRange(100, 4000); // ms + + lh->addWidget(canvas); lh->addWidget(yscale); lh->addWidget(yoffset); @@ -124,7 +133,8 @@ MainWindow::MainWindow() lv->addWidget(xscale, 100); lv->addWidget(xoffset, 100); lv->addWidget(sorter, 15); - + lv->addWidget(btn_playsamples); + lv->addWidget(sb_playsamples); QHBoxLayout *btns = new QHBoxLayout(); @@ -248,6 +258,28 @@ MainWindow::MainWindow() statusBar()->showMessage("Ready"); } +void MainWindow::playSamples() +{ + // unsigned int length = 44100 / 4; // 0.25 seconds in 44k1Hz + + Selections sels = sorter->selections(); + Selections::iterator i = sels.begin(); + while(i != sels.end()) { + unsigned int length = sb_playsamples->value() * 44100 / 1000; + + unsigned int sample_length = i->to - i->from; + + unsigned int to = i->to; + unsigned int sleep = 0; + + if(sample_length > length) to = i->from + length; + else sleep = length - sample_length; + g_listen->playRange(i->from, to); + usleep(1000000 * sleep / 44100); + i++; + } +} + void MainWindow::closeEvent(QCloseEvent *) { saveSettings(); diff --git a/dgedit/mainwindow.h b/dgedit/mainwindow.h index fd4af57..c7ce3fb 100644 --- a/dgedit/mainwindow.h +++ b/dgedit/mainwindow.h @@ -60,6 +60,7 @@ public slots: void setYOffset(int); void doExport(); void loadFile(QString filename); + void playSamples(); void setPreset(int); protected: @@ -78,6 +79,7 @@ private: QScrollBar *yscale; QScrollBar *xscale; QScrollBar *xoffset; + QScrollBar *sb_playsamples; QComboBox *presets; QSlider *slider_attacklength; QSlider *slider_falloff; |