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; }
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; }
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; }