IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Faire un equalizer


Sujet :

ActionScript 3

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 42
    Par défaut Faire un equalizer
    Bonsoir !
    Voila, je souhaiterais créer un equalizer avec AS3, sans utiliser de logiciel tiers. Je sais qu'il faut surement utiliser computeSpectrum();, mais avec computeSpectrum j'arrive (enfin, Jeanphi arrive) à faire qqchose comme ça avec des barres :


    Or c'est pas tout à fait ça un equalizer !
    Ce que je voudrais faire c'est une comme la visualisation "Barres" du Windows Media Player, c'est à dire ça :



    Pour info, voila le code AS3 de Jeanphi pour le premier exemple, bien mais pas parfait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Code:
    var son:Sound = new Sound();
    var ba:ByteArray = new ByteArray();
    var tab:Array = new Array();
    for (var i=0; i<50; i++) {
    	var bar:Barre = new Barre();
    	tab.push(bar);
    	addChild(bar);
    	bar.x =i*11;
    	bar.y=200;
    }
    son.load(new URLRequest("test.mp3"));
    sc = son.play();
    this.addEventListener(Event.ENTER_FRAME, spectre);
    function spectre(event:Event) {
    	SoundMixer.computeSpectrum(ba,false,0);
    	for (var i=0; i<50; i++) {
    		pow = ba.readFloat();
    		pow = Math.abs((pow * 400));
    		tab[i].height= pow;
    	}
    }
    Je l'ai simplifié au maximum
    Dernière chose, si VRAIMENT vous ne comprenez pas ce que je cherche à faire, il y a un exemple sur cette page MAIS il a été créé avec un soft tiers, ce que je ne veux PAS faire :

    http://www.flashkit.com/movies/Effec...8801/index.php

    Merci infiniment d'avance et bonne semaine

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 42
    Par défaut
    UP ! Yen a marre, sur 5 forums différents personne est capable de me dire si c'est faisable ??



    ...



    Pas taper

  3. #3
    Membre Expert
    Avatar de jean philippe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 062
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 062
    Par défaut
    du calme....
    il me semble que tu as pas mal de sources maintenant
    donc à toi de mettre un peu les mains dans le cambouis

    PS : évite les post comme le dernier : "Y en a marre, etc...."
    merci

  4. #4
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Par défaut
    Bonsoir tout le monde

    [...]5 forums différents personne est capable de me dire si c'est faisable ??


    ... en tout cas, je compte sur toi pour nous aider a trouver la réponse En plus si c'est agrémenté d'un exemple alors là


    __________________
    "ne reproche pas a ton voisin ce qu'il peux te reprocher" (Nouveau Proverbe)

  5. #5
    Membre Expert
    Avatar de jean philippe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 062
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 062
    Par défaut
    CR_Gio, il a déjà été posté plusieurs exemples... à lui de peaufiner maintenant

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Par défaut
    Salut,

    Pour afficher le spectre en fréquence au lieu de la représentation temporelle il faut mettre le deuxième parametre de computeSpectrum à true :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SoundMixer.computeSpectrum(ba, true, 0);
    Les valeurs entre 0 et 255 correspondent au canal droit et de 256 à 512 au canal gauche.
    Voilà un petit exemple qui dessine directement en utilisant un objet graphics :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    import flash.display.Graphics;
    import flash.events.Event;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.media.SoundMixer;
    import flash.net.URLRequest;
     
    const PLOT_HEIGHT:int = 300;
    const PLOT_WIDTH:int = 800;
    const CHANNEL_LENGTH:int = 256;
    const BAR_WIDTH:Number = PLOT_WIDTH/CHANNEL_LENGTH;
    const COLOR_RANGE:Number = 255/1.42;
     
    addEventListener(Event.ENTER_FRAME, onEnterFrame);
     
    var bytes:ByteArray = new ByteArray();
     
    function onEnterFrame(event:Event):void
    {
        SoundMixer.computeSpectrum(bytes, true, 0);
     
        var g:Graphics = this.graphics;
     
        g.clear();
     
        var n:Number = 0;
     
        // left channel
        for (var i:int = 0; i < CHANNEL_LENGTH; i++) 
        {
            n = bytes.readFloat()*COLOR_RANGE;
    		g.beginFill(n << 16);
            g.drawRect(i*BAR_WIDTH, 0, BAR_WIDTH, PLOT_HEIGHT);
    		g.endFill();
        }
    à adapter évidement mais tu vois l'idée ...
    Le problème avec ton code actuel (en plus du 2é paramètre de computeSpectrum à mettre à true) c'est qu'il ne lis que 50 fois avec readFloat(). Si tu veux faire un spectre complet il faudrait utiliser les 255 valeurs

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/11/2008, 11h15
  2. faire un fichier .ini
    Par florent dans le forum C++Builder
    Réponses: 14
    Dernier message: 31/05/2002, 22h06
  3. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44
  4. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo