Version 4.4.3

This commit is contained in:
Gary Scavone
2013-09-29 23:21:29 +02:00
committed by Stephen Sinclair
parent baca57040b
commit 0aec39260a
223 changed files with 26190 additions and 11130 deletions

View File

@@ -10,7 +10,7 @@
A non-interpolating delay line is typically used in fixed
delay-length applications, such as for reverberation.
by Perry R. Cook and Gary P. Scavone, 1995 - 2010.
by Perry R. Cook and Gary P. Scavone, 1995-2011.
*/
/***************************************************/
@@ -23,13 +23,8 @@ Delay :: Delay( unsigned long delay, unsigned long maxDelay )
// Writing before reading allows delays from 0 to length-1.
// If we want to allow a delay of maxDelay, we need a
// delay-line of length = maxDelay+1.
if ( maxDelay < 1 ) {
errorString_ << "Delay::Delay: maxDelay must be > 0!\n";
handleError( StkError::FUNCTION_ARGUMENT );
}
if ( delay > maxDelay ) {
errorString_ << "Delay::Delay: maxDelay must be > than delay argument!\n";
oStream_ << "Delay::Delay: maxDelay must be > than delay argument!\n";
handleError( StkError::FUNCTION_ARGUMENT );
}
@@ -47,44 +42,25 @@ Delay :: ~Delay()
void Delay :: setMaximumDelay( unsigned long delay )
{
if ( delay < inputs_.size() ) return;
if ( delay < 0 ) {
errorString_ << "Delay::setMaximumDelay: argument (" << delay << ") less than zero!\n";
handleError( StkError::WARNING );
return;
}
else if ( delay < delay_ ) {
errorString_ << "Delay::setMaximumDelay: argument (" << delay << ") less than current delay setting (" << delay_ << ")!\n";
handleError( StkError::WARNING );
return;
}
inputs_.resize( delay + 1 );
}
void Delay :: setDelay( unsigned long delay )
{
if ( delay > inputs_.size() - 1 ) { // The value is too big.
errorString_ << "Delay::setDelay: argument (" << delay << ") too big ... setting to maximum!\n";
handleError( StkError::WARNING );
oStream_ << "Delay::setDelay: argument (" << delay << ") greater than maximum!\n";
handleError( StkError::WARNING ); return;
}
// Force delay to maximum length.
outPoint_ = inPoint_ + 1;
if ( outPoint_ == inputs_.size() ) outPoint_ = 0;
delay_ = inputs_.size() - 1;
if ( delay < 0 ) {
oStream_ << "Delay::setDelay: argument (" << delay << ") less than zero!\n";
handleError( StkError::WARNING ); return;
}
else if ( delay < 0 ) {
errorString_ << "Delay::setDelay: argument (" << delay << ") less than zero ... setting to zero!\n";
handleError( StkError::WARNING );
outPoint_ = inPoint_;
delay_ = 0;
}
else { // read chases write
if ( inPoint_ >= delay ) outPoint_ = inPoint_ - delay;
else outPoint_ = inputs_.size() + inPoint_ - delay;
delay_ = delay;
}
// read chases write
if ( inPoint_ >= delay ) outPoint_ = inPoint_ - delay;
else outPoint_ = inputs_.size() + inPoint_ - delay;
delay_ = delay;
}
StkFloat Delay :: energy( void ) const
@@ -109,7 +85,7 @@ StkFloat Delay :: energy( void ) const
return e;
}
StkFloat Delay :: contentsAt( unsigned long tapDelay )
StkFloat Delay :: tapOut( unsigned long tapDelay )
{
long tap = inPoint_ - tapDelay - 1;
while ( tap < 0 ) // Check for wraparound.
@@ -118,7 +94,16 @@ StkFloat Delay :: contentsAt( unsigned long tapDelay )
return inputs_[tap];
}
StkFloat Delay :: addTo( unsigned long tapDelay, StkFloat value )
void Delay :: tapIn( StkFloat value, unsigned long tapDelay )
{
long tap = inPoint_ - tapDelay - 1;
while ( tap < 0 ) // Check for wraparound.
tap += inputs_.size();
inputs_[tap] = value;
}
StkFloat Delay :: addTo( StkFloat value, unsigned long tapDelay )
{
long tap = inPoint_ - tapDelay - 1;
while ( tap < 0 ) // Check for wraparound.