1 #include "peak_display.h"
11 #include "audio_clip.h"
14 using namespace std::chrono;
16 PeakDisplay::PeakDisplay(QWidget *parent)
21 void PeakDisplay::audio_clip_updated()
23 QMetaObject::invokeMethod(this, "repaint", Qt::QueuedConnection);
26 void PeakDisplay::paintEvent(QPaintEvent *event)
28 steady_clock::time_point paint_base = base;
29 if (paint_base == steady_clock::time_point() && !audio_clip->empty()) {
30 paint_base = audio_clip->get_first_sample();
34 unique_ptr<pair<float, float>[]> min_max = audio_clip->get_min_max_peaks(w, paint_base);
36 QPainter painter(this);
37 painter.fillRect(event->rect(), Qt::white);
38 painter.setClipRect(event->rect());
39 double mid_y = double(height()) * 0.5;
40 double scale_y = height() * 0.5;
41 for (int x = 0; x < w; ++x) {
42 if (isnan(min_max[x].first)) continue;
44 int y_min = lrint(min_max[x].first * scale_y + mid_y);
45 int y_max = lrint(min_max[x].second * scale_y + mid_y);
46 painter.drawLine(x, y_min, x, y_max);