
Envoy� par
msdaath
Par contre je ne comprends toujours vraiment � quoi sert le getByteFrequencyData malgr�s la doc, enfin surtout j'ai l'impression de l'utiliser pour rien l� ?
Dans le but d'utiliser le moins de m�moire possible, getByteFrequencyData ne cr�e pas un tableau � 1024 entr�es � chaque fois que tu l'appelles. C'est � toi de lui dire dans quel tableau tu veux qu'il mette les donn�es. Ainsi, quand tu ex�cutes l'instruction analyser.getByteFrequencyData(FFTData), l'analyseur met ses donn�es dans FFTData.
Une autre question que je me pose, pourquoi les valeurs mettent elles du temps � descendre � 0 ? (c'est � dire que m�me lorsque la musique ne joue plus, les valeurs ne baissent pas brutalement.
Une partie de la r�ponse se trouve ici. L'analyseur a une propri�t� smoothingTimeConstant �gale � 0.8 par d�faut et qui est une sorte de � facteur d'amortissement � qui fait que les valeurs mettent un certain temps � changer.
Et en petite pr�cision, y a t'il toujours au moins 1024 valeurs ? les valeurs >20 n'ont pas vraiment de sens, ne serait t'il pas plus exacte d'ajouter un if(array[i]>=20) dans le while de ma fonction getMoyenne ?
L� c'est une histoire de jugement personnel� Et de maths ! En effet, la d�composition d'un signal sonore se fait par une transform�e de Fourier (c'est un proc�d� math�matique qui permet de s�parer les fr�quences pures dans un signal complexe), et l'API html5 utilise une impl�mentation connue de ce proc�d�, qui s'appelle Fast Fourier Transform (d'o� les initiales FFT). On demande � cet algorithme une certaine r�solution, la � taille � de la transform�e, qui d�termine le nombre de bandes de fr�quences dans le r�sultat. Cette taille est la propri�t� fftSize de l'analyseur, qui est 2048 par d�faut. Pour une raison qui m'�chappe un peu je l'avoue, la taille du tableau doit �tre �gale � la moiti� de fftSize.
Demander une plus grande taille donnera des r�sultats plus pr�cis mais prendra plus de temps de calcul. � l'inverse, avec une fftSize plus petite, l'algo sera plus rapide mais moins pr�cis.
Tu peux tout � fait filtrer les valeurs inf�rieures � 20, mais ce sera peut-�tre plus utile pour toi de jouer sur les propri�t�s minDecibels et maxDecibels de l'analyseur. N'h�site pas � faire des tests !
Encore une fois il n'est pas garanti que le code soit d�pourvu de lignes aberrantes !
Le seul truc un peu g�nant c'est les cha�nes pass�es � setTimeout. Passe directement tes fonctions, c'est plus propre :
window.setTimeout(printHz, 500);
Partager