Это оказалось более сложной проблемой, чем я первоначально ожидал.
QuickTime X не может воспроизводить MIDI-файлы, хотя QuickTime 7 может.
Насколько я могу судить, это означает, что не существует «встроенного» решения для воспроизведения MIDI-файлов в Mac OS X (например, afplayне работает). Поэтому я считаю, что любое решение будет связано с загрузкой и установкой какой-либо другой программы.
Вариант № 1: Загрузите и установите QuickTime 7, который по-прежнему отлично работает на Mavericks, а затем вы можете воспроизводить MIDI-файлы:
open -a QuickTime\ Player\ 7 /path/to/your/file.mid
однако, это будет автоматически воспроизводиться, только если пользователь включил эту настройку, которая, по моему мнению, отключена по умолчанию.
Вариант № 2: использовать FluidSynth
Чтобы установить его, вы должны использовать Fink, MacPorts или (по моей рекомендации) Homebrew. Как только Homebrew установлен, введите это в Терминале:
brew install fluidsynth
(Команда MacPorts будет, sudo port install fluidsynthа команда Финка будет fink install fluidsynth.)
Тем не менее, загрузка fluidsynthтолько дает вам часть пути туда. Тогда вам нужен файл "SoundFont", о котором я никогда раньше не слышал. Здесь есть информация о них
Я скачал один из S. Christian Collins под названием «GeneralUser», который является бесплатным. Текущая версия (по состоянию на 2013-11-27) - версия 1.44 FluidSynth . {Если эта прямая ссылка прекратит работу в будущем, используйте предыдущую ссылку, которая приведет вас на обычную веб-страницу для GeneralUser.}
После того, как вы загрузили и распаковали его, у вас будет ряд файлов, включая «GeneralUser GS FluidSynth v1.44.sf2» (очевидно, имя может измениться в будущем). Я переименовал этот файл и переместил его в /usr/local/share/fluidsynth/generaluser.v.1.44.sf2.
Как только файл SoundFont будет размещен и fluidsynthустановлен, вы можете воспроизвести миди с помощью этой команды:
fluidsynth -i /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 ~/Music/example.mid
nb Есть некоторые (казалось бы безобидные) сообщения об ошибках, которые отображаются при этом. Если вы хотите подавить их, используйте:
(fluidsynth -i /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 ~/Music/example.mid 2>&1) >/dev/null
вместо.
Очевидно, я никогда не буду помнить все это, поэтому я сделал zshфункцию под названием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
}
(Это должно работать на bashслишком я верю.)
Теперь все, что мне нужно сделать, это набрать:
playmidi example.mid
и example.midбудет играть.