diff options
author | Uwe Klotz <uwe_klotz@web.de> | 2016-06-25 00:28:37 +0200 |
---|---|---|
committer | Uwe Klotz <uwe_klotz@web.de> | 2016-06-25 10:12:31 +0200 |
commit | 8ce8f1f5c7776b596c381feff72cf03ac24be402 (patch) | |
tree | f67cb1e4f907f1d8142cb12856a671e086d28e3a /src/library | |
parent | b0debc788f0c7ae628e67cbba9f29973881b4703 (diff) |
Enhance precision of track duration from int to double
Diffstat (limited to 'src/library')
-rw-r--r-- | src/library/autodj/autodjprocessor.cpp | 30 | ||||
-rw-r--r-- | src/library/autodj/autodjprocessor.h | 8 | ||||
-rw-r--r-- | src/library/autodj/dlgautodj.cpp | 2 | ||||
-rw-r--r-- | src/library/banshee/bansheeplaylistmodel.cpp | 2 | ||||
-rw-r--r-- | src/library/browse/browsethread.cpp | 3 | ||||
-rw-r--r-- | src/library/dao/trackdao.cpp | 12 | ||||
-rw-r--r-- | src/library/dlgtrackinfo.cpp | 2 | ||||
-rw-r--r-- | src/library/trackcollection.cpp | 2 |
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), |