Это оказалось более сложной проблемой, чем я первоначально ожидал.
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
будет играть.