Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1682 connectés 

  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  computeSpectrum au chargement ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

computeSpectrum au chargement ?

n°1604788
stealth35
Posté le 27-08-2007 à 23:53:55  profilanswer
 

Bonjours, j'ai cru apercevoir sur un player en flash, la courbe du son se dessiner au chargement de la musique,
mais bon je croi que la class SoundMixer ne creer le bytesarray de se qu'on entend uniquement,  
donc comment faire, comme dans tout bon logiciel de musique, le graphisme du son, genre SpliceMusic (creer en flash )
 
visuel de SpliceMusic
 
http://media.splicemusic.com/img/makemusic_intro.jpg
 
j'ai bien essayer un code du genre :  
 

Code :
  1. function graph(e:Event) {
  2. var array:Array = new Array;
  3. var l:Number = sound.length;
  4. var p:Number = channel.position;
  5. for (var i:uint = 0; i<l; i++) {
  6.  channel = sound.play(i);
  7.  SoundMixer.computeSpectrum(bytes,false,0);
  8.  for (var j:uint = 0; j<256; j++) {
  9.   array[i] = bytes[j];
  10.  }
  11.  SoundMixer.stopAll();
  12. }
  13. }


 
et ensuite dessiner par rapport a l'array
 
des idées ?
 
Merci  :sarcastic:  ;)

mood
Publicité
Posté le 27-08-2007 à 23:53:55  profilanswer
 

n°1604836
craps_youp​la
Posté le 28-08-2007 à 09:19:51  profilanswer
 

easy : http://www.nicoptere.net/blog/inde [...] -plus-fort


---------------
"Il y a vraiment aucun patelin qui s'appelle 'undefined' en France ?"
n°1605465
stealth35
Posté le 28-08-2007 à 19:06:56  profilanswer
 

je comprend pas, y'a rien de se que je veu faire dans le lien

n°1605471
craps_youp​la
Posté le 28-08-2007 à 19:20:50  profilanswer
 

si tu fais pas la relation entre le code donné et ton problème, c'est que tu as qques lacunes qu'il faudra accepter de combler avant de te lancer là-dedans.
 
en gros il faut faire des tas de petites lignes verticales parallèles et mapper les valeurs du ByteArray sur leur yscale.


---------------
"Il y a vraiment aucun patelin qui s'appelle 'undefined' en France ?"
n°1605490
stealth35
Posté le 28-08-2007 à 20:41:56  profilanswer
 

ah mais enfaite ta pas compris, le probleme
 
je sais utiliser le computeSectrum, mon code ne sert pas a afficher, l'onde en temps reel
 
il sert a precharger l'onde au charmement ca a rien a voir
 
je veu toute l'onde du son,  pas l'onde a un moment donner

n°1605491
craps_youp​la
Posté le 28-08-2007 à 20:46:58  profilanswer
 

et ben, parcours ton byteArray avec une boucle for


---------------
"Il y a vraiment aucun patelin qui s'appelle 'undefined' en France ?"
n°1605492
0x90
Posté le 28-08-2007 à 20:47:44  profilanswer
 

En fait, computeSpectrum ne fais tout simplement pas du tout ce que tu veut, toi tu veut la "hauteur de l'onde sonore" à chaque instant, alors que lui te donne la FFT sur un instant.  
Les deux ressemblent à des courbes qui bougent avec le son, mais ne sont pas du tout la même chose (un peu comme si tu voulais une image et qu'on te file un histogramme en quelque sorte...).
 
Tu peut théoriquement recalculer la courbe du son à partir des spectrums de chaque instant, mais je doute que ce soit faisable en un temps raisonnable en flash et/ou sans savoir exactement ce qu'on doit faire comme calcul.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1605500
craps_youp​la
Posté le 28-08-2007 à 21:18:00  profilanswer
 

ah tu veux faire une transformée de Fourier inverse en Flash ???


---------------
"Il y a vraiment aucun patelin qui s'appelle 'undefined' en France ?"
n°1605501
0x90
Posté le 28-08-2007 à 21:20:44  profilanswer
 

craps_youpla a écrit :

ah tu veux faire une transformée de Fourier inverse en Flash ???


 
Me semble que c'est ce qu'il lui faudrait pour résoudre son pb, je connais pas flash c'est peut-être déjà integré mais si c'est pas le cas ça risque d'être amusant à faire.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1605502
stealth35
Posté le 28-08-2007 à 21:23:59  profilanswer
 

le FFT et l'onde c'est les harmonique par rapport au signal,  
 
computeSpectrum   fait le FFT ou l'onde
 
en gros je veu faire ca, j'ai vu c'est faisable, et ca c'est juste l'onde de la musique a tout les instants en version applatie
 
vous etes allez  faire un tour sur SpliceMusic ?
 
http://stealth35.free.fr/music.jpg


Message édité par stealth35 le 28-08-2007 à 21:25:08
mood
Publicité
Posté le 28-08-2007 à 21:23:59  profilanswer
 

n°1605532
craps_youp​la
Posté le 29-08-2007 à 00:06:16  profilanswer
 

la routine c'est ça :
 

Code :
  1. import com.xxx.Line;
  2. import flash.display.MovieClip;
  3. import flash.events.Event;
  4. import flash.events.TimerEvent;
  5. import flash.media.Sound;
  6. import flash.media.SoundMixer;
  7. import flash.net.URLRequest;
  8. import flash.utils.ByteArray;
  9. import flash.utils.Timer;
  10. var _holder:MovieClip = new MovieClip();
  11. this.addChild(_holder);
  12. var _line:Line = new Line();
  13. _holder.addChild(_line);
  14. var _s:Sound = new Sound();
  15. var _wave:ByteArray = new ByteArray();
  16. var _beacon:Timer = new Timer(1);
  17. _beacon.addEventListener( 'timer' , onTimer );
  18. var _bytesCount:Number;
  19. _s.addEventListener(Event.COMPLETE, onSoundLoaded);
  20. var req:URLRequest = new URLRequest('foobar');
  21. _s.load(req);
  22. function onSoundLoaded(event:Event):void {
  23.     var localSound:Sound = event.target as Sound;
  24. localSound.play();
  25. SoundMixer.computeSpectrum(_wave);
  26. _bytesCount = _wave.length;
  27. for( var i:Number = 0 ; i < _bytesCount / 2 ; i++ ) {
  28.  var __line:Line = new Line();
  29.  _holder.addChild(__line);
  30.  __line.x = i;
  31.  __line.name = 'line_mc' + i;
  32. }
  33. _beacon.start();
  34. }
  35. function onTimer(event:TimerEvent):void {
  36. SoundMixer.computeSpectrum(_wave);
  37. for( var i:Number = 0 ; i < this._bytesCount / 2 ; i++ ) {
  38.  _wave.position = i;
  39.  var theLine:DisplayObject = _holder.getChildAt(i);
  40.  var theLineMC:Line = theLine as Line;
  41.  theLine.height = _wave.readByte();
  42. }
  43. }


 
Le problème c'est que le ByteArray _wave fait 2048 slices :( Donc la résolution est pourrie/trop élévée et on voit rien -> le Flash Player est techniquement limité, tu devrais combler avec un vieil effet de flou, ou ne dessiner que 50 slices reliés par des béziers, la méthode de SpliceMusic, à vue de nez.
 
Avec SoundMixer.computeSpectrum(_wave,true); , on applique une Transformée de Fourier à la volée, et on a le spectre (et c'est très joli par contre :) ).
 
Nécessite un clip "Line" attachable depuis la bibliothèque.


Message édité par craps_youpla le 29-08-2007 à 00:10:08

---------------
"Il y a vraiment aucun patelin qui s'appelle 'undefined' en France ?"
n°1605535
stealth35
Posté le 29-08-2007 à 00:38:18  profilanswer
 

merci je test ca je te tien au courant


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Flash/ActionScript

  computeSpectrum au chargement ?

 

Sujets relatifs
Chargement swfPb chargement photo sous Firefox
Intercation javascript et flash pour chargement d'imageProbleme de chargement de dll
noob html suite ----- onclick sans nouvelle fenetre[JNI][résolu] chargement de librairies C++
datagridviewComboboxColumn et chargement depuis BDDLimitation du temps de chargement d'une page ?
[JAVASCRIPT] chargement fichier lors de lappel d'une fonctionMovieClipLoader : chargement swf et recup contenu
Plus de sujets relatifs à : computeSpectrum au chargement ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR