mirror of
https://github.com/thestk/stk
synced 2026-01-14 21:41:53 +00:00
Version 4.4.2
This commit is contained in:
committed by
Stephen Sinclair
parent
b6a2202011
commit
baca57040b
52
src/LentPitShift.cpp
Normal file
52
src/LentPitShift.cpp
Normal file
@@ -0,0 +1,52 @@
|
||||
/***************************************************/
|
||||
/*! \class LentPitShift
|
||||
\brief Pitch shifter effect class based on the Lent algorithm.
|
||||
|
||||
This class implements a pitch shifter using pitch
|
||||
tracking and sample windowing and shifting.
|
||||
|
||||
by Francois Germain, 2009.
|
||||
*/
|
||||
/***************************************************/
|
||||
|
||||
#include "LentPitShift.h"
|
||||
|
||||
namespace stk {
|
||||
|
||||
LentPitShift::LentPitShift( StkFloat periodRatio, int tMax )
|
||||
: inputFrames(0.,tMax,1), outputFrames(0.,tMax,1), ptrFrames(0), inputPtr(0), outputPtr(0.), tMax_(tMax), periodRatio_(periodRatio), zeroFrame(0., tMax, 1)
|
||||
{
|
||||
window = new StkFloat[2*tMax_]; // Allocation of the array for the hamming window
|
||||
threshold_ = 0.1; // Default threshold for pitch tracking
|
||||
|
||||
dt = new StkFloat[tMax+1]; // Allocation of the euclidian distance coefficient array. The first one is never used.
|
||||
cumDt = new StkFloat[tMax+1]; // Allocation of the cumulative sum array
|
||||
cumDt[0] = 0.; // Initialization of the first coefficient of the cumulative sum
|
||||
dpt = new StkFloat[tMax+1]; // Allocation of the pitch tracking function coefficient array
|
||||
dpt[0] = 1.; // Initialization of the first coefficient of dpt which is always the same
|
||||
|
||||
// Initialisation of the input and output delay lines
|
||||
inputLine_.setMaximumDelay( 3 * tMax_ );
|
||||
// The delay is choosed such as the coefficients are not read before being finalised.
|
||||
outputLine_.setMaximumDelay( 3 * tMax_ );
|
||||
outputLine_.setDelay( 3 * tMax_ );
|
||||
|
||||
//Initialization of the delay line of pitch tracking coefficients
|
||||
//coeffLine_ = new Delay[512];
|
||||
//for(int i=0;i<tMax_;i++)
|
||||
// coeffLine_[i] = new Delay( tMax_, tMax_ );
|
||||
}
|
||||
|
||||
void LentPitShift :: clear()
|
||||
{
|
||||
inputLine_.clear();
|
||||
outputLine_.clear();
|
||||
}
|
||||
|
||||
void LentPitShift :: setShift( StkFloat shift )
|
||||
{
|
||||
if ( shift <= 0.0 ) periodRatio_ = 1.0;
|
||||
periodRatio_ = 1.0 / shift;
|
||||
}
|
||||
|
||||
} // stk namespace
|
||||
Reference in New Issue
Block a user