Este acabou por ser um problema mais complicado do que eu esperava inicialmente.
O QuickTime X não pode reproduzir arquivos MIDI, embora o QuickTime 7 possa.
Tanto quanto posso dizer, significa que não há uma solução "integrada" para reproduzir arquivos MIDI no Mac OS X (por exemplo, afplaynão funciona). Portanto, acredito que qualquer solução envolverá o download e a instalação de outro programa.
Opção 1: Faça o download e instale o QuickTime 7, que ainda funciona bem no Mavericks, e você pode reproduzir arquivos midi:
open -a QuickTime\ Player\ 7 /path/to/your/file.mid
no entanto, isso só será reproduzido automaticamente se o usuário tiver ativado essa preferência, que acredito estar desativada por padrão.
Opção # 2: Use FluidSynth
Para instalá-lo, você deve usar o Fink, MacPorts ou (minha recomendação) o Homebrew. Depois que o Homebrew estiver instalado, digite isto no Terminal:
brew install fluidsynth
(O comando de MacPorts seria sudo port install fluidsynthe o de Fink seria fink install fluidsynth.)
No entanto, o download fluidsynthapenas leva você a meio caminho. Então você precisa de um arquivo "SoundFont", do qual eu nunca tinha ouvido falar antes. Há informações sobre eles aqui
Eu baixei um de S. Christian Collins chamado "GeneralUser", que é gratuito. A versão atual (em 27/11/2013) é a versão 1.44 do FluidSynth . {Se esse link direto quebrar no futuro, use o link anterior, que o levará à página da Web comum do GeneralUser.}
Depois de baixar e descompactar, você terá uma série de arquivos, incluindo "GeneralUser GS FluidSynth v1.44.sf2" (obviamente o nome pode mudar no futuro). Renomeei esse arquivo e o mudei para /usr/local/share/fluidsynth/generaluser.v.1.44.sf2.
Quando o arquivo SoundFont fluidsynthestiver instalado e instalado, você poderá reproduzir um midi usando este comando:
fluidsynth -i /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 ~/Music/example.mid
Nota: existem algumas mensagens de erro (aparentemente inofensivas) exibidas quando você faz isso. Se você deseja suprimi-los, use:
(fluidsynth -i /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 ~/Music/example.mid 2>&1) >/dev/null
em vez de.
Obviamente, nunca vou me lembrar de tudo isso, então criei uma zshfunção chamadaplaymidi
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
}
(Isso também deve funcionar para bashmim.)
Agora tudo o que tenho a fazer é digitar:
playmidi example.mid
e example.midvai jogar.