diff --git a/include/SampleBuffer.h b/include/SampleBuffer.h index 54c444fc5..2c0f43f03 100644 --- a/include/SampleBuffer.h +++ b/include/SampleBuffer.h @@ -22,9 +22,8 @@ * */ - -#ifndef _SAMPLE_BUFFER_H -#define _SAMPLE_BUFFER_H +#ifndef SAMPLE_BUFFER_H +#define SAMPLE_BUFFER_H #include #include @@ -99,29 +98,18 @@ public: return m_audioFile; } - inline f_cnt_t startFrame() const + f_cnt_t startFrame() const { return m_startFrame; } - inline f_cnt_t endFrame() const + f_cnt_t endFrame() const { return m_endFrame; } - void setLoopStartFrame( f_cnt_t _start ) - { - m_varLock.lock(); - m_loopStartFrame = _start; - m_varLock.unlock(); - } - - void setLoopEndFrame( f_cnt_t _end ) - { - m_varLock.lock(); - m_loopEndFrame = _end; - m_varLock.unlock(); - } + void setLoopStartFrame( f_cnt_t start ); + void setLoopEndFrame( f_cnt_t end ); inline f_cnt_t frames() const { @@ -223,13 +211,16 @@ public: public slots: void setAudioFile( const QString & _audio_file ); void loadFromBase64( const QString & _data ); - void setStartFrame( const f_cnt_t _s ); - void setEndFrame( const f_cnt_t _e ); + void setStartFrame( f_cnt_t start ); + void setEndFrame( f_cnt_t end ); void setAmplification( float _a ); void setReversed( bool _on ); private: + /*! Ensures that all settings are sane like end frame > start frame etc. */ + void sanitizeSettings(); + void update( bool _keep_settings = false ); void convertIntToFloat ( int_sample_t * & _ibuf, f_cnt_t _frames, int _channels); @@ -273,5 +264,4 @@ signals: } ; - #endif diff --git a/src/core/SampleBuffer.cpp b/src/core/SampleBuffer.cpp index 2a7639a05..a291ddbc5 100644 --- a/src/core/SampleBuffer.cpp +++ b/src/core/SampleBuffer.cpp @@ -154,6 +154,25 @@ SampleBuffer::~SampleBuffer() +void SampleBuffer::sanitizeSettings() +{ + m_varLock.lock(); + + if( m_startFrame >= m_endFrame ) + { + m_endFrame = m_startFrame+1; + } + + if( m_loopStartFrame >= m_loopEndFrame ) + { + m_loopEndFrame = m_loopStartFrame+1; + } + + m_varLock.unlock(); +} + + + void SampleBuffer::update( bool _keep_settings ) { @@ -828,6 +847,27 @@ void SampleBuffer::visualize( QPainter & _p, const QRect & _dr, +void SampleBuffer::setLoopStartFrame( f_cnt_t start ) +{ + m_varLock.lock(); + m_loopStartFrame = start; + m_varLock.unlock(); + + sanitizeSettings(); +} + + + +void SampleBuffer::setLoopEndFrame( f_cnt_t end ) +{ + m_varLock.lock(); + m_loopEndFrame = end; + m_varLock.unlock(); + + sanitizeSettings(); +} + + QString SampleBuffer::openAudioFile() const { @@ -1240,21 +1280,25 @@ void SampleBuffer::loadFromBase64( const QString & _data ) -void SampleBuffer::setStartFrame( const f_cnt_t _s ) +void SampleBuffer::setStartFrame( f_cnt_t start ) { m_varLock.lock(); - m_loopStartFrame = m_startFrame = _s; + m_loopStartFrame = m_startFrame = start; m_varLock.unlock(); + + sanitizeSettings(); } -void SampleBuffer::setEndFrame( const f_cnt_t _e ) +void SampleBuffer::setEndFrame( f_cnt_t end ) { m_varLock.lock(); - m_loopEndFrame = m_endFrame = _e; + m_loopEndFrame = m_endFrame = end; m_varLock.unlock(); + + sanitizeSettings(); }