Jouer des samples¶
Avertissement
Attention, ce qui suit nécessite de travailler sur un serveur local en raison des requêtes CORS.
// on créé une référence à l'interface AudioContext selon ce qui est disponible (si window.AudioContext n'est pas disponible on essaye avec webkitAudioContext)
var AudioContext = window.AudioContext || window.webkitAudioContext;
// on créé un objet contexte qui nous permet de nous connecter au système audio de l'ordinateur, et de lui envoyer du son
var contexte_audio = new AudioContext();
// dictionnaire de samples
var samples = {};
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_audio.decodeAudioData( donnees_audio, function( buffer ) {
// on ajoute le buffer à notre objet samples
samples[nom] = buffer;
});
};
// on envoie la requête
requete.send();
}
function jouer_sample ( nom ) {
/* joue un sample donné */
// on créé un BufferSource
var player = contexte_audio.createBufferSource();
// on récupère un buffer déjà chargé
player.buffer = samples[ nom ];
// on paramètre pour éviter la boucle
player.loop = false;
// on le connecte au contexte audio
player.connect(contexte_audio.destination);
// on le lance
player.start();
}
charger_un_sample( 'chemin/des/samples/CB.WAV', 'cb');
charger_un_sample( 'chemin/des/samples/CH.WAV', 'ch');
charger_un_sample( 'chemin/des/samples/CL.WAV', 'cl');
charger_un_sample( 'chemin/des/samples/CP.WAV', 'cp');
charger_un_sample( 'chemin/des/samples/MA.WAV', 'ma');
charger_un_sample( 'chemin/des/samples/RS.WAV', 'rs');
// on écoute le clavier
document.addEventListener( 'keyup', function ( evenement ) {
// si l'accès à l'audio était suspendu
if ( contexte_audio.state === 'suspended' ) {
// on lève cette suspension
contexte_audio.resume();
}
// si touche espace
if ( evenement.key === ' ' ) {
// on joue notre sample
jouer_sample( 'cb' );
}
}, false);