diff options
| -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 | ||||
| -rw-r--r-- | drumgizmo/output/jackaudio/jackaudio.cc | 6 | ||||
| -rw-r--r-- | src/drumgizmo.cc | 2 | 
6 files changed, 60 insertions, 6 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 15b0171..b4ef076 100644 --- a/dgedit/mainwindow.cc +++ b/dgedit/mainwindow.cc @@ -58,6 +58,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(); @@ -70,7 +71,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); @@ -118,6 +120,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); @@ -125,7 +134,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(); @@ -254,6 +264,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 cc9bdb8..3e9e588 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);    void browse(); @@ -79,6 +80,7 @@ private:    QScrollBar *yscale;    QScrollBar *xscale;    QScrollBar *xoffset; +  QScrollBar *sb_playsamples;    QComboBox *presets;    QSlider *slider_attacklength;    QSlider *slider_falloff; diff --git a/drumgizmo/output/jackaudio/jackaudio.cc b/drumgizmo/output/jackaudio/jackaudio.cc index 385eb48..0fd985e 100644 --- a/drumgizmo/output/jackaudio/jackaudio.cc +++ b/drumgizmo/output/jackaudio/jackaudio.cc @@ -85,7 +85,7 @@ bool JackAudio::init(int nchannels, char *cnames[])                                          name.c_str(),                                          JACK_DEFAULT_AUDIO_TYPE,                                          JackPortIsOutput, 0); -    channels[i] = (sample_t*)malloc(1024 * sizeof(sample_t)); +    channels[i] = (sample_t*)malloc(16 * sizeof(sample_t));    }    return true;  } @@ -127,9 +127,9 @@ void JackAudio::post(size_t size)  void JackAudio::jack_process(jack_nframes_t nframes)  { -  if(nframes != 1024) { +  if(nframes != 128) {      fprintf(stderr, "jackaudio output module currently only works with a" -            " bufferszie of 1024 samples!\n"); +            " buffersize of 64 samples!\n");      exit(1);    } diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc index fa26640..4bd6a77 100644 --- a/src/drumgizmo.cc +++ b/src/drumgizmo.cc @@ -288,7 +288,7 @@ void DrumGizmo::run(int endpos)    oe->start();    size_t pos = 0; -  size_t nsamples = 1024; +  size_t nsamples = 128;//1024;    sample_t samples[nsamples];    while(run(pos, samples, nsamples) == true) { | 
