summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2014-04-02 21:12:41 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2014-04-02 21:12:41 +0200
commit644c3996fe91f35bcdc84e0c3bb4f906be740bae (patch)
treeff707039cd582a2855cf70579264671c8590c937
parent6b0f9242beca3df3c5e98a215b9fe0059436770a (diff)
Warning: Ugly hack ahead... Initial attempt at a 'play sample selections ordered by sorting' feature.
-rw-r--r--dgedit/canvastoollisten.cc18
-rw-r--r--dgedit/canvastoollisten.h2
-rw-r--r--dgedit/mainwindow.cc36
-rw-r--r--dgedit/mainwindow.h2
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 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__*/