Criar uma Loja Virtual Grátis

codigo fonte midi

codigo fonte midi

 

MIDI

Delphi

API do Windows

Obtendo uma lista dos dispositivos de saída MIDI no sistema



O primeiro passo é declarar uma variável do tipo TMidiOutCaps.

Este registro está declarado na unit MMSystem.pas e é uma tradução da estrutura MIDIOUTCAPS da API do Windows.

O passo seguinte é obter a quantidade de dispositivos de saída MIDI.

Isso é feito com uma chamada à função midiOutGetNumDevs da API do Windows.

Uma vez obtida a quantidade de dispositivos nós usamos um laço for e, no corpo deste laço, usamos o valor da variável de controle i para efetuar uma chamada à função midiOutGetDevCaps(), também da API do Windows:

midiOutGetDevCaps(i, @MidiOutCaps, sizeof(TMidiOutCaps));

Esta função recebe o identificador do dispositivo (um valor inteiro começando em 0 e indo até a quantidade de dispositivos - 1), um ponteiro para um registro MidiOutCaps e o tamanho em bytes do registro. Se a função for executada com sucesso, o registro MidiOutCaps será preenchido com várias informações úteis, tais como o nome do dispositivo, o ID do fabricante, o ID do produto, versão do driver, tipo do dispositivo MIDI, número de vozes suportadas, número máximo de notas que podem ser tocadas simultaneamente, etc.

Para finalizar, nós acessamos o campo szPname do registro MidiOutCaps e o adicionamos no ComboBox. Veja o código completo a seguir:

procedure TForm1.Button2Click(Sender: TObject);

var

i: Integer;

MidiOutCaps: TMidiOutCaps; // este registro (record) está definido em MMSystem.pas

erro: Word;

begin

// uses MMSystem

ComboBox1.Clear;

// midiOutGetNumDevs retorna a quantidade de dispositivos de saída MIDI no sistema

for i := 0 to midiOutGetNumDevs - 1 do

begin

// vamos obter o dispositivo identificado pela variável i (uDeviceID)

erro := midiOutGetDevCaps(i, @MidiOutCaps, sizeof(TMidiOutCaps));

if erro <> MMSYSERR_NOERROR then

raise Exception.Create('Não foi possível obter a lista de dispositivos ' +

'de saída MIDI');

// vamos adicionar o nome do dispositivo no ComboBox

ComboBox1.Items.Add(StrPas(MidiOutCaps.szPname));

end;

end;


Ao executar este código o ComboBox será preenchido com valores semelhantes à:

Microsoft GS Wavetable SW Synth
MPU-401

Nas demais dicas relacionadas a este assunto você deverá sempre indicar o dispositivo de saída MIDI. Geralmente você poderá fornecer os valores 0 ou 1 para as funções MIDI que pedem o ID do dispositivo de saída.