#include "soundview.h" #include "sound.h" #include #include SoundView::SoundView(QWidget* parent) : QGraphicsView(parent) { setScene(&scene); redraw(); } SoundView::~SoundView() { delete samples; } void SoundView::loadFile(const std::string& file) { samples = Sound::instance().openFile(file); } void SoundView::redraw() { //Log::debug << "redraw SoundView"; scene.clear(); scene.setBackgroundBrush(QBrush(Qt::GlobalColor::black)); scene.addRect(0, 0, width()-4, height()-4, QPen(Qt::green)); uint32_t h = scene.height()-4; //Log::info << "scene Size: " << scene.width() << " " << scene.height() << " " << width() << " " << height(); // red center line scene.addLine(0, h/2, scene.width()-4, h/2, QPen(Qt::red)); // cursor if(samples) { drawCursor(currentPosition, QPen(Qt::blue)); drawCursor(startPos, QPen(Qt::yellow)); drawCursor(endPos == 0 ? samples->getLength() : endPos, QPen(Qt::yellow)); /* for(uint32_t x = 0; x < width(); ++x) { float s = samples->readSample(x); scene.addLine(x, h/2, x, s*h, QPen(Qt::white)); //Log::info << "Line: " << x << " " << h/2; } */ } } void SoundView::paintEvent(QPaintEvent* event) { QGraphicsView::paintEvent(event); redraw(); } void SoundView::resizeEvent(QResizeEvent* event) { QGraphicsView::resizeEvent(event); if(samples) { samples->setWidth(event->size().width()); } } void SoundView::updatePosition(unsigned long newpos) { currentPosition = newpos; update(); } void SoundView::updateStartPosition(unsigned long newpos) { startPos = newpos; update(); } void SoundView::updateEndPosition(unsigned long newpos) { endPos = newpos; update(); } void SoundView::drawCursor(uint64_t pos, QPen pen) { uint32_t cursorXpos = (pos * (scene.width()-4)) / samples->getLength(); scene.addLine(cursorXpos, 0, cursorXpos, scene.height() -4, pen); }