BaseTrackPlayer::~BaseTrackPlayer() { if (m_pLoadedTrack) { emit(unloadingTrack(m_pLoadedTrack)); disconnect(m_pLoadedTrack.data(), 0, m_pBPM, 0); disconnect(m_pLoadedTrack.data(), 0, this, 0); disconnect(m_pLoadedTrack.data(), 0, m_pKey, 0); m_pLoadedTrack.clear(); } delete m_pDuration; delete m_pWaveformZoom; delete m_pEndOfTrack; delete m_pLoopInPoint; delete m_pLoopOutPoint; delete m_pBPM; delete m_pKey; delete m_pReplayGain; delete m_pPlay; delete m_pLowFilter; delete m_pMidFilter; delete m_pHighFilter; delete m_pLowFilterKill; delete m_pMidFilterKill; delete m_pHighFilterKill; delete m_pPreGain; }
void BaseTrackPlayer::slotUnloadTrack(TrackPointer) { if (m_pLoadedTrack) { // WARNING: Never. Ever. call bare disconnect() on an object. Mixxx // relies on signals and slots to get tons of things done. Don't // randomly disconnect things. // m_pLoadedTrack->disconnect(); disconnect(m_pLoadedTrack.data(), 0, m_pBPM, 0); disconnect(m_pLoadedTrack.data(), 0, this, 0); disconnect(m_pLoadedTrack.data(), 0, m_pKey, 0); // Causes the track's data to be saved back to the library database and // for all the widgets to unload the track and blank themselves. emit(unloadingTrack(m_pLoadedTrack)); } m_replaygainPending = false; m_pDuration->set(0); m_pBPM->slotSet(0); m_pKey->slotSet(0); m_pReplayGain->slotSet(0); m_pLoopInPoint->slotSet(-1); m_pLoopOutPoint->slotSet(-1); m_pLoadedTrack.clear(); // Update the PlayerInfo class that is used in EngineShoutcast to replace // the metadata of a stream PlayerInfo::instance().setTrackInfo(getGroup(), m_pLoadedTrack); }
void BaseTrackPlayer::slotLoadTrack(TrackPointer track, bool bPlay) { //Disconnect the old track's signals. if (m_pLoadedTrack) { // Save the loops that are currently set in a loop cue. If no loop cue is // currently on the track, then create a new one. int loopStart = m_pLoopInPoint->get(); int loopEnd = m_pLoopOutPoint->get(); if (loopStart != -1 && loopEnd != -1 && even(loopStart) && even(loopEnd) && loopStart <= loopEnd) { Cue* pLoopCue = NULL; QList<Cue*> cuePoints = m_pLoadedTrack->getCuePoints(); QListIterator<Cue*> it(cuePoints); while (it.hasNext()) { Cue* pCue = it.next(); if (pCue->getType() == Cue::LOOP) { pLoopCue = pCue; } } if (!pLoopCue) { pLoopCue = m_pLoadedTrack->addCue(); pLoopCue->setType(Cue::LOOP); } pLoopCue->setPosition(loopStart); pLoopCue->setLength(loopEnd - loopStart); } // WARNING: Never. Ever. call bare disconnect() on an object. Mixxx // relies on signals and slots to get tons of things done. Don't // randomly disconnect things. // m_pLoadedTrack->disconnect(); disconnect(m_pLoadedTrack.data(), 0, m_pBPM, 0); disconnect(m_pLoadedTrack.data(), 0, this, 0); m_pReplayGain->slotSet(0); // Causes the track's data to be saved back to the library database. emit(unloadingTrack(m_pLoadedTrack)); } m_pLoadedTrack = track; // Listen for updates to the file's BPM connect(m_pLoadedTrack.data(), SIGNAL(bpmUpdated(double)), m_pBPM, SLOT(slotSet(double))); // Listen for updates to the file's Replay Gain connect(m_pLoadedTrack.data(), SIGNAL(ReplayGainUpdated(double)), this, SLOT(slotSetReplayGain(double))); //Request a new track from the reader emit(loadTrack(track, bPlay)); }
BaseTrackPlayer::~BaseTrackPlayer() { if (m_pLoadedTrack) { emit(unloadingTrack(m_pLoadedTrack)); m_pLoadedTrack.clear(); } delete m_pWaveformZoom; delete m_pEndOfTrack; delete m_pCuePoint; delete m_pLoopInPoint; delete m_pLoopOutPoint; delete m_pPlayPosition; delete m_pBPM; delete m_pReplayGain; delete m_pDuration; }