From c441b29286d1a414ef7b42e6d6a056576d19fb4a Mon Sep 17 00:00:00 2001 From: "Simon A. Eugster" Date: Tue, 7 Dec 2010 14:01:41 +0000 Subject: [PATCH] Preparing Spectrogram widget svn path=/trunk/kdenlive/; revision=5144 --- src/CMakeLists.txt | 2 ++ src/audioscopes/spectrogram.cpp | 44 ++++++++++++++++++++++++++++++++ src/audioscopes/spectrogram.h | 45 +++++++++++++++++++++++++++++++++ src/mainwindow.cpp | 13 +++++++++- src/mainwindow.h | 4 +++ src/widgets/spectrogram_ui.ui | 19 ++++++++++++++ 6 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 src/audioscopes/spectrogram.cpp create mode 100644 src/audioscopes/spectrogram.h create mode 100644 src/widgets/spectrogram_ui.ui diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 162e5e57..e5ec9181 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -117,6 +117,7 @@ kde4_add_ui_files(kdenlive_UI widgets/monitorscenecontrolwidget_ui.ui widgets/cornerswidget_ui.ui widgets/audiospectrum_ui.ui + widgets/spectrogram_ui.ui ) set(kdenlive_SRCS @@ -222,6 +223,7 @@ set(kdenlive_SRCS abstractscopewidget.cpp audioscopes/abstractaudioscopewidget.cpp audioscopes/audiospectrum.cpp + audioscopes/spectrogram.cpp audioscopes/ffttools.cpp rebuildgroupcommand.cpp colorscopes/abstractgfxscopewidget.cpp diff --git a/src/audioscopes/spectrogram.cpp b/src/audioscopes/spectrogram.cpp new file mode 100644 index 00000000..cd1958c7 --- /dev/null +++ b/src/audioscopes/spectrogram.cpp @@ -0,0 +1,44 @@ +/*************************************************************************** + * Copyright (C) 2010 by Simon Andreas Eugster (simon.eu@gmail.com) * + * This file is part of kdenlive. See www.kdenlive.org. * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + ***************************************************************************/ + +#include "spectrogram.h" + +Spectrogram::Spectrogram(QWidget *parent) : + AbstractAudioScopeWidget(false, parent) +{ + ui = new Ui::Spectrogram_UI; + ui->setupUi(this); + AbstractScopeWidget::init(); +} + +Spectrogram::~Spectrogram() +{ + writeConfig(); +} + +void Spectrogram::readConfig() +{ + AbstractScopeWidget::readConfig(); +} +void Spectrogram::writeConfig() {} + +QString Spectrogram::widgetName() const { return QString("Spectrogram"); } + +QRect Spectrogram::scopeRect() { return AbstractScopeWidget::rect(); } + +QImage Spectrogram::renderHUD(uint) { return QImage(); } +QImage Spectrogram::renderAudioScope(uint accelerationFactor, const QVector audioFrame, const int freq, const int num_channels, const int num_samples) { + return QImage(); +} +QImage Spectrogram::renderBackground(uint) { return QImage(); } + +bool Spectrogram::isHUDDependingOnInput() const { return false; } +bool Spectrogram::isScopeDependingOnInput() const { return false; } +bool Spectrogram::isBackgroundDependingOnInput() const { return false; } diff --git a/src/audioscopes/spectrogram.h b/src/audioscopes/spectrogram.h new file mode 100644 index 00000000..fbcb60f5 --- /dev/null +++ b/src/audioscopes/spectrogram.h @@ -0,0 +1,45 @@ +/*************************************************************************** + * Copyright (C) 2010 by Simon Andreas Eugster (simon.eu@gmail.com) * + * This file is part of kdenlive. See www.kdenlive.org. * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + ***************************************************************************/ + +#ifndef SPECTROGRAM_H +#define SPECTROGRAM_H + +#include + +#include "abstractaudioscopewidget.h" +#include "ui_spectrogram_ui.h" + +class Spectrogram_UI; +class Spectrogram : public AbstractAudioScopeWidget { + Q_OBJECT + +public: + Spectrogram(QWidget *parent = 0); + ~Spectrogram(); + + QString widgetName() const; + +protected: + ///// Implemented methods ///// + QRect scopeRect(); + QImage renderHUD(uint accelerationFactor); + QImage renderAudioScope(uint accelerationFactor, const QVector audioFrame, const int freq, const int num_channels, const int num_samples); + QImage renderBackground(uint accelerationFactor); + bool isHUDDependingOnInput() const; + bool isScopeDependingOnInput() const; + bool isBackgroundDependingOnInput() const; + virtual void readConfig(); + void writeConfig(); + +private: + Ui::Spectrogram_UI *ui; +}; + +#endif // SPECTROGRAM_H diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 457fc9f6..517acdc3 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -58,6 +58,7 @@ #include "colorscopes/rgbparade.h" #include "colorscopes/histogram.h" #include "audiospectrum.h" +#include "spectrogram.h" #include #include @@ -292,6 +293,12 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & m_audioSpectrumDock->setWidget(m_audioSpectrum); addDockWidget(Qt::TopDockWidgetArea, m_audioSpectrumDock); + m_spectrogram = new Spectrogram(); + m_spectrogramDock = new QDockWidget(i18n("Spectrogram"), this); + m_spectrogramDock->setObjectName(m_spectrogram->widgetName()); + m_spectrogramDock->setWidget(m_spectrogram); + addDockWidget(Qt::TopDockWidgetArea, m_spectrogramDock); + // Connect the audio signal to the audio scope slots bool b = true; if (m_projectMonitor) { @@ -300,6 +307,8 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & m_audioSpectrum, SLOT(slotReceiveAudio(QVector, int, int, int))); b &= connect(m_projectMonitor->render, SIGNAL(audioSamplesSignal(const QVector&, const int&, const int&, const int&)), m_audiosignal, SLOT(slotReceiveAudio(const QVector&, const int&, const int&, const int&))); + b &= connect(m_projectMonitor->render, SIGNAL(audioSamplesSignal(QVector,int,int,int)), + m_spectrogram, SLOT(slotReceiveAudio(QVector,int,int,int))); } if (m_clipMonitor) { qDebug() << "clip monitor connected"; @@ -307,8 +316,10 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, const QString & m_audioSpectrum, SLOT(slotReceiveAudio(QVector, int, int, int))); b &= connect(m_clipMonitor->render, SIGNAL(audioSamplesSignal(const QVector&, int, int, int)), m_audiosignal, SLOT(slotReceiveAudio(const QVector&, int, int, int))); + b &= connect(m_clipMonitor->render, SIGNAL(audioSamplesSignal(QVector,int,int,int)), + m_spectrogram, SLOT(slotReceiveAudio(QVector,int,int,int))); } - // Ensure connection was set up correctly + // Ensure connections were set up correctly Q_ASSERT(b); m_undoViewDock = new QDockWidget(i18n("Undo History"), this); diff --git a/src/mainwindow.h b/src/mainwindow.h index 5b9c0bf1..4101558f 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -70,6 +70,7 @@ class RGBParade; class KActionCollection; class AudioSignal; class AudioSpectrum; +class Spectrogram; class MainWindow : public KXmlGuiWindow { @@ -181,6 +182,9 @@ private: QDockWidget *m_audioSpectrumDock; AudioSpectrum *m_audioSpectrum; + QDockWidget *m_spectrogramDock; + Spectrogram *m_spectrogram; + QDockWidget *m_undoViewDock; QUndoView *m_undoView; QUndoGroup *m_commandStack; diff --git a/src/widgets/spectrogram_ui.ui b/src/widgets/spectrogram_ui.ui new file mode 100644 index 00000000..4ff9d131 --- /dev/null +++ b/src/widgets/spectrogram_ui.ui @@ -0,0 +1,19 @@ + + + Spectrogram_UI + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + -- 2.39.2