User Tools

Site Tools


javascript:electronic-music-tools:1.18_using_envelopes

https://live.codecircle.com/d/n2Y3PmZEHoKu9b93r

var contexte_audio = window.AudioContext || window.webkitAudioContext;

var contexte = new contexte_audio();

document.body.addEventListener('keydown', jouer_note, false);

function jouer_note () {
  /**/

  // créer un oscillateur
  var oscillateur = contexte.createOscillator();

  // on pourrait changer le type d'oscillateur :
  //oscillateur.type = 'triangle';
  //oscillateur.type = 'square';
  //oscillateur.type = 'sine';

  /* comme on va en créer plusieurs, pour que l'addition de leur signal ne dépasse pas 1, on utilise un amplificateur pour diminuer le signal de chaque */
  var amplificateur = contexte.createGain();

  // on part à 0
  amplificateur.gain.value = 0;

  // régler la fréquence/pitch
  // entre 200 et 1000
  oscillateur.frequency.value = Math.random() * 800 + 200;

  // on le connecte à l'amplificateur à la sortie audio
  oscillateur.connect( amplificateur );

  // que l'on le connecte à la sortie audio
  amplificateur.connect( contexte.destination );

  // enveloppe

  // retourne un flottant correspondant au nombre de secondes écoulées depuis le début du programme
  var instant = contexte.currentTime;

  var attaque = {
    gain: 0.1,
    delai: 0.25,
  };

  var chute = {
    gain: 0.085,
    delai: attaque.delai + 0.25,
  };

  var maintien = {
    gain: 0.085,
    delai: chute.delai + 0.75,
  };

  var extinction = {
    gain: 0,
    delai: maintien.delai + 0.25,
  };

  // attaque (attack)

  amplificateur.gain.linearRampToValueAtTime ( attaque.gain, instant + attaque.delai);

  // chute (decay)

  amplificateur.gain.linearRampToValueAtTime ( chute.gain, instant + chute.delai);

  // maintien (sustain)

  amplificateur.gain.linearRampToValueAtTime ( maintien.gain, instant + maintien.delai);

  // extinction (release)

  amplificateur.gain.linearRampToValueAtTime ( extinction.gain, instant + extinction.delai);

  // on le démarre
  oscillateur.start();

  oscillateur.stop( instant + extinction.delai + 1 );
}

[lien de l'exemple](https://live.codecircle.com/d/XfoN9skouxfrjKqwY)

javascript/electronic-music-tools/1.18_using_envelopes.txt · Last modified: 2017/07/19 22:08 by leo