summaryrefslogtreecommitdiffstats
path: root/src/mixer
diff options
context:
space:
mode:
authorRJ Ryan <rryan@mixxx.org>2016-01-15 10:10:21 -0800
committerRJ Ryan <rryan@mixxx.org>2016-01-15 11:03:29 -0800
commit7c6987648c649b632c05fae6385c8a6d377875f5 (patch)
tree73cc11383fbc992344305010ba72d7a31c1af47e /src/mixer
parent0bb570394a0cec51861600145ab5f3077865e2cd (diff)
Move menu logic and VC/Passthrough/Mic checking out of MixxxMainWindow.
Drops 1000+ lines from mixxx.h/mixxx.cpp -- now they're "only" 1400 lines!
Diffstat (limited to 'src/mixer')
-rw-r--r--src/mixer/basetrackplayer.cpp39
-rw-r--r--src/mixer/basetrackplayer.h13
-rw-r--r--src/mixer/deck.cpp2
-rw-r--r--src/mixer/deck.h8
-rw-r--r--src/mixer/microphone.cpp17
-rw-r--r--src/mixer/microphone.h11
-rw-r--r--src/mixer/playermanager.cpp7
-rw-r--r--src/mixer/playermanager.h12
8 files changed, 102 insertions, 7 deletions
diff --git a/src/mixer/basetrackplayer.cpp b/src/mixer/basetrackplayer.cpp
index 03ecc8bd5e..a28c60ec7a 100644
--- a/src/mixer/basetrackplayer.cpp
+++ b/src/mixer/basetrackplayer.cpp
@@ -14,6 +14,7 @@
#include "analyzer/analyzerqueue.h"
#include "util/sandbox.h"
#include "effects/effectsmanager.h"
+#include "vinylcontrol/defs_vinylcontrol.h"
BaseTrackPlayer::BaseTrackPlayer(QObject* pParent, const QString& group)
: BasePlayer(pParent, group) {
@@ -24,7 +25,7 @@ BaseTrackPlayerImpl::BaseTrackPlayerImpl(QObject* pParent,
EngineMaster* pMixingEngine,
EffectsManager* pEffectsManager,
EngineChannel::ChannelOrientation defaultOrientation,
- QString group,
+ const QString& group,
bool defaultMaster,
bool defaultHeadphones)
: BaseTrackPlayer(pParent, group),
@@ -44,6 +45,15 @@ BaseTrackPlayerImpl::BaseTrackPlayerImpl(QObject* pParent,
m_pChannel = new EngineDeck(channelGroup, pConfig, pMixingEngine,
pEffectsManager, defaultOrientation);
+ m_pInputEnabled.reset(new ControlObjectSlave(group, "input_enabled", this));
+ m_pPassthroughEnabled.reset(new ControlObjectSlave(group, "passthrough", this));
+ m_pPassthroughEnabled->connectValueChanged(SLOT(slotPassthroughEnabled(double)));
+#ifdef __VINYLCONTROL__
+ m_pVinylControlEnabled.reset(new ControlObjectSlave(group, "vinylcontrol_enabled", this));
+ m_pVinylControlEnabled->connectValueChanged(SLOT(slotVinylControlEnabled(double)));
+ m_pVinylControlStatus.reset(new ControlObjectSlave(group, "vinylcontrol_status", this));
+#endif
+
EngineBuffer* pEngineBuffer = m_pChannel->getEngineBuffer();
pMixingEngine->addChannel(m_pChannel);
@@ -335,3 +345,30 @@ void BaseTrackPlayerImpl::setupEqControls() {
m_pSpeed = new ControlObjectSlave(group, "rate", this);
m_pPitchAdjust = new ControlObjectSlave(group, "pitch_adjust", this);
}
+
+void BaseTrackPlayerImpl::slotPassthroughEnabled(double v) {
+ bool configured = m_pInputEnabled->toBool();
+ bool passthrough = v > 0.0;
+
+ // Warn the user if they try to enable passthrough on a player with no
+ // configured input.
+ if (!configured && passthrough) {
+ m_pPassthroughEnabled->set(0.0);
+ emit(noPassthroughInputConfigured());
+ }
+}
+
+void BaseTrackPlayerImpl::slotVinylControlEnabled(double v) {
+#ifdef __VINYLCONTROL__
+ bool configured = m_pInputEnabled->toBool();
+ bool vinylcontrol_enabled = v > 0.0;
+
+ // Warn the user if they try to enable vinyl control on a player with no
+ // configured input.
+ if (!configured && vinylcontrol_enabled) {
+ m_pVinylControlEnabled->set(0.0);
+ m_pVinylControlStatus->set(VINYL_STATUS_DISABLED);
+ emit(noVinylControlInputConfigured());
+ }
+#endif
+}
diff --git a/src/mixer/basetrackplayer.h b/src/mixer/basetrackplayer.h
index 52e168afe6..8225dce24a 100644
--- a/src/mixer/basetrackplayer.h
+++ b/src/mixer/basetrackplayer.h
@@ -2,6 +2,7 @@
#define MIXER_BASETRACKPLAYER_H
#include <QObject>
+#include <QScopedPointer>
#include <QString>
#include "configobject.h"
@@ -41,6 +42,8 @@ class BaseTrackPlayer : public BasePlayer {
void loadTrackFailed(TrackPointer pTrack);
void newTrackLoaded(TrackPointer pLoadedTrack);
void unloadingTrack(TrackPointer pAboutToBeUnloaded);
+ void noPassthroughInputConfigured();
+ void noVinylControlInputConfigured();
};
class BaseTrackPlayerImpl : public BaseTrackPlayer {
@@ -51,7 +54,7 @@ class BaseTrackPlayerImpl : public BaseTrackPlayer {
EngineMaster* pMixingEngine,
EffectsManager* pEffectsManager,
EngineChannel::ChannelOrientation defaultOrientation,
- QString group,
+ const QString& group,
bool defaultMaster,
bool defaultHeadphones);
virtual ~BaseTrackPlayerImpl();
@@ -72,6 +75,10 @@ class BaseTrackPlayerImpl : public BaseTrackPlayer {
void slotSetReplayGain(Mixxx::ReplayGain replayGain);
void slotPlayToggled(double);
+ private slots:
+ void slotPassthroughEnabled(double v);
+ void slotVinylControlEnabled(double v);
+
private:
ConfigObject<ConfigValue>* m_pConfig;
TrackPointer m_pLoadedTrack;
@@ -100,6 +107,10 @@ class BaseTrackPlayerImpl : public BaseTrackPlayer {
ControlObjectSlave* m_pPreGain;
ControlObjectSlave* m_pSpeed;
ControlObjectSlave* m_pPitchAdjust;
+ QScopedPointer<ControlObjectSlave> m_pInputEnabled;
+ QScopedPointer<ControlObjectSlave> m_pPassthroughEnabled;
+ QScopedPointer<ControlObjectSlave> m_pVinylControlEnabled;
+ QScopedPointer<ControlObjectSlave> m_pVinylControlStatus;
EngineDeck* m_pChannel;
bool m_replaygainPending;
diff --git a/src/mixer/deck.cpp b/src/mixer/deck.cpp
index 3b05c986dd..6f47274fad 100644
--- a/src/mixer/deck.cpp
+++ b/src/mixer/deck.cpp
@@ -5,7 +5,7 @@ Deck::Deck(QObject* pParent,
EngineMaster* pMixingEngine,
EffectsManager* pEffectsManager,
EngineChannel::ChannelOrientation defaultOrientation,
- QString group) :
+ const QString& group) :
BaseTrackPlayerImpl(pParent, pConfig, pMixingEngine, pEffectsManager,
defaultOrientation, group, true, false) {
}
diff --git a/src/mixer/deck.h b/src/mixer/deck.h
index af194f3c9f..0a7f86b294 100644
--- a/src/mixer/deck.h
+++ b/src/mixer/deck.h
@@ -1,5 +1,5 @@
-#ifndef DECK_H
-#define DECK_H
+#ifndef MIXER_DECK_H
+#define MIXER_DECK_H
#include <QObject>
@@ -13,8 +13,8 @@ class Deck : public BaseTrackPlayerImpl {
EngineMaster* pMixingEngine,
EffectsManager* pEffectsManager,
EngineChannel::ChannelOrientation defaultOrientation,
- QString group);
+ const QString& group);
virtual ~Deck();
};
-#endif // DECK_H
+#endif // MIXER_DECK_H
diff --git a/src/mixer/microphone.cpp b/src/mixer/microphone.cpp
index 701a48a707..404a644894 100644
--- a/src/mixer/microphone.cpp
+++ b/src/mixer/microphone.cpp
@@ -1,5 +1,6 @@
#include "mixer/microphone.h"
+#include "controlobjectslave.h"
#include "engine/enginemaster.h"
#include "engine/enginemicrophone.h"
#include "soundio/soundmanager.h"
@@ -15,7 +16,23 @@ Microphone::Microphone(QObject* pParent, const QString& group, int index,
pEngine->addChannel(pMicrophone);
AudioInput micInput = AudioInput(AudioPath::MICROPHONE, 0, 0, index);
pSoundManager->registerInput(micInput, pMicrophone);
+
+ m_pInputEnabled.reset(new ControlObjectSlave(group, "enabled", this));
+ m_pTalkoverEnabled.reset(new ControlObjectSlave(group, "talkover", this));
+ m_pTalkoverEnabled->connectValueChanged(SLOT(slotTalkoverEnabled(double)));
}
Microphone::~Microphone() {
}
+
+void Microphone::slotTalkoverEnabled(double v) {
+ bool configured = m_pInputEnabled->toBool();
+ bool talkover = v > 0.0;
+
+ // Warn the user if they try to enable talkover on a microphone with no
+ // configured input.
+ if (!configured && talkover) {
+ m_pTalkoverEnabled->set(0.0);
+ emit(noMicrophoneInputConfigured());
+ }
+}
diff --git a/src/mixer/microphone.h b/src/mixer/microphone.h
index ea76367706..72f2921184 100644
--- a/src/mixer/microphone.h
+++ b/src/mixer/microphone.h
@@ -2,10 +2,12 @@
#define MIXER_MICROPHONE_H
#include <QObject>
+#include <QScopedPointer>
#include <QString>
#include "mixer/baseplayer.h"
+class ControlObjectSlave;
class EffectsManager;
class EngineMaster;
class SoundManager;
@@ -21,6 +23,15 @@ class Microphone : public BasePlayer {
EffectsManager* pEffectsManager);
virtual ~Microphone();
+ signals:
+ void noMicrophoneInputConfigured();
+
+ private slots:
+ void slotTalkoverEnabled(double v);
+
+ private:
+ QScopedPointer<ControlObjectSlave> m_pInputEnabled;
+ QScopedPointer<ControlObjectSlave> m_pTalkoverEnabled;
};
#endif /* MIXER_MICROPHONE_H */
diff --git a/src/mixer/playermanager.cpp b/src/mixer/playermanager.cpp
index ae4481ea05..a408ee01da 100644
--- a/src/mixer/playermanager.cpp
+++ b/src/mixer/playermanager.cpp
@@ -337,6 +337,11 @@ void PlayerManager::addDeckInner() {
Deck* pDeck = new Deck(this, m_pConfig, m_pEngine, m_pEffectsManager,
orientation, group);
+ connect(pDeck, SIGNAL(noPassthroughInputConfigured()),
+ this, SIGNAL(noDeckPassthroughInputConfigured()));
+ connect(pDeck, SIGNAL(noVinylControlInputConfigured()),
+ this, SIGNAL(noVinylControlInputConfigured()));
+
if (m_pAnalyzerQueue) {
connect(pDeck, SIGNAL(newTrackLoaded(TrackPointer)),
m_pAnalyzerQueue, SLOT(slotAnalyseTrack(TrackPointer)));
@@ -440,6 +445,8 @@ void PlayerManager::addMicrophoneInner() {
QString group = groupForMicrophone(index);
Microphone* pMicrophone = new Microphone(this, group, index, m_pSoundManager,
m_pEngine, m_pEffectsManager);
+ connect(pMicrophone, SIGNAL(noMicrophoneInputConfigured()),
+ this, SIGNAL(noMicrophoneInputConfigured()));
m_microphones.append(pMicrophone);
}
diff --git a/src/mixer/playermanager.h b/src/mixer/playermanager.h
index 19ed303b2d..a9c05838ff 100644
--- a/src/mixer/playermanager.h
+++ b/src/mixer/playermanager.h
@@ -191,6 +191,18 @@ class PlayerManager : public QObject, public PlayerManagerInterface {
signals:
void loadLocationToPlayer(QString location, QString group);
+ // Emitted when the user tries to enable a microphone talkover control when
+ // there is no input configured.
+ void noMicrophoneInputConfigured();
+
+ // Emitted when the user tries to enable deck passthrough when there is no
+ // input configured.
+ void noDeckPassthroughInputConfigured();
+
+ // Emitted when the user tries to enable vinyl control when there is no
+ // input configured.
+ void noVinylControlInputConfigured();
+
private:
TrackPointer lookupTrack(QString location);
// Must hold m_mutex before calling this method. Internal method that