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