]> git.sesse.net Git - kdenlive/blobdiff - testingArea/audioCorrelationInfo.cpp
Audio alignment works.
[kdenlive] / testingArea / audioCorrelationInfo.cpp
diff --git a/testingArea/audioCorrelationInfo.cpp b/testingArea/audioCorrelationInfo.cpp
new file mode 100644 (file)
index 0000000..1d33aee
--- /dev/null
@@ -0,0 +1,83 @@
+#include "audioCorrelationInfo.h"
+#include <iostream>
+
+AudioCorrelationInfo::AudioCorrelationInfo(int mainSize, int subSize) :
+    m_mainSize(mainSize),
+    m_subSize(subSize),
+    m_max(-1)
+{
+    m_correlationVector = new int64_t[m_mainSize+m_subSize+1];
+}
+
+AudioCorrelationInfo::~AudioCorrelationInfo()
+{
+    delete m_correlationVector;
+}
+
+int AudioCorrelationInfo::size() const
+{
+    return m_mainSize+m_subSize+1;
+}
+
+void AudioCorrelationInfo::setMax(int64_t max)
+{
+    m_max = max;
+}
+
+int64_t AudioCorrelationInfo::max() const
+{
+    Q_ASSERT(m_max > 0);
+    if (m_max <= 0) {
+        int width = size();
+        int64_t max = 0;
+        for (int i = 0; i < width; i++) {
+            if (m_correlationVector[i] > max) {
+                max = m_correlationVector[i];
+            }
+        }
+        Q_ASSERT(max > 0);
+        return max;
+    }
+    return m_max;
+}
+
+int AudioCorrelationInfo::maxIndex() const
+{
+    int64_t max = 0;
+    int index = 0;
+    int width = size();
+
+    for (int i = 0; i < width; i++) {
+        if (m_correlationVector[i] > max) {
+            max = m_correlationVector[i];
+            index = i;
+        }
+    }
+
+    return index;
+}
+
+int64_t* AudioCorrelationInfo::correlationVector()
+{
+    return m_correlationVector;
+}
+
+QImage AudioCorrelationInfo::toImage(int height) const
+{
+    int width = size();
+    int64_t maxVal = max();
+
+    QImage img(width, height, QImage::Format_ARGB32);
+    img.fill(qRgb(255,255,255));
+
+    int val;
+
+    for (int x = 0; x < width; x++) {
+        val = m_correlationVector[x]/double(maxVal)*img.height();
+        for (int y = img.height()-1; y > img.height() - val - 1; y--) {
+            img.setPixel(x, y, qRgb(50, 50, 50));
+        }
+    }
+
+    return img;
+}