javascript:electronic-music-tools:3.6_playing_samples_with_a_clock
This is an old revision of the document!
[lien](https://live.codecircle.com/d/8RGmYJbokTdfnyWjo)
Première manière, mais timing pas très bon, meilleure façon par la suite.
javascript
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 ) {
/* Joue le sample s'il est trouvé
String -> 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 lance
player.start();
// en cas d'erreur
} catch (e) {
console.error('erreur : Samples_set.jouer :', e);
}
}
};
var contexte_audio = window.AudioContext || window.webkitAudioContext;
var contexte = new contexte_audio();
var batterie = new Samples_set( contexte );
batterie.charger( 'charleston', 'cl_hat_3001.wav');
var sequence = [1, 1, 0, 1, 0, 1, 0];
var etape = 0;
setInterval(function(){
if (sequence[etape % sequence.length] == 1){
batterie.jouer('charleston');
}
etape = etape + 1;
}, 250);
javascript/electronic-music-tools/3.6_playing_samples_with_a_clock.1500497463.txt.gz · Last modified: 2017/07/19 22:51 by leo