Browse Source

Fix minor error in linear interpolation (thanks endolith)

fixes #113
dds
PaulStoffregen 9 years ago
parent
commit
5ad3b189a6
1 changed files with 3 additions and 3 deletions
  1. +3
    -3
      synth_sine.cpp

+ 3
- 3
synth_sine.cpp View File

val2 = AudioWaveformSine[index+1]; val2 = AudioWaveformSine[index+1];
scale = (ph >> 8) & 0xFFFF; scale = (ph >> 8) & 0xFFFF;
val2 *= scale; val2 *= scale;
val1 *= 0xFFFF - scale;
val1 *= 0x10000 - scale;
#if defined(KINETISK) #if defined(KINETISK)
block->data[i] = multiply_32x32_rshift32(val1 + val2, magnitude); block->data[i] = multiply_32x32_rshift32(val1 + val2, magnitude);
#elif defined(KINETISL) #elif defined(KINETISL)
val2 = AudioWaveformSine[index+1]; val2 = AudioWaveformSine[index+1];
scale = (ph >> 8) & 0xFFFF; scale = (ph >> 8) & 0xFFFF;
val2 *= scale; val2 *= scale;
val1 *= 0xFFFF - scale;
val1 *= 0x10000 - scale;
//block->data[i] = (((val1 + val2) >> 16) * magnitude) >> 16; //block->data[i] = (((val1 + val2) >> 16) * magnitude) >> 16;
block->data[i] = multiply_32x32_rshift32(val1 + val2, magnitude); block->data[i] = multiply_32x32_rshift32(val1 + val2, magnitude);
// -32768 = no phase increment // -32768 = no phase increment
val2 = AudioWaveformSine[index+1]; val2 = AudioWaveformSine[index+1];
scale = (ph >> 8) & 0xFFFF; scale = (ph >> 8) & 0xFFFF;
val2 *= scale; val2 *= scale;
val1 *= 0xFFFF - scale;
val1 *= 0x10000 - scale;
block->data[i] = (val1 + val2) >> 16; block->data[i] = (val1 + val2) >> 16;
ph += inc; ph += inc;
} }

Loading…
Cancel
Save