[AS3] Soundmixer.computeSpectrum ou visualisation sonore
16 janvier 2008 – 14:13Avec l'arrivée de l'actionscript 3, la représentation graphique d'une onde sonore est possible. Jusqu'à présent on se contentait de tricher graphiquement ou d'utiliser un fichier externe contenant les valeurs du spectre sonore. La nouvelle classe SoundMixer dispose d'une propriété computeSpectrum qui remplit un ByteArray (propre à l'as 3 aussi) avec ce qu'on pourrait appeler une prise de vue du spectre sonore, autrement dit à chaque fois que vous appelez computeSpectrum il retourne l'onde à ce moment précis. Si vous tracez le ByteArray vous verrez qu'il contient des données en binaire, donc inutilisable directement. La classe ByteArray contient une série de méthode pour convertir les données en format utilisable (integer, float, multibyte, boolean, cfr. documentation). A partir de cette conversion on peut expérimenter différentes manières de représenter graphiquement le spectre sonore.
Une version toute simple en actionscript donnerait ceci :
var music:Sound = new Sound(new URLRequest("filename.mp3")); music.play(); var ba:ByteArray = new ByteArray(); addEventListener(Event.ENTER_FRAME, handlerEnterFrame); function handlerEnterFrame(e:Event):void { SoundMixer.computeSpectrum(ba,true); this.graphics.clear(); this.graphics.lineStyle(1,0x33FFFF); for(var i:uint = 0; i < 512; i++){ var spectrum:Number = ba.readFloat()*200; this.graphics.drawRect(i,0,1,spectrum); } }
Si vous recopiez ce script en spécifiant le nom d'un fichier mp3 vous devriez voir un spectre sonore. On peut d'ailleurs distinguer le canal gauche du canal droit, en effet computeSpectrum renvoit un ByteArray de 512 valeurs entre -1 et 1, 256 pour le canal gauche et 256 pour le canal droit.
Ci-dessous un exemple où vous pouvez modifier quelques paramètres :
Le paramètre FFT fait partie de la propriété computeSpectrum. Si il est à TRUE, il va effectuer une transformation de Fourier qui va renvoyer un vrai spectre sonore visuel (on distingue d'ailleurs bien le gauche et le droit), à FALSE il va renvoyer l'onde sonore à l'état brute.
A partir de ça on peut expérimenter différentes façons de visualiser l'onde sonore, j'essayerai d'en poster quelques-unes.
6 Responses to “[AS3] Soundmixer.computeSpectrum ou visualisation sonore”
Merci pour ce petit tutorial, comment est-ce possible de simplement afficher un seul canal par exemple, et uniquemment 5 barres par exemple, représentatif de frequences bien représentatives ??
Merci d’avance.
By MATT on avr 23, 2008
Pour sélectionner le canal il suffit d’utiliser les 256 valeurs allant de 0 à -1 ou de 0 à 1.
Si tu veux changer l’échelle du spectre, tu peux soit le faire toi même en convertissant les données pour obtenir une moyenne sur “5 barres” soit tu peux utiliser le paramètre “stretchFactor” de la méthode computeSpectrum qui comme indiqué dans la doc :
“The resolution of the sound samples. If you set the stretchFactor value to 0, data is sampled at 44.1 KHz; with a value of 1, data is sampled at 22.05 KHz; with a value of 2, data is sampled 11.025 KHz; and so on. “
By Sakana on avr 28, 2008
tuto… clair, net et vraiment facile à faire….. Un grand merci à toi :p
By nicou on nov 6, 2008
A la ligne la ” for(var i:uint = 0; i < 512; i++){” j’ai un message d’erreur 1084 et je n’arrive pas a trouver pourquoi. Apparement c’est < qu’il ne comprend pas… je ne suis pas sure…
By nicou on nov 6, 2008
Hello,
C’est quoi le message d’erreur exacte ?
T’as pas une faute de frappe… parce que je vois pas comme ça. Si t’as copier-coller le code peut-être que des caractères sont mal interprété.
S.
By Sakana on nov 7, 2008
oui, c’est bien le message d’erreur exacte!
j’ai retiré < et ca fonctionne.
merci
By nicou on déc 12, 2008