Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 2 of 2

Thread: Insect in object AudioSynthWaveformSineModulated when no modulation input present.

  1. #1
    Member
    Join Date
    Nov 2017
    Location
    Belgium
    Posts
    33

    Insect in object AudioSynthWaveformSineModulated when no modulation input present.

    When no modulation input is present on an AudioSynthWaveformSineModulated object, variable "magnitude" is not taken into account, in other words amplitude has no effect, output is at maximum.

    error in line 195 of /Audio/synth_sine.cpp
    Code:
    			block->data[i] = (val1 + val2) >> 16;
    fix:
    Code:
    			block->data[i] = multiply_32x32_rshift32(val1 + val2, magnitude);
    If you prefer bigger chunks of code or the full zipped file, please tell.

    The next piece of code demonstrates the bug and that the fix is working when applied.
    sine_fm1, frequency modulated by sine1, goes to left.
    sine_fm2, with no modulation input, goes to right.
    Every second, amplitude of sine_fm1 & sine_fm2 is toggled between 0 & 1.
    So we should have 1sec of sound and 1sec of silence alternately, which clearly doesn't happen on the second channel.

    Click image for larger version. 

Name:	Screen Shot 2017-12-10 at 02.57.15.png 
Views:	28 
Size:	17.5 KB 
ID:	12218

    Code:
    #include <Audio.h>
    
    // GUItool: begin automatically generated code
    AudioSynthWaveformSine   sine1;          //xy=94,251
    AudioSynthWaveformSineModulated sine_fm1;       //xy=248,251
    AudioSynthWaveformSineModulated sine_fm2;       //xy=248,304
    AudioOutputI2S           i2s1;           //xy=455,257
    AudioOutputAnalogStereo  dacs1;          //xy=456,298
    AudioConnection          patchCord1(sine1, sine_fm1);
    AudioConnection          patchCord2(sine_fm1, 0, i2s1, 0);
    AudioConnection          patchCord3(sine_fm1, 0, dacs1, 0);
    AudioConnection          patchCord4(sine_fm2, 0, i2s1, 1);
    AudioConnection          patchCord5(sine_fm2, 0, dacs1, 1);
    AudioControlSGTL5000     sgtl5000_1;     //xy=104,305
    // GUItool: end automatically generated code
    
    void setup() {
      AudioMemory(20);
      sgtl5000_1.enable();
      sgtl5000_1.volume(0.5);
    
      sine1.frequency(9);
      sine1.amplitude(1.0);
      sine_fm1.frequency(440.0);
      sine_fm1.amplitude(1.0);
      sine_fm2.frequency(440.0);
      sine_fm2.amplitude(1.0);
    }
    
    void loop() {
      sine_fm1.amplitude(1.0);
      sine_fm2.amplitude(1.0);
      delay(1000);
      sine_fm1.amplitude(0.0);
      sine_fm2.amplitude(0.0);
      delay(1000);
    }

  2. #2

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •