Bonjour,
il n'y a pas besoin d'avoir le moindre player audio dans le code HTML.
On peut très bien jouer du son sans balise <audio>.
VERSION 1 :
1- Tout ce dont tu as besoin dans le code HTML, ce sont les "touches" :
1 2 3 4 5 6 7 8 9 10 11
| <div class="touches">
<div data-id="1"><img src="../images/logo_son.png" /><br/>Son 1</div>
<div data-id="2"><img src="../images/logo_son.png" /><br/>Son 2</div>
<div data-id="3"><img src="../images/logo_son.png" /><br/>Son 3</div>
<div data-id="4"><img src="../images/logo_son.png" /><br/>Son 4</div>
<div data-id="5"><img src="../images/logo_son.png" /><br/>Son 5</div>
<div data-id="6"><img src="../images/logo_son.png" /><br/>Son 6</div>
<div data-id="7"><img src="../images/logo_son.png" /><br/>Son 7</div>
<div data-id="8"><img src="../images/logo_son.png" /><br/>Son 8</div>
...
</div> |
L'attribut data-id va permettre d'identifier le son à jouer.
2- Dans le script JavaScript :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| "use strict";
// -------------
// 1- Liste des URL des fichiers audio
const musics = [
"", // l'index commence à 0 (zéro) : on ne met rien ici
"https://www.memoclic.com/medias/sons-wav/2/729.wav", // 1
"https://www.memoclic.com/medias/sons-wav/2/728.wav", // 2
"https://www.memoclic.com/medias/sons-wav/2/727.wav", // ...
"https://www.memoclic.com/medias/sons-wav/2/726.wav",
"https://www.memoclic.com/medias/sons-wav/2/725.mp3",
"https://www.memoclic.com/medias/sons-wav/2/724.mp3",
"https://www.memoclic.com/medias/sons-wav/2/723.mp3",
"https://www.memoclic.com/medias/sons-wav/2/722.mp3",
];
// -------------
// 2- Touches
const touches = document.querySelectorAll(".touches > div"); // on cible les touches
touches.forEach(function(touche) {
touche.addEventListener("click", function() { // au click sur une touche
let id = this.dataset.id; // on récupère le contenu de data-id
playSound(id);
});
});
// ------------------------
// 3- player audio - SANS balise <audio> dans la page
function playSound(id) {
var audio = new Audio( musics[id] ); // on crée (virtuellement) le player audio
audio.play();
} |
3- Un peu de CSS :
1 2 3 4 5 6 7 8
| .touches > div {
display: inline-block;
border: 1px solid green;
min-width: 60px;
height: 60px;
text-align:center;
cursor:pointer;
} |
VERSION 2 :
Néanmoins, si tu veux vraiment un lecteur audio dans le code HTML (pour avoir accès aux boutons de contrôle du son, entre autres) :
1- rajoute juste :
<audio id="player-audio" src="" controls></audio>
2- remplace la fonction playSound() par :
1 2 3 4 5 6 7
| // ------------------------
// 3- player audio - AVEC balise <audio> dans la page
const player_audio = document.getElementById('player-audio');
function playSound(id) {
player_audio.src = musics[id]; // on applique l'URL du fichier musique
player_audio.play();
} |
Remarque :
- la solution SANS balise <audio> permet de jouer plusieurs sons EN MEME TEMPS
- la solution AVEC balise <audio> ne permet de jouer QU'UN SEUL son à la fois.
Envoyé par
danielhagnoul
Mon exemple ne traite que bip1 à bip9, pour en traiter plusieurs dizaines....
@danielhagnoul
Cette problématique se règle très facilement (et sans bidouillage * ) :
document.querySelector('#Son' + ev.target.id.replace('bip','')).play();
* avec ev.target.id.slice(-2), tu ne peux aller QUE jusqu'à bip99... (et ça oblige effectivement à écrire bip01, bip02,..., bip09)
Quid de bip100 et suivants ?
ev.target.id.replace('bip','') est LA solution fiable
Partager