mirror of
https://github.com/thestk/stk
synced 2026-01-15 14:01:52 +00:00
Version 4.4.3
This commit is contained in:
committed by
Stephen Sinclair
parent
baca57040b
commit
0aec39260a
@@ -14,7 +14,7 @@
|
||||
minimum delay possible in this implementation is limited to a
|
||||
value of 0.5.
|
||||
|
||||
by Perry R. Cook and Gary P. Scavone, 1995 - 2010.
|
||||
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
||||
*/
|
||||
/***************************************************/
|
||||
|
||||
@@ -24,13 +24,13 @@ namespace stk {
|
||||
|
||||
DelayA :: DelayA( StkFloat delay, unsigned long maxDelay )
|
||||
{
|
||||
if ( delay < 0.5 || maxDelay < 1 ) {
|
||||
errorString_ << "DelayA::DelayA: delay must be >= 0.5, maxDelay must be > 0!";
|
||||
if ( delay < 0.5 ) {
|
||||
oStream_ << "DelayA::DelayA: delay must be >= 0.5!";
|
||||
handleError( StkError::FUNCTION_ARGUMENT );
|
||||
}
|
||||
|
||||
if ( delay > (StkFloat) maxDelay ) {
|
||||
errorString_ << "DelayA::DelayA: maxDelay must be > than delay argument!";
|
||||
oStream_ << "DelayA::DelayA: maxDelay must be > than delay argument!";
|
||||
handleError( StkError::FUNCTION_ARGUMENT );
|
||||
}
|
||||
|
||||
@@ -59,45 +59,24 @@ void DelayA :: clear()
|
||||
void DelayA :: setMaximumDelay( unsigned long delay )
|
||||
{
|
||||
if ( delay < inputs_.size() ) return;
|
||||
|
||||
if ( delay < 0 ) {
|
||||
errorString_ << "DelayA::setMaximumDelay: argument (" << delay << ") less than zero!\n";
|
||||
handleError( StkError::WARNING );
|
||||
return;
|
||||
}
|
||||
else if ( delay < delay_ ) {
|
||||
errorString_ << "DelayA::setMaximumDelay: argument (" << delay << ") less than current delay setting (" << delay_ << ")!\n";
|
||||
handleError( StkError::WARNING );
|
||||
return;
|
||||
}
|
||||
|
||||
inputs_.resize( delay + 1 );
|
||||
}
|
||||
|
||||
void DelayA :: setDelay( StkFloat delay )
|
||||
{
|
||||
StkFloat outPointer;
|
||||
unsigned long length = inputs_.size();
|
||||
|
||||
if ( delay + 1 > length ) { // The value is too big.
|
||||
errorString_ << "DelayA::setDelay: argument (" << delay << ") too big ... setting to maximum!";
|
||||
handleError( StkError::WARNING );
|
||||
oStream_ << "DelayA::setDelay: argument (" << delay << ") greater than maximum!";
|
||||
handleError( StkError::WARNING ); return;
|
||||
}
|
||||
|
||||
// Force delay to maxLength
|
||||
outPointer = inPoint_ + 1.0;
|
||||
delay_ = length - 1;
|
||||
}
|
||||
else if ( delay < 0.5 ) {
|
||||
errorString_ << "DelayA::setDelay: argument (" << delay << ") less than 0.5 not possible!";
|
||||
if ( delay < 0.5 ) {
|
||||
oStream_ << "DelayA::setDelay: argument (" << delay << ") less than 0.5 not possible!";
|
||||
handleError( StkError::WARNING );
|
||||
}
|
||||
|
||||
outPointer = inPoint_ + 0.4999999999;
|
||||
delay_ = 0.5;
|
||||
}
|
||||
else {
|
||||
outPointer = inPoint_ - delay + 1.0; // outPoint chases inpoint
|
||||
delay_ = delay;
|
||||
}
|
||||
StkFloat outPointer = inPoint_ - delay + 1.0; // outPoint chases inpoint
|
||||
delay_ = delay;
|
||||
|
||||
while ( outPointer < 0 )
|
||||
outPointer += length; // modulo maximum length
|
||||
@@ -110,15 +89,14 @@ void DelayA :: setDelay( StkFloat delay )
|
||||
// The optimal range for alpha is about 0.5 - 1.5 in order to
|
||||
// achieve the flattest phase delay response.
|
||||
outPoint_ += 1;
|
||||
if (outPoint_ >= length) outPoint_ -= length;
|
||||
if ( outPoint_ >= length ) outPoint_ -= length;
|
||||
alpha_ += (StkFloat) 1.0;
|
||||
}
|
||||
|
||||
coeff_ = ((StkFloat) 1.0 - alpha_) /
|
||||
((StkFloat) 1.0 + alpha_); // coefficient for all pass
|
||||
coeff_ = (1.0 - alpha_) / (1.0 + alpha_); // coefficient for allpass
|
||||
}
|
||||
|
||||
StkFloat DelayA :: contentsAt( unsigned long tapDelay )
|
||||
StkFloat DelayA :: tapOut( unsigned long tapDelay )
|
||||
{
|
||||
long tap = inPoint_ - tapDelay - 1;
|
||||
while ( tap < 0 ) // Check for wraparound.
|
||||
@@ -127,4 +105,13 @@ StkFloat DelayA :: contentsAt( unsigned long tapDelay )
|
||||
return inputs_[tap];
|
||||
}
|
||||
|
||||
void DelayA :: tapIn( StkFloat value, unsigned long tapDelay )
|
||||
{
|
||||
long tap = inPoint_ - tapDelay - 1;
|
||||
while ( tap < 0 ) // Check for wraparound.
|
||||
tap += inputs_.size();
|
||||
|
||||
inputs_[tap] = value;
|
||||
}
|
||||
|
||||
} // stk namespace
|
||||
|
||||
Reference in New Issue
Block a user