33 votos

¿Cómo puedo reproducir un archivo midi desde el terminal?

Estoy buscando una aplicación de línea de comandos lo más sencilla posible (o una herramienta integrada en Mavericks que desconozco) para reproducir un archivo midi desde la terminal. Tan simple como sea posible, algo como play myfile.mid .

Contexto: Estoy jugando con midi en Python y necesito algo que pueda lanzar desde un script. Sin interfaz gráfica de usuario, sin Windows, sólo la reproducción. Debe ser invocable desde el script de Python para ser aceptado, pero cualquier cosa que funcione en la terminal debería serlo.

42voto

lyderic Puntos 81

Esto me ha funcionado:

$ brew install timidity
$ timidity file.midi

39voto

moodforaday Puntos 2633

Esto resultó ser un problema más complicado de lo que esperaba en un principio.

QuickTime X no puede reproducir archivos MIDI, aunque QuickTime 7 sí podía.

Por lo que sé, eso significa que hay no solución "integrada" para reproducir archivos MIDI en Mac OS X (por ejemplo, afplay no funciona). Por lo tanto, creo que cualquier solución implicará la descarga e instalación de algún otro programa.

Opción 1: Descargar e instalar QuickTime 7 que sigue funcionando bien en Mavericks, y entonces puedes reproducir archivos midi por:

open -a QuickTime\ Player\ 7 /path/to/your/file.mid 

Sin embargo, que sólo se reproducirá automáticamente si el usuario ha activado esa preferencia, que creo que es fuera de por defecto.

Opción 2: Utilizar FluidSynth

Para instalarlo, tienes que usar Fink, MacPorts o (mi recomendación) Homebrew. Una vez instalado Homebrew, escribe esto en el Terminal:

brew install fluidsynth

(El comando de MacPorts sería sudo port install fluidsynth y la de Fink sería fink install fluidsynth .)

Sin embargo, la descarga de fluidsynth sólo te lleva a una parte del camino. Luego necesitas un archivo "SoundFont", del que nunca había oído hablar. Hay información sobre ellos aquí

He descargado uno de S. Christian Collins llamado "GeneralUser" que es gratuito. La versión actual (a partir de 2013-11-27) es FluidSynth versión 1.44 . {Si ese enlace directo se rompe en el futuro, utilice el enlace anterior que le llevará a la página web normal de GeneralUser.}

Una vez que haya descargado y descomprimido eso, tendrá una serie de archivos que incluyen "GeneralUser GS FluidSynth v1.44.sf2" (obviamente el nombre puede cambiar en el futuro). He cambiado el nombre de ese archivo y lo he movido a /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 .

Una vez que el archivo SoundFont está colocado y fluidsynth está instalado, puedes reproducir un midi utilizando este comando:

fluidsynth -i /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 ~/Music/example.mid 

n.b. Hay algunos mensajes de error (aparentemente inofensivos) que se muestran cuando se hace eso. Si quieres suprimirlos utiliza:

(fluidsynth -i /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 ~/Music/example.mid 2>&1) >/dev/null

en su lugar.

Obviamente nunca voy a recordar todo eso, así que hice un zsh función llamada playmidi

function playmidi {

    SOUNDFONT='/usr/local/share/fluidsynth/generaluser.v.1.44.sf2'

    if [ -e "$SOUNDFONT" ]
    then 

        for i in "$@"
        do 
            if [ -e "$i" ]
            then
                (fluidsynth -i "$SOUNDFONT" "$i"  2>&1) >/dev/null
            else
                echo "[playmidi]: cannot find file at $i"   
                return 1
            fi  
        done 
    else
            echo "[playmidi]: SOUNDFONT file not found at $SOUNDFONT"
            return 1
    fi  
}

(Que debe trabajar para bash también creo).

Ahora todo lo que tengo que hacer es escribir:

playmidi example.mid 

y example.mid jugará.

5voto

Puede utilizar VLC con una interfaz CLI no interactiva con -I dummy :

/Applications/VLC.app/Contents/MacOS/VLC -I dummy file.mid vlc://quit

Para habilitar el soporte midi, vaya a Preferencias > Mostrar todo > Entrada / Códecs > Códecs de audio > Fluid Synth y establezca la fuente de sonido en un archivo como el de FluidSynth de http://www.schristiancollins.com/generaluser.php .

Edición: el soporte midi fue eliminado de la versión reciente de VLC. Todavía se puede utilizar fluidsynth de la cáscara como se describe por TJ Luoma:

brew install fluidsynth
wget http://www.schristiancollins.com/soundfonts/GeneralUser_GS_1.44-FluidSynth.zip
unzip GeneralUser_GS_1.44-FluidSynth.zip
mkdir -p /usr/local/share/fluidsynth
mv GeneralUser\ GS\ 1.44\ FluidSynth/GeneralUser\ GS\ FluidSynth\ v1.44.sf2 /usr/local/share/fluidsynth
fluidsynth -i /usr/local/share/fluidsynth/GeneralUser\ GS\ FluidSynth\ v1.44.sf2 file.mid

1voto

wrossmck Puntos 1068

Según este post en los propios foros de VLC Felix Paul Kuehne el administrador del sitio, dijo

Hola, aparentemente, FluidSynth se perdió en el proceso de compilación de la última actualización. ¡Tened la seguridad de que volverá en la 2.1.2 muy pronto!

Así que, por ahora, o bien se actualiza a vlc 2.0.9, o bien se espera a vlc 2.1.2. De esta manera, su solución existente funcionará como antes.

1voto

Vihang D Puntos 444

No es exactamente la respuesta, pero hay una pequeña aplicación que puede enviar datos midi en la línea de comandos de Mac OS X. También puede controlar las funciones básicas de GarageBand: http://www.bibiko.de/music/MIDImyAPP/

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X