diff --git a/inputsource.cpp b/inputsource.cpp index de1bbc5..664f8cc 100644 --- a/inputsource.cpp +++ b/inputsource.cpp @@ -75,6 +75,17 @@ void InputSource::openFile(const char *filename) invalidate(); } +void InputSource::setSampleRate(off_t rate) +{ + sampleRate = rate; + invalidate(); +} + +off_t InputSource::rate() +{ + return sampleRate; +} + std::unique_ptr[]> InputSource::getSamples(off_t start, off_t length) { if (inputFile == nullptr) diff --git a/inputsource.h b/inputsource.h index 75feeac..e991cef 100644 --- a/inputsource.h +++ b/inputsource.h @@ -28,6 +28,7 @@ private: FILE *inputFile = nullptr; off_t fileSize = 0; off_t sampleCount = 0; + off_t sampleRate = 0; std::complex *mmapData = nullptr; public: @@ -39,4 +40,6 @@ public: off_t count() { return sampleCount; }; + void setSampleRate(off_t rate); + off_t rate(); }; diff --git a/mainwindow.cpp b/mainwindow.cpp index ef079eb..d66d449 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -37,6 +37,7 @@ MainWindow::MainWindow() setCentralWidget(plots); connect(dock, SIGNAL(openFile(QString)), this, SLOT(openFile(QString))); + connect(dock->sampleRate, SIGNAL(textChanged(QString)), this, SLOT(setSampleRate(QString))); connect(dock, SIGNAL(fftSizeChanged(int)), plots, SLOT(setFFTSize(int))); connect(dock->zoomLevelSlider, SIGNAL(valueChanged(int)), plots, SLOT(setZoomLevel(int))); connect(dock->powerMaxSlider, SIGNAL(valueChanged(int)), plots, SLOT(setPowerMax(int))); @@ -53,3 +54,8 @@ void MainWindow::openFile(QString fileName) this->setWindowTitle(title.arg(QApplication::applicationName(),fileName.section('/',-1,-1))); input->openFile(fileName.toUtf8().constData()); } + +void MainWindow::setSampleRate(QString rate) +{ + input->setSampleRate(rate.toInt()); +} diff --git a/mainwindow.h b/mainwindow.h index f29bd99..2a3429c 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -34,6 +34,7 @@ public: public slots: void openFile(QString fileName); + void setSampleRate(QString rate); private: SpectrogramControls *dock; diff --git a/samplebuffer.h b/samplebuffer.h index 4574931..b7a5140 100644 --- a/samplebuffer.h +++ b/samplebuffer.h @@ -38,4 +38,7 @@ public: virtual off_t count() { return src->count(); }; + off_t rate() { + return src->rate(); + }; }; diff --git a/samplesource.h b/samplesource.h index 7035218..e69ab8c 100644 --- a/samplesource.h +++ b/samplesource.h @@ -35,6 +35,7 @@ public: virtual std::unique_ptr getSamples(off_t start, off_t length) = 0; virtual void invalidateEvent() { }; virtual off_t count() = 0; + virtual off_t rate() = 0; void subscribe(Subscriber *subscriber); void unsubscribe(Subscriber *subscriber); diff --git a/spectrogramcontrols.cpp b/spectrogramcontrols.cpp index 80935b9..17fbee9 100644 --- a/spectrogramcontrols.cpp +++ b/spectrogramcontrols.cpp @@ -32,7 +32,7 @@ SpectrogramControls::SpectrogramControls(const QString & title, QWidget * parent fileOpenButton = new QPushButton("Open file...", widget); layout->addRow(fileOpenButton); - sampleRate = new QLineEdit("8000000"); + sampleRate = new QLineEdit(); sampleRate->setValidator(new QIntValidator(this)); layout->addRow(new QLabel(tr("Sample rate:")), sampleRate); @@ -91,6 +91,7 @@ SpectrogramControls::SpectrogramControls(const QString & title, QWidget * parent void SpectrogramControls::setDefaults() { + sampleRate->setText("8000000"); fftSizeSlider->setValue(9); zoomLevelSlider->setValue(0); powerMaxSlider->setValue(0);