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!
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
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! :)