MP3Player com Equalizador

Aprenda a fazer um MP3 Player com Equalizador XML com nome da Música, Artista, Álbum, imagem do Álbum SeekeBar e Volume.

Faça o download para começar.

Formato: Flash CS5
Arquivo: MP3Player.rar


Descompacte o arquivo, temos uma pasta chamada som e outra chamada capas, 1 arquivo xml musicas.xml e 1 arquivo Flash mp3player.fla Abra o mp3player.fla, temos o MP3 pronto só falta as Actions. Vamos as Actions:
MP3Player com Equalizador
import flash.display.Sprite;
import flash.net.URLRequest;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.DropShadowFilter;

//Adicionando nossas variáveis
var getMusica:URLRequest;
var Musica:Sound = new Sound();
var PosProgresso:Number;
var soundChannel:SoundChannel;
var MusicaAtual:Sound = Musica;
var pos:Number;
var Atual:Number = 0;
var AtualP:Number;
var AtualA:Number;
var MusicaPlay:Boolean = false;
var xml:XML;
var ListaMusica:XMLList;
var MusicaVolume:SoundTransform = new SoundTransform();
var ProVolume:Number;
var VolumeLimite:Rectangle = VolumeBar.getBounds(VolumeBar);
var xPos:Number = VolumeLimite.x;
var yPos:Number = VolumeLimite.y;
var widthPos:Number = VolumeLimite.width - VolumeBar.VolumeDrag.width;
var heightPos:Number = 0;
var limites:Rectangle = new Rectangle(xPos,yPos,widthPos,heightPos);
var SeekLimite:Rectangle = SeekBar.getBounds(SeekBar);
var xSeekPos:Number = SeekLimite.x;
var ySeekPos:Number = SeekLimite.y;
var widthSeekPos:Number = 332;
var heightSeekPos:Number = 0;
var limitesSeek:Rectangle = new Rectangle(xSeekPos,ySeekPos,widthSeekPos,
heightSeekPos);
var loadIMG:Loader = new Loader();
var loadIMGR:Loader = new Loader();
var loadIMGP:Loader = new Loader();
 
//usando uma máscara para a capa com reflexo
Imagem.load_imgr.cacheAsBitmap = true;
Imagem.mask_ref.cacheAsBitmap = true;
Imagem.load_imgr.mask = Imagem.mask_ref;
 
//carregando XML
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, CarregaXML);
var URLRe:URLRequest = new URLRequest("musicas.xml");
loader.load(URLRe);
 
//carregando música
function LoadProgress(e:Event){
    var loadedPct:uint = Math.round(344 * (MusicaAtual.bytesLoaded/MusicaAtual.
bytesTotal));
    SeekBar.SeekBar_load.width = loadedPct;
}
//música carregada
function LoadComplete(e:Event){
    SeekBar.SeekBar_load.width = 344;
    stage.removeEventListener(Event.ENTER_FRAME, LoadProgress);
}
//apos carregamento do XML
function CarregaXML(e:Event){
    xml = new XML(e.target.data);
    ListaMusica = xml.som;
    getMusica = new URLRequest(ListaMusica[0].url);
    Musica.load(getMusica);
    soundChannel = Musica.play();
     
    //carrega as informções da música
    musica_txt.text = ListaMusica[0].musica;
    artista_txt.text = ListaMusica[0].artista;
    album_txt.text = ListaMusica[0].album;
    ProximaMc.musica_txtp.text = ListaMusica[1].musica;
    ProximaMc.artista_txtp.text = ListaMusica[1].artista;
     
    //carragando capas, normal, reflexo e miniatura da próxima
    loadIMG.load(new URLRequest(ListaMusica[0].img));
    loadIMGR.load(new URLRequest(ListaMusica[0].img));
    loadIMGP.load(new URLRequest(ListaMusica[1].img));
    Imagem.load_img.load_mc.addChild(loadIMG);
    Imagem.load_imgr.load_mc.addChild(loadIMGR);
    ProximaMc.load_imgp.load_mc.addChild(loadIMGP);
     
    //quando a música acabar chamar função ProximaMusica
    soundChannel.addEventListener(Event.SOUND_COMPLETE, ProximaMusica);
    stage.addEventListener(Event.ENTER_FRAME, Atualiza);
    stage.addEventListener(Event.ENTER_FRAME, LoadProgress);
    Musica.addEventListener(Event.COMPLETE, LoadComplete);
}
 
//Atualiza e mostra o tempo da música
function AtualizaTempo(num:Number){
    var TempoAtual:Number = num / 1000;
    var TempoTotal:Number = MusicaAtual.length / 1000;
    var Minutos:Number = 0;
    var Segundos:Number = 0;
    var MinutosTotal:Number = 0;
    var SegundosTotal:Number = 0;
    Minutos = Math.floor(TempoAtual / 60);
    Segundos = Math.floor(TempoAtual) % 60;
    MinutosTotal = Math.floor(TempoTotal / 60);
    SegundosTotal = Math.floor(TempoTotal) % 60;
    TempoAtualTxt.text = ((Minutos<10) ? "0"+Minutos : Minutos)+":"+((Segundos<10)
 ? "0"+Segundos : Segundos);
    TempoTotalTxt.text = "de "+((MinutosTotal<10) ? "0"+MinutosTotal
 : MinutosTotal)+":"+((SegundosTotal<10) ? "0"+SegundosTotal : SegundosTotal);
}
//Atualiza SeekBar
function Atualiza(e:Event){
    soundChannel.addEventListener(Event.SOUND_COMPLETE, ProximaMusica);
    var MusicaProgresso:Number = soundChannel.position / MusicaAtual.length;
    SeekBar.SeekDrag.x = SeekBar.SeekBar_bg.x + MusicaProgresso * 332;
    SeekBar.SeekBarPro.width = SeekBar.SeekDrag.x + 14;
    AtualizaTempo(soundChannel.position);
 
}
 
//Controles de próxima, anterior, pause
Controles.btnProxima.addEventListener(MouseEvent.CLICK, ProximaMusica);
Controles.btnAnterior.addEventListener(MouseEvent.CLICK, AnteriorMusica);
Controles.btnPause.addEventListener(MouseEvent.CLICK, PauseMusica);
 
//botão próxima com imagem
ProximaMc.btn_ProximaMc.buttonMode = true;
ProximaMc.btn_ProximaMc.addEventListener(MouseEvent.CLICK, ProximaMusica);
ProximaMc.btn_ProximaMc.addEventListener(MouseEvent.MOUSE_OVER, ProximaOver);
ProximaMc.btn_ProximaMc.addEventListener(MouseEvent.MOUSE_OUT, ProximaOut);
ProximaMc.btn_ProximaMc.addEventListener(MouseEvent.MOUSE_UP, ProximaOver);
ProximaMc.btn_ProximaMc.addEventListener(MouseEvent.MOUSE_DOWN, ProximaPress);
 
function ProximaOver(e:MouseEvent){
    ProximaMc.gotoAndStop(2);
}
function ProximaOut(e:MouseEvent){
    ProximaMc.gotoAndStop(1);
}
function ProximaPress(e:MouseEvent){
    ProximaMc.gotoAndStop(3);
}
 
//ProximaMusica função para mudar para a próxima música
function ProximaMusica(e:Event){
    if (Atual < (ListaMusica.length() - 1)){
        Atual++;
 
    }else{
        Atual = 0;
    }
    if (Atual == ListaMusica.length() - 1){
        AtualP = 0;
    }else{
        AtualP = Atual + 1;
    }
    var nextReq:URLRequest = new URLRequest(ListaMusica[Atual].url);
    var Musica:Sound = new Sound(nextReq);
    soundChannel.stop();
    musica_txt.text = ListaMusica[Atual].musica;
    artista_txt.text = ListaMusica[Atual].artista;
    album_txt.text = ListaMusica[Atual].album;
    ProximaMc.musica_txtp.text = ListaMusica[AtualP].musica;
    ProximaMc.artista_txtp.text = ListaMusica[AtualP].artista;
     
    loadIMG.load(new URLRequest(ListaMusica[Atual].img));
    loadIMGR.load(new URLRequest(ListaMusica[Atual].img));
    loadIMGP.load(new URLRequest(ListaMusica[AtualP].img));
    soundChannel = Musica.play();
    MusicaPlay = true;
    MusicaAtual = Musica;      
     
    stage.addEventListener(Event.ENTER_FRAME, Atualiza);
    stage.addEventListener(Event.ENTER_FRAME, LoadProgress);
    MusicaAtual.addEventListener(Event.COMPLETE, LoadComplete);
}
//AnteriorMusica função para a música anterior
function AnteriorMusica(e:Event){
    if (Atual > 0){
        Atual--;
    }else{
        Atual = ListaMusica.length() - 1;
    }
    if (Atual == 0){
        AtualA = 2;
    }else{
        AtualA = Atual - 1;
    }
    var prevReq:URLRequest = new URLRequest(ListaMusica[Atual].url);
    var Musica:Sound = new Sound(prevReq);
    soundChannel.stop();
    musica_txt.text = ListaMusica[Atual].musica;
    artista_txt.text = ListaMusica[Atual].artista;
    album_txt.text = ListaMusica[Atual].album;
    ProximaMc.musica_txtp.text = ListaMusica[AtualA].musica;
    ProximaMc.artista_txtp.text = ListaMusica[AtualA].artista;
     
    loadIMG.load(new URLRequest(ListaMusica[Atual].img));
    loadIMGR.load(new URLRequest(ListaMusica[Atual].img));
    loadIMGP.load(new URLRequest(ListaMusica[AtualA].img));
    soundChannel = Musica.play();
    MusicaPlay = true;
    MusicaAtual = Musica;
     
    stage.addEventListener(Event.ENTER_FRAME, Atualiza);
    stage.addEventListener(Event.ENTER_FRAME, LoadProgress);
    MusicaAtual.addEventListener(Event.COMPLETE, LoadComplete);
}
 
//Pausa a música
function PauseMusica(e:Event){
    pos = soundChannel.position;
    soundChannel.stop();
    MusicaPlay = false;
    stage.removeEventListener(Event.ENTER_FRAME, Atualiza);
    Controles.btnPlay.addEventListener(MouseEvent.CLICK, PlayMusica);
}
//Reproduz a música
function PlayMusica(e:Event){
    if (MusicaPlay == false){
        soundChannel = MusicaAtual.play(pos);
        soundChannel.addEventListener(Event.SOUND_COMPLETE, ProximaMusica);
        MusicaPlay = true;
        stage.addEventListener(Event.ENTER_FRAME, Atualiza);
        Controles.btnPlay.removeEventListener(MouseEvent.CLICK, PlayMusica);
    }
}
 
//SoundMixer.computeSpectrum - Equalizador
var ba:ByteArray = new ByteArray();
//Cria um Sprite e adiciona ao palco
var gr:Sprite = new Sprite();
gr.y = 85;
gr.x = 365;
gr.cacheAsBitmap = true;
addChild(gr);
//máscara para o equalizador
mask_gr.cacheAsBitmap = true;
mask_gr.y = 25;
mask_gr.x = 365;
gr.mask = mask_gr;
 
var Mtime:Timer = new Timer(70);
Mtime.addEventListener(TimerEvent.TIMER, Equalizador);
Mtime.start();
 
//função Equalizador
function Equalizador(e:TimerEvent){
    SoundMixer.computeSpectrum(ba, true, 0);
    var i:int;
    //tamanho do width(Largura) das barras;
    var w:uint = 5;
    gr.graphics.clear();
    //tamanho e cor da linha;
    gr.graphics.lineStyle(0, 0x222222);
    //cor das barras;
    gr.graphics.beginFill(0x3079ED);
     
    for (i=0; i<170; i+=w){
        var t:Number = ba.readFloat();
        var n:Number = (t * 50);
        gr.graphics.drawRect(i, 0, w, -n);
    }
}
 
//Volume
VolumeBar.VolumeDrag.x = widthPos;
VolumeBar.mouseEnabled = false;
VolumeBar.VolumeDrag.buttonMode = true;
VolumeBar.VolumeDrag.addEventListener(MouseEvent.MOUSE_OVER, overDrag);
VolumeBar.VolumeDrag.addEventListener(MouseEvent.MOUSE_OUT, outDrag);
VolumeBar.VolumeDrag.addEventListener(MouseEvent.MOUSE_DOWN, dragVolume);
 
//Quando mover o MC do Volume
function dragVolume(e:MouseEvent){
    VolumeBar.VolumeDrag.startDrag(false,limites);
    //chama a função Volume que atualiza o % do volume
    addEventListener(Event.ENTER_FRAME, Volume);
    stage.addEventListener(MouseEvent.MOUSE_UP, stopVolume);
}
//Quando soltar o MC do Volume
function stopVolume(e:MouseEvent){
    VolumeBar.VolumeDrag.stopDrag();
    stage.removeEventListener(MouseEvent.MOUSE_UP, stopVolume);
}
//atualiza o % do Volume e o Width da Barra do Volume
function Volume(e:Event){
    ProVolume = VolumeBar.VolumeDrag.x / widthPos;
    MusicaVolume.volume = ProVolume;
    soundChannel.soundTransform = MusicaVolume;
    VolumeBar.VolumeBarPro.width = VolumeBar.VolumeDrag.x + 14;
    VolumeTxt.text = Math.round((VolumeBar.VolumeDrag.x)/(limites.right-limites
.left)* 100) + "%";
}
 
//SeekBar
SeekBar.mouseEnabled = false;
SeekBar.SeekDrag.buttonMode = true;
SeekBar.SeekDrag.addEventListener(MouseEvent.MOUSE_OVER, overSeekDrag);
SeekBar.SeekDrag.addEventListener(MouseEvent.MOUSE_OUT, outSeekDrag);
SeekBar.SeekDrag.addEventListener(MouseEvent.MOUSE_DOWN, dragSeek);
SeekBar.SeekBar_m.addEventListener(MouseEvent.CLICK, ClickSeek);
SeekBar.SeekBar_m.buttonMode = true;
 
//Quando clicar em alguma area do SeekBar
function ClickSeek(e:MouseEvent){
    PosProgresso = Math.round(MusicaAtual.length*(SeekBar.SeekBar_m.mouseX-7)/332);
    SoundMixer.stopAll();
    stage.addEventListener(Event.ENTER_FRAME, Atualiza);
    soundChannel = MusicaAtual.play(PosProgresso);
}
//Quando mover o MC do SeekBar
function dragSeek(e:MouseEvent){
    SeekBar.SeekDrag.startDrag(false,limitesSeek);
    SoundMixer.stopAll();
    stage.removeEventListener(Event.ENTER_FRAME, Atualiza);
    //chama a função Seek que atualiza p Tempo
    stage.addEventListener(Event.ENTER_FRAME, Seek);
    stage.addEventListener(MouseEvent.MOUSE_UP, stopSeek);
}
//Quando soltar o MC do SeekBar
function stopSeek(e:MouseEvent){
    SeekBar.SeekDrag.stopDrag();
    SoundMixer.stopAll();
    stage.addEventListener(Event.ENTER_FRAME, Atualiza);
    stage.removeEventListener(Event.ENTER_FRAME, Seek);
    stage.removeEventListener(MouseEvent.MOUSE_UP, stopSeek);
    soundChannel = MusicaAtual.play(PosProgresso);
    //correção por Johnny
    MusicaPlay = true;
}
//atualiza o Tempo e o Width da Barra do SeekBar
function Seek(e:Event){
    PosProgresso = Math.round(MusicaAtual.length*(SeekBar.SeekDrag.x)/332);
    SeekBar.SeekBarPro.width = SeekBar.SeekDrag.x + 14;
    AtualizaTempo(PosProgresso);
}
function overDrag(e:MouseEvent){
    VolumeBar.VolumeDrag.gotoAndStop(2);
}
function outDrag(e:MouseEvent){
    VolumeBar.VolumeDrag.gotoAndStop(1);
}
function overSeekDrag(e:MouseEvent){
    SeekBar.SeekDrag.gotoAndStop(2);
}
function outSeekDrag(e:MouseEvent){
    SeekBar.SeekDrag.gotoAndStop(1);
}

0 comentários:

Postar um comentário