javascript:electronic-music-tools:4.6_algorithmic_rhythm
https://live.codecircle.com/d/WL5kEqECrBf7JmA4t
javascript
var contexte = (function(){
var contexte_audio = window.AudioContext || window.webkitAudioContext;
var contexte = new contexte_audio();
return contexte;
})();
function Samples_set ( contexte ) {
/* Set de samples permettant de charger simplement des samples et de les jouer */
this.contexte = contexte;
this.samples_set = {};
}
Samples_set.prototype.charger = function ( nom, url ) {
/* Charge le sample et l'ajoute au set
String, String -> Void */
// on créé une référence à this (notre occurence de Sample_set)
var self = this;
// on créé l'objet requête
var requete = new XMLHttpRequest();
// que l'on paramètre :
// 1 : requête GET, url de la requête, requête asynchrone : true
requete.open('GET', url, true);
// 2 : type de réponse
requete.responseType = 'arraybuffer';
// 3 : écouteur onload et fonction à exécuter alors
requete.onload = function () {
// les données audio
var donnees_audio = requete.response;
// sont passées pour décodage au contexte audio
contexte.decodeAudioData( donnees_audio, function( buffer ) {
// on ajoute le buffer à notre objet instruments
self.samples_set[nom] = buffer;
});
};
// on envoie la requête
requete.send();
};
Samples_set.prototype.jouer = function ( nom, instant ) {
/* Joue le sample à un instant t s'il est trouvé
String, Number -> Void */
// si le sample existe, a été chargé
if ( this.samples_set[nom] ) {
try {
//on créé un BufferSource
var player = contexte.createBufferSource();
// on y charge notre sample
player.buffer = this.samples_set[nom];
// on spécifie qu'on ne le joue pas en boucle
player.loop = false;
// on le connecte au contexte
player.connect(this.contexte.destination);
// on le lancera à l'instant t
player.start( instant );
// en cas d'erreur
} catch (e) {
console.error('erreur : Samples_set.jouer :', e);
}
}
};
var algo_hat = (function(){
var composant = {};
var batterie = new Samples_set( contexte );
var intervalle;
batterie.charger( 'charleston', 'cl_hat_3001.wav');
function jouer () {
if ( Math.random() > 0.5 ) {
batterie.jouer( 'charleston' );
}
}
composant.lancer = function () {
intervalle = setInterval( jouer, 125 );
};
return composant;
})();
algo_hat.lancer();
javascript/electronic-music-tools/4.6_algorithmic_rhythm.txt · Last modified: 2017/07/19 23:25 by leo