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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top