diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3feb433be94d72e58fd2f41f8a7b02ff1de0a10c..72ea33271f26e9a5aec319d29a5819f4278e4567 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -110,12 +110,14 @@ if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
     target_compile_options(Vivy PRIVATE
         -Weverything
 
-        # Disable some things because we want C++20 and don't control some Qt generated files...
+        # Qt generated files...
         -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++98-c++11-c++14-c++17-compat-pedantic -Wno-c++20-compat
+        -Wno-unsafe-buffer-usage -Wno-unused-parameter
 
         # Different versions of MPV...
         -Wno-switch-enum
 
+        -Wno-source-uses-openmp
         -Wno-reserved-identifier
         -Wno-extra-semi-stmt
         -Wno-redundant-parens
diff --git a/src/Lib/Audio.cc b/src/Lib/Audio.cc
index fba13efeb71860bc44d120e6358faa247adf2a9a..e3b6d72d96a7b56d96e664a56e76787f1f24dc7f 100644
--- a/src/Lib/Audio.cc
+++ b/src/Lib/Audio.cc
@@ -217,10 +217,10 @@ AudioStream::getDecodedDecalage() const noexcept
     return getDecodedChunkSize() - overlap;
 }
 
-quint64
+qint64
 AudioStream::getLength() const noexcept
 {
-    return quint64(std::chrono::duration_cast<std::chrono::milliseconds>(
-                       std::chrono::microseconds(dataFormat->duration))
-                       .count());
+    return qint64(std::chrono::duration_cast<std::chrono::milliseconds>(
+                      std::chrono::microseconds(dataFormat->duration))
+                      .count());
 }
diff --git a/src/Lib/Audio.hh b/src/Lib/Audio.hh
index 5492f8d48aedda889a8d76ee194f61d056b326a5..7216fbff3c3c098f578c6c824c6157962f617554 100644
--- a/src/Lib/Audio.hh
+++ b/src/Lib/Audio.hh
@@ -33,7 +33,7 @@ public:
     // Some getters
     int getChannels() const noexcept;
     int getSampleRate() const noexcept;
-    quint64 getLength() const noexcept;
+    qint64 getLength() const noexcept;
     qint64 getBitRate() const noexcept;
     QJsonObject getProperties() const noexcept override;
 
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc
index 60a6d8df2d9b0bd4b5ab820ae2bf4f3f230df93d..b7296c645ea92a2c25c70fbd1287f71342e4b2ed 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.cc
@@ -7,23 +7,24 @@ TimingAxis::TimingAxis() noexcept
     : QGraphicsObject()
 {
     pen = QPen(axisColour);
-    pen.setWidth(penWidth);
+    pen.setWidth(static_cast<int>(penWidth));
 }
 
 QRectF
 TimingAxis::boundingRect() const
 {
-    return QRectF(0, 10+penWidth, getTimingParam()->audioWidth() + 2 * penWidth,
-                  -2*getTimingParam()->axisHeight() - penWidth);
+    return QRectF(0, static_cast<int>(10 + penWidth),
+                  static_cast<int>(getTimingParam()->audioWidth() + 2 * penWidth),
+                  static_cast<int>(-2 * getTimingParam()->axisHeight() - penWidth));
 }
 
 void
 TimingAxis::onParamsChanged()
 {
-    qsizetype nbAvailableTicks  = availableTicks.size();
-    int minorTicksIndex         = 0;
-    int length                  = getTimingParam()->audioLength();
-    int width                   = getTimingParam()->audioWidth();
+    qsizetype nbAvailableTicks = availableTicks.size();
+    qint64 minorTicksIndex     = 0;
+    qint64 length              = getTimingParam()->audioLength();
+    qint64 width               = getTimingParam()->audioWidth();
     if (width != 0 && length != 0) {
         for (minorTicksIndex = 0; minorTicksIndex < nbAvailableTicks; minorTicksIndex++) {
             if (width * availableTicks[minorTicksIndex] / length >= minBetweenMinor) {
@@ -44,16 +45,16 @@ TimingAxis::onParamsChanged()
 }
 
 void
-TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
 {
-    int audioLength = getTimingParam()->audioLength();
+    qint64 audioLength = getTimingParam()->audioLength();
     if (audioLength == 0)
         return;
 
-    int yText = -majorTicksHeight - timeDigitsMargin;
+    const int yText = static_cast<int>((-majorTicksHeight) - timeDigitsMargin);
 
     painter->setPen(pen);
-    painter->drawLine(0, 0, audioLength, 0);
+    painter->drawLine(0, 0, static_cast<int>(audioLength), 0);
 
     /*
      * We may want to calculate width/audioLength
@@ -63,16 +64,16 @@ TimingAxis::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWi
      * It should be faster at the cost of precision :
      * should look whether this precision loss is negligible or not
      */
-    for (int i = 0; i < audioLength; i += majorTicks) {
-        int pos = getTimingParam()->posFromMs(i);
+    for (qint64 i = 0; i < audioLength; i += majorTicks) {
+        const int pos = static_cast<int>(getTimingParam()->posFromMs(i));
         painter->drawText(QPoint(pos, yText), getTimingParam()->printMajorTicks(i));
-        painter->drawLine(pos, 0, pos, -majorTicksHeight);
+        painter->drawLine(pos, 0, pos, static_cast<int>(-majorTicksHeight));
     }
     if (minorTicks > 0) {
-        for (int i = 0; i < audioLength; i += minorTicks) {
-            int pos = getTimingParam()->posFromMs(i);
+        for (qint64 i = 0; i < audioLength; i += minorTicks) {
+            const int pos = static_cast<int>(getTimingParam()->posFromMs(i));
             if (Q_LIKELY(fmod(i, majorTicks) < DBL_EPSILON))
-                painter->drawLine(pos, 0, pos, -minorTicksHeight);
+                painter->drawLine(pos, 0, pos, static_cast<int>(-minorTicksHeight));
         }
     }
 }
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh
index 266c0431373e7e2df91b388cfe1e3d5998d642c0..e13990a42acc4e1aeff58080a853bb503e58fee3 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingAxis.hh
@@ -23,24 +23,23 @@ public:
 private:
     static inline constexpr QColor axisColour = QColor(255, 220, 220);
     QPen pen;
-    int penWidth{ 1 };
+    qint64 penWidth{ 1 };
 
     /*
      * We use ints here because
      * qPainter->drawLine() and qPainter->drawText()
      * restrict us to ints anyways
      */
-    QVector<int> availableTicks = { 10, 100, 1000, 10000, 60000, 3600000, 86400000 };
-    int minBetweenMinor{ 10 };
-    int minorTicks;
-    int majorTicks;
+    QVector<qint64> availableTicks = { 10, 100, 1000, 10000, 60000, 3600000, 86400000 };
+    qint64 minBetweenMinor{ 10 };
+    qint64 minorTicks;
+    qint64 majorTicks;
 
-    int minorTicksHeight{ 3 };
-    int majorTicksHeight{ 7 };
-    int timeDigitsHeight{ 20 };
-    int timeDigitsMargin{ 3 };
+    qint64 minorTicksHeight{ 3 };
+    qint64 majorTicksHeight{ 7 };
+    qint64 timeDigitsHeight{ 20 };
+    qint64 timeDigitsMargin{ 3 };
 
-protected:
 public slots:
     void onParamsChanged();
 };
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingBar.hh b/src/UI/DocumentViews/AudioVisualizer/TimingBar.hh
index 01c529ad728c1e4dfcec1f672cc64a73064ead30..5dfbd2af0b96ec1bc6fdf7397e7d874ac2f59d5a 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingBar.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingBar.hh
@@ -14,8 +14,8 @@ public:
     ~TimingBar() noexcept override = default;
 
 private:
-    static inline constexpr int bar_demi_width = 2;
-    static inline constexpr int bar_width      = 2 * bar_demi_width;
+    static inline constexpr qint64 bar_demi_width = 2;
+    static inline constexpr qint64 bar_width      = 2 * bar_demi_width;
 
 protected:
     //void mousePressEvent(QGraphicsSceneMouseEvent*);
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingCursor.cc b/src/UI/DocumentViews/AudioVisualizer/TimingCursor.cc
index 1ef531d09a7a1ebf650011add8a80e452c4681f7..6ec41c41dd81fe09ada659f9c96e4f0d032a8632 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingCursor.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingCursor.cc
@@ -12,13 +12,13 @@ TimingCursor::TimingCursor()
 QRectF
 TimingCursor::boundingRect() const
 {
-    return QRectF(-maxWidth, 0, maxWidth * 2, getTimingParam()->audioHeight());
+    return QRectF(-maxWidth, 0, maxWidth * 2, static_cast<int>(getTimingParam()->audioHeight()));
 }
 
 void
-TimingCursor::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+TimingCursor::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
 {
-    painter->drawLine(0, 0, 0, getTimingParam()->audioHeight());
+    painter->drawLine(0, 0, 0, static_cast<int>(getTimingParam()->audioHeight()));
 
     QRectF textRectangle = textRect;
     QPointF sceneLeft    = mapFromScene(QPointF(0, 0));
@@ -38,6 +38,6 @@ TimingCursor::setTime(QString str) noexcept
 void
 TimingCursor::onParamsChanged()
 {
-    textRect = QRectF(0, 10, maxWidth,
-                      getTimingParam()->audioHeight() - 20); // TODO : remove 10/20 magic numbers
+    // TODO : remove 10/20 magic numbers
+    textRect = QRectF(0, 10, maxWidth, static_cast<int>(getTimingParam()->audioHeight() - 20));
 }
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc b/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc
index 3e6045647424f37447c76f98dcc2402ea66e595d..5fd4e49a17430db0986b7119633b75e3a0a314b7 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc
@@ -3,9 +3,9 @@
 
 using namespace Vivy;
 
-TimingLine::TimingLine(VVLib::ASSLine _line[], int index, QGraphicsItem *parent)
+TimingLine::TimingLine(VVLib::ASSLine l[], qint64 index, QGraphicsItem *parent)
     : QGraphicsObject(parent)
-    , line(_line)
+    , line(l)
     , lineIndex(index)
 {
 }
@@ -16,31 +16,32 @@ TimingLine::boundingRect() const
     const auto end   = VVLib::ASSLineGetFiniTime(line);
     const auto start = VVLib::ASSLineGetStartTime(line);
     return QRectF(tempOffset, 0, getTimingParam()->posFromMs(int(10 * (end - start))),
-                  getTimingParam()->audioHeight());
+                  static_cast<int>(getTimingParam()->audioHeight()));
 }
 
 void
-TimingLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+TimingLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
 {
     const auto end   = VVLib::ASSLineGetFiniTime(line);
     const auto start = VVLib::ASSLineGetStartTime(line);
-    painter->fillRect(QRectF(tempOffset, 0, getTimingParam()->posFromMs(int(10 * (end - start))),
-                             getTimingParam()->audioHeight()),
-                      QColor(0, 255, 255, 50));
+    const QRectF rect(tempOffset, 0,
+                      static_cast<int>(getTimingParam()->posFromMs(10 * (end - start))),
+                      static_cast<int>(getTimingParam()->audioHeight()));
+    painter->fillRect(rect, QColor(0, 255, 255, 50));
 }
 
 void
-TimingLine::timingSeparatorHasChanged(int sylIndex, qreal x)
+TimingLine::timingSeparatorHasChanged([[maybe_unused]] qint64 sylIndex, [[maybe_unused]] qreal x)
 {
 }
 
 void
-TimingLine::sepEnterPress(int sepIndex)
+TimingLine::sepEnterPress([[maybe_unused]] qint64 sepIndex)
 {
 }
 
 void
-TimingLine::sepExitPress(int sepIndex)
+TimingLine::sepExitPress(qint64 sepIndex)
 {
     if (qAbs(tempOffset) <= DBL_EPSILON) {
         prepareGeometryChange();
@@ -66,10 +67,10 @@ TimingLine::sepExitPress(int sepIndex)
 }
 
 qreal
-TimingLine::requestMove(int sepIndex, qreal x)
+TimingLine::requestMove(qint64 sepIndex, qreal x)
 {
-    QRectF sceneRect      = mapRectFromScene(scene()->sceneRect());
-    const auto syls_count = VVLib::ASSLineGetSyllabesCount(line);
+    QRectF sceneRect        = mapRectFromScene(scene()->sceneRect());
+    const qint64 syls_count = static_cast<qint64>(VVLib::ASSLineGetSyllabesCount(line));
     qreal mini, maxi, given = x;
 
     if (sepIndex <= 0) {
@@ -101,7 +102,8 @@ TimingLine::requestMove(int sepIndex, qreal x)
 
         qint64 dur2 = qint64(
             getTimingParam()->msFromPos(int(given - timingSyls[sepIndex - 1]->pos().x())) / 10);
-        VVLib::ASSSyllabeSetDuration(VVLib::ASSLineGetSyllabeAt(line, sepIndex - 1), dur2);
+        VVLib::ASSSyllabeSetDuration(
+            VVLib::ASSLineGetSyllabeAt(line, static_cast<quint64>(sepIndex - 1)), dur2);
         timingSyls[sepIndex - 1]->setLen(dur2);
         VVLib::ASSLineSetFiniTime(line, VVLib::ASSLineGetStartTime(line) +
                                             qint64(getTimingParam()->msFromPos(int(given)) / 10));
@@ -114,17 +116,18 @@ TimingLine::requestMove(int sepIndex, qreal x)
                     : getTimingParam()->posFromMs(int(VVLib::ASSLineGetDuration(line) * 10));
         given = qBound(mini, given, maxi);
 
-        qint64 sumDur =
-            VVLib::ASSSyllabeGetDuration(VVLib::ASSLineGetSyllabeAt(line, sepIndex)) +
-            VVLib::ASSSyllabeGetDuration(VVLib::ASSLineGetSyllabeAt(line, sepIndex - 1));
-        qint64 dur1 = qint64(
-            getTimingParam()->msFromPos(int(given) - int(timingSyls[sepIndex - 1]->pos().x())) /
-            10);
-        dur1        = qMin(dur1, sumDur);
+        const auto current_syl = VVLib::ASSLineGetSyllabeAt(line, static_cast<quint64>(sepIndex));
+        const auto prev_syl = VVLib::ASSLineGetSyllabeAt(line, static_cast<quint64>(sepIndex - 1));
+
+        const qint64 sumDur =
+            VVLib::ASSSyllabeGetDuration(current_syl) + VVLib::ASSSyllabeGetDuration(prev_syl);
+        const qint64 dur1 = qMin(
+            getTimingParam()->msFromPos(int(given) - int(timingSyls[sepIndex - 1]->pos().x())) / 10,
+            sumDur);
         qint64 dur2 = sumDur - dur1;
 
-        VVLib::ASSSyllabeSetDuration(VVLib::ASSLineGetSyllabeAt(line, sepIndex - 1), dur1);
-        VVLib::ASSSyllabeSetDuration(VVLib::ASSLineGetSyllabeAt(line, sepIndex), dur2);
+        VVLib::ASSSyllabeSetDuration(prev_syl, dur1);
+        VVLib::ASSSyllabeSetDuration(current_syl, dur2);
 
         timingSyls[sepIndex - 1]->setLen(dur1);
         timingSyls[sepIndex]->setPos(given, 0);
@@ -142,11 +145,11 @@ TimingLine::requestMove(int sepIndex, qreal x)
 void
 TimingLine::onParamsChanged()
 {
-    setPos(getTimingParam()->posFromMs(int(VVLib::ASSLineGetStartTime(line) * 10)),
-           getTimingParam()->axisHeight());
-    int currentTime = 0;
-    int endSyl      = 0;
-    size_t i;
+    setPos(static_cast<qreal>(getTimingParam()->posFromMs(VVLib::ASSLineGetStartTime(line) * 10)),
+           static_cast<qreal>(getTimingParam()->axisHeight()));
+    qint64 currentTime = 0;
+    qint64 endSyl      = 0;
+    qint64 i;
 
     setZValue(Z_LINE_BACKGROUND);
 
@@ -155,8 +158,9 @@ TimingLine::onParamsChanged()
     seps.append(timingSeparatorStart);
     CONNECT_SEP(timingSeparatorStart);
 
-    for (i = 0; i < VVLib::ASSLineGetSyllabesCount(line); i += 1) {
-        auto *syllabe = VVLib::ASSLineGetSyllabeAt(line, i);
+    const qint64 syls_count = static_cast<qint64>(VVLib::ASSLineGetSyllabesCount(line));
+    for (i = 0; i < syls_count; i += 1) {
+        auto *syllabe = VVLib::ASSLineGetSyllabeAt(line, static_cast<quint64>(i));
         endSyl        = currentTime + 10 * int(VVLib::ASSSyllabeGetDuration(syllabe));
 
         TimingSyl *timingSyl = new TimingSyl(syllabe, currentTime, this);
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh b/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh
index 5b9df2826979a0fa21fd9733c5310eae0f47f296..1d76c931cff772abc2e431bf0184237abb874b47 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh
@@ -11,7 +11,7 @@ namespace Vivy
 class TimingLine final : public QGraphicsObject {
     Q_OBJECT
 public:
-    explicit TimingLine(VVLib::ASSLine[], int, QGraphicsItem * = nullptr);
+    explicit TimingLine(VVLib::ASSLine[], qint64, QGraphicsItem * = nullptr);
 
     QRectF boundingRect() const override;
     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
@@ -20,20 +20,20 @@ private:
     VVLib::ASSLine *const line;
     QVector<TimingSeparator *> seps;
     QVector<TimingSyl *> timingSyls;
-    int lineIndex;
+    qint64 lineIndex;
 
     qreal tempOffset{ 0 };
 
 public:
-    qreal requestMove(int, qreal);
+    qreal requestMove(qint64, qreal);
 
 signals:
-    void lineChanged(int);
+    void lineChanged(qint64);
 
 public slots:
-    void timingSeparatorHasChanged(int, qreal);
-    void sepEnterPress(int);
-    void sepExitPress(int);
+    void timingSeparatorHasChanged(qint64, qreal);
+    void sepEnterPress(qint64);
+    void sepExitPress(qint64);
     void onParamsChanged();
 };
 
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc b/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc
index b18c1c00812f4e4535ef984441d6702ca8a0246d..4dd45756d459adc6db1b90659d468337246de275 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingParams.cc
@@ -59,7 +59,7 @@ TimingParams::getRebuildSceneButton() const noexcept
 }
 
 void
-TimingParams::adjustFlip(QRectF *rect, qreal left, qreal right) noexcept
+TimingParams::adjustFlip(QRectF *rect, [[maybe_unused]] qreal left, qreal right) noexcept
 {
     if (Q_UNLIKELY(right - rect->right() < 0)) {
         qreal w = rect->width();
@@ -81,7 +81,7 @@ TimingParams::adjustTranslate(QRectF *rect, qreal left, qreal right) noexcept
 }
 
 QString
-TimingParams::printMajorTicks(int t) noexcept
+TimingParams::printMajorTicks(qint64 t) noexcept
 {
     // TODO : adapt to different ticks (not everytime with "." first)
     QString ret(
@@ -95,12 +95,12 @@ TimingParams::printMajorTicks(int t) noexcept
 }
 
 QString
-TimingParams::printCursor(int t) noexcept
+TimingParams::printCursor(qint64 t) noexcept
 {
-    int absT = abs(t);
+    qint64 absT = abs(t);
     // TODO : adapt to different ticks (not everytime with "." first)
     QString ret(
-        QString::fromLatin1(t < 0 ? "-" : "" ) +
+        QString::fromLatin1(t < 0 ? "-" : "") +
         QStringLiteral("%1").arg(absT % 60000 / 1000, absT >= 60000 ? 2 : 1, 10, QLatin1Char('0')) +
         QString(".") + QString::number(absT % 1000 / m_minorTicks));
     if (absT >= 60000)
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh b/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh
index 332d5b92d0842ed18d5a21e30966b531d493ae66..a53f65cc4055284666cac42e1436de84efa3f61e 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingParams.hh
@@ -12,13 +12,13 @@
 #define getTimingScene() static_cast<TimingScene *>(scene())
 #define getTimingParam() getTimingScene()->getParams()
 
-#define Z_SPECTER             -1000
-#define Z_AXIS                10
-#define Z_LINE_BACKGROUND     -100
-#define Z_SEPARATOR_START_END 1000
-#define Z_SEPARATOR_MIDDLE    100
-#define Z_LINE_SYL_TEXT       50
-#define Z_CURSOR_BAR          500
+#define Z_SPECTER             (-1000)
+#define Z_AXIS                (10)
+#define Z_LINE_BACKGROUND     (-100)
+#define Z_SEPARATOR_START_END (1000)
+#define Z_SEPARATOR_MIDDLE    (100)
+#define Z_LINE_SYL_TEXT       (50)
+#define Z_CURSOR_BAR          (500)
 
 namespace Vivy
 {
@@ -40,62 +40,68 @@ public:
 
 private:
     // Managed by TimingAxis
-    int m_majorTicks{1}, m_minorTicks{1};
+    qint64 m_majorTicks{ 1 }, m_minorTicks{ 1 };
     // Managed by TimingScene
-    int m_axisHeight{1}, m_audioWidth{1}, m_audioLength{1}, m_audioHeight{1};
+    qint64 m_axisHeight{ 1 }, m_audioWidth{ 1 }, m_audioLength{ 1 }, m_audioHeight{ 1 };
     // Self-managed
-    qreal m_wl{0}, m_lw{0};
-    qreal m_audioWidthScale{1};
+    qreal m_wl{ 0 }, m_lw{ 0 };
+    qreal m_audioWidthScale{ 1 };
 
 public:
     void adjustTranslate(QRectF *, qreal, qreal) noexcept;
     void adjustFlip(QRectF *, qreal, qreal) noexcept;
 
-    QString printMajorTicks(int) noexcept;
-    QString printCursor(int) noexcept;
+    QString printMajorTicks(qint64) noexcept;
+    QString printCursor(qint64) noexcept;
 
-    inline void setTicks(int t, int T) noexcept
+    inline void setTicks(qint64 t, qint64 T) noexcept
     {
         m_minorTicks = t;
         m_majorTicks = T;
     }
-    inline void setAxisHeight(int x) { m_axisHeight = x; }
-    inline void setAudioHeight(int x) { m_audioHeight = x; }
-    inline void setAudioWidth(int x)
+    inline void setAxisHeight(qint64 x) noexcept { m_axisHeight = x; }
+    inline void setAudioHeight(qint64 x) noexcept { m_audioHeight = x; }
+    inline void setAudioWidth(qint64 x) noexcept
     {
-        m_audioWidth = int(x * m_audioWidthScale);
+        m_audioWidth = x * static_cast<qint64>(m_audioWidthScale);
         updateRatios();
     }
-    inline void setAudioLength(int x)
+    inline void setAudioLength(qint64 x) noexcept
     {
         m_audioLength = x;
         updateRatios();
     }
 
-    inline int axisHeight() { return m_axisHeight; }
-    inline int audioHeight() { return m_audioHeight; }
-    inline int audioWidth() { return m_audioWidth; }
-    inline int audioLength() { return m_audioLength; }
+    inline qint64 axisHeight() const noexcept { return m_axisHeight; }
+    inline qint64 audioHeight() const noexcept { return m_audioHeight; }
+    inline qint64 audioWidth() const noexcept { return m_audioWidth; }
+    inline qint64 audioLength() const noexcept { return m_audioLength; }
 
-    inline void setAudioWidthScale(int s)
+    inline void setAudioWidthScale(qint64 s) noexcept
     {
-        m_audioWidthScale = 1 + 0.01 * s;
+        m_audioWidthScale = 1.0 + 0.01 * static_cast<qreal>(s);
         setAudioWidth(m_audioWidth);
         updateRatios();
     }
 
-    template <typename T> T posFromMs(T t) noexcept {
-        return T(t * m_wl);
+    template <typename T> T posFromMs(T t) noexcept
+    {
+        return static_cast<T>(static_cast<qreal>(t) * m_wl);
     }
-    template <typename T> T posFromMs(T t, int audioWidth, int audioLength) noexcept {
-        return audioLength == 0 ? 0 : T(qint64(t) * qint64(audioWidth) / audioLength);
+
+    template <typename T> T posFromMs(T t, qint64 audioWidth, qint64 audioLength) noexcept
+    {
+        return audioLength == 0 ? 0 : qint64(t) * audioWidth / audioLength;
     }
 
-    template <typename T> T msFromPos(T x) noexcept {
-        return T(x * m_lw);
+    template <typename T> T msFromPos(T x) noexcept
+    {
+        return static_cast<T>(static_cast<qreal>(x) * m_lw);
     }
-    template <typename T> T msFromPos(T x, int audioLength, int audioWidth) noexcept {
-        return audioWidth == 0 ? 0 : int(qint64(x) * qint64(audioLength) / audioWidth);
+
+    template <typename T> T msFromPos(T x, qint64 audioLength, qint64 audioWidth) noexcept
+    {
+        return audioWidth == 0 ? 0 : qint64(x) * audioLength / audioWidth;
     }
 
 private:
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc
index d4b80f0ef7e9e3859390e167feab22160822d24c..339354ebd6086034ae2a9eb0a1fc46f7444a1353 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc
@@ -56,7 +56,7 @@ TimingScene::mousePressEvent(QGraphicsSceneMouseEvent *event) noexcept
 void
 TimingScene::handleMousePressEventLine(QGraphicsSceneMouseEvent *event, VVLib::ASSLine p[]) noexcept
 {
-    const qint64 time = timeFromPos(event->scenePos().x());
+    const qint64 time = timeFromPos(static_cast<qint64>(event->scenePos().x()));
     if (const auto &btn = event->button(); btn == Qt::LeftButton) {
         VVLib::ASSLineSetStartTime(p, static_cast<int64_t>(time));
     } else if (btn == Qt::RightButton) {
@@ -111,10 +111,10 @@ TimingScene::rebuildScene()
     }
     timingLines.clear();
 
-    QPixmap pixmap(QPixmap::fromImage(img));
+    const QPixmap pixmap(QPixmap::fromImage(img));
     backgroundImg = addPixmap(pixmap);
     backgroundImg->setZValue(Z_SPECTER);
-    backgroundImg->setPos(0, params->axisHeight());
+    backgroundImg->setPos(0.0, static_cast<qreal>(params->axisHeight()));
 
     params->setAudioHeight(pixmap.height());
     params->setAudioWidth(img.width());
@@ -124,16 +124,17 @@ TimingScene::rebuildScene()
     addItem(ax);
     ax->onParamsChanged();
     ax->setZValue(Z_AXIS);
-    ax->setPos(0, params->axisHeight());
+    ax->setPos(0.0, static_cast<qreal>(params->axisHeight()));
 
     cursor = new TimingCursor();
     addItem(cursor);
     cursor->onParamsChanged();
-    cursor->setPos(0, params->axisHeight());
+    cursor->setPos(0.0, static_cast<qreal>(params->axisHeight()));
 
     // Freeze the scene boundaries
-    QRectF sRect = sceneRect();
-    setSceneRect(QRectF(0, sRect.top(), params->audioWidth(), sRect.height()).normalized());
+    const QRectF sRect = sceneRect();
+    const QRectF rect(0.0, sRect.top(), static_cast<qreal>(params->audioWidth()), sRect.height());
+    setSceneRect(rect.normalized());
 
     if (auto assDocument = rootVivyDocument.getAssSubDocument()) {
         QVector<VVLib::ASSLine *> lines = assDocument->getLines();
@@ -178,10 +179,10 @@ TimingScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) noexcept
     QGraphicsScene::mouseMoveEvent(mouseEvent);
 }
 
-quint64
-TimingScene::timeFromPos(quint64 x) const noexcept
+qint64
+TimingScene::timeFromPos(qint64 x) const noexcept
 {
-    if (const quint64 w = quint64(width()); x <= 0 || w <= 0) {
+    if (const qint64 w = qint64(width()); x <= 0 || w <= 0) {
         qCritical() << "Try avoid possible divide by zero in the time from position";
         return 0;
     } else {
@@ -189,10 +190,10 @@ TimingScene::timeFromPos(quint64 x) const noexcept
     }
 }
 
-quint64
-TimingScene::posFromTime(quint64 t) const noexcept
+qint64
+TimingScene::posFromTime(qint64 t) const noexcept
 {
-    if (const quint64 w = quint64(width()); t <= 0 || w <= 0) {
+    if (const qint64 w = qint64(width()); t <= 0 || w <= 0) {
         qCritical() << "Try avoid possible divide by zero in the position from time";
         return 0;
     } else {
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh b/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh
index e9102fcab6312106b9ed45384f53a97fc34058b2..d631ad9d3c39e963ddc9b0a23f96002b1222c83f 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingScene.hh
@@ -59,8 +59,8 @@ private:
     void handleMousePressEventChar(QGraphicsSceneMouseEvent *, VVLib::ASSLine[]) noexcept;
 
 private:
-    quint64 timeFromPos(quint64 x) const noexcept;
-    quint64 posFromTime(quint64 t) const noexcept;
+    qint64 timeFromPos(qint64 x) const noexcept;
+    qint64 posFromTime(qint64 t) const noexcept;
 
 public slots:
     void updateScene(QImage, AudioContext::StreamPtr);
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc b/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc
index 2f0248efea2665321dd6626df663ea6ccbcd5f39..dff9ca336e68a8b5c8ce1051225454358edce7b3 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.cc
@@ -4,13 +4,14 @@
 
 using namespace Vivy;
 
-TimingSeparator::TimingSeparator(int time, int index, SeparatorStyle style_, TimingLine *parent)
+TimingSeparator::TimingSeparator(qint64 time, qint64 index, SeparatorStyle style_,
+                                 TimingLine *parent)
     : QGraphicsObject(parent)
     , style(style_)
     , sepIndex(index)
     , parentTimingLine(parent)
 {
-    setPos(getTimingParam()->posFromMs(time), 0);
+    setPos(static_cast<qreal>(getTimingParam()->posFromMs(time)), 0);
 
     setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemSendsGeometryChanges);
     setAcceptHoverEvents(true);
@@ -37,14 +38,14 @@ TimingSeparator::TimingSeparator(int time, int index, SeparatorStyle style_, Tim
 QRectF
 TimingSeparator::boundingRect() const
 {
-    return QRectF(-widthPaw, 0, 2 * widthPaw, getTimingParam()->audioHeight());
+    return QRectF(-widthPaw, 0, 2 * widthPaw, static_cast<int>(getTimingParam()->audioHeight()));
 }
 
 void
-TimingSeparator::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+TimingSeparator::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
 {
     painter->setPen(pen);
-    int height = getTimingParam()->audioHeight();
+    int height = static_cast<int>(getTimingParam()->audioHeight());
 
     int top    = 1 + pen.width() / 2;
     int bottom = height - 1 - pen.width() / 2;
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.hh b/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.hh
index ca3fa9559363d156cd9e0c0a4565e08af37eb7d4..c2942814d9887b258ab1c438b120c5bf9be45237 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingSeparator.hh
@@ -12,7 +12,7 @@ public:
     enum class SeparatorStyle { Start, Middle, End };
 
 public:
-    explicit TimingSeparator(int, int, SeparatorStyle, TimingLine *);
+    explicit TimingSeparator(qint64, qint64, SeparatorStyle, TimingLine *);
 
     QRectF boundingRect() const override;
     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
@@ -21,15 +21,15 @@ private:
     SeparatorStyle style;
     int widthPaw = 5;
     QPen pen;
-    int sepIndex;
+    qint64 sepIndex;
     TimingLine *parentTimingLine;
 
     bool inhibMove{ false };
 
 signals:
-    void positionChanged(int, qreal);
-    void enterPress(int);
-    void exitPress(int);
+    void positionChanged(qint64, qreal);
+    void enterPress(qint64);
+    void exitPress(qint64);
 
 protected:
     QVariant itemChange(GraphicsItemChange change, const QVariant &value) noexcept override;
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingSyl.cc b/src/UI/DocumentViews/AudioVisualizer/TimingSyl.cc
index 7d09bc9441d2773513405ccfd0a425d9122b3dcc..081021f0e321135cd9ec17820fad57fc8410c874 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingSyl.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingSyl.cc
@@ -4,23 +4,23 @@
 
 using namespace Vivy;
 
-TimingSyl::TimingSyl(VVLib::ASSSyllabe syl_[], int startTime, QGraphicsItem *parent)
+TimingSyl::TimingSyl(VVLib::ASSSyllabe syl_[], qint64 startTime, QGraphicsItem *parent)
     : QGraphicsObject(parent)
     , syl(syl_)
 {
     setZValue(Z_LINE_SYL_TEXT);
-    setPos(getTimingParam()->posFromMs(startTime), 0);
+    setPos(static_cast<qreal>(getTimingParam()->posFromMs(startTime)), 0.0);
 }
 
 QRectF
 TimingSyl::boundingRect() const
 {
-    const auto dur = VVLib::ASSSyllabeGetDuration(syl);
-    return QRectF(0, 0, dur, getTimingParam()->audioHeight());
+    const qreal dur = static_cast<qreal>(VVLib::ASSSyllabeGetDuration(syl));
+    return QRectF(0, 0, dur, static_cast<qreal>(getTimingParam()->audioHeight()));
 }
 
 void
-TimingSyl::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+TimingSyl::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
 {
     const auto str = VVLib::ASSSyllabeGetContent(syl);
     painter->drawText(boundingRect(), Qt::AlignCenter,
@@ -28,7 +28,7 @@ TimingSyl::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWid
 }
 
 void
-TimingSyl::setLen(quint64 len)
+TimingSyl::setLen(qint64 len)
 {
     prepareGeometryChange();
     VVLib::ASSSyllabeSetDuration(syl, len);
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingSyl.hh b/src/UI/DocumentViews/AudioVisualizer/TimingSyl.hh
index 84c77996ec5c88b63908d4270dff682e2d53c116..3a0d4d857495becec8ba4114f0ade92c400841b6 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingSyl.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingSyl.hh
@@ -8,7 +8,7 @@ namespace Vivy
 class TimingSyl final : public QGraphicsObject {
     Q_OBJECT
 public:
-    explicit TimingSyl(VVLib::ASSSyllabe[], int, QGraphicsItem *parent = nullptr);
+    explicit TimingSyl(VVLib::ASSSyllabe[], qint64, QGraphicsItem *parent = nullptr);
 
     QRectF boundingRect() const override;
     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
@@ -17,7 +17,7 @@ private:
     VVLib::ASSSyllabe *const syl;
 
 public:
-    void setLen(quint64 len);
+    void setLen(qint64 len);
 };
 
 }
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingView.cc b/src/UI/DocumentViews/AudioVisualizer/TimingView.cc
index 953b5c4211ffeb6085156995e728202893721400..b4f69fe7d82e606231a5dc15e3e3a70b39948fb8 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingView.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingView.cc
@@ -3,7 +3,7 @@
 
 using namespace Vivy;
 
-TimingView::TimingView(QGraphicsScene *scene, QImage img, AudioContext::StreamPtr stream,
+TimingView::TimingView(QGraphicsScene *scene, QImage, AudioContext::StreamPtr stream,
                        QWidget *parent) noexcept
     : QGraphicsView(scene, parent)
     , audioStream(stream)
@@ -31,7 +31,7 @@ TimingView::wheelEvent(QWheelEvent *event) noexcept
 }
 
 void
-TimingView::moveScrollBarToBottom(int, int max) noexcept
+TimingView::moveScrollBarToBottom(qint64, qint64 max) noexcept
 {
-    verticalScrollBar()->setValue(max);
+    verticalScrollBar()->setValue(static_cast<int>(max));
 }
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingView.hh b/src/UI/DocumentViews/AudioVisualizer/TimingView.hh
index 1651777348ab0284ad8024920626ab29019fa7c9..6b5aea3da819269e18e1b597053c9c2f725bbc48 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingView.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingView.hh
@@ -14,7 +14,7 @@ namespace Vivy
 class TimingView final : public QGraphicsView {
     Q_OBJECT
 
-    static inline constexpr int wheelAngleToScrollRatio = 5;
+    static inline constexpr qint64 wheelAngleToScrollRatio = 5;
     TimingScene *currentScene{ nullptr };
     AudioContext::StreamPtr audioStream;
 
@@ -30,6 +30,6 @@ public:
     void wheelEvent(QWheelEvent *) noexcept override;
 
 public slots:
-    void moveScrollBarToBottom(int, int) noexcept;
+    void moveScrollBarToBottom(qint64, qint64) noexcept;
 };
 }