Пример #1
0
fract32 delay_next(delayLine* dl, fract32 in) {
  //If you return in, we have a delay of zero length - works!
  //return in;

  buffer_tapN_write(&(dl->tapWr), in);

  fract32 readVal;
  readVal = bufferTap24_8_read( &(dl->tapRd) );


  // advance the write phasor
  //if(dl->runWr) {
    buffer_tapN_next( &(dl->tapWr) );
  //}

  // advance the read phasor
  //if(dl->runRd) {
    bufferTap24_8_next( &(dl->tapRd) );
  //}

//For now the write head always writes over any contents...

//so this is commented
/*
  // figure out what to write
  if(dl->preLevel == 0) {
    if(dl->write) {
      // write and replace
      buffer_tap_write(&(dl->tapWr), in);
    }
  } else if(dl->preLevel < 0) { // consider <0 to be == 1
    if(dl->write) {
      // overdub
      buffer_tap_add(&(dl->tapWr), in);
    }
  } else { // prelevel is non-zero, non-full
    if(dl->write) {
      // write mix
      buffer_tap_mix(&(dl->tapWr), in, dl->preLevel);
    }
  }
  */

  return readVal;
}
Пример #2
0
extern fract32 delay_next(delayLine* dl, fract32 in) {
  fract32 readVal;

  // get read value first.
  // so, setting loop == delaytime gives sensible results (???)
  readVal = buffer_tapN_read( &(dl->tapRd) );

  // figure out what to write
  if(dl->preLevel == 0) {
    if(dl->write) {
      // write and replace
      buffer_tapN_write(&(dl->tapWr), in);
    }
  } else if(dl->preLevel < 0) { // consider <0 to be == 1
    if(dl->write) {
      // overdub
      buffer_tapN_add(&(dl->tapWr), in);
    }
  } else { // prelevel is non-zero, non-full
    if(dl->write) {
      // write mix
      buffer_tapN_mix(&(dl->tapWr), in, dl->preLevel);
    }
  }

  // advance the read phasor 
  if(dl->runRd) {
    buffer_tapN_next( &(dl->tapRd) );
  }

  // advance the write phasor
  if(dl->runWr) {
    buffer_tapN_next( &(dl->tapWr) );
  }
  
  return readVal;
}