Comment lire un fichier midi depuis le terminal?

29

Je recherche une application en ligne de commande la plus simple (ou un outil intégré sur Mavericks que je ne connais pas) pour lire un fichier midi à partir du terminal. Aussi simple que possible, quelque chose comme play myfile.mid.

Contexte: je joue avec midi en Python et j'ai besoin de quelque chose que je peux lancer à partir d'un script. Pas d'interface graphique, pas de fenêtres, juste la lecture. Il doit pouvoir être appelé à partir du script Python pour être accepté, mais tout ce qui fonctionne dans le terminal devrait l'être.

DCS
la source

Réponses:

36

Cela s'est avéré être un problème plus compliqué que ce à quoi je m'attendais à l'origine.

QuickTime X ne peut pas lire les fichiers MIDI, contrairement à QuickTime 7.

Pour autant que je sache, cela signifie qu'il n'y a pas de solution "intégrée" pour lire des fichiers MIDI sur Mac OS X (par exemple, afplayne fonctionne pas). Par conséquent, je crois que toute solution impliquera le téléchargement et l'installation d'un autre programme.

Option # 1: Téléchargez et installez QuickTime 7 qui fonctionne toujours bien sur Mavericks, puis vous pouvez lire des fichiers midi en:

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

cependant, cela ne s'exécutera automatiquement que si l'utilisateur a activé cette préférence, qui je pense est désactivée par défaut.

Option n ° 2: utilisez FluidSynth

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

brew install fluidsynth

(La commande de MacPorts serait sudo port install fluidsynthet celle de Fink fink install fluidsynth.)

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

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

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

Une fois le fichier SoundFont placé et fluidsynthinstallé, vous pouvez jouer un midi en utilisant cette commande:

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

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

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

au lieu.

Évidemment, je ne me souviendrai jamais de tout cela, alors j'ai créé une zshfonction appeléeplaymidi

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  
}

(Cela devrait fonctionner bashaussi, je crois.)

Il ne me reste plus qu'à taper:

playmidi example.mid 

et example.midjouera.

TJ Luoma
la source
StackExchange à son meilleur! Bien que l'option fluidsynth soit beaucoup plus piratée que je ne le souhaitais (tout le monde n'a pas installé de brew ...), cela fonctionne très bien et se lance plus rapidement dans le script que VLC. J'attendrai donc un jour ou deux si une solution alternative ridiculement simple se présente, mais sinon la prime vous appartient. BTW, pour moi fluid-synth apparaît dans /usr/local/Cellar/fluid-synth/1.1.6. (Je n'aime pas l'ancienne version de la solution Quicktime, vous ne savez jamais combien de temps cela va fonctionner).
DCS
Oui, je suis d'accord que "utiliser Homebrew | MacPorts | Fink" n'est pas un idéal, mais a) toute personne qui passe un certain temps à utiliser la ligne de commande va se retrouver à vouloir plus que ce qu'Apple peut / fournit et b) faute de solution intégrée, elle semblait raisonnable ici. Quant à QuickTime7, je suis d'accord, il a survécu plus longtemps que je ne le pensais, mais OTOH je ne peux pas croire que "QuickTime X" ne puisse toujours pas faire les choses que QuickTime 7 pourrait faire. (Cela me fait peur pour l'avenir d'iWork, mais c'est une autre discussion pour un autre sujet un autre jour :-)
TJ Luoma
La récente version d'iWorks a en fait été paralysée par rapport à la dernière version ... J'attends seulement que Terminal disparaisse. Mais assez, ou nous serons critiqués pour bavarder.
DCS
@DCS Nous ne dénoncerons aucune plainte en connaissance de cause. Au pire, nous leur demanderons d'apparaître dans une salle de chat ou d'ouvrir un nouveau fil si cela est justifié. De plus, j'ai modifié certains détails de votre message. Veuillez insérer ces informations comme réponse ou modifier l'une des réponses si ces informations leur conviennent.
bmike
J'ai essayé cela sur Yosemite et je n'ai pas pu le faire fonctionner. J'ai même désinstallé et réinstallé les ports mac. Erreur: fluidsynth: avertissement: aucun préréglage trouvé sur le canal 9 [banque = 128 prog = 56] n'a pas pu gérer la demande du client externe. Jack Main a capté le signal 31.
Robert Wasmann
35

Cela a fonctionné pour moi:

$ brew installer la timidité
$ timidity file.midi
lyderic
la source
Cela a aussi fonctionné pour moi - et c'est beaucoup moins de problèmes que la réponse impliquant fluidsynth.
glenra
1
Meilleure réponse ici. La réponse de fluidsynth est vraiment intelligente, mais elle risque de se casser à un moment donné (si ce n'est pas déjà fait) parce qu'elle est beaucoup plus compliquée que celle-ci.
Westcroft_to_Apse
Ça n'a pas marché pour moi. Après avoir exécuté la première commande ci-dessus, j'ai exécuté la seconde et j'ai reçu ce message:file.midi: No such file or directory
user65526
5

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 la prise en charge midi, accédez à Préférences> Afficher tout> Input / Codecs> Codecs audio> Fluid Synth et définissez la police sonore sur un fichier comme la police sonore FluidSynth à partir 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 de la coque 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
Lri
la source
1
Travaux! Cependant, VLC, étant le super joueur à part entière, a un certain délai de démarrage très notable avant le début de la lecture, ce que ma solution Windows au problème, une super-petite application nommée playsmf.exe n'avait pas. Cela ne tue pas VLC pour mon but, mais avoir quelque chose de plus petit serait toujours bien. J'attendrai quelques jours pour voir si une autre réponse apparaît; sinon, j'accepterai le vôtre. BTW: vlc: // quit doit être ajouté aux arguments pour quitter VLC et permettre à mon script de reprendre.
DCS
Voir ma mise à jour ci-dessus - putain, cela fonctionnait bien!
DCS
est-il possible d'utiliser une ancienne version de vlc?
wrossmck
@ RossMcKinley: Bien que techniquement possible, ce n'est certainement pas ce que je veux faire. Le logiciel est mis à jour pour une raison, et je veux qu'un programme lourd comme VLC soit à jour sur mon système. Ce serait différent s'il ne s'agissait que d'un mini-outil de 100 Ko, mais VLC n'est pas comme ça.
DCS
1

Selon ce post 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 pour la dernière mise à jour. Soyez assuré qu'il sera de retour en 2.1.2 très bientôt!

Donc, pour l'instant, rétrogradez vers vlc 2.0.9 ou attendez vlc 2.1.2. De cette façon, votre solution existante fonctionnera comme avant.

wrossmck
la source
Malheureusement, cela ne fonctionne pas à partir de VLC 2.2.1 (novembre 2015)
Jess Riedel
1

Pas exactement la réponse, mais il existe une petite application qui peut envoyer des données midi sur la ligne de commande Mac OS X. Il peut également contrôler les fonctions de base de GarageBand: http://www.bibiko.de/music/MIDImyAPP/

user72160
la source
hé merci c'est quelque chose exactement comme je cherchais, pourquoi je parcourais les messages sur midi sur stackexchange
Forgotstackxpassword
0

Pour rendre les choses plus pratiques, vous pouvez récapituler la réponse de TJ Luoma dans une application 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

Vous pouvez ensuite sélectionner Obtenir des informations sur un fichier .mid aléatoire, changer "Ouvrir avec:" pour l'application AppleScript et appuyer sur "Tout changer ..." pour en faire le moyen par défaut d'ouvrir les fichiers .mid. Maintenant, lorsque vous double-cliquez sur un fichier MIDI, cela ouvrira la fenêtre Terminal et le jouera automatiquement.

user3932000
la source
bien sûr, cela peut être utile pour certaines personnes en général, mais l'op demandait une soution en ligne de commande;)
Forgotstackxpassword
Oups désolé, j'ai mal lu la question!
user3932000