3

I have this script in the header of an HTML file. It works fine with the exception of the line delay.connect(Tone.context.destination); midway down that theoretically adds layering of the sounds in the DuoSynth by starting one of them on a delay.

When it is not commented out, I get this error in the console: Uncaught TypeError: Failed to execute 'connect' on 'AudioNode': No function was found that matched the signature provided.

What am I doing wrong?

<script>
      function makeSynth() {
      let envelope = {
          attack: 0.1,
          release: 4,
          releaseCurve: 'exponential'
      };
      let filterEnvelope = {
          baseFrequency: 440,
          octaves: 3,
          attack: 0,
          decay: 0,
          release: 1000
      };

      return new Tone.DuoSynth({
          harmonicity: .5, 
          detune : 5000,
          volume: -20,
          voice0: {
              oscillator: { type: 'triangle' },
              envelope,
              filterEnvelope
          },
          voice1: {
              oscillator: { type: 'sine' },
              envelope,
              filterEnvelope
          },
          vibratoRate: 0.5,
          vibratoAmount: 0.1 // THIS IS GOOD TO MANIPULATE
      });
  }

      let leftSynth = makeSynth();
      let rightSynth = makeSynth();
      let leftPanner = new Tone.Panner(-0.5).toMaster();
      let rightPanner = new Tone.Panner(0.5).toMaster();
      let echo = new Tone.FeedbackDelay('16n', 0.2);
      let delay = Tone.context.createDelay(6.0); // Borrow the AudioContext from Tone.js
      let delayFade = Tone.context.createGain();

      delay.delayTime.value = 6.0;
      delayFade.gain.value = 0.75;

      leftSynth.connect(leftPanner);
      rightSynth.connect(rightPanner);
      leftPanner.connect(echo);
      rightPanner.connect(echo);



      // var c = canvas.getContext('2d');

      echo.toMaster();
      echo.connect(delay);
      delay.connect(Tone.context.destination);
      delay.connect(delayFade);
      delayFade.connect(delay);

      new Tone.Loop(time => {
      leftSynth.triggerAttackRelease('C6', '1:2', time);

      leftSynth.setNote('G5', '+0:2');
      leftSynth.setNote('C4', '+0:4');

      leftSynth.triggerAttackRelease('G5', '0:2', '+6:0');

      leftSynth.triggerAttackRelease('E4', '0:2', '+11:2');

      leftSynth.triggerAttackRelease('E5', '2:0', '+19:0');
      leftSynth.setNote('G5', '+19:1:2');
      leftSynth.setNote('A5', '+19:3:0');
      leftSynth.setNote('G5', '+19:4:2');
  }, '34m').start();

  new Tone.Loop(time => {



      // Trigger D4 after 5 measures and hold for 1 full measure + two 1/4 notes
      rightSynth.triggerAttackRelease('G6', '1:2', '+5:0');
      // Switch to E4 after one more measure
      rightSynth.setNote('B6', '+6:0');

      // Trigger B3 after 11 measures + two 1/4 notes + two 1/16 notes. Hold for one measure
      rightSynth.triggerAttackRelease('D4', '1m', '+11:2:2');
      // Switch to G3 after a 1/2 note more
      rightSynth.setNote('G3', '+12:0:2');

      // Trigger G4 after 23 measures + two 1/4 notes. Hold for a half note.
      rightSynth.triggerAttackRelease('G4', '0:2', '+23:2');
  }, '37m').start();
</script>
LevelChart8
  • 207
  • 1
  • 8

0 Answers0