#ifndef BASETRACKPLAYER_H #define BASETRACKPLAYER_H #include "configobject.h" #include "trackinfoobject.h" #include "baseplayer.h" #include "engine/enginechannel.h" #include "engine/enginedeck.h" class EngineMaster; class ControlObject; class ControlPotmeter; class ControlObjectThread; class ControlObjectSlave; class AnalyserQueue; class EffectsManager; // Interface for not leaking implementation details of BaseTrackPlayer into the // rest of Mixxx. Also makes testing a lot easier. class BaseTrackPlayer : public BasePlayer { Q_OBJECT public: // The ordering here corresponds to the ordering of the preferences combo box. enum TrackLoadReset { RESET_NONE, RESET_PITCH, RESET_PITCH_AND_SPEED, }; BaseTrackPlayer(QObject* pParent, const QString& group); virtual ~BaseTrackPlayer() {} virtual TrackPointer getLoadedTrack() const = 0; public slots: virtual void slotLoadTrack(TrackPointer pTrack, bool bPlay=false) = 0; signals: void loadTrack(TrackPointer pTrack, bool bPlay=false); void loadTrackFailed(TrackPointer pTrack); void newTrackLoaded(TrackPointer pLoadedTrack); void unloadingTrack(TrackPointer pAboutToBeUnloaded); }; class BaseTrackPlayerImpl : public BaseTrackPlayer { Q_OBJECT public: BaseTrackPlayerImpl(QObject* pParent, ConfigObject* pConfig, EngineMaster* pMixingEngine, EffectsManager* pEffectsManager, EngineChannel::ChannelOrientation defaultOrientation, QString group, bool defaultMaster, bool defaultHeadphones); virtual ~BaseTrackPlayerImpl(); TrackPointer getLoadedTrack() const; // TODO(XXX): Only exposed to let the passthrough AudioInput get // connected. Delete me when EngineMaster supports AudioInput assigning. EngineDeck* getEngineDeck() const; void setupEqControls(); public slots: void slotLoadTrack(TrackPointer track, bool bPlay=false); void slotFinishLoading(TrackPointer pTrackInfoObject); void slotLoadFailed(TrackPointer pTrackInfoObject, QString reason); void slotUnloadTrack(TrackPointer track); void slotSetReplayGain(double replayGain); void slotPlayToggled(double); private: ConfigObject* m_pConfig; TrackPointer m_pLoadedTrack; // Waveform display related controls ControlPotmeter* m_pWaveformZoom; ControlObject* m_pEndOfTrack; ControlObjectSlave* m_pLoopInPoint; ControlObjectSlave* m_pLoopOutPoint; ControlObject* m_pDuration; // TODO() these COs are reconnected during runtime // This may lock the engine ControlObjectThread* m_pBPM; ControlObjectThread* m_pKey; ControlObjectSlave* m_pReplayGain; ControlObjectSlave* m_pPlay; ControlObjectSlave* m_pLowFilter; ControlObjectSlave* m_pMidFilter; ControlObjectSlave* m_pHighFilter; ControlObjectSlave* m_pLowFilterKill; ControlObjectSlave* m_pMidFilterKill; ControlObjectSlave* m_pHighFilterKill; ControlObjectSlave* m_pPreGain; ControlObjectSlave* m_pSpeed; ControlObjectSlave* m_pPitchAdjust; EngineDeck* m_pChannel; bool m_replaygainPending; }; #endif // BASETRACKPLAYER_H