summaryrefslogtreecommitdiffstats
path: root/src/library
diff options
context:
space:
mode:
authorUwe Klotz <uwe_klotz@web.de>2016-06-25 00:28:37 +0200
committerUwe Klotz <uwe_klotz@web.de>2016-06-25 10:12:31 +0200
commit8ce8f1f5c7776b596c381feff72cf03ac24be402 (patch)
treef67cb1e4f907f1d8142cb12856a671e086d28e3a /src/library
parentb0debc788f0c7ae628e67cbba9f29973881b4703 (diff)
Enhance precision of track duration from int to double
Diffstat (limited to 'src/library')
-rw-r--r--src/library/autodj/autodjprocessor.cpp30
-rw-r--r--src/library/autodj/autodjprocessor.h8
-rw-r--r--src/library/autodj/dlgautodj.cpp2
-rw-r--r--src/library/banshee/bansheeplaylistmodel.cpp2
-rw-r--r--src/library/browse/browsethread.cpp3
-rw-r--r--src/library/dao/trackdao.cpp12
-rw-r--r--src/library/dlgtrackinfo.cpp2
-rw-r--r--src/library/trackcollection.cpp2
8 files changed, 30 insertions, 31 deletions
diff --git a/src/library/autodj/autodjprocessor.cpp b/src/library/autodj/autodjprocessor.cpp
index c88a13824b..497e7e4db9 100644
--- a/src/library/autodj/autodjprocessor.cpp
+++ b/src/library/autodj/autodjprocessor.cpp
@@ -9,7 +9,7 @@
#define kConfigKey "[Auto DJ]"
const char* kTransitionPreferenceName = "Transition";
-const int kTransitionPreferenceDefault = 10;
+const double kTransitionPreferenceDefault = 10.0;
static const bool sDebug = false;
@@ -73,7 +73,7 @@ AutoDJProcessor::AutoDJProcessor(QObject* pParent,
m_pPlayerManager(pPlayerManager),
m_pAutoDJTableModel(NULL),
m_eState(ADJ_DISABLED),
- m_iTransitionTime(kTransitionPreferenceDefault),
+ m_transitionTime(kTransitionPreferenceDefault),
m_nextTransitionTime(kTransitionPreferenceDefault) {
m_pAutoDJTableModel = new PlaylistTableModel(this, pTrackCollection,
"mixxx.db.model.autodj");
@@ -123,8 +123,8 @@ AutoDJProcessor::AutoDJProcessor(QObject* pParent,
QString str_autoDjTransition = m_pConfig->getValueString(
ConfigKey(kConfigKey, kTransitionPreferenceName));
if (!str_autoDjTransition.isEmpty()) {
- m_iTransitionTime = str_autoDjTransition.toInt();
- m_nextTransitionTime = m_iTransitionTime;
+ m_transitionTime = str_autoDjTransition.toDouble();
+ m_nextTransitionTime = m_transitionTime;
}
}
@@ -707,37 +707,35 @@ void AutoDJProcessor::calculateTransition(DeckAttributes* pFromDeck,
if (fromTrack) {
// TODO(rryan): Duration is super inaccurate! We should be using
// track_samples / track_samplerate instead.
- int fromTrackDuration = fromTrack->getDuration();
+ double fromTrackDuration = fromTrack->getDuration();
qDebug() << fromTrack->getLocation()
<< "fromTrackDuration =" << fromTrackDuration;
// The track might be shorter than the transition period. Use a
// sensible cap.
- m_nextTransitionTime = math_min(m_iTransitionTime,
- fromTrackDuration / 2);
+ m_nextTransitionTime = math_min(m_transitionTime,
+ fromTrackDuration / 2.0);
if (pToDeck) {
TrackPointer toTrack = pToDeck->getLoadedTrack();
if (toTrack) {
// TODO(rryan): Duration is super inaccurate! We should be using
// track_samples / track_samplerate instead.
- int toTrackDuration = toTrack->getDuration();
+ double toTrackDuration = toTrack->getDuration();
qDebug() << toTrack->getLocation()
<< "toTrackDuration = " << toTrackDuration;
m_nextTransitionTime = math_min(m_nextTransitionTime,
- toTrackDuration / 2);
+ toTrackDuration / 2.0);
}
}
- if (fromTrackDuration > 0) {
- pFromDeck->fadeDuration =
- static_cast<double>(m_nextTransitionTime) /
- static_cast<double>(fromTrackDuration);
+ if (fromTrackDuration > 0.0) {
+ pFromDeck->fadeDuration = m_nextTransitionTime / fromTrackDuration;
} else {
- pFromDeck->fadeDuration = 0;
+ pFromDeck->fadeDuration = 0.0;
}
- if (m_nextTransitionTime > 0) {
+ if (m_nextTransitionTime > 0.0) {
pFromDeck->posThreshold = 1.0 - pFromDeck->fadeDuration;
} else {
// in case of pause transition
@@ -826,7 +824,7 @@ void AutoDJProcessor::setTransitionTime(int time) {
// Update the transition time first.
m_pConfig->set(ConfigKey(kConfigKey, kTransitionPreferenceName),
ConfigValue(time));
- m_iTransitionTime = time;
+ m_transitionTime = time;
// Then re-calculate fade thresholds for the decks.
if (m_eState == ADJ_IDLE) {
diff --git a/src/library/autodj/autodjprocessor.h b/src/library/autodj/autodjprocessor.h
index f243e6f313..8a560a50b9 100644
--- a/src/library/autodj/autodjprocessor.h
+++ b/src/library/autodj/autodjprocessor.h
@@ -123,8 +123,8 @@ class AutoDJProcessor : public QObject {
return m_eState;
}
- int getTransitionTime() const {
- return m_iTransitionTime;
+ double getTransitionTime() const {
+ return m_transitionTime;
}
PlaylistTableModel* getTableModel() const {
@@ -197,8 +197,8 @@ class AutoDJProcessor : public QObject {
PlaylistTableModel* m_pAutoDJTableModel;
AutoDJState m_eState;
- int m_iTransitionTime; // the desired value set by the user
- int m_nextTransitionTime; // the tweaked value actually used
+ double m_transitionTime; // the desired value set by the user
+ double m_nextTransitionTime; // the tweaked value actually used
QList<DeckAttributes*> m_decks;
diff --git a/src/library/autodj/dlgautodj.cpp b/src/library/autodj/dlgautodj.cpp
index d00cfb2314..9b2197e422 100644
--- a/src/library/autodj/dlgautodj.cpp
+++ b/src/library/autodj/dlgautodj.cpp
@@ -200,7 +200,7 @@ void DlgAutoDJ::setTrackTableRowHeight(int rowHeight) {
}
void DlgAutoDJ::updateSelectionInfo() {
- int duration = 0;
+ double duration = 0.0;
QModelIndexList indices = m_pTrackTableView->selectionModel()->selectedRows();
diff --git a/src/library/banshee/bansheeplaylistmodel.cpp b/src/library/banshee/bansheeplaylistmodel.cpp
index 49e222ecbe..ec162d478c 100644
--- a/src/library/banshee/bansheeplaylistmodel.cpp
+++ b/src/library/banshee/bansheeplaylistmodel.cpp
@@ -305,7 +305,7 @@ TrackPointer BansheePlaylistModel::getTrack(const QModelIndex& index) const {
if (pTrack && !track_already_in_library) {
pTrack->setArtist(getFieldString(index, CLM_ARTIST));
pTrack->setTitle(getFieldString(index, CLM_TITLE));
- pTrack->setDuration(getFieldString(index, CLM_DURATION).toInt());
+ pTrack->setDuration(getFieldString(index, CLM_DURATION).toDouble());
pTrack->setAlbum(getFieldString(index, CLM_ALBUM));
pTrack->setAlbumArtist(getFieldString(index, CLM_ALBUM_ARTIST));
pTrack->setYear(getFieldString(index, CLM_YEAR));
diff --git a/src/library/browse/browsethread.cpp b/src/library/browse/browsethread.cpp
index 227fe16c13..dddac5399b 100644
--- a/src/library/browse/browsethread.cpp
+++ b/src/library/browse/browsethread.cpp
@@ -10,7 +10,6 @@
#include "library/browse/browsetablemodel.h"
#include "sources/soundsourceproxy.h"
#include "track/trackmetadata.h"
-#include "util/duration.h"
#include "util/trace.h"
@@ -213,7 +212,7 @@ void BrowseThread::populateModel() {
item->setData(item->text(), Qt::UserRole);
row_data.insert(COLUMN_COMMENT, item);
- QString duration = mixxx::Duration::formatSeconds(pTrack->getDuration());
+ QString duration = pTrack->getDurationText(mixxx::Duration::Precision::SECONDS);
item = new QStandardItem(duration);
item->setToolTip(item->text());
item->setData(item->text(), Qt::UserRole);
diff --git a/src/library/dao/trackdao.cpp b/src/library/dao/trackdao.cpp
index 4f44802771..a845760828 100644
--- a/src/library/dao/trackdao.cpp
+++ b/src/library/dao/trackdao.cpp
@@ -390,7 +390,7 @@ void TrackDAO::addTracksPrepare() {
m_pQueryLibraryInsert->prepare("INSERT INTO library "
"("
"artist,title,album,album_artist,year,genre,tracknumber,tracktotal,composer,"
- "grouping,filetype,location,comment,url,duration,rating,key,key_id,"
+ "grouping,filetype,location,comment,url,duration,duration_real,rating,key,key_id,"
"bitrate,samplerate,cuepoint,bpm,replaygain,replaygain_peak,wavesummaryhex,"
"timesplayed,channels,mixxx_deleted,header_parsed,"
"beats_version,beats_sub_version,beats,bpm_lock,"
@@ -398,7 +398,7 @@ void TrackDAO::addTracksPrepare() {
"coverart_source,coverart_type,coverart_location,coverart_hash"
") VALUES ("
":artist,:title,:album,:album_artist,:year,:genre,:tracknumber,:tracktotal,:composer,"
- ":grouping,:filetype,:location,:comment,:url,:duration,:rating,:key,:key_id,"
+ ":grouping,:filetype,:location,:comment,:url,:duration,:duration_real,:rating,:key,:key_id,"
":bitrate,:samplerate,:cuepoint,:bpm,:replaygain,:replaygain_peak,:wavesummaryhex,"
":timesplayed,:channels,:mixxx_deleted,:header_parsed,"
":beats_version,:beats_sub_version,:beats,:bpm_lock,"
@@ -465,7 +465,8 @@ namespace {
pTrackLibraryQuery->bindValue(":filetype", track.getType());
pTrackLibraryQuery->bindValue(":comment", track.getComment());
pTrackLibraryQuery->bindValue(":url", track.getURL());
- pTrackLibraryQuery->bindValue(":duration", track.getDuration());
+ pTrackLibraryQuery->bindValue(":duration", track.getDurationInt());
+ pTrackLibraryQuery->bindValue(":duration_real", track.getDuration());
pTrackLibraryQuery->bindValue(":rating", track.getRating());
pTrackLibraryQuery->bindValue(":bitrate", track.getBitrate());
pTrackLibraryQuery->bindValue(":samplerate", track.getSampleRate());
@@ -1088,7 +1089,7 @@ bool setTrackUrl(const QSqlRecord& record, const int column,
bool setTrackDuration(const QSqlRecord& record, const int column,
TrackPointer pTrack) {
- pTrack->setDuration(record.value(column).toInt());
+ pTrack->setDuration(record.value(column).toDouble());
return false;
}
@@ -1279,7 +1280,7 @@ TrackPointer TrackDAO::getTrackFromDB(TrackId trackId) const {
{ "rating", setTrackRating },
{ "comment", setTrackComment },
{ "url", setTrackUrl },
- { "duration", setTrackDuration },
+ { "duration_real", setTrackDuration },
{ "bitrate", setTrackBitrate },
{ "samplerate", setTrackSampleRate },
{ "cuepoint", setTrackCuePoint },
@@ -1542,6 +1543,7 @@ bool TrackDAO::updateTrack(Track* pTrack) {
"comment=:comment,"
"url=:url,"
"duration=:duration,"
+ "duration_real=:duration_real,"
"rating=:rating,"
"key=:key,"
"key_id=:key_id,"
diff --git a/src/library/dlgtrackinfo.cpp b/src/library/dlgtrackinfo.cpp
index d3998a9648..a83c9321b6 100644
--- a/src/library/dlgtrackinfo.cpp
+++ b/src/library/dlgtrackinfo.cpp
@@ -165,7 +165,7 @@ void DlgTrackInfo::populateFields(const Track& track) {
txtComment->setPlainText(track.getComment());
// Non-editable fields
- txtDuration->setText(track.getDurationText());
+ txtDuration->setText(track.getDurationText(mixxx::Duration::Precision::SECONDS));
txtLocation->setPlainText(track.getLocation());
txtType->setText(track.getType());
txtBitrate->setText(QString(track.getBitrateText()) + (" ") + tr("kbps"));
diff --git a/src/library/trackcollection.cpp b/src/library/trackcollection.cpp
index 5406bfbf8f..1af6d52ebb 100644
--- a/src/library/trackcollection.cpp
+++ b/src/library/trackcollection.cpp
@@ -14,7 +14,7 @@
#include "util/assert.h"
// static
-const int TrackCollection::kRequiredSchemaVersion = 26;
+const int TrackCollection::kRequiredSchemaVersion = 27;
TrackCollection::TrackCollection(UserSettingsPointer pConfig)
: m_pConfig(pConfig),