]> git.sesse.net Git - kdenlive/commitdiff
Audio Scope:
authorSimon A. Eugster <simon.eu@gmail.com>
Tue, 14 Dec 2010 12:59:29 +0000 (12:59 +0000)
committerSimon A. Eugster <simon.eu@gmail.com>
Tue, 14 Dec 2010 12:59:29 +0000 (12:59 +0000)
* Fixed crash when using too high max frequency
* Fixed glitch changing the maximum frequency to 96 kHz when zooming in to 1 kHz too quickly (unsigned overflow)
* Fixed frequency labeled twice as high as it actually was

svn path=/trunk/kdenlive/; revision=5175

src/audioscopes/audiospectrum.cpp
src/audioscopes/audiospectrum.h
src/audioscopes/spectrogram.cpp

index a92f6f5d5244577c9d71ed05beec824f11bd89e7..e0ce51de46dc45fa9cd724517d05a515520c6d6a 100644 (file)
@@ -177,8 +177,8 @@ QImage AudioSpectrum::renderAudioScope(uint, const QVector<int16_t> audioFrame,
         m_lastFFT = QVector<float>(fftWindow/2);
         memcpy(m_lastFFT.data(), &(freqSpectrum[0]), fftWindow/2 * sizeof(float));
 
-        uint right = ((float) m_freqMax)/(m_freq) * (m_lastFFT.size() - 1);
-        dbMap = interpolatePeakPreserving(m_lastFFT, m_innerScopeRect.width(), 0, right, -120);
+        uint right = ((float) m_freqMax)/(m_freq/2) * (m_lastFFT.size() - 1);
+        dbMap = interpolatePeakPreserving(m_lastFFT, m_innerScopeRect.width(), 0, right, -180);
         m_lastFFTLock.release();
 
 
@@ -269,8 +269,8 @@ QImage AudioSpectrum::renderHUD(uint)
     int x = 0;
     const int rightBorder = leftDist + m_innerScopeRect.width()-1;
     y = topDist + m_innerScopeRect.height() + textDistY;
-    for (uint hz = 0; x <= rightBorder; hz += hzDiff) {
-        davinci.setPen(AbstractScopeWidget::penLight);
+    for (int hz = 0; x <= rightBorder; hz += hzDiff) {
+        davinci.setPen(AbstractScopeWidget::penLighter);
         x = leftDist + m_innerScopeRect.width() * ((float)hz)/m_freqMax;
 
         if (x <= rightBorder) {
@@ -310,7 +310,7 @@ QImage AudioSpectrum::renderHUD(uint)
         // We need to test whether the mouse is inside the widget
         // because the position could already have changed in the meantime (-> crash)
         if (m_lastFFT.size() > 0 && mouseX >= 0 && mouseX < m_innerScopeRect.width()) {
-            uint right = ((float) m_freqMax)/(m_freq) * (m_lastFFT.size() - 1);
+            uint right = ((float) m_freqMax)/(m_freq/2) * (m_lastFFT.size() - 1);
             QVector<float> dbMap = AudioSpectrum::interpolatePeakPreserving(m_lastFFT, m_innerScopeRect.width(), 0, right, -120);
 
             db = dbMap[mouseX];
@@ -500,8 +500,10 @@ const QVector<float> AudioSpectrum::interpolatePeakPreserving(const QVector<floa
 
 
         // Use linear interpolation in order to get smoother display
-        if (i == 0 || i == targetSize-1) {
-            // ... except if we are at the left or right border of the display or the spectrum
+        if (xi == 0 || xi == in.size()-1) {
+            // ... except if we are at the left or right border of the input sigal.
+            // Special case here since we consider previous and future values as well for
+            // the actual interpolation (not possible here).
             out[i] = in[xi];
         } else {
             if (in[xi] > in[xi+1]
index 057dcdeed531cebaca19158de404a599834ec6ba..670160c8d5a7d45a63cc27502665dfc5e372c8d9 100644 (file)
@@ -75,7 +75,7 @@ private:
 
     /** Maximum frequency (limited by the sampling rate if determined automatically).
         Stored for the painters. */
-    uint m_freqMax;
+    int m_freqMax;
     /** The user has chosen a custom frequency. */
     bool m_customFreq;
 
index 5a81a41948fd2592b21997968fd9097ea55b5a8a..5bf9a86b9182422057681e9a7b2b3fb9493d22be 100644 (file)
@@ -376,6 +376,7 @@ QImage Spectrogram::renderAudioScope(uint, const QVector<int16_t> audioFrame, co
 
                 windowSize = (*it).size();
 
+                // TODO use function
                 for (uint i = 0; i < w; i++) {
 
                     // i:   Pixel coordinate