Come posso riprodurre un file midi dal terminale?

28

Sto cercando una semplice applicazione da riga di comando (o uno strumento integrato su Mavericks di cui non sono a conoscenza) per riprodurre un file midi dal terminale. Il più semplice possibile, qualcosa come play myfile.mid .

Contesto: sto giocando con midi in Python e ho bisogno di qualcosa che possa essere lanciato da uno script. Nessuna GUI, nessuna finestra, solo riproduzione. Deve essere richiamabile dallo script Python per essere accettato, ma tutto ciò che funziona nel terminale dovrebbe essere.

    
posta DCS 28.10.2013 - 17:29
fonte

6 risposte

36

Questo si è rivelato un problema più complicato di quanto mi aspettassi inizialmente.

QuickTime X non può riprodurre file MIDI, anche se QuickTime 7 potrebbe.

Per quanto ne so, significa che esiste una soluzione no "incorporata" per riprodurre file MIDI su Mac OS X (ad esempio, afplay non funziona). Pertanto, credo che qualsiasi soluzione comporterà il download e l'installazione di qualche altro programma.

Opzione 1: scarica e installa QuickTime 7 che funziona ancora bene su Mavericks, e quindi puoi riprodurre file midi da:

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

tuttavia che verrà riprodotto automaticamente solo se l'utente ha abilitato quella preferenza, che credo sia off per impostazione predefinita.

Opzione 2: usa FluidSynth

Per installarlo, devi utilizzare Fink, MacPorts o (mio consiglio) Homebrew. Una volta installato Homebrew, digita questo nel Terminale:

brew install fluidsynth

(Il comando di MacPorts sarebbe sudo port install fluidsynth e Fink sarebbe fink install fluidsynth .)

Tuttavia, il download di fluidsynth ti porta solo a metà. Allora hai bisogno di un file "SoundFont", che non avevo mai sentito prima. Ci sono informazioni su di loro qui

Ho scaricato uno da S. Christian Collins chiamato "GeneralUser" che è gratuito. La versione attuale (dal 2013-11-27) è FluidSynth versione 1.44 . {Se il collegamento diretto si interrompe in futuro, utilizza il link precedente che ti porterà alla pagina Web normale per GeneralUser.}

Una volta scaricato e decompresso, avrai una serie di file tra cui "GeneralUser GS FluidSynth v1.44.sf2" (ovviamente il nome potrebbe cambiare in futuro). Ho rinominato il file e lo ho spostato in /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 .

Una volta installato il file SoundFont e installato fluidsynth , puoi riprodurre un midi usando questo comando:

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

n.b. Ci sono alcuni (apparentemente innocui) messaggi di errore che vengono visualizzati quando lo fai. Se vuoi sopprimerli usa:

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

, invece.

Ovviamente non mi ricorderò mai tutto questo, quindi ho creato una funzione zsh chiamata 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  
}

(Quel dovrebbe funzionare anche per bash .)

Ora tutto ciò che devo fare è digitare:

playmidi example.mid 

e example.mid verrà riprodotto.

    
risposta data 27.11.2013 - 09:26
fonte
32

Questo ha funzionato per me:

$ brew install timidity
$ timidity file.midi
    
risposta data 11.03.2015 - 07:03
fonte
4

Puoi utilizzare VLC con un'interfaccia CLI non interattiva con -I dummy :

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

Per abilitare il supporto midi, vai su Preferenze > Mostra tutto > Input / Codecs > Codec audio > Fluid Synth e imposta la soundfont su un file come FluidSynth soundfont dal link .

Modifica: il supporto midi è stato rimosso dalla versione più recente di VLC. Puoi ancora usare fluidsynth dalla shell come descritto da 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
    
risposta data 28.10.2013 - 23:02
fonte
1

Secondo questo post sui forum di VLC Felix Paul Kuehne , l'amministratore del sito, ha detto

Hello, apparently, FluidSynth got lost in the compilation process for the last update. Be assured that it will be back in 2.1.2 very soon!

Quindi per ora esegui il downgrade a vlc 2.0.9, oppure aspetta vlc 2.1.2. In questo modo, la soluzione esistente funzionerà come prima.

    
risposta data 01.12.2013 - 18:47
fonte
1

Non è esattamente la risposta, ma c'è una piccola app che può inviare dati midi sulla riga di comando di Mac OS X. Può anche controllare le funzioni base di GarageBand: link

    
risposta data 05.03.2014 - 18:00
fonte
0

Per rendere le cose più convenienti, puoi concludere la risposta di TJ Luoma in un'app 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

Puoi quindi selezionare Ottieni informazioni su un file .mid casuale, cambiare "Apri con:" con l'app AppleScript e premere "Cambia tutto ..." per renderlo il modo predefinito di aprire i file .mid. Ora quando fai doppio clic su un file MIDI, si aprirà la finestra di Terminale e verrà riprodotta automaticamente.

    
risposta data 02.06.2015 - 22:22
fonte

Leggi altre domande sui tag