diff --git a/spectrogramplot.cpp b/spectrogramplot.cpp index 21ee948..7bee274 100644 --- a/spectrogramplot.cpp +++ b/spectrogramplot.cpp @@ -34,7 +34,6 @@ SpectrogramPlot::SpectrogramPlot(std::shared_ptr>> src) : Plot(src), inputSource(src), tuner(this) { - sampleRate = 8000000; setFFTSize(512); zoomLevel = 0; powerMax = 0.0f; @@ -153,6 +152,11 @@ void SpectrogramPlot::getLine(float *dest, off_t sample) } } +int SpectrogramPlot::getStride() +{ + return fftSize / zoomLevel; +} + float SpectrogramPlot::getTunerCentre() { return 0.5f - tuner.centre() / (float)fftSize; @@ -164,6 +168,11 @@ std::vector SpectrogramPlot::getTunerTaps() return gr::filter::firdes::low_pass(1.0, 1.0, cutoff, cutoff / 2); } +int SpectrogramPlot::linesPerTile() +{ + return tileSize / fftSize; +} + bool SpectrogramPlot::mouseEvent(QEvent::Type type, QMouseEvent event) { return tuner.mouseEvent(type, event); @@ -174,11 +183,6 @@ std::shared_ptr SpectrogramPlot::output() return tunerOutput; } -void SpectrogramPlot::setSampleRate(int rate) -{ - sampleRate = rate; -} - void SpectrogramPlot::setFFTSize(int size) { fftSize = size; @@ -220,39 +224,6 @@ void SpectrogramPlot::tunerMoved() emit repaint(); } -int SpectrogramPlot::getHeight() -{ - if (!inputSource) - return 0; - - return inputSource->count() / getStride(); -} - -int SpectrogramPlot::getStride() -{ - return fftSize / zoomLevel; -} - -off_t SpectrogramPlot::lineToSample(off_t line) -{ - return line * getStride(); -} - -int SpectrogramPlot::sampleToLine(off_t sample) -{ - return sample / getStride(); -} - -QString SpectrogramPlot::sampleToTime(off_t sample) -{ - return QString::number((float)sample / sampleRate).append("s"); -} - -int SpectrogramPlot::linesPerTile() -{ - return tileSize / fftSize; -} - uint qHash(const TileCacheKey &key, uint seed) { return key.fftSize ^ key.zoomLevel ^ key.sample ^ seed; diff --git a/spectrogramplot.h b/spectrogramplot.h index 170b2f8..f474171 100644 --- a/spectrogramplot.h +++ b/spectrogramplot.h @@ -41,40 +41,29 @@ class SpectrogramPlot : public Plot public: SpectrogramPlot(std::shared_ptr>> src); - std::shared_ptr output() override; void paintFront(QPainter &painter, QRect &rect, range_t sampleRange) override; void paintMid(QPainter &painter, QRect &rect, range_t sampleRange) override; - - QSize sizeHint() const; - int getHeight(); - int getStride(); - off_t lineToSample(off_t line); bool mouseEvent(QEvent::Type type, QMouseEvent event) override; - std::shared_ptr>> inputSource; - public slots: - void setSampleRate(int rate); void setFFTSize(int size); void setPowerMax(int power); void setPowerMin(int power); void setZoomLevel(int zoom); void tunerMoved(); - private: const int linesPerGraduation = 50; const int tileSize = 65536; // This must be a multiple of the maximum FFT size + std::shared_ptr>> inputSource; std::unique_ptr fft; std::unique_ptr window; - fftwf_complex *lineBuffer = nullptr; QCache pixmapCache; QCache fftCache; uint colormap[256]; - int sampleRate; int fftSize; int zoomLevel; float powerMax; @@ -87,11 +76,9 @@ private: QPixmap* getPixmapTile(off_t tile); float* getFFTTile(off_t tile); void getLine(float *dest, off_t sample); + int getStride(); float getTunerCentre(); std::vector getTunerTaps(); - void paintCursors(QPainter *painter, QRect rect); - int sampleToLine(off_t sample); - QString sampleToTime(off_t sample); int linesPerTile(); };