| Você está aqui: C++ ::: Dicas & Truques ::: MIDI Musical Instrument Digital Interface, Mapeamento e sequenciamento MIDI, Entrada e saída MIDI | 
| Usando a função midiOutShortMsg() da API do Windows para enviar uma mensagem MIDI para o dispositivo de saída MIDIQuantidade de visualizações: 1221 vezes | 
| A função midiOutShortMsg() da API Win32 do Windows nos permite enviar uma mensagem MIDI para o dispositivo de saída MIDI. Esta função possui a seguinte assinatura: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- MMRESULT midiOutShortMsg( HMIDIOUT hmo, DWORD dwMsg ); O parâmetro HMIDIOUT é um handle para o dispositivo de saída MIDI, obtido a partir de uma chamada midiOutOpen(). O parâmetro dwMsg é do tipo DWORD, um inteiro sem sinal de 32 bits que pode armazenar valores na faixa de 0 até 4.294.967.295. Vamos ver um exemplo de como tocar uma única nota MIDI, a nota dó central no piano. Para isso precisamos entender como tal mensagem é enviada. Sabendo que um DWORD possui quatro bytes, o último byte ( o byte de ordem mais baixa) é o byte de status MIDI. Os valores de status mais comuns são "Note on", com o valor hexadecimal 90 e "Note off", com valor hexadecimal 80. O segundo byte de ordem mais baixa é o número da nota MIDI a ser tocada. O dó central no piano possui o valor decimal 48. Convertendo para hexadecimal temos 3C. Então, para tocar essa nota, já temos os dois últimos bytes com seus respectivos valores: 3C90 Vamos ao terceiro byte de order mais baixa. Este, no caso dos eventos "Note on" e "Note off", representa a velocidade (a força com a qual a nota é tocada no instrumento). Este valor pode ser na faixa de 0 a 127. Assim, para atacarmos a nota com a velocidade (ou volume) de 100, podemos fornecer o valor hexadecimal 64. Agora, o nosso valor fica: 643C90 Finalmente, para nosso alívio, o byte de mais alta ordem não é usado. Então temos: 00643C90 Agora só precisamos fornecer este valor para a função midiOutShortMsg(). Veja: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[]) {
  unsigned int erro; // guarda o erro caso algo dê errado
  HMIDIOUT saida; // handle para o dispositivo de saída MIDI.
  // vamos abrir o dispositivo de saída MIDI
  erro = midiOutOpen(&saida, MIDI_MAPPER, 0, 0, CALLBACK_NULL);
  if (erro != MMSYSERR_NOERROR) {
    printf("Não foi possível abrir o mapeador MIDI: %d\n", erro);
  }
  else {
    printf("Mapeador MIDI aberto com sucesso\n");
  }
  // vamos tocar o dó central com velocidade 100
  midiOutShortMsg(saida, 0x00643C90);
  Sleep(1000); // a nota vai durar 1 segundo
  // dispara a mensagem Note-off
  midiOutShortMsg(saida, 0x00643C80);
  // agora vamos fechar o dispositivo de saída MIDI
  midiOutClose(saida);
  system("PAUSE");
  return EXIT_SUCCESS;
}
Execute esse código e você ouvirá uma linda nota dó nos auto-falantes do seu PC ou Notebook. | 
|  Link para compartilhar na Internet ou com seus amigos: | 
| Desafios, Exercícios e Algoritmos Resolvidos de C++ | 
| Veja mais Dicas e truques de C++ | 
| Dicas e truques de outras linguagens | 
| E-Books em PDF | ||||
| 
 | ||||
| 
 | ||||
| Linguagens Mais Populares | ||||
| 
			   1º lugar: Java | 


 
 




