- 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:
Javier Serrano Polo
2006-08-13 14:05:03 +00:00
parent 2a47cae193
commit 12a97fcca2

View File

@@ -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 );
}