⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simple.cpp

📁 Mobile STK for Symbian OS V0.1
💻 CPP
字号:
/***************************************************//*! \class Simple    \brief STK wavetable/noise instrument.    This class combines a looped wave, a    noise source, a biquad resonance filter,    a one-pole filter, and an ADSR envelope    to create some interesting sounds.    Control Change Numbers:        - Filter Pole Position = 2       - Noise/Pitched Cross-Fade = 4       - Envelope Rate = 11       - Gain = 128    by Perry R. Cook and Gary P. Scavone, 1995 - 2005.*//***************************************************/#include "Simple.h"//#if !defined(SYMBIAN)#include "SKINI.msg"Simple :: Simple(){  // Concatenate the STK rawwave path to the rawwave file#if !defined(SYMBIAN)  loop_ = new WaveLoop( (Stk::rawwavePath() + "impuls10.raw").c_str(), true );#else	loop_ = new WaveLoop( "c:\\STK\\rawwaves\\impuls10.raw", true );#endif  filter_.setPole( 0.5 );  baseFrequency_ = 440.0;  setFrequency( baseFrequency_ );  loopGain_ = 0.5;}  Simple :: ~Simple(){  delete loop_;}void Simple :: keyOn(){  adsr_.keyOn();}void Simple :: keyOff(){  adsr_.keyOff();}void Simple :: noteOn(StkFloat frequency, StkFloat amplitude){  this->keyOn();  this->setFrequency( frequency );  filter_.setGain( amplitude ); #if defined(_STK_DEBUG_)  errorString_ << "Simple::NoteOn: frequency = " << frequency << ", amplitude = " << amplitude << '.';  handleError( StkError::DEBUG_WARNING );#endif}void Simple :: noteOff(StkFloat amplitude){  this->keyOff();#if defined(_STK_DEBUG_)  errorString_ << "Simple::NoteOff: amplitude = " << amplitude << ".";  handleError( StkError::DEBUG_WARNING );#endif}void Simple :: setFrequency(StkFloat frequency){  biquad_.setResonance( frequency, 0.98, true );  loop_->setFrequency( frequency );}StkFloat Simple :: computeSample(){  lastOutput_ = loopGain_ * loop_->tick();  biquad_.tick( noise_.tick() );  lastOutput_ += (1.0 - loopGain_) * biquad_.lastOut();  lastOutput_ = filter_.tick( lastOutput_ );  lastOutput_ *= adsr_.tick();  return lastOutput_;}void Simple :: controlChange(int number, StkFloat value){  StkFloat norm = value * ONE_OVER_128;  if ( norm < 0 ) {    norm = 0.0;#if !defined(SYMBIAN)    errorString_ << "Simple::controlChange: control value less than zero ... setting to zero!";    handleError( StkError::WARNING );#endif  }  else if ( norm > 1.0 ) {    norm = 1.0;#if !defined(SYMBIAN)    errorString_ << "Simple::controlChange: control value greater than 128.0 ... setting to 128.0!";    handleError( StkError::WARNING );#endif  }  if (number == __SK_Breath_) // 2    filter_.setPole( 0.99 * (1.0 - (norm * 2.0)) );  else if (number == __SK_NoiseLevel_) // 4    loopGain_ = norm;  else if (number == __SK_ModFrequency_) { // 11    norm /= 0.2 * Stk::sampleRate();    adsr_.setAttackRate( norm );    adsr_.setDecayRate( norm );    adsr_.setReleaseRate( norm );  }  else if (number == __SK_AfterTouch_Cont_) // 128    adsr_.setTarget( norm );  else {#if !defined(SYMBIAN)    errorString_ << "Simple::controlChange: undefined control number (" << number << ")!";    handleError( StkError::WARNING );#endif  }#if defined(_STK_DEBUG_)    errorString_ << "Simple::controlChange: number = " << number << ", value = " << value << '.';    handleError( StkError::DEBUG_WARNING );#endif}//#endif // SYMBIAN

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -