From 75769550c295d356f6a3152eccb93540ddcfb131 Mon Sep 17 00:00:00 2001 From: Mike Date: Thu, 7 Jan 2016 21:25:35 +0000 Subject: [PATCH] Style fixup astyle --kr --- CMakeLists.txt | 32 ++--- fft.h | 7 +- inputsource.cpp | 6 +- inputsource.h | 4 +- main.cpp | 24 ++-- mainwindow.cpp | 74 +++++------ mainwindow.h | 12 +- spectrogram.cpp | 280 ++++++++++++++++++++-------------------- spectrogram.h | 102 ++++++++------- spectrogramcontrols.cpp | 66 +++++----- spectrogramcontrols.h | 31 ++--- 11 files changed, 327 insertions(+), 311 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 74d60dc..025e3f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,12 +10,12 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules) set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) if (WIN32) - find_library (MMAN mman) - if(NOT(MMAN)) - message(FATAL_ERROR "please install mman-win32") - else(NOT(MMAN)) - set (extraLibs ${extraLibs} ${MMAN}) - endif(NOT(MMAN)) + find_library (MMAN mman) + if(NOT(MMAN)) + message(FATAL_ERROR "please install mman-win32") + else(NOT(MMAN)) + set (extraLibs ${extraLibs} ${MMAN}) + endif(NOT(MMAN)) ENDIF (WIN32) if (NOT CMAKE_CXX_FLAGS) @@ -27,12 +27,12 @@ endif (NOT CMAKE_CXX_FLAGS) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") list(APPEND inspectrum_sources - main.cpp - fft.cpp - mainwindow.cpp - inputsource.cpp - spectrogram.cpp - spectrogramcontrols.cpp + main.cpp + fft.cpp + mainwindow.cpp + inputsource.cpp + spectrogram.cpp + spectrogramcontrols.cpp ) INCLUDE(FindPkgConfig) @@ -40,13 +40,13 @@ find_package(Qt5Widgets REQUIRED) pkg_check_modules(FFTW REQUIRED fftw3f) include_directories( - ${QT_INCLUDES} - ${FFTW_INCLUDEDIR} - ${FFTW_INCLUDE_DIRS} + ${QT_INCLUDES} + ${FFTW_INCLUDEDIR} + ${FFTW_INCLUDE_DIRS} ) link_directories( - ${FFTW_LIBRARY_DIRS} + ${FFTW_LIBRARY_DIRS} ) add_executable(inspectrum ${inspectrum_sources}) diff --git a/fft.h b/fft.h index d30c456..adec9a7 100644 --- a/fft.h +++ b/fft.h @@ -21,12 +21,15 @@ #include -class FFT { +class FFT +{ public: FFT(int size); ~FFT(); void process(void *dest, void *source); - int getSize() { return fftSize; } + int getSize() { + return fftSize; + } private: int fftSize; diff --git a/inputsource.cpp b/inputsource.cpp index ca03fd3..197ed98 100644 --- a/inputsource.cpp +++ b/inputsource.cpp @@ -27,7 +27,8 @@ #include -InputSource::InputSource(const char *filename) { +InputSource::InputSource(const char *filename) +{ m_file = fopen(filename, "rb"); if (m_file == nullptr) throw std::runtime_error("Error opening file"); @@ -43,7 +44,8 @@ InputSource::InputSource(const char *filename) { throw std::runtime_error("Error mmapping file"); } -InputSource::~InputSource() { +InputSource::~InputSource() +{ munmap(m_data, m_file_size); fclose(m_file); } diff --git a/inputsource.h b/inputsource.h index ad310f2..ae8b0e0 100644 --- a/inputsource.h +++ b/inputsource.h @@ -36,5 +36,7 @@ public: ~InputSource(); bool getSamples(fftwf_complex *dest, off_t start, int length); - off_t getSampleCount() { return sampleCount; }; + off_t getSampleCount() { + return sampleCount; + }; }; diff --git a/main.cpp b/main.cpp index c922599..01ee997 100644 --- a/main.cpp +++ b/main.cpp @@ -35,27 +35,27 @@ int main(int argc, char *argv[]) // Add options QCommandLineOption rateOption(QStringList() << "r" << "rate", - QCoreApplication::translate("main", "Set sample rate."), - QCoreApplication::translate("main", "Hz")); + QCoreApplication::translate("main", "Set sample rate."), + QCoreApplication::translate("main", "Hz")); parser.addOption(rateOption); // Process the actual command line parser.process(a); - if (parser.isSet(rateOption)){ - bool ok; - // Use toDouble just for scientific notation support - int rate = parser.value(rateOption).toDouble(&ok); - if(!ok){ - fputs("ERROR: could not parse rate\n", stderr); - return 1; - } - mainWin.changeSampleRate(rate); + if (parser.isSet(rateOption)) { + bool ok; + // Use toDouble just for scientific notation support + int rate = parser.value(rateOption).toDouble(&ok); + if(!ok) { + fputs("ERROR: could not parse rate\n", stderr); + return 1; + } + mainWin.changeSampleRate(rate); } const QStringList args = parser.positionalArguments(); if (args.size()>=1) - mainWin.openFile(args.at(0)); + mainWin.openFile(args.at(0)); mainWin.show(); return a.exec(); diff --git a/mainwindow.cpp b/mainwindow.cpp index 586641f..59ab03e 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -62,51 +62,51 @@ bool MainWindow::eventFilter(QObject * /*obj*/, QEvent *event) } return true; } - }else if (event->type() == QEvent::MouseButtonPress) { + } else if (event->type() == QEvent::MouseButtonPress) { QMouseEvent *mouseEvent = (QMouseEvent*)event; - if (mouseEvent->buttons() == Qt::LeftButton){ - mystart = (mouseEvent->pos()); - if(!rubberBand) - rubberBand = new QRubberBand(QRubberBand::Rectangle, scrollArea.viewport()); - rubberBand->setGeometry(QRect(mystart, mystart)); - rubberBand->show(); - return true; - } - }else if (event->type() == QEvent::MouseMove) { + if (mouseEvent->buttons() == Qt::LeftButton) { + mystart = (mouseEvent->pos()); + if(!rubberBand) + rubberBand = new QRubberBand(QRubberBand::Rectangle, scrollArea.viewport()); + rubberBand->setGeometry(QRect(mystart, mystart)); + rubberBand->show(); + return true; + } + } else if (event->type() == QEvent::MouseMove) { QMouseEvent *mouseEvent = (QMouseEvent*)event; - if (mouseEvent->buttons() == Qt::LeftButton){ - rubberBand->setGeometry(QRect(mystart, mouseEvent->pos()).normalized()); //Area Bounding - return true; - } - }else if (event->type() == QEvent::MouseButtonRelease) { + if (mouseEvent->buttons() == Qt::LeftButton) { + rubberBand->setGeometry(QRect(mystart, mouseEvent->pos()).normalized()); //Area Bounding + return true; + } + } else if (event->type() == QEvent::MouseButtonRelease) { QMouseEvent *mouseEvent = (QMouseEvent*)event; - QRect rb= rubberBand->geometry(); + QRect rb = rubberBand->geometry(); - int topSample=spectrogram.lineToSample(scrollArea.verticalScrollBar()->value()+ rb.top()); - int bottomSample=spectrogram.lineToSample(scrollArea.verticalScrollBar()->value()+ rb.bottom()); + int topSample = spectrogram.lineToSample(scrollArea.verticalScrollBar()->value() + rb.top()); + int bottomSample = spectrogram.lineToSample(scrollArea.verticalScrollBar()->value() + rb.bottom()); - int leftFreq=(int)(scrollArea.horizontalScrollBar()->value() + rb.left())*spectrogram.getSampleRate()/spectrogram.getFFTSize(); - int rightFreq=(int)(scrollArea.horizontalScrollBar()->value() + rb.right())*spectrogram.getSampleRate()/spectrogram.getFFTSize(); + int leftFreq = (int)(scrollArea.horizontalScrollBar()->value() + rb.left())*spectrogram.getSampleRate()/spectrogram.getFFTSize(); + int rightFreq = (int)(scrollArea.horizontalScrollBar()->value() + rb.right())*spectrogram.getSampleRate()/spectrogram.getFFTSize(); - QStringList command; - command << "cut_sample" << spectrogram.getFileName() << QString::number(spectrogram.getSampleRate()) - << QString::number(spectrogram.lineToSample(scrollArea.verticalScrollBar()->value()+ rb.top())) - << QString::number(spectrogram.lineToSample(scrollArea.verticalScrollBar()->value()+ rb.bottom())) + QStringList command; + command << "cut_sample" << spectrogram.getFileName() << QString::number(spectrogram.getSampleRate()) + << QString::number(spectrogram.lineToSample(scrollArea.verticalScrollBar()->value() + rb.top())) + << QString::number(spectrogram.lineToSample(scrollArea.verticalScrollBar()->value() + rb.bottom())) - << QString::number((long int)(scrollArea.horizontalScrollBar()->value() + rb.left())*spectrogram.getSampleRate()/spectrogram.getFFTSize() +spectrogram.getCenterFreq() -spectrogram.getSampleRate()/2) - << QString::number((long int)(scrollArea.horizontalScrollBar()->value() + rb.right())*spectrogram.getSampleRate()/spectrogram.getFFTSize() +spectrogram.getCenterFreq() -spectrogram.getSampleRate()/2) - << QString::number(spectrogram.getCenterFreq()) - ; + << QString::number((long int)(scrollArea.horizontalScrollBar()->value() + rb.left())*spectrogram.getSampleRate()/spectrogram.getFFTSize() + spectrogram.getCenterFreq() - spectrogram.getSampleRate()/2) + << QString::number((long int)(scrollArea.horizontalScrollBar()->value() + rb.right())*spectrogram.getSampleRate()/spectrogram.getFFTSize() + spectrogram.getCenterFreq() - spectrogram.getSampleRate()/2) + << QString::number(spectrogram.getCenterFreq()) + ; - if(system(command.join(" ").toLatin1().data())){ - QMessageBox msgBox; - msgBox.setText("cut_sample call failed."); - msgBox.exec(); - }; - rubberBand->hide(); - rubberBand->clearMask(); - return true; - }; + if(system(command.join(" ").toLatin1().data())) { + QMessageBox msgBox; + msgBox.setText("cut_sample call failed."); + msgBox.exec(); + }; + rubberBand->hide(); + rubberBand->clearMask(); + return true; + }; return false; } diff --git a/mainwindow.h b/mainwindow.h index bdc53a4..3ab4e0c 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -34,18 +34,18 @@ public: public slots: void openFile(QString fileName); - void setSampleRate(QString rate); - void setFFTSize(int size); - void setZoomLevel(int zoom); + void setSampleRate(QString rate); + void setFFTSize(int size); + void setZoomLevel(int zoom); protected: - bool eventFilter(QObject *obj, QEvent *event); + bool eventFilter(QObject *obj, QEvent *event); private: QScrollArea scrollArea; Spectrogram spectrogram; SpectrogramControls *dock; - off_t getCenterSample(); - int getScrollPos(off_t sample); + off_t getCenterSample(); + int getScrollPos(off_t sample); }; diff --git a/spectrogram.cpp b/spectrogram.cpp index c70f201..0ef3f08 100644 --- a/spectrogram.cpp +++ b/spectrogram.cpp @@ -30,228 +30,234 @@ Spectrogram::Spectrogram() { - sampleRate = 8000000; - setFFTSize(1024); - zoomLevel = 0; - powerMax = 0.0f; - powerMin = -50.0f; + sampleRate = 8000000; + setFFTSize(1024); + zoomLevel = 0; + powerMax = 0.0f; + powerMin = -50.0f; - for (int i = 0; i < 256; i++) { - float p = (float)i / 256; - colormap[i] = QColor::fromHsvF(p * 0.83f, 1.0, 1.0 - p).rgba(); - } + for (int i = 0; i < 256; i++) { + float p = (float)i / 256; + colormap[i] = QColor::fromHsvF(p * 0.83f, 1.0, 1.0 - p).rgba(); + } } Spectrogram::~Spectrogram() { - delete fft; - delete inputSource; + delete fft; + delete inputSource; } -QSize Spectrogram::sizeHint() const { - return QSize(1024, 2048); +QSize Spectrogram::sizeHint() const +{ + return QSize(1024, 2048); } void Spectrogram::openFile(QString fileName) { - if (fileName != nullptr) { - try { - InputSource *newFile = new InputSource(fileName.toUtf8().constData()); - delete inputSource; - pixmapCache.clear(); - fftCache.clear(); - inputSource = newFile; - resize(fftSize, getHeight()); - } catch (std::runtime_error e) { - // TODO: display error - } - } + if (fileName != nullptr) { + try { + InputSource *newFile = new InputSource(fileName.toUtf8().constData()); + delete inputSource; + pixmapCache.clear(); + fftCache.clear(); + inputSource = newFile; + resize(fftSize, getHeight()); + } catch (std::runtime_error e) { + // TODO: display error + } + } } -template const T& clamp (const T& value, const T& min, const T& max) { +template const T& clamp (const T& value, const T& min, const T& max) +{ return std::min(max, std::max(min, value)); } void Spectrogram::paintEvent(QPaintEvent *event) { - QRect rect = event->rect(); - QPainter painter(this); - painter.fillRect(rect, Qt::black); + QRect rect = event->rect(); + QPainter painter(this); + painter.fillRect(rect, Qt::black); - if (inputSource != nullptr) { - int height = rect.height(); - off_t y = rect.y(); + if (inputSource != nullptr) { + int height = rect.height(); + off_t y = rect.y(); - QImage image(fftSize, height, QImage::Format_RGB32); + QImage image(fftSize, height, QImage::Format_RGB32); - while (height > 0) { - int tileOffset = y % linesPerTile(); // To handle drawing a partial first tile - int drawHeight = std::min(linesPerTile() - tileOffset, height); // Draw rest of first tile, full tile, or partial final tile - off_t tileId = lineToSample(y - tileOffset); - QPixmap *tile = getPixmapTile(tileId); - painter.drawPixmap(QRect(0, y, fftSize, drawHeight), *tile, QRect(0, tileOffset, fftSize, drawHeight)); - y += drawHeight; - height -= drawHeight; - } + while (height > 0) { + int tileOffset = y % linesPerTile(); // To handle drawing a partial first tile + int drawHeight = std::min(linesPerTile() - tileOffset, height); // Draw rest of first tile, full tile, or partial final tile + off_t tileId = lineToSample(y - tileOffset); + QPixmap *tile = getPixmapTile(tileId); + painter.drawPixmap(QRect(0, y, fftSize, drawHeight), *tile, QRect(0, tileOffset, fftSize, drawHeight)); + y += drawHeight; + height -= drawHeight; + } - paintTimeAxis(&painter, rect); - } + paintTimeAxis(&painter, rect); + } } QPixmap* Spectrogram::getPixmapTile(off_t tile) { - QPixmap *obj = pixmapCache.object(TileCacheKey(fftSize, zoomLevel, tile)); - if (obj != 0) - return obj; + QPixmap *obj = pixmapCache.object(TileCacheKey(fftSize, zoomLevel, tile)); + if (obj != 0) + return obj; - float *fftTile = getFFTTile(tile); - obj = new QPixmap(fftSize, linesPerTile()); - QImage image(fftSize, linesPerTile(), QImage::Format_RGB32); - for (int y = 0; y < linesPerTile(); y++) { - float *line = &fftTile[y * fftSize]; - for (int x = 0; x < fftSize; x++) { - float powerRange = std::abs(int(powerMin - powerMax)); - float normPower = (line[x] - powerMax) * -1.0f / powerRange; - normPower = clamp(normPower, 0.0f, 1.0f); + float *fftTile = getFFTTile(tile); + obj = new QPixmap(fftSize, linesPerTile()); + QImage image(fftSize, linesPerTile(), QImage::Format_RGB32); + for (int y = 0; y < linesPerTile(); y++) { + float *line = &fftTile[y * fftSize]; + for (int x = 0; x < fftSize; x++) { + float powerRange = std::abs(int(powerMin - powerMax)); + float normPower = (line[x] - powerMax) * -1.0f / powerRange; + normPower = clamp(normPower, 0.0f, 1.0f); - image.setPixel(x, y, colormap[(uint8_t)(normPower * (256 - 1))]); - } - } - obj->convertFromImage(image); - pixmapCache.insert(TileCacheKey(fftSize, zoomLevel, tile), obj); - return obj; + image.setPixel(x, y, colormap[(uint8_t)(normPower * (256 - 1))]); + } + } + obj->convertFromImage(image); + pixmapCache.insert(TileCacheKey(fftSize, zoomLevel, tile), obj); + return obj; } float* Spectrogram::getFFTTile(off_t tile) { - float *obj = fftCache.object(TileCacheKey(fftSize, zoomLevel, tile)); - if (obj != 0) - return obj; + float *obj = fftCache.object(TileCacheKey(fftSize, zoomLevel, tile)); + if (obj != 0) + return obj; - float *dest = new float[tileSize]; - float *ptr = dest; - off_t sample = tile; - while ((ptr - dest) < tileSize) { - getLine(ptr, sample); - sample += getStride(); - ptr += fftSize; - } - fftCache.insert(TileCacheKey(fftSize, zoomLevel, tile), dest); - return dest; + float *dest = new float[tileSize]; + float *ptr = dest; + off_t sample = tile; + while ((ptr - dest) < tileSize) { + getLine(ptr, sample); + sample += getStride(); + ptr += fftSize; + } + fftCache.insert(TileCacheKey(fftSize, zoomLevel, tile), dest); + return dest; } void Spectrogram::getLine(float *dest, off_t sample) { - if (inputSource && fft) { - fftwf_complex buffer[fftSize]; - inputSource->getSamples(buffer, sample, fftSize); + if (inputSource && fft) { + fftwf_complex buffer[fftSize]; + inputSource->getSamples(buffer, sample, fftSize); - for (int i = 0; i < fftSize; i++) { - buffer[i][0] *= window[i]; - buffer[i][1] *= window[i]; - } + for (int i = 0; i < fftSize; i++) { + buffer[i][0] *= window[i]; + buffer[i][1] *= window[i]; + } - fft->process(buffer, buffer); - for (int i = 0; i < fftSize; i++) { - int k = (i + fftSize / 2) % fftSize; - float re = buffer[k][0]; - float im = buffer[k][1]; - float mag = sqrt(re * re + im * im) / fftSize; - float magdb = 10 * log2(mag) / log2(10); - *dest = magdb; - dest++; - } - } + fft->process(buffer, buffer); + for (int i = 0; i < fftSize; i++) { + int k = (i + fftSize / 2) % fftSize; + float re = buffer[k][0]; + float im = buffer[k][1]; + float mag = sqrt(re * re + im * im) / fftSize; + float magdb = 10 * log2(mag) / log2(10); + *dest = magdb; + dest++; + } + } } void Spectrogram::paintTimeAxis(QPainter *painter, QRect rect) { - // Round up for firstLine and round each to nearest linesPerGraduation - int firstLine = ((rect.y() + linesPerGraduation - 1) / linesPerGraduation) * linesPerGraduation; - int lastLine = ((rect.y() + rect.height()) / linesPerGraduation) * linesPerGraduation; + // Round up for firstLine and round each to nearest linesPerGraduation + int firstLine = ((rect.y() + linesPerGraduation - 1) / linesPerGraduation) * linesPerGraduation; + int lastLine = ((rect.y() + rect.height()) / linesPerGraduation) * linesPerGraduation; - painter->save(); - QPen pen(Qt::white, 1, Qt::SolidLine); - painter->setPen(pen); - QFontMetrics fm(painter->font()); - int textOffset = fm.ascent() / 2 - 1; - for (int line = firstLine; line <= lastLine; line += linesPerGraduation) { - painter->drawLine(0, line, 10, line); - painter->drawText(12, line + textOffset, sampleToTime(lineToSample(line))); - } - painter->restore(); + painter->save(); + QPen pen(Qt::white, 1, Qt::SolidLine); + painter->setPen(pen); + QFontMetrics fm(painter->font()); + int textOffset = fm.ascent() / 2 - 1; + for (int line = firstLine; line <= lastLine; line += linesPerGraduation) { + painter->drawLine(0, line, 10, line); + painter->drawText(12, line + textOffset, sampleToTime(lineToSample(line))); + } + painter->restore(); } void Spectrogram::setSampleRate(int rate) { - sampleRate = rate; - update(); + sampleRate = rate; + update(); } void Spectrogram::setFFTSize(int size) { - fftSize = size; - delete fft; - fft = new FFT(fftSize); + fftSize = size; + delete fft; + fft = new FFT(fftSize); - window.reset(new float[fftSize]); - for (int i = 0; i < fftSize; i++) { - window[i] = 0.5f * (1.0f - cos(Tau * i / (fftSize - 1))); - } + window.reset(new float[fftSize]); + for (int i = 0; i < fftSize; i++) { + window[i] = 0.5f * (1.0f - cos(Tau * i / (fftSize - 1))); + } - resize(fftSize, getHeight()); + resize(fftSize, getHeight()); } void Spectrogram::setPowerMax(int power) { - powerMax = power; - pixmapCache.clear(); - update(); + powerMax = power; + pixmapCache.clear(); + update(); } void Spectrogram::setPowerMin(int power) { - powerMin = power; - pixmapCache.clear(); - update(); + powerMin = power; + pixmapCache.clear(); + update(); } void Spectrogram::setZoomLevel(int zoom) { - zoomLevel = clamp(zoom, 0, (int)log2(fftSize)); - resize(fftSize, getHeight()); + zoomLevel = clamp(zoom, 0, (int)log2(fftSize)); + resize(fftSize, getHeight()); } int Spectrogram::getHeight() { - if (!inputSource) - return 0; + if (!inputSource) + return 0; - return inputSource->getSampleCount() / getStride(); + return inputSource->getSampleCount() / getStride(); } int Spectrogram::getStride() { - return fftSize / pow(2, zoomLevel); + return fftSize / pow(2, zoomLevel); } -off_t Spectrogram::lineToSample(off_t line) { - return line * getStride(); +off_t Spectrogram::lineToSample(off_t line) +{ + return line * getStride(); } -int Spectrogram::sampleToLine(off_t sample) { - return sample / getStride(); +int Spectrogram::sampleToLine(off_t sample) +{ + return sample / getStride(); } QString Spectrogram::sampleToTime(off_t sample) { - return QString::number((float)sample / sampleRate).append("s"); + return QString::number((float)sample / sampleRate).append("s"); } -int Spectrogram::linesPerTile() { - return tileSize / fftSize; +int Spectrogram::linesPerTile() +{ + return tileSize / fftSize; } -uint qHash(const TileCacheKey &key, uint seed) { - return key.fftSize ^ key.zoomLevel ^ key.sample ^ seed; +uint qHash(const TileCacheKey &key, uint seed) +{ + return key.fftSize ^ key.zoomLevel ^ key.sample ^ seed; } diff --git a/spectrogram.h b/spectrogram.h index 91d2713..bb0003e 100644 --- a/spectrogram.h +++ b/spectrogram.h @@ -30,72 +30,74 @@ static const double Tau = M_PI * 2.0; class TileCacheKey; -class Spectrogram : public QWidget { - Q_OBJECT +class Spectrogram : public QWidget +{ + Q_OBJECT public: - Spectrogram(); - ~Spectrogram(); - QSize sizeHint() const; - int getHeight(); - int getStride(); + Spectrogram(); + ~Spectrogram(); + QSize sizeHint() const; + int getHeight(); + int getStride(); public slots: - void openFile(QString fileName); - void setSampleRate(int rate); - void setFFTSize(int size); - void setPowerMax(int power); - void setPowerMin(int power); - void setZoomLevel(int zoom); + void openFile(QString fileName); + void setSampleRate(int rate); + void setFFTSize(int size); + void setPowerMax(int power); + void setPowerMin(int power); + void setZoomLevel(int zoom); protected: - void paintEvent(QPaintEvent *event); + void paintEvent(QPaintEvent *event); private: - const int linesPerGraduation = 50; - const int tileSize = 65536; // This must be a multiple of the maximum FFT size + const int linesPerGraduation = 50; + const int tileSize = 65536; // This must be a multiple of the maximum FFT size - InputSource *inputSource = nullptr; - FFT *fft = nullptr; - std::unique_ptr window; - fftwf_complex *lineBuffer = nullptr; - QCache pixmapCache; - QCache fftCache; - uint colormap[256]; + InputSource *inputSource = nullptr; + FFT *fft = nullptr; + std::unique_ptr window; + fftwf_complex *lineBuffer = nullptr; + QCache pixmapCache; + QCache fftCache; + uint colormap[256]; - int sampleRate; - int fftSize; - int zoomLevel; - float powerMax; - float powerMin; + int sampleRate; + int fftSize; + int zoomLevel; + float powerMax; + float powerMin; - QPixmap* getPixmapTile(off_t tile); - float* getFFTTile(off_t tile); - void getLine(float *dest, off_t sample); - void paintTimeAxis(QPainter *painter, QRect rect); - off_t lineToSample(off_t line); - int sampleToLine(off_t sample); - QString sampleToTime(off_t sample); - int linesPerTile(); + QPixmap* getPixmapTile(off_t tile); + float* getFFTTile(off_t tile); + void getLine(float *dest, off_t sample); + void paintTimeAxis(QPainter *painter, QRect rect); + off_t lineToSample(off_t line); + int sampleToLine(off_t sample); + QString sampleToTime(off_t sample); + int linesPerTile(); }; -class TileCacheKey { +class TileCacheKey +{ public: - TileCacheKey(int fftSize, int zoomLevel, off_t sample) { - this->fftSize = fftSize; - this->zoomLevel = zoomLevel; - this->sample = sample; - } + TileCacheKey(int fftSize, int zoomLevel, off_t sample) { + this->fftSize = fftSize; + this->zoomLevel = zoomLevel; + this->sample = sample; + } - bool operator==(const TileCacheKey &k2) const { - return (this->fftSize == k2.fftSize) && - (this->zoomLevel == k2.zoomLevel) && - (this->sample == k2.sample); - } + bool operator==(const TileCacheKey &k2) const { + return (this->fftSize == k2.fftSize) && + (this->zoomLevel == k2.zoomLevel) && + (this->sample == k2.sample); + } - int fftSize; - int zoomLevel; - off_t sample; + int fftSize; + int zoomLevel; + off_t sample; }; diff --git a/spectrogramcontrols.cpp b/spectrogramcontrols.cpp index 877ffc8..9d75f3c 100644 --- a/spectrogramcontrols.cpp +++ b/spectrogramcontrols.cpp @@ -24,54 +24,54 @@ #include SpectrogramControls::SpectrogramControls(const QString & title, QWidget * parent) - : QDockWidget::QDockWidget(title, parent) + : QDockWidget::QDockWidget(title, parent) { - widget = new QWidget(this); - layout = new QFormLayout(widget); + widget = new QWidget(this); + layout = new QFormLayout(widget); - fileOpenButton = new QPushButton("Open file...", widget); - layout->addRow(fileOpenButton); + fileOpenButton = new QPushButton("Open file...", widget); + layout->addRow(fileOpenButton); - sampleRate = new QLineEdit("8000000"); - sampleRate->setValidator(new QIntValidator(this)); - layout->addRow(new QLabel(tr("Sample rate:")), sampleRate); + sampleRate = new QLineEdit("8000000"); + sampleRate->setValidator(new QIntValidator(this)); + layout->addRow(new QLabel(tr("Sample rate:")), sampleRate); - fftSizeSlider = new QSlider(Qt::Horizontal, widget); - fftSizeSlider->setRange(7, 13); - fftSizeSlider->setValue(10); - layout->addRow(new QLabel(tr("FFT size:")), fftSizeSlider); + fftSizeSlider = new QSlider(Qt::Horizontal, widget); + fftSizeSlider->setRange(7, 13); + fftSizeSlider->setValue(10); + layout->addRow(new QLabel(tr("FFT size:")), fftSizeSlider); - zoomLevelSlider = new QSlider(Qt::Horizontal, widget); - zoomLevelSlider->setRange(0, 5); - zoomLevelSlider->setValue(0); - layout->addRow(new QLabel(tr("Zoom:")), zoomLevelSlider); + zoomLevelSlider = new QSlider(Qt::Horizontal, widget); + zoomLevelSlider->setRange(0, 5); + zoomLevelSlider->setValue(0); + layout->addRow(new QLabel(tr("Zoom:")), zoomLevelSlider); - powerMaxSlider = new QSlider(Qt::Horizontal, widget); - powerMaxSlider->setRange(-100, 20); - powerMaxSlider->setValue(0); - layout->addRow(new QLabel(tr("Power max:")), powerMaxSlider); + powerMaxSlider = new QSlider(Qt::Horizontal, widget); + powerMaxSlider->setRange(-100, 20); + powerMaxSlider->setValue(0); + layout->addRow(new QLabel(tr("Power max:")), powerMaxSlider); - powerMinSlider = new QSlider(Qt::Horizontal, widget); - powerMinSlider->setRange(-100, 20); - powerMinSlider->setValue(-50); - layout->addRow(new QLabel(tr("Power min:")), powerMinSlider); + powerMinSlider = new QSlider(Qt::Horizontal, widget); + powerMinSlider->setRange(-100, 20); + powerMinSlider->setValue(-50); + layout->addRow(new QLabel(tr("Power min:")), powerMinSlider); - widget->setLayout(layout); - setWidget(widget); + widget->setLayout(layout); + setWidget(widget); - connect(fftSizeSlider, SIGNAL(valueChanged(int)), this, SLOT(fftSizeSliderChanged(int))); - connect(fileOpenButton, SIGNAL(clicked()), this, SLOT(fileOpenButtonClicked())); + connect(fftSizeSlider, SIGNAL(valueChanged(int)), this, SLOT(fftSizeSliderChanged(int))); + connect(fileOpenButton, SIGNAL(clicked()), this, SLOT(fileOpenButtonClicked())); } void SpectrogramControls::fftSizeSliderChanged(int size) { - emit fftSizeChanged((int)pow(2, size)); + emit fftSizeChanged((int)pow(2, size)); } void SpectrogramControls::fileOpenButtonClicked() { - QString fileName = QFileDialog::getOpenFileName( - this, tr("Open File"), "", tr("Sample file (*.cfile *.bin);;All files (*)") - ); - emit openFile(fileName); + QString fileName = QFileDialog::getOpenFileName( + this, tr("Open File"), "", tr("Sample file (*.cfile *.bin);;All files (*)") + ); + emit openFile(fileName); } \ No newline at end of file diff --git a/spectrogramcontrols.h b/spectrogramcontrols.h index 1e03f4c..1979378 100644 --- a/spectrogramcontrols.h +++ b/spectrogramcontrols.h @@ -25,28 +25,29 @@ #include #include -class SpectrogramControls : public QDockWidget { - Q_OBJECT +class SpectrogramControls : public QDockWidget +{ + Q_OBJECT public: - SpectrogramControls(const QString & title, QWidget * parent); + SpectrogramControls(const QString & title, QWidget * parent); signals: - void fftSizeChanged(int size); - void openFile(QString fileName); + void fftSizeChanged(int size); + void openFile(QString fileName); private slots: - void fftSizeSliderChanged(int size); - void fileOpenButtonClicked(); + void fftSizeSliderChanged(int size); + void fileOpenButtonClicked(); private: - QWidget *widget; - QFormLayout *layout; + QWidget *widget; + QFormLayout *layout; public: - QPushButton *fileOpenButton; - QLineEdit *sampleRate; - QSlider *fftSizeSlider; - QSlider *zoomLevelSlider; - QSlider *powerMaxSlider; - QSlider *powerMinSlider; + QPushButton *fileOpenButton; + QLineEdit *sampleRate; + QSlider *fftSizeSlider; + QSlider *zoomLevelSlider; + QSlider *powerMaxSlider; + QSlider *powerMinSlider; }; \ No newline at end of file