Maximum MIDI
Giordano Ribeiro
Introdução
Necessidade
Precisão
Driver
MIDI
Protocolo
Simples
SMF Complicado
Maximum MIDI
Componente
Visual C++
Borland C++ Builder
Delphi
VB
Endereços:
www.manning.com/Messick
www.cin.ufpe.br/~musica/maxmidi.zip
www.cin.ufpe.br/~grec/help.zip
Principais Classes – Visual
C++
CMaxMidiOut
CMaxMidiIn
CMaxMidiSync
CMaxMidiSMF
CMaxMidiTrack
Principais Classes – Borland
C++ Builder
TMaxMidiOut
TMaxMidiIn
TMaxMidiSync
TMaxMidiSMF
TMaxMidiTrack
TMaxMidiScore
MidiEvent
IDE Borland C++ Builder
MidiEvent
struct {
DWORD time;
BYTE
status;
BYTE
data1;
BYTE
data2;
BYTE
data3;
} MidiEvent;
LPMIDIEVENT *MidiEvent;
TMaxMidiOut
BOOL Open(Device,
void
Flags)
Close()
void Flush()
BOOL IsOpen()
void Reset()
BOOL Put(MidiEvent)
TMaxMidiIn
Métodos
BOOL Open(Device, Flags)
void Close(void)
LPMIDIEVENT Get()
BOOL IsOpen()
void Start()
void Stop()
Eventos
OnMIDIData()
TMaxMidiSync
Métodos
BOOL Open(mode, timerPeriod)
void Close()
BOOL IsOpen()
BOOL IsRunning()
DWORD GetPosition(units)
BOOL Mode(mode)
WORD Mode()
BOOL Period(period)
WORD Period()
TMaxMidiSync (continuação)
Métodos
WORD Resolution()
void Resolution(resolution)
BOOL Tempo(tempo)
DWORD Tempo()
void Start()
void ReStart()
void Pause(reset)
Void Stop()
Eventos
ProcessMidiBeat()
ProcessSyncDone()
Exemplo: Inicializando
Arquivo.h
TMaxMidi *MaxMidi;
TMaxMidiOut *MaxMidiOut1;
TMaxMidiSync *MaxMidiSync1;
Arquivo.cpp
MaxMidiSync1->Open(S_INT, 10);
If(!MaxMidiOut1->Open(numeroDoDriver,
MIDIOUT_DEFAULT)
<mensagem de erro>
Exemplo: Tocando uma
Única Nota
MidiEvent *evt = new MidiEvent;
evt->status = 0x90;
evt->data1 = 60;
evt->data2 = 127;
MaxMidiOut->Put(evt);
TMaxMidiSMF
void Close()
int GetFormat()
char GetMode()
BOOL IsOpen()
BOOL Load()
int NumTracks()
BOOL Open(filename, mode, format)
BOOL Read(TMaxMidiTrack* pTrack)
BOOL ReadMeta(TMaxMidiTrack* pTrack,
BYTE MetaEvent, LPSTR* Value, DWORD*
cbSize)
TMaxMidiSMF (continuação)
WORD
Resolution()
void Resolution(resolution)
BOOL Rewind()
BOOL Save()
BOOL Write(TMaxMidiTrack* pTrack)
UINT WriteMeta(CMaxMidiTrack*
pTrack, BYTE MetaEvent, LPSTR
Value, DWORD time)
TMaxMidiTrack
LPMIDIEVENT
GetEvent(eventNum)
TMaxMidiScore
Atributo
TMaxMidiTrack
*Tracks
Exemplo: Lendo Um mudanças
de tempo em um Arquivo MIDI
TMaxMidiSMF* MaxMidiSMF1;
TMaxMidiScore* MaxMidiScore;
MaxMidiScore = new TMaxMidiScore(numTracks);
MaxMidiSMF1->Attach(MaxMidiScore);
MaxMidiSMF1->Load(MaxMidiSync1);
If(MaxMidiSMF1->ReadMeta(MaxMidiScore->Tracks[0],
META_TEMPO, &valorTempo, &tamanhoTempo)
<processamento da informação>
Exemplo: Lendo e tocando uma
track
if(Form1->MaxMidiSMF1->IsOpen())
{
if(!Form1->MaxMidiSync1->IsOpen())
Form1->MaxMidiSync1->Open(S_INT, 10);
if(!Form1->MaxMidiOut1->IsOpen())
Form1->MaxMidiOut1->Open(0,MIDIOUT_DEFAULT);
resolucao=Form1->MaxMidiSMF1->Resolution();
Form1->MaxMidiOut1->Attach(MaxMidiScore);
Form1->MaxMidiSync1->Resolution(resolucao);
Form1->MaxMidiSync1->Start();
MaxMidiScore->StartOut( Form1->MaxMidiOut);
Form1->MaxMidiSync1->Tempo(uSPerBeat);
}
Programas interativos,
respondendo a cliques (Módulo
Educativo D´Accord)
TMaxMidi
TMaxMidiOut
TMaxMidiIn
TMaxMidiSync
TMaxMidiSMF
TMaxMidiScore
TMaxMidiTrack
Programas de sequenciamento
(D´Accord Violão)
TMaxMidi
TMaxMidiOut
TMaxMidiIn
TMaxMidiSync
TMaxMidiSMF
TMaxMidiScore
TMaxMidiTrack
Programas que utilizem arquivos
MIDI (D´Accord Editor)
TMaxMidi
TMaxMidiOut
TMaxMidiIn
TMaxMidiSync
TMaxMidiSMF
TMaxMidiScore
TMaxMidiTrack
Programas que permitam
gravação (D´Accord Editor)
TMaxMidi
TMaxMidiOut
TMaxMidiIn
TMaxMidiSync
TMaxMidiSMF
TMaxMidiScore
TMaxMidiTrack
Tocar
Out->Open
Out->Put
Gravar
In->Open
Out->Open
Sync->Open
Score = new TMaxMidiScore
Sync->Attach(Score)
In->Attach(Score)
Sync->Start
In->Start
Tocar SMF
Sync->Open
Out->Open
SMF -> Attach (Score)
SMF->Load
Sync->Attach(Score)
Out->Attach(Score)
Sync -> Start