void pclType::init() {
	initOriginals();
	setDecays();
}
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);
    }
    else if (inst == 18) { // Mug + Franc
      nFreqs_ = 6;
      gains_[4] = temp*0.7;
      gains_[5] = temp*0.4;
      gains_[6] = temp*0.3;
      setFreqAndReson(4,FRANC_FREQ0,FRANC_RES);
      setFreqAndReson(5,FRANC_FREQ1,FRANC_RES);
      setFreqAndReson(6,FRANC_FREQ2,FRANC_RES);
    }
    else if (inst == 19) { // Mug + Peso
      nFreqs_ = 6;
      gains_[4] = temp;
      gains_[5] = temp*1.2;
      gains_[6] = temp*0.7;
      setFreqAndReson(4,PESO_FREQ0,PESO_RES);
      setFreqAndReson(5,PESO_FREQ1,PESO_RES);
      setFreqAndReson(6,PESO_FREQ2,PESO_RES);
    }
  }
  else if (inst == 20) { // Big Rocks
    nFreqs_ = 1;
    rv = inst;
    nObjects_ = BIGROCKS_NUM_PARTS;
    defObjs_[inst] = BIGROCKS_NUM_PARTS;
    setDecays(BIGROCKS_SOUND_DECAY,BIGROCKS_SYSTEM_DECAY);
    defDecays_[inst] = BIGROCKS_SYSTEM_DECAY;
    decayScale_[inst] = 0.95;
    baseGain_ = BIGROCKS_GAIN;
    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;
    gains_[0]=temp;
    freqalloc_[0] = 1;
    freq_rand_[0] = 0.11;
    setFreqAndReson(0,BIGROCKS_FREQ,BIGROCKS_RES);
    setFinalZs(1.0,0.0,-1.0);
  }
  else if (inst == 21) { // Little Rocks
    nFreqs_ = 1;
    rv = inst;
    nObjects_ = LITLROCKS_NUM_PARTS;
    defObjs_[inst] = LITLROCKS_NUM_PARTS;
    setDecays(LITLROCKS_SOUND_DECAY,LITLROCKS_SYSTEM_DECAY);
    defDecays_[inst] = LITLROCKS_SYSTEM_DECAY;
    decayScale_[inst] = 0.95;
    baseGain_ = LITLROCKS_GAIN;
    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;
    gains_[0]=temp;
    freqalloc_[0] = 1;
    freq_rand_[0] = 0.18;
    setFreqAndReson(0,LITLROCKS_FREQ,LITLROCKS_RES);
    setFinalZs(1.0,0.0,-1.0);
  }
  else if (inst == 22) { // Tuned Bamboo
    rv = inst;
    nObjects_ = TBAMB_NUM_TUBES;
    defObjs_[inst] = TBAMB_NUM_TUBES;
    setDecays(TBAMB_SOUND_DECAY, TBAMB_SYSTEM_DECAY);
    defDecays_[inst] = TBAMB_SYSTEM_DECAY;
    decayScale_[inst] = 0.7;
    nFreqs_ = 7;
    baseGain_ = TBAMB_GAIN;
    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;
    gains_[0]=temp;
    gains_[1]=temp;
    gains_[2]=temp;
    gains_[3]=temp;
    gains_[4]=temp;
    gains_[5]=temp;
    gains_[6]=temp;
    freqalloc_[0] = 0;
    freqalloc_[1] = 0;
    freqalloc_[2] = 0;
    freqalloc_[3] = 0;
    freqalloc_[4] = 0;
    freqalloc_[5] = 0;
    freqalloc_[6] = 0;
    freq_rand_[0] = 0.0;
    freq_rand_[1] = 0.0;
    freq_rand_[2] = 0.0;
    freq_rand_[3] = 0.0;
    freq_rand_[4] = 0.0;
    freq_rand_[5] = 0.0;
    freq_rand_[6] = 0.0;
    setFreqAndReson(0,TBAMB_CENTER_FREQ0,TBAMB_RESON);
    setFreqAndReson(1,TBAMB_CENTER_FREQ1,TBAMB_RESON);
    setFreqAndReson(2,TBAMB_CENTER_FREQ2,TBAMB_RESON);
    setFreqAndReson(3,TBAMB_CENTER_FREQ3,TBAMB_RESON);
    setFreqAndReson(4,TBAMB_CENTER_FREQ4,TBAMB_RESON);
    setFreqAndReson(5,TBAMB_CENTER_FREQ5,TBAMB_RESON);
    setFreqAndReson(6,TBAMB_CENTER_FREQ6,TBAMB_RESON);
    setFinalZs(1.0,0.0,-1.0);
  }
  else { // Maraca (inst == 0) or default
    rv = 0;
    nObjects_ = MARA_NUM_BEANS;
    defObjs_[0] = MARA_NUM_BEANS;
    setDecays(MARA_SOUND_DECAY,MARA_SYSTEM_DECAY);
    defDecays_[0] = MARA_SYSTEM_DECAY;
    decayScale_[inst] = 0.9;
    nFreqs_ = 1;
    baseGain_ = MARA_GAIN;
    temp = log(nObjects_) * baseGain_ / (StkFloat) nObjects_;
    gains_[0]=temp;
    freqalloc_[0] = 0;
    setFreqAndReson(0,MARA_CENTER_FREQ,MARA_RESON);
    setFinalZs(1.0,-1.0,0.0);
  }
  return rv;
}