void BpmControl::slotAdjustBeatsSlower(double v) { BeatsPointer pBeats = m_pBeats; if (v > 0 && pBeats && (pBeats->getCapabilities() & Beats::BEATSCAP_SETBPM)) { double new_bpm = math_max(10.0, pBeats->getBpm() - .01); pBeats->setBpm(new_bpm); } }
void DlgTrackInfo::populateFields(TrackPointer pTrack) { setWindowTitle(pTrack->getTitle()); // Editable fields txtTrackName->setText(pTrack->getTitle()); txtArtist->setText(pTrack->getArtist()); txtAlbum->setText(pTrack->getAlbum()); txtAlbumArtist->setText(pTrack->getAlbumArtist()); txtGenre->setText(pTrack->getGenre()); txtComposer->setText(pTrack->getComposer()); txtGrouping->setText(pTrack->getGrouping()); txtYear->setText(pTrack->getYear()); txtTrackNumber->setText(pTrack->getTrackNumber()); txtComment->setText(pTrack->getComment()); spinBpm->setValue(pTrack->getBpm()); // Non-editable fields txtDuration->setText(pTrack->getDurationStr()); txtFilepath->setText(pTrack->getFilename()); txtLocation->setText(pTrack->getLocation()); txtType->setText(pTrack->getType()); txtBitrate->setText(QString(pTrack->getBitrateStr()) + (" ") + tr("kbps")); txtBpm->setText(pTrack->getBpmStr()); txtKey->setText(pTrack->getKeyText()); BeatsPointer pBeats = pTrack->getBeats(); bool beatsSupportsSet = !pBeats || (pBeats->getCapabilities() & Beats::BEATSCAP_SET); bool enableBpmEditing = !pTrack->hasBpmLock() && beatsSupportsSet; spinBpm->setEnabled(enableBpmEditing); bpmTap->setEnabled(enableBpmEditing); bpmDouble->setEnabled(enableBpmEditing); bpmHalve->setEnabled(enableBpmEditing); bpmTwoThirds->setEnabled(enableBpmEditing); bpmThreeFourth->setEnabled(enableBpmEditing); }
void BpmControl::slotTranslateBeatsEarlier(double v) { BeatsPointer pBeats = m_pBeats; if (v > 0 && pBeats && (pBeats->getCapabilities() & Beats::BEATSCAP_TRANSLATE)) { const int translate_dist = getSampleOfTrack().rate * -.01; pBeats->translate(translate_dist); } }
void BpmControl::slotTranslateBeatsLater(double v) { BeatsPointer pBeats = m_pBeats; if (v > 0 && pBeats && (pBeats->getCapabilities() & Beats::BEATSCAP_TRANSLATE)) { // TODO(rryan): Track::getSampleRate is possibly inaccurate! const int translate_dist = getSampleOfTrack().rate * .01; pBeats->translate(translate_dist); } }
void BpmControl::slotBeatsTranslateMatchAlignment(double v) { BeatsPointer pBeats = m_pBeats; if (v > 0 && pBeats && (pBeats->getCapabilities() & Beats::BEATSCAP_TRANSLATE)) { // Must reset the user offset *before* calling getPhaseOffset(), // otherwise it will always return 0 if master sync is active. m_dUserOffset.setValue(0.0); double offset = getPhaseOffset(getSampleOfTrack().current); pBeats->translate(-offset); } }
void BpmControl::slotBeatsTranslate(double v) { BeatsPointer pBeats = m_pBeats; if (v > 0 && pBeats && (pBeats->getCapabilities() & Beats::BEATSCAP_TRANSLATE)) { double currentSample = getSampleOfTrack().current; double closestBeat = pBeats->findClosestBeat(currentSample); int delta = currentSample - closestBeat; if (delta % 2 != 0) { delta--; } pBeats->translate(delta); } }