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

28

Estoy buscando una aplicación de línea de comandos más simple (o una herramienta integrada en Mavericks que no conozco) para reproducir un archivo midi desde el terminal. Lo más claro posible, algo como play myfile.mid .

Contexto: Estoy jugando con midi en Python y necesito algo que pueda iniciar desde un script. Sin GUI, sin ventanas, solo reproducción. Debe ser invocable desde el script de Python para ser aceptado, pero cualquier cosa que funcione en el terminal debería ser.

    
pregunta DCS 28.10.2013 - 17:29

6 respuestas

36

Este resultó ser un problema más complicado de lo que originalmente esperaba.

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

Por lo que puedo decir, eso significa que hay una solución "incorporada" no para reproducir archivos MIDI en Mac OS X (por ejemplo, afplay no funciona). Por lo tanto, creo que cualquier solución implicará descargar e instalar algún otro programa.

Opción # 1: descarga e instala QuickTime 7 que aún funciona bien en Mavericks, y luego puedes reproducir archivos midi por:

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

sin embargo que solo se reproducirá automáticamente si el usuario ha habilitado esa preferencia, que creo que está desactivada de manera predeterminada.

Opción # 2: utilizar FluidSynth

Para instalarlo, debes usar Fink, MacPorts o (mi recomendación) Homebrew. Una vez que Homebrew esté instalado, escriba esto en la Terminal:

brew install fluidsynth

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

Sin embargo, la descarga de fluidsynth solo te lleva a la mitad del camino. Entonces necesitas un archivo "SoundFont", del que nunca había escuchado antes. Aquí hay información sobre ellos

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

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

Una vez que el archivo de SoundFont esté en su lugar y se instale fluidsynth , puedes jugar un midi usando 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 haces 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 una función zsh 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  
}

(Eso debería funcionar para bash también, creo.)

Ahora todo lo que tengo que hacer es escribir:

playmidi example.mid 

y example.mid se reproducirán.

    
respondido por el TJ Luoma 27.11.2013 - 09:26
32

Esto me funcionó:

$ brew install timidity
$ timidity file.midi
    
respondido por el lyderic 11.03.2015 - 07:03
4

Puede usar 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 / Codecs > Códecs de audio > Fluid Synth y configure la fuente de sonido en un archivo como la fuente de sonido FluidSynth de enlace .

Editar: el soporte midi se eliminó de la versión reciente de VLC. Aún puede usar fluidsynth desde la cáscara como lo describe 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
    
respondido por el user495470 28.10.2013 - 23:02
1

Según esta publicación en los foros de VLC Felix Paul Kuehne , el administrador del sitio, dijo

  

Hola, al parecer, FluidSynth se perdió en el proceso de compilación de la última actualización. ¡Ten por seguro que volverá a estar en 2.1.2 muy pronto!

Por ahora, baje la calificación a vlc 2.0.9, o espere vlc 2.1.2. De esta manera, su solución existente funcionará como solía hacerlo.

    
respondido por el wrossmck 01.12.2013 - 18:47
1

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 también: enlace

    
respondido por el user72160 05.03.2014 - 18:00
0

Para hacer las cosas más convenientes, puedes resumir la la respuesta de TJ Luoma en una aplicación de AppleScript:

on open inputFile
    tell application "Terminal"
        do script "fluidsynth -i /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 " & (quoted form of POSIX path of inputFile as string)
        activate
    end tell
end open

Luego puede seleccionar Obtener información en un archivo .mid aleatorio, cambiar "Abrir con:" a la aplicación AppleScript y presionar "Cambiar todo ..." para que sea la forma predeterminada de abrir archivos .mid. Ahora, al hacer doble clic en un archivo MIDI, se abrirá la ventana de la Terminal y se reproducirá automáticamente.

    
respondido por el user3932000 02.06.2015 - 22:22

Lea otras preguntas en las etiquetas