Multitap initial

This commit is contained in:
Vesa
2014-11-28 00:29:55 +02:00
parent fb349ea386
commit 13393900d2
16 changed files with 731 additions and 3 deletions

View File

@@ -124,6 +124,25 @@ void addMultiplied( sampleFrame* dst, const sampleFrame* src, float coeffSrc, in
}
struct AddSwappedMultipliedOp
{
AddSwappedMultipliedOp( float coeff ) : m_coeff( coeff ) { }
void operator()( sampleFrame& dst, const sampleFrame& src ) const
{
dst[0] += src[1] * m_coeff;
dst[1] += src[0] * m_coeff;
}
const float m_coeff;
};
void addSwappedMultiplied( sampleFrame* dst, const sampleFrame* src, float coeffSrc, int frames )
{
run<>( dst, src, frames, AddSwappedMultipliedOp(coeffSrc) );
}
void addMultipliedByBuffer( sampleFrame* dst, const sampleFrame* src, float coeffSrc, ValueBuffer * coeffSrcBuf, int frames )
{
for( int f = 0; f < frames; ++f )

View File

@@ -272,6 +272,33 @@ void RingBuffer::writeAddingMultiplied( sampleFrame * src, float offset, f_cnt_t
}
void RingBuffer::writeSwappedAddingMultiplied( sampleFrame * src, f_cnt_t offset, f_cnt_t length, float level )
{
const f_cnt_t pos = ( m_position + offset ) % m_size;
if( length == 0 ) { length = m_fpp; }
if( pos + length <= m_size ) // we won't go over the edge so we can just memcpy here
{
MixHelpers::addSwappedMultiplied( m_buffer + ( pos * sizeof( sampleFrame ) ), src, level, length );
}
else
{
f_cnt_t first = m_size - pos;
f_cnt_t second = length - first;
MixHelpers::addSwappedMultiplied( m_buffer + ( pos * sizeof( sampleFrame ) ), src, level, first );
MixHelpers::addSwappedMultiplied( m_buffer, src + ( first * sizeof( sampleFrame ) ), level, second );
}
}
void RingBuffer::writeSwappedAddingMultiplied( sampleFrame * src, float offset, f_cnt_t length, float level )
{
writeSwappedAddingMultiplied( src, msToFrames( offset ), length, level );
}
void RingBuffer::updateSamplerate()
{
float newsize = static_cast<float>( ( m_size - m_fpp ) * Engine::mixer()->processingSampleRate() ) / m_samplerate;

View File

@@ -444,6 +444,7 @@ graphModel::graphModel( float _min, float _max, int _length,
::Model * _parent, bool _default_constructed, float _step ) :
Model( _parent, tr( "Graph" ), _default_constructed ),
m_samples( _length ),
m_length( _length ),
m_minValue( _min ),
m_maxValue( _max ),
m_step( _step )
@@ -482,9 +483,13 @@ void graphModel::setRange( float _min, float _max )
void graphModel::setLength( int _length )
{
if( _length != length() )
if( _length != m_length )
{
m_samples.resize( _length );
m_length = _length;
if( m_samples.size() < m_length )
{
m_samples.resize( m_length );
}
emit lengthChanged();
}
}