- 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
This commit is contained in:
@@ -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<f_cnt_t>( 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<f_cnt_t>( 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<f_cnt_t>( 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 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user