From d6115cb458068fa64c7bbd9020bcbab3373fee0e Mon Sep 17 00:00:00 2001 From: Mike Walters Date: Sat, 2 Nov 2019 21:34:12 +0000 Subject: [PATCH] Use double for sample rate Fixes #158 --- inputsource.cpp | 4 ++-- inputsource.h | 6 +++--- main.cpp | 3 +-- mainwindow.cpp | 4 ++-- mainwindow.h | 4 ++-- plotview.cpp | 2 +- plotview.h | 4 ++-- samplebuffer.h | 2 +- samplesource.h | 2 +- spectrogramcontrols.cpp | 4 +++- 10 files changed, 18 insertions(+), 17 deletions(-) diff --git a/inputsource.cpp b/inputsource.cpp index 23f6645..a413f78 100644 --- a/inputsource.cpp +++ b/inputsource.cpp @@ -155,13 +155,13 @@ void InputSource::openFile(const char *filename) invalidate(); } -void InputSource::setSampleRate(size_t rate) +void InputSource::setSampleRate(double rate) { sampleRate = rate; invalidate(); } -size_t InputSource::rate() +double InputSource::rate() { return sampleRate; } diff --git a/inputsource.h b/inputsource.h index 2cf280f..716f38f 100644 --- a/inputsource.h +++ b/inputsource.h @@ -35,7 +35,7 @@ class InputSource : public SampleSource> private: QFile *inputFile = nullptr; size_t sampleCount = 0; - size_t sampleRate = 0; + double sampleRate = 0.0; uchar *mmapData = nullptr; std::unique_ptr sampleAdapter; std::string _fmt; @@ -49,9 +49,9 @@ public: size_t count() { return sampleCount; }; - void setSampleRate(size_t rate); + void setSampleRate(double rate); void setFormat(std::string fmt); - size_t rate(); + double rate(); float relativeBandwidth() { return 1; } diff --git a/main.cpp b/main.cpp index 9471682..8b0a30d 100644 --- a/main.cpp +++ b/main.cpp @@ -59,8 +59,7 @@ int main(int argc, char *argv[]) if (parser.isSet(rateOption)) { bool ok; - // Use toDouble just for scientific notation support - int rate = parser.value(rateOption).toDouble(&ok); + auto rate = parser.value(rateOption).toDouble(&ok); if(!ok) { fputs("ERROR: could not parse rate\n", stderr); return 1; diff --git a/mainwindow.cpp b/mainwindow.cpp index 2231848..b5aa3ac 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -98,7 +98,7 @@ void MainWindow::openFile(QString fileName) void MainWindow::setSampleRate(QString rate) { - int sampleRate = rate.toInt(); + auto sampleRate = rate.toDouble(); input->setSampleRate(sampleRate); plots->setSampleRate(sampleRate); @@ -107,7 +107,7 @@ void MainWindow::setSampleRate(QString rate) settings.setValue("SampleRate", sampleRate); } -void MainWindow::setSampleRate(int rate) +void MainWindow::setSampleRate(double rate) { dock->sampleRate->setText(QString::number(rate)); } diff --git a/mainwindow.h b/mainwindow.h index 32ccb91..187400c 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -30,12 +30,12 @@ class MainWindow : public QMainWindow public: MainWindow(); - void changeSampleRate(int rate); + void changeSampleRate(double rate); public slots: void openFile(QString fileName); void setSampleRate(QString rate); - void setSampleRate(int rate); + void setSampleRate(double rate); void setFormat(QString fmt); private: diff --git a/plotview.cpp b/plotview.cpp index ee0f1ee..b71ab7f 100644 --- a/plotview.cpp +++ b/plotview.cpp @@ -563,7 +563,7 @@ void PlotView::updateView(bool reCenter) viewport()->update(); } -void PlotView::setSampleRate(size_t rate) +void PlotView::setSampleRate(double rate) { sampleRate = rate; diff --git a/plotview.h b/plotview.h index 6b80abc..e3cb0a6 100644 --- a/plotview.h +++ b/plotview.h @@ -35,7 +35,7 @@ class PlotView : public QGraphicsView, Subscriber public: PlotView(InputSource *input); - void setSampleRate(size_t rate); + void setSampleRate(double rate); signals: void timeSelectionChanged(float time); @@ -75,7 +75,7 @@ private: int powerMin; int powerMax; bool cursorsEnabled; - size_t sampleRate = 0; + double sampleRate = 0.0; bool timeScaleEnabled; int scrollZoomStepsAccumulated = 0; diff --git a/samplebuffer.h b/samplebuffer.h index eb20e8e..e3eafff 100644 --- a/samplebuffer.h +++ b/samplebuffer.h @@ -40,7 +40,7 @@ public: virtual size_t count() { return src->count(); }; - size_t rate() { + double rate() { return src->rate(); }; diff --git a/samplesource.h b/samplesource.h index eea2cfa..d5e3c9d 100644 --- a/samplesource.h +++ b/samplesource.h @@ -33,7 +33,7 @@ public: virtual std::unique_ptr getSamples(size_t start, size_t length) = 0; virtual void invalidateEvent() { }; virtual size_t count() = 0; - virtual size_t rate() = 0; + virtual double rate() = 0; virtual float relativeBandwidth() = 0; std::type_index sampleType() override; }; diff --git a/spectrogramcontrols.cpp b/spectrogramcontrols.cpp index 910e0af..08007d9 100644 --- a/spectrogramcontrols.cpp +++ b/spectrogramcontrols.cpp @@ -36,7 +36,9 @@ SpectrogramControls::SpectrogramControls(const QString & title, QWidget * parent layout->addRow(fileOpenButton); sampleRate = new QLineEdit(); - sampleRate->setValidator(new QIntValidator(this)); + auto double_validator = new QDoubleValidator(this); + double_validator->setBottom(0.0); + sampleRate->setValidator(double_validator); layout->addRow(new QLabel(tr("Sample rate:")), sampleRate); // Spectrogram settings