Bonjour à tous.
Pour un site personnel, je cherche à coder un accordeur en ligne, avec la web audio API.

Mon problème principal consiste à trouver la fréquence d'un son. J'ai pour cela utilisé un objet AudioAnalyser qui doit analyser le son que je récupère du microphone, et la méthode getByteFrequencyData() pour trouver la fréquence du son.

Petit problème, cette fonction me met les fréquences dans un tableau de bytes, d'une taille de 1024, et je n'arrive pas à bien comprendre ce que sont tous ces numéros.

Je vous met mon code est le lien pour pouvoir tester ce qu'il existe pour l'instant (ne marche pour l'instant qu'avec firefox, mais ça c'est facilement changeable !).
http://www.guitar-side.com/testJs/accordeur_test.php

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
30
31
32
33
34
35
36
37
38
39
40
41
 
<script>
    // Globals
	var aCtx;
	var analyser;
	var microphone;
	navigator.getUserMedia = ( navigator.getUserMedia ||
                       navigator.webkitGetUserMedia ||
                       navigator.mozGetUserMedia ||
                       navigator.msGetUserMedia);
	if (navigator.getUserMedia) {
		navigator.getUserMedia({audio: true}, function(stream) {
			window.audioContext = window.audioContext || window.webkitAudioContext;
			aCtx = new AudioContext();
			analyser = aCtx.createAnalyser();
			microphone = aCtx.createMediaStreamSource(stream);
			microphone.connect(analyser);
			analyser.minDecibels = -90;
			process();
		}, function(err) {
			  console.log("Une erreur est survenue: " +err);
		});
	} else {
		console.log('ça marche pas');
	}
	function process(){
                //boucle pour la récupération des fréquences en temps réel
		setInterval(function(){
			FFTData = new Uint8Array(analyser.frequencyBinCount);
			analyser.getByteFrequencyData(FFTData);
			var freq = document.getElementById("frequency");
			freq.innerHTML = '';
			for(var i=0; i<FFTData.length; i++){
				freq.innerHTML = freq.innerHTML + ' ' + FFTData[i];
			}
		},100);
	}
  </script>
 
  <div id="frequency">
  </div>
Voila, je ne sais pas si parmi vous il y a des habitués de cet API, ou des personnes qui aimeraient voir ses fonctionnalités.
Pour dire vrai, je me demande si utiliser un analyser est une bonne idée, ou si je devrais pas plutôt utiliser un objet BiquandFilterNode ou il y a aussi des possibilité de jouer avec les fréquences.

Enfin voilà, toutes les suggestions sont les bienvenues !