Lista de proyectos de Exponent Games

A continuación os describo los proyectos en los que he participado bajo el nombre de Exponent Games.

Reversadosdiciembre 2012 – Actualidad

Reversados

Reversados es un reversi multijugador para Android que permite a jugadores de todo el mundo jugar entre ellos de forma directa a traves de un nick o de forma aleatoria.

Ademas, está orientado a partidas relajadas ya que establece un tiempo de espera máximo de una semana por movimiento.

DESCARGA: Google Play Store

Qubixabril 2014 – Actualidad

Qubix

Juego de memoria para Android que consiste en memorizar los colores de las caras de un cubo para eliminar una serie de colores que van apareciendo.

DESCARGA: Google Play Store

Además de estos proyectos estoy trabajando en unos cuantos mas pero no están terminados todavía. Según los vaya publicando ire actualizando la lista.

Cómo programar para la PS2 ps2

Si tienes algún interés en la programación de PS2 tienes las siguientes opciones:

Opción 1: Comprar el Official Development Kit

Opción 2: Utilizar PS2 Linux

Opción 3: Utilizar PS2DEV

Aquí nos centraremos concretamente en la tercera opción. El primer paso es instalar el entorno de desarrollo de PS2DEV que puedes descargar de ps2dev.org o ps2dev.ofcode.com. Tengo pensado colgar en esta web mi instalación personalizada con la última versión que encontré de ps2sdk compilada y puede que con algunas librerías mas.

Cuando consigas instalar, compilar y hacer que funcione correctamente el entorno de desarrollo necesitas una forma de cargar los programas en tu PS2. El método más común para cargar programas en la PS2 es utilizar ps2link, para utilizar ps2link necesitas tener el adaptador de red de la PS2. También existe otro método para cargar programas, utilizando NapLink. Para utilizar NapLink necesitas un cable USB PL-2301 para conectar la PS2 al PC.

Tanto si usas ps2link como NapLink necesitas ejecutar la parte servidor en la PS2 y para ello necesitaras tener instalado un modchip o tener el Independence Exploit.

Yo personalmente utilizo el servidor ps2link y el cliente InLink, con un pequeño programilla que hice para arreglar un fallo que me salía en el InLink.

En la sección de videos encontrarás los pequeños programas que vaya creando y puedes descargarlos para ejecutarlos en tu PS2. :D

Historia de PS2DEV ps2

Para cualquiera que sea nuevo en PS2DEV, siempre esta bien tener algún conocimiento sobre que paso en el pasado y como ha cambiado hasta ahora. Así que en esta sección se dará una visión general de hechos más significativos en PS2DEV.

Si quieres mayor información sobre los eventos listados a continuación, puedes encontrarla aquí http://ps2dev.org/News

Año 2000

Octubre/Noviembre 2000 - Publicada la PlayStation 2

Año 2001

01.02.01 - Publicado EE GCC 2.95.2

Un port de GCC 2.95.2 es publicado por SNSYS, tenía soporte para instrucciones MMI y los VUs.

17.03.01 - Publicada la demo 3 Stars Demo con código fuente

Imagen 3 Stars Demo de Duke of Napalm fue la primera demo de código abierto para la PS2, esta escrita en ensamblador.

05.04.01 - Se pone online ps2dev.livemedia.com.au

Esta es la website que mas tarde se llamo PS2DEV.org (En 04.03.03 para ser exactos). Fue iniciado por Oobles (David Ryan) y a día de hoy, el sigue manteniendola. No hace falta decir, que esta web ha sido de gran importancia como punto de encuentro para ‘PS2DEVing’.

12.07.01 - Duke’s GCC library

Primera pequeña librería gráfica para PS2 para ser usada con GCC. No creo que alguien la usara y recuerdo que tenia bastantes fallos.

01.07.01 - Publicada la beta del Kit de Linux para la PS2

Se publica el Kit de Linux para la PS2 en Japón, pero lo mas importante es que viene con los manuales de la PS2, que documentan el EE, los VUs y el GS.

23.07.01 - Publicada Pillgen

Imagen Pillgen de Vzzrzzn es la primera demo escrita completamente en C. Venia con el código fuente y tenia un buen funcionamiento para su época. Yo (lukasz) utilicé este código fuente como referencia para varias cosas cuando fue publicado.

17.09.01 - Publicada PS(x)lib

Se publica Psx2lib, anteriormente ps2lib y finalmente ps2sdk, de Gustav Scotti. Este es el primer intento público de reversar las librerías SIFRPC, que fue el primero en tener soporte de E/S (IOP). Mas tarde resultó que este código tenia bastantes fallos y fue completamente reemplazado en PS2SDK por el código de SIFRPC de Marcus R. Brown, que es el que se usa hoy en día y que ha demostrado con el tiempo ser bastante estable.

15.10.01 - Publicado Funslower

Imagen Demo del grupo danes Soopa Doopa, primer programa de PS2DEV en usar VU1 para el renderizado. Un hito en PS2DEV.

11.12.01 - Publicado Naplink

Imagen Otro hito importante en PS2DEV, Napalm publica una herramienta para cargar programas de PS2 desde un PC, comúnmente llamado loader. El código fuente de Naplink nunca se ha publicado.

21.12.01 - Publicada Padlib

Pukko reversó la librería EE SIFRPC (padlib) para joypads para usarlo junto con ps2lib, primer uso real del código SIFRPC en ps2lib. El primer código para utilizar joypads en PS2DEV. Más tarde le han seguido otras librerías SIFRPC, la mayor parte de ellas forman parte de PS2SDK.

Año 2002

06.03.02 - Primeros tutoriales de Dreamtime

Los tutoriales de Dreamtime llamaron bastante la atención (y todavía lo hacen) y consiguió introducir a muchas personas a PS2DEV. Sin embargo, el código esta bastante anticuado y requiere algunos cambios para hacerlo funcionar con las actuales librerías y toolchains.

20.04.02 - IOP GCC produce IRX

Karmix parcheó el port de IOP GCC para que produzca directamente archivos IRX. Antes se usaba elf2irx que tenia bastantes fallos y este parche realmente mejoró la calidad de GCC para el IOP.

22.04.02 - Publicado PSMS 0.1 Alpha

PSMS es un emulador de Sega Master System por Sjeep. lo que lo hace interesante es que es uno de los primeros programas de PS2 que soporta cargar archivos, joypads y sonido.

21.05.02 - The Third Creation Round #1

The Third Creation empezó como una competición de demos iniciada por varias personas en el canal #PS2DEV de IRC en EFNet (ahora en freenode). La “competición” consistía básicamente en publicar algún programa en PS2DEV cada cierto tiempo. La competición se celebró mensualmente durante dos años. Muy pocas personas de las que enviaron demos eran realmente demo sceners, eran simplemente personas interesadas en una plataforma alternativa. La WebSite de The Third Creation ya no esta disponible, Puedes ver un mirror del archivo de The Third Creation aquí.

31.05.02 - Publicada Libito

Libito fue mi librería gráfica (de lukasz), fue una de las primeras librerías gráficas reales. El proyecto no esta descontinuado y ahora la mayoría de la gente usa gsKit de Neovanglist.

22.05.02 - Publicado el Kit de Linux para PS2 PAL/NTSC

Se publica el PS2Linux en territorios PAL/NTSC y se abre la website playstation2-linux.com. Con este kit se pueden programar los VUs, echa un vistazo a sps2 project para programación avanzada de VU. El código VU también se puede utilizar en PS2DEV, si es portado.

17.06.02 - Publicado Amigamod

Amigamod de Vzzrzzn fue un reproductor de música .MOD que se ejecuta totalmente en el IOP, el primer modulo IOP avanzado.

15.10.02 - Publicado LIBCDVD

El driver original de CD/DVD para la PlayStation 2 solo soporta formatos de CD/DVD muy limitados. LIBCDVD de Hiryu y Sjeep crea una capa sobre el driver original y da soporte a mas formatos de CD/DVD. Este proyecto se usa mayormente en emuladores.

20.10.02 - Publicado SjPCM

La programación de sonido en la PS2 fue un poco difícil al principio, ya que requiere un modulo IOP que utilice el modulo LIBSD (librería de sonido a bajo nivel). SjPCM era un modulo simple con una librería EE RPC, que hacia mas fácil enviar datos PCM al SPU2. Este módulo se hizo bastante popular y se utiliza en muchos programas de PS2. Existe también una variante disponible, iSjPCM que no requiere LIBSD.

0

3.11.02 - [RO]man abre una website

[RO]man mantenia una website llamada “PS2DEV: Bios Details for Developers”, donde posteaba código de módulos IOP reversados entre otras cosas. El código en realidad no se compila, sino que muestra lo que está sucediendo dentro de los módulos IOP. La website ya no esta disponible, Aquítienes un mirror de los archivos.

20.12.02 - PS2Reality publica un reproductor DivX

Un grupo español de programadores publica un media player que reproduce películas DivX, tuvo una gran atención en la prensa. Existe otro reproductor de DivX disponible llamado Simple Media System.

Año 2003

02.01.03 - Publicado PS2IP

PS2IP junto con el driver SMAP fue el comienzo de lo que se convertiría en Pukklink, ahora PS2Link.

23.01.03 - Publicado Driver SMAP

El driver del adaptador de red de PS2Linux portado a PS2DEV.

23.02.03 - Publicado Inlink de InPulSe Team

Imagen

Inlink es un cliente de Pukklink/PS2Link para Windows que tiene incorporado soporte para sintonizador de TV. Es una gran herramienta si tienes tu PS2 conectada a tu tarjeta de TV (como yo), entonces solo necesitas una herramienta para cargar y probar tus programas de PS2. El cliente ahora es bastante antiguo y podría no ser compatible con todas las características de PS2Link.

02.03.03 - Publicado EE GCC 3.2.2

La EE toolchain usada en PS2DEV era la versión 2.95 y estaba bastante anticuada, MrHTFord inició el esfuerzo de portarlo sobre GCC 3.2.2. Esta es la toolchain usada actualmente en todos los proyectos de PS2DEV.

24.03.03 - Publicado Pukklink

Imagen

Hasta este punto Naplink era utilizado para desarrollar en PS2DEV. Pukklink de Pukko utiliza el adaptador de red oficial para transferir los programas de PS2 a la PS2 desde el PC. Más tarde pasó a llamarse PS2Link, que es el cargador más utilizado en PS2DEV.

01.03.03 - Se actualiza el código de PS2Lib SifRpc y SifCmd

No es un secreto que el código de SifRpc y SifCmd en ps2lib tenia bastantes fallos. Marcus R. Brown había estado trabajando en su propia implementación que era mas estable y lo añadió a ps2lib, reemplazando el código existente. Ha demostrado con el tiempo ser bastante estable y es un salto adelante en PS2DEV, ya que la gente ha estado luchando con la implementación original. Esta es una de las partes fundamentales en PS2dev, sin ella no habría una E/S (estable).

25.04.03 - Publicada gsLib

Hiyru publico gsLib, una librería gráfica en C++. El la usó en su emulador de SNES Snes-Station.

06.05.03 - Publicada dreamGL

dreamtime publica una mínima implementación de OpenGL para PS2Dev. Utiliza Path 3, por lo que el rendimiento no es bueno y también soporta doubles, que son emulados por software, otro cuello de botella de rendimiento. Esta librería se utilizo en la demo Plasma Tunnel presentada a The Third Creation.

16.05.03 - Publicada PS2lib 2.0

Importante revisión en PS2Lib, tanto en estructura como en código. Este fue el comienzo de lo que más tarde se convertiría en PS2SDK.

24.05.03 - Publicada libGL

jenova0 publicó su implementación de OpenGL de código cerrado, también usa Path 3 por lo que sé y no me se utiliza realmente en ningún programa de PS2.

03.07.03 - Publicado ps2drv

Marcus R. Brown publica un entorno para la programación de módulos de IOP, llamado ps2drv (ps2 driver). Este entorno hizo mas fácil definir las imports y exports de los modulos IOP. Esto posteriormente se fusionó con PS2Lib y otras bibliotecas a PS2SDK.

04.08.03 - Publicada Aura for Laura

Imagen

La segunda demo de Soopa Doopa, esta vez con sonido. Esta demo ganó el premio de Mejores Efectos en Scene.org Awards en 2003.

16.08.03 - PS2 Independence Exploit

El hacker de PS2 Marcus R. Brown publica el Independence Exploit. Un exploit de desbordamiento del buffer que puede ser activado utilizando un archivo modificado en la memory card y un juego original de PSOne. Este exploit fue parcheado en modelos posteriores. Este exploit no evita la protección de disco original, simplemente carga un programa de PS2 desde la memory card.

07.10.03 - Publicado Send0r

Send0r de Oobles fue un programa de PS2 que podía descargar programas de PS2DEV desde internet, este proyecto lamentablemente murió silenciosamente.

23.10.03 - Publicada sbv

sbv es una pequeña librería de Marcus R. Brown con un par de parches. Un parche hacia posible cargar modulos de IOP desde la memoria del EE, antes solo se podía carga utilizando E/S. El otro parche permitía cargar modulos de IOP desde la memory card.

06.11.03 - Publicada libhdd

libhdd de Sjeep era una librería para acceder al HDD de la PS2. El código mas tarde fue publicado y ahora forma parte de PS2SDK.

18.12.03 - PS2 Serial Cable

Herben es el autor original del PS2 serial cable, las instrucciones para construirlo estan posteadas por Marcus R. Brown. Mirror de las instrucciones originales.

Año 2004

02.01.04 - Publicado PS2LinkImagen

Pukklink paso a llamarse PS2Link y fue publicado. El código fuente de PS2Link esta bastante anticuado y podría necesitar una revisión. Todavía se le hacen actualizaciones y funciona muy bien, a pesar de que el código este anticuado.

05.02.04 - Publicado el Toolchain script

ooPo publica la primera versión de su toolchain script, que automáticamente configura los toolchains, ps2sdk y ps2client.

27.02.04 - Publicado freesd

TyRaNiD y Yo (lukasz) trabajamos juntos y publicamos freesd, un sustituto libre de LIBSD.

02.05.04 - Anunciado PS2SDK

PS2LIB y PS2DRV se fusionaron en PS2SDK y el proyecto fue anunciado.

23.04.04 - Anunciado gsKit

Esta librería gráfica de Neovanglist fue anunciada y mas tarde se convirtió en la librería gráfica mas popular en PS2DEV.

05.04.04 - Publicada Oddment Demo

Imagen

adresd, emoon, jar, raizor y TyRaNiD trabajaron juntos para crear esta demo para Breakpoint 2004. Música de Trinodia. Acabó 7º en la categoría Console/Real Wild. Descargalo aquí

06.09.04 - Publicado PS2SDK 1.1

Fue publicada la primera versión actualizada de PS2SDK de forma binaria, nos se publicaron muchas versiones en binario despues de esta. Yo (lukasz) siempre recomiendo compilar PS2SDK, ya que hay muchos cambios desde la última publicación oficial en binario.

24.10.04 - Publicado OpenVCL

emoon y chip publicaron su propia variante libre de VCL, una herramienta disponible para los desarrolladores licenciados que permite escribir programas de VU en un lenguaje parecido a C y que podía generar código VU optimizado. Unos meses mas tarde fueron publicados los binarios para Linux y Windows y este proyecto no ha actualizado desde entonces.

12.12.04 - Publicada PlayStation Portable

Cuando se publicó la PSP, muchos desarroladores se trasladaron a ella y PS2DEV empezó a ralentizarse.

23.12.04 - Publicados los binarios de VCL

Se publicaron los binarios de VCL, una herramienta para escribir código VU en un lenguaje parecido a c. Descargalo aquí

Año 2005

El 2005 fue un año verdaderamiente lento para PS2DEV, muchos proyectos fueron actualizados, pero no paso nada importante. 2005 fue el año en que PSPDEV despego y en un corto periodo de tiempo ha demostrado ser mucho mas popular que PS2DEV.

09.02.05 - Publicada Llibplanar

Llibplanar es una librería gráfica de neofar. La librería parece bastante avanzada, no obstante toda la documentación esta escrita en español, por lo que además de ser utilizado en algunos de los proyectos de neofar, Yo (lukasz) nunca he visto mucho uso de esta librería en ningún otro lugar. Website PS2Dev de neofar.

Año 2006

26.01.06 - USBD añadido a PS2SDK

Driver USB de cody56 se añade al PS2SDK.

17.04.06 - Publicada demo 4 Edges Demo

Demo de The Black Lotus (TBL) publicada en Breakpoint 2006. Demo muy avanzada, mostrando el potencial de PS2DEV. enlace a Poüet

20.06.06 - Publicado PS2 Racer

Imagen

Ps2 Racer de jbit fue el juego que ganó la competición de juegos de PS2DEV.org. Utiliza renderizador VU1 y es muy jugable, Yo (lukasz) recomiendo probarlo. Descargalo aquí, post original de jbit.

06.11.06 - Publicada PS3

Cuando se publicó la PS3, la mayoría de los desarrolladores que quedaban en PS2DEV que no cambiaron a la PSP, cambiaron a la PS3. Despues de publicarse la PS3, la PS2 se convirtió en “vieja” y PS2DEV se ralentizó de forma espectacular.

Año 2007

30.08.07 - freepad y freemtap añadidos a PS2SDK

freepad y freemtap son drivers libres del joypad y el multi-tap para el IOP, compatibles PADMAN y MTAPMAN, publicadas por mi mismo (lukasz).

Año 2008

19.05.08 – Publicado Free McBootOriginalmente conocido como “Free OsDatel Boot MC 1.0 BETA” en los foros de PSX-Scene, Free McBoot permite iniciar un ELF directamente desde la memory card. Esto es posible debido a que el OSD busca actualizaciones de si mismo en forma de ELFs cifrados con Magic Gate en la memory card. La gente detras del proyecto Free McBoot fueron capaces de coger un ELF cifrado ya existente e inyectar un pequeño cargador de ELF propio y dejar que el OSD lo cargase como si fuera una actualizacion desde la memory card. Este pequeño cargador de ELF cargaba un ELF sin cifrar desde la memory card o desde un pendrive. Una vez que Free McBoot esta instalado en una memory card, arrancara en cualquier PS2 en la que se inserte, siempre y cuando la PS2 busque actualizaciones en la memorycard. Que creo que todos los modelos de PS2 hasta la publicacion de Free McBoot lo hacen.

Desde el punto de vista del desarrollo, esto es interesante, ya que no necesitas modificar el hardware de tu PS2 para poder arrancar una herramienta de desarrollo como PS2Link y empezar a trabajar con PS2DEV. La unica desventaja de esta herramienta es que para poder instalar Free McBoot en la memory card, necesitas una PS2 capaz de arrancar el ELF de instalacion. Como alternativa puedes comprar la memory card Datel Memory Plus 64MB que viene con un ELF de actualizacion OSD preinstalado. Utiliza el mismo metodo que Free McBoot para cargar ELFs de una memory card o pendrive USB. El cargador de ELF usado en la memory card de Datel tiene algunas limitaciones y problemas, de los que podras leer mas y obtener una solucion aqui.

Uso básico del desensamblador ps2dis ps2

Ps2dis es un desensamblador diseñado especialmente para los programas de ps2. Con este programa podremos obtener el código en ensamblador de cualquier ejecutable de PlayStation 2 (elf o irx).

El código resultante no podremos recompilarlo. Tampoco podremos extraer el código fuente en lenguaje de alto nivel, en el que fue programado realmente. Pero nos puede ser de utilizad para realizar pequeñas modificaciones como trucos, o alteraciones de cualquier otro tipo.

Para intentar identificar que hace cada parte de código o cual es la parte que queremos modificar se utilizan las etiquetas. Puedes abrir la lista de etiquetas desde el menú Edición > Saltar a etiqueta o pulsando Ctrl+G.

Imagen

En esta ventana aparecerán las etiquetas que haya creado el analizador y las que hayas definido.

Una vez que hayas encontrado una etiqueta relacionada con la parte del programa que quieres modificar, haz doble clic sobre ella y te llevara a la parte del código que estabas buscando. Para encontrar la zona exacta que tienes que modificar puedes seleccionar la etiqueta con la tecla espacio y pulsando F3 te llevara a sus referencias.

A partir de ahí solo queda paciencia e intentar entender el código.

Lista de instrucciones:

ADD — Add

Description: Adds two registers and stores the result in a register

Operation: $d = $s + $t; advance_pc (4);

Syntax: add $d, $s, $t

Encoding: 0000 00ss ssst tttt dddd d000 0010 0000

ADDI — Add immediate

Description: Adds a register and a signed immediate value and stores the result in a register

Operation: $t = $s + imm; advance_pc (4);

Syntax: addi $t, $s, imm

Encoding: 0010 00ss ssst tttt iiii iiii iiii iiii

ADDIU — Add immediate unsigned

Description: Adds a register and an unsigned immediate value and stores the result in a register

Operation: $t = $s + imm; advance_pc (4);

Syntax: addiu $t, $s, imm

Encoding: 0010 01ss ssst tttt iiii iiii iiii iiii

ADDU — Add unsigned

Description: Adds two registers and stores the result in a register

Operation: $d = $s + $t; advance_pc (4);

Syntax: addu $d, $s, $t

Encoding: 0000 00ss ssst tttt dddd d000 0010 0001

AND — Bitwise and

Description: Bitwise ands two registers and stores the result in a register

Operation: $d = $s & $t; advance_pc (4);

Syntax: and $d, $s, $t

Encoding: 0000 00ss ssst tttt dddd d000 0010 0100

ANDI — Bitwise and immediate

Description: Bitwise ands a register and an immediate value and stores the result in a register

Operation: $t = $s & imm; advance_pc (4);

Syntax: andi $t, $s, imm

Encoding: 0011 00ss ssst tttt iiii iiii iiii iiii

BEQ — Branch on equal

Description: Branches if the two registers are equal

Operation: if $s == $t advance_pc (offset = 0 advance_pc (offset = 0 $31 = PC + 8 (or nPC + 4); advance_pc (offset 0 advance_pc (offset > h; advance_pc (4);

Syntax: sra $d, $t, h

Encoding: 0000 00— ---t tttt dddd dhhh hh00 0011

SRL — Shift right logical

Description: Shifts a register value right by the shift amount (shamt) and places the value in the destination register. Zeroes are shifted in.

Operation: $d = $t >> h; advance_pc (4);

Syntax: srl $d, $t, h

Encoding: 0000 00— ---t tttt dddd dhhh hh00 0010

SRLV — Shift right logical variable

Description: Shifts a register value right by the amount specified in $s and places the value in the destination register. Zeroes are shifted in.

Operation: $d = $t >> $s; advance_pc (4);

Syntax: srlv $d, $t, $s

Encoding: 0000 00ss ssst tttt dddd d000 0000 0110

SUB — Subtract

Description: Subtracts two registers and stores the result in a register

Operation: $d = $s - $t; advance_pc (4);

Syntax: sub $d, $s, $t

Encoding: 0000 00ss ssst tttt dddd d000 0010 0010

SUBU — Subtract unsigned

Description: Subtracts two registers and stores the result in a register

Operation: $d = $s - $t; advance_pc (4);

Syntax: subu $d, $s, $t

Encoding: 0000 00ss ssst tttt dddd d000 0010 0011

SW — Store word

Description: The contents of $t is stored at the specified address.

Operation: MEM[$s + offset] = $t; advance_pc (4);

Syntax: sw $t, offset($s)

Encoding: 1010 11ss ssst tttt iiii iiii iiii iiii

SYSCALL — System call

Description: Generates a software interrupt.

Operation: advance_pc (4);

Syntax: syscall

Encoding: 0000 00— ---- ---- ---- ---- —00 1100

XOR — Bitwise exclusive or

Description: Exclusive ors two registers and stores the result in a register

Operation: $d = $s ^ $t; advance_pc (4);

Syntax: xor $d, $s, $t

Encoding: 0000 00ss ssst tttt dddd d--- —10 0110

XORI — Bitwise exclusive or immediate

Description: Bitwise exclusive ors a register and an immediate value and stores the result in a register

Operation: $t = $s ^ imm; advance_pc (4);

Syntax: xori $t, $s, imm

Encoding: 0011 10ss ssst tttt iiii iiii iiii iiii

Adjunto el ultimo ps2dis traducido al español. por mucho que lo he buscado no lo encuentro asique como no me ponga a traducirlo otra vez…

Como poner musica personalizada en Ifcaro's tetris ps2

En la version 1.3 se ha introducido la posibilidad de escuchar tus propios mp3 desde el usb.

Para ello solo hay que crear un archvo config.xml (si quereis que se llame de otra forma me lo decis) en la raiz de la unidad usb.

El archivo tiene que tener el siguiente formato:

<config>
	<music>carpeta_con_mp3_1</music>
	<music>carpeta_con_mp3_2</music>
</config>

Se supone que se pueden poner hasta 16 carpetas (no esta comprobado). Y no buscará en las subcarpetas (de momento), por lo que hay que ponerle la ruta exacta de la carpeta que contenga los mp3.

Es probable que haya muchos fallos y si alguien encuentra alguno que no dude en decirmelo para que lo corrija.