diff --git a/include/SampleClip.h b/include/SampleClip.h index 92dbf6c54..6903561d3 100644 --- a/include/SampleClip.h +++ b/include/SampleClip.h @@ -77,9 +77,9 @@ public: bool isPlaying() const; void setIsPlaying(bool isPlaying); + void setSampleBuffer(std::unique_ptr&& sb); public slots: - void setSampleBuffer( lmms::SampleBuffer* sb ); void setSampleFile( const QString & sf ); void updateLength(); void toggleRecord(); diff --git a/include/SampleRecordHandle.h b/include/SampleRecordHandle.h index dbb4c6720..5c3911c43 100644 --- a/include/SampleRecordHandle.h +++ b/include/SampleRecordHandle.h @@ -27,6 +27,7 @@ #include #include +#include #include "PlayHandle.h" #include "TimePos.h" @@ -53,7 +54,7 @@ public: bool isFromTrack( const Track * _track ) const override; f_cnt_t framesRecorded() const; - void createSampleBuffer(SampleBuffer** _sample_buf); + std::unique_ptr createSampleBuffer(); private: diff --git a/src/core/SampleClip.cpp b/src/core/SampleClip.cpp index 2c76c0805..3e8712129 100644 --- a/src/core/SampleClip.cpp +++ b/src/core/SampleClip.cpp @@ -123,12 +123,10 @@ QString SampleClip::sampleFile() const return m_sample->sampleFile(); } - - -void SampleClip::setSampleBuffer( SampleBuffer* sb ) +void SampleClip::setSampleBuffer(std::unique_ptr&& sb) { // TODO C++20: Deprecated, use std::atomic instead - auto buffer = std::shared_ptr(sb); + auto buffer = std::shared_ptr(std::move(sb)); std::atomic_store(&m_sample, std::make_shared(buffer)); updateLength(); diff --git a/src/core/SampleRecordHandle.cpp b/src/core/SampleRecordHandle.cpp index 182d359ad..7c2d06a3a 100644 --- a/src/core/SampleRecordHandle.cpp +++ b/src/core/SampleRecordHandle.cpp @@ -51,13 +51,8 @@ SampleRecordHandle::SampleRecordHandle( SampleClip* clip ) : SampleRecordHandle::~SampleRecordHandle() { - if( !m_buffers.empty() ) - { - SampleBuffer* sb; - createSampleBuffer( &sb ); - m_clip->setSampleBuffer(sb); - } - + if (!m_buffers.empty()) { m_clip->setSampleBuffer(createSampleBuffer()); } + while( !m_buffers.empty() ) { delete[] m_buffers.front().first; @@ -111,7 +106,7 @@ f_cnt_t SampleRecordHandle::framesRecorded() const -void SampleRecordHandle::createSampleBuffer(SampleBuffer** sampleBuf) +std::unique_ptr SampleRecordHandle::createSampleBuffer() { const f_cnt_t frames = framesRecorded(); // create buffer to store all recorded buffers in @@ -130,8 +125,9 @@ void SampleRecordHandle::createSampleBuffer(SampleBuffer** sampleBuf) data_ptr += ( *it ).second; } // create according sample-buffer out of big buffer - *sampleBuf = new SampleBuffer(data, frames, Engine::audioEngine()->inputSampleRate()); + auto sampleBuf = std::make_unique(data, frames, Engine::audioEngine()->inputSampleRate()); delete[] data; + return sampleBuf; }