diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3f1f09b48d35ce63ed520cc461be4accd6ee1c76..ddb0ecc177aa00a897b5d41f52842adb8e2408f3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -39,6 +39,10 @@ set(PROJECT_SOURCES
         main.cpp
         mainwindow.cpp
         mainwindow.h
+        audioVisualizer.h
+        audioVisualizer.cpp
+        timer.h
+        timer.cpp
 )
 
 if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
diff --git a/audioVisualizer.cpp b/audioVisualizer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..13651406e6dd1d215aa4c0534886c086d30b4d7b
--- /dev/null
+++ b/audioVisualizer.cpp
@@ -0,0 +1,24 @@
+#include "audioVisualizer.h"
+
+AudioVisualizer::AudioVisualizer(QWidget *parent)
+    : QWidget(parent)
+{
+}
+
+AudioVisualizer::~AudioVisualizer()
+{
+}
+
+void AudioVisualizer::printSpectrum(QString filename)
+{
+    QImage image(filename);
+    QPixmap pixmap = QPixmap::fromImage(image);
+    //timer->setPixmap(pixmap);
+    Timer *timer = new Timer(pixmap);
+
+    QVBoxLayout* layout = new QVBoxLayout;
+    layout->addWidget(timer);
+
+    setLayout(layout);
+}
+
diff --git a/audioVisualizer.h b/audioVisualizer.h
new file mode 100644
index 0000000000000000000000000000000000000000..b38148f9b5a9eb7166e3348cee1d9adfa1ccf534
--- /dev/null
+++ b/audioVisualizer.h
@@ -0,0 +1,26 @@
+#ifndef AUDIOVISUALIZER_H
+#define AUDIOVISUALIZER_H
+
+#include <QWidget>
+#include <QLabel>
+#include <QScrollArea>
+#include <QVBoxLayout>
+#include <QScrollBar>
+#include <QMessageBox>
+#include <QGraphicsPixmapItem>
+#include "timer.h"
+
+class AudioVisualizer : public QWidget
+{
+    Q_OBJECT
+
+public:
+    AudioVisualizer(QWidget *parent = nullptr);
+    ~AudioVisualizer();
+
+
+public slots:
+    void printSpectrum(QString filename);
+};
+
+#endif
diff --git a/mainwindow.cpp b/mainwindow.cpp
index 067fadfe18d3e25bcee4c597dffec7798b5cfad9..b5732f22e661b46e8bdf10f506a1f1b5ef958f9a 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -3,6 +3,7 @@
 #include <string.h>
 #include <stdio.h>
 #include <CImg.h>
+#include <QStandardPaths>
 
 extern "C" {
 #include <libavutil/opt.h>
@@ -197,8 +198,20 @@ void MainWindow::openAudioFile(){
     }
 
     cimg_library::CImg<int16_t> img(pixs, width, height / 2);
-    img.mirror("y").save_png("out.png");
+    QString savedFile = (QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QString("/spectrum.png"));
+    img.mirror("y").save_png(savedFile.toStdString().c_str());
 
     av_rdft_end(ctx);
     av_free(data);
+
+    AudioVisualizer* audioVisualizer = new AudioVisualizer;
+    audioVisualizer->printSpectrum(savedFile);
+
+    QVBoxLayout* layout = new QVBoxLayout;
+    layout->addWidget(audioVisualizer);
+
+    QWidget* window = new QWidget;
+    window->setLayout(layout);
+
+    setCentralWidget(window);
 }
diff --git a/mainwindow.h b/mainwindow.h
index 5b4b3de894f194fa75e0770276383d3598e6f456..8898ef1e7a4218af23f728970f03f2a2b776d7ea 100644
--- a/mainwindow.h
+++ b/mainwindow.h
@@ -6,6 +6,8 @@
 #include <QStatusBar>
 #include <QFileDialog>
 #include <QMessageBox>
+#include <QVBoxLayout>
+#include "audioVisualizer.h"
 
 class MainWindow : public QMainWindow
 {
diff --git a/timer.cpp b/timer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b08d92a97314ea15772f5b86a9907547ee04369f
--- /dev/null
+++ b/timer.cpp
@@ -0,0 +1,39 @@
+#include "timer.h"
+
+Timer::Timer(QPixmap pixmap, QWidget *parent)
+    : QGraphicsView(parent),
+    img(pixmap)
+{
+    bg = scene->addPixmap(img)/*->setAcceptedMouseButtons(Qt::NoButton)*/;
+    //scene->setBackgroundBrush(img);
+    setFixedHeight(pixmap.height());
+    setMaximumHeight(img.height() + horizontalScrollBar()->height() - TO_ADD_TO_IMAGE_HEIGHT);
+    setScene(scene);
+}
+
+Timer::~Timer()
+{
+}
+
+
+void Timer::mousePressEvent(QMouseEvent* event){
+    QPoint pos = event->pos();
+    pos.rx() += horizontalScrollBar()->value();
+    QGraphicsItem* got;
+    if ((got = scene->itemAt(pos, QTransform())) != nullptr && got != bg){
+        got->hide();
+        return;
+    }
+    int x = event->pos().x() + horizontalScrollBar()->value();
+    scene->addLine(QLine(x, 0, x, img.height() - TO_ADD_TO_IMAGE_HEIGHT), startColour)->setFlags(QGraphicsItem::ItemIsMovable/* | QGraphicsItem::ItemSendsGeometryChanges*/);
+}
+
+/*
+void Timer::paintEvent(QPaintEvent *event){
+    fprintf(stderr, "IN PAINT EVENT\n");
+    painter.setPen(Qt::NoPen);
+    QVectorIterator<QLine> it(lines);
+    while (it.hasNext())
+        painter.drawLine(it.next());
+}
+        */
diff --git a/timer.h b/timer.h
new file mode 100644
index 0000000000000000000000000000000000000000..a8141b14dee43db4f834c5e6f46a39e0b6eb0d32
--- /dev/null
+++ b/timer.h
@@ -0,0 +1,43 @@
+#ifndef __TIMER_H
+#define __TIMER_H
+
+#include <QWidget>
+#include <QLabel>
+#include <QScrollArea>
+#include <QVBoxLayout>
+#include <QScrollBar>
+#include <QMessageBox>
+#include <QMouseEvent>
+#include <QPainter>
+#include <QColor>
+#include <QGraphicsView>
+#include <QVector>
+#include <QGraphicsLineItem>
+
+#define TO_ADD_TO_IMAGE_HEIGHT 2
+
+class Timer : public QGraphicsView
+{
+    Q_OBJECT
+
+public:
+    Timer(QPixmap pixmap, QWidget *parent = nullptr);
+    ~Timer();
+
+    QPainter painter;
+    QGraphicsScene* scene = new QGraphicsScene;
+    QColor startColour = QColor(127, 0, 127);
+    QColor endColour = QColor(0, 127, 0);
+    QPixmap img;
+    QGraphicsPixmapItem* bg;
+
+    QVector<QLine> lines;
+
+protected:
+    void mousePressEvent(QMouseEvent* event);
+    //void paintEvent(QPaintEvent *);
+
+public slots:
+};
+
+#endif
diff --git a/timingBar.cpp b/timingBar.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9f74220aa6b1e2011221ec6bb1b7068c6b5150b3
--- /dev/null
+++ b/timingBar.cpp
@@ -0,0 +1,10 @@
+#include "timingBar.h"
+
+TimingBar::TimingBar(QWidget *parent)
+    : QLabel(parent)
+{
+}
+
+TimingBar::~TimingBar()
+{
+}
diff --git a/timingBar.h b/timingBar.h
new file mode 100644
index 0000000000000000000000000000000000000000..b5c9ebf745ca243cbe15f556ad84e8759dc97e47
--- /dev/null
+++ b/timingBar.h
@@ -0,0 +1,23 @@
+#ifndef TIMING_BAR_H
+#define TIMING_BAR_H
+
+#include <QWidget>
+#include <QLabel>
+#include <QScrollArea>
+#include <QVBoxLayout>
+#include <QScrollBar>
+#include <QMessageBox>
+#include <QMouseEvent>
+
+class TimingBar : public QLabel
+{
+    Q_OBJECT
+
+public:
+    TimingBar(QWidget *parent = nullptr);
+    ~TimingBar();
+
+public slots:
+};
+
+#endif