]> git.sesse.net Git - kdenlive/commitdiff
Audio scope: Signals and slots not working
authorSimon A. Eugster <simon.eu@gmail.com>
Wed, 24 Nov 2010 08:26:33 +0000 (08:26 +0000)
committerSimon A. Eugster <simon.eu@gmail.com>
Wed, 24 Nov 2010 08:26:33 +0000 (08:26 +0000)
svn path=/trunk/kdenlive/; revision=5116

src/audioscopes/abstractaudioscopewidget.cpp
src/audioscopes/abstractaudioscopewidget.h
src/audioscopes/audiospectrum.cpp
src/audioscopes/audiospectrum.h
src/mainwindow.cpp
src/renderer.cpp
src/renderer.h

index ae9906618cf390190818d802905ea4da258e083e..3e36b3679ccb61be866a5390932d7c87be715390 100644 (file)
@@ -433,7 +433,7 @@ void AbstractAudioScopeWidget::slotRenderZoneUpdated(QImage frame)
     slotRenderZoneUpdated();
 }
 
-void AbstractAudioScopeWidget::slotReceiveAudio(const QVector<int16_t> sampleData, const int freq, const int num_channels, const int num_samples)
+void AbstractAudioScopeWidget::slotReceiveAudio(const QVector<int16_t>& sampleData, int freq, int num_channels, int num_samples)
 {
     qDebug() << "Received audio. Size is " << (int) sampleData.size() << ".";
     if (sampleData.size() > 0) {
@@ -442,6 +442,11 @@ void AbstractAudioScopeWidget::slotReceiveAudio(const QVector<int16_t> sampleDat
     //TODO
 }
 
+void AbstractAudioScopeWidget::slotReceiveAudioTemp(const QByteArray arr)
+{
+    qDebug() << "Audio signal received";
+}
+
 void AbstractAudioScopeWidget::slotResetRealtimeFactor(bool realtimeChecked)
 {
     if (!realtimeChecked) {
index fb136cabe2f1d4127ec05cf9f26a79f36515aae9..ad4f9c1f82d7eca7c08146c46d74bcddf5bd2e24 100644 (file)
@@ -220,7 +220,8 @@ private slots:
       on whether it is currently visible and whether a calculation thread is already running. */
     void slotRenderZoneUpdated();
     void slotRenderZoneUpdated(QImage);//OLD
-    void slotReceiveAudio(const QVector<int16_t> sampleData, const int freq, const int num_channels, const int num_samples); // NEW, TODO comment
+    void slotReceiveAudio(const QVector<int16_t>& sampleData, int freq, int num_channels, int num_samples); // NEW, TODO comment
+    void slotReceiveAudioTemp(const QByteArray arr);
     /** The following slots are called when rendering of a component has finished. They e.g. update
       the widget and decide whether to immediately restart the calculation thread. */
     void slotHUDRenderingFinished(uint mseconds, uint accelerationFactor);
index 0a41cabe3638403fba65deee3ecb1b5bfdb9b68c..08d6e6afb5184e952541892ee841985651fababf 100644 (file)
@@ -5,17 +5,29 @@ AudioSpectrum::AudioSpectrum(Monitor *projMonitor, Monitor *clipMonitor, QWidget
         AbstractAudioScopeWidget(projMonitor, clipMonitor, true, parent)
 {
     init();
+    m_cfg = kiss_fftr_alloc(512, 0,0,0);
+}
+AudioSpectrum::~AudioSpectrum()
+{
+    free(m_cfg);
 }
 
 QString AudioSpectrum::widgetName() const { return QString("audiospectrum"); }
 
 bool AudioSpectrum::isBackgroundDependingOnInput() const { return false; }
-bool AudioSpectrum::isScopeDependingOnInput() const { return false; }
+bool AudioSpectrum::isScopeDependingOnInput() const { return true; }
 bool AudioSpectrum::isHUDDependingOnInput() const { return false; }
 
 QImage AudioSpectrum::renderBackground(uint) { return QImage(); }
 QImage AudioSpectrum::renderScope(uint accelerationFactor, const QVector<int16_t> audioFrame, const int freq, const int num_channels, const int num_samples)
 {
+    float data[512];
+    kiss_fft_cpx freqData[512];
+    for (int i = 0; i < 512; i++) {
+        data[i] = (float) audioFrame.data()[i];
+    }
+    kiss_fftr(m_cfg, data, freqData);
+    qDebug() << freqData[0].r << " " << freqData[1].r << " " << freqData[2].r;
     return QImage();
 }
 QImage AudioSpectrum::renderHUD(uint) { return QImage(); }
index a70ab0ca3902b568d607f30ff62889ad9870a0e3..c538a7783c48f7879c04a2f1c7c54c3ec3f05b57 100644 (file)
@@ -5,6 +5,7 @@
 
 #include "abstractaudioscopewidget.h"
 #include "ui_audiospectrum_ui.h"
+#include "tools/kiss_fftr.h"
 
 class AudioSpectrum_UI;
 
@@ -13,6 +14,7 @@ class AudioSpectrum : public AbstractAudioScopeWidget {
 
 public:
     AudioSpectrum(Monitor *projMonitor, Monitor *clipMonitor, QWidget *parent = 0);
+    ~AudioSpectrum();
 
     // Implemented virtual methods
     QString widgetName() const;
@@ -30,6 +32,7 @@ protected:
 
 private:
     Ui::AudioSpectrum_UI *ui;
+    kiss_fftr_cfg m_cfg;
 };
 
 #endif // AUDIOSPECTRUM_H
index 84a325a2915aa461091b816093d9ff4fdb259e6b..822097c91b2544ae6d8a06b3e49e28276718a802 100644 (file)
@@ -284,22 +284,26 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString &
     if (m_clipMonitor) {
         connect(m_clipMonitor->render, SIGNAL(showAudioSignal(const QByteArray&)), m_audiosignal, SLOT(showAudio(const QByteArray&)));
     }
-    //connect(m_histogramDock, SIGNAL(visibilityChanged(bool)), this, SLOT(slotUpdateScopeFrameRequest()));
-    //connect(m_histogram, SIGNAL(requestAutoRefresh(bool)), this, SLOT(slotUpdateScopeFrameRequest()));
 
     m_audioSpectrum = new AudioSpectrum(m_projectMonitor, m_clipMonitor);
     m_audioSpectrumDock = new QDockWidget(i18n("AudioSpectrum"), this);
     m_audioSpectrumDock->setObjectName(m_audioSpectrum->widgetName());
     m_audioSpectrumDock->setWidget(m_audioSpectrum);
     addDockWidget(Qt::TopDockWidgetArea, m_audioSpectrumDock);
+    bool b = true;
     if (m_projectMonitor) {
-        connect(m_projectMonitor->render, SIGNAL(audioSamplesSignal(QVector<int16_t>,int,int,int)),
-                m_audioSpectrum, SLOT(slotReceiveAudio(QVector<int16_t>,int,int,int)));
+        qDebug() << "project monitor connected";
+        b &= connect(m_projectMonitor->render, SIGNAL(audioSamplesSignal(const QVector<int16_t>&,const int&,const int&, const int&)),
+                m_audioSpectrum, SLOT(slotReceiveAudio(const QVector<int16_t>&,const int&,const int&,const int&)));
+        b &= connect(m_projectMonitor->render, SIGNAL(showAudioSignal(const QByteArray&)),
+                     m_audioSpectrum, SLOT(slotReceiveAudioTemp(const QByteArray&)));
     }
     if (m_clipMonitor) {
-        connect(m_clipMonitor->render, SIGNAL(audioSamplesSignal(QVector<int16_t>,int,int,int)),
-                m_audioSpectrum, SLOT(slotReceiveAudio(QVector<int16_t>,int,int,int)));
+        qDebug() << "clip monitor connected";
+        b &= connect(m_clipMonitor->render, SIGNAL(audioSamplesSignal(const QVector<int16_t>&,int,int,int)),
+                m_audioSpectrum, SLOT(slotReceiveAudio(const QVector<int16_t>&,int,int,int)));
     }
+    Q_ASSERT(b);
 
     m_undoViewDock = new QDockWidget(i18n("Undo History"), this);
     m_undoViewDock->setObjectName("undo_history");
index 59c87c9e275aa27e6194e04183379cd23f9f0ae0..d075f765a9784a9cb7a8aa6db11654a51d4a03d9 100644 (file)
@@ -1477,8 +1477,6 @@ void Render::showAudio(Mlt::Frame& frame)
     QVector<int16_t> sampleVector(samples);
     memcpy(sampleVector.data(), data, samples*sizeof(int16_t));
     qDebug() << samples << " samples. Freq=" << freq << ", channels=" << num_channels;
-    qDebug() << sizeof(char) << " (c) " << sizeof(int16_t) << " (int16_t)";
-    qDebug() << sampleVector.at(0);
 
     if (!data)
         return;
@@ -1497,9 +1495,11 @@ void Render::showAudio(Mlt::Frame& frame)
     qDebug() << channels.size() <<  ": size.";
     if (samples > 0) {
         emit showAudioSignal(channels);
+        qDebug() << "Emitting audioSamplesSignal with " << samples << " samples.";
         emit audioSamplesSignal(sampleVector, freq, num_channels, samples);
     } else {
         emit showAudioSignal(QByteArray());
+        qDebug() << "Not emitting audioSamplesSignal.";
     }
 }
 
index ddd10a447078512b0481ad11b544f2f927504bcb..e676a0c7213ae7dcec58c21f8dd6783242fbabaf 100644 (file)
@@ -354,7 +354,7 @@ signals:
     void showAudioSignal(const QByteArray);
     /** @brief The renderer refreshed the current frame, but no seeking was done. */
     void frameUpdated(QImage);
-    void audioSamplesSignal(const QVector<int16_t> data, const int freq, const int num_channels, const int num_samples);
+    void audioSamplesSignal(const QVector<int16_t>&, int freq, int num_channels, int num_samples);
 
 public slots: