Jogando Midi Out no OS X, C ++
Pergunta
Como posso enviar mensagens MIDI para fora de um programa C ++ e fazer com que elas joguem o som do General Midi Bank?
Eu olhei em volta e não parece haver uma resposta simples, e meu cérebro começa a derreter depois de ler longos manuais sobre Coremidi e coisas assim.
Eu tenho um projeto simples de jogo/sintetizador C ++, e tudo o que quero fazer é, por exemplo, quando essa bola atingir o chão, acionar um C4 do Grand Piano Bank. Estou bem com a maior parte do programa, mas a parte integral MIDI até agora foi totalmente opaca para mim.
Eu gostaria de usar o Coremidi, porque parece que pode ser mais simples, mas algo multi-plataforma seria um bônus.
Muito obrigado por qualquer ajuda!
Solução
Outra opção seria rtmidi
Pretende ser simples e cruzado
Eu usei o RTaudio semelhante para E/S em tempo real, e foi relativamente fácil de usar.
Você poderá listar todos os dispositivos MIDI com o código de exemplo, depois selecionar o banco GM e enviar a mensagem MIDI apropriada (Nota On/Off Mensagem), depois de selecionar o piano com uma mensagem de alteração do programa. A Wikipedia tem um página útil para começar
Outras dicas
Escrevi um tutorial que pode ajudar alguém que encontra o mesmo problema usando o Coremidi. Ele explica como ler um arquivo MIDI e gerar a Augraph usando efeitos sonoros de um arquivo de fonte sonora. Ele também explica como usar um ponto final virtual para obter acesso às mensagens MIDI em tempo real. Aqui.
Para fazer o que você deseja fazer, você pode modificar o projeto de amostra que eu forneço com o seguinte:
result = MusicDeviceMIDIEvent ([AUSampler], midiStatus, note, velocity, 0);
Onde o Ausampler é um ponteiro para o Ausampler, ou seja, o ponto de partida no Augnraph. Em vez de ler em um arquivo, você pode usar o seguinte comando para enviar uma nota MIDI para ser reproduzida.