|<- [[3.3 Interesting drum machine tracks]]|[[3.6 Playing samples with a clock]] ->| [load and play a sample code](https://live.codecircle.com/d/HfvHJWxKLPJBxYpTW) [une collection de samples de batterie gratuits par Alex McLean](https://github.com/tidalcycles/Dirt-Samples) https://live.codecircle.com/d/KXB8oApK6uN4Syxpc javascript var contexte_audio = window.AudioContext || window.webkitAudioContext; var contexte = new contexte_audio(); var instruments = {}; function charger_un_sample ( url, nom ) { /* charge un sample dont l'URL est donnée en paramètre 1 et le place dans l'objet instrument à l'emplacement de la clé donnée String, Function -> Void */ // 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 a 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 instruments[nom] = buffer; }); }; // on envoie la requête requete.send(); } charger_un_sample( 'cl_hat_3001.wav', 'charleston'); function charleston(){ var player = contexte.createBufferSource(); player.buffer = instruments.charleston; player.start(); player.loop = false; player.connect(contexte.destination); } document.addEventListener( 'keyup', function ( evenement ) { charleston(); }, false); ==== samples_set.js ==== 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'); document.addEventListener( 'keyup', function ( evenement ) { batterie.jouer('charleston'); }, false);