Como reproduzir um arquivo midi no terminal?

29

Estou procurando um aplicativo de linha de comando mais simples (ou uma ferramenta on-board no Mavericks de que não conheço) para reproduzir um arquivo midi no terminal. Tão simples quanto possível, algo assim play myfile.mid.

Contexto: estou brincando com midi em Python e preciso de algo que possa iniciar a partir de um script. Sem GUI, sem janelas, apenas reprodução. Deve ser possível chamar do script Python para ser aceito, mas qualquer coisa que funcione no terminal deve ser.

DCS
fonte

Respostas:

36

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.

TJ Luoma
fonte
StackExchange no seu melhor! Embora a opção fluidsynth seja muito mais invasiva do que eu estava disposto a aceitar (nem todo mundo instalou o brew ...), ele funciona muito bem e é iniciado mais rapidamente no script do que o VLC. Então, esperarei um dia ou dois se alguma solução alternativa ridiculamente simples aparecer, mas se não a recompensa for sua. BTW, para mim, o fluid-synth aparece em /usr/local/Cellar/fluid-synth/1.1.6. (Eu não gosto da versão antiga da solução Quicktime, você nunca sabe quanto tempo vai funcionar).
DCS
Sim, eu concordo que "usar o Homebrew | MacPorts | Fink" não é o ideal, mas a) qualquer pessoa que gaste algum tempo usando a linha de comando se encontrará querendo mais do que a Apple pode / fornece eb) sem uma solução embutida, parecia razoável aqui. Quanto ao QuickTime7, eu concordo, ele sobreviveu por mais tempo do que eu imaginava, mas OTOH não acredito que o "QuickTime X" ainda não possa fazer as coisas que o QuickTime 7 poderia. (Faz-me com medo do futuro do iWork, mas isso é outra discussão para outro segmento em outro dia :-)
TJ Luoma
A versão recente do iWorks na verdade foi paralisada em comparação com a última versão ... Só estou esperando o Terminal desaparecer. Mas chega, ou seremos criticados por conversas.
DCS
@DCS Não faremos reclamações informadas. Na pior das hipóteses, pediremos que eles gerem para uma sala de bate-papo ou abrem um novo tópico, se necessário. Além disso, editei alguns detalhes da sua postagem. Coloque essas informações como resposta ou edite uma das respostas, se essas informações forem adequadas.
bmike
Eu tentei isso em Yosemite e não consegui fazê-lo funcionar. Até desinstalei e reinstalei as portas mac. Erro: fluidsynth: aviso: nenhuma predefinição encontrada no canal 9 [banco = 128 prog = 56] não pôde lidar com a solicitação do cliente externo. jack principal capturado sinal 31.
Robert Wasmann 17/03
35

Isso funcionou para mim:

Timidez da instalação do $ brew
$ timidity file.midi
lyderic
fonte
Funcionou para mim também - e é MUITO menos problemático do que a resposta que envolve o fluidsynth.
glenra
11
Melhor resposta aqui. A resposta fluidsynth é realmente inteligente, mas é suscetível de ser interrompida em algum momento (se ainda não o fez), porque é muito mais complicada do que esta.
21816 Westcroft_to_Apse
Isso não funcionou para mim. Depois de executar o primeiro comando acima, executei o segundo e recebi esta mensagem:file.midi: No such file or directory
user65526
5

Você pode usar o VLC com uma interface CLI não interativa com -I dummy:

/Applications/VLC.app/Contents/MacOS/VLC -I dummy file.mid vlc://quit

Para ativar o suporte midi, vá para Preferências> Mostrar tudo> Entrada / codecs> Codecs de áudio> Fluid Synth e defina o soundfont para um arquivo como o FluidSynth soundfont em http://www.schristiancollins.com/generaluser.php .

Edit: o suporte midi foi removido da versão recente do VLC. Você ainda pode usar o fluidsynth do shell, conforme descrito por TJ Luoma:

brew install fluidsynth
wget http://www.schristiancollins.com/soundfonts/GeneralUser_GS_1.44-FluidSynth.zip
unzip GeneralUser_GS_1.44-FluidSynth.zip
mkdir -p /usr/local/share/fluidsynth
mv GeneralUser\ GS\ 1.44\ FluidSynth/GeneralUser\ GS\ FluidSynth\ v1.44.sf2 /usr/local/share/fluidsynth
fluidsynth -i /usr/local/share/fluidsynth/GeneralUser\ GS\ FluidSynth\ v1.44.sf2 file.mid
Lri
fonte
11
Trabalho! No entanto, o VLC, por ser o super reprodutor completo, possui um atraso de inicialização muito perceptível antes do início da reprodução, que minha solução do Windows para o problema, um aplicativo super pequeno chamado playsmf.exe não tinha. Isso não mata o VLC para o meu propósito, mas ter algo menor ainda seria bom. Vou esperar alguns dias para ver se outra resposta aparece; se não, eu aceito o seu. BTW: vlc: // quit deve ser adicionado aos argumentos para sair do VLC e permitir que meu script seja retomado.
DCS
Veja minha atualização acima - droga, isso costumava funcionar bem!
DCS
é possível usar uma versão antiga do vlc?
wrossmck
@RossMcKinley: Embora tecnicamente possível, isso certamente não é o que eu quero fazer. O software é atualizado por um motivo e eu quero que um programa pesado como o VLC esteja atualizado no meu sistema. Isso seria diferente se fosse apenas uma mini ferramenta de 100kb, mas o VLC não é assim.
DCS
1

De acordo com este post nos fóruns do VLC, Felix Paul Kuehne , administrador do site, disse

Olá, aparentemente, o FluidSynth se perdeu no processo de compilação da última atualização. Tenha certeza de que ele voltará ao 2.1.2 em breve!

Portanto, por enquanto, faça o downgrade para o vlc 2.0.9 ou aguarde o vlc 2.1.2. Dessa forma, sua solução existente funcionará como antes.

wrossmck
fonte
Infelizmente, isso não funciona a partir do VLC 2.2.1 (Nov 2015)
Jess Riedel
1

Não é exatamente a resposta, mas há um pequeno aplicativo que pode enviar dados midi na linha de comando do Mac OS X. Também pode controlar funções básicas do GarageBand: http://www.bibiko.de/music/MIDImyAPP/

user72160
fonte
hey graças isso é algo exatamente como eu estava procurando, por que eu estava roçando posts sobre midi em Stackexchange
forgotstackxpassword
0

Para tornar as coisas mais convenientes, você pode resumir a resposta de TJ Luoma em um aplicativo AppleScript:

on open inputFile
    tell application "Terminal"
        do script "fluidsynth -i /usr/local/share/fluidsynth/generaluser.v.1.44.sf2 " & (quoted form of POSIX path of inputFile as string)
        activate
    end tell
end open

Você pode selecionar Obter informações em um arquivo .mid aleatório, alterar "Abrir com:" para o aplicativo AppleScript e pressionar "Alterar tudo ..." para torná-lo a maneira padrão de abrir arquivos .mid. Agora, quando você clica duas vezes em um arquivo MIDI, ele abre a janela do Terminal e o reproduz automaticamente.

user3932000
fonte
é claro, que é útil talvez para algumas pessoas em geral, mas o op estava perguntando sobre um soution de linha de comando;)
forgotstackxpassword
Opa, desculpe, interpretou mal a pergunta!
user3932000