From 57f4d38841c40cad3c206abdd16eebaed753aa1c Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 18 Mar 2018 18:18:57 +0100 Subject: Update all fiels to adhere to style-guide --- .gitignore | 4 +- src/audioextractor.cc | 478 ++++++++++++------------ src/audioextractor.h | 37 +- src/canvas.cc | 326 +++++++++-------- src/canvas.h | 87 +++-- src/canvastool.cc | 32 +- src/canvastool.h | 37 +- src/canvastoollisten.cc | 80 ++-- src/canvastoollisten.h | 37 +- src/canvastoolselections.cc | 487 +++++++++++++------------ src/canvastoolselections.h | 83 +++-- src/canvastoolthreshold.cc | 167 +++++---- src/canvastoolthreshold.h | 37 +- src/canvaswidget.cc | 74 ++-- src/canvaswidget.h | 34 +- src/dgedit.cc | 8 +- src/filelist.cc | 176 ++++----- src/filelist.h | 66 ++-- src/itemeditor.cc | 14 +- src/itemeditor.h | 19 +- src/mainwindow.cc | 870 ++++++++++++++++++++++---------------------- src/mainwindow.h | 132 ++++--- src/mipmap.cc | 152 +++++--- src/mipmap.h | 42 ++- src/player.cc | 243 +++++++------ src/player.h | 133 +++---- src/samplesorter.cc | 397 +++++++++++--------- src/samplesorter.h | 63 ++-- src/selection.cc | 93 ++--- src/selection.h | 154 ++++---- src/selectioneditor.cc | 94 ++--- src/selectioneditor.h | 41 +-- src/sleep.h | 38 +- src/volumefader.cc | 62 ++-- src/volumefader.h | 41 +-- src/zoomslider.cc | 117 +++--- src/zoomslider.h | 55 ++- 37 files changed, 2615 insertions(+), 2395 deletions(-) diff --git a/.gitignore b/.gitignore index 948dab2..85e7967 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,6 @@ missing src/dgedit src/qrc_*.cc stamp-h1 -src/presets.ini \ No newline at end of file +src/presets.ini +moc_*.cpp +qrc_*.cpp \ No newline at end of file diff --git a/src/audioextractor.cc b/src/audioextractor.cc index c249949..eb86b2f 100644 --- a/src/audioextractor.cc +++ b/src/audioextractor.cc @@ -35,260 +35,282 @@ #define INSTRUMENT_VERSION "2.0" -typedef struct { - SNDFILE *fh; - float *data; +typedef struct +{ + SNDFILE *fh; + float *data; } audiodata_t; AudioExtractor::AudioExtractor(Selections &s, QObject *parent) - : QObject(parent), selections(s) + : QObject(parent), selections(s) { } void AudioExtractor::exportSelections() { - int samplerate = -1; - emit setMaximumProgress(selections.ids().size() + 1/* for xml writing*/); - int progress = 0; - emit progressUpdate(progress++); - qApp->processEvents(); - - // Open all input audio files: - audiodata_t audiodata[audiofiles.size()]; - - int idx = 0; - AudioFileList::iterator j = audiofiles.begin(); - while(j != audiofiles.end()) { - QString file = j->first; - - SF_INFO sf_info; - audiodata[idx].fh = sf_open(file.toStdString().c_str(), SFM_READ, &sf_info); - if(!audiodata[idx].fh) { - printf("Load error '%s'\n", file.toStdString().c_str()); - return; - } - - if(samplerate == -1) { - // Store the first samplerate we meet - samplerate = sf_info.samplerate; - } - - audiodata[idx].data = NULL; - - j++; - idx++; - } - - idx = 1; - QVector sels = selections.ids(); - - // Sort selections by velocity - for(int v1 = 0; v1 < sels.size(); v1++) { - for(int v2 = 0; v2 < sels.size(); v2++) { - - Selection sel1 = selections.get(sels[v1]); - Selection sel2 = selections.get(sels[v2]); - - if(sel1.energy < sel2.energy) { - sel_id_t vtmp = sels[v1]; - sels[v1] = sels[v2]; - sels[v2] = vtmp; - } - } - } - - if(samplerate == -1) { - // For some reason we never got a samplerate. Set it to 44k1Hz - samplerate = 44100; - } - - // Iterate and write audio files - QVector::iterator si = sels.begin(); - while(si != sels.end()) { - Selection sel = selections.get(*si); - size_t offset = sel.from; - size_t size = sel.to - sel.from; - size_t fadein = sel.fadein; - size_t fadeout = sel.fadeout; - - - // Read all input audio file chunks: - for(int i = 0; i < audiofiles.size(); i++) { - - // Clear out old buffer (if one exists) - if(audiodata[i].data) { - delete audiodata[i].data; - audiodata[i].data = NULL; - } - - SNDFILE *fh = audiodata[i].fh; - - sf_seek(fh, offset, SEEK_SET); - - float *data = new float[size]; - sf_read_float(fh, data, size); - - // Apply linear fadein - for(size_t fi = 0; fi < fadein; fi++) { - float val = ((float)fi / (float)fadein); - if(fi < size) data[fi] *= val; - } - - // Apply fadeout - for(size_t fo = 0; fo < fadeout; fo++) { - float val = 1.0 - ((float)fo / (float)fadeout); - if( (((size - fadeout) + fo) < size) && - (((size - fadeout) + fo) >= 0) ) { - data[(size - fadeout) + fo] *= val; - } - } - - audiodata[i].data = data; - } - - // Create output path: - QString path = exportpath + "/" + prefix + "/samples"; - QDir d; - d.mkpath(path); - - // Write all sample chunks to single output file: - QString file = path + "/" + QString::number(idx) + "-" + prefix + ".wav"; - - SF_INFO sf_info; - sf_info.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT; - sf_info.samplerate = samplerate; - sf_info.channels = audiofiles.size(); - - SNDFILE *ofh = sf_open(file.toStdString().c_str(), SFM_WRITE, &sf_info); - if(!ofh) { - printf("Open for write error...\n"); - return; - } - - for(size_t ob = 0; ob < size; ob++) { - float obuf[audiofiles.size()]; - for(int ai = 0; ai < audiofiles.size(); ai++) { - obuf[ai] = audiodata[ai].data[ob]; - } - sf_write_float(ofh, obuf, audiofiles.size()); - } - sf_close(ofh); - - idx++; - si++; - - emit progressUpdate(progress++); - qApp->processEvents(); - } - - // Close all input audio files: - for(int i = 0; i < audiofiles.size(); i++) { - if(audiodata[i].data) { - delete audiodata[i].data; - audiodata[i].data = NULL; - } - - sf_close(audiodata[i].fh); - } - - QDomDocument doc; - QDomProcessingInstruction header = - doc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'"); - doc.appendChild(header); - - QDomElement instrument = doc.createElement("instrument"); - instrument.setAttribute("version", INSTRUMENT_VERSION); - instrument.setAttribute("name", prefix); - doc.appendChild(instrument); - - QDomElement samples = doc.createElement("samples"); - instrument.appendChild(samples); - - { - // Do the adding to the xml file one sample at the time. - int index = 0; - QVector::iterator si = sels.begin(); - while(si != sels.end()) { - index++; - - Selection i = selections.get(*si); - i.name = prefix + "-" + QString::number(index); - - QDomElement sample = doc.createElement("sample"); - sample.setAttribute("name", i.name); - sample.setAttribute("power", QString::number(i.energy)); - samples.appendChild(sample); - - selections.update(*si, i); - - int channelnum = 1; // Filechannel numbers are 1-based. - AudioFileList::iterator j = audiofiles.begin(); - while(j != audiofiles.end()) { - - QString file = j->first; - QString name = j->second; - - QDomElement audiofile = doc.createElement("audiofile"); - audiofile.setAttribute("file", "samples/" + - QString::number(index) + "-" + prefix + ".wav"); - audiofile.setAttribute("channel", name); - audiofile.setAttribute("filechannel", QString::number(channelnum)); - sample.appendChild(audiofile); - channelnum++; - j++; - } - - si++; - } - } - - QFile xmlfile(exportpath + "/" + prefix + "/" + prefix + ".xml"); - xmlfile.open(QIODevice::WriteOnly); - xmlfile.write(doc.toByteArray()); - xmlfile.close(); - - emit progressUpdate(progress++); - qApp->processEvents(); + int samplerate = -1; + emit setMaximumProgress(selections.ids().size() + 1/* for xml writing*/); + int progress = 0; + emit progressUpdate(progress++); + qApp->processEvents(); + + // Open all input audio files: + audiodata_t audiodata[audiofiles.size()]; + + int idx = 0; + AudioFileList::iterator j = audiofiles.begin(); + while(j != audiofiles.end()) + { + QString file = j->first; + + SF_INFO sf_info; + audiodata[idx].fh = sf_open(file.toStdString().c_str(), SFM_READ, &sf_info); + if(!audiodata[idx].fh) + { + printf("Load error '%s'\n", file.toStdString().c_str()); + return; + } + + if(samplerate == -1) + { + // Store the first samplerate we meet + samplerate = sf_info.samplerate; + } + + audiodata[idx].data = NULL; + + j++; + idx++; + } + + idx = 1; + QVector sels = selections.ids(); + + // Sort selections by velocity + for(int v1 = 0; v1 < sels.size(); v1++) + { + for(int v2 = 0; v2 < sels.size(); v2++) + { + Selection sel1 = selections.get(sels[v1]); + Selection sel2 = selections.get(sels[v2]); + + if(sel1.energy < sel2.energy) + { + sel_id_t vtmp = sels[v1]; + sels[v1] = sels[v2]; + sels[v2] = vtmp; + } + } + } + + if(samplerate == -1) + { + // For some reason we never got a samplerate. Set it to 44k1Hz + samplerate = 44100; + } + + // Iterate and write audio files + QVector::iterator si = sels.begin(); + while(si != sels.end()) + { + Selection sel = selections.get(*si); + size_t offset = sel.from; + size_t size = sel.to - sel.from; + size_t fadein = sel.fadein; + size_t fadeout = sel.fadeout; + + + // Read all input audio file chunks: + for(int i = 0; i < audiofiles.size(); i++) + { + // Clear out old buffer (if one exists) + if(audiodata[i].data) + { + delete audiodata[i].data; + audiodata[i].data = NULL; + } + + SNDFILE *fh = audiodata[i].fh; + + sf_seek(fh, offset, SEEK_SET); + + float *data = new float[size]; + sf_read_float(fh, data, size); + + // Apply linear fadein + for(size_t fi = 0; fi < fadein; fi++) + { + float val = ((float)fi / (float)fadein); + if(fi < size) data[fi] *= val; + } + + // Apply fadeout + for(size_t fo = 0; fo < fadeout; fo++) + { + float val = 1.0 - ((float)fo / (float)fadeout); + if( (((size - fadeout) + fo) < size) && + (((size - fadeout) + fo) >= 0) ) + { + data[(size - fadeout) + fo] *= val; + } + } + + audiodata[i].data = data; + } + + // Create output path: + QString path = exportpath + "/" + prefix + "/samples"; + QDir d; + d.mkpath(path); + + // Write all sample chunks to single output file: + QString file = path + "/" + QString::number(idx) + "-" + prefix + ".wav"; + + SF_INFO sf_info; + sf_info.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT; + sf_info.samplerate = samplerate; + sf_info.channels = audiofiles.size(); + + SNDFILE *ofh = sf_open(file.toStdString().c_str(), SFM_WRITE, &sf_info); + if(!ofh) + { + printf("Open for write error...\n"); + return; + } + + for(size_t ob = 0; ob < size; ob++) + { + float obuf[audiofiles.size()]; + for(int ai = 0; ai < audiofiles.size(); ai++) + { + obuf[ai] = audiodata[ai].data[ob]; + } + sf_write_float(ofh, obuf, audiofiles.size()); + } + sf_close(ofh); + + idx++; + si++; + + emit progressUpdate(progress++); + qApp->processEvents(); + } + + // Close all input audio files: + for(int i = 0; i < audiofiles.size(); i++) + { + if(audiodata[i].data) + { + delete audiodata[i].data; + audiodata[i].data = NULL; + } + + sf_close(audiodata[i].fh); + } + + QDomDocument doc; + QDomProcessingInstruction header = + doc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'"); + doc.appendChild(header); + + QDomElement instrument = doc.createElement("instrument"); + instrument.setAttribute("version", INSTRUMENT_VERSION); + instrument.setAttribute("name", prefix); + doc.appendChild(instrument); + + QDomElement samples = doc.createElement("samples"); + instrument.appendChild(samples); + + { + // Do the adding to the xml file one sample at the time. + int index = 0; + QVector::iterator si = sels.begin(); + while(si != sels.end()) + { + index++; + + Selection i = selections.get(*si); + i.name = prefix + "-" + QString::number(index); + + QDomElement sample = doc.createElement("sample"); + sample.setAttribute("name", i.name); + sample.setAttribute("power", QString::number(i.energy)); + samples.appendChild(sample); + + selections.update(*si, i); + + int channelnum = 1; // Filechannel numbers are 1-based. + AudioFileList::iterator j = audiofiles.begin(); + while(j != audiofiles.end()) + { + QString file = j->first; + QString name = j->second; + + QDomElement audiofile = doc.createElement("audiofile"); + audiofile.setAttribute("file", "samples/" + + QString::number(index) + "-" + prefix + ".wav"); + audiofile.setAttribute("channel", name); + audiofile.setAttribute("filechannel", QString::number(channelnum)); + sample.appendChild(audiofile); + channelnum++; + j++; + } + + si++; + } + } + + QFile xmlfile(exportpath + "/" + prefix + "/" + prefix + ".xml"); + xmlfile.open(QIODevice::WriteOnly); + xmlfile.write(doc.toByteArray()); + xmlfile.close(); + + emit progressUpdate(progress++); + qApp->processEvents(); } void AudioExtractor::addFile(QString file, QString name) { - QPair pair; - pair.first = file; - pair.second = name; - audiofiles.push_back(pair); + QPair pair; + pair.first = file; + pair.second = name; + audiofiles.push_back(pair); } void AudioExtractor::removeFile(QString file, QString name) { - AudioFileList::iterator j = audiofiles.begin(); - while(j != audiofiles.end()) { - if(file == j->first/* && name == j->second*/) { - audiofiles.erase(j); - return; - } - j++; - } + AudioFileList::iterator j = audiofiles.begin(); + while(j != audiofiles.end()) + { + if(file == j->first/* && name == j->second*/) + { + audiofiles.erase(j); + return; + } + j++; + } } void AudioExtractor::setOutputPrefix(const QString &p) { - prefix = p; + prefix = p; } void AudioExtractor::setExportPath(const QString &path) { - exportpath = path; + exportpath = path; } void AudioExtractor::changeName(QString file, QString name) { - AudioFileList::iterator j = audiofiles.begin(); - while(j != audiofiles.end()) { - if(file == j->first) { - j->second = name; - return; - } - j++; - } + AudioFileList::iterator j = audiofiles.begin(); + while(j != audiofiles.end()) + { + if(file == j->first) + { + j->second = name; + return; + } + j++; + } } diff --git a/src/audioextractor.h b/src/audioextractor.h index ae50d17..2c38f91 100644 --- a/src/audioextractor.h +++ b/src/audioextractor.h @@ -24,8 +24,7 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_AUDIOEXTRACTOR_H__ -#define __DRUMGIZMO_AUDIOEXTRACTOR_H__ +#pragma once #include #include @@ -38,29 +37,29 @@ typedef QLinkedList< QPair > AudioFileList; -class AudioExtractor : public QObject { -Q_OBJECT +class AudioExtractor + : public QObject +{ + Q_OBJECT public: - AudioExtractor(Selections &selections, QObject *parent); + AudioExtractor(Selections& selections, QObject* parent); public slots: - void addFile(QString file, QString name); - void changeName(QString file, QString name); - void removeFile(QString file, QString name); + void addFile(QString file, QString name); + void changeName(QString file, QString name); + void removeFile(QString file, QString name); - void exportSelections(); - void setExportPath(const QString &path); - void setOutputPrefix(const QString &prefix); + void exportSelections(); + void setExportPath(const QString& path); + void setOutputPrefix(const QString& prefix); signals: - void progressUpdate(int value); - void setMaximumProgress(int value); + void progressUpdate(int value); + void setMaximumProgress(int value); private: - Selections &selections; - AudioFileList audiofiles; - QString exportpath; - QString prefix; + Selections& selections; + AudioFileList audiofiles; + QString exportpath; + QString prefix; }; - -#endif/*__DRUMGIZMO_AUDIOEXTRACTOR_H__*/ diff --git a/src/canvas.cc b/src/canvas.cc index 7007b0b..a00a39c 100644 --- a/src/canvas.cc +++ b/src/canvas.cc @@ -37,73 +37,82 @@ #define DEFYSCALE 200 Canvas::Canvas(QWidget *parent) - : QWidget(parent) + : QWidget(parent) { - setAttribute(Qt::WA_StaticContents); - setMouseTracking(true); - setFocusPolicy(Qt::ClickFocus); - - mipmap = NULL; - - data = NULL; - size = 0; - - xscale = 1.0; - yscale = 1.0; - xoffset = 0.0; - yoffset = 0.5; - - colBg = QColor(180, 200, 180); - colSec = QColor(160, 180, 160); - colWavMax = QColor(100, 100, 100); - colWavAvg = QColor(0, 0, 0); - colMax = QColor(127, 127, 255); - colHalf = QColor(180, 180, 255); - - setCursor(Qt::ArrowCursor); - - wav = QImage(width(), height(), QImage::Format_RGB32); + setAttribute(Qt::WA_StaticContents); + setMouseTracking(true); + setFocusPolicy(Qt::ClickFocus); + + mipmap = NULL; + + data = NULL; + size = 0; + + xscale = 1.0; + yscale = 1.0; + xoffset = 0.0; + yoffset = 0.5; + + colBg = QColor(180, 200, 180); + colSec = QColor(160, 180, 160); + colWavMax = QColor(100, 100, 100); + colWavAvg = QColor(0, 0, 0); + colMax = QColor(127, 127, 255); + colHalf = QColor(180, 180, 255); + + setCursor(Qt::ArrowCursor); + + wav = QImage(width(), height(), QImage::Format_RGB32); } Canvas::~Canvas() { - if(data) delete[] data; - if(mipmap) delete mipmap; + if(data) + { + delete[] data; + } + if(mipmap) + { + delete mipmap; + } } void Canvas::load(QString file) { - if(data) { - delete[] data; - data = NULL; - size = 0; - } - - if(mipmap) { - delete mipmap; - mipmap = NULL; - } - - SF_INFO sf_info; + if(data) + { + delete[] data; + data = NULL; + size = 0; + } + + if(mipmap) + { + delete mipmap; + mipmap = NULL; + } + + SF_INFO sf_info; SNDFILE *fh = sf_open(file.toStdString().c_str(), SFM_READ, &sf_info); - if(!fh) { - printf("Load error...\n"); - return; - } + if(!fh) + { + printf("Load error...\n"); + return; + } - size = sf_info.frames; + size = sf_info.frames; - printf("Size: %u\n", (unsigned int)sf_info.frames); - data = new float[size]; + printf("Size: %u\n", (unsigned int)sf_info.frames); + data = new float[size]; - sf_read_float(fh, data, size); + sf_read_float(fh, data, size); sf_close(fh); - mipmap = new MipMap(data, size); + mipmap = new MipMap(data, size); - updateWav(); - update(); + updateWav(); + update(); } @@ -111,175 +120,184 @@ void Canvas::load(QString file) #define OFFSETX (xoffset * (float)size) float Canvas::mapX(float x) { - float val = (x - OFFSETX) / SCALEX; - return val; + float val = (x - OFFSETX) / SCALEX; + return val; } float Canvas::unmapX(float x) { - float val = x * SCALEX + OFFSETX; - return val; + float val = x * SCALEX + OFFSETX; + return val; } #define SCALEY (yscale * height()) #define OFFSETY (((float)height() / 2.0) + ((yoffset * 2.0 - 1.0) * SCALEY)) float Canvas::mapY(float y) { - float val = OFFSETY + (y * SCALEY); - return val; + float val = OFFSETY + (y * SCALEY); + return val; } float Canvas::unmapY(float y) { - float val = (y - OFFSETY) / SCALEY; - return val; + float val = (y - OFFSETY) / SCALEY; + return val; } void Canvas::mouseMoveEvent(QMouseEvent *event) { - for(int i = 0; i < tools.size(); i++) { - if(tools[i]->mouseMoveEvent(event)) return; - } + for(int i = 0; i < tools.size(); i++) + { + if(tools[i]->mouseMoveEvent(event)) return; + } - setCursor(Qt::ArrowCursor); + setCursor(Qt::ArrowCursor); } void Canvas::mousePressEvent(QMouseEvent *event) { - for(int i = 0; i < tools.size(); i++) { - if(tools[i]->mousePressEvent(event)) return; - } + for(int i = 0; i < tools.size(); i++) + { + if(tools[i]->mousePressEvent(event)) return; + } } void Canvas::mouseReleaseEvent(QMouseEvent *event) { - for(int i = 0; i < tools.size(); i++) { - if(tools[i]->mouseReleaseEvent(event)) return; - } + for(int i = 0; i < tools.size(); i++) + { + if(tools[i]->mouseReleaseEvent(event)) return; + } } void Canvas::resizeEvent(QResizeEvent *event) { - for(int i = 0; i < tools.size(); i++) { - tools[i]->resizeEvent(event); - } - - wav = QImage(width(), height(), QImage::Format_RGB32); - updateWav(); - update(); + for(int i = 0; i < tools.size(); i++) + { + tools[i]->resizeEvent(event); + } + + wav = QImage(width(), height(), QImage::Format_RGB32); + updateWav(); + update(); } void Canvas::getWavValues(int last, int lx, float *vu, float *vl, float *avgu, float *avgl) { - if(mipmap == NULL) return; + if(mipmap == NULL) return; - MipMapValue val = mipmap->lookup(last, lx); + MipMapValue val = mipmap->lookup(last, lx); - *vu = val.max; - *vl = val.min; - *avgu = val.uavg; - *avgl = val.lavg; + *vu = val.max; + *vl = val.min; + *avgu = val.uavg; + *avgl = val.lavg; } void Canvas::updateWav() { - QPainter painter(&wav); - - painter.setPen(colBg); - painter.setBrush(colBg); - painter.drawRect(0, 0, wav.width(), wav.height()); - - painter.setPen(colSec); - int step = 44100; - for(size_t i = 0; i < size; i += step) { - painter.drawLine(mapX(i), mapY(1.0), mapX(i), mapY(-1.0)); - } - - painter.setPen(colMax); - painter.drawLine(0, mapY(1.0), wav.width(), mapY(1.0)); - painter.drawLine(0, mapY(-1.0), wav.width(), mapY(-1.0)); - - painter.setPen(colHalf); - painter.drawLine(0, mapY(0.5), wav.width(), mapY(0.5)); - painter.drawLine(0, mapY(-0.5), wav.width(), mapY(-0.5)); - - if(data) { - int last = unmapX(0); - for(int x = 0; x < wav.width(); x++) { - int lx = unmapX(x); - if(lx > (int)size || lx < 0) break; - float vu = 0; - float vl = 0; - float avgu = 0; - float avgl = 0; - - getWavValues(last, lx, &vu, &vl, &avgu, &avgl); - - int c = mapY(0.0); - - painter.setPen(colWavMax); - painter.drawLine(x, c, x, mapY(vu)); - painter.drawLine(x, c, x, mapY(vl)); - - painter.setPen(colWavAvg); - painter.drawLine(x, c, x, mapY(avgu)); - painter.drawLine(x, c, x, mapY(avgl)); - - last = lx; - } - } + QPainter painter(&wav); + + painter.setPen(colBg); + painter.setBrush(colBg); + painter.drawRect(0, 0, wav.width(), wav.height()); + + painter.setPen(colSec); + int step = 44100; + for(size_t i = 0; i < size; i += step) + { + painter.drawLine(mapX(i), mapY(1.0), mapX(i), mapY(-1.0)); + } + + painter.setPen(colMax); + painter.drawLine(0, mapY(1.0), wav.width(), mapY(1.0)); + painter.drawLine(0, mapY(-1.0), wav.width(), mapY(-1.0)); + + painter.setPen(colHalf); + painter.drawLine(0, mapY(0.5), wav.width(), mapY(0.5)); + painter.drawLine(0, mapY(-0.5), wav.width(), mapY(-0.5)); + + if(data) + { + int last = unmapX(0); + for(int x = 0; x < wav.width(); x++) + { + int lx = unmapX(x); + if(lx > (int)size || lx < 0) break; + float vu = 0; + float vl = 0; + float avgu = 0; + float avgl = 0; + + getWavValues(last, lx, &vu, &vl, &avgu, &avgl); + + int c = mapY(0.0); + + painter.setPen(colWavMax); + painter.drawLine(x, c, x, mapY(vu)); + painter.drawLine(x, c, x, mapY(vl)); + + painter.setPen(colWavAvg); + painter.drawLine(x, c, x, mapY(avgu)); + painter.drawLine(x, c, x, mapY(avgl)); + + last = lx; + } + } } void Canvas::paintEvent(QPaintEvent *event) { - QPainter painter(this); + QPainter painter(this); - painter.drawImage(event->rect(),wav,event->rect()); + painter.drawImage(event->rect(),wav,event->rect()); - for(int i = 0; i < tools.size(); i++) { - tools[i]->paintEvent(event, painter); - } -} + for(int i = 0; i < tools.size(); i++) + { + tools[i]->paintEvent(event, painter); + } +} void Canvas::keyReleaseEvent(QKeyEvent *event) { - for(int i = 0; i < tools.size(); i++) { - tools[i]->keyReleaseEvent(event); - } + for(int i = 0; i < tools.size(); i++) + { + tools[i]->keyReleaseEvent(event); + } } void Canvas::setXScale(float scale) { - scale = (pow(100.0,scale) / 100.0) - (pow(100.0, 0.0)/ 100.0); - if(scale < 0.0) scale = 0.0; - if(scale > 1.0) scale = 1.0; - xscale = scale; - updateWav(); - update(); + scale = (pow(100.0,scale) / 100.0) - (pow(100.0, 0.0)/ 100.0); + if(scale < 0.0) scale = 0.0; + if(scale > 1.0) scale = 1.0; + xscale = scale; + updateWav(); + update(); } void Canvas::setYScale(float scale) { - yscale = scale; - updateWav(); - update(); + yscale = scale; + updateWav(); + update(); } void Canvas::setXOffset(float offset) { - if(offset < 0.0) offset = 0.0; - if(offset > 1.0) offset = 1.0; - xoffset = offset; - updateWav(); - update(); + if(offset < 0.0) offset = 0.0; + if(offset > 1.0) offset = 1.0; + xoffset = offset; + updateWav(); + update(); } void Canvas::setYOffset(float offset) { - if(offset < 0.0) offset = 0.0; - if(offset > 1.0) offset = 1.0; - yoffset = offset; - updateWav(); - update(); + if(offset < 0.0) offset = 0.0; + if(offset > 1.0) offset = 1.0; + yoffset = offset; + updateWav(); + update(); } diff --git a/src/canvas.h b/src/canvas.h index c83a726..425e38d 100644 --- a/src/canvas.h +++ b/src/canvas.h @@ -24,8 +24,7 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_CANVAS_H__ -#define __DRUMGIZMO_CANVAS_H__ +#pragma once #include #include @@ -34,62 +33,62 @@ #include "mipmap.h" #include "canvastool.h" -class Canvas : public QWidget { -Q_OBJECT +class Canvas + : public QWidget +{ + Q_OBJECT public: - Canvas(QWidget *parent); - ~Canvas(); + Canvas(QWidget* parent); + ~Canvas(); - void load(QString file); - - void addTool(CanvasTool *tool); + void load(QString file); - float mapX(float x); - float unmapX(float x); - float mapY(float y); - float unmapY(float y); + void addTool(CanvasTool* tool); + + float mapX(float x); + float unmapX(float x); + float mapY(float y); + float unmapY(float y); public slots: - void setXScale(float scale); - void setYScale(float scale); - void setXOffset(float scroll); - void setYOffset(float scroll); + void setXScale(float scale); + void setYScale(float scale); + void setXOffset(float scroll); + void setYOffset(float scroll); protected: - void mouseMoveEvent(QMouseEvent *event); - void mousePressEvent(QMouseEvent *event); - void mouseReleaseEvent(QMouseEvent *event); - void resizeEvent(QResizeEvent *event); - void paintEvent(QPaintEvent *event); - void keyReleaseEvent(QKeyEvent *event); + void mouseMoveEvent(QMouseEvent* event); + void mousePressEvent(QMouseEvent* event); + void mouseReleaseEvent(QMouseEvent* event); + void resizeEvent(QResizeEvent* event); + void paintEvent(QPaintEvent* event); + void keyReleaseEvent(QKeyEvent* event); private: - MipMap *mipmap; + MipMap* mipmap; - void updateWav(); - void getWavValues(int last, int lx, float *vu, float *vl, - float *avgu, float *avgl); + void updateWav(); + void getWavValues(int last, int lx, float* vu, float* vl, + float* avgu, float* avgl); - QImage wav; + QImage wav; public: - float *data; - size_t size; + float* data; + size_t size; - QVector tools; + QVector tools; private: - float xscale; - float yscale; - float xoffset; - float yoffset; - - QColor colBg; - QColor colSec; - QColor colMax; - QColor colHalf; - QColor colWavMax; - QColor colWavAvg; + float xscale; + float yscale; + float xoffset; + float yoffset; + + QColor colBg; + QColor colSec; + QColor colMax; + QColor colHalf; + QColor colWavMax; + QColor colWavAvg; }; - -#endif/*__DRUMGIZMO_CANVAS_H__*/ diff --git a/src/canvastool.cc b/src/canvastool.cc index 9d23d97..a9aba12 100644 --- a/src/canvastool.cc +++ b/src/canvastool.cc @@ -28,51 +28,51 @@ #include -bool CanvasTool::mouseMoveEvent(QMouseEvent *) +bool CanvasTool::mouseMoveEvent(QMouseEvent*) { - return false; + return false; } -bool CanvasTool::mousePressEvent(QMouseEvent *) +bool CanvasTool::mousePressEvent(QMouseEvent*) { - return false; + return false; } -bool CanvasTool::mouseReleaseEvent(QMouseEvent *) +bool CanvasTool::mouseReleaseEvent(QMouseEvent*) { - return false; + return false; } -void CanvasTool::resizeEvent(QResizeEvent *) +void CanvasTool::resizeEvent(QResizeEvent*) { } -void CanvasTool::paintEvent(QPaintEvent *, QPainter &) +void CanvasTool::paintEvent(QPaintEvent*, QPainter&) { } -void CanvasTool::keyReleaseEvent(QKeyEvent *) +void CanvasTool::keyReleaseEvent(QKeyEvent*) { } void CanvasTool::setActive(bool active) { - printf("setActive(%d)\n", active); - _active = active; - emit activateChanged(active); + printf("setActive(%d)\n", active); + _active = active; + emit activateChanged(active); } - + void CanvasTool::activate() { - setActive(true); + setActive(true); } void CanvasTool::disactivate() { - setActive(false); + setActive(false); } bool CanvasTool::isActive() { - return _active; + return _active; } diff --git a/src/canvastool.h b/src/canvastool.h index 56cfa84..c890422 100644 --- a/src/canvastool.h +++ b/src/canvastool.h @@ -24,8 +24,7 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_CANVASTOOL_H__ -#define __DRUMGIZMO_CANVASTOOL_H__ +#pragma once #include #include @@ -34,29 +33,29 @@ #include #include -class CanvasTool : public QObject { -Q_OBJECT +class CanvasTool + : public QObject +{ + Q_OBJECT public: - virtual QString name() = 0; - virtual bool mouseMoveEvent(QMouseEvent *event); - virtual bool mousePressEvent(QMouseEvent *event); - virtual bool mouseReleaseEvent(QMouseEvent *event); - virtual void resizeEvent(QResizeEvent *event); - virtual void paintEvent(QPaintEvent *event, QPainter &painter); - virtual void keyReleaseEvent(QKeyEvent *event); + virtual QString name() = 0; + virtual bool mouseMoveEvent(QMouseEvent* event); + virtual bool mousePressEvent(QMouseEvent* event); + virtual bool mouseReleaseEvent(QMouseEvent* event); + virtual void resizeEvent(QResizeEvent* event); + virtual void paintEvent(QPaintEvent* event, QPainter& painter); + virtual void keyReleaseEvent(QKeyEvent* event); - bool isActive(); + bool isActive(); signals: - void activateChanged(bool activestate); + void activateChanged(bool activestate); public slots: - void setActive(bool active); - void activate(); - void disactivate(); + void setActive(bool active); + void activate(); + void disactivate(); private: - bool _active; + bool _active; }; - -#endif/*__DRUMGIZMO_CANVASTOOL_H__*/ diff --git a/src/canvastoollisten.cc b/src/canvastoollisten.cc index 847c32d..b49e8bc 100644 --- a/src/canvastoollisten.cc +++ b/src/canvastoollisten.cc @@ -28,54 +28,64 @@ #include -CanvasToolListen::CanvasToolListen(Canvas *c, Player &p) - : player(p) +CanvasToolListen::CanvasToolListen(Canvas* c, Player& p) + : player(p) { - lastpos = pos = 0; - canvas = c ; + lastpos = pos = 0; + canvas = c ; } -bool CanvasToolListen::mousePressEvent(QMouseEvent *event) +bool CanvasToolListen::mousePressEvent(QMouseEvent* event) { - if(!isActive()) return false; - player.setPosition(canvas->unmapX(event->x())); - canvas->update(); - connect(&player, SIGNAL(positionUpdate(size_t)), this, SLOT(update(size_t))); - return true; + if(!isActive()) + { + return false; + } + player.setPosition(canvas->unmapX(event->x())); + canvas->update(); + connect(&player, SIGNAL(positionUpdate(size_t)), this, SLOT(update(size_t))); + return true; } -bool CanvasToolListen::mouseReleaseEvent(QMouseEvent *event) +bool CanvasToolListen::mouseReleaseEvent(QMouseEvent* event) { - if(!isActive()) return false; - player.stop(); - disconnect(&player, SIGNAL(positionUpdate(size_t)), - this, SLOT(update(size_t))); - lastpos = 0; - canvas->update(); - return true; + if(!isActive()) + { + return false; + } + player.stop(); + disconnect(&player, SIGNAL(positionUpdate(size_t)), + this, SLOT(update(size_t))); + lastpos = 0; + canvas->update(); + return true; } -void CanvasToolListen::paintEvent(QPaintEvent *event, QPainter &painter) +void CanvasToolListen::paintEvent(QPaintEvent* event, QPainter& painter) { - if(!isActive()) return; + if(!isActive()) + { + return; + } - if(player.pos < player.end) { - painter.setPen(QColor(0, 127, 127)); - painter.drawLine(canvas->mapX(pos), - event->rect().y(), - canvas->mapX(pos), - event->rect().y() + event->rect().height()); - } + if(player.pos < player.end) + { + painter.setPen(QColor(0, 127, 127)); + painter.drawLine(canvas->mapX(pos), + event->rect().y(), + canvas->mapX(pos), + event->rect().y() + event->rect().height()); + } } void CanvasToolListen::update(size_t pos) { - this->pos = pos; - size_t last = canvas->mapX(lastpos); - size_t x = canvas->mapX(player.pos); - QRect r(last, 0, - x - last + 2, canvas->height()); - - canvas->update(r); - lastpos = pos; + this->pos = pos; + size_t last = canvas->mapX(lastpos); + size_t x = canvas->mapX(player.pos); + QRect r(last, 0, + x - last + 2, canvas->height()); + + canvas->update(r); + lastpos = pos; } diff --git a/src/canvastoollisten.h b/src/canvastoollisten.h index bfb2d41..8fb8770 100644 --- a/src/canvastoollisten.h +++ b/src/canvastoollisten.h @@ -24,38 +24,35 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_CANVASTOOLLISTEN_H__ -#define __DRUMGIZMO_CANVASTOOLLISTEN_H__ +#pragma once #include "canvastool.h" -//#include - #include "canvas.h" #include "player.h" -class CanvasToolListen : public CanvasTool { -Q_OBJECT +class CanvasToolListen + : public CanvasTool +{ + Q_OBJECT public: - CanvasToolListen(Canvas *canvas, Player &player); + CanvasToolListen(Canvas* canvas, Player& player); + + QString name() { return "Listen"; } + bool mousePressEvent(QMouseEvent* event); + bool mouseReleaseEvent(QMouseEvent* event); + void paintEvent(QPaintEvent* event, QPainter& painter); - QString name() { return "Listen"; } - bool mousePressEvent(QMouseEvent *event); - bool mouseReleaseEvent(QMouseEvent *event); - void paintEvent(QPaintEvent *event, QPainter &painter); + void playRange(unsigned int from, unsigned int to); - void playRange(unsigned int from, unsigned int to); - public slots: - void update(size_t position); + void update(size_t position); private: - Canvas *canvas; + Canvas* canvas; - Player &player; + Player& player; - size_t lastpos; - size_t pos; + size_t lastpos; + size_t pos; }; - -#endif/*__DRUMGIZMO_CANVASTOOLLISTEN_H__*/ diff --git a/src/canvastoolselections.cc b/src/canvastoolselections.cc index ad5e193..ff1056e 100644 --- a/src/canvastoolselections.cc +++ b/src/canvastoolselections.cc @@ -34,286 +34,319 @@ #define unmapX(x) canvas->unmapX(x) #define unmapY(x) canvas->unmapY(x) -CanvasToolSelections::CanvasToolSelections(Canvas *c, Selections &s, - Selections &p) - : selections(s), selections_preview(p) +CanvasToolSelections::CanvasToolSelections(Canvas* c, Selections& s, + Selections& p) + : selections(s) + , selections_preview(p) { - threshold = 0.5; // Default from CanvasToolThreshold - hold = 100; + threshold = 0.5; // Default from CanvasToolThreshold + hold = 100; - canvas = c; + canvas = c; - selection_is_moving_left = false; - selection_is_moving_right = false; + selection_is_moving_left = false; + selection_is_moving_right = false; - colSelBg = QColor(255, 0, 0, 60); - colSel = QColor(255, 0, 0, 160); - colActiveSelBg = QColor(255, 255, 0, 60); - colActiveSel = QColor(255, 255, 0, 160); - colPreviewSelBg = QColor(0, 0, 255, 60); - colPreviewSel = QColor(0, 0, 255, 160); + colSelBg = QColor(255, 0, 0, 60); + colSel = QColor(255, 0, 0, 160); + colActiveSelBg = QColor(255, 255, 0, 60); + colActiveSel = QColor(255, 255, 0, 160); + colPreviewSelBg = QColor(0, 0, 255, 60); + colPreviewSel = QColor(0, 0, 255, 160); } -bool CanvasToolSelections::mouseMoveEvent(QMouseEvent *event) +bool CanvasToolSelections::mouseMoveEvent(QMouseEvent* event) { - sel_id_t active_selection = selections.active(); - Selection act_sel = selections.get(active_selection); - - if(selection_is_moving_left) { - float val = unmapX(event->x()); - if(val > act_sel.to) val = act_sel.to - 1; - act_sel.from = val; - selections.update(active_selection, act_sel); - canvas->update(); - return true; - } - - if(selection_is_moving_right) { - float val = unmapX(event->x()); - if(val < act_sel.from) val = act_sel.from + 1; - act_sel.to = val; - selections.update(active_selection, act_sel); - canvas->update(); - return true; - } - - if(event->button() != Qt::LeftButton) { - // Check if a selection is being dragged. - QVector ids = selections.ids(); - QVector::iterator i = ids.begin(); - while(i != ids.end()) { - Selection sel = selections.get(*i); - if(abs(event->x() - mapX(sel.from)) < 2 - || abs(event->x() - mapX(sel.to)) < 2) { - canvas->setCursor(Qt::SplitHCursor); - return true; - } - i++; - } - } - - return false; + sel_id_t active_selection = selections.active(); + Selection act_sel = selections.get(active_selection); + + if(selection_is_moving_left) + { + float val = unmapX(event->x()); + if(val > act_sel.to) val = act_sel.to - 1; + act_sel.from = val; + selections.update(active_selection, act_sel); + canvas->update(); + return true; + } + + if(selection_is_moving_right) + { + float val = unmapX(event->x()); + if(val < act_sel.from) val = act_sel.from + 1; + act_sel.to = val; + selections.update(active_selection, act_sel); + canvas->update(); + return true; + } + + if(event->button() != Qt::LeftButton) + { + // Check if a selection is being dragged. + QVector ids = selections.ids(); + QVector::iterator i = ids.begin(); + while(i != ids.end()) + { + Selection sel = selections.get(*i); + if(abs(event->x() - mapX(sel.from)) < 2 + || abs(event->x() - mapX(sel.to)) < 2) + { + canvas->setCursor(Qt::SplitHCursor); + return true; + } + i++; + } + } + + return false; } -bool CanvasToolSelections::mousePressEvent(QMouseEvent *event) +bool CanvasToolSelections::mousePressEvent(QMouseEvent* event) { - if(event->button() == Qt::LeftButton) { - // Check if a selection is being dragged. - QVector ids = selections.ids(); - QVector::iterator i = ids.begin(); - while(i != ids.end()) { - Selection sel = selections.get(*i); - if(abs(event->x() - mapX(sel.from)) < 2) { - selections.setActive(*i); - selection_is_moving_left = true; - return true; - } - - if(abs(event->x() - mapX(sel.to)) < 2) { - selections.setActive(*i); - selection_is_moving_right = true; - return true; - } - - i++; - } - - // Check if a selection is being selected. - i = ids.begin(); - while(i != ids.end()) { - Selection sel = selections.get(*i); - if(event->x() > mapX(sel.from) && - event->x() < mapX(sel.to)) { - selections.setActive(*i); - canvas->update(); - return true; - } - - i++; - } - - // Make new selection - int from = unmapX(event->x()); - Selection new_selection(from, from); - sel_id_t id = selections.add(new_selection); - selections.setActive(id); - selection_is_moving_right = true; - canvas->update(); - return true; - } - - return false; + if(event->button() == Qt::LeftButton) + { + // Check if a selection is being dragged. + QVector ids = selections.ids(); + QVector::iterator i = ids.begin(); + while(i != ids.end()) + { + Selection sel = selections.get(*i); + if(abs(event->x() - mapX(sel.from)) < 2) + { + selections.setActive(*i); + selection_is_moving_left = true; + return true; + } + + if(abs(event->x() - mapX(sel.to)) < 2) + { + selections.setActive(*i); + selection_is_moving_right = true; + return true; + } + + i++; + } + + // Check if a selection is being selected. + i = ids.begin(); + while(i != ids.end()) + { + Selection sel = selections.get(*i); + if(event->x() > mapX(sel.from) && + event->x() < mapX(sel.to)) + { + selections.setActive(*i); + canvas->update(); + return true; + } + + i++; + } + + // Make new selection + int from = unmapX(event->x()); + Selection new_selection(from, from); + sel_id_t id = selections.add(new_selection); + selections.setActive(id); + selection_is_moving_right = true; + canvas->update(); + return true; + } + + return false; } -bool CanvasToolSelections::mouseReleaseEvent(QMouseEvent *event) +bool CanvasToolSelections::mouseReleaseEvent(QMouseEvent* event) { - if(event->button() == Qt::LeftButton) { - if(selection_is_moving_left || selection_is_moving_right) { - selection_is_moving_left = false; - selection_is_moving_right = false; - canvas->setCursor(Qt::ArrowCursor); - canvas->update(); - return true; - } - } - - return false; + if(event->button() == Qt::LeftButton) + { + if(selection_is_moving_left || selection_is_moving_right) + { + selection_is_moving_left = false; + selection_is_moving_right = false; + canvas->setCursor(Qt::ArrowCursor); + canvas->update(); + return true; + } + } + + return false; } -void CanvasToolSelections::paintEvent(QPaintEvent *event, QPainter &painter) +void CanvasToolSelections::paintEvent(QPaintEvent* event, QPainter& painter) { - int pos = unmapX(event->rect().x()); - int width = unmapX(event->rect().width()); - - { - QVector ids = selections.ids(); - QVector::iterator i = ids.begin(); - while(i != ids.end()) { - Selection sel = selections.get(*i); - int from = sel.from; - int to = sel.to; - int fadein = sel.fadein; - int fadeout = sel.fadeout; - if(from > pos + width || to + width < pos) { i++; continue; } - if(selections.active() == *i) { - painter.setBrush(colActiveSelBg); - painter.setPen(colActiveSel); - } else { - painter.setBrush(colSelBg); - painter.setPen(colSel); - } - painter.drawRect(mapX(from), mapY(-1.0), - mapX(to) - mapX(from), mapY(1.0) - mapY(-1.0)); - painter.drawLine(mapX(from), mapY(0.0), mapX(from + fadein), mapY(-1.0)); - painter.drawLine(mapX(from), mapY(0.0), mapX(from + fadein), mapY(1.0)); - painter.drawLine(mapX(to - fadeout), mapY(-1.0), mapX(to), mapY(0.0)); - painter.drawLine(mapX(to - fadeout), mapY(1.0), mapX(to), mapY(0.0)); - i++; - } - } - - if(show_preview) { - QVector ids = selections_preview.ids(); - QVector::iterator i = ids.begin(); - while(i != ids.end()) { - Selection sel = selections_preview.get(*i); - int from = sel.from; - int to = sel.to; - int fadein = sel.fadein; - int fadeout = sel.fadeout; - if(from > pos + width || to + width < pos) { i++; continue; } - painter.setBrush(colPreviewSelBg); - painter.setPen(colPreviewSel); - - painter.drawRect(mapX(from), mapY(-1.0), - mapX(to) - mapX(from), mapY(1.0) - mapY(-1.0)); - painter.drawLine(mapX(from), mapY(0.0), mapX(from + fadein), mapY(-1.0)); - painter.drawLine(mapX(from), mapY(0.0), mapX(from + fadein), mapY(1.0)); - painter.drawLine(mapX(to - fadeout), mapY(-1.0), mapX(to), mapY(0.0)); - painter.drawLine(mapX(to - fadeout), mapY(1.0), mapX(to), mapY(0.0)); - i++; - } - } + int pos = unmapX(event->rect().x()); + int width = unmapX(event->rect().width()); + + { + QVector ids = selections.ids(); + QVector::iterator i = ids.begin(); + while(i != ids.end()) + { + Selection sel = selections.get(*i); + int from = sel.from; + int to = sel.to; + int fadein = sel.fadein; + int fadeout = sel.fadeout; + if(from > pos + width || to + width < pos) + { i++; continue; } + if(selections.active() ==* i) + { + painter.setBrush(colActiveSelBg); + painter.setPen(colActiveSel); + } + else + { + painter.setBrush(colSelBg); + painter.setPen(colSel); + } + painter.drawRect(mapX(from), mapY(-1.0), + mapX(to) - mapX(from), mapY(1.0) - mapY(-1.0)); + painter.drawLine(mapX(from), mapY(0.0), mapX(from + fadein), mapY(-1.0)); + painter.drawLine(mapX(from), mapY(0.0), mapX(from + fadein), mapY(1.0)); + painter.drawLine(mapX(to - fadeout), mapY(-1.0), mapX(to), mapY(0.0)); + painter.drawLine(mapX(to - fadeout), mapY(1.0), mapX(to), mapY(0.0)); + i++; + } + } + + if(show_preview) + { + QVector ids = selections_preview.ids(); + QVector::iterator i = ids.begin(); + while(i != ids.end()) + { + Selection sel = selections_preview.get(*i); + int from = sel.from; + int to = sel.to; + int fadein = sel.fadein; + int fadeout = sel.fadeout; + if(from > pos + width || to + width < pos) + { i++; continue; } + painter.setBrush(colPreviewSelBg); + painter.setPen(colPreviewSel); + + painter.drawRect(mapX(from), mapY(-1.0), + mapX(to) - mapX(from), mapY(1.0) - mapY(-1.0)); + painter.drawLine(mapX(from), mapY(0.0), mapX(from + fadein), mapY(-1.0)); + painter.drawLine(mapX(from), mapY(0.0), mapX(from + fadein), mapY(1.0)); + painter.drawLine(mapX(to - fadeout), mapY(-1.0), mapX(to), mapY(0.0)); + painter.drawLine(mapX(to - fadeout), mapY(1.0), mapX(to), mapY(0.0)); + i++; + } + } } -void CanvasToolSelections::keyReleaseEvent(QKeyEvent *event) +void CanvasToolSelections::keyReleaseEvent(QKeyEvent* event) { - if(selections.active() != SEL_NONE && event->key() == Qt::Key_Delete) { - selections.remove(selections.active()); - canvas->update(); - } + if(selections.active() != SEL_NONE && event->key() == Qt::Key_Delete) + { + selections.remove(selections.active()); + canvas->update(); + } } void CanvasToolSelections::thresholdChanged(double t) { - threshold = t; + threshold = t; } void CanvasToolSelections::holdChanged(int h) { - hold = h; + hold = h; } void CanvasToolSelections::noiseFloorChanged(int t) { - double div = 666.0 / 0.00003; - noise_floor = (double)t/div; + double div = 666.0 / 0.00003; + noise_floor = (double)t/div; } void CanvasToolSelections::fadeoutChanged(int t) { - fadeout = (double)t/1000.0; + fadeout = (double)t/1000.0; } void CanvasToolSelections::autoCreateSelections() { - doAutoCreateSelections(false); + doAutoCreateSelections(false); } void CanvasToolSelections::autoCreateSelectionsPreview() { - doAutoCreateSelections(true); + doAutoCreateSelections(true); } void CanvasToolSelections::doAutoCreateSelections(bool preview) { - float *data = canvas->data; - size_t size = canvas->size; - - if(preview) selections_preview.clear(); - - for(size_t i = 0; i < size; i++) { - if(fabs(data[i]) > fabs(threshold)) { - int from = i; - - if(data[from] > 0.0) { - while(data[from] > data[from-1] // Falling - && data[from-1] > 0.0 // Not crossing zero - ) { - from--; - } - } else if(data[from] < 0.0) { - while(data[from] < data[from-1] // Rising - && data[from-1] < 0.0 // Not crossing zero - ) { - from--; - } - } - - int to = i; - float runavg = fabs(data[from]); - while((runavg > noise_floor || - to < from + hold) && - to < (int)size) { - double p = 0.9; - runavg = runavg * p + fabs(data[to]) * (1 - p); - to++; - } - - Selection s(from, to, 2, ((to - from) / 3) * fadeout); - if(preview) { - selections_preview.add(s); - } else { - selections.add(s); - } - - i = to+1; - } - } - canvas->update(); + float* data = canvas->data; + size_t size = canvas->size; + + if(preview) selections_preview.clear(); + + for(size_t i = 0; i < size; i++) + { + if(fabs(data[i]) > fabs(threshold)) + { + int from = i; + + if(data[from] > 0.0) + { + while(data[from] > data[from-1] && // Falling + data[from-1] > 0.0 // Not crossing zero + ) + { + from--; + } + } + else if(data[from] < 0.0) + { + while(data[from] < data[from-1] && // Rising + data[from-1] < 0.0 // Not crossing zero + ) + { + from--; + } + } + + int to = i; + float runavg = fabs(data[from]); + while((runavg > noise_floor || to < from + hold) && + to < (int)size) + { + double p = 0.9; + runavg = runavg * p + fabs(data[to]) * (1 - p); + to++; + } + + Selection s(from, to, 2, ((to - from) / 3) * fadeout); + if(preview) + { + selections_preview.add(s); + } + else + { + selections.add(s); + } + + i = to+1; + } + } + canvas->update(); } void CanvasToolSelections::clearSelections() { - selections.clear(); - selection_is_moving_left = false; - selection_is_moving_right = false; - canvas->setCursor(Qt::ArrowCursor); - canvas->update(); + selections.clear(); + selection_is_moving_left = false; + selection_is_moving_right = false; + canvas->setCursor(Qt::ArrowCursor); + canvas->update(); } void CanvasToolSelections::setShowPreview(bool s) { - show_preview = s; - canvas->update(); + show_preview = s; + canvas->update(); } diff --git a/src/canvastoolselections.h b/src/canvastoolselections.h index 0557520..f911e70 100644 --- a/src/canvastoolselections.h +++ b/src/canvastoolselections.h @@ -24,8 +24,7 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_CANVASTOOLSELECTIONS_H__ -#define __DRUMGIZMO_CANVASTOOLSELECTIONS_H__ +#pragma once #include "canvastool.h" @@ -35,59 +34,59 @@ #include "selection.h" -class CanvasToolSelections : public CanvasTool { -Q_OBJECT +class CanvasToolSelections + : public CanvasTool +{ + Q_OBJECT public: - CanvasToolSelections(Canvas *canvas, Selections &selections, - Selections &selections_preview); + CanvasToolSelections(Canvas* canvas, Selections& selections, + Selections& selections_preview); - QString name() { return "Selections"; } - bool mouseMoveEvent(QMouseEvent *event); - bool mousePressEvent(QMouseEvent *event); - bool mouseReleaseEvent(QMouseEvent *event); - void paintEvent(QPaintEvent *event, QPainter &painter); - void keyReleaseEvent(QKeyEvent *event); + QString name() { return "Selections"; } + bool mouseMoveEvent(QMouseEvent* event); + bool mousePressEvent(QMouseEvent* event); + bool mouseReleaseEvent(QMouseEvent* event); + void paintEvent(QPaintEvent* event, QPainter& painter); + void keyReleaseEvent(QKeyEvent* event); - //Selections selections(); + //Selections selections(); signals: - //void selectionsChanged(Selections selections); - //void activeSelectionChanged(sel_id_t id); + //void selectionsChanged(Selections selections); + //void activeSelectionChanged(sel_id_t id); public slots: - void autoCreateSelections(); - void autoCreateSelectionsPreview(); - void clearSelections(); - void thresholdChanged(double threshold); - void noiseFloorChanged(int t); - void holdChanged(int h); - void fadeoutChanged(int f); - void setShowPreview(bool show_preview); + void autoCreateSelections(); + void autoCreateSelectionsPreview(); + void clearSelections(); + void thresholdChanged(double threshold); + void noiseFloorChanged(int t); + void holdChanged(int h); + void fadeoutChanged(int f); + void setShowPreview(bool show_preview); private: - void doAutoCreateSelections(bool preview); + void doAutoCreateSelections(bool preview); - bool selection_is_moving_left; - bool selection_is_moving_right; + bool selection_is_moving_left; + bool selection_is_moving_right; - Canvas *canvas; + Canvas* canvas; - double threshold; - double noise_floor; - double fadeout; - int hold; + double threshold; + double noise_floor; + double fadeout; + int hold; - QColor colSelBg; - QColor colSel; - QColor colActiveSelBg; - QColor colActiveSel; - QColor colPreviewSelBg; - QColor colPreviewSel; + QColor colSelBg; + QColor colSel; + QColor colActiveSelBg; + QColor colActiveSel; + QColor colPreviewSelBg; + QColor colPreviewSel; - Selections &selections; - Selections &selections_preview; + Selections& selections; + Selections& selections_preview; - bool show_preview; + bool show_preview; }; - -#endif/*__DRUMGIZMO_CANVASTOOLSELECTIONS_H__*/ diff --git a/src/canvastoolthreshold.cc b/src/canvastoolthreshold.cc index a321ff2..bafee70 100644 --- a/src/canvastoolthreshold.cc +++ b/src/canvastoolthreshold.cc @@ -33,88 +33,115 @@ #define unmapX(x) canvas->unmapX(x) #define unmapY(x) canvas->unmapY(x) -CanvasToolThreshold::CanvasToolThreshold(Canvas *c) +CanvasToolThreshold::CanvasToolThreshold(Canvas* c) { - canvas = c; - threshold = 0.5; - threshold_is_moving = false; + canvas = c; + threshold = 0.5; + threshold_is_moving = false; - colThreshold = QColor(255, 127, 127); - colThresholdMoving = QColor(180, 0, 0); + colThreshold = QColor(255, 127, 127); + colThresholdMoving = QColor(180, 0, 0); } -bool CanvasToolThreshold::mouseMoveEvent(QMouseEvent *event) +bool CanvasToolThreshold::mouseMoveEvent(QMouseEvent* event) { - if(!isActive()) return false; - - if(event->button() != Qt::LeftButton) { - if(abs(event->y() - mapY(threshold)) < 2 || - abs(event->y() - mapY(-threshold)) < 2 ) { - canvas->setCursor(Qt::SplitVCursor); - return true; - } - } - - if(threshold_is_moving) { - float val = unmapY(event->y()); - if(fabs(val) > 1.0) val = 1.0; - threshold = fabs(val); - canvas->update(); - - emit thresholdChanging(threshold); - - return true; - } - - return false; + if(!isActive()) + { + return false; + } + + if(event->button() != Qt::LeftButton) + { + if(abs(event->y() - mapY(threshold)) < 2 || + abs(event->y() - mapY(-threshold)) < 2 ) + { + + canvas->setCursor(Qt::SplitVCursor); + return true; + } + } + + if(threshold_is_moving) + { + float val = unmapY(event->y()); + if(fabs(val) > 1.0) + { + val = 1.0; + } + threshold = fabs(val); + canvas->update(); + + emit thresholdChanging(threshold); + + return true; + } + + return false; } -bool CanvasToolThreshold::mousePressEvent(QMouseEvent *event) +bool CanvasToolThreshold::mousePressEvent(QMouseEvent* event) { - if(!isActive()) return false; - - if(event->button() == Qt::LeftButton) { - - // Check if threshold is being dragged. - if(abs(event->y() - mapY(threshold)) < 2 || - abs(event->y() - mapY(-threshold)) < 2 ) { - threshold_is_moving = true; - canvas->update(); - return true; - } - } - - return false; + if(!isActive()) + { + return false; + } + + if(event->button() == Qt::LeftButton) + { + // Check if threshold is being dragged. + if(abs(event->y() - mapY(threshold)) < 2 || + abs(event->y() - mapY(-threshold)) < 2) + { + threshold_is_moving = true; + canvas->update(); + return true; + } + } + + return false; } -bool CanvasToolThreshold::mouseReleaseEvent(QMouseEvent *event) +bool CanvasToolThreshold::mouseReleaseEvent(QMouseEvent* event) { - if(!isActive()) return false; - - if(event->button() == Qt::LeftButton) { - if(threshold_is_moving) { - threshold_is_moving = false; - canvas->setCursor(Qt::ArrowCursor); - canvas->update(); - - emit thresholdChanged(threshold); - - return true; - } - } - - return false; + if(!isActive()) + { + return false; + } + + if(event->button() == Qt::LeftButton) + { + if(threshold_is_moving) + { + threshold_is_moving = false; + canvas->setCursor(Qt::ArrowCursor); + canvas->update(); + + emit thresholdChanged(threshold); + + return true; + } + } + + return false; } -void CanvasToolThreshold::paintEvent(QPaintEvent *event, QPainter &painter) +void CanvasToolThreshold::paintEvent(QPaintEvent* event, QPainter& painter) { - if(!isActive()) return; - - if(threshold_is_moving) painter.setPen(colThresholdMoving); - else painter.setPen(colThreshold); - painter.drawLine(event->rect().x(), mapY(threshold), - event->rect().x() + event->rect().width(), mapY(threshold)); - painter.drawLine(event->rect().x(), mapY(-threshold), - event->rect().x() + event->rect().width(), mapY(-threshold)); + if(!isActive()) + { + return; + } + + if(threshold_is_moving) + { + painter.setPen(colThresholdMoving); + } + else + { + painter.setPen(colThreshold); + } + painter.drawLine(event->rect().x(), mapY(threshold), + event->rect().x() + event->rect().width(), mapY(threshold)); + painter.drawLine(event->rect().x(), mapY(-threshold), + event->rect().x() + event->rect().width(), mapY(-threshold)); } - diff --git a/src/canvastoolthreshold.h b/src/canvastoolthreshold.h index 907e312..1279c75 100644 --- a/src/canvastoolthreshold.h +++ b/src/canvastoolthreshold.h @@ -24,8 +24,7 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_CANVASTOOLTHRESHOLD_H__ -#define __DRUMGIZMO_CANVASTOOLTHRESHOLD_H__ +#pragma once #include "canvastool.h" @@ -33,29 +32,29 @@ #include "canvas.h" -class CanvasToolThreshold : public CanvasTool { -Q_OBJECT +class CanvasToolThreshold + : public CanvasTool +{ + Q_OBJECT public: - CanvasToolThreshold(Canvas *canvas); + CanvasToolThreshold(Canvas* canvas); - QString name() { return "Threshold"; } - bool mouseMoveEvent(QMouseEvent *event); - bool mousePressEvent(QMouseEvent *event); - bool mouseReleaseEvent(QMouseEvent *event); - void paintEvent(QPaintEvent *event, QPainter &painter); + QString name() { return "Threshold"; } + bool mouseMoveEvent(QMouseEvent* event); + bool mousePressEvent(QMouseEvent* event); + bool mouseReleaseEvent(QMouseEvent* event); + void paintEvent(QPaintEvent* event, QPainter& painter); signals: - void thresholdChanged(double threshold); - void thresholdChanging(double threshold); + void thresholdChanged(double threshold); + void thresholdChanging(double threshold); private: - float threshold; - bool threshold_is_moving; + float threshold; + bool threshold_is_moving; - Canvas *canvas; + Canvas* canvas; - QColor colThreshold; - QColor colThresholdMoving; + QColor colThreshold; + QColor colThresholdMoving; }; - -#endif/*__DRUMGIZMO_CANVASTOOLTHRESHOLD_H__*/ diff --git a/src/canvaswidget.cc b/src/canvaswidget.cc index c0e0b88..5ce2731 100644 --- a/src/canvaswidget.cc +++ b/src/canvaswidget.cc @@ -32,64 +32,64 @@ #define SINGLESTEP MAXVAL/100000 #define PAGESTEP MAXVAL/10000 -CanvasWidget::CanvasWidget(QWidget *parent) +CanvasWidget::CanvasWidget(QWidget* parent) { - QGridLayout *g = new QGridLayout(this); + QGridLayout* g = new QGridLayout(this); - canvas = new Canvas(this); - g->addWidget(canvas, 0, 0); + canvas = new Canvas(this); + g->addWidget(canvas, 0, 0); - yoffset = new QScrollBar(Qt::Vertical); - yoffset->setRange(0, MAXVAL); - yoffset->setPageStep(PAGESTEP); - yoffset->setSingleStep(SINGLESTEP); - connect(yoffset, SIGNAL(valueChanged(int)), this, SLOT(setYOffset(int))); - g->addWidget(yoffset, 0, 1); + yoffset = new QScrollBar(Qt::Vertical); + yoffset->setRange(0, MAXVAL); + yoffset->setPageStep(PAGESTEP); + yoffset->setSingleStep(SINGLESTEP); + connect(yoffset, SIGNAL(valueChanged(int)), this, SLOT(setYOffset(int))); + g->addWidget(yoffset, 0, 1); - yscale = new ZoomSlider(Qt::Vertical); - yscale->setRange(0.5, 30); - yscale->setTickWidth(0.1); - connect(yscale, SIGNAL(valueChanged(float)), this, SLOT(setYScale(float))); - yscale->setValue(0.5); - setYScale(0.5); - g->addWidget(yscale, 0, 2); + yscale = new ZoomSlider(Qt::Vertical); + yscale->setRange(0.5, 30); + yscale->setTickWidth(0.1); + connect(yscale, SIGNAL(valueChanged(float)), this, SLOT(setYScale(float))); + yscale->setValue(0.5); + setYScale(0.5); + g->addWidget(yscale, 0, 2); - xoffset = new QScrollBar(Qt::Horizontal); - xoffset->setRange(0, MAXVAL); - xoffset->setPageStep(PAGESTEP); - xoffset->setSingleStep(SINGLESTEP); - connect(xoffset, SIGNAL(valueChanged(int)), this, SLOT(setXOffset(int))); - g->addWidget(xoffset, 1, 0); + xoffset = new QScrollBar(Qt::Horizontal); + xoffset->setRange(0, MAXVAL); + xoffset->setPageStep(PAGESTEP); + xoffset->setSingleStep(SINGLESTEP); + connect(xoffset, SIGNAL(valueChanged(int)), this, SLOT(setXOffset(int))); + g->addWidget(xoffset, 1, 0); - xscale = new ZoomSlider(Qt::Horizontal); - xscale->setRange(1, 0.0001); - xscale->setTickWidth(0.0001); - connect(xscale, SIGNAL(valueChanged(float)), this, SLOT(setXScale(float))); - g->addWidget(xscale, 2, 0); + xscale = new ZoomSlider(Qt::Horizontal); + xscale->setRange(1, 0.0001); + xscale->setTickWidth(0.0001); + connect(xscale, SIGNAL(valueChanged(float)), this, SLOT(setXScale(float))); + g->addWidget(xscale, 2, 0); - setLayout(g); + setLayout(g); } void CanvasWidget::setXScale(float val) { - canvas->setXScale(val); + canvas->setXScale(val); } void CanvasWidget::setYScale(float val) { - canvas->setYScale(val); + canvas->setYScale(val); } void CanvasWidget::setXOffset(int of) { - // range 0.0 - 1.0 - float val = (float)of/(float)MAXVAL; - canvas->setXOffset(val); + // range 0.0 - 1.0 + float val = (float)of/(float)MAXVAL; + canvas->setXOffset(val); } void CanvasWidget::setYOffset(int of) { - // range 0.0 - 1.0 - float val = (float)(of * -1 + MAXVAL)/(float)MAXVAL; - canvas->setYOffset(val); + // range 0.0 - 1.0 + float val = (float)(of * -1 + MAXVAL)/(float)MAXVAL; + canvas->setYOffset(val); } diff --git a/src/canvaswidget.h b/src/canvaswidget.h index 1ae73da..80d6933 100644 --- a/src/canvaswidget.h +++ b/src/canvaswidget.h @@ -24,8 +24,7 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_CANVASWIDGET_H__ -#define __DRUMGIZMO_CANVASWIDGET_H__ +#pragma once #include @@ -34,24 +33,23 @@ #include "canvas.h" #include "zoomslider.h" -class CanvasWidget : public QWidget { -Q_OBJECT +class CanvasWidget + : public QWidget +{ + Q_OBJECT public: - CanvasWidget(QWidget *parent); - - Canvas *canvas; + CanvasWidget(QWidget* parent); - QScrollBar *yoffset; - ZoomSlider *yscale; - ZoomSlider *xscale; - QScrollBar *xoffset; + Canvas* canvas; -public slots: - void setXScale(float); - void setYScale(float); - void setXOffset(int); - void setYOffset(int); + QScrollBar* yoffset; + ZoomSlider* yscale; + ZoomSlider* xscale; + QScrollBar* xoffset; +public slots: + void setXScale(float); + void setYScale(float); + void setXOffset(int); + void setYOffset(int); }; - -#endif/*__DRUMGIZMO_CANVASWIDGET_H__*/ diff --git a/src/dgedit.cc b/src/dgedit.cc index 0417876..d590bc6 100644 --- a/src/dgedit.cc +++ b/src/dgedit.cc @@ -30,10 +30,10 @@ int main(int argc, char *argv[]) { - QApplication app(argc, argv); + QApplication app(argc, argv); - MainWindow wnd; - wnd.show(); + MainWindow wnd; + wnd.show(); - return app.exec(); + return app.exec(); } diff --git a/src/filelist.cc b/src/filelist.cc index c4e5c4b..6cad785 100644 --- a/src/filelist.cc +++ b/src/filelist.cc @@ -34,153 +34,167 @@ FileList::FileList() { - setContextMenuPolicy(Qt::CustomContextMenu); + setContextMenuPolicy(Qt::CustomContextMenu); - connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), - this, SLOT(popupMenu(const QPoint &))); + connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), + this, SLOT(popupMenu(const QPoint&))); - connect(this, SIGNAL(itemDoubleClicked(QListWidgetItem *)), - this, SLOT(selectionChanged(QListWidgetItem *))); + connect(this, SIGNAL(itemDoubleClicked(QListWidgetItem*)), + this, SLOT(selectionChanged(QListWidgetItem*))); - createMenus(); + createMenus(); } void FileList::addFiles() { - QStringList files = QFileDialog::getOpenFileNames(this, tr("Open file"), - path, tr("Audio Files (*.wav)")); - QStringList::Iterator i = files.begin(); - while(i != files.end()) { - QString file = *i; - QFileInfo fi(file); - QString name = fi.baseName(); - path = fi.absolutePath(); - - QListWidgetItem *item = new QListWidgetItem(); - setItemFile(item, file); - setItemName(item, name); - setItemMaster(item, false); - addItem(item); - - emit fileAdded(file, name); - - i++; - } + QStringList files = QFileDialog::getOpenFileNames(this, tr("Open file"), + path, tr("Audio Files (*.wav)")); + QStringList::Iterator i = files.begin(); + while(i != files.end()) + { + QString file = *i; + QFileInfo fi(file); + QString name = fi.baseName(); + path = fi.absolutePath(); + + QListWidgetItem* item = new QListWidgetItem(); + setItemFile(item, file); + setItemName(item, name); + setItemMaster(item, false); + addItem(item); + + emit fileAdded(file, name); + + i++; + } } -void FileList::setMasterFile(QListWidgetItem *i) +void FileList::setMasterFile(QListWidgetItem* i) { - QString filename = itemFile(i); + QString filename = itemFile(i); - for(int idx = 0; idx < count(); idx++) { - setItemMaster(item(idx), false); - } + for(int idx = 0; idx < count(); idx++) + { + setItemMaster(item(idx), false); + } - setItemMaster(i, true); - emit masterFileChanged(filename); + setItemMaster(i, true); + emit masterFileChanged(filename); } -void FileList::selectionChanged(QListWidgetItem *i) +void FileList::selectionChanged(QListWidgetItem* i) { - setMasterFile(i); + setMasterFile(i); } void FileList::createMenus() { - menu = new QMenu(); + menu = new QMenu(); - setMasterAction = new QAction("Set as Master (dbl-click)", this); - connect(setMasterAction, SIGNAL(triggered()), this, SLOT(setMaster())); + setMasterAction = new QAction("Set as Master (dbl-click)", this); + connect(setMasterAction, SIGNAL(triggered()), this, SLOT(setMaster())); - editAction = new QAction("Edit name", this); - connect(editAction, SIGNAL(triggered()), this, SLOT(editName())); + editAction = new QAction("Edit name", this); + connect(editAction, SIGNAL(triggered()), this, SLOT(editName())); - removeAction = new QAction("Remove", this); - connect(removeAction, SIGNAL(triggered()), this, SLOT(removeFile())); + removeAction = new QAction("Remove", this); + connect(removeAction, SIGNAL(triggered()), this, SLOT(removeFile())); - removeAllAction = new QAction("Remove all", this); - connect(removeAllAction, SIGNAL(triggered()), this, SLOT(removeAllFiles())); + removeAllAction = new QAction("Remove all", this); + connect(removeAllAction, SIGNAL(triggered()), this, SLOT(removeAllFiles())); - menu->addAction(setMasterAction); - menu->addAction(editAction); - menu->addAction(removeAction); - menu->addSeparator(); - menu->addAction(removeAllAction); + menu->addAction(setMasterAction); + menu->addAction(editAction); + menu->addAction(removeAction); + menu->addSeparator(); + menu->addAction(removeAllAction); } -void FileList::popupMenu(const QPoint & pos) +void FileList::popupMenu(const QPoint& pos) { - activeItem = itemAt(pos); - if(!activeItem) return; - menu->popup(mapToGlobal(pos)); + activeItem = itemAt(pos); + if(!activeItem) + { + return; + } + menu->popup(mapToGlobal(pos)); } void FileList::setMaster() { - setMasterFile(activeItem); + setMasterFile(activeItem); } void FileList::removeFile() { - QString file = itemFile(activeItem); - QString name = itemName(activeItem); + QString file = itemFile(activeItem); + QString name = itemName(activeItem); - printf("Removing: %s\n", file.toStdString().c_str()); - delete activeItem;//takeItem(row(activeItem)); - activeItem = NULL; - setCurrentRow(-1); + printf("Removing: %s\n", file.toStdString().c_str()); + delete activeItem;//takeItem(row(activeItem)); + activeItem = NULL; + setCurrentRow(-1); - emit fileRemoved(file, name); + emit fileRemoved(file, name); } void FileList::removeAllFiles() { - activeItem = NULL; + activeItem = NULL; - clear(); + clear(); - emit allFilesRemoved(); + emit allFilesRemoved(); } void FileList::editName() { - ItemEditor *e = new ItemEditor(activeItem, itemName(activeItem)); - connect(e, SIGNAL(updateItem(QListWidgetItem *, QString)), - this, SLOT(setItemName(QListWidgetItem *, QString))); + ItemEditor* e = new ItemEditor(activeItem, itemName(activeItem)); + connect(e, SIGNAL(updateItem(QListWidgetItem*, QString)), + this, SLOT(setItemName(QListWidgetItem*, QString))); } // Item utility functions. -QString FileList::itemFile(QListWidgetItem *i) +QString FileList::itemFile(QListWidgetItem* i) { - return i->data(Qt::ToolTipRole).toString(); + return i->data(Qt::ToolTipRole).toString(); } -void FileList::setItemFile(QListWidgetItem *i, QString file) +void FileList::setItemFile(QListWidgetItem* i, QString file) { - i->setData(Qt::ToolTipRole, file); - i->setData(Qt::DisplayRole, itemName(i) + "\t" + file); + i->setData(Qt::ToolTipRole, file); + i->setData(Qt::DisplayRole, itemName(i) + "\t" + file); } -QString FileList::itemName(QListWidgetItem *i) +QString FileList::itemName(QListWidgetItem* i) { - return i->data(Qt::UserRole).toString(); + return i->data(Qt::UserRole).toString(); } -void FileList::setItemName(QListWidgetItem *i, QString name) +void FileList::setItemName(QListWidgetItem* i, QString name) { - QString oldname = itemName(i); + QString oldname = itemName(i); - i->setData(Qt::UserRole, name); - i->setData(Qt::DisplayRole, name + "\t" + itemFile(i)); + i->setData(Qt::UserRole, name); + i->setData(Qt::DisplayRole, name + "\t" + itemFile(i)); - if(oldname != "" && oldname != name) emit nameChanged(itemFile(i), name); + if(oldname != "" && oldname != name) + { + emit nameChanged(itemFile(i), name); + } } -void FileList::setItemMaster(QListWidgetItem *i, bool master) +void FileList::setItemMaster(QListWidgetItem* i, bool master) { - if(master) i->setIcon(QPixmap(":icons/master.png")); - else i->setIcon(QPixmap(":icons/file.png")); + if(master) + { + i->setIcon(QPixmap(":icons/master.png")); + } + else + { + i->setIcon(QPixmap(":icons/file.png")); + } } diff --git a/src/filelist.h b/src/filelist.h index 2ca277c..01cf684 100644 --- a/src/filelist.h +++ b/src/filelist.h @@ -24,55 +24,55 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_FILELIST_H__ -#define __DRUMGIZMO_FILELIST_H__ +#pragma once #include #include #include #include -class FileList : public QListWidget { -Q_OBJECT +class FileList + : public QListWidget +{ + Q_OBJECT public: - FileList(); + FileList(); + + QString path; - QString path; signals: - void masterFileChanged(QString filename); - void fileAdded(QString file, QString name); - void fileRemoved(QString file, QString name); - void allFilesRemoved(); - void nameChanged(QString file, QString name); + void masterFileChanged(QString filename); + void fileAdded(QString file, QString name); + void fileRemoved(QString file, QString name); + void allFilesRemoved(); + void nameChanged(QString file, QString name); public slots: - void addFiles(); - void popupMenu(const QPoint &pos); + void addFiles(); + void popupMenu(const QPoint& pos); private slots: - void selectionChanged(QListWidgetItem *item); - void setMaster(); - void removeFile(); - void removeAllFiles(); - void editName(); - void setItemName(QListWidgetItem *i, QString name); + void selectionChanged(QListWidgetItem* item); + void setMaster(); + void removeFile(); + void removeAllFiles(); + void editName(); + void setItemName(QListWidgetItem* i, QString name); private: - QString itemFile(QListWidgetItem *i); - QString itemName(QListWidgetItem *i); - void setItemFile(QListWidgetItem *i, QString file); - void setItemMaster(QListWidgetItem *i, bool master); + QString itemFile(QListWidgetItem* i); + QString itemName(QListWidgetItem* i); + void setItemFile(QListWidgetItem* i, QString file); + void setItemMaster(QListWidgetItem* i, bool master); - void setMasterFile(QListWidgetItem *i); - void createMenus(); + void setMasterFile(QListWidgetItem* i); + void createMenus(); - QMenu *menu; - QAction *setMasterAction; - QAction *editAction; - QAction *removeAction; - QAction *removeAllAction; + QMenu* menu; + QAction* setMasterAction; + QAction* editAction; + QAction* removeAction; + QAction* removeAllAction; - QListWidgetItem *activeItem; + QListWidgetItem* activeItem; }; - -#endif/*__DRUMGIZMO_FILELIST_H__*/ diff --git a/src/itemeditor.cc b/src/itemeditor.cc index 1925048..4dd93f5 100644 --- a/src/itemeditor.cc +++ b/src/itemeditor.cc @@ -26,15 +26,15 @@ */ #include "itemeditor.h" -ItemEditor::ItemEditor(QListWidgetItem *i, QString v) +ItemEditor::ItemEditor(QListWidgetItem* i, QString v) { - this->i = i; - setText(v); - show(); + this->i = i; + setText(v); + show(); } -void ItemEditor::focusOutEvent(QFocusEvent *) +void ItemEditor::focusOutEvent(QFocusEvent*) { - emit updateItem(i, text()); - close(); + emit updateItem(i, text()); + close(); } diff --git a/src/itemeditor.h b/src/itemeditor.h index b6b9e33..cc58f58 100644 --- a/src/itemeditor.h +++ b/src/itemeditor.h @@ -24,26 +24,25 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_ITEMEDITOR_H__ -#define __DRUMGIZMO_ITEMEDITOR_H__ +#pragma once #include #include #include -class ItemEditor : public QLineEdit { -Q_OBJECT +class ItemEditor + : public QLineEdit +{ + Q_OBJECT public: - ItemEditor(QListWidgetItem *i, QString v); + ItemEditor(QListWidgetItem* i, QString v); protected: - void focusOutEvent(QFocusEvent *); + void focusOutEvent(QFocusEvent* ); signals: - void updateItem(QListWidgetItem *i, QString v); + void updateItem(QListWidgetItem* i, QString v); private: - QListWidgetItem *i; + QListWidgetItem* i; }; - -#endif/*__DRUMGIZMO_ITEMEDITOR_H__*/ diff --git a/src/mainwindow.cc b/src/mainwindow.cc index 59fc26a..81beae0 100644 --- a/src/mainwindow.cc +++ b/src/mainwindow.cc @@ -54,178 +54,175 @@ #define MAXVAL 10000000L -/* -#define SINGLESTEP MAXVAL/100000 -#define PAGESTEP MAXVAL/10000 -*/ +//#define SINGLESTEP MAXVAL/100000 +//#define PAGESTEP MAXVAL/10000 -static void addTool(QToolBar *toolbar, Canvas *canvas, CanvasTool *tool) +static void addTool(QToolBar* toolbar, Canvas* canvas, CanvasTool* tool) { - QAction *action = new QAction(tool->name(), toolbar); - action->setCheckable(true); - toolbar->addAction(action); - tool->connect(action, SIGNAL(toggled(bool)), tool, SLOT(setActive(bool))); - tool->setActive(false); - canvas->tools.push_back(tool); + QAction* action = new QAction(tool->name(), toolbar); + action->setCheckable(true); + toolbar->addAction(action); + tool->connect(action, SIGNAL(toggled(bool)), tool, SLOT(setActive(bool))); + tool->setActive(false); + canvas->tools.push_back(tool); } MainWindow::MainWindow() { - { - int start = 44100 * 60; - Selection p(start, start + 44100 * 60, 0, 0); // one minute selection - selections_preview.add(p); - } - - QWidget *central = new QWidget(); - QHBoxLayout *lh = new QHBoxLayout(); - QVBoxLayout *lv = new QVBoxLayout(); - central->setLayout(lv); - setCentralWidget(central); - - extractor = new AudioExtractor(selections, this); - //canvas = new Canvas(this); - canvaswidget = new CanvasWidget(this); - - QToolBar *toolbar = addToolBar("Tools"); - listen = new CanvasToolListen(canvaswidget->canvas, player); - addTool(toolbar, canvaswidget->canvas, listen); - threshold = new CanvasToolThreshold(canvaswidget->canvas); - canvaswidget->canvas->tools.push_back(threshold);//addTool(toolbar, canvaswidget->canvas, threshold); - tool_selections = new CanvasToolSelections(canvaswidget->canvas, selections, - selections_preview); - connect(threshold, SIGNAL(thresholdChanged(double)), - tool_selections, SLOT(thresholdChanged(double))); - connect(threshold, SIGNAL(thresholdChanging(double)), - tool_selections, SLOT(thresholdChanged(double))); - connect(&selections, SIGNAL(activeChanged(sel_id_t)), - canvaswidget->canvas, SLOT(update())); - connect(&selections, SIGNAL(updated(sel_id_t)), - canvaswidget->canvas, SLOT(update())); - addTool(toolbar, canvaswidget->canvas, tool_selections); - - QMenu *fileMenu = menuBar()->addMenu("&File"); - QAction *act_quit = new QAction("&Quit", this); - fileMenu->addAction(act_quit); - connect(act_quit, SIGNAL(triggered()), this, SLOT(close())); - - // QWidget *dock = new QWidget(); - /* - yoffset = new QScrollBar(Qt::Vertical); - yoffset->setRange(0, MAXVAL); - yoffset->setPageStep(PAGESTEP); - yoffset->setSingleStep(SINGLESTEP); - connect(yoffset, SIGNAL(valueChanged(int)), this, SLOT(setYOffset(int))); - - yscale = new ZoomSlider(Qt::Vertical); - yscale->setRange(0.9, 30); - yscale->setTickWidth(0.1); - connect(yscale, SIGNAL(valueChanged(float)), this, SLOT(setYScale(float))); - - xscale = new ZoomSlider(Qt::Horizontal); - xscale->setRange(1, 0.0001); - xscale->setTickWidth(0.0001); - connect(xscale, SIGNAL(valueChanged(float)), this, SLOT(setXScale(float))); - - xoffset = new QScrollBar(Qt::Horizontal); - xoffset->setRange(0, MAXVAL); - xoffset->setPageStep(PAGESTEP); - xoffset->setSingleStep(SINGLESTEP); - connect(xoffset, SIGNAL(valueChanged(int)), this, SLOT(setXOffset(int))); - */ - sorter = new SampleSorter(selections, selections_preview); - connect(&selections, SIGNAL(added(sel_id_t)), - sorter, SLOT(addSelection(sel_id_t))); - connect(&selections_preview, SIGNAL(added(sel_id_t)), - sorter, SLOT(addSelectionPreview(sel_id_t))); - connect(&selections, SIGNAL(updated(sel_id_t)), sorter, SLOT(relayout())); - connect(&selections_preview, SIGNAL(updated(sel_id_t)), - sorter, SLOT(relayout())); - connect(&selections, SIGNAL(removed(sel_id_t)), sorter, SLOT(relayout())); - connect(&selections_preview, SIGNAL(removed(sel_id_t)), - sorter, SLOT(relayout())); - connect(&selections, SIGNAL(activeChanged(sel_id_t)), - sorter, SLOT(relayout())); - - 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(canvaswidget); - //lh->addWidget(yscale); - //lh->addWidget(yoffset); - lv->addLayout(lh, 100); - //lv->addWidget(xscale, 100); - //lv->addWidget(xoffset, 100); - lv->addWidget(sorter, 15); - lv->addWidget(btn_playsamples); - lv->addWidget(sb_playsamples); - - - QDockWidget *dockWidget = new QDockWidget(tr("Dock Widget"), this); - dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - - dockWidget->setWidget(new QWidget()); - dockWidget->widget()->setLayout(new QVBoxLayout()); - -// dockWidget->widget()->layout()->addWidget(new QLabel("Presets:")); -// presets = new QComboBox(); -// connect(presets, SIGNAL(currentIndexChanged(int)), -// this, SLOT(setPreset(int))); -// dockWidget->widget()->layout()->addWidget(presets); - - tabs = new QTabWidget(this); - tabs->addTab(createFilesTab(), "Files"); - generateTabId = tabs->addTab(createGenerateTab(), "Generate"); - tabs->addTab(createEditTab(), "Edit"); - tabs->addTab(createExportTab(), "Export"); - connect(tabs, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); - tabChanged(tabs->currentIndex()); - - dockWidget->widget()->layout()->addWidget(tabs); - - VolumeFader *vol = new VolumeFader(); - connect(vol, SIGNAL(volumeChangedDb(double)), - &player, SLOT(setGainDB(double))); - connect(&player, SIGNAL(peakUpdate(double)), - vol, SLOT(updatePeakPower(double))); -// connect(&player, SIGNAL(peakUpdateDB(double)), -// vol, SLOT(updatePeakDb(double))); - - vol->setVolumeDb(0); - dockWidget->widget()->layout()->addWidget(vol); - - addDockWidget(Qt::LeftDockWidgetArea, dockWidget); - - canvaswidget->yscale->setValue(0.9); - canvaswidget->yoffset->setValue(MAXVAL/2); - canvaswidget->xscale->setValue(0); - canvaswidget->xoffset->setValue(0); - - loadSettings(); - -/* - QSettings settings("presets.ini", QSettings::IniFormat); - QStringList list = settings.childGroups(); - for(int i = 0; i != list.size(); i++) { - QString presetname = list.at(i); - Preset p; - settings.beginGroup(presetname); - p.prefix = settings.value("prefix", "unknown").toString(); - p.attacklength = settings.value("attacklength", 0).toInt(); - p.falloff = settings.value("falloff", 0).toInt(); - p.fadelength = settings.value("fadelength", 0).toInt(); - settings.endGroup(); - QVariant v; - v.setValue(p); - presets->addItem(presetname, v); - } -*/ - - statusBar()->showMessage("Ready"); + { + int start = 44100 * 60; + Selection p(start, start + 44100 * 60, 0, 0); // one minute selection + selections_preview.add(p); + } + + QWidget* central = new QWidget(); + QHBoxLayout* lh = new QHBoxLayout(); + QVBoxLayout* lv = new QVBoxLayout(); + central->setLayout(lv); + setCentralWidget(central); + + extractor = new AudioExtractor(selections, this); + //canvas = new Canvas(this); + canvaswidget = new CanvasWidget(this); + + QToolBar* toolbar = addToolBar("Tools"); + listen = new CanvasToolListen(canvaswidget->canvas, player); + addTool(toolbar, canvaswidget->canvas, listen); + threshold = new CanvasToolThreshold(canvaswidget->canvas); + canvaswidget->canvas->tools.push_back(threshold);//addTool(toolbar, canvaswidget->canvas, threshold); + tool_selections = new CanvasToolSelections(canvaswidget->canvas, selections, + selections_preview); + connect(threshold, SIGNAL(thresholdChanged(double)), + tool_selections, SLOT(thresholdChanged(double))); + connect(threshold, SIGNAL(thresholdChanging(double)), + tool_selections, SLOT(thresholdChanged(double))); + connect(&selections, SIGNAL(activeChanged(sel_id_t)), + canvaswidget->canvas, SLOT(update())); + connect(&selections, SIGNAL(updated(sel_id_t)), + canvaswidget->canvas, SLOT(update())); + addTool(toolbar, canvaswidget->canvas, tool_selections); + + QMenu* fileMenu = menuBar()->addMenu("&File"); + QAction* act_quit = new QAction("&Quit", this); + fileMenu->addAction(act_quit); + connect(act_quit, SIGNAL(triggered()), this, SLOT(close())); + + // QWidget* dock = new QWidget(); + + //yoffset = new QScrollBar(Qt::Vertical); + //yoffset->setRange(0, MAXVAL); + //yoffset->setPageStep(PAGESTEP); + //yoffset->setSingleStep(SINGLESTEP); + //connect(yoffset, SIGNAL(valueChanged(int)), this, SLOT(setYOffset(int))); + // + //yscale = new ZoomSlider(Qt::Vertical); + //yscale->setRange(0.9, 30); + //yscale->setTickWidth(0.1); + //connect(yscale, SIGNAL(valueChanged(float)), this, SLOT(setYScale(float))); + // + //xscale = new ZoomSlider(Qt::Horizontal); + //xscale->setRange(1, 0.0001); + //xscale->setTickWidth(0.0001); + //connect(xscale, SIGNAL(valueChanged(float)), this, SLOT(setXScale(float))); + // + //xoffset = new QScrollBar(Qt::Horizontal); + //xoffset->setRange(0, MAXVAL); + //xoffset->setPageStep(PAGESTEP); + //xoffset->setSingleStep(SINGLESTEP); + //connect(xoffset, SIGNAL(valueChanged(int)), this, SLOT(setXOffset(int))); + + sorter = new SampleSorter(selections, selections_preview); + connect(&selections, SIGNAL(added(sel_id_t)), + sorter, SLOT(addSelection(sel_id_t))); + connect(&selections_preview, SIGNAL(added(sel_id_t)), + sorter, SLOT(addSelectionPreview(sel_id_t))); + connect(&selections, SIGNAL(updated(sel_id_t)), sorter, SLOT(relayout())); + connect(&selections_preview, SIGNAL(updated(sel_id_t)), + sorter, SLOT(relayout())); + connect(&selections, SIGNAL(removed(sel_id_t)), sorter, SLOT(relayout())); + connect(&selections_preview, SIGNAL(removed(sel_id_t)), + sorter, SLOT(relayout())); + connect(&selections, SIGNAL(activeChanged(sel_id_t)), + sorter, SLOT(relayout())); + + 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(canvaswidget); + //lh->addWidget(yscale); + //lh->addWidget(yoffset); + lv->addLayout(lh, 100); + //lv->addWidget(xscale, 100); + //lv->addWidget(xoffset, 100); + lv->addWidget(sorter, 15); + lv->addWidget(btn_playsamples); + lv->addWidget(sb_playsamples); + + + QDockWidget* dockWidget = new QDockWidget(tr("Dock Widget"), this); + dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); + + dockWidget->setWidget(new QWidget()); + dockWidget->widget()->setLayout(new QVBoxLayout()); + + //dockWidget->widget()->layout()->addWidget(new QLabel("Presets:")); + //presets = new QComboBox(); + //connect(presets, SIGNAL(currentIndexChanged(int)), + // this, SLOT(setPreset(int))); + //dockWidget->widget()->layout()->addWidget(presets); + + tabs = new QTabWidget(this); + tabs->addTab(createFilesTab(), "Files"); + generateTabId = tabs->addTab(createGenerateTab(), "Generate"); + tabs->addTab(createEditTab(), "Edit"); + tabs->addTab(createExportTab(), "Export"); + connect(tabs, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); + tabChanged(tabs->currentIndex()); + + dockWidget->widget()->layout()->addWidget(tabs); + + VolumeFader* vol = new VolumeFader(); + connect(vol, SIGNAL(volumeChangedDb(double)), + &player, SLOT(setGainDB(double))); + connect(&player, SIGNAL(peakUpdate(double)), + vol, SLOT(updatePeakPower(double))); + //connect(&player, SIGNAL(peakUpdateDB(double)), + // vol, SLOT(updatePeakDb(double))); + + vol->setVolumeDb(0); + dockWidget->widget()->layout()->addWidget(vol); + + addDockWidget(Qt::LeftDockWidgetArea, dockWidget); + + canvaswidget->yscale->setValue(0.9); + canvaswidget->yoffset->setValue(MAXVAL/2); + canvaswidget->xscale->setValue(0); + canvaswidget->xoffset->setValue(0); + + loadSettings(); + + //QSettings settings("presets.ini", QSettings::IniFormat); + //QStringList list = settings.childGroups(); + //for(int i = 0; i != list.size(); i++) + //{ + // QString presetname = list.at(i); + // Preset p; + // settings.beginGroup(presetname); + // p.prefix = settings.value("prefix", "unknown").toString(); + // p.attacklength = settings.value("attacklength", 0).toInt(); + // p.falloff = settings.value("falloff", 0).toInt(); + // p.fadelength = settings.value("fadelength", 0).toInt(); + // settings.endGroup(); + // QVariant v; + // v.setValue(p); + // presets->addItem(presetname, v); + //} + + statusBar()->showMessage("Ready"); } MainWindow::~MainWindow() @@ -234,329 +231,338 @@ MainWindow::~MainWindow() void MainWindow::tabChanged(int tabid) { - tool_selections->setShowPreview(tabid == generateTabId); - sorter->setShowPreview(tabid == generateTabId); - tool_selections->autoCreateSelectionsPreview(); - threshold->setActive(tabid == generateTabId); + tool_selections->setShowPreview(tabid == generateTabId); + sorter->setShowPreview(tabid == generateTabId); + tool_selections->autoCreateSelectionsPreview(); + threshold->setActive(tabid == generateTabId); } -QWidget *MainWindow::createFilesTab() +QWidget* MainWindow::createFilesTab() { - QWidget *w = new QWidget(); - QVBoxLayout *l = new QVBoxLayout(); - w->setLayout(l); - - l->addWidget(new QLabel("Files: (double-click to set as master)")); - QPushButton *loadbtn = new QPushButton(); - loadbtn->setText("Add files..."); - l->addWidget(loadbtn); - - filelist = new FileList(); - connect(filelist, SIGNAL(masterFileChanged(QString)), - this, SLOT(loadFile(QString))); - connect(loadbtn, SIGNAL(clicked()), filelist, SLOT(addFiles())); - connect(filelist, SIGNAL(fileAdded(QString, QString)), - extractor, SLOT(addFile(QString, QString))); - connect(filelist, SIGNAL(fileRemoved(QString, QString)), - extractor, SLOT(removeFile(QString, QString))); - connect(filelist, SIGNAL(nameChanged(QString, QString)), - extractor, SLOT(changeName(QString, QString))); - l->addWidget(filelist); - - return w; + QWidget* w = new QWidget(); + QVBoxLayout* l = new QVBoxLayout(); + w->setLayout(l); + + l->addWidget(new QLabel("Files: (double-click to set as master)")); + QPushButton* loadbtn = new QPushButton(); + loadbtn->setText("Add files..."); + l->addWidget(loadbtn); + + filelist = new FileList(); + connect(filelist, SIGNAL(masterFileChanged(QString)), + this, SLOT(loadFile(QString))); + connect(loadbtn, SIGNAL(clicked()), filelist, SLOT(addFiles())); + connect(filelist, SIGNAL(fileAdded(QString, QString)), + extractor, SLOT(addFile(QString, QString))); + connect(filelist, SIGNAL(fileRemoved(QString, QString)), + extractor, SLOT(removeFile(QString, QString))); + connect(filelist, SIGNAL(nameChanged(QString, QString)), + extractor, SLOT(changeName(QString, QString))); + l->addWidget(filelist); + + return w; } -QWidget *MainWindow::createEditTab() +QWidget* MainWindow::createEditTab() { - SelectionEditor *se = new SelectionEditor(selections); + SelectionEditor* se = new SelectionEditor(selections); - connect(&selections, SIGNAL(added(sel_id_t)), se, SLOT(added(sel_id_t))); - connect(&selections, SIGNAL(updated(sel_id_t)), se, SLOT(updated(sel_id_t))); - connect(&selections, SIGNAL(removed(sel_id_t)), se, SLOT(removed(sel_id_t))); - connect(&selections, SIGNAL(activeChanged(sel_id_t)), - se, SLOT(activeChanged(sel_id_t))); + connect(&selections, SIGNAL(added(sel_id_t)), se, SLOT(added(sel_id_t))); + connect(&selections, SIGNAL(updated(sel_id_t)), se, SLOT(updated(sel_id_t))); + connect(&selections, SIGNAL(removed(sel_id_t)), se, SLOT(removed(sel_id_t))); + connect(&selections, SIGNAL(activeChanged(sel_id_t)), + se, SLOT(activeChanged(sel_id_t))); - return se; + return se; } -QSlider *createAttribute(QWidget *parent, QString name, +QSlider* createAttribute(QWidget* parent, QString name, int range_from, int range_to) { - QSlider *slider; + QSlider* slider; + + QGridLayout* l = new QGridLayout(); - QGridLayout *l = new QGridLayout(); - - l->addWidget(new QLabel(name), 0, 0, 1, 2); + l->addWidget(new QLabel(name), 0, 0, 1, 2); - QSpinBox *spin = new QSpinBox(); - spin->setRange(range_from, range_to); - l->addWidget(spin, 1, 0, 1, 1); + QSpinBox* spin = new QSpinBox(); + spin->setRange(range_from, range_to); + l->addWidget(spin, 1, 0, 1, 1); - slider = new QSlider(Qt::Horizontal); - slider->setRange(range_from, range_to); - l->addWidget(slider, 1, 1, 1,1); + slider = new QSlider(Qt::Horizontal); + slider->setRange(range_from, range_to); + l->addWidget(slider, 1, 1, 1,1); - QObject::connect(spin, SIGNAL(valueChanged(int)), - slider, SLOT(setValue(int))); - QObject::connect(slider, SIGNAL(valueChanged(int)), - spin, SLOT(setValue(int))); + QObject::connect(spin, SIGNAL(valueChanged(int)), + slider, SLOT(setValue(int))); + QObject::connect(slider, SIGNAL(valueChanged(int)), + spin, SLOT(setValue(int))); - ((QBoxLayout *)parent->layout())->addLayout(l); + ((QBoxLayout*)parent->layout())->addLayout(l); - return slider; + return slider; } -QWidget *MainWindow::createGenerateTab() +QWidget* MainWindow::createGenerateTab() { - QWidget *w = new QWidget(); - QVBoxLayout *l = new QVBoxLayout(); - w->setLayout(l); - - QHBoxLayout *btns = new QHBoxLayout(); - - QPushButton *autosel = new QPushButton(); - autosel->setText("Generate"); - connect(autosel, SIGNAL(clicked()), - tool_selections, SLOT(clearSelections())); - connect(autosel, SIGNAL(clicked()), - tool_selections, SLOT(autoCreateSelections())); - - connect(threshold, SIGNAL(thresholdChanged(double)), - tool_selections, SLOT(autoCreateSelectionsPreview())); - connect(threshold, SIGNAL(thresholdChanging(double)), - tool_selections, SLOT(autoCreateSelectionsPreview())); - - QPushButton *clearsel = new QPushButton(); - clearsel->setText("Clear"); - connect(clearsel, SIGNAL(clicked()), - tool_selections, SLOT(clearSelections())); - - btns->addWidget(autosel); - btns->addWidget(clearsel); - - l->addLayout(btns); - - slider_attacklength = createAttribute(w, "Attack length:", 10, 1000); - connect(slider_attacklength, SIGNAL(valueChanged(int)), - sorter, SLOT(setAttackLength(int))); - connect(slider_attacklength, SIGNAL(valueChanged(int)), - tool_selections, SLOT(autoCreateSelectionsPreview())); - slider_attacklength->setValue(300); - - slider_spread = createAttribute(w, "Power spread:", 1, 2000); - connect(slider_spread, SIGNAL(valueChanged(int)), - sorter, SLOT(setSpreadFactor(int))); - connect(slider_spread, SIGNAL(valueChanged(int)), - tool_selections, SLOT(autoCreateSelectionsPreview())); - slider_spread->setValue(1000); - - slider_hold = createAttribute(w, "Minimum size (samples):", 0, 200000); - connect(slider_hold, SIGNAL(valueChanged(int)), - tool_selections, SLOT(holdChanged(int))); - connect(slider_hold, SIGNAL(valueChanged(int)), - tool_selections, SLOT(autoCreateSelectionsPreview())); - slider_hold->setValue(100); - - slider_falloff = createAttribute(w, "Falloff:", 10, 5000); - connect(slider_falloff, SIGNAL(valueChanged(int)), - tool_selections, SLOT(noiseFloorChanged(int))); - connect(slider_falloff, SIGNAL(valueChanged(int)), - tool_selections, SLOT(autoCreateSelectionsPreview())); - slider_falloff->setValue(300); - - slider_fadelength = createAttribute(w, "Fadelength:", 0, 2000); - connect(slider_fadelength, SIGNAL(valueChanged(int)), - tool_selections, SLOT(fadeoutChanged(int))); - connect(slider_fadelength, SIGNAL(valueChanged(int)), - tool_selections, SLOT(autoCreateSelectionsPreview())); - slider_fadelength->setValue(666); - - l->addStretch(); - - return w; + QWidget* w = new QWidget(); + QVBoxLayout* l = new QVBoxLayout(); + w->setLayout(l); + + QHBoxLayout* btns = new QHBoxLayout(); + + QPushButton* autosel = new QPushButton(); + autosel->setText("Generate"); + connect(autosel, SIGNAL(clicked()), + tool_selections, SLOT(clearSelections())); + connect(autosel, SIGNAL(clicked()), + tool_selections, SLOT(autoCreateSelections())); + + connect(threshold, SIGNAL(thresholdChanged(double)), + tool_selections, SLOT(autoCreateSelectionsPreview())); + connect(threshold, SIGNAL(thresholdChanging(double)), + tool_selections, SLOT(autoCreateSelectionsPreview())); + + QPushButton* clearsel = new QPushButton(); + clearsel->setText("Clear"); + connect(clearsel, SIGNAL(clicked()), + tool_selections, SLOT(clearSelections())); + + btns->addWidget(autosel); + btns->addWidget(clearsel); + + l->addLayout(btns); + + slider_attacklength = createAttribute(w, "Attack length:", 10, 1000); + connect(slider_attacklength, SIGNAL(valueChanged(int)), + sorter, SLOT(setAttackLength(int))); + connect(slider_attacklength, SIGNAL(valueChanged(int)), + tool_selections, SLOT(autoCreateSelectionsPreview())); + slider_attacklength->setValue(300); + + slider_spread = createAttribute(w, "Power spread:", 1, 2000); + connect(slider_spread, SIGNAL(valueChanged(int)), + sorter, SLOT(setSpreadFactor(int))); + connect(slider_spread, SIGNAL(valueChanged(int)), + tool_selections, SLOT(autoCreateSelectionsPreview())); + slider_spread->setValue(1000); + + slider_hold = createAttribute(w, "Minimum size (samples):", 0, 200000); + connect(slider_hold, SIGNAL(valueChanged(int)), + tool_selections, SLOT(holdChanged(int))); + connect(slider_hold, SIGNAL(valueChanged(int)), + tool_selections, SLOT(autoCreateSelectionsPreview())); + slider_hold->setValue(100); + + slider_falloff = createAttribute(w, "Falloff:", 10, 5000); + connect(slider_falloff, SIGNAL(valueChanged(int)), + tool_selections, SLOT(noiseFloorChanged(int))); + connect(slider_falloff, SIGNAL(valueChanged(int)), + tool_selections, SLOT(autoCreateSelectionsPreview())); + slider_falloff->setValue(300); + + slider_fadelength = createAttribute(w, "Fadelength:", 0, 2000); + connect(slider_fadelength, SIGNAL(valueChanged(int)), + tool_selections, SLOT(fadeoutChanged(int))); + connect(slider_fadelength, SIGNAL(valueChanged(int)), + tool_selections, SLOT(autoCreateSelectionsPreview())); + slider_fadelength->setValue(666); + + l->addStretch(); + + return w; } -QWidget *MainWindow::createExportTab() +QWidget* MainWindow::createExportTab() { - QWidget *w = new QWidget(); - QVBoxLayout *l = new QVBoxLayout(); - w->setLayout(l); - - l->addWidget(new QLabel("Prefix:")); - prefix = new QLineEdit(); - connect(prefix, SIGNAL(textChanged(const QString &)), - extractor, SLOT(setOutputPrefix(const QString &))); - l->addWidget(prefix); - - l->addWidget(new QLabel("Export path:")); - QHBoxLayout *lo_exportp = new QHBoxLayout(); - lineed_exportp = new QLineEdit(); - connect(lineed_exportp, SIGNAL(textChanged(const QString &)), - extractor, SLOT(setExportPath(const QString &))); - lo_exportp->addWidget(lineed_exportp); - QPushButton *btn_browse = new QPushButton("..."); - connect(btn_browse, SIGNAL(clicked()), this, SLOT(browse())); - lo_exportp->addWidget(btn_browse); - - l->addLayout(lo_exportp); - - QPushButton *exportsel = new QPushButton(); - exportsel->setText("Export"); - connect(exportsel, SIGNAL(clicked()), this, SLOT(doExport())); - l->addWidget(exportsel); - - QProgressBar *bar = new QProgressBar(); - connect(extractor, SIGNAL(progressUpdate(int)), bar, SLOT(setValue(int))); - connect(extractor, SIGNAL(setMaximumProgress(int)), - bar, SLOT(setMaximum(int))); - l->addWidget(bar); - - l->addStretch(); - - return w; + QWidget* w = new QWidget(); + QVBoxLayout* l = new QVBoxLayout(); + w->setLayout(l); + + l->addWidget(new QLabel("Prefix:")); + prefix = new QLineEdit(); + connect(prefix, SIGNAL(textChanged(const QString &)), + extractor, SLOT(setOutputPrefix(const QString &))); + l->addWidget(prefix); + + l->addWidget(new QLabel("Export path:")); + QHBoxLayout* lo_exportp = new QHBoxLayout(); + lineed_exportp = new QLineEdit(); + connect(lineed_exportp, SIGNAL(textChanged(const QString &)), + extractor, SLOT(setExportPath(const QString &))); + lo_exportp->addWidget(lineed_exportp); + QPushButton* btn_browse = new QPushButton("..."); + connect(btn_browse, SIGNAL(clicked()), this, SLOT(browse())); + lo_exportp->addWidget(btn_browse); + + l->addLayout(lo_exportp); + + QPushButton* exportsel = new QPushButton(); + exportsel->setText("Export"); + connect(exportsel, SIGNAL(clicked()), this, SLOT(doExport())); + l->addWidget(exportsel); + + QProgressBar* bar = new QProgressBar(); + connect(extractor, SIGNAL(progressUpdate(int)), bar, SLOT(setValue(int))); + connect(extractor, SIGNAL(setMaximumProgress(int)), + bar, SLOT(setMaximum(int))); + l->addWidget(bar); + + l->addStretch(); + + return w; } void MainWindow::playSamples() { - Selections *sels = &selections; - if(tabs->currentIndex() == generateTabId) sels = &selections_preview; - - QVector ids = sels->ids(); - for(int v1 = 0; v1 < ids.size(); v1++) { - for(int v2 = 0; v2 < ids.size(); v2++) { - - Selection sel1 = sels->get(ids[v1]); - Selection sel2 = sels->get(ids[v2]); - - if(sel1.energy < sel2.energy) { - sel_id_t vtmp = ids[v1]; - ids[v1] = ids[v2]; - ids[v2] = vtmp; - } - } - } - - QVector::iterator i = ids.begin(); - while(i != ids.end()) { - Selection sel = sels->get(*i); - - unsigned int length = sb_playsamples->value() * 44100 / 1000; - - unsigned int sample_length = sel.to - sel.from; - - unsigned int to = sel.to; - - if(sample_length > length) to = sel.from + length; - - sels->setActive(*i); - - connect(&player, SIGNAL(positionUpdate(size_t)), - listen, SLOT(update(size_t))); - - player.playSelection(sel, to - sel.from); - QTime t; - t.start(); - while(t.elapsed() < sb_playsamples->value()) { - qApp->processEvents(); - q_usleep(25 * 1000); - } - player.stop(); - - disconnect(&player, SIGNAL(positionUpdate(size_t)), - listen, SLOT(update(size_t))); - i++; - } + Selections* sels = &selections; + if(tabs->currentIndex() == generateTabId) + { + sels = &selections_preview; + } + + QVector ids = sels->ids(); + for(int v1 = 0; v1 < ids.size(); v1++) + { + for(int v2 = 0; v2 < ids.size(); v2++) + { + Selection sel1 = sels->get(ids[v1]); + Selection sel2 = sels->get(ids[v2]); + + if(sel1.energy < sel2.energy) + { + sel_id_t vtmp = ids[v1]; + ids[v1] = ids[v2]; + ids[v2] = vtmp; + } + } + } + + QVector::iterator i = ids.begin(); + while(i != ids.end()) + { + Selection sel = sels->get(*i); + + unsigned int length = sb_playsamples->value() * 44100 / 1000; + + unsigned int sample_length = sel.to - sel.from; + + unsigned int to = sel.to; + + if(sample_length > length) + { + to = sel.from + length; + } + + sels->setActive(*i); + + connect(&player, SIGNAL(positionUpdate(size_t)), + listen, SLOT(update(size_t))); + + player.playSelection(sel, to - sel.from); + QTime t; + t.start(); + while(t.elapsed() < sb_playsamples->value()) + { + qApp->processEvents(); + q_usleep(25 * 1000); + } + player.stop(); + + disconnect(&player, SIGNAL(positionUpdate(size_t)), + listen, SLOT(update(size_t))); + i++; + } } -void MainWindow::closeEvent(QCloseEvent *) +void MainWindow::closeEvent(QCloseEvent*) { - saveSettings(); - QApplication::quit(); + saveSettings(); + QApplication::quit(); } void MainWindow::loadSettings() { - QSettings settings; + QSettings settings; - settings.beginGroup("MainWindow"); - lineed_exportp->setText(settings.value("exportpath", "").toString()); - resize(settings.value("size", QSize(700, 800)).toSize()); - move(settings.value("pos", QPoint(0, 0)).toPoint()); - settings.endGroup(); + settings.beginGroup("MainWindow"); + lineed_exportp->setText(settings.value("exportpath", "").toString()); + resize(settings.value("size", QSize(700, 800)).toSize()); + move(settings.value("pos", QPoint(0, 0)).toPoint()); + settings.endGroup(); } void MainWindow::saveSettings() { - QSettings settings; + QSettings settings; - settings.beginGroup("MainWindow"); - settings.setValue("exportpath", lineed_exportp->text()); - settings.setValue("size", size()); - settings.setValue("pos", pos()); - settings.endGroup(); -} -/* -void MainWindow::setXScale(float val) -{ - canvaswidget->canvas->setXScale(val); + settings.beginGroup("MainWindow"); + settings.setValue("exportpath", lineed_exportp->text()); + settings.setValue("size", size()); + settings.setValue("pos", pos()); + settings.endGroup(); } -void MainWindow::setYScale(float val) -{ - canvaswidget->canvas->setYScale(val); -} - -void MainWindow::setXOffset(int of) -{ - // range 0.0 - 1.0 - float val = (float)of/(float)MAXVAL; - canvaswidget->canvas->setXOffset(val); -} +//void MainWindow::setXScale(float val) +//{ +// canvaswidget->canvas->setXScale(val); +//} +// +//void MainWindow::setYScale(float val) +//{ +// canvaswidget->canvas->setYScale(val); +//} +// +//void MainWindow::setXOffset(int of) +//{ +// // range 0.0 - 1.0 +// float val = (float)of/(float)MAXVAL; +// canvaswidget->canvas->setXOffset(val); +//} +// +//void MainWindow::setYOffset(int of) +//{ +// // range 0.0 - 1.0 +// float val = (float)(of * -1 + MAXVAL)/(float)MAXVAL; +// canvaswidget->canvas->setYOffset(val); +//} -void MainWindow::setYOffset(int of) -{ - // range 0.0 - 1.0 - float val = (float)(of * -1 + MAXVAL)/(float)MAXVAL; - canvaswidget->canvas->setYOffset(val); -} -*/ void MainWindow::doExport() { - extractor->exportSelections(); + extractor->exportSelections(); } void MainWindow::loadFile(QString filename) { - setCursor(Qt::WaitCursor); - statusBar()->showMessage("Loading..."); - qApp->processEvents(); + setCursor(Qt::WaitCursor); + statusBar()->showMessage("Loading..."); + qApp->processEvents(); - sorter->setWavData(NULL, 0); - player.setPcmData(NULL, 0); + sorter->setWavData(NULL, 0); + player.setPcmData(NULL, 0); - canvaswidget->canvas->load(filename); + canvaswidget->canvas->load(filename); - sorter->setWavData(canvaswidget->canvas->data, canvaswidget->canvas->size); - player.setPcmData(canvaswidget->canvas->data, canvaswidget->canvas->size); + sorter->setWavData(canvaswidget->canvas->data, canvaswidget->canvas->size); + player.setPcmData(canvaswidget->canvas->data, canvaswidget->canvas->size); - statusBar()->showMessage("Ready"); - setCursor(Qt::ArrowCursor); + statusBar()->showMessage("Ready"); + setCursor(Qt::ArrowCursor); } -void MainWindow::setPreset(int index) +void MainWindow::setPreset(int index) { - /* - QVariant v = presets->itemData(index); - Preset p = v.value(); - slider_attacklength->setValue(p.attacklength); - slider_falloff->setValue(p.falloff); - slider_fadelength->setValue(p.fadelength); - prefix->setText(p.prefix); - */ + //QVariant v = presets->itemData(index); + //Preset p = v.value(); + //slider_attacklength->setValue(p.attacklength); + //slider_falloff->setValue(p.falloff); + //slider_fadelength->setValue(p.fadelength); + //prefix->setText(p.prefix); } -void MainWindow::browse() { - QString path = QFileDialog::getExistingDirectory(this, "Select export path", - lineed_exportp->text()); - lineed_exportp->setText(path); +void MainWindow::browse() +{ + QString path = QFileDialog::getExistingDirectory(this, "Select export path", + lineed_exportp->text()); + lineed_exportp->setText(path); } diff --git a/src/mainwindow.h b/src/mainwindow.h index b512f50..265ab31 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -24,8 +24,7 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_MAINWINDOW_H__ -#define __DRUMGIZMO_MAINWINDOW_H__ +#pragma once #include #include @@ -47,79 +46,78 @@ #include "zoomslider.h" #include "canvaswidget.h" -class Preset { -public: - QString prefix; - int attacklength; - int falloff; - int fadelength; +class Preset +{ +public: + QString prefix; + int attacklength; + int falloff; + int fadelength; }; Q_DECLARE_METATYPE(Preset) -class MainWindow : public QMainWindow { -Q_OBJECT +class MainWindow + : public QMainWindow +{ + Q_OBJECT public: - MainWindow(); - ~MainWindow(); + MainWindow(); + ~MainWindow(); public slots: - /* - void setXScale(float); - void setYScale(float); - void setXOffset(int); - void setYOffset(int); - */ - void doExport(); - void loadFile(QString filename); - void playSamples(); - void setPreset(int); - void browse(); - void tabChanged(int tabid); + //void setXScale(float); + //void setYScale(float); + //void setXOffset(int); + //void setYOffset(int); + void doExport(); + void loadFile(QString filename); + void playSamples(); + void setPreset(int); + void browse(); + void tabChanged(int tabid); protected: - void closeEvent(QCloseEvent*); + void closeEvent(QCloseEvent*); private: - void loadSettings(); - void saveSettings(); - - QWidget *createFilesTab(); - QWidget *createEditTab(); - QWidget *createGenerateTab(); - QWidget *createExportTab(); - - int generateTabId; - - SampleSorter *sorter; - CanvasToolSelections *tool_selections; - CanvasToolThreshold *threshold; - CanvasToolListen *listen; - AudioExtractor *extractor; - FileList *filelist; - - //Canvas *canvas; - //QScrollBar *yoffset; - //ZoomSlider *yscale; - //ZoomSlider *xscale; - //QScrollBar *xoffset; - CanvasWidget *canvaswidget; - - QScrollBar *sb_playsamples; - QComboBox *presets; - QSlider *slider_attacklength; - QSlider *slider_spread; - QSlider *slider_hold; - QSlider *slider_falloff; - QSlider *slider_fadelength; - QLineEdit *prefix; - QLineEdit *lineed_exportp; - - QTabWidget *tabs; - - // Session state information: - Selections selections; - Selections selections_preview; - Player player; + void loadSettings(); + void saveSettings(); + + QWidget* createFilesTab(); + QWidget* createEditTab(); + QWidget* createGenerateTab(); + QWidget* createExportTab(); + + int generateTabId; + + SampleSorter* sorter; + CanvasToolSelections* tool_selections; + CanvasToolThreshold* threshold; + CanvasToolListen* listen; + AudioExtractor* extractor; + FileList* filelist; + + //Canvas* canvas; + //QScrollBar* yoffset; + //ZoomSlider* yscale; + //ZoomSlider* xscale; + //QScrollBar* xoffset; + CanvasWidget* canvaswidget; + + QScrollBar* sb_playsamples; + QComboBox* presets; + QSlider* slider_attacklength; + QSlider* slider_spread; + QSlider* slider_hold; + QSlider* slider_falloff; + QSlider* slider_fadelength; + QLineEdit* prefix; + QLineEdit* lineed_exportp; + + QTabWidget* tabs; + + // Session state information: + Selections selections; + Selections selections_preview; + Player player; }; - -#endif/*__DRUMGIZMO_MAINWINDOW_H__*/ diff --git a/src/mipmap.cc b/src/mipmap.cc index 09b15b6..a9683df 100644 --- a/src/mipmap.cc +++ b/src/mipmap.cc @@ -26,74 +26,126 @@ */ #include "mipmap.h" -MipMap::MipMap(float *data, size_t size) +MipMap::MipMap(float* data, size_t size) { - this->data = data; - this->size = size; - this->zoom = 1; + this->data = data; + this->size = size; + this->zoom = 1; } MipMapValue MipMap::data_lookup(size_t begin, size_t end) { - MipMapValue val; + MipMapValue val; - size_t numlavg = 0; - size_t numuavg = 0; - for(size_t i = begin; i <= end; i++) { - if(i > size || i < 0) break; - if(data[i] > val.max) val.max = data[i]; - if(data[i] < val.min) val.min = data[i]; - - if(data[i] > 0) { val.uavg += data[i]; numuavg++; } - if(data[i] < 0) { val.lavg += data[i]; numlavg++; } - } - - if(numlavg) val.lavg /= (float) numlavg; - if(numuavg) val.uavg /= (float) numuavg; + size_t numlavg = 0; + size_t numuavg = 0; + for(size_t i = begin; i <= end; i++) + { + if(i > size || i < 0) + { + break; + } + if(data[i] > val.max) + { + val.max = data[i]; + } + if(data[i] < val.min) + { + val.min = data[i]; + } - return val; + if(data[i] > 0) + { + val.uavg += data[i]; + numuavg++; + } + if(data[i] < 0) + { + val.lavg += data[i]; + numlavg++; + } + } + + if(numlavg) + { + val.lavg /= (float) numlavg; + } + if(numuavg) + { + val.uavg /= (float) numuavg; + } + + return val; } MipMapValue MipMap::mipmap_lookup(size_t begin, size_t end) { - MipMapValue val; + MipMapValue val; + + size_t numlavg = 0; + size_t numuavg = 0; + for(size_t i = begin; i <= end; i++) + { + if(i > size || i < 0) + { + break; + } + if(data[i] > val.max) + { + val.max = data[i]; + } + if(data[i] < val.min) + { + val.min = data[i]; + } + + if(data[i] > 0) + { + val.uavg += data[i]; + numuavg++; + } + if(data[i] < 0) + { + val.lavg += data[i]; + numlavg++; + } + } - size_t numlavg = 0; - size_t numuavg = 0; - for(size_t i = begin; i <= end; i++) { - if(i > size || i < 0) break; - if(data[i] > val.max) val.max = data[i]; - if(data[i] < val.min) val.min = data[i]; - - if(data[i] > 0) { val.uavg += data[i]; numuavg++; } - if(data[i] < 0) { val.lavg += data[i]; numlavg++; } - } - - if(numlavg) val.lavg /= (float) numlavg; - if(numuavg) val.uavg /= (float) numuavg; + if(numlavg) + { + val.lavg /= (float) numlavg; + } + if(numuavg) + { + val.uavg /= (float) numuavg; + } - return val; + return val; } #define ABS(x) (x>0?x:-x) MipMapValue MipMap::lookup(size_t begin, size_t end) { - return data_lookup(begin, end); - /* - - size_t zoom_factor = ABS(end - begin); - - if(zoom_factor < zoom / 2) { - if(zoom == 1) { // Lookup in original data. - return data_lookup(begin, end); - } - - return mipmap_lookup(begin, end); - } - - if(lowerlevel) return lowerlevel->lookup(begin,end); + return data_lookup(begin, end); - return MipMapValue(); - */ + //size_t zoom_factor = ABS(end - begin); + // + //if(zoom_factor < zoom / 2) + //{ + // if(zoom == 1) + // { + // // Lookup in original data. + // return data_lookup(begin, end); + // } + // + // return mipmap_lookup(begin, end); + //} + // + //if(lowerlevel) + //{ + // return lowerlevel->lookup(begin,end); + //} + // + //return MipMapValue(); } diff --git a/src/mipmap.h b/src/mipmap.h index 550d6ae..b44e8f2 100644 --- a/src/mipmap.h +++ b/src/mipmap.h @@ -24,39 +24,41 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_MIPMAP_H__ -#define __DRUMGIZMO_MIPMAP_H__ +#pragma once #include #include -class MipMapValue { +class MipMapValue +{ public: - MipMapValue() { max = min = uavg = lavg = 0.0; } - float max; - float min; - float uavg; - float lavg; + MipMapValue() + { + max = min = uavg = lavg = 0.0; + } + float max; + float min; + float uavg; + float lavg; }; -class MipMap { +class MipMap +{ public: - MipMap(float *data, size_t size); + MipMap(float* data, size_t size); - MipMapValue lookup(size_t begin, size_t end); + MipMapValue lookup(size_t begin, size_t end); private: - float *data; - size_t size; + float* data; + size_t size; - MipMapValue *values; + MipMapValue* values; - size_t zoom; + size_t zoom; - MipMapValue data_lookup(size_t begin, size_t end); - MipMapValue mipmap_lookup(size_t begin, size_t end); + MipMapValue data_lookup(size_t begin, size_t end); + MipMapValue mipmap_lookup(size_t begin, size_t end); - MipMap *lowerlevel; + MipMap* lowerlevel; }; - -#endif/*__DRUMGIZMO_MIPMAP_H__*/ diff --git a/src/player.cc b/src/player.cc index 3a2bfd2..1181841 100644 --- a/src/player.cc +++ b/src/player.cc @@ -32,159 +32,174 @@ Player::Player() { - peak = 0; - pos = 0; - gain_scalar = 1.0; - pcm_data = NULL; - pcm_size = 0; - end = 0; - new_selection = false; - - connect(&report_timer, SIGNAL(timeout()), this, SLOT(reportTimeout())); - report_timer.start(50); // Update 25 times per second - - start(); + peak = 0; + pos = 0; + gain_scalar = 1.0; + pcm_data = NULL; + pcm_size = 0; + end = 0; + new_selection = false; + + connect(&report_timer, SIGNAL(timeout()), this, SLOT(reportTimeout())); + report_timer.start(50); // Update 25 times per second + + start(); } Player::~Player() { - running = false; // Signal player thread to stop - wait(); // Wait for player thread to stop. + running = false; // Signal player thread to stop + wait(); // Wait for player thread to stop. } #define _MIN(a, b) (a (sel.to - sel.fadeout)) { - // Apply linear fade-out - double fp = (double)(((int)sel.to - (int)sel.fadeout) - (int)p); - fade = 1 + (fp / (double)sel.fadeout); - } - - sample = pcm_data[p] * fade * gain_scalar; - } - if(fabs(sample) > peak) { - peak = fabs(sample); - } - s[i] = _MIN(sample * SHRT_MAX, SHRT_MAX); - } - - ao_play(dev, (char*)s, BUFSZ * sizeof(short)); - - pos += BUFSZ; - } - - ao_close(dev); - ao_shutdown(); + Selection sel; + + ao_initialize(); + + ao_sample_format sf; + memset(&sf, 0, sizeof(sf)); + sf.bits = 16; + sf.rate = 44100; + sf.channels = 1; + sf.byte_format = AO_FMT_NATIVE; + + dev = ao_open_live(ao_default_driver_id(), &sf, 0); + + running = true; + + short s[BUFSZ]; + while(running) + { + { + // Check for new Selection. + QMutexLocker lock(&mutex); + if(new_selection) + { + sel = selection; + pos = sel.from; + end = sel_end; + new_selection = false; + } + } + + for(size_t i = 0; i < BUFSZ; i++) + { + double sample = 0.0; + size_t p = i + pos; + if(p < sel.to && p < end && p < pcm_size) + { + double fade = 1; + if(p < (sel.from + sel.fadein)) + { + // Apply linear fade-in + double fp = (double)((int)p - (int)sel.from); + fade = fp / (double)sel.fadeout; + } + + if(p > (sel.to - sel.fadeout)) + { + // Apply linear fade-out + double fp = (double)(((int)sel.to - (int)sel.fadeout) - (int)p); + fade = 1 + (fp / (double)sel.fadeout); + } + + sample = pcm_data[p] * fade * gain_scalar; + } + if(fabs(sample) > peak) + { + peak = fabs(sample); + } + s[i] = _MIN(sample * SHRT_MAX, SHRT_MAX); + } + + ao_play(dev, (char*)s, BUFSZ * sizeof(short)); + + pos += BUFSZ; + } + + ao_close(dev); + ao_shutdown(); } bool Player::playSelectionDone() { - return pos >= sel_end || pos >= selection.to; + return pos >= sel_end || pos >= selection.to; } void Player::playSelection(Selection s, int len) { - { // Enqueue new Selection for player consumation - QMutexLocker lock(&mutex); - - selection = s; - - if(len > 0) sel_end = len; - else sel_end = selection.to - selection.from; - - sel_end += selection.from; - - new_selection = true; - } - - // Wait until player actually consumed the new Selection. - while(new_selection) { - msleep(1); - } + { + // Enqueue new Selection for player consumation + QMutexLocker lock(&mutex); + + selection = s; + + if(len > 0) + { + sel_end = len; + } + else + { + sel_end = selection.to - selection.from; + } + + sel_end += selection.from; + + new_selection = true; + } + + // Wait until player actually consumed the new Selection. + while(new_selection) + { + msleep(1); + } } void Player::setGainScalar(double g) { - gain_scalar = g; + gain_scalar = g; } void Player::setGainDB(double gain_db) { - setGainScalar(pow(10, gain_db/ 20.0)); + setGainScalar(pow(10, gain_db/ 20.0)); } void Player::reportTimeout() { - emit peakUpdate(peak); - emit peakUpdateDB(20 * log10(peak)); - peak = 0.0; + emit peakUpdate(peak); + emit peakUpdateDB(20 * log10(peak)); + peak = 0.0; - emit positionUpdate(pos); - peak = 0.0; + emit positionUpdate(pos); + peak = 0.0; } -void Player::setPcmData(float *data, size_t size) +void Player::setPcmData(float* data, size_t size) { - pcm_data = data; - pcm_size = size; + pcm_data = data; + pcm_size = size; } void Player::setPosition(size_t position) { - Selection s; - s.from = position; - s.to = pcm_size; - s.fadein = 0; - s.fadeout = 0; - playSelection(s); + Selection s; + s.from = position; + s.to = pcm_size; + s.fadein = 0; + s.fadeout = 0; + playSelection(s); } void Player::stop() { - Selection s; - s.from = 0; - s.to = 0; - s.fadein = 0; - s.fadeout = 0; - playSelection(s, pos); + Selection s; + s.from = 0; + s.to = 0; + s.fadein = 0; + s.fadeout = 0; + playSelection(s, pos); } diff --git a/src/player.h b/src/player.h index 60b2ccb..8548c0a 100644 --- a/src/player.h +++ b/src/player.h @@ -24,8 +24,7 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_PLAYER_H__ -#define __DRUMGIZMO_PLAYER_H__ +#pragma once #include #include @@ -35,97 +34,77 @@ #include "selection.h" -class Player : public QThread { -Q_OBJECT +class Player + : public QThread +{ + Q_OBJECT public: - Player(); - ~Player(); + Player(); + ~Player(); - void run(); + void run(); - // TODO: Make these private. - // These two need to be public in order for the ugly hack in - // CanvasToolListen::playRange to work... - // volatile bool playing; - volatile size_t pos; - volatile size_t end; + // TODO: Make these private. + // These two need to be public in order for the ugly hack in + // CanvasToolListen::playRange to work... + // volatile bool playing; + volatile size_t pos; + volatile size_t end; public slots: - /** - * Assign PCM data to the player. - */ - void setPcmData(float *data, size_t num_samples); - - /** - * Set gain scalar. - * This value is multiplied with each sample before it is played. - */ - void setGainScalar(double gain_scalar); - - /** - * Set gain is dB. - * Convenience method for setGainScalar. It simple recalculates the dB value - * to a scalar and sets the gain scalar accordingly. - */ - void setGainDB(double gain_db); - - /** - * Set player position as sample offset. - */ - void setPosition(size_t position); - - /** - * Play range based on selection including fade-in/out. - * @param length Stop playing after length samples. -1 means play all. - */ - void playSelection(Selection selection, int length = -1); - - /** - * Return true if last selection is done playing. - */ - bool playSelectionDone(); - - /** - * Stop playing - */ - void stop(); + //! Assign PCM data to the player. + void setPcmData(float *data, size_t num_samples); + + //! Set gain scalar. + //! This value is multiplied with each sample before it is played. + void setGainScalar(double gain_scalar); + + //! Set gain is dB. + //! Convenience method for setGainScalar. It simple recalculates the dB value + //! to a scalar and sets the gain scalar accordingly. + void setGainDB(double gain_db); + + //! Set player position as sample offset. + void setPosition(size_t position); + + //! Play range based on selection including fade-in/out. + //! \param length Stop playing after length samples. -1 means play all. + void playSelection(Selection selection, int length = -1); + + //! Return true if last selection is done playing. + bool playSelectionDone(); + + //! Stop playing + void stop(); signals: - /** - * The absolute maximum of samples seen since last update. - */ - void peakUpdate(double peak); + //! The absolute maximum of samples seen since last update. + void peakUpdate(double peak); - /** - * The absolute maximum of samples seen since last update in dB. - */ - void peakUpdateDB(double peak_db); + //! The absolute maximum of samples seen since last update in dB. + void peakUpdateDB(double peak_db); - /** - * The sample position of the player. - */ - void positionUpdate(size_t position); + //! The sample position of the player. + void positionUpdate(size_t position); private slots: - void reportTimeout(); + void reportTimeout(); private: - ao_device *dev; + ao_device *dev; - float *pcm_data; - size_t pcm_size; + float *pcm_data; + size_t pcm_size; - QTimer report_timer; + QTimer report_timer; - double gain_scalar; - double peak; + double gain_scalar; + double peak; - bool running; + bool running; - QMutex mutex; - volatile bool new_selection; - size_t sel_end; - Selection selection; + QMutex mutex; + volatile bool new_selection; + size_t sel_end; + Selection selection; }; - -#endif/*__DRUMGIZMO_PLAYER_H__*/ diff --git a/src/samplesorter.cc b/src/samplesorter.cc index c32030a..ede42f6 100644 --- a/src/samplesorter.cc +++ b/src/samplesorter.cc @@ -36,119 +36,138 @@ #define MAXFLOAT (3.40282347e+38F) #endif -SampleSorter::SampleSorter(Selections &s, Selections &p) - : selections(s), selections_preview(p) +SampleSorter::SampleSorter(Selections& s, Selections& p) + : selections(s) + , selections_preview(p) { - setMouseTracking(true); + setMouseTracking(true); - data = NULL; - size = 0; - attlen = 666; // Magical constants needs biblical proportions... + data = NULL; + size = 0; + attlen = 666; // Magical constants needs biblical proportions... - sel_moving = SEL_NONE; + sel_moving = SEL_NONE; - setSpreadFactor(1000); + setSpreadFactor(1000); } void SampleSorter::setShowPreview(bool s) { - show_preview = s; - update(); + show_preview = s; + update(); } -void SampleSorter::setWavData(const float *data, size_t size) +void SampleSorter::setWavData(const float* data, size_t size) { - this->data = data; - this->size = size; - relayout(); + this->data = data; + this->size = size; + relayout(); } int SampleSorter::attackLength() { - return attlen; + return attlen; } void SampleSorter::setSpreadFactor(int s) { - spread = (double)s / 1000.0; - spread *= spread; - relayout(); + spread = (double)s / 1000.0; + spread *= spread; + relayout(); } void SampleSorter::setAttackLength(int len) { - attlen = len; - relayout(); + attlen = len; + relayout(); } void SampleSorter::addSelection(sel_id_t id) { - Selection s = selections.get(id); - - double energy = 0.0; - for(size_t idx = s.from; - (idx < (size_t)s.from + (size_t)attackLength()) && - (idx < (size_t)s.to) && (idx < size); - idx++) { - energy += data[idx] * data[idx]; - } - - s.energy = pow(energy, spread); - selections.update(id, s); - - relayout(); + Selection s = selections.get(id); + + double energy = 0.0; + for(size_t idx = s.from; + (idx < (size_t)s.from + (size_t)attackLength()) && + (idx < (size_t)s.to) && (idx < size); + idx++) + { + energy += data[idx] * data[idx]; + } + + s.energy = pow(energy, spread); + selections.update(id, s); + + relayout(); } void SampleSorter::addSelectionPreview(sel_id_t id) { - Selection s = selections_preview.get(id); - - double energy = 0.0; - for(size_t idx = s.from; - (idx < (size_t)s.from + (size_t)attackLength()) && - (idx < (size_t)s.to) && (idx < size); - idx++) { - energy += data[idx] * data[idx]; - } - - s.energy = pow(energy, spread); - selections_preview.update(id, s); - - relayout(); + Selection s = selections_preview.get(id); + + double energy = 0.0; + for(size_t idx = s.from; + (idx < (size_t)s.from + (size_t)attackLength()) && + (idx < (size_t)s.to) && (idx < size); + idx++) + { + energy += data[idx] * data[idx]; + } + + s.energy = pow(energy, spread); + selections_preview.update(id, s); + + relayout(); } void SampleSorter::relayout() { - min = MAXFLOAT; - max = 0.0; - - { - QVector ids = selections.ids(); - QVector::iterator i = ids.begin(); - while(i != ids.end()) { - Selection sel = selections.get(*i); - - if(sel.energy < min) min = sel.energy; - if(sel.energy > max) max = sel.energy; - - i++; - } - } - - if(show_preview) { - QVector ids = selections_preview.ids(); - QVector::iterator i = ids.begin(); - while(i != ids.end()) { - Selection sel = selections_preview.get(*i); - - if(sel.energy < min) min = sel.energy; - if(sel.energy > max) max = sel.energy; - - i++; - } - } - - update(); + min = MAXFLOAT; + max = 0.0; + + { + + QVector ids = selections.ids(); + QVector::iterator i = ids.begin(); + while(i != ids.end()) + { + Selection sel = selections.get(*i); + + if(sel.energy < min) + { + min = sel.energy; + } + if(sel.energy > max) + { + max = sel.energy; + } + + i++; + } + } + + if(show_preview) + { + QVector ids = selections_preview.ids(); + QVector::iterator i = ids.begin(); + while(i != ids.end()) + { + Selection sel = selections_preview.get(*i); + + if(sel.energy < min) + { + min = sel.energy; + } + if(sel.energy > max) + { + max = sel.energy; + } + + i++; + } + } + + update(); } #define MAP(p) (height()-(int)(p*((float)height()/(float)width()))) @@ -159,122 +178,146 @@ void SampleSorter::relayout() #define mapY(x) x #define C_RADIUS 2 -static void drawCircle(QPainter &p, int x, int y) +static void drawCircle(QPainter& p, int x, int y) { - p.drawEllipse(x - C_RADIUS, y - C_RADIUS, 2 * C_RADIUS, 2 * C_RADIUS); + p.drawEllipse(x - C_RADIUS, y - C_RADIUS, 2 * C_RADIUS, 2 * C_RADIUS); } -void SampleSorter::paintEvent(QPaintEvent *event) +void SampleSorter::paintEvent(QPaintEvent* event) { - QPainter painter(this); - - QColor colBg = QColor(180, 200, 180, 160); - QColor colFg = QColor(160, 180, 160, 160); - QColor colPt = QColor(255, 100, 100, 160); - QColor colPtPreview = QColor(0, 0, 255, 160); - QColor colPtSel = QColor(255, 255, 100, 160); - - painter.setPen(colBg); - painter.setBrush(colBg); - painter.drawRect(event->rect()); - - painter.setPen(colFg); - painter.drawLine(0,height(),width(),0); - - { - QVector ids = selections.ids(); - QVector::iterator i = ids.begin(); - while(i != ids.end()) { - Selection sel = selections.get(*i); - if(*i == selections.active()) painter.setPen(colPtSel); - else painter.setPen(colPt); - float x = (sel.energy / max); - x = sqrt(x); - x *= (float)width() * 0.9; - drawCircle(painter, x, MAP(x)); - i++; - } - } - - if(show_preview) { - QVector ids = selections_preview.ids(); - QVector::iterator i = ids.begin(); - while(i != ids.end()) { - Selection sel = selections_preview.get(*i); - painter.setPen(colPtPreview); - float x = (sel.energy / max); - x = sqrt(x); - x *= (float)width() * 0.9; - drawCircle(painter, x, MAP(x)); - i++; - } - } + QPainter painter(this); + + QColor colBg = QColor(180, 200, 180, 160); + QColor colFg = QColor(160, 180, 160, 160); + QColor colPt = QColor(255, 100, 100, 160); + QColor colPtPreview = QColor(0, 0, 255, 160); + QColor colPtSel = QColor(255, 255, 100, 160); + + painter.setPen(colBg); + painter.setBrush(colBg); + painter.drawRect(event->rect()); + + painter.setPen(colFg); + painter.drawLine(0,height(),width(),0); + + { + + QVector ids = selections.ids(); + QVector::iterator i = ids.begin(); + while(i != ids.end()) + { + Selection sel = selections.get(*i); + if(*i == selections.active()) + { + painter.setPen(colPtSel); + } + else + { + painter.setPen(colPt); + } + float x = (sel.energy / max); + x = sqrt(x); + x *= (float)width() * 0.9; + drawCircle(painter, x, MAP(x)); + i++; + } + } + + if(show_preview) + { + QVector ids = selections_preview.ids(); + QVector::iterator i = ids.begin(); + while(i != ids.end()) + { + Selection sel = selections_preview.get(*i); + painter.setPen(colPtPreview); + float x = (sel.energy / max); + x = sqrt(x); + x *= (float)width() * 0.9; + drawCircle(painter, x, MAP(x)); + i++; + } + } } sel_id_t SampleSorter::getSelectionByCoordinate(int px, int py) { - // Hit radius is slithly larger than the circles themselves. - int hit_r = C_RADIUS + 1; - - QVector ids = selections.ids(); - QVector::iterator i = ids.begin(); - while(i != ids.end()) { - Selection sel = selections.get(*i); - float x = (sel.energy/max); - x = sqrt(x); - x *= (float)width(); - if(px < (x + hit_r) && px > (x - hit_r) && - py < (MAP(x) + hit_r) && py > (MAP(x) - hit_r)) { - return *i; - } - i++; - } - - return SEL_NONE; + // Hit radius is slithly larger than the circles themselves. + int hit_r = C_RADIUS + 1; + + QVector ids = selections.ids(); + QVector::iterator i = ids.begin(); + while(i != ids.end()) + { + Selection sel = selections.get(*i); + float x = (sel.energy/max); + x = sqrt(x); + x *= (float)width(); + if(px < (x + hit_r) && + px > (x - hit_r) && + py < (MAP(x) + hit_r) && + py > (MAP(x) - hit_r)) + { + return *i; + } + i++; + } + + return SEL_NONE; } -void SampleSorter::mouseMoveEvent(QMouseEvent *event) +void SampleSorter::mouseMoveEvent(QMouseEvent* event) { - if(sel_moving != SEL_NONE) { - Selection sel = selections.get(sel_moving); - if(sel_moving != SEL_NONE) { - double power = unmapX(event->x()); - power *= power; - power *= max; - sel.energy = power; - selections.update(sel_moving, sel); - } - - update(); - return; - } else { - sel_id_t psel = getSelectionByCoordinate(event->x(), event->y()); - if(psel != SEL_NONE) { - setCursor(Qt::UpArrowCursor); - } else { - setCursor(Qt::ArrowCursor); - } - } + if(sel_moving != SEL_NONE) + { + Selection sel = selections.get(sel_moving); + if(sel_moving != SEL_NONE) + { + double power = unmapX(event->x()); + power *= power; + power *= max; + sel.energy = power; + selections.update(sel_moving, sel); + } + + update(); + return; + } + else + { + sel_id_t psel = getSelectionByCoordinate(event->x(), event->y()); + if(psel != SEL_NONE) + { + setCursor(Qt::UpArrowCursor); + } + else + { + setCursor(Qt::ArrowCursor); + } + } } -void SampleSorter::mousePressEvent(QMouseEvent *event) +void SampleSorter::mousePressEvent(QMouseEvent* event) { - if(event->button() == Qt::LeftButton) { - sel_id_t psel = getSelectionByCoordinate(event->x(), event->y()); - sel_moving = psel; - selections.setActive(psel); - if(psel != SEL_NONE) { - setCursor(Qt::UpArrowCursor); - } - } + if(event->button() == Qt::LeftButton) + { + sel_id_t psel = getSelectionByCoordinate(event->x(), event->y()); + sel_moving = psel; + selections.setActive(psel); + if(psel != SEL_NONE) + { + setCursor(Qt::UpArrowCursor); + } + } } -void SampleSorter::mouseReleaseEvent(QMouseEvent *event) +void SampleSorter::mouseReleaseEvent(QMouseEvent* event) { - if(event->button() == Qt::LeftButton) { - sel_moving = SEL_NONE; - setCursor(Qt::ArrowCursor); - } + if(event->button() == Qt::LeftButton) + { + sel_moving = SEL_NONE; + setCursor(Qt::ArrowCursor); + } } diff --git a/src/samplesorter.h b/src/samplesorter.h index ed86b9d..fa53a3f 100644 --- a/src/samplesorter.h +++ b/src/samplesorter.h @@ -24,59 +24,58 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_SAMPLESORTER_H__ -#define __DRUMGIZMO_SAMPLESORTER_H__ +#pragma once #include #include #include "selection.h" -class SampleSorter : public QWidget { -Q_OBJECT +class SampleSorter + : public QWidget +{ + Q_OBJECT public: - SampleSorter(Selections &selections, Selections &selections_preview); + SampleSorter(Selections& selections, Selections& selections_preview); public slots: - void setWavData(const float *data, size_t size); - void setAttackLength(int len); - int attackLength(); + void setWavData(const float* data, size_t size); + void setAttackLength(int len); + int attackLength(); - void addSelection(sel_id_t id); - void addSelectionPreview(sel_id_t id); + void addSelection(sel_id_t id); + void addSelectionPreview(sel_id_t id); - void relayout(); + void relayout(); - void setShowPreview(bool show_preview); + void setShowPreview(bool show_preview); - void setSpreadFactor(int spread); + void setSpreadFactor(int spread); protected: - void paintEvent(QPaintEvent *event); - void mouseMoveEvent(QMouseEvent *event); - void mousePressEvent(QMouseEvent *event); - void mouseReleaseEvent(QMouseEvent *event); + void paintEvent(QPaintEvent* event); + void mouseMoveEvent(QMouseEvent* event); + void mousePressEvent(QMouseEvent* event); + void mouseReleaseEvent(QMouseEvent* event); private: - sel_id_t getSelectionByCoordinate(int x, int y); + sel_id_t getSelectionByCoordinate(int x, int y); - Selections &selections; - Selections &selections_preview; + Selections& selections; + Selections& selections_preview; - bool show_preview; + bool show_preview; - float min; - float max; - int attlen; + float min; + float max; + int attlen; - // Wav data - const float *data; - size_t size; + // Wav data + const float* data; + size_t size; - Selection sel; + Selection sel; - sel_id_t sel_moving; + sel_id_t sel_moving; - double spread; + double spread; }; - -#endif/*__DRUMGIZMO_SAMPLESORTER_H__*/ diff --git a/src/selection.cc b/src/selection.cc index c0300a4..0b93fa2 100644 --- a/src/selection.cc +++ b/src/selection.cc @@ -27,80 +27,91 @@ #include "selection.h" Selections::Selections() - : QObject(NULL) + : QObject(NULL) { - nextid = 0; - act = SEL_NONE; + nextid = 0; + act = SEL_NONE; } sel_id_t Selections::add(Selection selection) { - sel_id_t id = nextid++; - sels[id] = selection; - added(id); - return id; + sel_id_t id = nextid++; + sels[id] = selection; + added(id); + return id; } Selection Selections::get(sel_id_t id) { - if(sels.find(id) == sels.end()) { - Selection s(0,0,0,0); - return s; - } - return sels[id]; + if(sels.find(id) == sels.end()) + { + Selection s(0,0,0,0); + return s; + } + return sels[id]; } QVector Selections::ids() { - QVector v; + QVector v; - QMap::iterator i = sels.begin(); - while(i != sels.end()) { - v.push_back(i.key()); - i++; - } + QMap::iterator i = sels.begin(); + while(i != sels.end()) + { + v.push_back(i.key()); + i++; + } - return v; + return v; } void Selections::update(sel_id_t id, Selection selection) { - if(sels.find(id) != sels.end()) { - sels[id] = selection; - emit updated(id); - } + if(sels.find(id) != sels.end()) + { + sels[id] = selection; + emit updated(id); + } } void Selections::remove(sel_id_t id) { - if(sels.find(id) != sels.end()) { - sels.erase(sels.find(id)); - if(id == act) setActive(SEL_NONE); - emit removed(id); - } + if(sels.find(id) != sels.end()) + { + sels.erase(sels.find(id)); + if(id == act) + { + setActive(SEL_NONE); + } + emit removed(id); + } } void Selections::clear() { - QVector _ids = ids(); - QVector::iterator i = _ids.begin(); - while(i != _ids.end()) { - remove(*i); - i++; - } + QVector _ids = ids(); + QVector::iterator i = _ids.begin(); + while(i != _ids.end()) + { + remove(*i); + i++; + } } void Selections::setActive(sel_id_t id) { - if(sels.find(id) != sels.end()) { - act = id; - } else { - act = SEL_NONE; - } - emit activeChanged(act); + if(sels.find(id) != sels.end()) + { + act = id; + } + else + { + act = SEL_NONE; + } + emit activeChanged(act); } sel_id_t Selections::active() { - return act; + return act; } diff --git a/src/selection.h b/src/selection.h index c6c7ecc..7d4d677 100644 --- a/src/selection.h +++ b/src/selection.h @@ -24,112 +24,88 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_SELECTION_H__ -#define __DRUMGIZMO_SELECTION_H__ +#pragma once #include #include #include -class Selection { +class Selection +{ public: - Selection(int from = 0, int to = 0, int fadein = 0, int fadeout = 0) { - this->from = from; - this->to = to; - this->fadein = fadein; - this->fadeout = fadeout; - } - size_t from; - size_t to; - size_t fadein; - size_t fadeout; - - double energy; - - QString name; + Selection(int from = 0, int to = 0, int fadein = 0, int fadeout = 0) + { + this->from = from; + this->to = to; + this->fadein = fadein; + this->fadeout = fadeout; + } + size_t from; + size_t to; + size_t fadein; + size_t fadeout; + + double energy; + + QString name; }; typedef int sel_id_t; #define SEL_NONE -1 -class Selections : public QObject { -Q_OBJECT +class Selections + : public QObject +{ + Q_OBJECT public: - Selections(); - - /** - * Add a new selection object. The new id is returned. - * Adding a new selections will emit an added signal with the new id. - */ - sel_id_t add(Selection selection); - - /** - * Get a stack copy of a specific selection object, by id. - * NOTE: If id does not exist an empty selection (from = to = 0) is - * returned. - */ - Selection get(sel_id_t id); - - /** - * Return vector (unsorted) of all ids in the object. - */ - QVector ids(); - - /** - * Set active selection (to be rendered yellow) - */ - void setActive(sel_id_t id); - - /** - * Get active selection id. - */ - sel_id_t active(); + Selections(); + + //! Add a new selection object. The new id is returned. + //! Adding a new selections will emit an added signal with the new id. + sel_id_t add(Selection selection); + + //! Get a stack copy of a specific selection object, by id. + //! NOTE: If id does not exist an empty selection (from = to = 0) is + //! returned. + Selection get(sel_id_t id); + + //! Return vector (unsorted) of all ids in the object. + QVector ids(); + + //! Set active selection (to be rendered yellow) + void setActive(sel_id_t id); + + //! Get active selection id. + sel_id_t active(); public slots: - /** - * Update a selection by id. - * Updating a selection will emit a updated signal. - */ - void update(sel_id_t id, Selection selection); - - /** - * Delete a selection by id. - * Deleting a selection will emit a deleted signal. - */ - void remove(sel_id_t id); - - /** - * Delete all selections - */ - void clear(); + //! Update a selection by id. + //! Updating a selection will emit a updated signal. + void update(sel_id_t id, Selection selection); + + //! Delete a selection by id. + //! Deleting a selection will emit a deleted signal. + void remove(sel_id_t id); + + //! Delete all selections + void clear(); signals: - /** - * This signal is emitted when a new selection has been added. - */ - void added(sel_id_t id); - - /** - * This signal is emitted when an existing selection has been updated. - */ - void updated(sel_id_t id); - - /** - * This signal is emitted when a selection has been removed. - */ - void removed(sel_id_t id); - - /** - * The active selection changed. - */ - void activeChanged(sel_id_t id); + //! This signal is emitted when a new selection has been added. + void added(sel_id_t id); -private: - QMap sels; - sel_id_t nextid; - sel_id_t act; -}; + //! This signal is emitted when an existing selection has been updated. + void updated(sel_id_t id); + //! This signal is emitted when a selection has been removed. + void removed(sel_id_t id); -#endif/*__DRUMGIZMO_SELECTION_H__*/ + //! The active selection changed. + void activeChanged(sel_id_t id); + +private: + QMap sels; + sel_id_t nextid; + sel_id_t act; +}; diff --git a/src/selectioneditor.cc b/src/selectioneditor.cc index 5f3057b..71a1195 100644 --- a/src/selectioneditor.cc +++ b/src/selectioneditor.cc @@ -30,87 +30,89 @@ #include #include -QLineEdit *createWidget(QString name, QWidget *parent) +QLineEdit *createWidget(QString name, QWidget* parent) { - QHBoxLayout *l = new QHBoxLayout(); + QHBoxLayout* l = new QHBoxLayout(); - l->addWidget(new QLabel(name)); - - QLineEdit *edt = new QLineEdit(); - QObject::connect(edt, SIGNAL(editingFinished()), - parent, SLOT(updateSelection())); + l->addWidget(new QLabel(name)); - l->addWidget(edt); + QLineEdit* edt = new QLineEdit(); + QObject::connect(edt, SIGNAL(editingFinished()), + parent, SLOT(updateSelection())); - ((QHBoxLayout *)parent->layout())->addLayout(l); - - return edt; + l->addWidget(edt); + + ((QHBoxLayout*)parent->layout())->addLayout(l); + + return edt; } SelectionEditor::SelectionEditor(Selections &s) - : selections(s) + : selections(s) { - cur = SEL_NONE; + cur = SEL_NONE; - setLayout(new QVBoxLayout()); + setLayout(new QVBoxLayout()); - from = createWidget("From:", this); - to = createWidget("To:", this); - fadein = createWidget("FadeIn:", this); - fadeout = createWidget("FadeOut:", this); - energy = createWidget("Energy:", this); - name = createWidget("Name:", this); + from = createWidget("From:", this); + to = createWidget("To:", this); + fadein = createWidget("FadeIn:", this); + fadeout = createWidget("FadeOut:", this); + energy = createWidget("Energy:", this); + name = createWidget("Name:", this); - ((QHBoxLayout *)layout())->addStretch(); + ((QHBoxLayout*)layout())->addStretch(); } void SelectionEditor::updateSelection() { - Selection sel; + Selection sel; - sel.from = from->text().toInt(); - sel.to = to->text().toInt(); - sel.fadein = fadein->text().toInt(); - sel.fadeout = fadeout->text().toInt(); - sel.energy = energy->text().toDouble(); - sel.name = name->text(); + sel.from = from->text().toInt(); + sel.to = to->text().toInt(); + sel.fadein = fadein->text().toInt(); + sel.fadeout = fadeout->text().toInt(); + sel.energy = energy->text().toDouble(); + sel.name = name->text(); - selections.update(cur, sel); + selections.update(cur, sel); } void SelectionEditor::update() { - Selection sel = selections.get(cur); - from->setText(QString::number(sel.from)); - to->setText(QString::number(sel.to)); - fadein->setText(QString::number(sel.fadein)); - fadeout->setText(QString::number(sel.fadeout)); - energy->setText(QString::number(sel.energy)); - name->setText(sel.name); + Selection sel = selections.get(cur); + from->setText(QString::number(sel.from)); + to->setText(QString::number(sel.to)); + fadein->setText(QString::number(sel.fadein)); + fadeout->setText(QString::number(sel.fadeout)); + energy->setText(QString::number(sel.energy)); + name->setText(sel.name); } void SelectionEditor::added(sel_id_t id) { - // Nothing to do here... + // Nothing to do here... } void SelectionEditor::updated(sel_id_t id) { - if(cur == id) { - update(); - } + if(cur == id) + { + update(); + } } void SelectionEditor::removed(sel_id_t id) { - if(cur == id) { - cur = SEL_NONE; - update(); - } + if(cur == id) + { + cur = SEL_NONE; + update(); + } } void SelectionEditor::activeChanged(sel_id_t id) { - cur = id; - update(); + cur = id; + update(); } diff --git a/src/selectioneditor.h b/src/selectioneditor.h index 55d8e33..feb9200 100644 --- a/src/selectioneditor.h +++ b/src/selectioneditor.h @@ -24,40 +24,39 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_SELECTIONEDITOR_H__ -#define __DRUMGIZMO_SELECTIONEDITOR_H__ +#pragma once #include #include #include "selection.h" -class SelectionEditor : public QWidget { -Q_OBJECT +class SelectionEditor + : public QWidget +{ + Q_OBJECT public: - SelectionEditor(Selections &selections); + SelectionEditor(Selections& selections); public slots: - void added(sel_id_t id); - void updated(sel_id_t id); - void removed(sel_id_t id); - void activeChanged(sel_id_t id); + void added(sel_id_t id); + void updated(sel_id_t id); + void removed(sel_id_t id); + void activeChanged(sel_id_t id); private slots: - void update(); - void updateSelection(); + void update(); + void updateSelection(); private: - Selections &selections; + Selections& selections; - sel_id_t cur; + sel_id_t cur; - QLineEdit *from; - QLineEdit *to; - QLineEdit *fadein; - QLineEdit *fadeout; - QLineEdit *energy; - QLineEdit *name; + QLineEdit* from; + QLineEdit* to; + QLineEdit* fadein; + QLineEdit* fadeout; + QLineEdit* energy; + QLineEdit* name; }; - -#endif/*__DRUMGIZMO_SELECTIONEDITOR_H__*/ diff --git a/src/sleep.h b/src/sleep.h index 107b7a8..38b3618 100644 --- a/src/sleep.h +++ b/src/sleep.h @@ -24,34 +24,44 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_SLEEP_H__ -#define __DRUMGIZMO_SLEEP_H__ +#pragma once #include -class __Sleeper : public QThread { +class __Sleeper + : public QThread +{ public: - void msleep(unsigned long msecs) { QThread::msleep(msecs); } - void sleep(unsigned long secs) { QThread::sleep(secs); } - void usleep(unsigned long usecs) { QThread::usleep(usecs); } + void msleep(unsigned long msecs) + { + QThread::msleep(msecs); + } + + void sleep(unsigned long secs) + { + QThread::sleep(secs); + } + + void usleep(unsigned long usecs) + { + QThread::usleep(usecs); + } }; inline void q_msleep(unsigned long msecs) { - __Sleeper s; - s.msleep(msecs); + __Sleeper s; + s.msleep(msecs); } inline void q_sleep(unsigned long secs) { - __Sleeper s; - s.sleep(secs); + __Sleeper s; + s.sleep(secs); } inline void q_usleep(unsigned long usecs) { - __Sleeper s; - s.usleep(usecs); + __Sleeper s; + s.usleep(usecs); } - -#endif/*__DRUMGIZMO_SLEEP_H__*/ diff --git a/src/volumefader.cc b/src/volumefader.cc index 08bab80..9d3e15a 100644 --- a/src/volumefader.cc +++ b/src/volumefader.cc @@ -34,26 +34,27 @@ #define SCALAR 10 #define P 0.5 -VolumeFader::VolumeFader() +VolumeFader::VolumeFader() { - peak = 0; - volslider = new QSlider(); - volslider->setRange(-60 * SCALAR , 10 * SCALAR); - volslider->setOrientation(Qt::Horizontal); + peak = 0; + volslider = new QSlider(); + volslider->setRange(-60 * SCALAR , 10 * SCALAR); + volslider->setOrientation(Qt::Horizontal); - volumepeak = new QLabel(); + volumepeak = new QLabel(); - volume = new QLabel(); + volume = new QLabel(); - connect(volslider, SIGNAL(valueChanged(int)), this, SLOT(handleValueChanged())); + connect(volslider, SIGNAL(valueChanged(int)), + this, SLOT(handleValueChanged())); - QVBoxLayout* lo = new QVBoxLayout(); - lo->addWidget(volslider); - - lo->addWidget(volumepeak); - lo->addWidget(volume); + QVBoxLayout* lo = new QVBoxLayout(); + lo->addWidget(volslider); - setLayout(lo); + lo->addWidget(volumepeak); + lo->addWidget(volume); + + setLayout(lo); } VolumeFader::~VolumeFader() @@ -61,37 +62,38 @@ VolumeFader::~VolumeFader() } -void VolumeFader::updatePeakDb(double db) +void VolumeFader::updatePeakDb(double db) { -// updatePeakPower(pow(10, db/20)); + //updatePeakPower(pow(10, db / 20)); } void VolumeFader::updatePeakPower(double newpeak) { - peak = (newpeak * (1.0-P) + peak * P); - volumepeak->setText("Peak " + QString::number(peak, 'f', 5)); - handleValueChanged(); + peak = (newpeak * (1.0 - P) + peak * P); + volumepeak->setText("Peak " + QString::number(peak, 'f', 5)); + handleValueChanged(); } void VolumeFader::setVolumeDb(double db) { - volslider->setValue(db*SCALAR); - handleValueChanged(); + volslider->setValue(db * SCALAR); + handleValueChanged(); } void VolumeFader::setVolumePower(double power) { - double db = 20 * log10(power); - setVolumeDb(db); - handleValueChanged(); + double db = 20 * log10(power); + setVolumeDb(db); + handleValueChanged(); } -void VolumeFader::handleValueChanged() +void VolumeFader::handleValueChanged() { - double db = ((double)volslider->value())/((double)SCALAR); - double power = pow(10, db/20); - emit volumeChangedDb(db); - emit volumeChangedPower(power); + double db = ((double)volslider->value()) / ((double)SCALAR); + double power = pow(10, db / 20); + emit volumeChangedDb(db); + emit volumeChangedPower(power); - volume->setText("Gain " + QString::number(volslider->value()/SCALAR) + " dB"); + volume->setText("Gain " + QString::number(volslider->value() / SCALAR) + + " dB"); } diff --git a/src/volumefader.h b/src/volumefader.h index 7209956..afd54f7 100644 --- a/src/volumefader.h +++ b/src/volumefader.h @@ -24,8 +24,7 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_VOLUMEFADER_H__ -#define __DRUMGIZMO_VOLUMEFADER_H__ +#pragma once #include #include @@ -33,33 +32,33 @@ #include -class VolumeFader : public QWidget { -Q_OBJECT +class VolumeFader + : public QWidget +{ + Q_OBJECT public: - VolumeFader(); - ~VolumeFader(); + VolumeFader(); + ~VolumeFader(); - void volumeDb(); - void volumePower(); + void volumeDb(); + void volumePower(); public slots: - void updatePeakDb(double vol); - void updatePeakPower(double vol); - void setVolumeDb(double vol); - void setVolumePower(double vol); + void updatePeakDb(double vol); + void updatePeakPower(double vol); + void setVolumeDb(double vol); + void setVolumePower(double vol); private slots: - void handleValueChanged(); + void handleValueChanged(); signals: - void volumeChangedDb(double vol); - void volumeChangedPower(double vol); + void volumeChangedDb(double vol); + void volumeChangedPower(double vol); private: - QSlider *volslider; - QLabel *volumepeak; - QLabel *volume; - double peak; + QSlider* volslider; + QLabel* volumepeak; + QLabel* volume; + double peak; }; - -#endif/*__DRUMGIZMO_VOLUMEFADER_H__*/ diff --git a/src/zoomslider.cc b/src/zoomslider.cc index 0a2abb1..3b03ff0 100644 --- a/src/zoomslider.cc +++ b/src/zoomslider.cc @@ -29,80 +29,97 @@ #include ZoomSlider::ZoomSlider(Qt::Orientation orientation) - : QSlider(orientation) + : QSlider(orientation) { - inverted = false; - from = 0; - to = 1; - tick_width = 0.1; + inverted = false; + from = 0; + to = 1; + tick_width = 0.1; - connect(this, SIGNAL(valueChanged(int)), this, SLOT(sliderValueChanged(int))); + connect(this, SIGNAL(valueChanged(int)), this, SLOT(sliderValueChanged(int))); } void ZoomSlider::paintEvent(QPaintEvent *ev) { - /* - QPainter p(this); - p.drawLine(0, 0, width(), height()); - */ - QSlider::paintEvent(ev); + /* + QPainter p(this); + p.drawLine(0, 0, width(), height()); + */ + QSlider::paintEvent(ev); } void ZoomSlider::setRange(float from, float to) { - this->inverted = false; - this->from = from; - this->to = to; - - int i_from = from / tick_width; - int i_to = to / tick_width; - - if(i_from > i_to) { - this->inverted = true; - int tmp; - tmp = i_from; - i_from = i_to; - i_to = tmp; - } - - QSlider::setRange(i_from, i_to); + this->inverted = false; + this->from = from; + this->to = to; + + int i_from = from / tick_width; + int i_to = to / tick_width; + + if(i_from > i_to) + { + this->inverted = true; + int tmp; + tmp = i_from; + i_from = i_to; + i_to = tmp; + } + + QSlider::setRange(i_from, i_to); } float ZoomSlider::fromSlider(int value) { - float val = (float)value * tick_width; - - if(inverted) { - val *= -1; - val = val - to + from; - - if(value == QSlider::minimum()) val = from; - if(value == QSlider::maximum()) val = to; - } else { - if(value == QSlider::minimum()) val = from; - if(value == QSlider::maximum()) val = to; - } - - return val; + float val = (float)value * tick_width; + + if(inverted) + { + val *= -1; + val = val - to + from; + + if(value == QSlider::minimum()) + { + val = from; + } + if(value == QSlider::maximum()) + { + val = to; + } + } + else + { + if(value == QSlider::minimum()) + { + val = from; + } + if(value == QSlider::maximum()) + { + val = to; + } + } + + return val; } void ZoomSlider::sliderValueChanged(int value) { - emit valueChanged(fromSlider(value)); + emit valueChanged(fromSlider(value)); } void ZoomSlider::setTickWidth(float tick_width) { - this->tick_width = tick_width; - setRange(from, to); // Update slider value span. + this->tick_width = tick_width; + setRange(from, to); // Update slider value span. } void ZoomSlider::setValue(float value) { - int i_value = value * tick_width; - if(inverted) { - i_value *= -1; - i_value += from; - } - QSlider::setValue(i_value); + int i_value = value * tick_width; + if(inverted) + { + i_value *= -1; + i_value += from; + } + QSlider::setValue(i_value); } diff --git a/src/zoomslider.h b/src/zoomslider.h index 60b6772..a42e48d 100644 --- a/src/zoomslider.h +++ b/src/zoomslider.h @@ -24,50 +24,45 @@ * along with DrumGizmo; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef __DRUMGIZMO_ZOOMSLIDER_H__ -#define __DRUMGIZMO_ZOOMSLIDER_H__ +#pragma once #include #include -class ZoomSlider : public QSlider { -Q_OBJECT +class ZoomSlider + : public QSlider +{ + Q_OBJECT public: - ZoomSlider(Qt::Orientation orientation); + ZoomSlider(Qt::Orientation orientation); - /** - * Range of the slider. 'from' may be lesser than 'to' which will invert the - * slider. - */ - void setRange(float from, float to); + //! Range of the slider. 'from' may be lesser than 'to' which will invert the + //! slider. + void setRange(float from, float to); - /** - * Set the distance between emitting of valueChanged signals. - * Example: from:=0, to:=1 and width:=0.5 will emit valueChanged signals on - * 0.0, 0.5 and 1.0 (ie. the slider will have 3 actual values) - * NOTE: If 'width' is greater than the span of [from; to] only the 'from' - * and 'to' values can be selected on the slider. - */ - void setTickWidth(float width); - - void setValue(float value); + //! Set the distance between emitting of valueChanged signals. + //! Example: from:=0, to:=1 and width:=0.5 will emit valueChanged signals on + //! 0.0, 0.5 and 1.0 (ie. the slider will have 3 actual values) + //! NOTE: If 'width' is greater than the span of [from; to] only the 'from' + //! and 'to' values can be selected on the slider. + void setTickWidth(float width); + + void setValue(float value); signals: - void valueChanged(float value); + void valueChanged(float value); private slots: - void sliderValueChanged(int value); + void sliderValueChanged(int value); protected: - void paintEvent(QPaintEvent *ev); + void paintEvent(QPaintEvent* ev); private: - float fromSlider(int value); + float fromSlider(int value); - bool inverted; - float from; - float to; - float tick_width; + bool inverted; + float from; + float to; + float tick_width; }; - -#endif/*__DRUMGIZMO_ZOOMSLIDER_H__*/ -- cgit v1.2.3