Hilo Musical con MPV, Youtube y dmenu

March 28, 2019
i3wm musica mpv

Hilo Musical con MPV, Youtube y dmenu

El otro día no se muy bien como llegue a un canal de Youtube que consiste en un streaming de música tranquila para programar, este.

La verdad es que tiene muy buena pinta y me lo puse un rato de fondo para trabajar. Luego mas tarde recordé una charla que había visto hace poco "programación idiota" y pensé ¿por qué no hacer un comando o algo parecido para poder tener ese canal como hilo musical de fondo mientras trabajo?. Así que me puse manos a la obra.

Dependencias

Lo primero que necesitamos es MPV, un reproductor multimedia multiplataforma y youtube-dl que es un programa para bajar vídeos de youtube, los dos se integran perfectamente sin tener que instalar nada. Eso si, intentad tener una versión mas o menos moderna de las dos aplicaciones ya que si no da problemas a la hora de reproducirlo o bien por formato o bien por el buffering.

Probando la ejecución del streaming en local

Lo primero que deberíamos hacer es ejecutarlo en una consola para ver que funciona correctamente.

     mpv  "http://www.youtube.com/watch?v=mXRfApkMYZU" --no-video

Hay poco que explicar de esta llamada, lo único el --no-video que lo único que hace es sacar el audio. Es posible que veáis algún error en consola por tema del https, pero si funciona bien podéis ignorarlo.

Creando el lanzador de dmenu

¿Qué es dmenu?

Dmenu es un lanzador de aplicaciones ligero y customizable, el cual podemos utilizar para crear menús de lanzamiento de aplicaciones, que es lo que vamos a hacer. Un ejemplo sencillo antes de entrar en el script final sería el siguiente:

      echo "Hola\nAdios" | dmenu

Esto lo que hace es coger lo que devuelve el echo y generar un menú con esas dos opciones. Dependiendo de cual de las dos seleccionemos en el menú nos devolverá "Hola" o "Adios".

El script

Y este sería el script que se encarga de encender o apagar el hilo musical:

      #!/bin/bash

      DMENU=${DMENU:-dmenu}

      cmd_list="play stop"
      cmd="$(echo $cmd_list | sed 's/ /\n/g' | ${DMENU})"

      pkill -f mgp_music_player
      if [[ $cmd = play ]]; then
          bash -c "exec -a mgp_music_player mpv  "http://www.youtube.com/watch?v=mXRfApkMYZU" --no-video"
      fi

Como podéis ver el script es poca cosa, lo de dmenu puede ser opcional y hacer un comando que haga un toggle dependiendo de si está enchufado el hilo musical o no.

Paso a explicar un poco su funcionamiento:

  • cmd_list="play stop": Crea una lista de opciones.
  • cmd="$(echo $cmd_list | sed 's/ /\n/g' | ${DMENU})": Ejecuta dmenu con la lista de opciones
  • pkill -f mgp_music_player: Mata el proceso del hilo musical. Si no está encendido no pasa nada.
  • if $cmd = play ; then bash -c "exec -a mgp_music_player mpv "http://www.youtube.com/watch?v=mXRfApkMYZU" --no-video" fi: Esta es la ejecución del hilo musical. Solo si la opción que seleccionamos en dmenu es "play"

Todo es muy mejorable, esto es una primera versión que he hecho en una pausa de 10 minutos, tenedlo en cuenta.

Ejecución

Ahora simplemente faltaría asignar el script a una tecla o combinación de teclas para su ejecución. No voy a entrar en este punto porque depende de la distribución de linux o gestor de ventanas.

Vídeo

A veces cuando busco alguna solución a algún problema a algo en internet me molesta que para tres lineas de código tenga que ver un vídeo entero, pero a veces algo mas visual es interesantes, como creo que es el caso. Dejo aquí un vídeo explicándolo todo y mostrando el funcionamiento. También lo hago porque una de las cosas que quiero mejorar es a expresarme correctamente y a hablar.

Cualquier duda que tengáis podéis dejar un comentario o contactarme a través de gnusocial.

comments powered by Disqus