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
                
                