mirror of
https://github.com/thestk/stk
synced 2026-01-13 13:01:52 +00:00
54 lines
1.3 KiB
C++
54 lines
1.3 KiB
C++
/***************************************************/
|
|
/*! \class SingWave
|
|
\brief STK "singing" looped soundfile class.
|
|
|
|
This class loops a specified soundfile and modulates it both
|
|
periodically and randomly to produce a pitched musical sound, like
|
|
a simple voice or violin. In general, it is not be used alone
|
|
because of "munchkinification" effects from pitch shifting.
|
|
Within STK, it is used as an excitation source for other
|
|
instruments.
|
|
|
|
by Perry R. Cook and Gary P. Scavone, 1995-2011.
|
|
*/
|
|
/***************************************************/
|
|
|
|
#include "SingWave.h"
|
|
|
|
namespace stk {
|
|
|
|
SingWave :: SingWave( std::string fileName, bool raw )
|
|
{
|
|
// An exception could be thrown here.
|
|
wave_.openFile( fileName, raw );
|
|
|
|
rate_ = 1.0;
|
|
sweepRate_ = 0.001;
|
|
|
|
modulator_.setVibratoRate( 6.0 );
|
|
modulator_.setVibratoGain( 0.04 );
|
|
modulator_.setRandomGain( 0.005 );
|
|
|
|
this->setFrequency( 75.0 );
|
|
pitchEnvelope_.setRate( 1.0 );
|
|
this->tick();
|
|
this->tick();
|
|
pitchEnvelope_.setRate( sweepRate_ * rate_ );
|
|
}
|
|
|
|
SingWave :: ~SingWave()
|
|
{
|
|
}
|
|
|
|
void SingWave :: setFrequency( StkFloat frequency )
|
|
{
|
|
StkFloat temp = rate_;
|
|
rate_ = wave_.getSize() * frequency / Stk::sampleRate();
|
|
temp -= rate_;
|
|
if ( temp < 0) temp = -temp;
|
|
pitchEnvelope_.setTarget( rate_ );
|
|
pitchEnvelope_.setRate( sweepRate_ * temp );
|
|
}
|
|
|
|
} // stk namespace
|