From 644c3996fe91f35bcdc84e0c3bb4f906be740bae Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Wed, 2 Apr 2014 21:12:41 +0200 Subject: Warning: Ugly hack ahead... Initial attempt at a 'play sample selections ordered by sorting' feature. --- dgedit/canvastoollisten.cc | 18 ++++++++++++++++++ dgedit/canvastoollisten.h | 2 ++ dgedit/mainwindow.cc | 36 ++++++++++++++++++++++++++++++++++-- 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 + #define BUFSZ 1024 * 2 Player::Player(Canvas *c) @@ -140,3 +142,19 @@ void CanvasToolListen::setVolume(int v) { player.setVolume(v); } + +#include +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 30cd626..5a901c7 100644 --- a/dgedit/mainwindow.cc +++ b/dgedit/mainwindow.cc @@ -60,6 +60,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(); @@ -72,7 +73,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); @@ -120,6 +122,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); @@ -127,7 +136,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(); @@ -229,6 +239,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 f6fff27..886f9cb 100644 --- a/dgedit/mainwindow.h +++ b/dgedit/mainwindow.h @@ -47,6 +47,7 @@ public slots: void setYOffset(int); void doExport(); void loadFile(QString filename); + void playSamples(); protected: void closeEvent(QCloseEvent*); @@ -63,6 +64,7 @@ private: QScrollBar *yscale; QScrollBar *xscale; QScrollBar *xoffset; + QScrollBar *sb_playsamples; }; #endif/*__DRUMGIZMO_MAINWINDOW_H__*/ -- cgit v1.2.3