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, afplay
nã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 fluidsynth
e o de Fink seria fink install fluidsynth
.)
No entanto, o download fluidsynth
apenas 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 fluidsynth
estiver 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 zsh
funçã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 bash
mim.)
Agora tudo o que tenho a fazer é digitar:
playmidi example.mid
e example.mid
vai jogar.