Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lucas AER

Id3 Tag em player de webrádio

Recommended Posts

Olá!

 

Primeiramente gostaria de informar que sou novato no desenvolvimento em Flash e no uso de AS e sempre fui leitor ativo de notícias e etc do iMasters.Gosto e procuro aprender bem sobre o que estou executando e, como o iMasters é referência

 

No momento estou trabalhando em um player de web rádio, que se encontra praticamente completo, faltando apenas a implementação de informações adicionais sobre a fonte, como as id3tag, lista de execução próxima e prévia, dentre outras informações que gostaria de adicionar.

 

No caso eu gostaria de saber sobre alguma referência de pesquisa e estudo para poder desenvolver o esquema das id3 tags, pois é um quesito importante para ser integrado ao player.

 

Se alguém já tiver alguma noção e puder ajudar, melhor ainda!

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é muito tranquilo, basta você fazer assim:

 

//Supondo que audio é a var do tipo Sound

audio.addEventListener(Event.ID3, _info);

function _info(e:Event):void{
 tituloMusica.text = e.target.id3.songName;

}


E por ai vai para as outras propriedades.

Muito simples.

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é muito tranquilo, basta você fazer assim:

 

//Supondo que audio é a var do tipo Sound

audio.addEventListener(Event.ID3, _info);

function _info(e:Event):void{
 tituloMusica.text = e.target.id3.songName;

}


E por ai vai para as outras propriedades.

Muito simples.

Abs

 

Isso em AS2 ou AS3? Recebo o seguinte erro:

 

Symbol=cavazoni5, layer=Layer 3, frame=1, Line 5 The class or interface 'Event' could not be loaded.

 

Desculpe a ignorância! haha

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi malz, so uso as 3 agora, nem lembrei que estavamos no forum de as 2.

Segue link.

 

Link

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só pra constar, o player de webradio precisa pegar as informações de um streaming de audio, ou seja, uma rádio hospedada com uma máscara de ip tal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se a musica carregada vier completa o ID3 dela tbm vem... e você pode usar o código passado para pegar.

 

Você conseguiu fazer o som tocar ao menos?

 

Abraços

 

Sim sim! O som funciona, os botões de play e stop, volume, tudo certinho. Só falta o toque final das id3 mesmo =]

 

Vou tentar implementar o código!

 

Bom, ainda não consegui implementar o código das id3... Parece que o código está funcionando, mas os campos id3 ficam como undefined. Talves seja alguma diferença que tenho que levar em conta pelo streaming ser via shoutcast. Vou postar uma parte do código pra ver se alguém pode me dar algum toque.

 

Este é o meu botão play. Como não quero que o som comece automaticamente, coloquei as funções de stream e id3 neste botão.

 

on (release) {
	function set_volume()
	{
		_global.vol = 70;
		_global.mySound.setVolume(vol);
	}

	function mostra_id3()
	{
		_root.musica = mySound.id3.songname;
		_root.artista = mySound.id3.artist;
	}

	function stream()
	{
		System.security.allowDomain("http://pelomundo.ath.cx:7000");
		myRadio = new String("http://pelomundo.ath.cx:7000/;");
		_global.mySound = new Sound();
		_global.mySound.loadSound(myRadio,true);
		set_volume();
		mySound.start();
	}// End of the function 
	function clearBuffer()
	{
		mySound.stop();
		delete mySound;
		stream();
	}// End of the function 
	stream();
	mostra_id3();
	var intervalID = setInterval(clearBuffer, 1200000);
	_global.musicOn = true;

	nextFrame();
}

As id3 aparecerão em dynamic texts incluidos no frame1.

 

Agradeço antecipadamente e espero que possam ajudar!

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom já que você ta usando on(ação) presumo tbm que você colocou o campo de texto como variavel e não instancia...

 

E ta atribuindo o texto assim...

 

Se você instanciou o campo de texto... o correto é instancia.text = texto e não intancia = texto

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu cheguei a instanciar, pra tentar usar a atribuição por instancia.text. Ficou assim:

 

on (release) {
	function set_volume()
	{
		_global.vol = 70;
		_global.mySound.setVolume(vol);
	}

	function mostra_id3()
	{
		_root.musica.text = mySound.id3.songname;
		_root.artista.text = mySound.id3.artist;
	}

	function stream()
	{
		System.security.allowDomain("http://pelomundo.ath.cx:7000");
		myRadio = new String("http://pelomundo.ath.cx:7000/;");
		_global.mySound = new Sound();
		_global.mySound.loadSound(myRadio,true);
		set_volume();
		mySound.start();
	}// End of the function 
	function clearBuffer()
	{
		mySound.stop();
		delete mySound;
		stream();
	}// End of the function 
	stream();
	mostra_id3();
	var intervalID = setInterval(clearBuffer, 1200000);
	_global.musicOn = true;

	nextFrame();
}

Mas da na mesma, fica undefined. Mesmo instanciando e usando o .text ou deixando como variável e atribuindo o texto com =. Eu consigo atribuir qualquer texto e os dynamic text estão funcionando, só essa função de id3 que parece não estar fncionando corretamente, ou então é algum problema com as id3. Mas eu tenho um .php que faz a leitura das id3 e mostra na tela... então não deve ser problema com a id3. Eu queria mostar no flash, mas to apanhando :(

 

Valeu aí, pessoal!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom a ID3 de uma musica só é carregada depois que ela começar a tocar...

 

Que tal você mandar ele pegar a ID3 depois de uns 3 segundos mais ou menos da musica?

Talvez ai vá funcionar.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom a ID3 de uma musica só é carregada depois que ela começar a tocar...

 

Que tal você mandar ele pegar a ID3 depois de uns 3 segundos mais ou menos da musica?

Talvez ai vá funcionar.

 

Abraços

 

Hum... boa idéia, pode ser que funciona mesmo! Eu não sei qual função usar para fazer a função de mostrar id3 esperar um pouco para assimilar os id3 tags nos dynamic text, qual seria?

 

Eu to mergulhando aqui no forum e em alguns documentos de AS2 pra conseguir fazer, porque eu nunca havia estudado flash e AS, só brinco um pouco com C++ no desenvolvimento de jogos. Independente de ser simples, eu sou totalmente noob. hehe

 

Mas muito obrigado, seus toques e o de todos do fórum estão sendo de extrema utilidade, caso eu consiga tudo que pretendo, vou postar tudo aqui, pra todo mundo ter onde olhar depois. :)

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca um setTimeout() depois de dar o loadSound ai tu seta a função que ele deve fazer depois de 3 segundos...

 

Ex:

setTimeout(function(){
//Mostra o ID3
},3000);

Abraços

 

Tentei implementar mas não consegui fazer funcionar... porque nem undefined chega.

 

Eu organizei o código todo nos elementos do flash, pra ficar mais fácil de editar... porque tava uma zona!

 

Ta assim agora:

 

Frame 1 - Actions

stop();
//Funções /////////////////////////////////////////////////////////////////

//Função que define o volume
function set_volume()
{
	mySound.setVolume(vol);
}

//Função que limpa o buffer
function clearBuffer()
{
	mySound.stop();
	delete mySound;
	stream();
}

//Fim das funções ////////////////////////////////////////////////////////

//Atribui valores e características do audio ////////////////////////////
System.security.allowDomain("http://pelomundo.ath.cx:7000");
myRadio = new String("http://pelomundo.ath.cx:7000/;");
mySound = new Sound();
musicOn = false;
var intervalID = setInterval(clearBuffer, 1200000);

//Atribui valor do volume
mudo = true;
vol = 70;
set_volume();

//Atribui o texto dos Dynamic text destinados a mostras id3 tags
musica = "Aperte o play";
artista = "e viaje pelo mundo!";

Botão Play

on (release) {

	//Função que mostra as id3 tags
	function mostra_id3()
	{
		_root.musica.text = _root.mySound.id3.songname;
		_root.artista.text = _root.mySound.id3.artist;
	}

	//Função de play do audio
	function stream()
	{
		set_volume();
		_root.mySound.loadSound(_root.myRadio,true);
		_root.mySound.start();
	}

	//Começo das ações do botão play
	stream();
	setTimeout(function(){mostra_id3},3000);
	_root.musicOn = true;

	nextFrame();
}

Claro que tem bem mais código, mas esses tem o que interessa. Com certeza eu que não soube usar a setTimeout, mas vou tentando :P

 

Valeu, berseck!

 

Ah, a função funciona sim, eu que tinha deixado o código como se "musica" e "artista" estivessem instanciados como, mas são declarados como variáveis. Então, tirei o .text e funciona. Mas volta Undefined ainda...

 

Vou quebrar a cabeça pelo visto.

 

Botão play ficara assim:

 

on (release) {

	//Função que mostra as id3 tags
	function mostra_id3()
	{
		_root.musica = _root.mySound.id3.songname;
		_root.artista = _root.mySound.id3.artist;
	}

	//Função de play do audio
	function stream()
	{
		set_volume();
		_root.mySound.loadSound(_root.myRadio,true);
		_root.mySound.start();
		setTimeout(mostra_id3, 3000);
	}

	//Começo das ações do botão play
	stream();

	_root.musicOn = true;

	nextFrame();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leia isso e veja onde ta seu erro:

import mx.controls.gridclasses.DataGridColumn;
var id3_dg:mx.controls.DataGrid;
id3_dg.move(0, 0);
id3_dg.setSize(Stage.width, Stage.height);
var property_dgc:DataGridColumn = id3_dg.addColumn(new DataGridColumn("property"));
property_dgc.width = 100;
property_dgc.headerText = "ID3 Property";
var value_dgc:DataGridColumn = id3_dg.addColumn(new DataGridColumn("value"));
value_dgc.width = id3_dg._width-property_dgc.width;
value_dgc.headerText = "ID3 Value";

var my_sound:Sound = new Sound();
my_sound.onID3 = function() {
trace("onID3 called at "+getTimer()+" ms.");
for (var prop in this.id3) {
id3_dg.addItem({property:prop, value:this.id3[prop]});
}
};
my_sound.loadSound("song1.mp3", true);

Até agora não vi onde você coloca o onID3 da sua musica para mostrar... eu não lembrei disso... falha minha...

Mas tu tbm podia ter procurado a respeito não? rs...

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leia isso e veja onde ta seu erro:

import mx.controls.gridclasses.DataGridColumn;
var id3_dg:mx.controls.DataGrid;
id3_dg.move(0, 0);
id3_dg.setSize(Stage.width, Stage.height);
var property_dgc:DataGridColumn = id3_dg.addColumn(new DataGridColumn("property"));
property_dgc.width = 100;
property_dgc.headerText = "ID3 Property";
var value_dgc:DataGridColumn = id3_dg.addColumn(new DataGridColumn("value"));
value_dgc.width = id3_dg._width-property_dgc.width;
value_dgc.headerText = "ID3 Value";

var my_sound:Sound = new Sound();
my_sound.onID3 = function() {
trace("onID3 called at "+getTimer()+" ms.");
for (var prop in this.id3) {
id3_dg.addItem({property:prop, value:this.id3[prop]});
}
};
my_sound.loadSound("song1.mp3", true);

Até agora não vi onde você coloca o onID3 da sua musica para mostrar... eu não lembrei disso... falha minha...

Mas tu tbm podia ter procurado a respeito não? rs...

 

Abraços

 

Cara, eu até li um bocado sobre essa onID3. Eu que fui burro e não soube implementar... =|

 

Acho que isso vai solucionar tudo. Vou tentar implementar aqui.

 

É na ignorância que surge o conhecimento :P

 

Eu li esse código que o berseck postou nos howto da adobe, mas não consegui implementar ou testar.

 

Tentei assim:

 

on (release) {

	//Função que mostra as id3 tags
	function carrega_id3()
	{
		System.security.allowDomain("http://pelomundo.ath.cx:7000");
		myID3 = new String("http://pelomundo.ath.cx:7000/;");
		Sound_id3 = new Sound();
		Sound_id3.loadSound(Sound_id3,true);
		Sound_id3.onLoad();
		{
			Sound_id3.onID3 = function()
			{
				_root.musica = "Musica: " + Sound_id3.id3.track;
				_root.artista = "Artista: " + Sound_id3.id3.artist;
			};
			setTimeout(Sound_id3.onID3,5000);
		}
	};

	//Função de play do audio
	function stream()
	{
		set_volume();
		_root.mySound.loadSound(_root.myRadio,true);
		_root.mySound.start();
		carrega_id3();
	}

	//Começo das ações do botão play
	stream();
	_root.musicOn = true;

	nextFrame();
}

Mas ainda volta como undefined. :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vi você chamando a funcao carregaId3, e ali não é songName ao invés de track não?

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vi você chamando a funcao carregaId3, e ali não é songName ao invés de track não?

Abs

 

Eu chamo a carrega_id3() dentro da função stream(). O track tava ali pra teste, qualquer tag que eu tente (songname, TIT1, TIT2, TPE1, artist, TRCK, track, ou etc.) volta undefined.

 

Eu até testei tentando pegar o stream de outro link de webradio mas não consegui pegar o id3 também... estranho porque tem até um código PHP que eu usava pra pegar essas id3 que ainda funciona! Mas não fui eu quem fiz e eu não entendo de php pra decirá-lo e usá-lo no flash. Tem como eu usar o Dynamic text para ler algum .php ou .js que pegue essas id3 e mostre no swf? Se sim, pode ser a solução, apesar de que eu não sei fazer. :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu ainda n entendi isso aqui:

Sound_id3.onload();
 {
 Sound_id3.onID3 = function()
 {
 _root.musica = "Musica: " + Sound_id3.id3.track;
 _root.artista = "Artista: " + Sound_id3.id3.artist;
 };
 setTimeout(Sound_id3.onID3,5000);
 }
Que deveria ser isso???

 

Seria uma tentativa de:

sound_id3.onLoad = function???

 

Se isso ai ta funcionando eu não sei....

Tu deu um trace dentro dessas suas chaves ai???

 

Pq acho que nem ai dentro não ta chengando...

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu ainda n entendi isso aqui:

Sound_id3.onload();
 {
 Sound_id3.onID3 = function()
 {
 _root.musica = "Musica: " + Sound_id3.id3.track;
 _root.artista = "Artista: " + Sound_id3.id3.artist;
 };
 setTimeout(Sound_id3.onID3,5000);
 }
Que deveria ser isso???

 

Seria uma tentativa de:

sound_id3.onLoad = function???

 

Se isso ai ta funcionando eu não sei....

Tu deu um trace dentro dessas suas chaves ai???

 

Pq acho que nem ai dentro não ta chengando...

 

Abraços

 

Exato. o Sound_id3.onload ta funcionando como uma função, dentro dela tem a .onID3. Funcionar ta funcionando, porque muda o texto "Musica: " e "Artista: ", só que as tags vem undefined ainda.

 

O trace eu não coloquei porque nem sei pra que serve e como implemento :(

 

Pelo que eu entendi e pelo que estou vendo, o Sound_id3.onLoad testa se carregou pra depois executar o que ta dentro dele. Eu não sei se estou usando as funções de maneira erronea, mas está chegando na função Sound_id3.onID3 e alterando os campos. Só não consegui fazer a id3 funcionar.

 

Como implementar o trace e qual o papel dele nessa questão? Pois eu consigo atribuir texto para os meus dynamic texts, porém, o .id3.atribute não ta retornando o valor que eu quero.

 

Obrigado pela ajuda!

 

Eu testei a função usando um arquivo .mp3 carregado no site e funcionou. As tags aparecem corretamente e tudo mais.

 

Poxa, parece que não vou ter uma solução em AS para pegar essas id3 de um streaming de webradio =|

 

Como tratar uma string vinda de uma URL em AS2? Achei o que vai resolver tudo pra mim, só falta saber fazer isso. hehe

 

Exemplo: Esta URL (http://pelomundo.ath.cx:7000/7) gera uma string que tem tudo que eu preciso para pegar as id3, e ela gera isso dinamicamente via PHP. Ok, agora resta saber como usar essa url para tratar esse texto no meu .fla. Eu sei ler e escrever em arquivos TXT e XML, mas não sei usar uma URL como a fonte do texto para tratar.

 

Alguma ajuda?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.