From aca875b0e42b54afe7af65b66b3337142b1f4151 Mon Sep 17 00:00:00 2001 From: sakertooth Date: Sun, 27 Aug 2023 20:43:00 -0400 Subject: [PATCH] Reduce indirection to sample buffer from Sample --- include/Sample.h | 10 ++++++++-- src/core/Sample.cpp | 20 ++++++++++++++++++++ src/core/SampleClip.cpp | 6 +++--- src/core/SamplePlayHandle.cpp | 2 +- src/gui/clips/SampleClipView.cpp | 10 +++++----- src/tracks/SampleTrack.cpp | 4 ++-- 6 files changed, 39 insertions(+), 13 deletions(-) diff --git a/include/Sample.h b/include/Sample.h index ec55bec6e..09ae41f6a 100644 --- a/include/Sample.h +++ b/include/Sample.h @@ -97,9 +97,15 @@ public: auto play(sampleFrame* dst, PlaybackState* state, int numFrames, float desiredFrequency = DefaultBaseFreq, Loop loopMode = Loop::Off) const -> bool; - auto visualize(QPainter& p, const QRect& dr, int fromFrame = 0, int toFrame = 0) const -> void; - auto sampleDuration() const -> int; auto playbackSize() const -> int; + auto visualize(QPainter& p, const QRect& dr, int fromFrame = 0, int toFrame = 0) const -> void; + + auto sampleDuration() const -> int; + auto sampleFile() const -> QString; + auto sampleRate() const -> int; + auto sampleSize() const -> int; + + auto toBase64() const -> QString; auto buffer() const -> std::shared_ptr; auto startFrame() const -> int; diff --git a/src/core/Sample.cpp b/src/core/Sample.cpp index 3f61cc24c..7da88b3f8 100644 --- a/src/core/Sample.cpp +++ b/src/core/Sample.cpp @@ -237,6 +237,26 @@ auto Sample::sampleDuration() const -> int : 0; } +auto Sample::sampleFile() const -> QString +{ + return m_buffer->audioFile(); +} + +auto Sample::sampleRate() const -> int +{ + return m_buffer->sampleRate(); +} + +auto Sample::sampleSize() const -> int +{ + return m_buffer->size(); +} + +auto Sample::toBase64() const -> QString +{ + return m_buffer->toBase64(); +} + auto Sample::playbackSize() const -> int { const auto lock = std::shared_lock{m_mutex}; diff --git a/src/core/SampleClip.cpp b/src/core/SampleClip.cpp index d88626094..5f5d6da4f 100644 --- a/src/core/SampleClip.cpp +++ b/src/core/SampleClip.cpp @@ -120,7 +120,7 @@ void SampleClip::changeLength( const TimePos & _length ) QString SampleClip::sampleFile() const { - return m_sample->buffer()->audioFile(); + return m_sample->sampleFile(); } @@ -260,10 +260,10 @@ void SampleClip::saveSettings( QDomDocument & _doc, QDomElement & _this ) if( sampleFile() == "" ) { QString s; - _this.setAttribute("data", m_sample->buffer()->toBase64()); + _this.setAttribute("data", m_sample->toBase64()); } - _this.setAttribute("sample_rate", m_sample->buffer()->sampleRate()); + _this.setAttribute("sample_rate", m_sample->sampleRate()); if( usesCustomClipColor() ) { _this.setAttribute( "color", color().name() ); diff --git a/src/core/SamplePlayHandle.cpp b/src/core/SamplePlayHandle.cpp index e7fc0c49b..adc8555be 100644 --- a/src/core/SamplePlayHandle.cpp +++ b/src/core/SamplePlayHandle.cpp @@ -144,7 +144,7 @@ bool SamplePlayHandle::isFromTrack( const Track * _track ) const f_cnt_t SamplePlayHandle::totalFrames() const { return (m_sample->endFrame() - m_sample->startFrame()) * - (static_cast(Engine::audioEngine()->processingSampleRate()) / m_sample->buffer()->sampleRate()); + (static_cast(Engine::audioEngine()->processingSampleRate()) / m_sample->sampleRate()); } diff --git a/src/gui/clips/SampleClipView.cpp b/src/gui/clips/SampleClipView.cpp index d41fbde45..7adb29f01 100644 --- a/src/gui/clips/SampleClipView.cpp +++ b/src/gui/clips/SampleClipView.cpp @@ -60,8 +60,8 @@ void SampleClipView::updateSample() update(); // set tooltip to filename so that user can see what sample this // sample-clip contains - setToolTip(m_clip->m_sample->buffer()->audioFile() != "" ? - PathUtil::toAbsolute(m_clip->m_sample->buffer()->audioFile()) : + setToolTip(m_clip->m_sample->sampleFile() != "" ? + PathUtil::toAbsolute(m_clip->m_sample->sampleFile()) : tr( "Double-click to open sample" ) ); } @@ -173,9 +173,9 @@ void SampleClipView::mouseDoubleClickEvent( QMouseEvent * ) QString af = gui::SampleLoader::openAudioFile(); if ( af.isEmpty() ) {} //Don't do anything if no file is loaded - else if (af == m_clip->m_sample->buffer()->audioFile()) + else if (af == m_clip->m_sample->sampleFile()) { //Instead of reloading the existing file, just reset the size - int length = static_cast(m_clip->m_sample->buffer()->size() / Engine::framesPerTick()); + int length = static_cast(m_clip->m_sample->sampleSize() / Engine::framesPerTick()); m_clip->changeLength(length); } else @@ -264,7 +264,7 @@ void SampleClipView::paintEvent( QPaintEvent * pe ) qMax( static_cast( m_clip->sampleLength() * ppb / ticksPerBar ), 1 ), rect().bottom() - 2 * spacing ); m_clip->m_sample->visualize(p, r); - QString name = PathUtil::cleanName(m_clip->m_sample->buffer()->audioFile()); + QString name = PathUtil::cleanName(m_clip->m_sample->sampleFile()); paintTextLabel(name, p); // disable antialiasing for borders, since its not needed diff --git a/src/tracks/SampleTrack.cpp b/src/tracks/SampleTrack.cpp index e661e0ebf..b98450bf8 100644 --- a/src/tracks/SampleTrack.cpp +++ b/src/tracks/SampleTrack.cpp @@ -108,10 +108,10 @@ bool SampleTrack::play( const TimePos & _start, const fpp_t _frames, { if( sClip->isPlaying() == false && _start >= (sClip->startPosition() + sClip->startTimeOffset()) ) { - auto bufferFramesPerTick = Engine::framesPerTick(sClip->sample()->buffer()->sampleRate()); + auto bufferFramesPerTick = Engine::framesPerTick(sClip->sample()->sampleRate()); f_cnt_t sampleStart = bufferFramesPerTick * ( _start - sClip->startPosition() - sClip->startTimeOffset() ); f_cnt_t clipFrameLength = bufferFramesPerTick * ( sClip->endPosition() - sClip->startPosition() - sClip->startTimeOffset() ); - f_cnt_t sampleBufferLength = sClip->sample()->buffer()->size(); + f_cnt_t sampleBufferLength = sClip->sample()->sampleSize(); //if the Clip smaller than the sample length we play only until Clip end //else we play the sample to the end but nothing more f_cnt_t samplePlayLength = clipFrameLength > sampleBufferLength ? sampleBufferLength : clipFrameLength;