Easy-Design.Net forum




Documentations et Dossiers Création d'un visualiseur de spectre audio Flash CS4+

hight_tower Membre non connecté

Modérateur

Rang

Avatar

Modérateur(s)

Inscrit le : 17/09/2009 à 11h09

Messages: 2298

Le 21/04/2012 à 10h38
But:
Création d'une représentation visuelle d'un fichier audio, en cours de lecture, en exploitant des données butes de l'onde sonore.

Comment:
En utilisant la loi de fourrier http://fr.wikipedia.org/wiki/Conduction_thermique

Explication:
Dans un premier temps vous chargez un fichier MP3 externe au fichier FLA en utilisant les classes Sound, SoundChannel & URLRequest, ce qui permettra de garder la taille SWF au final au minimum, et de changer ce fichier audio sans devoir à ouvrir le logiciel flash.

Voici le code

Normalement le code n'est pas lisible par Notepad++, mais voici son codage pour ceux qui voudrait y trifouiller desssus. Il y a assez d'explications pour comprendre le fonctionnement.

Code TEXT :
//Variable
var son:Sound;
var sc:SoundChannel;
var ba:ByteArray = new ByteArray;
var fourrier:Boolean = false;
var contenant:Sprite;
var distanceEntreBarres:Number;
var couleur: int;
 
//Initialisation
if (!stage)
{
addEventListener(Event.ADDED_TO_STAGE, init);
}
else
{
init(null);
}
function init(e:Event):void
{
 
 
//Nettoyage
if (hasEventListener (Event.ADDED_TO_STAGE))
{
removeEventListener(Event.ADDED_TO_STAGE, init);
}
//Ecouteur d'évènement REMOVED_FROM_STAGE
addEventListener(Event.REMOVED_TO_STAGE, removed);
 
//Paramètres de la scene
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
 
//Contenant pour le spectre
contenant = new Sprite ();
contenant.y = stage.staheHeight * .5;
addChild(contenant);
 
//Distance entre chaque barre en fonction de la largeur de la scene
distanceEntreBarres = stage.stageWidth / 256;
 
//Charger et démarrer l'audio
son = new Sound(new URLRequest("audio.mp3"));
sc = son.play;
sc.addEventListener(Event.SOUND_COMPLETE,audioTermine);
 
//Créer un écouteur de l'évènement RESIZE attache à la scène
stage.addEventListener(Event.RESIZE, resizeHandler);
 
//Créer un écouteur de l'évènement ENTER_FRAME attache à la scène
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
 
}
 
//Fonction délechée par l'écouteur d'évènemen RESIZE
function resizeHandler(e:Event):void
{
contenant.y = stage.stageHeight * .5;
distanceEntreBarres = stage.stageWidth / 256;
}
 
//Fonction déclenchée par l'écouteur d'évènement ENTER_FRAME
function enterFrameHandler (e;Event):void;
{
SoundMixer.computeSpectrum (ba, fourrier);
 
//Déterminer une couleur au hasard
couleur = Match.random() * 0xFFFFFF;
 
//Dessiner une barre
contenant.graphics.clear();
contenant.graphics.lineStyle(1, couleur);
 
//Variable pour le for loop, a remettre à zéro à chaque passage
vari:int=0;
 
//Variable pour la taille de chaque barre
var waveHeight:Number;
 
//Variable pour la position horizontale de chaque barre
var xPso:Number;
 
//Créer la boucle qui nous prmet de dessiner toutes les barres
for (i; i < 256; i++)
 
{
 
//Calculer la taille de chaque barre en fonction des données du ByteArray
waveHeight = (ba.readFloat() * contenant.y);
 
//Calculer la position horizontale de chaque barre
xPos = distanceEntreBarres * 1;
 
//Positionner le début de la ligne horizontale
contenant.graphics.moveTo(xPos, 0);
 
//Dessiner la ligne
contenant.graphics.lineTo(xPos, waveHeight);
 
}
 
//Fonction déclenchée lorsque l'audio est terminé
function audioTermine(e:Event):void(remove.EventListener(Event.ENTER_FRAME, enterFrameHandler);
 
}
 
//Fonction déclenchée lorsque l'application est retiré de la scene
function removed (e:Event):void
{
removeEventListener(Event.REMOVED_FROM_STAGE, removed);
remodeEventListener(Event.ENTER_FRAME, enterFrameHandler);
 
son.close();
son = null();
sc.stop();
sc = null;
}


Vous pouvez télécharger les fichiers sources ici

Voici l'effet donnée, mettez une musique n'importe laquelle dans votre navigateur et le fichier s'activera

Edité par hight_tower Le 21/04/2012 à 10h42



Chez Swan Site design Web phpboost3. Membre depuis 2009 & modérateur depuis 2011.
Swan Membre non connecté

Administrateur

Rang

Avatar

Inscrit le : 01/08/2009 à 22h53

Messages: 8431

Le 21/04/2012 à 12h29
Coucou Highty,


Effectivement, c'est pas mal du tout !! Seul soucis, j'ai réussi à aller voir le swf, parce que j'ai édité ton post pour voir le lien :siffle

là ==> http://www.battlefieldiens.com/Telechargement/PHPBoost/Autres/Spectre/Fichiers/Fichiers%20source/spectre_audio_final.swf

Tu as un espace aussi dans le nom du dossier Fichiers%20source et sur CsN l'hurl sous cette forme ne passe pas :s

Tu pourras éditer mon sujet si nécessaire ;)


swan_signature

Site web    
hight_tower Membre non connecté

Modérateur

Rang

Avatar

Modérateur(s)

Inscrit le : 17/09/2009 à 11h09

Messages: 2298

Le 21/04/2012 à 14h02
ah oui mea culpa, je vais voir a cela ;)



Chez Swan Site design Web phpboost3. Membre depuis 2009 & modérateur depuis 2011.
hight_tower Membre non connecté

Modérateur

Rang

Avatar

Modérateur(s)

Inscrit le : 17/09/2009 à 11h09

Messages: 2298

Le 21/04/2012 à 14h04


Voici le lien de visualisation: http://www.battlefieldiens.com/Telechargement/PHPBoost/Autres/Spectre/Fichiers/Fichiers_source/spectre_audio_final.swf

C est fait dit moi quoi !! Edité par hight_tower Le 21/04/2012 à 14h05



Chez Swan Site design Web phpboost3. Membre depuis 2009 & modérateur depuis 2011.
Swan Membre non connecté

Administrateur

Rang

Avatar

Inscrit le : 01/08/2009 à 22h53

Messages: 8431

Le 21/04/2012 à 14h44
Ça fait rien ... Tu dois avoir une protection de la bande passante sur ton serveur ou un truc du genre , je suis pas calée dans ce domaine, mais via le lien c'est impec ! Merci beaucoup ;)

Par contre chose amusante pour moi .. lorsque j'ouvre le lien dans un nouvelle onglet sans y aller et que je reste sur le sujet, le flash passe ..


swan_signature

Site web    
hight_tower Membre non connecté

Modérateur

Rang

Avatar

Modérateur(s)

Inscrit le : 17/09/2009 à 11h09

Messages: 2298

Le 21/04/2012 à 14h47
oui je sais, mais je ne sais d'ou cela vient. :study



Chez Swan Site design Web phpboost3. Membre depuis 2009 & modérateur depuis 2011.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie