Comunidad de diseño web y desarrollo en internet online

como obtener la duración de un archivo mp3

Citar            
MensajeEscrito el 28 Ago 2013 11:29 pm
Hola, como puedo obtener la duración de un archivo mp3 sin esperar a que se descargue completamente, tengo entendido que este dato forma parte de los metatags, pero como lo obtengo mediante código.

¿Es posible?. En la documentación encuentro:
Sound.id3.comment
Sound.id3.album
Sound.id3.genre
Sound.id3.songName
Sound.id3.artist
Sound.id3.track
Sound.id3.year

Pero no lo que quiero.

O a lo mejor me pueden orientar como puedo hacer para que mientras se reproduce el audio sucedan dos cosas:
- Que se muestre una barra de descarga del audio.
- Que se muestre una barra de progreso del audio.
El primero creo que ya lo conseguí con las cantidades de bytes descargados y por descargar asi

Código ActionScript :

(tamaño_barra)*(e.bytesLoaded/e.bytesTotal) 
pero el segundo no puedo, necesito una referencia como la duración total del audio.

Bueno, gracias de antemano por cualquier ayuda o recomendación. :)

Por edavio

23 de clabLevel



 

chrome
Citar            
MensajeEscrito el 29 Ago 2013 09:17 am
Creo que con "Sound.length" te sale la longitud del mp3 en milisegundos.

trace (Sound.length) te mostrará la longitud.

Solo llevo dos días tocando el sonido en as3 así que no se si podré ayudarte. Creo que tienes que cargar el audio en una variable tipo sound y puedes manejarla a través de otra tipo SoundChannel.

Te dejo un trozo de código que utilizo yo y me funciona

var s:Sound = new Sound(); Reproducir.gotoAndStop(1); a=1;
s.load(new URLRequest("coche.mp3"));

var canal:SoundChannel = new SoundChannel();
canal=s.play();
canal.stop();

entre otras cosas pongo después de este código lo siguiente:

trace (s.length,canal.position)// Con esto observo la longitud de mi audio y por la posición por la que va.

Haciendo matemáticas puedes sacar el porcentaje en el que va tu audio de la siguiente forma:

var Porcentaje:Number;
Porcentaje=cana.position*100/s.length;

Espero resultar de ayuda

Por Yemedan

10 de clabLevel



 

chrome
Citar            
MensajeEscrito el 29 Ago 2013 12:23 pm
BuenAS:

Sound.length muestra la longitud (en milisegundos) del sonido cargado. Por tanto, debes esperar al evento COMPLETE para que este valor tenga la duración total del sonido.

Por otro lado, como comentas, si esperas a que se hayan cargado los metadatos (estos se cargan casi de inmediato), en la propiedad id3.TLEN tendrás la longitud del sonido en milisegundos

Código ActionScript :

protected function onMetadata(event:Event):void
{
   trace("onMetadata", (event.currentTarget as Sound).id3.TLEN);
   
}

Cuidado que este valor puede no existir si el programa que exportó el audio a mp3 en su momento no lo incluyó, y puede que no de el valor exacto de la duración (por ejemplo, el audio puede durar 350215 y este valor venga redondeado a 350000).

Yo lo que haría es tomar este valor, si existe en el mp3, hasta que se produzca el evento COMPLETE de la carga del sonido y entonces tomar el valor más real de Sound.length.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 29 Ago 2013 03:10 pm
Al tratar de correr : lblSongYear.text = myMusic.id3.TLEN me sale error, diciendo que es null pero los metadatos son algo parecidos a estos, figura la duracion . con la propiedad length se obtiene la longitud pero se tiene que esperar a que se descargue completamente el audio.

Por edavio

23 de clabLevel



 

chrome
Citar            
MensajeEscrito el 30 Ago 2013 09:08 am
Puedes crearte un punto de interrupción en el controlador de eventos que hayas creado para los metadata y comprobar en la propiedad id3 del sonido cargado qué propiedad corresponde con la duración.

Si estás utilizando Flash Prof. un pto. de interrupción se crea tocando el margen de la línea en su origen (debe aparecer un punto rojo). Y para depurar pulsa Ctrl + May + Intro (o sea en Ctrl + Intro habitual, pulsando también la tecla de mayúsculas).

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 31 Ago 2013 12:22 am
Gracias Lukánicos, bueno no soy experto en esto del flash, el programa necesita de javascript para correr por eso no puedo depurarlo, bueno haré otro pequeño para probar.

Existen id3 como evento y como propiedad, ¿Cuando se dispara el evento id3? y para que sirve ya que si quiero obtener un metadato simplemente podria usar la propiedad id3.

En la imagen que puse arriba, algo así me aparece cuando veo los datos del audio, entre esos esta la duración del audio, teniendo ese dato recién podría yo medir el avance del audio mientras se reproduce y descarga a la vez. Pero no puedo obtenerlo con ninguno de estos códigos; my_sound.duration , my_sound.id3.TLEN .

saludos

Por edavio

23 de clabLevel



 

chrome
Citar            
MensajeEscrito el 02 Sep 2013 07:10 am
BuenAS:

Al sonido que vas a cargar deberías añadirle el listener (por cierto, es buena práctica llamar a las instancias en minúsculas, o sea, utilizar 'sound' en lugar de 'Sound' para diferenciarlo de la clase):

Código ActionScript :

sound.addEventListener(Event.ID3, onMetadata);

function onMetadata(event:Event):void
{
   trace("onMetadata", (event.currentTarget as Sound).id3.TLEN);
   
}


El la línea donde está el trace es donde sería bueno crear un pto de interrupción para comprobar exactamente qué valores tiene definidos la propiedad id3

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 06 Sep 2013 10:50 pm
Muchas gracias pero, para resumir, ¿es posible saber la duración de un audio de manera inmediata?,
my_sound.duration , my_sound.id3.TLEN no funcionan

Graciass y saludos

Por edavio

23 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 Sep 2013 11:53 am
BuenAS:

Si quieres saberlo de forma inmediata podrías crearte un array y guardar en él los datos de la duración de cada mp3, por ejemplo, junto a la url.

Incluso, si quieres independizar un poco el swf de estos datos, podría ser interesante que cargaras un xml con los datos de las url's de cada archivo y su duración. Así, podrías cambiar el xml sin necesidad de tener que compilar de nuevo el swf.

Por lo que he leido más arriba parece que el archivo de sonido SI lleva los metadatos. Lo digo porque te puedes encontrar archivos de sonido muuuuuy variados, desde los que no llevan metadato alguno, o los que sólo el título o el año de publicación... o incluso que los lleve al final del archivo.

Si después de generar el pto de interrupción que comentaba antes descubres que tus archivos de sonido llevan el metadato de la duración, este evento se produce casi al momento de empezar la descarga por lo que no tendrás problema a la hora de leerlo casi al mismo tiempo que se empieza a reproducir el sonido. Pero, lo que digo,prueba, porque los archivos de sonido, si no los generas tú, pueden ser muy heterogéneos.

Un saludo.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.