diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -114,6 +114,8 @@ add_subdirectory(bin) add_subdirectory(qml) add_subdirectory(profiles) +add_subdirectory(mixer) + if (Qt5WebKitWidgets_FOUND) add_subdirectory(qt-oauth-lib) diff --git a/src/core.h b/src/core.h --- a/src/core.h +++ b/src/core.h @@ -21,6 +21,11 @@ class MonitorManager; class BinController; class Bin; +class Audiomixer +{ +public: + Audiomixer;() {} +}; class LibraryWidget; class ProducerQueue; class MltConnection; @@ -82,6 +87,8 @@ ProducerQueue *producerQueue(); /** @brief Returns a pointer to the library. */ LibraryWidget *library(); + + Audiomixer *audiomixer(); /** @brief Returns a pointer to MLT's repository */ std::unique_ptr& getMltRepository(); @@ -102,6 +109,7 @@ BinController *m_binController; ProducerQueue *m_producerQueue; Bin *m_binWidget; + Audiomixer *m_mixerWidget; LibraryWidget *m_library; std::unique_ptr m_mltConnection; diff --git a/src/core.cpp b/src/core.cpp --- a/src/core.cpp +++ b/src/core.cpp @@ -19,6 +19,7 @@ #include "mltcontroller/producerqueue.h" #include "bin/bin.h" #include "library/librarywidget.h" +#include "mixer/audiomixer.h" #include "kdenlive_debug.h" #include @@ -41,7 +42,9 @@ , m_binController(nullptr) , m_producerQueue(nullptr) , m_binWidget(nullptr) + , m_library(nullptr) + { connect(qApp, &QCoreApplication::aboutToQuit, this, &QObject::deleteLater); } @@ -51,8 +54,10 @@ m_monitorManager->stopActiveMonitor(); delete m_producerQueue; delete m_binWidget; + delete m_projectManager; delete m_binController; + delete m_mainWindow; delete m_monitorManager; m_self = nullptr; } @@ -129,6 +134,7 @@ m_projectManager = new ProjectManager(this); m_binWidget = new Bin(); + m_mixerWidget = new Audiomixer(); m_binController = new BinController(); m_library = new LibraryWidget(m_projectManager); connect(m_library, SIGNAL(addProjectClips(QList)), m_binWidget, SLOT(droppedUrls(QList))); @@ -139,6 +145,17 @@ connect(m_binController, &BinController::abortAudioThumbs, m_binWidget, &Bin::abortAudioThumbs); connect(m_binController, SIGNAL(loadThumb(QString, QImage, bool)), m_binWidget, SLOT(slotThumbnailReady(QString, QImage, bool))); m_monitorManager = new MonitorManager(this); + + + + + + + + + + + // Producer queue, creating MLT::Producers on request m_producerQueue = new ProducerQueue(m_binController); connect(m_producerQueue, SIGNAL(gotFileProperties(requestClipInfo, ClipController *)), m_binWidget, SLOT(slotProducerReady(requestClipInfo, ClipController *)), Qt::DirectConnection); @@ -178,6 +195,11 @@ return m_binController; } +Audiomixer *Core::audiomixer() +{ + return m_mixerWidget; +} + Bin *Core::bin() { return m_binWidget; @@ -228,3 +250,4 @@ { return m_mltConnection->getMltRepository(); } + diff --git a/src/mainwindow.h b/src/mainwindow.h --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -40,6 +40,7 @@ #include "effectslist/effectslist.h" #include "gentime.h" #include "bin/bin.h" +#include "mixer/audiomixer.h" #include "definitions.h" #include "statusbarmessagelabel.h" #include "dvdwizard/dvdwizard.h" @@ -54,10 +55,12 @@ class RecMonitor; class RenderWidget; class Render; +class mixerDock; class Transition; class KIconLoader; + class /*KDENLIVECORE_EXPORT*/ MainWindow : public KXmlGuiWindow { Q_OBJECT @@ -146,10 +149,12 @@ QDockWidget *m_projectBinDock; QDockWidget *m_effectListDock; EffectsListView *m_effectList; + QDockWidget *m_transitionListDock; EffectsListView *m_transitionList; QDockWidget *m_effectStackDock; + QDockWidget *m_mixerDock; QDockWidget *m_clipMonitorDock; Monitor *m_clipMonitor; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -23,6 +23,7 @@ #include "bin/projectclip.h" #include "bin/generators/generators.h" #include "library/librarywidget.h" +#include "mixer/audiomixer.h" #include "monitor/scopes/audiographspectrum.h" #include "mltcontroller/clipcontroller.h" #include "kdenlivesettings.h" @@ -335,6 +336,11 @@ m_effectList = new EffectsListView(); m_effectListDock = addDock(i18n("Effects"), QStringLiteral("effect_list"), m_effectList); + m_mixerDock = addDock(i18n("Project Mixer"), QStringLiteral("project_mixer"), + pCore->audiomixer()); + + + m_transitionList = new EffectsListView(EffectsListView::TransitionMode); m_transitionListDock = addDock(i18n("Transitions"), QStringLiteral("transition_list"), m_transitionList);