Example #1
0
void module_process_frame(void) { 
  static fract32 tmpDel, tmpSvf;
  u8 i;

  tmpDel = 0;
  tmpSvf = 0;

  // mix inputs to delay lines
  mix_del_inputs();

  /// TEST

  for(i=0; i<NLINES; i++) {
    // process fade integrator
    //    lines[i].fadeWr = filter_ramp_tog_next(&(lpFadeWr[i]));
    lines[i].fadeRd = filter_ramp_tog_next(&(lpFadeRd[i]));

    // process delay line
    tmpDel = delayFadeN_next( &(lines[i]), in_del[i]);	    
    // process filters
    // check integrators for filter params
    if( !(svfCutSlew[i].sync) ) {
      filter_svf_set_coeff( &(svf[i]), filter_1p_lo_next(&(svfCutSlew[i])) );
    }
    if( !(svfRqSlew[i].sync) ) {
      filter_svf_set_rq( &(svf[i]), filter_1p_lo_next(&(svfRqSlew[i])) );
    }
    tmpSvf = filter_svf_next( &(svf[i]), tmpDel);  
    // mix
    tmpDel = mult_fr1x32x32( tmpDel, mix_fdry[i] );
    tmpDel = add_fr1x32(tmpDel, mult_fr1x32x32(tmpSvf, mix_fwet[i]) );

    out_del[i] = tmpDel;

  } // end lines loop 

  // mix outputs to DACs
  /// TEST
  /* out[0] = in[0]; */
  /* out[1] = in[1]; */
  /* out[2] = in[2]; */
  /* out[3] = in[3]; */
  out[0] = out[1] = out[2] = out[3] = 0x00000000;
  mix_outputs();

  /// do CV output
  if( cvSlew[cvChan].sync ) { ;; } else { 
    cvVal[cvChan] = filter_1p_lo_next(&(cvSlew[cvChan]));
    dac_update(cvChan, cvVal[cvChan]);
  }
 
  if(++cvChan == 4) {
    cvChan = 0;
  }
}
Example #2
0
// frame calculation
static void calc_frame(void) {
#if 1
  u8 i;
  wavesVoice* v;

  for(i=0; i<WAVES_NVOICES; i++) {
    v = &(voice[i]);
    // oscillator class includes hz and mod integrators
    v->oscOut = shr_fr1x32( osc_next( &(v->osc) ), 2);
    // phase mod with fixed 1-frame delay
    osc_pm_in( &(v->osc), v->pmIn );
    // shape mod with fixed 1-frame delay
    osc_wm_in( &(v->osc), v->wmIn );
    // process filter integrators and set 
    filter_svf_set_coeff( &(v->svf), filter_1p_lo_next( &(v->cutSlew) ) );
    filter_svf_set_rq( &(v->svf), filter_1p_lo_next( &(v->rqSlew) ) );
    // process filter
    v->svfOut = filter_svf_next( &(v->svf), shr_fr1x32(v->oscOut, 1) );
    // process amp smoother
    v->amp  = filter_1p_lo_next( &(v->ampSlew) );
    // mix to output bus
    v->out = mult_fr1x32x32(v->amp,
			    add_fr1x32(mult_fr1x32x32( v->oscOut, v->fDry),
				       mult_fr1x32x32( v->svfOut, v->fWet)
				       )
			    );
  } // end voice loop

  /// FIXME: later, more voices, mod matrix, arbitrary mod delay.
  /// for now, simple direct mod feedback routing and 1-frame delay.
  voice[0].pmIn = voice[1].oscOut;
  //  voice[0].wmIn = voice[1].oscOut << 1;
  voice[1].pmIn = voice[0].oscOut;
  //  voice[1].wmIn = voice[0].oscOut << 1;
  
  // mix outputs using matrix
    mix_outputs();
  
  

#else
  /* //  fract32 out1, out0; */
 
  /* // osc output */
  /* oscOut1 = shr_fr1x32(osc_next( &(osc1) ), 2); */
  /* oscOut0 = shr_fr1x32(osc_next( &(osc0) ), 2); */

  /* // phase mod feedback with 1frame delay */
  /* osc_pm_in( &osc1, oscOut0 ); */
  /* osc_pm_in( &osc0, oscOut1 ); */
  /* // shape mod feedback with 1frame delay */
  /* osc_wm_in( &osc1, oscOut0 ); */
  /* osc_wm_in( &osc0, oscOut1 ); */

  /* /////////// */
  /* /////////// */
  /* // apply filters */

  /* if( !(svfCutSlew[i].sync) ) { */
  /*   filter_svf_set_coeff( &(svf[i]), filter_1p_lo_next(&(svfCutSlew[i])) ); */
  /* } */
  /* if( !(svfRqSlew[i].sync) ) { */
  /*   filter_svf_set_rq( &(svf[i]), filter_1p_lo_next(&(svfRqSlew[i])) ); */
  /* } */

  /* //  svfOut1 = shl_fr1x32(filter_svf_next( &(svf1), shr_fr1x32(oscOut1, 1)), 1); */
  /* //  svfOut2 = shl_fr1x32(filter_svf_next( &(svf2), shr_fr1x32(oscOut2, 1)), 1); */
  /* svfOut1 = filter_svf_next( &(svf1), shr_fr1x32(oscOut1, 1)); */
  /* svfOut0 = filter_svf_next( &(svf0), shr_fr1x32(oscOut0, 1)); */

  /* ///////// */
  /* ///////// */

  /* // amp smoothers */
  /* oscAmp1 = filter_1p_lo_next(amp1Lp); */
  /* oscAmp0 = filter_1p_lo_next(amp0Lp); */

  /* // apply osc amplitudes and sum  */
  /* oscOut1 = mult_fr1x32x32(oscAmp1, */
  /* 			add_fr1x32(mult_fr1x32x32( oscOut1, fdry1), */
  /* 				   mult_fr1x32x32( svfOut1, fwet1) */
  /* 				   )); */
  
  /* oscOut0 = mult_fr1x32x32(oscAmp0, */
  /* 			add_fr1x32(mult_fr1x32x32( oscOut0, fdry0), */
  /* 				   mult_fr1x32x32( svfOut0, fwet0) */
  /* 				   )); */

  /* //// */
  /* /// fixme: mono */
  /* frameVal = add_fr1x32( oscOut0, oscOut1); */

  /* // mix to output */
  /* //...todo */
  #endif
}