Okazało się, że jest to bardziej skomplikowany problem, niż początkowo się spodziewałem.
QuickTime X nie może odtwarzać plików MIDI, chociaż QuickTime 7 może.
O ile wiem, oznacza to, że nie ma „wbudowanego” rozwiązania do odtwarzania plików MIDI w systemie Mac OS X (na przykład afplay
nie działa). Dlatego uważam, że każde rozwiązanie będzie wymagało pobrania i zainstalowania innego programu.
Opcja nr 1: Pobierz i zainstaluj QuickTime 7, który nadal działa dobrze w Mavericks, a następnie możesz odtwarzać pliki midi poprzez:
open -a QuickTime\ Player\ 7 /path/to/your/file.mid
jednak nastąpi automatyczne odtwarzanie tylko wtedy, gdy użytkownik włączy tę preferencję, która moim zdaniem jest domyślnie wyłączona .
Opcja nr 2: Użyj FluidSynth
Aby go zainstalować, musisz użyć Fink, MacPorts lub (moja rekomendacja) Homebrew. Po zainstalowaniu Homebrew wpisz to w Terminalu:
brew install fluidsynth
(Komenda MacPorts byłaby, sudo port install fluidsynth
a Fink byłaby fink install fluidsynth
).
Jednak pobieranie prowadzi fluidsynth
tylko częściowo. Potrzebujesz więc pliku „SoundFont”, o którym nigdy wcześniej nie słyszałem. Nie ma informacji o nich tutaj
Pobrałem jeden z S. Christian Collins o nazwie „GeneralUser”, który jest bezpłatny. Obecna wersja (stan na 27.11.2013) to FluidSynth wersja 1.44 . {Jeśli ten bezpośredni link zepsuje się w przyszłości, użyj poprzedniego linku, który przeniesie Cię na zwykłą stronę internetową dla GeneralUser.}
Po pobraniu i rozpakowaniu będziesz mieć serię plików, w tym „GeneralUser GS FluidSynth v1.44.sf2” (oczywiście nazwa może ulec zmianie w przyszłości). Zmieniłem nazwę tego pliku i przeniosłem go do /usr/local/share/fluidsynth/generaluser.v.1.44.sf2
.
Po umieszczeniu i fluidsynth
zainstalowaniu pliku SoundFont możesz odtworzyć plik midi za pomocą tego polecenia:
fluidsynth -i /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 ~/Music/example.mid
nb Istnieją pewne (pozornie nieszkodliwe) komunikaty o błędach, które są wyświetlane, gdy to robisz. Jeśli chcesz je wyłączyć, użyj:
(fluidsynth -i /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 ~/Music/example.mid 2>&1) >/dev/null
zamiast.
Oczywiście nigdy tego nie zapamiętam, więc utworzyłem zsh
funkcję o nazwieplaymidi
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
}
(Myślę, że to też powinno działać bash
).
Teraz wszystko, co muszę zrobić, to wpisać:
playmidi example.mid
i example.mid
zagrają.