Récupérer la fréquence d'un son mediaElement
Bonsoir à tous, j'ai déjà vu pas mal de sujets sur différents forums à propos de ça, mais honnêtement impossible de m'en sortir.
J'aimerais récuperer la fréquence d'un musique que je récupere via l'API de deezer pour l'adapter dans des jeux (il s'agit d'un projet de fin d'année).
Mais je suis coincé au début : Obtenir la fréquence. Je précise que je débute complètement dans cette utilisation de l'API et que je n'ai eu aucun cours dessus, donc il est possible que certaines choses soient aberrantes.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <html>
<script type="text/javascript"></script>
<script type="text/javascript" src="./JS/jquery.js"></script>
</head>
<body>
<audio controls autoplay id="player" crossorigin="anonymous">
<source src="<?php echo ($resultat[" data "][0]["preview "]); ?>" type="audio/mpeg">
</audio>
<div>
<input id="slider" type="range" min="100" max="22000" value="100" />
<div id="freq-display">100</div>
</div>
</body>
</html> |
Voici donc l'html associé, le lecteur recoit la requête PHP, aucun soucis dans la diffusion.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| var ctx = new (window.AudioContext || window.webkitAudioContext)();
var audioEl = document.getElementById("player");
var elSource = ctx.createMediaElementSource(audioEl);
elSource.connect(ctx.destination);
var analyser = ctx.createAnalyser();
var array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(array);
window.setTimeout("printHz()",1000);
function printHz(evt){
console.log(analyser)
console.log(array);
window.setTimeout("printHz()",1000);
} |
Donc là techniquement j'en suis ici (j'ai essayé d'autres choses mais rien n'y fait).
le console.log(elSource) m'affiche bien les caractéristiques du lecteur, si je console.log(analyser) de même, j'obtiens des informations. Seulement voilà, cela ne me permet pas de déterminer la fréquence
je vois qu'il faut utiliser quelque chose du type
Code:
1 2
| var array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(array); |
mais j'obtiens un tableau de 1024 cases 0 au lieu d'une alternance 0/1.
Donc voilà, je ne sais pas si c'est très clair (ça ne l'est pas beaucoup pour moi) mais merci d'avance si quelqu'un qui maîtrise veut bien se pencher dessus !