PDA

Ver la versión completa : mp3 + lector textos?



xpositivex
19/04/2006, 03:09
seguramente esto ya se haya hablado en algun tema, pero he buscado y no he encontrado nada...

al rular la gp2x sobre linux (multitarea) existiria el modo de escuchar musica y a la vez tener el lector de textos abiertos (por ejemplo para leerte las letras de las canciones)??

guilleml
19/04/2006, 03:19
más o menos con madplay.

xpositivex
19/04/2006, 03:26
que rapidez, asi da gusto! :D pues muchas gracias, voy a ver como funciona...

LordPorremon
19/04/2006, 03:50
Alguien puede poner como rula el madplay ??? el readme es un poco lioso aparte de estar en inglés.

YOUSE
19/04/2006, 05:00
haber si alguien que sepa postea algo que soy novato y me interesa mucho.

Uncanny
19/04/2006, 05:54
No tiene mucho misterio, aquí (http://wiki.gp2x.org/wiki/MadPlayergp2x) teneis más info.

Para el que el inglés no sea lo suyo, básicamente consiste en crearse un script de extensión .gpe (se cargan desde la entrada Game del menú) o .gpu (se cargan desde la entrada Utility del menú), un ejemplo:
#!/bin/sh
mount /mnt/sd -o remount,sync
/mnt/sd/madplay/madplay --adjust-volume=0 -z -r /mnt/sd/mis_mp3s/*.mp3&
cd /mnt/sd/mi_aplicacion
/mnt/sd/mi_aplicacion/aplicacion.gpe
sync
mount /mnt/sd -o remount,async
madplay_pid=`pidof madplay`
echo "kill -9 $madplay_pid" >> /mnt/sd/madplay/madplay_output.txt
kill -9 $madplay_pid
cd /usr/gp2x/
exec /usr/gp2x/gp2xmenu


Imaginemos que guardais el archivo con el nombre lector_con_mp3.gpe en la raiz de la SD, solo teneis que ir a la sección del menú correspondiente a Game, entrar en la SD y lanzar lector_con_mp3.gpe.

Al hacerlo se lanza madplay con un volumen determinado (--adjust-volume=0 los valores van del -175 al 16, puede que tengais que reducirlo un poco si os poneis cascos, entre -10 y -20 por ejemplo) leyendo todos los MP3 que haya en el directorio mis_mp3s en la raiz de la tarjeta SD, reproduciendolos de forma aleatoria (-z) y repitiendo la reproducción de la lista de MP3s continuamente (-r), pasa a lanzar una aplicación cualquiera (ej: aplicacion.gpe) y podreis usarla con la música de fondo hasta que salgais de la aplicación, momento en el que cerrará tanto la aplicación como madplay y volvereis al menú de la GP2X.

P.D: Tened en cuenta que esto es un simple ejemplo con rutas inventadas, es solo para que pilleis la idea.

LordPorremon
20/04/2006, 02:02
Muchas gracias Uncanny pero nos referíamos a algo más sencillito, esas explicaciones que das no las entiendo, comencemos por algo como ¿ Qué es un script ?

Uncanny
20/04/2006, 03:11
Muchas gracias Uncanny pero nos referíamos a algo más sencillito, esas explicaciones que das no las entiendo, comencemos por algo como ¿ Qué es un script ?Google y la Wikipedia en estos casos responde esas preguntas básicas, por otro lado, aun sin saber que es un script, creo que viendo el ejemplo es facil deducir que es lo que hace un script, pero bueno, si crees que aun así necesitas una explicación...

Un script es un archivo de texto plano cuyas lineas de texto representan unas determinadas ordenes/comandos escrito en un lenguaje de programación concreto y el cual es conocido para un determinado programa denominado interprete (ej: sh, bash, python, perl, etc), dicho interprete tiene la tarea de ir leyendo linea a linea del script, interpretando cada una de ellas y traduciendo su contenido para realizar una acción.

En general, sin ser completamente exactos, se puede decir que existen programas compilados e interpretados, en este caso el script del ejemplo es un programa interpretado que al ser lanzado/ejecutado desde el menu de GP2X, automáticamente llama al interprete sh (mira la primera linea del ejemplo) y este va leyendo de forma transparente linea a linea del script, las cuales van siendo interpretadas secuencialmente y traduciendolas por acciones concretas. El interprete sh es lo que se denomina en UNIX y sistemas "like *NIX" como los basados en Linux (el sistema que usa la GP2X) como un interprete de linea de comandos o de shell, es decir, se dedica a interpretar lo que escribamos, realizar una determinada acción y devolver un resultado, ya sea listar el contenido de un directorio o ejecutar una aplicación. En DOS lo más parecido son los script BATCH (de extensión .bat), también conocidos como archivos de procesamiento por lotes.

Madplay puede ser lanzado "a pelo", como una aplicación más (en el wiki están el resto de opciones/parámetros que se pueden usar en madplay), solo que de ese modo solo es un reproductor de MP3 más, pero la pregunta de este hilo era poder escuchar música mientras se lee un texto, de ahí la necesidad de cargar madplay y que siga funcionando en "segundo plano" mientras ejecutas otra aplicación, como el lector de textos, ¿cual es la solución más facil para lograr esto? pues un script que realize automáticamente el trabajo de lanzar madplay en segundo plano y posteriormente el lector de textos.

En el ejemplo lo que ves son determinados comandos/ordenes para que las ejecute el interprete sh (ej: mount, cd, kill, echo, exec, etc.) pero de la mayoría no tienes que preocuparte, son las lineas que he comentado en el parrafo posterior al ejemplo las que debes cambiar para adaptarlas a lo que quieres hacer (he editado el mensaje anterior para subrayar las lineas importantes en negrita), como la ruta de madplay, de los mp3s y aplicación (como el lector de textos) que quieres que se ejecute con música de fondo.

P.D: Me he enrrollado más que una persiana para variar, pero creo que ha quedado bastante claro que es y para que puede servir un script en la GP2X.

crossmax
20/04/2006, 03:49
Debo ser el mas gañan de todos, porque aun asi, con lo clarito q lo has dejado todo no me llega a funcionar, se me queda en negro cuando ejecuto mi *.gpe q he dejado en la raiz. ESte es mi ejecutable:

#!/bin/sh
mount /mnt/sd -o remount,sync
/mnt/sd/aplicaciones/mp3/madplay/madplay --adjust-volume=-10 -z -r /mnt/sd/musica/*.mp3&
cd /mnt/sd/aplicaciones/xreader0.9
/mnt/sd/aplicaciones/xreader0.9/xreader.gpu
sync
mount /mnt/sd -o remount,async
madplay_pid=`pidof madplay`
echo "kill -9 $madplay_pid" >> /mnt/sd/madplay/madplay_output.txt
kill -9 $madplay_pid
cd /usr/gp2x/
exec /usr/gp2x/gp2xme

y como veras quiero arrancar el xreader.gpu. Cargando el xreader desde utilidades me funciona. Pero con el script no. Ves algun fallo??

Gracias

Uncanny
20/04/2006, 07:19
Debo ser el mas gañan de todos, porque aun asi, con lo clarito q lo has dejado todo no me llega a funcionar, se me queda en negro cuando ejecuto mi *.gpe q he dejado en la raiz. ESte es mi ejecutable:

#!/bin/sh
mount /mnt/sd -o remount,sync
cd /mnt/sd/aplicaciones/mp3/madplaygp2x
exec ./madplay --adjust-volume=-10 -z -r /mnt/sd/musica/*.mp3&
cd /mnt/sd/aplicaciones/xreader0.9
exec ./xreader.gpu
sync
mount /mnt/sd -o remount,async
madplay_pid=`pidof madplay`
echo "kill -9 $madplay_pid" >> /mnt/sd/aplicaciones/mp3/madplaygp2x/madplay_output.txt
kill -9 $madplay_pid
cd /usr/gp2x/
exec /usr/gp2x/gp2xmenu

y como veras quiero arrancar el xreader.gpu. Cargando el xreader desde utilidades me funciona. Pero con el script no. Ves algun fallo??

GraciasTe he puesto en negrita los cambios que te he hecho, salvo lo de gp2xmenu (que habrá sido un fallo al hacer el copy-paste) y el volcado de salida con el comando echo (que es una linea que se puede suprimir, no tiene utilidad más que informativa). He cambiado el directorio madplay por madplaygp2x simplemente para evitar posibles confusiones en este ejemplo (para distinguir el comando del directorio), si el tuyo es como pusiste solo tienes que adaptar el ejemplo. También he añadido que los ejecutables se lanzen con el comando exec (igual que el menu) y desde la ruta actual (./) de ahí que haya que entrar en la ruta de la aplicación antes (cd /ruta/aplicacion), aunque en la practica debería ser lo mismo que hacerlo con o sin exec mientras uses la ruta absoluta o directamente con ./loquesea.gpe situados en el directorio donde se encuentre la aplicación en cuestión.

Una pregunta, dices que se queda en negro y por tanto es que no sale xreader, pero ¿se escucha al menos la música? y otra cosa, si te sigue pasando lo mismo comprueba que las rutas que tienes puestas en el script coinciden con las que tienes, y si aun así sigue igual comprueba la salida de errores con STerm, es decir, carga STerm y lanza el script desde el mismo.

P.D: A mi el comando pidof, que lo que hace es obtener el número de identificación de un proceso (madplay en este caso) no parece hacer bien su trabajo o bien no se almacena en la variable madplay_pid (ni con export), por lo que a veces no cierra madplay (con el comando kill y el número de proceso), es decir, vuelve al menú pero la música sigue escuchandose :loco:

crossmax
20/04/2006, 23:15
Ahora si q funciona, de todos modos he tenido q cambiar el nombre del script (no me preguntes porque). Se llamaba mp3.gpe y estaba en la raiz y al llamarlo desde stem me decia q no existia el directorio o fichero
Sobre lo de que no cierra madplay, tienes razon, a mi aun no me lo ha cerrado ninguna vez, pero bueno, es una pega menor

Gracias por tu ayuda tan detallada

Uncanny
20/04/2006, 23:25
Sobre lo de que no cierra madplay, tienes razon, a mi aun no me lo ha cerrado ninguna vez, pero bueno, es una pega menorPues es algo que aun me extraña, de hecho aun reproduciendolo y desde el menú cargué STerm, hice un ps para ver los procesos y sus IDs, y ahí estaba madplay, pero no como "madplay" sino como "./madplay --parametros" lo cual me dice que puede ser que por eso pidoff no pille el proceso, ni de esta última forma ni la que se dice en el wiki, lo que si parecía una constante es que toma el PID de madplay es 50, de hecho podía cerrarlo con kill -9 50, así que creí que funcionaría sustituyendo en el script kill -9 $madplay_pid por kill -9 50 y quitando la linea con el comando pidoff por carecer de utilidad, pero sigue cerrando madplay cuando le da la gana... :rolleyes:

alien8
21/04/2006, 02:33
Yo uso un script para madplay que me vuelve siempre al menu para arrancar luego el programa que quiera ( lector de textos por ejemplo ) , para pararlo tambien me daba el problema de que se cerraba cuando queria , encontre la manera haciendo otro script que antes del kill llama otra vez a madplay , y asi si se cierra, en principio le puse la variable "--sdl-control" para cerrarlo con el boton start pero sorpresa se cierra solito.


madplay.gpe

#!/bin/sh
mount /mnt/sd -o remount,sync
exec ./madplay --adjust-volume=10 -z -r //mnt/sd/music/*.mp3 &
cd /usr/gp2x
exec ./gp2xmenu

madplay_stop.gpe

#!/bin/sh
mount /mnt/sd -o remount,sync
exec ./madplay --adjust-volume=10 --sdl-control -z -r //mnt/sd/music/*.mp3 &
madplay_pid=`pidof madplay`
kill -9 $madplay_pid >> ./madplay_kill_output.txt
cd /usr/gp2x
exec ./gp2xmenu

espero os sirva.


Adjunto los scrips junto con madplay y unos iconos para los baguetes :)

LordPorremon
21/04/2006, 04:07
Muchas gracias, a ver si con esto consigo hacerlo funcionar pero me da q esto va para largo.....