From 12a97fcca20ae12534daa7357aef69d130643709 Mon Sep 17 00:00:00 2001 From: Javier Serrano Polo Date: Sun, 13 Aug 2006 14:05:03 +0000 Subject: [PATCH] - use fast sample generation, rely on proper waveforms - removed locks in sample generation - added lock methods for use in higher levels git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@316 0778d3d1-df1d-0410-868b-ea421aaaa00d --- include/sample_buffer.h | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/include/sample_buffer.h b/include/sample_buffer.h index efbdf85b2..f119cb06d 100644 --- a/include/sample_buffer.h +++ b/include/sample_buffer.h @@ -152,16 +152,33 @@ public: } inline sample_t userWaveSample( const float _sample ) + { + // Precise implementation +// const float frame = fraction( _sample ) * m_frames; +// const f_cnt_t f1 = static_cast( frame ); +// const f_cnt_t f2 = ( f1 + 1 ) % m_frames; +// sample_t waveSample = linearInterpolate( m_data[f1][0], +// m_data[f2][0], +// fraction( frame ) ); +// return( waveSample ); + + // Fast implementation + const float frame = _sample * m_frames; + f_cnt_t f1 = static_cast( frame ) % m_frames; + if( f1 < 0 ) + { + f1 += m_frames; + } + return( m_data[f1][0] ); + } + + void lock( void ) { m_dataMutex.lock(); - const float frame = fraction( _sample ) * m_frames; - const f_cnt_t f1 = static_cast( frame ); - const f_cnt_t f2 = ( f1 + 1 ) % m_frames; - sample_t waveSample = linearInterpolate( m_data[f1][0], - m_data[f2][0], - fraction( frame ) ); + } + void unlock( void ) + { m_dataMutex.unlock(); - return( waveSample ); }