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

📄 shakers.cpp

📁 Mobile STK for Symbian OS V0.1
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#define PESO_FREQ1 8150#define PESO_FREQ2 10060#define PESO_RES 0.9996// Big Gravel#define BIGROCKS_SOUND_DECAY 0.98#define BIGROCKS_SYSTEM_DECAY 0.9965#define BIGROCKS_GAIN 20.0#define BIGROCKS_NUM_PARTS 23#define BIGROCKS_FREQ 6460#define BIGROCKS_RES 0.932// Little Gravel#define LITLROCKS_SOUND_DECAY 0.98#define LITLROCKS_SYSTEM_DECAY 0.99586#define LITLROCKS_GAIN 20.0#define LITLROCKS_NUM_PARTS 1600#define LITLROCKS_FREQ 9000#define LITLROCKS_RES 0.843*///#endif// Finally ... the class code!#include "Shakers.h"#include "SKINI.msg"Shakers :: Shakers(){  int i;  instType_ = 0;  shakeEnergy_ = 0.0;  nFreqs_ = 0;  sndLevel_ = 0.0;  for ( i=0; i<MAX_FREQS; i++ )	{    inputs_[i] = 0.0;    outputs_[i][0] = 0.0;    outputs_[i][1] = 0.0;    coeffs_[i][0] = 0.0;    coeffs_[i][1] = 0.0;    gains_[i] = 0.0;    center_freqs_[i] = 0.0;    resons_[i] =  0.0;    freq_rand_[i] = 0.0;    freqalloc_[i] = 0;  }  soundDecay_ = 0.0;  systemDecay_ = 0.0;  nObjects_ = 0.0;  totalEnergy_ = 0.0;  ratchet_ = 0.0;  ratchetDelta_ = 0.0005;  lastRatchetPos_ = 0;  finalZ_[0] = 0.0;  finalZ_[1] = 0.0;  finalZ_[2] = 0.0;  finalZCoeffs_[0] = 1.0;  finalZCoeffs_[1] = 0.0;  finalZCoeffs_[2] = 0.0;  this->setupNum(instType_);#if defined(SYMBIAN)  strcpy(instrs[0],"Maraca");  strcpy(instrs[1],"Cabasa");  strcpy(instrs[2],"Sekere");  strcpy(instrs[3],"Guiro");  strcpy(instrs[4],"Waterdrp");  strcpy(instrs[5],"Bamboo");  strcpy(instrs[6],"Tambourn");  strcpy(instrs[7],"Sleighbl");  strcpy(instrs[8],"CokeCan");  strcpy(instrs[9],"NextMug");  strcpy(instrs[10],"PennyMug");  strcpy(instrs[11],"NicklMug");  strcpy(instrs[12],"DimeMug");  strcpy(instrs[13],"QuartMug");  strcpy(instrs[14],"FrancMug");  strcpy(instrs[15],"PesoMug");  strcpy(instrs[16],"BigRocks");  strcpy(instrs[17],"LitlRoks");  strcpy(instrs[18],"TBamboo");  which = 0;#endif}Shakers :: ~Shakers(){}const StkFloat MAX_SHAKE = 2000.0;#if !defined(SYMBIAN)char instrs[NUM_INSTR][10] = {  "Maraca", "Cabasa", "Sekere", "Guiro",  "Waterdrp", "Bamboo", "Tambourn", "Sleighbl",   "Stix1", "Crunch1", "Wrench", "SandPapr",  "CokeCan", "NextMug", "PennyMug", "NicklMug",  "DimeMug", "QuartMug", "FrancMug", "PesoMug",  "BigRocks", "LitlRoks", "TBamboo"};#endifint Shakers :: setupName(char* instr){  int which = 0;  for (int i=0;i<NUM_INSTR;i++)	{    if ( !strcmp(instr,instrs[i]) )	    which = i;  }#if defined(_STK_DEBUG_)  errorString_ << "Shakers::setupName: setting instrument to " << instrs[which] << '.';  handleError( StkError::DEBUG_WARNING );#endif  return this->setupNum(which);}void Shakers :: setFinalZs(StkFloat z0, StkFloat z1, StkFloat z2){  finalZCoeffs_[0] = z0;  finalZCoeffs_[1] = z1;  finalZCoeffs_[2] = z2;}void Shakers :: setDecays(StkFloat sndDecay_, StkFloat sysDecay_){  soundDecay_ = sndDecay_;  systemDecay_ = sysDecay_;}int Shakers :: setFreqAndReson(int which, StkFloat freq, StkFloat reson){  if (which < MAX_FREQS)	{    resons_[which] = reson;    center_freqs_[which] = freq;    t_center_freqs_[which] = freq;    coeffs_[which][1] = reson * reson;    coeffs_[which][0] = -reson * 2.0 * cos(freq * TWO_PI / Stk::sampleRate());    return 1;  }  else return 0;}int Shakers :: setupNum(int inst){  int i, rv = 0;  StkFloat temp;  if (inst == 1) { // Cabasa    rv = inst;    nObjects_ = CABA_NUM_BEADS;    defObjs_[inst] = CABA_NUM_BEADS;    setDecays(CABA_SOUND_DECAY, CABA_SYSTEM_DECAY);    defDecays_[inst] = CABA_SYSTEM_DECAY;    decayScale_[inst] = 0.97;    nFreqs_ = 1;    baseGain_ = CABA_GAIN;    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;    gains_[0] = temp;    freqalloc_[0] = 0;    setFreqAndReson(0,CABA_CENTER_FREQ,CABA_RESON);    setFinalZs(1.0,-1.0,0.0);  }  else if (inst == 2) { // Sekere    rv = inst;    nObjects_ = SEKE_NUM_BEANS;    defObjs_[inst] = SEKE_NUM_BEANS;    this->setDecays(SEKE_SOUND_DECAY,SEKE_SYSTEM_DECAY);    defDecays_[inst] = SEKE_SYSTEM_DECAY;    decayScale_[inst] = 0.94;    nFreqs_ = 1;    baseGain_ = SEKE_GAIN;    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;    gains_[0] = temp;    freqalloc_[0] = 0;    this->setFreqAndReson(0,SEKE_CENTER_FREQ,SEKE_RESON);    this->setFinalZs(1.0, 0.0, -1.0);  }  else if (inst == 3) { //  Guiro    rv = inst;    nObjects_ = GUIR_NUM_PARTS;    defObjs_[inst] = GUIR_NUM_PARTS;    setDecays(GUIR_SOUND_DECAY,1.0);    defDecays_[inst] = 0.9999;    decayScale_[inst] = 1.0;    nFreqs_ = 2;    baseGain_ = GUIR_GAIN;    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;    gains_[0]=temp;    gains_[1]=temp;    freqalloc_[0] = 0;    freqalloc_[1] = 0;    freq_rand_[0] = 0.0;    freq_rand_[1] = 0.0;    setFreqAndReson(0,GUIR_GOURD_FREQ,GUIR_GOURD_RESON);    setFreqAndReson(1,GUIR_GOURD_FREQ2,GUIR_GOURD_RESON2);    ratchet_ = 0;    ratchetPos_ = 10;  }  else if (inst == 4) { //  Water Drops    rv = inst;    nObjects_ = WUTR_NUM_SOURCES;    defObjs_[inst] = WUTR_NUM_SOURCES;    setDecays(WUTR_SOUND_DECAY,WUTR_SYSTEM_DECAY);    defDecays_[inst] = WUTR_SYSTEM_DECAY;    decayScale_[inst] = 0.8;    nFreqs_ = 3;    baseGain_ = WUTR_GAIN;    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;    gains_[0]=temp;    gains_[1]=temp;    gains_[2]=temp;    freqalloc_[0] = 1;    freqalloc_[1] = 1;    freqalloc_[2] = 1;    freq_rand_[0] = 0.2;    freq_rand_[1] = 0.2;    freq_rand_[2] = 0.2;    setFreqAndReson(0,WUTR_CENTER_FREQ0,WUTR_RESON);    setFreqAndReson(1,WUTR_CENTER_FREQ0,WUTR_RESON);    setFreqAndReson(2,WUTR_CENTER_FREQ0,WUTR_RESON);    setFinalZs(1.0,0.0,0.0);  }  else if (inst == 5) { // Bamboo    rv = inst;    nObjects_ = BAMB_NUM_TUBES;    defObjs_[inst] = BAMB_NUM_TUBES;    setDecays(BAMB_SOUND_DECAY, BAMB_SYSTEM_DECAY);    defDecays_[inst] = BAMB_SYSTEM_DECAY;    decayScale_[inst] = 0.7;    nFreqs_ = 3;    baseGain_ = BAMB_GAIN;    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;    gains_[0]=temp;    gains_[1]=temp;    gains_[2]=temp;    freqalloc_[0] = 1;    freqalloc_[1] = 1;    freqalloc_[2] = 1;    freq_rand_[0] = 0.2;    freq_rand_[1] = 0.2;    freq_rand_[2] = 0.2;    setFreqAndReson(0,BAMB_CENTER_FREQ0,BAMB_RESON);    setFreqAndReson(1,BAMB_CENTER_FREQ1,BAMB_RESON);    setFreqAndReson(2,BAMB_CENTER_FREQ2,BAMB_RESON);    setFinalZs(1.0,0.0,0.0);  }  else if (inst == 6) { // Tambourine    rv = inst;    nObjects_ = TAMB_NUM_TIMBRELS;    defObjs_[inst] = TAMB_NUM_TIMBRELS;    setDecays(TAMB_SOUND_DECAY,TAMB_SYSTEM_DECAY);    defDecays_[inst] = TAMB_SYSTEM_DECAY;    decayScale_[inst] = 0.95;    nFreqs_ = 3;    baseGain_ = TAMB_GAIN;    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;    gains_[0]=temp*TAMB_SHELL_GAIN;    gains_[1]=temp*0.8;    gains_[2]=temp;    freqalloc_[0] = 0;    freqalloc_[1] = 1;    freqalloc_[2] = 1;    freq_rand_[0] = 0.0;    freq_rand_[1] = 0.05;    freq_rand_[2] = 0.05;    setFreqAndReson(0,TAMB_SHELL_FREQ,TAMB_SHELL_RESON);    setFreqAndReson(1,TAMB_CYMB_FREQ1,TAMB_CYMB_RESON);    setFreqAndReson(2,TAMB_CYMB_FREQ2,TAMB_CYMB_RESON);    setFinalZs(1.0,0.0,-1.0);  }  else if (inst == 7) { // Sleighbell    rv = inst;    nObjects_ = SLEI_NUM_BELLS;    defObjs_[inst] = SLEI_NUM_BELLS;    setDecays(SLEI_SOUND_DECAY,SLEI_SYSTEM_DECAY);    defDecays_[inst] = SLEI_SYSTEM_DECAY;    decayScale_[inst] = 0.9;    nFreqs_ = 5;    baseGain_ = SLEI_GAIN;    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;    gains_[0]=temp;    gains_[1]=temp;    gains_[2]=temp;    gains_[3]=temp*0.5;    gains_[4]=temp*0.3;    for (i=0;i<nFreqs_;i++)	{	    freqalloc_[i] = 1;	    freq_rand_[i] = 0.03;    }    setFreqAndReson(0,SLEI_CYMB_FREQ0,SLEI_CYMB_RESON);    setFreqAndReson(1,SLEI_CYMB_FREQ1,SLEI_CYMB_RESON);    setFreqAndReson(2,SLEI_CYMB_FREQ2,SLEI_CYMB_RESON);    setFreqAndReson(3,SLEI_CYMB_FREQ3,SLEI_CYMB_RESON);    setFreqAndReson(4,SLEI_CYMB_FREQ4,SLEI_CYMB_RESON);    setFinalZs(1.0,0.0,-1.0);  }  else if (inst == 8) { // Stix1    rv = inst;    nObjects_ = STIX1_NUM_BEANS;    defObjs_[inst] = STIX1_NUM_BEANS;    setDecays(STIX1_SOUND_DECAY,STIX1_SYSTEM_DECAY);    defDecays_[inst] = STIX1_SYSTEM_DECAY;    decayScale_[inst] = 0.96;    nFreqs_ = 1;    baseGain_ = STIX1_GAIN;    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;    gains_[0]=temp;    freqalloc_[0] = 0;    setFreqAndReson(0,STIX1_CENTER_FREQ,STIX1_RESON);    setFinalZs(1.0,0.0,-1.0);  }  else if (inst == 9) { // Crunch1    rv = inst;    nObjects_ = CRUNCH1_NUM_BEADS;    defObjs_[inst] = CRUNCH1_NUM_BEADS;    setDecays(CRUNCH1_SOUND_DECAY,CRUNCH1_SYSTEM_DECAY);    defDecays_[inst] = CRUNCH1_SYSTEM_DECAY;    decayScale_[inst] = 0.96;    nFreqs_ = 1;    baseGain_ = CRUNCH1_GAIN;    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;    gains_[0]=temp;    freqalloc_[0] = 0;    setFreqAndReson(0,CRUNCH1_CENTER_FREQ,CRUNCH1_RESON);    setFinalZs(1.0,-1.0,0.0);  }  else if (inst == 10) { // Wrench    rv = inst;    nObjects_ = WRENCH_NUM_PARTS;    defObjs_[inst] = WRENCH_NUM_PARTS;    setDecays(WRENCH_SOUND_DECAY,1.0);    defDecays_[inst] = 0.9999;    decayScale_[inst] = 0.98;    nFreqs_ = 2;    baseGain_ = WRENCH_GAIN;    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;    gains_[0]=temp;    gains_[1]=temp;    freqalloc_[0] = 0;    freqalloc_[1] = 0;    freq_rand_[0] = 0.0;    freq_rand_[1] = 0.0;    setFreqAndReson(0,WRENCH_FREQ,WRENCH_RESON);    setFreqAndReson(1,WRENCH_FREQ2,WRENCH_RESON2);    ratchet_ = 0;    ratchetPos_ = 10;  }  else if (inst == 11) { // Sandpapr    rv = inst;    nObjects_ = SANDPAPR_NUM_GRAINS;    defObjs_[inst] = SANDPAPR_NUM_GRAINS;    this->setDecays(SANDPAPR_SOUND_DECAY,SANDPAPR_SYSTEM_DECAY);    defDecays_[inst] = SANDPAPR_SYSTEM_DECAY;    decayScale_[inst] = 0.97;    nFreqs_ = 1;    baseGain_ = SANDPAPR_GAIN;    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;    gains_[0] = temp;    freqalloc_[0] = 0;    this->setFreqAndReson(0,SANDPAPR_CENTER_FREQ,SANDPAPR_RESON);    this->setFinalZs(1.0, 0.0, -1.0);  }  else if (inst == 12) { // Cokecan    rv = inst;    nObjects_ = COKECAN_NUM_PARTS;    defObjs_[inst] = COKECAN_NUM_PARTS;    setDecays(COKECAN_SOUND_DECAY,COKECAN_SYSTEM_DECAY);    defDecays_[inst] = COKECAN_SYSTEM_DECAY;    decayScale_[inst] = 0.95;    nFreqs_ = 5;    baseGain_ = COKECAN_GAIN;    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;    gains_[0]=temp;    gains_[1]=temp*1.8;    gains_[2]=temp*1.8;    gains_[3]=temp*1.8;    gains_[4]=temp*1.8;    freqalloc_[0] = 0;    freqalloc_[1] = 0;    freqalloc_[2] = 0;    freqalloc_[3] = 0;    freqalloc_[4] = 0;    setFreqAndReson(0,COKECAN_HELMFREQ,COKECAN_HELM_RES);    setFreqAndReson(1,COKECAN_METLFREQ0,COKECAN_METL_RES);    setFreqAndReson(2,COKECAN_METLFREQ1,COKECAN_METL_RES);    setFreqAndReson(3,COKECAN_METLFREQ2,COKECAN_METL_RES);    setFreqAndReson(4,COKECAN_METLFREQ3,COKECAN_METL_RES);    setFinalZs(1.0,0.0,-1.0);  }  else if (inst>12 && inst<20) { // Nextmug    rv = inst;    nObjects_ = NEXTMUG_NUM_PARTS;    defObjs_[inst] = NEXTMUG_NUM_PARTS;    setDecays(NEXTMUG_SOUND_DECAY,NEXTMUG_SYSTEM_DECAY);    defDecays_[inst] = NEXTMUG_SYSTEM_DECAY;    decayScale_[inst] = 0.95;    nFreqs_ = 4;    baseGain_ = NEXTMUG_GAIN;    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;    gains_[0]=temp;    gains_[1]=temp*0.8;    gains_[2]=temp*0.6;    gains_[3]=temp*0.4;    freqalloc_[0] = 0;    freqalloc_[1] = 0;    freqalloc_[2] = 0;    freqalloc_[3] = 0;    freqalloc_[4] = 0;    freqalloc_[5] = 0;    setFreqAndReson(0,NEXTMUG_FREQ0,NEXTMUG_RES);    setFreqAndReson(1,NEXTMUG_FREQ1,NEXTMUG_RES);    setFreqAndReson(2,NEXTMUG_FREQ2,NEXTMUG_RES);    setFreqAndReson(3,NEXTMUG_FREQ3,NEXTMUG_RES);    setFinalZs(1.0,0.0,-1.0);    if (inst == 14) { // Mug + Penny      nFreqs_ = 7;      gains_[4] = temp;      gains_[5] = temp*0.8;      gains_[6] = temp*0.5;      setFreqAndReson(4,PENNY_FREQ0,PENNY_RES);      setFreqAndReson(5,PENNY_FREQ1,PENNY_RES);      setFreqAndReson(6,PENNY_FREQ2,PENNY_RES);    }    else if (inst == 15) { // Mug + Nickel      nFreqs_ = 6;      gains_[4] = temp;      gains_[5] = temp*0.8;      gains_[6] = temp*0.5;      setFreqAndReson(4,NICKEL_FREQ0,NICKEL_RES);      setFreqAndReson(5,NICKEL_FREQ1,NICKEL_RES);      setFreqAndReson(6,NICKEL_FREQ2,NICKEL_RES);    }    else if (inst == 16) { // Mug + Dime      nFreqs_ = 6;      gains_[4] = temp;      gains_[5] = temp*0.8;      gains_[6] = temp*0.5;      setFreqAndReson(4,DIME_FREQ0,DIME_RES);      setFreqAndReson(5,DIME_FREQ1,DIME_RES);      setFreqAndReson(6,DIME_FREQ2,DIME_RES);    }    else if (inst == 17) { // Mug + Quarter      nFreqs_ = 6;      gains_[4] = temp*1.3;      gains_[5] = temp*1.0;      gains_[6] = temp*0.8;      setFreqAndReson(4,QUARTER_FREQ0,QUARTER_RES);      setFreqAndReson(5,QUARTER_FREQ1,QUARTER_RES);      setFreqAndReson(6,QUARTER_FREQ2,QUARTER_RES);

⌨️ 快捷键说明

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