Compartilhar via


WAVEFORMAT_MIDI_MESSAGE

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Essa estrutura especifica as informações temporização de um arquivo MIDI (Musical Instrument Digital Interface).

Syntax

typedef struct _WAVEFORMAT_MIDI_MESSAGE {
  UINT32 DeltaTicks;
  DWORD MidiMsg;
} WAVEFORMAT_MIDI_MESSAGE;

Os membros

  • DeltaTicks
    Número de tiques deve esperar antes tocando uma mensagem depois que a mensagem anterior tiver terminado tocando.
  • MidiMsg
    32-bit MIDI (Musical Instrument Digital Interface) mensagem valor que seja consistente com o MIDI (Musical Instrument Digital Interface) mensagens usados em sistemas operacionais com base em Área de trabalho. A mensagem é compactada em um DWORD valor com o primeiro byte da mensagem em de baixo-intervalo byte ordem, conforme indicado na seguinte tabela.

    Word Byte O uso

    Alta

    Alto-ordem

    Deve ser 0.

    Alta

    Baixo-ordem

    O segundo byte de dados MIDI (Musical Instrument Digital Interface) (opcional).

    Baixa

    Alto-ordem

    O primeiro byte de dados MIDI (Musical Instrument Digital Interface) (opcional).

    Baixa

    Baixo-ordem

    O status MIDI (Musical Instrument Digital Interface).

    Os dois bytes dados MIDI (Musical Instrument Digital Interface) são opcional depending on o byte status MIDI (Musical Instrument Digital Interface). Quando uma série de mensagens tiver o mesmo byte status, você pode omitir o byte status de cada mensagem após o primeiro da série, criando uma execução status. Executar mensagens status deve ser compactado conforme indicado na seguinte tabela.

    Word Byte O uso

    Alta

    Alto-ordem

    Deve ser 0.

    Alta

    Baixo-ordem

    Não usado.

    Baixa

    Alto-ordem

    O segundo byte de dados MIDI (Musical Instrument Digital Interface) (opcional).

    Baixa

    Baixo-ordem

    O primeiro byte de dados MIDI (Musical Instrument Digital Interface).

    O alto-byte de ordem de DWORD valor também é usado para mensagens proprietárias armazenando para o valor DWORD um dos valores mensagem descritos a seguinte tabela.

    Valor Descrição

    MIDI_MESSAGE_UPDATETEMPO

    Informa o Player MIDI (Musical Instrument Digital Interface) para atualização de tempo baseia a taxa especificada dentro de arquivo MIDI (Musical Instrument Digital Interface). Os menor 24 bits (bits 23–0) desse valor contêm a nova configuração a ser usado como m_USecPerQuarterNote.

    MIDI_MESSAGE_FREQGENON

    Inicia tocando uma onda seno na freqüência especificada. 15–0 Bits contêm o valor da freqüência a ser executado e bits 22–16 conter a 7-bit velocidade (volume) a ser usado. (Uma velocidade de 0 indica que a freqüência deve ser desativada.)

    MIDI_MESSAGE_FREQGENOFF

    Pára tocando a freqüência especificada. 15–0 Bits contêm o valor freqüência seja interrompido.

Exemplo de código

Exemplo codificar a Play um local ocupado (reorganizar) Tom 20 vezes. Este tom é composto de freqüências 480 & 620P em um emitir em um 3 segundos no/2 segundos desativar cadence.

#define DEFINE_GUIDS 1
#include "windows.h"
#include "stdio.h"
#include "wfmtmidi.h"
/*
DTMF frequencies:
DTMF stands for Dual Tone Multi Frequency. These are the tones used 
for key presees on a telephone touchpad. The tone of the button is the
sum of the column and row tones. The ABCD keys do not exist on standard
telephones.
 Frequency 1
1209133614771633
------------------------
697 |123A
770 |456B
Frequency 2852 |789C
941 |*0#D
Frequencies of other telephone tones
TypeHzOnOff
-------------------------------------------
Dial Tone 350 &400------
Busy Signal480 &6200.50.5
Toll Congestion 480 &6200.20.3
Ringback (Normal)440 &4802.04.0
Ringback (PBX)440 &4801.54.5
Reorder (Local) 480 &6203.02.0
Invalid Number200 &400
Hang Up Warning1400 & 20600.10.1
Hang Up2450 & 2600------
*/
HANDLE hEvent;
void CALLBACK waveOutProc(
 HWAVEOUT hwo,
 UINT uMsg,
 DWORD dwInstance,
 DWORD dwParam1,
 DWORD dwParam2
) {
if (uMsg==WOM_DONE) {
 SetEvent(hEvent);
}
return;
}
int _tmain(int argc, TCHAR *argv[]) {
hEvent=CreateEvent( NULL,TRUE,FALSE,NULL);
WAVEFORMAT_MIDI wfm;
memset(&wfm,0,sizeof(wfm));
wfm.wfx.wFormatTag=WAVE_FORMAT_MIDI;
wfm.wfx.nChannels=1;
wfm.wfx.nSamplesPerSec=32;
wfm.wfx.nAvgBytesPerSec=32;
wfm.wfx.nBlockAlign=sizeof(WAVEFORMAT_MIDI_MESSAGE);
wfm.wfx.wBitsPerSample=16;
wfm.wfx.cbSize=WAVEFORMAT_MIDI_EXTRASIZE;
wfm.USecPerQuarterNote=9600000; // Force each tick to be 1/10 sec
MMRESULT Result;
HWAVEOUT hWaveOut;
Result = waveOutOpen(&hWaveOut, WAVE_MAPPER,
(LPWAVEFORMATEX)&wfm, (DWORD)waveOutProc,
0, CALLBACK_FUNCTION);
if (Result!=MMSYSERR_NOERROR) {
 return -1;
}
WAVEFORMAT_MIDI_MESSAGE MidiMessage[5];
MidiMessage[0].DeltaTicks=0;
MidiMessage[0].MidiMsg=0x203F0000 | 480;
MidiMessage[1].DeltaTicks=0;
MidiMessage[1].MidiMsg=0x203F0000 | 620;
MidiMessage[2].DeltaTicks=2;
MidiMessage[2].MidiMsg=0x303F0000 | 480;
MidiMessage[3].DeltaTicks=0;
MidiMessage[3].MidiMsg=0x303F0000 | 620;
MidiMessage[4].DeltaTicks=3;
MidiMessage[4].MidiMsg=0; // Dummy msg, does nothing
WAVEHDR WaveHdr;
WaveHdr.lpData = (LPSTR)&MidiMessage;
WaveHdr.dwBufferLength = sizeof(MidiMessage);
WaveHdr.dwFlags = WHDR_BEGINLOOP|WHDR_ENDLOOP;
WaveHdr.dwLoops = 20;
Result = waveOutPrepareHeader(hWaveOut,&WaveHdr,sizeof(WaveHdr));
Result = waveOutWrite(hWaveOut,&WaveHdr,sizeof(WaveHdr));
WaitForSingleObject(hEvent,INFINITE);
Result = waveOutUnprepareHeader(hWaveOut,&WaveHdr,sizeof(WaveHdr));
Result = waveOutClose(hWaveOut);
return 0;
}

Requirements

Header wfmtmidi.h
Windows Embedded CE Windows Embedded CE 6.0 and later
Windows Mobile Pocket PC 2002 and later, Smartphone 2002 and later

See Also

Reference

Waveform Audio Structures
MIDI_MESSAGE_UPDATETEMPO
MIDI_MESSAGE_FREQGENON
MIDI_MESSAGE_FREQGENOFF

Concepts

MIDI