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
Download

Maximum MIDI