From d9ce7d8d4c3a4007f6b037e77154d6fa305a4a84 Mon Sep 17 00:00:00 2001 From: Dominic Clark Date: Fri, 6 Oct 2023 21:23:50 +0100 Subject: [PATCH] Use remaining sample duration for AFP beat length (#6872) --- .../AudioFileProcessor/AudioFileProcessor.cpp | 21 ++++++++++++++----- .../AudioFileProcessor/AudioFileProcessor.h | 2 +- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/plugins/AudioFileProcessor/AudioFileProcessor.cpp b/plugins/AudioFileProcessor/AudioFileProcessor.cpp index 667102207..6e9d00688 100644 --- a/plugins/AudioFileProcessor/AudioFileProcessor.cpp +++ b/plugins/AudioFileProcessor/AudioFileProcessor.cpp @@ -24,6 +24,8 @@ #include "AudioFileProcessor.h" +#include + #include #include #include @@ -289,19 +291,28 @@ QString AudioFileProcessor::nodeName() const -int AudioFileProcessor::getBeatLen( NotePlayHandle * _n ) const +auto AudioFileProcessor::beatLen(NotePlayHandle* note) const -> int { + // If we can play indefinitely, use the default beat note duration + if (static_cast(m_loopModel.value()) != SampleBuffer::LoopMode::Off) { return 0; } + + // Otherwise, use the remaining sample duration const auto baseFreq = instrumentTrack()->baseFreq(); - const float freq_factor = baseFreq / _n->frequency() * - Engine::audioEngine()->processingSampleRate() / Engine::audioEngine()->baseSampleRate(); + const auto freqFactor = baseFreq / note->frequency() + * Engine::audioEngine()->processingSampleRate() + / Engine::audioEngine()->baseSampleRate(); - return static_cast( floorf( ( m_sampleBuffer.endFrame() - m_sampleBuffer.startFrame() ) * freq_factor ) ); + const auto startFrame = m_nextPlayStartPoint >= m_sampleBuffer.endFrame() + ? m_sampleBuffer.startFrame() + : m_nextPlayStartPoint; + const auto duration = m_sampleBuffer.endFrame() - startFrame; + + return static_cast(std::floor(duration * freqFactor)); } - gui::PluginView* AudioFileProcessor::instantiateView( QWidget * _parent ) { return new gui::AudioFileProcessorView( this, _parent ); diff --git a/plugins/AudioFileProcessor/AudioFileProcessor.h b/plugins/AudioFileProcessor/AudioFileProcessor.h index 5fed10862..39bd11c3a 100644 --- a/plugins/AudioFileProcessor/AudioFileProcessor.h +++ b/plugins/AudioFileProcessor/AudioFileProcessor.h @@ -67,7 +67,7 @@ public: QString nodeName() const override; - virtual int getBeatLen( NotePlayHandle * _n ) const; + auto beatLen(NotePlayHandle* note) const -> int override; f_cnt_t desiredReleaseFrames() const override {