33 votes

Comment lire un fichier midi à partir du terminal ?

Je suis à la recherche d'une application en ligne de commande la plus simple possible (ou d'un outil embarqué sur Mavericks dont je n'ai pas connaissance) pour lire un fichier midi à partir du terminal. Aussi simple que possible, quelque chose comme play myfile.mid .

Le contexte : Je m'amuse avec midi en Python et j'ai besoin de quelque chose que je puisse lancer depuis un script. Pas d'interface graphique, pas de Windows, juste de la lecture. Il doit être appelable depuis le script de Python pour être accepté, mais tout ce qui fonctionne en terminal devrait l'être.

42voto

lyderic Points 391

Cela a marché pour moi :

$ brew install timidity
$ timidity file.midi

39voto

moodforaday Points 2633

Le problème s'est avéré plus compliqué que prévu.

QuickTime X ne peut pas lire les fichiers MIDI, alors que QuickTime 7 le pouvait.

Pour autant que je puisse dire, cela signifie qu'il y a pas de solution "intégrée" pour lire les fichiers MIDI sur Mac OS X (par exemple, afplay ne fonctionne pas). Je pense donc que toute solution impliquera le téléchargement et l'installation d'un autre programme.

Option 1 : Télécharger et installer QuickTime 7 qui fonctionne toujours très bien sur Mavericks, et vous pouvez alors jouer des fichiers midi par :

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

cependant qui ne sera lu automatiquement que si l'utilisateur a activé cette préférence, ce qui, je crois, est off par défaut.

Option n° 2 : utiliser FluidSynth

Pour l'installer, vous devez utiliser soit Fink, MacPorts, ou (ma recommandation) Homebrew. Une fois Homebrew installé, tapez ceci dans le Terminal :

brew install fluidsynth

(La commande de MacPorts serait sudo port install fluidsynth et celui de Fink serait fink install fluidsynth .)

Cependant, le téléchargement fluidsynth ne vous mène qu'à mi-chemin. Ensuite, vous avez besoin d'un fichier "SoundFont", dont je n'avais jamais entendu parler auparavant. Il y a informations à leur sujet ici

J'en ai téléchargé un sur S. Christian Collins appelé "GeneralUser" qui est gratuit. La version actuelle (en date du 2013-11-27) est la suivante FluidSynth version 1.44 . {Si ce lien direct est rompu à l'avenir, utilisez le lien précédent qui vous mènera à la page Web ordinaire de GeneralUser.}

Une fois que vous avez téléchargé et décompressé ce fichier, vous aurez une série de fichiers dont "GeneralUser GS FluidSynth v1.44.sf2" (évidemment le nom peut changer dans le futur). J'ai renommé ce fichier et l'ai déplacé vers /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 .

Une fois que le fichier SoundFont est placé et fluidsynth est installé, vous pouvez jouer un midi en utilisant cette commande :

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

n.b. Certains messages d'erreur (apparemment inoffensifs) s'affichent lorsque vous faites cela. Si vous voulez les supprimer, utilisez :

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

à la place.

Évidemment, je ne me souviendrai jamais de tout ça, alors j'ai fait un zsh fonction appelée 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  
}

(Cette devrait travailler pour bash aussi je crois).

Maintenant, tout ce que j'ai à faire est de taper :

playmidi example.mid 

et example.mid jouera.

5voto

Vous pouvez utiliser VLC avec une interface CLI non interactive avec -I dummy :

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

Pour activer le support midi, allez dans Préférences > Afficher tout > Entrées / Codecs > Codecs audio > Fluid Synth et définissez le soundfont à un fichier comme le soundfont FluidSynth de http://www.schristiancollins.com/generaluser.php .

Edit : le support midi a été supprimé de la version récente de VLC. Vous pouvez toujours utiliser fluidsynth à partir du shell comme décrit par 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 Points 2256

Selon ce message sur les propres forums de VLC Felix Paul Kuehne l'administrateur du site, a déclaré

Bonjour, apparemment, FluidSynth s'est perdu dans le processus de compilation de la dernière mise à jour. Soyez assuré qu'il sera de retour dans la 2.1.2 très bientôt !

Donc pour l'instant, soit vous passez à la version 2.0.9 de vlc, soit vous attendez la version 2.1.2 de vlc. De cette façon, votre solution existante fonctionnera comme avant.

1voto

Vihang D Points 444

Ce n'est pas exactement la réponse mais il existe une petite application qui permet d'envoyer des données midi sur la ligne de commande de Mac OS X. Elle peut également contrôler les fonctions de base de GarageBand : http://www.bibiko.de/music/MIDImyAPP/

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X