Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Filipe_O

Player de musica

Mensagens Recomendadas

Filipe_O

Boas pessoal!  ;)

Quero criar um player de musica.

Já tenho o design feito, mas preciso de ajuda por causa do actionscript.

Tenho umas ideias definidas, mas gostava de saber se era possível...

1->Teria um ficheiro XML onde para cada musica teria o nome e link para a ela aceder (para aceder por streaming).

2->Em baixo do reprodutor, tenho uma tabela, onde apresenta os vários nomes das musicas:

      Gostava que ao carregar, a musica começasse.

3 ->Eu tirei os botões (play, pause, previous, foward) da livraria, pensando que já têm a programação necessária.Estarei certo?Se não, qual é a programação?

4 ->No reprodutor, tenho uma caixa de texto dinâmica onde aparece o "tempo da musica actual/tempo da musica total"...Qual seria a programação necessária para ter este fim?

5 ->Como seria a programação da barra de progresso da musica?

Estou a começar do zero.

Não fui buscar uma á net, precisamente porque quero aprender  :biggrin:

Fiquem bem e obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Filipe_O

As2.

<musicas>
<faixa1>
<nome>Musica 1</nome>
<urlmusica>http://www.omeusite.com/musica1.mp3 </urlmusica>
</faixa1>
<faixa2>
<nome>Musica 2</nome>
<urlmusica>http://www.omeusite.com/musica2.mp3 </urlmusica>
</faixa2>
</musicas>

Respondendo ao ponto 1 e 2, este codigo estaria correcto?

Seria possível, ao carregar no nome da musica, ele acedesse ao "urlmusica"?

Fiquem bem

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
coxosclassic

eu talvez usaria attributos em vez de "nós" de XML.

algo tipo:

<musicas>
<faixa nome="Música 1" url="http://www.omeusite.com/musica1.mp3"/>
<faixa nome="Música 2" url="http://www.omeusite.com/musica2.mp3"/>
<faixa nome="Música 3" url="http://www.omeusite.com/musica3.mp3"/>
<faixa nome="Música 4" url="http://www.omeusite.com/musica4.mp3"/>
</musicas>

assim preocupavas-te somente em adicionar / remover um nó de xml para cada musica...

Apesar de usares os componentes nativos do flash  (botoes de play, pause, previous, foward) precisas sempre de desenvolver a logica do player.

cumps,

CC

::EDIT:: aconselho-te a usares programação por objectos neste caso... senão acabas com um script "kilometrico". :D


Cumps,

cc

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Filipe_O

<musicas>
<faixa nome="Música 1" url="http://www.omeusite.com/musica1.mp3"/>
<faixa nome="Música 2" url="http://www.omeusite.com/musica2.mp3"/>
<faixa nome="Música 3" url="http://www.omeusite.com/musica3.mp3"/>
<faixa nome="Música 4" url="http://www.omeusite.com/musica4.mp3"/>
</musicas>

Duvida:

Então mas cada "faixa nome", e "url" não precisam de nomes únicos para quando os chamar no Actionscript?

Ou não se pode ver como sendo variáveis?

Peço desculpa se estou a fazer uma grande confusão, mas como ja disse estou a começar do zero, e (como ja deves ter percebido :D) não percebo nada de programação.

Fiquem bem

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
coxosclassic

Duvida:

Então mas cada "faixa nome", e "url" não precisam de nomes únicos para quando os chamar no Actionscript?

Não necessáriamente... nao irás chamar o node de xml por nome, mas sim por index (XML.children()[ i ]) acho que so em as3 é que podes chamar o node pelo nome (mas seria irrelevante à mesma)...

Ou não se pode ver como sendo variáveis?

o que iras usar como variaveis será o attributo "nome" e o attributo "url".

Peço desculpa se estou a fazer uma grande confusão, mas como ja disse estou a começar do zero, e (como ja deves ter percebido ) não percebo nada de programação.

por mim é na boa, afinal é para isso que os fóruns existem :D

estás a pensar usar componentes ui nativos do flash (list, comboBox, etc?) ou queres criar os teus proprios?

cumps,

CC


Cumps,

cc

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Filipe_O

estás a pensar usar componentes ui nativos do flash (list, comboBox, etc?) ou queres criar os teus proprios?

Estou a usar componentes nativos do flash.

Ok...Avançando para o ponto 3....

Como é que eu faço a interação do xml com o ficheiro flash e, (objectivo final) associo cada nome a um url, e dou indicação que este vai ser carregado?

Fiquem bem

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Filipe_O

Boas!

Voltei para acabar isto (desta vez, nem que tenha de bater com a cabeça nas paredes)

Tenho andado a pesquisar, e obtenho indicações, mas sobre código solto, e tenho umas duvidas.

O inicio do meu código vai ser:

play.onPress {
var musicas = new XML();
musicas.load("lista_musicas.xml");

E para começar a trabalhar com o documento precisaria de fazer:

musicas.onLoad = function(loaded){

Correcto, ou não?

Agora, a forma como indicas-te de chamar ao xml é através de "XML.children()[ i ]", mas também já vi do estilo (isto para todas as musicas)

parent.childNodes[0] = new Object();
parent.childNodes[0].nodeName = "musica1";
parent.childNodes[0].childNodes = new Array();
parent.childNodes[0].childNodes[0] = new Object();
parent.childNodes[0].childNodes[0].nodeValue = "http:// ...";

As duas estão correctas?

[EDIT]:Juntei o código...tinha uns erros que consegui resolver. Deu-me erro na primeira parte

play_.onPress {

Agora, pus o codigo (sem esta parte), dentro do botão, dentro de um "on realese"...á problema por ser um botão do flash?

Se não tenho nenhum erro, só me falta a parte de reproduzir, (e atribuir funções aos outros botões), correcto?

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
coxosclassic

Boas,

O inicio do meu código vai ser:

play.onPress {
var musicas = new XML();
musicas.load("lista_musicas.xml");

E para começar a trabalhar com o documento precisaria de fazer:

musicas.onLoad = function(loaded){

Correcto, ou não?

Sim, é isso mesmo. Apartir dessa função (loaded) é onde podes comecar a tratar o teu codigo.

Agora, a forma como indicas-te de chamar ao xml é através de "XML.children()[ i ]", mas também já vi do estilo (isto para todas as musicas)

parent.childNodes[0] = new Object();
parent.childNodes[0].nodeName = "musica1";
parent.childNodes[0].childNodes = new Array();
parent.childNodes[0].childNodes[0] = new Object();
parent.childNodes[0].childNodes[0].nodeValue = "http:// ...";

As duas estão correctas?

Nao percebo porque é que iras criar objectos e arrays num XML... julgo que o possas fazer (nunca tentei) mas porque complicar tanto qd o que queres é um simples XML com uma playList?

Acho que o exemplo que te dei é bem mais simples e pratico...

[EDIT]:Juntei o código...tinha uns erros que consegui resolver. Deu-me erro na primeira parte

play_.onPress {

Agora, pus o codigo (sem esta parte), dentro do botão, dentro de um "on realese"...á problema por ser um botão do flash?

Se não tenho nenhum erro, só me falta a parte de reproduzir, (e atribuir funções aos outros botões), correcto?

o teu botão tem um instance name "play_" ? ou será antes "play"? (deve ser por isso que te da erro)

nessa funcao onPress, carregas o atributo "url" do XML, para o teu player (ou objecto de som)

se tiveres duvidas avisa,

cumps,

cc


Cumps,

cc

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Filipe_O

Antes de mais, obrigado pela resposta :thumbsup:

Nao percebo porque é que iras criar objectos e arrays num XML... julgo que o possas fazer (nunca tentei) mas porque complicar tanto qd o que queres é um simples XML com uma playList?

Ok, vou ver como é que o "XML.children()[ i ]" funciona.

o teu botão tem um instance name "play_" ? ou será antes "play"? (deve ser por isso que te da erro)

Não.

Eu tentei por o instance name "play", mas como é uma palavra reservada, tive de por "play_"

Mas, como disse, optei antes por, por a programação dentro do botão de play (ao inves de chamar o botão, de outro sitio)

nessa funcao onPress, carregas o atributo "url" do XML, para o teu player (ou objecto de som)

getURL("\lista_musicas.xml");

Assim, chega?

Erro não me deu... não reproduziu nada (possivelmente porque ainda não fiz aquilo do "XML.children()[ i ]" ).

Ai é que precisava de uma ajuda.

Já percebi que tem a ver com a colocação dos nomes, na caixa de texto dinâmica, mas não obtenho muita informação na net (a maioria são perguntas)  :wallbash:

Se me pudesses ajudar um link, ou explicar como funciona, agradecia

Por acaso tem alguma coisa a ver com um trace que devolve o valor de uma variável, para o ecrã?

Neste aspecto estou totalmente á nora ...

Vou continuar a procura

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Filipe_O

Como viste, eu fiz o getURL, agora não posso saber se carregou pois não atribui nenhuma função depois.

Já tentei, depois fazer do género

parent.childNodes[0] = new Object();
parent.childNodes[0].nodeName = "musica1";
parent.childNodes[0].childNodes = new Array();
parent.childNodes[0].childNodes[0] = new Object();
parent.childNodes[0].childNodes[0].nodeValue = "http:// ..."; }

Agora, não sei é como passar do array, á pratica.

Já tentei algo do estilo:

if (loaded){
	trace(nome_da_variável.firstChild.firstChild.nodeValue);
	trace(nome_da_variável.firstChild.firstChild.nextSibling.nodeValue);
}

A pensar que era assim que trabalhava com o conteúdo das variáveis do array, mas nada.

Sabes ajudar?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
IvanGS

mas consegues? e que estive a ler as coisas agora e pareceu-me que ainda nao consegues, ou ja resolves-te isso?

simplifica o código. nao precisas de uma rray, so lhe esta a por um valor.


//encremento de quando carregas num botao ele passa para o nó seguinte

var i = int; (tou a fazer isto a pressa nao sei se esta bem declarada);

teu_botao.onRelease = function(){
  playlist();
  i = i +1;
};


function playlist(){
parent.childNodes[i] = new Object();
parent.childNodes[i].nodeName = "musica1";
parent.childNodes[i].childNodes[0].nodeValue = "http:// ...";
};

deve ser uma coisa assim,

ou entao tenta com firstChild no sitio do childnodes.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Filipe_O

Não.

Como dava erro de outra maneira, tive de fazer assim:

on (release) {
  var i = int;
function playlist(){
parent.firstChild[i] = new Object();
parent.firstChild[i].nodeName = "A drop of infinity";
parent.firstChild[i].childNodes[0].nodeValue = "http://www.fileden.com/files/2010/2/3/2748372/Adropofinfinity.mp3";
}
  i = i +1;
}

Que é a mesma coisa, certo?

Nem com firstchild, nem com childnodes

Esta programação está definida dentro do botão do flash

Sabes ajudar?

Eu percebi o código, mas não estou a perceber porque não dá.

Como tu disses-te dava erro pq depois de "}", não leva ";", e porque uma função tinha de estar dentro de outra.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
IvanGS

tens que perceber a lógica da programação, o que tu fizes-te foi:

ao clicar no botao ele vai mostrar a informação, e o que deves fazer é ele avançar um nó. eu agora nao posso, mas quando chegar a casa ja posto aqui umas coisas que te devem dar uma boa ajuda. fiz um CMS todo em flash tipo joomla, por isso tem la muitas coisas dessas

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
coxosclassic

boas,

vais precisar de ter esse xml carregado em alguma variavel antes de poderes fazer o que quer que seja!

tens este documento de xml (myXMLPath.xml):

<musicas>
<faixa nome="Música 1" url="http://www.omeusite.com/musica1.mp3"/>
<faixa nome="Música 2" url="http://www.omeusite.com/musica2.mp3"/>
<faixa nome="Música 3" url="http://www.omeusite.com/musica3.mp3"/>
<faixa nome="Música 4" url="http://www.omeusite.com/musica4.mp3"/>
</musicas>

vais ter qq coisa assim do genero:

var musicNodes;

var myXML:XML = new XML();
myXML:XML .ignoreWhite = true; 
myXML:XML .onLoad = myXMLLoaded;
myXML:XML .load("myXMLPath.xml")

function myXMLLoaded(sucess:Boolean)
{	
if (sucess)
{
	musicNodes= this.childNodes[0]; // são os nós "faixa" (childNodes[0]).

}
else
{		
	trace("error loading xml file")
}
}

Depois tens de usar os "childNodes" do musicNodes para carregar os mp3 que pretendes...

tipo:

btn.onRelease = function()
{
trace(musicNodes.childNodes[0].attributes.nome)      //Música 1
        trace(musicNodes.childNodes[0].attributes.url)           //http://www.omeusite.com/musica1.mp3
}

so tens é de navegar por entre os nós usando uma variavel ( i por exemplo) para o childNodes tipo

var i:Number = 3;
btn.onRelease = function()
{
    trace(musicNodes.childNodes[i].attributes.nome)      //Música 3
    trace(musicNodes.childNodes[i].attributes.url)           //http://www.omeusite.com/musica3.mp3
}

Não precisas estar a complicar ao tentar criar Arrays ou Objectos no xml. O proprio xml já é isso tudo (estrutura de dados)

Ja agora, aconcelho-te um livro bastante interessante em relação ao assunto:

Foundation XML for Flash

julgo que tem um exmplo de um player mp3 (passo a passo) com uma playlist de xml

cumps,

CC


Cumps,

cc

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Filipe_O

Muito obrigado (principalmente pelo livro)

Duvida:

var i:Number = 3;
btn.onRelease = function()
{
    trace(musicNodes.childNodes[i].attributes.nome)      //Música 3
    trace(musicNodes.childNodes[i].attributes.url)           //http://www.omeusite.com/musica3.mp3
}

Assim, todos os blocos childnodes, vão estar numerados de 3º, certo?

Se o objectivo é associar o numero do childNode, ao numero das "instruções" no xml, não percebo.

Deu erro de sintaxe, em:

myXML:XML .ignoreWhite = true;
myXML:XML .onLoad = myXMLLoaded;

Acho que não estou a fechar correctamente (pois experimentei de outra maneira, deu alguns erros, mas numa dessas instruções não deu erro).

Muito obrigado por me estarem a ajudar (mas ainda gostava de perceber algumas coisas)

Fiquem bem

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
coxosclassic

boas,

Assim, todos os blocos childnodes, vão estar numerados de 3º, certo?

Exacto!

adiciona as seguintes variaveis:

var i:Number = 0; //indice do no de xml
var currentTrackPath:String; //caminho do mp3 a carregar
var player:Sound = new Sound() // o teu objecto de som

agora usas o i como indice de navegacao pelo musicNodes.childNodes

tipo nos teus botoes de "play", de "next" e de "previous":

nextButton.onRelease = function()
{
    i++;
   
   playSound();
}

previoustButton.onRelease = function()
{
    i--;
   
   playSound();
}

playButton.onRelease = function()
{
   playSound();
}

e a tua funcao para carregares a musica sera tipo:

function playSound():Void
{
    player.stop();
    currentTrackPath = musicNodes.childNodes[i].attributes.url;
    player.loadSound(currentTrackPath, true);
}

nao precisas de fazer muito mais. so tens de criar uma condicao para a variavel i nao exceder o numero de musicas nem ser inferior a 0.

cumps,

CC


Cumps,

cc

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Filipe_O

function playSound():Void
{
    player.stop();
    currentTrackPath = musicNodes.childNodes[i].attributes.url;
    player.loadSound(currentTrackPath, true);
}

Podes-me explicar para que serve esta programação?

play_.onRelease = function()
{
while (i<=6) {
    trace(musicNodes.childNodes[i].attributes.nome)      //Música 3
    trace(musicNodes.childNodes[i].attributes.url)           //http://www.omeusite.com/musica3.mp3
}
if (i = 7) {
i= 0 }
}

Fiz bem?

Não criei nenhuma condição para o i<0, pois é inicializado com o valor 0.

Agora, dá erro de sintaxe, apenas em:

myXML:XML .ignoreWhite = true;

Código completo:

var i:Number = 0; //indice do no de xml
var currentTrackPath:String; //caminho do mp3 a carregar
var player:Sound = new Sound()
var musicNodes;
var rootNode:XMLNode;
var childrenNode:XMLNode;

var myXML:XML = new XML();
myXML:XML .ignoreWhite = true;
myXML:XML .onLoad = myXMLLoaded;
myXML:XML .load("lista_musicas.xml")

function myXMLLoaded(sucess:Boolean)
{      
        if (sucess)
        {
                rootNode = this
                childrenNode= rootNode.childNodes[0]; //e por aí fora...
       			childrenNode= rootNode.childNodes[1];
			childrenNode= rootNode.childNodes[2];
			childrenNode= rootNode.childNodes[3];
			childrenNode= rootNode.childNodes[4];
			childrenNode= rootNode.childNodes[5];
			childrenNode= rootNode.childNodes[6];
   }
        else
        {              
                trace("error loading xml file")
        }
}

play_.onRelease = function()
{
while (i<=6) {
    trace(musicNodes.childNodes[i].attributes.nome)      //Música 3
    trace(musicNodes.childNodes[i].attributes.url)           //http://www.omeusite.com/musica3.mp3
}
if (i = 7) {
i= 0 }
}
function playSound():Void
{
    player.stop();
    currentTrackPath = musicNodes.childNodes[i].attributes.url;
    player.loadSound(currentTrackPath, true);
}

Uma pergunta:

O botão de play, tem na programação executar a função playSound.

Mas, nesta (atrás referida) programação, o botão play (de instance name, "play_"), tem a parte dos traces (do nome, e do url).

Poderá fazer conflito, duas programações distintas, do mesmo item?

Obrigado!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
coxosclassic

boas,

ok, vamos por partes:

deduzo que o teu GUI seja algo parecido a isto:

playerGUI.jpg

teras 3 botoes no stage do documento .fla:

  - 1 botao play (plBtn)

  - 1 botao back (bkBtn)

  - 1 botao forward (fwBtn)

teras tambem um documento .xml na mesma root do teu documento .fla que tera toda a informacao relativa as musicas que queres tocar (playlist):

<musicas>
<faixa nome="Música 1" url="http://www.omeusite.com/musica1.mp3"/>
<faixa nome="Música 2" url="http://www.omeusite.com/musica2.mp3"/>
<faixa nome="Música 3" url="http://www.omeusite.com/musica3.mp3"/>
<faixa nome="Música 4" url="http://www.omeusite.com/musica4.mp3"/>
</musicas>

Agora em relacao ao codigo (por partes):

1º- declarar as variaves necessárias:

var musicNodes:XMLNode; //a lista completa das musicas (playlist) (childrenNodes[0]).
var i:Number = 0; //indice do no de xml
var numTracks:Number; //numero total de musicas para ouvir (ou numero de filhos do musicNode)
var currentTrackPath:String; //caminho do mp3 a tocar
var currentTrackName:String; //nome do mp3 a tocar
var player:Sound = new Sound() // o teu objecto de som (objecto que vai por a tocar as musicas)

var myXML:XML = new XML(); //objecto XML que vai carregar o file .xml (playlist)
myXML:XML.ignoreWhite = true; // ignora espacos em branco do file .xml
myXML:XML.onLoad = myXMLLoaded; //definicao do metodo(event handler) ao finalizar o load
myXML:XML.load("myXMLPath.xml") //carrega o file .xml (playlist)

2º - o "event handler" para quando o file .xml estiver carregado, é nesta funcao que vais inicializar as variaveis declaradas acima:

function myXMLLoaded(sucess:Boolean):Void
{
    if (sucess)
    {
         i = 0; // inicias o i a 0 por defeito (indica a 1ª musica - childNodes[0])
         musicNodes= this.childNodes[0]; //inicias o musicNodes, esta variavel ira conter todos os nós "faixa" do documento .xml (playlist)
         numTracks = musicNodes.childNodes.length; //defines o numero total de faixas que existem no documento .xmll (playlist)
         currentTrackPath = musicNodes.childNodes[i].attributes.url; //defines o caminho onde esta o mp3 que ira tocar (i=0 sera o /musica1.mp3)
         currentTrackName = musicNodes.childNodes[i].attributes.nome;//defines o nome do mp3 que ira tocar (i=0 sera o "Musica 1")

         playSound(); //agora que tens as variaveis definidas, comecas a tocar a musica
    }
    else
    {
        trace("error loading xml file")
    }
}

3º - o metodo playSound() é a funcao que ira carregar e tocar a musica escolhida da variavel musicNodes (playlist). como por enquanto o i=0, a funcao ira carregar e tocar a faixa 0 (currentTrackPath="../musica1.mp3" currentTrackName="Musica 1")

function playSound():Void
{
    player.stop(); //para a musica (no caso de estar a tocar alguma)
    currentTrackPath = musicNodes.childNodes[i].attributes.url; //redine a variavel currentTrackPath usando o indicador i
    player.loadSound(currentTrackPath, true); //funcao que carrega e toca a musica que queremos.
}

4º - os "event handlers" para os botoes. é aqui que defines o que acontece quando pressionas cada um dos botoes:

//evento para quando se carrega no botao play
plBtn.onRelease = function()
{
playTrack(); //iras apenas chamar a funcao playSound()...
}

//evento para quando se carrega no botao back
bkBtn.onRelease = function()
{
    //se o indicador i-1 nao for inferior a zero, podes fazer back na playlist (nao pode haver childNodes[-1] por exemplo) 
    if( !((i-1) < 0) )
    {
        i--;
    }

    currentTrackPath = musicNodes.childNodes[i].attributes.url; //redines a variavel currentTrackPath usando o indicador i
    currentTrackName = musicNodes.childNodes[i].attributes.nome; //redines a variavel currentTrackName usando o indicador i
    
    playSound(); //agora que tens as variaveis redefinidas, comecas a tocar a musica
}

//evento para quando se carrega no botao forward
fwBtn.onRelease = function()
{
    //se o indicador i+1 nao for maior que numTracks, podes fazer forward na playlist (nao pode haver childNodes[5] por exemplo)
    if( !((i+1) == numTracks))
    {
        i++;
    }

    currentTrackPath = musicNodes.childNodes[i].attributes.url; //redines a variavel currentTrackPath usando o indicador i
    currentTrackName = musicNodes.childNodes[i].attributes.nome; //redines a variavel currentTrackName usando o indicador i

    playSound(); //agora que tens as variaveis redefinidas, comecas a tocar a musica
}

como reparaste teras de fazer a lista com as musicas disponiveis, mas o teu player ja esta a funcionar correctamente (play, back e forward)

para fazeres essa lista, basta usares as variaveis que ja estao definidas acima (musicNodes principalmente)

aqui vai o codigo completo:

file xml("myXMLPath.xml")

<musicas>
<faixa nome="Música 1" url="http://www.omeusite.com/musica1.mp3"/>
<faixa nome="Música 2" url="http://www.omeusite.com/musica2.mp3"/>
<faixa nome="Música 3" url="http://www.omeusite.com/musica3.mp3"/>
<faixa nome="Música 4" url="http://www.omeusite.com/musica4.mp3"/>
</musicas>

codigo:

var musicNodes:XMLNode; //a lista completa das musicas (playlist) (childrenNodes[0]).
var i:Number = 0; //indice do no de xml
var numTracks:Number; //numero total de musicas para ouvir (ou numero de filhos do musicNode)
var currentTrackPath:String; //caminho do mp3 a tocar
var currentTrackName:String; //nome do mp3 a tocar
var player:Sound = new Sound() // o teu objecto de som (objecto que vai por a tocar as musicas)

var myXML:XML = new XML(); //objecto XML que vai carregar o file .xml (playlist)
myXML:XML.ignoreWhite = true; // ignora espacos em branco do file .xml
myXML:XML.onLoad = myXMLLoaded; //definicao do metodo(event handler) ao finalizar o load
myXML:XML.load("myXMLPath.xml") //carrega o file .xml (playlist)

//event handler para quando o file .xml estiver carregado
function myXMLLoaded(sucess:Boolean):Void
{
    if (sucess)
    {
         i = 0; // inicias o i a 0 por defeito (indica a 1ª musica - childNodes[0])
         musicNodes= this.childNodes[0]; //inicias o musicNodes, esta variavel ira conter todos os nós "faixa" do documento .xml (playlist)
         numTracks = musicNodes.childNodes.length; //defines o numero total de faixas que existem no documento .xmll (playlist)
         currentTrackPath = musicNodes.childNodes[i].attributes.url; //defines o caminho onde esta o mp3 que ira tocar (i=0 sera o /musica1.mp3)
         currentTrackName = musicNodes.childNodes[i].attributes.nome;//defines o nome do mp3 que ira tocar (i=0 sera o "Musica 1")

         playSound(); //agora que tens as variaveis definidas, comecas a tocar a musica
    }
    else
    {
        trace("error loading xml file")
    }
}

//funcao para carregar e ouvir os mp3s
function playSound():Void
{
    player.stop(); //para a musica (no caso de estar a tocar alguma)
    currentTrackPath = musicNodes.childNodes[i].attributes.url; //redine a variavel currentTrackPath usando o indicador i
    player.loadSound(currentTrackPath, true); //funcao que carrega e toca a musica que queremos.
}

//evento para quando se carrega no botao play
plBtn.onRelease = function()
{
playTrack(); //iras apenas chamar a funcao playSound()...
}

//evento para quando se carrega no botao back
bkBtn.onRelease = function()
{
    //se o indicador i-1 nao for inferior a zero, podes fazer back na playlist (nao pode haver childNodes[-1] por exemplo) 
    if( !((i-1) < 0) )
    {
        i--;
    }

    currentTrackPath = musicNodes.childNodes[i].attributes.url; //redines a variavel currentTrackPath usando o indicador i
    currentTrackName = musicNodes.childNodes[i].attributes.nome; //redines a variavel currentTrackName usando o indicador i
    
    playSound(); //agora que tens as variaveis redefinidas, comecas a tocar a musica
}

//evento para quando se carrega no botao forward
fwBtn.onRelease = function()
{
     //se o indicador i+1 nao for maior que numTracks, podes fazer forward na playlist (nao pode haver childNodes[5] por exemplo)
    if( !((i+1) == numTracks))
    {
        i++;
    }

    currentTrackPath = musicNodes.childNodes[i].attributes.url; //redines a variavel currentTrackPath usando o indicador i
    currentTrackName = musicNodes.childNodes[i].attributes.nome; //redines a variavel currentTrackName usando o indicador i

    playSound(); //agora que tens as variaveis redefinidas, comecas a tocar a musica
}


Cumps,

cc

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Filipe_O

Obrigado!

Com a escola, nem tenho tido tempo de ver detalhadamente isto com atenção.

Consegui por a funcionar  :)

myXML:XML.ignoreWhite = true

=

myXML.ignoreWhite = true; 

?

É que com o primeiro dava erro de sintaxe, mas com o segundo já não (será que "perdi" alguma informação?

O botão play não estava a funcar, depois alterei a programação para "playSound()", e já funkou.

Num botão de pause, tentei fazer "playSound().pause", e ".stop", mas para e recomeça.

Já tentei, só "pause" e nada.

Sabes ajudar?

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.