User Tools

Site Tools


javascript:electronic-music-tools:1.20_fiddling_with_the_filter

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

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

var notes = {
    a: 261.63, // C4
    z: 293.66, // D4
    e: 329.63, // E4
    r: 349.23, // F4
    t: 392.00, // G4
    y: 440.00, // A4
    u: 493.88, // B4

    q: 523.25, // C5
    s: 587.33, // D5
    d: 659.25, // E5
    f: 698.46, // F5
    g: 783.99, // G5
    h: 880.00, // A5
    j: 987.77, // B5
};

var contexte = new contexte_audio();

var oscillateur = contexte.createOscillator();

// type le plus riche d'oscillateur (moins qu'un noise mais le plus riche qui soit harmonique)
oscillateur.type = 'sawtooth';

var filtre = contexte.createBiquadFilter();
// par défaut, low-pass filter, filtre les hautes fréquences

// par défaut, cutoff = 100
filtre.frequency.value = 200;

oscillateur.connect( filtre );

filtre.connect( contexte.destination );

oscillateur.start();

// on écoute les mouvement souris dans la fenêtre
document.body.addEventListener('mousemove', changer_frequence_oscillateur, false);

function changer_frequence_oscillateur( frequence ) {
  /* change la fréquence de l'oscillateur */
  oscillateur.frequency.value = frequence;
}

function changer_q_filtre ( q ) {
  // Q, which is the emphasis on the filter, or the resonance is another way of referring to it. So filter.Q.value, capital Q, equals mouse y, let's just put mouse y straight into it. This might be pretty gnarly because the key probably doesn't want to go that high.
  filtre.Q.value = q;
}

function changer_frequence_filtre( frequence ) {
  /* change la fréquence de l'oscillateur en fonction de la position de la souris dans la fenêtre (verticalement) */
  filtre.frequency.value = frequence;
}

function mouvement_souris ( evenement ) {
  changer_frequence_filtre( evenement.clientY * 10 );
  changer_q_filtre( evenement.clientX / 10 );
}

document.addEventListener( 'mousemove', mouvement_souris, false );

document.addEventListener( 'keyup', function ( evenement ) {
  // on récupère la touche qui a été relâchée
  var touche = evenement.key;

  // on essaye de changer de note sur la base de la touche
  try {
    changer_frequence_oscillateur( notes[ touche ] );
  } catch (e) {}
}, false);

[lien sketch](https://live.codecircle.com/d/B8xQaESFPA2BXw2zE) [doc biquadfilter](https://developer.mozilla.org/en-US/docs/Web/API/BiquadFilterNode/type)

javascript/electronic-music-tools/1.20_fiddling_with_the_filter.txt · Last modified: 2017/07/19 22:10 by leo