Exemple #1
0
boolean Osc::charEv( char code )
{
   switch ( code )
   {
      #ifdef INTERN_CONSOLE
      case 'd':                     // set detuning amount

         console.getSByte( CONSTR("detune"), &this->detune );
         setDetune( detune );
         break;

      case 'f':                     // input an ideal frequency
      {
         double newFreq;
         if ( console.getDouble( CONSTR("freq"), &newFreq ) )
            setFreq( newFreq );
         break;
      }
      #endif

      #ifdef CONSOLE_OUTPUT

      case chrInfo:                 // display object info to console

         super::charEv( code );

      case chrInLnfo:               // display object info inline to console

         console.infoDouble( CONSTR("freq"), realFreq() );
         console.infoInt( CONSTR("detune"), detune );
         break;

      #endif

      case '!':                     // perform a reset

         super::charEv('!');
         setDetune(0);
         extFactor = 1.0;
         break;

      default:

         return super::charEv( code );
   }
   return true;
}
Exemple #2
0
void Oscillator::reset() {
	
	parameters.amp = 0.5f;
	parameters.wave = OSC_SAWTOOTH;
	counter = 0.0f;
	sqp = 1.0f;
	sqc = 0;
	parameters.pulsewidth = 0.0f;
	parameters.detune = 0;
	setAmp(1.0f);
	setWave(OSC_SAWTOOTH);
	setPulseWidth(0.0f);
	setNote(12);
	setDetune(0);
}
Oscillator::Oscillator() : AudioNode() {

	FrequencyIn = new AudioNodeInput(); 
	FMSourceIn = new AudioNodeInput(); 
	FMAmountIn = new AudioNodeInput(); 

	_period = 0;
	_phase = 0;
	_osc = 0;
	_accumulator = 0;
	_sample = 0;

	setFrequency(110.0f);
	setDetune(0.0f);
	setBend(0.0f);
	setPortamento(1);
	setSemitone(0);
	setGain(1.0f);

	// this extends the standard midi frequencies from 128 to 256 discrete values,
	// extending the frequency range with -117 positions below to 0.00949 Hz
	// and +11 above to 23679 Hz.
	for (int i=0; i<=128; i++) {
		_expFrequency[i] = (int64_t(pow(2,((float(i) - 69.0) / 12.0)) * 440.0) << 32) / SAMPLE_RATE;  // divide by sample rate?
		// Serial.print("_expFrequency[");
		// Serial.print(i);
		// Serial.print("] = ");
		// Serial.println(int(_expFrequency[i] >> 32));
	}

	for (int i=0; i<=128; i++) {
		_lfoFrequency[i] = (int64_t(pow(2,((double(i) - 117.0 - 69.0) / 12.0)) * 440.0) << 32) / SAMPLE_RATE;  // divide by sample rate?
	}

	_dir = 1;
	_indx = 0;
	_ifrac = 0;
	_freq0 = 0;
	_freq1 = 0;
	_dfreq = 0;
	_ffrac = 0;
	_dPhase = 0;
	_lfo = false;
}
Exemple #4
0
void Detune_set(void* ctx, float val)
{
    SetHelp("Unison Level");
    setDetune(val);
}
Oscillator::Oscillator(void)
{
  m_tempo = 120.0f;

  m_sync = true;

  m_waveform = k_sine;

  m_startphase = 0.0;
  m_phase=m_startphase;
  m_pitch = 0.0f;
  m_detune = 0.0f;
  m_semi = 0.0f;
  m_pw = 0.0f;
  m_pwm = 0.0f;
  m_pw_mod = 0.0f;
  m_pitch_mod = 0.0f;

  //noise generation
  m_gaussian_noise_constant_a = 0x67452301;
  m_gaussian_noise_constant_c = static_cast<int>(0xefcdab89);
  m_sampleandhold_period=1;
  m_sampleandhold_counter=0;
  m_sample = 0.0f;
  m_fintmax = static_cast<float>(std::numeric_limits<int>::max());

  isActive=false;

  setOscMode(k_oscmode_oscillator);
  setDetune(0.5f);
  setSemi(0.5f);
  setVolume(1.0f);
  setPW(0.5f);
  setPWM(0.0f);
  setPitch(440.0f);

  /* populate bpm denominators
     4 full notes				= BPM / 960 => speed 0
     Dotted 2 full notes			= BPM / 720
     Triplets for 4 full notes	= BPM / 640
     2 full notes				= BPM / 480
     Dotted full note			= BPM / 360
     Triplets for 2 full notes	= BPM / 320
     Full note					= BPM / 240
     Dotted-half note			= BPM / 180
     Triplet-full note			= BPM / 160
     Half note					= BPM / 120
     Dotted-quarter note			= BPM / 90
     Triplet-half note			= BPM / 80
     Quarter note				= BPM / 60
     Dotted-eighth note			= BPM / 45
     Triplet-quarter note		= BPM / 40
     Eighth note					= BPM / 30
     Dotted-sixteenth note		= BPM / 22.5
     Triplet-eighth note			= BPM / 20
     Sixteenth note				= BPM / 15
     Dotted-32th note			= BPM / 11.25
     Triplet-sixteenth note		= BPM / 10
     32th note					= BPM / 7.5
     Dotted-64th note			= BPM / 5.5125
     Triplet-32th note			= BPM / 5
     64th note					= BPM / 3.75
     Dotted-128th note			= BPM / 2.75625
     Triplet-64th note			= BPM / 2.5
     128th note					= BPM / 1.875
     Triplet-128th note			= BPM / 1.25 => speed g_num_bpm_synced_lfo_speeds-1
     */
//TODO: less hardcoding
  m_bpm_denominators[0]=960.0f;
  m_bpm_denominators[1]=720.0f;
  m_bpm_denominators[2]=640.0f;
  m_bpm_denominators[3]=480.0f;
  m_bpm_denominators[4]=360.0f;
  m_bpm_denominators[5]=320.0f;
  m_bpm_denominators[6]=240.0f;
  m_bpm_denominators[7]=180.0f;
  m_bpm_denominators[8]=160.0f;
  m_bpm_denominators[9]=120.0f;
  m_bpm_denominators[10]=90.0f;
  m_bpm_denominators[11]=80.0f;
  m_bpm_denominators[12]=60.0f;
  m_bpm_denominators[13]=45.0f;
  m_bpm_denominators[14]=40.0f;
  m_bpm_denominators[15]=30.0f;
  m_bpm_denominators[16]=22.5f;
  m_bpm_denominators[17]=20.0f;
  m_bpm_denominators[18]=15.0f;
  m_bpm_denominators[19]=11.25f;
  m_bpm_denominators[20]=10.0f;
  m_bpm_denominators[21]=7.5f;
  m_bpm_denominators[22]=5.5125f;
  m_bpm_denominators[23]=5.0f;
  m_bpm_denominators[24]=3.750f;
  m_bpm_denominators[25]=2.75625f;
  m_bpm_denominators[26]=2.5f;
  m_bpm_denominators[27]=1.875f;
  m_bpm_denominators[28]=1.25f;
}