Forums Développement Multimédia

Aller au contenu

Dessin de cercle suivant le spectre d'un son

son as3 flash builder sound spectrum spectre cercle circle CODE Actionscript

2 réponses à ce sujet

#1 lulu8762

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 02 February 2012 - 09:33 AM

Bonjour à tous,

Je suis actuellement en train de développer une petit application web qui devrait, dans sa phase finale, permettre à l'utilisateur de choisir des samples, de les superposer et de voir le spectre des sons se dessiner en forme de rond.

J'ai découper mon dossier en plusieurs phases. J'ai dans un premier temps tout codé en dur dans un seul fichier. Pour permettre l'évolution de l'application, mon objectif actuel est d'avoir une classe "Circle" qui représenterait le rond défini par le spectre et un fichier main. Seulement, en l'état actuel des choses le cercle n'apparait pas sur la scène. Il s'agit probablement d'une erreur un peu bête mais je ne la trouve pas. Pourriez vous m'aider?



Fichier main:

package
{
import assets.Circle;
import assets.Son;

import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.*;
import flash.media.*;
import flash.net.URLRequest;
import flash.utils.ByteArray;

[SWF(width="840", height="680", backgroundColor="#000000", frameRate="30")]


public class Rond_objet extends Sprite{

  private var mon_rond:Circle;


  public function Rond_objet(){
 
   mon_rond=new Circle;
   addChild(mon_rond);
 
 
   mon_rond.drawCircle();
  }


}
}


Classe Circle:

package assets
{
import flash.display.MovieClip;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.*;
import flash.media.*;
import flash.net.URLRequest;
import flash.text.TextField;
import flash.utils.ByteArray;

public class Circle extends MovieClip
{
  private var width_rond:int;
  private var angle_rond:Number;
  private var color:uint;
  private var tab_couleur:Array;
  private var son:Sound;
  private var channel:SoundChannel;
  private var leByteArray:ByteArray;
  private var i:int;
  private var shape:Sprite;

  public function Circle()
  {
   tab_couleur=new Array(0xE82C0C,0xFF530D,0xFF0000,0xE80C79,0xFF0DFD,0x00B233,0x00FF5F,0x0DFFF0,0x114BFF,0x0879E8,0xFFFB14);
   this.initSon();
   this.initColor();
   shape=new Sprite();
   addChild(shape);
 
  }

  public function initWidth():void{
 
   this.width_rond = 60 + 50*leByteArray.readFloat();
  }


  public function initColor():void{
 
   this.color= tab_couleur[int(Math.random()*10)];
  }


  public function initSon():void{
 
   son=new Sound();
   son.load(new URLRequest("Son/Allelujah.mp3"));
   channel = son.play();
  }


  public function destroyCircle():void{
 
   //effacer le cercle existant
   shape.graphics.clear();
  }

  public function drawCircle():void{
 
   stage.addEventListener(Event.ENTER_FRAME, draw);
  }

  private function draw(evt:Event):void{
 
   leByteArray= new ByteArray();
 
   //récupère la vague du son et la place dans un tableau
   SoundMixer.computeSpectrum(leByteArray);
 
   // On initialise la taille du cercle en se basant sur leByteArray
   this.initWidth();
 
   trace("ok");
 
   //On initialise les caractéristiques du dessin du cercle
   shape.graphics.clear();
   shape.graphics.beginFill(0xFFFFFF);
   shape.graphics.lineStyle(1, 0xFFFFFF, 0.9);
 
   trace(this);
 

   for(i=0; i<256; i++) {
 
        this.angle_rond = i*4*Math.PI/256;
 
        if (i==0) {
         shape.graphics.moveTo(stage.stageWidth/2 + this.width_rond*Math.cos(this.angle_rond), stage.stageHeight/2 + this.width_rond * Math.sin(this.angle_rond));
       
        }
 
        shape.graphics.moveTo(stage.stageWidth/2 + this.width_rond*Math.cos(this.angle_rond), stage.stageHeight/2 + this.width_rond * Math.sin(this.angle_rond));
 
 
   }
 
   shape.graphics.endFill();
  }
}
}


Merci d'avance pour votre aide.

#2 Monz

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 3541 messages

Posté 03 February 2012 - 09:13 AM

Bonjour,

Tu n'as pas d'erreur ? Tu appelles drawCircle sans écouter l'événement ADDED_TO_STAGE, ce qui n'est pas une façon de faire. Regarde déjà de ce côté là...

#3 lulu8762

    Ceinture Blanche

  • Members
  • Pip
  • 2 messages

Posté 17 February 2012 - 17:54 PM

Bonjour,
J'ai finalement trouvé mon problème. Merci beaucoup .



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP