Skip to content

Commit ea47fa2

Browse files
committed
DeckAttributes: Add TrackAttributes for calculating the transition time between tracks
1 parent 580d876 commit ea47fa2

4 files changed

Lines changed: 92 additions & 0 deletions

File tree

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,6 +1389,7 @@ add_library(
13891389
src/library/autodj/dlgautodj.cpp
13901390
src/library/autodj/dlgautodj.ui
13911391
src/library/autodj/track/deckattributes.cpp
1392+
src/library/autodj/track/trackattributes.cpp
13921393
src/library/autodj/track/trackordeckattributes.cpp
13931394
src/library/banshee/bansheedbconnection.cpp
13941395
src/library/banshee/bansheefeature.cpp

src/library/autodj/autodjprocessor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "control/controlpushbutton.h"
1111
#include "control/pollingcontrolproxy.h"
1212
#include "library/autodj/track/deckattributes.h"
13+
#include "library/autodj/track/trackattributes.h"
1314
#include "library/autodj/track/trackordeckattributes.h"
1415
#include "library/playlisttablemodel.h"
1516
#include "preferences/usersettings.h"
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#include "library/autodj/track/trackattributes.h"
2+
3+
#include "moc_trackattributes.cpp"
4+
#include "track/track.h"
5+
6+
TrackAttributes::TrackAttributes(TrackPointer pTrack)
7+
: m_pTrack(pTrack) {
8+
}
9+
10+
mixxx::audio::FramePos TrackAttributes::introStartPosition() const {
11+
auto pIntro = m_pTrack->findCueByType(mixxx::CueType::Intro);
12+
if (pIntro) {
13+
return pIntro->getPosition();
14+
}
15+
return mixxx::audio::FramePos();
16+
}
17+
18+
mixxx::audio::FramePos TrackAttributes::introEndPosition() const {
19+
auto pIntro = m_pTrack->findCueByType(mixxx::CueType::Intro);
20+
if (pIntro) {
21+
return pIntro->getEndPosition();
22+
}
23+
return mixxx::audio::FramePos();
24+
}
25+
26+
mixxx::audio::FramePos TrackAttributes::outroStartPosition() const {
27+
auto pOutro = m_pTrack->findCueByType(mixxx::CueType::Outro);
28+
if (pOutro) {
29+
return pOutro->getPosition();
30+
}
31+
return mixxx::audio::FramePos();
32+
}
33+
34+
mixxx::audio::FramePos TrackAttributes::outroEndPosition() const {
35+
auto pOutro = m_pTrack->findCueByType(mixxx::CueType::Outro);
36+
if (pOutro) {
37+
return pOutro->getEndPosition();
38+
}
39+
return mixxx::audio::FramePos();
40+
}
41+
42+
mixxx::audio::SampleRate TrackAttributes::sampleRate() const {
43+
return m_pTrack->getSampleRate();
44+
}
45+
46+
double TrackAttributes::playPosition() const {
47+
return 0.0;
48+
}
49+
50+
double TrackAttributes::rateRatio() const {
51+
return 1.0;
52+
}
53+
54+
mixxx::audio::FramePos TrackAttributes::trackEndPosition() const {
55+
// Instead of actually loading the file, we simply infer
56+
// the number of frames from duration and sample rate stored
57+
// in the database. This isn't entirely accurate due to
58+
// rounding errors, but more than accurate enough for
59+
// estimating the remaining play time of the AutoDJ queue.
60+
double approxNumSamples =
61+
m_pTrack->getSampleRate() * m_pTrack->getDuration();
62+
63+
return mixxx::audio::FramePos(approxNumSamples);
64+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#pragma once
2+
3+
#include "library/autodj/track/trackordeckattributes.h"
4+
5+
/// Exposes the attributes of a track from the Auto DJ queue.
6+
class TrackAttributes : public TrackOrDeckAttributes {
7+
Q_OBJECT
8+
public:
9+
TrackAttributes(TrackPointer pTrack);
10+
11+
virtual mixxx::audio::FramePos introStartPosition() const override;
12+
virtual mixxx::audio::FramePos introEndPosition() const override;
13+
virtual mixxx::audio::FramePos outroStartPosition() const override;
14+
virtual mixxx::audio::FramePos outroEndPosition() const override;
15+
virtual mixxx::audio::SampleRate sampleRate() const override;
16+
virtual mixxx::audio::FramePos trackEndPosition() const override;
17+
virtual double playPosition() const override;
18+
virtual double rateRatio() const override;
19+
20+
TrackPointer getLoadedTrack() const override {
21+
return m_pTrack;
22+
}
23+
24+
private:
25+
TrackPointer m_pTrack;
26+
};

0 commit comments

Comments
 (0)