Andrés Villagrán Placencia Flex / AS3 / Papervision3D / PHP / Rails Developer

25May/080

Flex Media Player r3

He subido el código y el instalador de Flex Media Player revisión 3, recordar que no es versión final es solo para prueba, para descargarlo ir a la página del proyecto:

http://code.google.com/p/flexmediaplayer/

FlexMediaPlayer-r3

Novedades:

  • Shuffle!! (Por ahora obligatorio, pronto opcional)
  • Cover Display con Reflejos!

Hacer doble click para escuchar, si se pone play sin seleccionar una canción se caerá, necesitas Adobe AIR para ejecutar el instalador.
Nota: Si utilizas Windows Vista debes ejecutarlo como Administrador, en la proxima versión no ocurrirá esto.

11May/080

Avances FlexMediaPlayer : r2

He trabajado en FlexMediaPlayer bastante durante el día, ahora ya tengo listo el menejo de la base de datos de medios, la lectura de tags (mp3 en este caso) y la reproducción de audio (Doble click y reproduce la canción seleccionada), Feedback gráfico del avance de la reproducción, y la gestión de menus y modulos basados en configuraciones XML como nombre anteriormente, se ve algo así:FlexMediaPlayer r2La aplicación no la subiré como instalador para AIR hasta que porlomenos tenga las funciones básicas, pero si quieren revisarlo (y ejecutarlo obviamente) deben descargarlo desde el SVN (pueden importarlo a Flex Builder 3 sin problemas):

svn checkout http://flexmediaplayer.googlecode.com/svn/trunk/

flexmediaplayer-read-onlyEspero que sea de su agrado, ojalá que más gente se anime a desarrollar en este reproductor 😀
Visiten la web de este para mayor información:
http://code.google.com/p/flexmediaplayer/

Escuchando: Ayeron - Age of Shadows powered by FlexMediaPlayer

29Apr/084

Avances FlexMediaPlayer

Ayer, conversando con el profesor Pedro Campos en la Universidad del Bío Bío, le explicaba mis ideas en relación a la modularidad que explicaba en el post anterior, en ese entonces tenía pensado que FlexMediaPlayer encontrara automaticamente los modulos y los agregue al menu principal (lo cual, ya hacía en ese entonces), pero el problema era el como le daba información especial, por lo cual él me sugirió utilizar configuraciones XML para registrar información, y como Flex maneja facilmente un XML salió bastante rapido esta "Feature", es más menos algo así:

private function FindPreferencesMenus():XMLList {

var preferencesPath:String = "modules/preferences/";

var directory:File = File.applicationDirectory.resolvePath(preferencesPath);

var contents:Array = directory.getDirectoryListing();

var fileStream:FileStream = new FileStream();

var file:File;

var xml:String;

var configXML:XML;

xml = "<menus>";

for (var i:uint = 0; i < contents.length; i++)

{

if(contents[i].isDirectory) {

fileStream.open(File.applicationDirectory.resolvePath( preferencesPath+

contents[i].name+

"/config.xml" ), FileMode.READ);

configXML = new XML(fileStream.readUTFBytes(fileStream.bytesAvailable));

xml += "<menu label=\""+configXML.MenuLabel[0]+"\" action=\""+

configXML.url[0]+"\" />";

}

}

xml += "</menus>";

 

return new XMLList(xml);

}

Con esto lee la información que esta en un config.xml y agrega los campos al menu principal (que es un Tree):

<config>

<url>modules/preferences/Player/Player.swf</url>

<MenuLabel>Player Preferences</MenuLabel>

</config>

Todo el código estará disponible en pocos días 😀

28Apr/083

( Flex / MonoPlayer ) = FlexMediaPlayer

Hace algún tiempo me dediqué a programar un reproductor de música, siempre he tenido ese bichito que me dice "haz algo con medios" así que en 2 o 3 días, ya no recuerdo bien,  hice este programa, en C# con Mono y como engine Gstreamer#, lamentablemente como Gstreamer# está incompleto fue dificultosa la programación con el, desde ahí que lo tengo tirado, seguramente mucha gente cree que Banshee utiliza el susodicho Gstreamer#, pero no, es un motor pequeño escrito en C que permite la interconección entre Banshee y Gstreamer, lo que realemente no era muy comodo, por lo cual decidi seguir los caminos de la almohadilla (#),  mi programa (MonoPlayer) reproduce audio, maneja una base de datos de canciones, lee tags del MP3 (Incluso muestra el Cover embebido de este), pero no me da grandes oportunidades seguir trabajando en este por lo anteriormente nombrado.

Desde el verano he estado trabajando mucho con Flex, y desde fines de Marzo con AIR (Días después de haber sido portado a Linux, lo que lo hace completamente multiplataforma, Linux, Mac y Windows) el cual permite utilizar esta grandiosa tecnología de forma StandAlone y además incluye clases para trabajar con bases de datos, archivos, etc.
La idea me estaba dando vueltas hace varios días, pero todo se concretó ayer donde comence a trabajar en las clases base, el reproductor, interfaz gráfica, gestión de base de datos, etc.
La gran idea de este nuevo proyecto es que sea fácil y rápido desarrollar nuevos modulos, interfaces gráficas, plugins, etc. a mi parecer es bastante dificil en otros reproductores existentes ya que hay que leer mucho código y sinceramente es bastante engorroso intentar realizar algo nuevo, en cambio con flex podemos realizar un modulo fácilmente, y como permite conectarse directamente a la Aplicación podemos accesar a objetos que controlan el reproductor (como ejemplo, se pueden hacer muchas cosas más).
Otra gran utilidad que tiene Flex es el manejo de Medios ya que trae clases que permiten reproducir video, audio y muchos codecs de estos.
Por ahora solo he creado el proyecto en Google Code  el cual pueden revisar en http://code.google.com/p/flexmediaplayer/
A continuación tienen un pantallazo del avance:FlexMediaPlayer Screenshot 28-Abril-2008
Que hace:

  • Reproduce MP3
  • Lee Tags Básicos del MP3
  • Controles del reproductor básicos funcionando

Cuando tenga más tiempo para trabajar en este hago un update en el proyecto en Google Code, obviamente liberado bajo GPLv2

21Apr/089

Modularización con Adoble Flex

Una característica importante que tiene Flex es a la hora de crear módulos, este provee un componente el cual sirve para cargarlos (estos son SWF, el “ejecutable” que compila Flex), el Cargador de Módulos se crea de la siguiente forma:

<mx:ModuleLoader id="CargadorModulos" url="ejemplo_modulo.swf" width="100%" height="100%" />

Este se comporta como cualquier otro componente y tiene las típicas propiedades como width y height, donde podemos definir el tamaño de este, como también incluye la propiedad url, que será el modulo a cargar, en este ejemplo se cargará el modulo “ejemplo_modulo.swf”. Si queremos accesar desde el modulo a propiedades u objetos de la aplicación principal debemos importar lo siguiente (dentro de nuestro modulo):

<mx:Script>

<![CDATA[

import mx.core.Application;

private function init():void {

Application.application.ObjetoDesdeAplicacion.Metodo();

}

]]>

</mx:Script>

 

Puede ser que necesitemos ejecutar una función al momento de que cargue el módulo, como ya creamos la función init() debemos agregar la propiedad “initialize” a nuestro modulo:

<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" width="100%" height="100%" initialize="init()">

Ahora supongamos que queremos cargar otro modulo desde “ejemplo_modulo.swf” para esto simplemente podemos hacer lo siguiente (suponiendo que estamos agregando esto al CDATA de Script:

<mx:Script>

<![CDATA[

private function FuncionCargaOtroModulo():void {

Application.application.CargadorModulos.url = "otro_modulo.swf";

}

]]>

</mx:Script>

 

Pueden bajar el ejemplo completo donde encontrarán como crear menús y como tratar los eventos de estos para cargar un nuevo modulo.

Ejemplo de Modularización en Flex