double AudioBufferSourceNode::totalPitchRate() { double dopplerRate = 1.0; if (m_pannerNode) dopplerRate = m_pannerNode->dopplerRate(); // Incorporate buffer's sample-rate versus AudioContext's sample-rate. // Normally it's not an issue because buffers are loaded at the AudioContext's sample-rate, but we can handle it in any case. double sampleRateFactor = 1.0; if (buffer()) sampleRateFactor = buffer()->sampleRate() / sampleRate(); double basePitchRate = playbackRate()->value(); double totalRate = dopplerRate * sampleRateFactor * basePitchRate; totalRate = std::max(-MaxRate, std::min(MaxRate, totalRate)); bool isTotalRateValid = !std::isnan(totalRate) && !std::isinf(totalRate); ASSERT(isTotalRateValid); if (!isTotalRateValid) totalRate = 1.0; return totalRate; }
double AudioBufferSourceNode::totalPitchRate() { double dopplerRate = 1.0; if (m_pannerNode.get()) dopplerRate = m_pannerNode->dopplerRate(); // Incorporate buffer's sample-rate versus AudioContext's sample-rate. // Normally it's not an issue because buffers are loaded at the AudioContext's sample-rate, but we can handle it in any case. double sampleRateFactor = 1.0; if (buffer()) sampleRateFactor = buffer()->sampleRate() / sampleRate(); double basePitchRate = playbackRate()->value(); double totalRate = dopplerRate * sampleRateFactor * basePitchRate; // Sanity check the total rate. It's very important that the resampler not get any bad rate values. totalRate = max(0.0, totalRate); if (!totalRate) totalRate = 1; // zero rate is considered illegal totalRate = min(MaxRate, totalRate); bool isTotalRateValid = !isnan(totalRate) && !isinf(totalRate); ASSERT(isTotalRateValid); if (!isTotalRateValid) totalRate = 1.0; return totalRate; }
void S60MediaPlayerControl::setPlaybackRate(qreal rate) { // TODO: Add Symbian^3 support m_mediaSettings.setPlaybackRate(rate); emit playbackRateChanged(playbackRate()); }
bool AnimationPlayer::canStartAnimationOnCompositor() { // FIXME: Need compositor support for playback rate != 1. if (playbackRate() != 1) return false; return m_timeline && m_content && m_content->isAnimation() && playing(); }
void QDeclarativeAudio::setPlaybackRate(qreal rate) { if (playbackRate() == rate) return; if (m_complete) { m_player->setPlaybackRate(rate); } else { m_playbackRate = rate; emit playbackRateChanged(); } }
double AnimationTimeline::currentTimeInternal(bool& isNull) { if (!m_document) { isNull = true; return std::numeric_limits<double>::quiet_NaN(); } // New currentTime = currentTime when the playback rate was last changed + time delta since then * playback rate double delta = document()->animationClock().currentTime() - m_documentCurrentTimeSnapshot; double result = m_documentCurrentTimeSnapshot - zeroTime() + delta * playbackRate(); isNull = std::isnan(result); return result; }
void PlayerControls::updateRate() { emit changeRate(playbackRate()); }