lunes, 25 de mayo de 2020

El trabajo, la música y el confinamiento

Esta semana pasada decidí que quería escuchar algo de música en el PC del despacho mientras trabajaba.

Soy de los que tiene la firme opinión de que el trabajo no está peleado con el goce de la música. Pero ¿que pasa puando en el trabajo solo tienes PCras que trabajan con Windows y reproducen tus mp3 por defecto con el Mediaplayer?. Pues que hay varias opciones de las que quizás la mas fácil sea descargarse una app portable a tu pincho para reproducir la música, como por ejemplo el VLC.

Pero esa sería la respuesta fácil y las soluciones rápidas y fáciles suelen carecer de gracia. Por lo menos para mi.

Yo decidí un camino un poco mas largo pero mas entretenido: programar mi propio reproductor portable para llevarlo en mi pen y ejecutarlo vía USB.

Eso además, me tendría entretenido en estos días de confinamiento y me traería viejos recuerdos y obligaría a engrasar la máquina cerebral para rara recuperar viejas habilidades.

Ha pasado una semana y ya tengo un reproductor musical portable en mi pendrive que lee los mp3, ogg, wav, mid y mpeg4 entre otros formatos de audio y además reproduce radio en streaming.

Una pena no haberme dado cuenta que en el curro tienen capadas las conexiones a la red salvo para el par de programas que ellos permiten. ¿Debería haberlo pensado antes o haberlo mirado?. Respuesta evidente ¡No!. Si lo hubiese mirado no hubiese tenido ganas de programarlo y a día de hoy sabría un poco menos de lo que se (que tampoco es que sea tanto).

Decidí inicialmente implementar mi soft para reproducir los mp3 de la manera mas sencilla y posiblemente vieja: utilizando la librería MmSystem.dll de windows, una librería de unos 68,768 bytes que va dentro de las tripas del Windows prácticamente desde su nacimiento y que suele encontrarse escondidita en el directorio %SYSTEM%. ¡Casi seguro que no tendría ningún problema con ella en el curro! Tampoco tenía deseos de ponerme a estudiar el desarrollo de software multimedia con complicadas librerías.

Esta decisión implicó algunas limitaciones en la creación del soft, pero tenía la ventaja de que utilizaría recursos que difícilmente iban a darme problemas con el cambio de versión del Windows que utilizase. Podría ponerme en cualquier PCra del despacho con mi pincho sin mayor problema. Al ser tan antiguo mmsystem.dll es un módulo con funciones que puede manejar incluso aplicaciones multimedia de 16 bits.

Lo mas gracioso es que tuve que programarlo en Linux para después compilarlo para Windows y las pruebas de funcionamiento las hacía con un emulador o en un par de ocasiones ¡en el pequeño portátil de mi suegra! que lleva encastrado de serie un Windows 7. Pocas pruebas hice en el, solo de pensar que tenía que volver a ver un win fuera del trabajo me encabronaba. Y, no, el problema no es mi suegra (esto va por los mal pensados, que seguro que los hay).

Como decidía utilizar un librería un tanto retro, decidí que el programa tuviese un aspecto acorde y le día la apariencia de una vieja radio. Decidí llamarle MusicFast.

La idea era que reproduciese archivos de música rápido, que los pudiese parar, que pudiese controlar el volumen y poco más.

Como eso fue rápido, posteriormente decidí el poder hacer listas de reproducción con las que poder acceder rápido a los mp3 que fuese dejando repartidos en las Pceras del curro o en algún directorio compartido si había suerte.

La apariencia inicial y que el programa aún mantiene sin cambios después de 7 días de entretenimiento es la siguiente:


Sencilla y agradable. Una vieja radio de madera con un relojito que nos da la hora y fecha (por si en la guardia de la noche me desoriento) y que puedes decidir encender o apagar, y una botonera con lo que hacer lo siguiente (de izquierda a derecha se pueden ver los botones:)

1. Minimiza rápidamente la aplicación

2. Da acceso a explorar el árbol de directorios para cargar los archivos de sonido en una lista de reproducción


3. Borra de la lista de reproducción los archivos que hayamos cargado

4. Pasa a reproducir el archivo de encima de la selección que tengamos en la lista

5. Reproduce el archivo seleccionado en la lista

6. reproduce el archivo siguiente al seleccionado inicialmente en la lista de reproducción

7. Para la reproducción

8. Permite activar o desactivar la reproducción en bucle de todos os archivos cargados en la lista

9. Abre la lista de reproducción, y

10. cierra el programa.

El aspecto del programa con la lista de reproducción abierta y algunos mp3 cargados es la siguiente:


Bueno, parece que quedaba bastante resultón y funcionaba rápido y bien, pero se podía mejorar dando la posibilidad al usuario de ponerlo un poco mas a su gusto escogiendo el color del programa en sí y el del texto:


Aquí podéis ver, por ejemplo una versión un tanto “maricona”. Pero ya se sabe, para gustos hay colores.

Por supuesto, el color se mantiene para la próxima vez que ejecutes el programa.

Pero la verdad, una vez hecho esto ya no podía parar aquí y decidí darle la posibilidad de drag and drop, con lo que ahora puedes coger un mp3 de un directorio, o varios si quieres, lanzarlo al reproductor y él inmediatamente los abre y los carga ordenadamente en la lista de reproducción.

Una vez ejecutado el programa dos veces, me ví en la necesidad de querer ordenar los archivos en la lista de otra manera, así que puse unos botoncillos para moverlos archivos de sonido de lugar en la lista. De arriba a abajo es fácil de entender lo que hacen:

1. pasa el archivo al final de la lista de reproducción
2. baja el archivo de sonido un puesto en la lista de reproducción
3. borra el archivo de la lista de reproducción
4. sube el archivo de sonido un puesto en la lista de reproducción

Y hecho esto, como el programa tenía la posibilidad de drag and drop con los archivos, hice lo mismo con la lista de reproducción, haciendo que pudieses pinchar con el ratón en una entrada de la lista y desplazarla con el ratón al lugar que tú quisieras dentro de la lista.

Le di al programa la posibilidad de activar o desactivar el drag and drop, y ¡Voila!

Ya me las tenía tan felices cuando me dije: ¡ale, una ventanita acerca del programa y se acabó”.


Decidí hacer la macarrada de no ponerle borde superior a la ventanita, con lo cual la implementé con la posibilidad de moverla por el escritorio manteniendo el botón del mouse presionado sobre ella y moverlo por el escritorio.

Cuando tenía esto hecho, y daba la cosa por terminada, pensé ¡joder, ¿y si no tengo el ratón disponible por lo que sea? por ejemplo porque estoy trabajando escribiendo algo importante y no quiero dejarlo. Nada, que tuve que darle la posibilidad al programa de manejarlo por el teclado también, con lo cual la lista de reproducción se puede manejar a través de capturas de determinadas teclas, al igual que la reproducción y la interrupción de la misma también. Y porque no, puestos ya, le añadí al programa la posibilidad de hacer reordenaciones al azar de las entradas de la lista de reproducción.

Como tanta cosa ya podía aumentar demasiado la botonera, le día al programa un menú contextual que aparece presionando el botón derecho del ratón sobre el programa.


Si os fijáis en el menú contextual, ya metido en faena, decidía añadir una ventanita que explicase sencillamente las teclas con las que se puede manejar sencillamente el programa desde el teclado


Tras esto fue cuando decidí que poder escuchar canales de radio en streaming con el programa. ¡Como no iba a poder escuchar la radio con un programa que es una radio!

Menuda tontería, porque ahora tendría que utilizar otra librería que podía haber utilizado desde el principio para reproducir los otros archivos de sonido.

Eso es lo que pasa por ir pensando las cosas a trompicones en vez de tener una idea clara de lo que quieres desde el principio.

Bueno, no me importó, buscaría la manera de aprovecharlo para poder reproducir también la radio en mi distribución Linux.

Así que puesto a ello, me decidí por una librería desarrollada en OPensource y que sería la primera vez que utilizaría. ¡Algo mas en lo que entretenerme! XD.

Me decidí por UOS, acrónimo de Open UnitedLib of Sound, que expresa bien lo que hace: unifica las librerías habituales de reproducción de sonido multimedia en un solo paquete y que permite la programación para cualquier SO.

No me iba a complicar mucho la vida: una pequeña lista de emisoras predefinida y punto.

Pero el programar, es como el comer o el rascar, que una vez que empiezas no puedes parar, así que visto que ese primer paso era fácil de hacer y me había costado poco, decidí darle al programa la posibilidad de que el usuario introdujese la emisora de radio en streaming que a el le pareciese, ya que a lo tonto, mirando de que iba el tema, había descubierto que había muchísimas emisoras que poder sintonizar y que cambiaban de dirección con relativa frecuencia.

Finalmente claudiqué y decidía dar le al programa también la posibilidad de hacer listas de reproducción y así poder importar los archivos en que había descubierto que se guardaban (la verdad es que hasta el momento no tenía ni puta idea del asunto porque nunca me había preocupado). También puedes borrar la lista, añadir ítems a la misma o borrarlos uno a uno.

Esta es una imagen del programa con la ventana para el manejo de la lista de emisoras de radio en streaming, pero sin ningún archivo cargado.

 

Esta es la opción de cargar una emisora para escucharla


y aquí con una pequeña lista que ya me he ido haciendo :)

MusicFast abre y guarda listas en formato .m3u y .m3u8 y como no, ya desde la lista cargada, es simplemente clicar en la emisora que desees y el programa te conecta :)

Por supuesto, la ventanita también aguanta drag and drop de los archivos.

Y llegado a este punto, ya lo he dejado, porque mañana tengo guardia y hay que descansar. 

Así es MusicFast V 1.0 y como nació durante unos días de confinamiento.  :)


PostData del 30/5/2020:

La cosa dió para mas y al final le he metido mas opciones a la ventanita de emisoras de radio  :-P

 

Dios, siempre me pasa los mismo, no se cuando parar!  :)