Список використаних джерел. 2. Assembler. Підручник для вузів

1. Delphi 7 / під заг. ред. А.Д. Хомоненко. - СПб.: БХВ-Петербург, 2007. - 1216 с.

2. Assembler. Підручник для вузів. 2-е изд. - СПб.: Питер, 2007. - 637с.

3. Архангельський А.Я. Прийоми програмування в Delphi на основі VCL. - М.: «Біном-Пресс», 2006 р. - 944 с.

4. Флен М.Є. Біблія Delphi. - СПб.: БХВ-Петербрг, 2004. - 880 с.

5. Стівенс Р. Delphi. Готові алгоритми / Рід Стівенс; Пер. з англ. Мерещука П.А. - 2-е изд., Стер. - М.: ДМК Пресс; СПб.: Питер, 2004. - 384 с.: Іл.

6. «Програмування в Delphi 7», електронний посібник, Є. Марков,
П. Дарахвелидзе

7. С. Симонов, Delphi 7 навчальний курс, вид. Пітер, 2005 р.

8. В. В. Фролов - Delphi програмування на мові високого рівня

Додаток А

Лістинг програми

unit Aide_Clavier;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, jpeg, ExtCtrls, StdCtrls;

 

type

TForm2 = class(TForm)

GroupBox1: TGroupBox;

Image1: TImage;

GroupBox2: TGroupBox;

GroupBox3: TGroupBox;

GroupBox4: TGroupBox;

Label13: TLabel;

GroupBox5: TGroupBox;

Label15: TLabel;

Label16: TLabel;

Label17: TLabel;

Label18: TLabel;

Label19: TLabel;

GroupBox6: TGroupBox;

Label22: TLabel;

Label23: TLabel;

GroupBox7: TGroupBox;

Label1: TLabel;

Label2: TLabel;

GroupBox8: TGroupBox;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

GroupBox9: TGroupBox;

Label10: TLabel;

Label11: TLabel;

Label12: TLabel;

procedure FormCreate(Sender: TObject);

private

{ Dclarations prives }

public

{ Dclarations publiques }

end;

 

var

Form2: TForm2;

 

implementation

 

{$R *.dfm}

 

procedure TForm2.FormCreate(Sender: TObject);

begin

 

end;

 

end.

unit Clavier_AZERTY;

 

interface

 

type

TKeys = Record

Key : Word;

Note : string;

Down: boolean;

end;

 

var

// Налаштування параметрів клавіатури QWERTY (Ля2->Mi4)

Keys: Array[0..19] of TKeys =(

// Клавіші клавіатури:

(Key:81; Note:'La2'; Down:false), // q

(Key:87; Note:'Si2'; Down:false), // w

(Key:69; Note:'Do3'; Down:false), // e

(Key:82; Note:'Re3'; Down:false), // r

(Key:84; Note:'Mi3'; Down:false), // t

(Key:89; Note:'Fa3'; Down:false), // y

(Key:85; Note:'Sol3'; Down:false), // u

(Key:73; Note:'La3'; Down:false), // i

(Key:79; Note:'Si3'; Down:false), // o

(Key:80; Note:'Do4'; Down:false), // p

(Key:219; Note:'Re4'; Down:false), // [

(Key:221; Note:'Mi4'; Down:false), // ]

 

(Key:65; Note:'La2d'; Down:false), // a

(Key:68; Note:'Do3d'; Down:false), // d

(Key:70; Note:'Re3d'; Down:false), // f

(Key:72; Note:'Fa3d'; Down:false), // h

(Key:74; Note:'Sol3d'; Down:false), // j

(Key:75; Note:'La3d'; Down:false), // k

(Key:186; Note:'Do4d'; Down:false), // ;

(Key:222; Note:'Re4d'; Down:false) // '

);

 

 

implementation

 

end.

unit Main;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics,

Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls, jpeg,

mmSystem, Clavier_AZERTY, Musiques, Notes_Midi, Menus, ToolWin, ActnMan,

ActnCtrls, ActnMenus, Buttons, Aide_Clavier, pngimage, XPMan;

 

type

TForm1 = Class(TForm)

Systeme: TPanel;

imgSysteme: TImage;

imgDo1: TImage;

imgMi1: TImage;

imgRe1: TImage;

imgFa1: TImage;

imgSol1: TImage;

imgLa1: TImage;

imgSi1: TImage;

imgDo2: TImage;

imgRe2: TImage;

imgMi2: TImage;

imgFa2: TImage;

imgSol2: TImage;

imgLa2: TImage;

imgSi2: TImage;

imgDo3_2: TImage;

imgDo3_1: TImage;

imgRe3: TImage;

imgMi3: TImage;

imgFa3: TImage;

imgSol3: TImage;

imgLa3: TImage;

imgSi3: TImage;

imgDo4: TImage;

imgRe4: TImage;

imgMi4: TImage;

Image23: TImage;

Piano: TPanel;

La1: TShape;

Mi4: TShape;

Re4: TShape;

Do4: TShape;

Si4: TShape;

La4: TShape;

Sol4: TShape;

Fa4: TShape;

Mi3: TShape;

Re3: TShape;

Do3: TShape;

Si3: TShape;

La3: TShape;

Sol3: TShape;

Fa3: TShape;

Mi2: TShape;

Re2: TShape;

Do2: TShape;

Si2: TShape;

La2: TShape;

Sol2: TShape;

Fa2: TShape;

Mi1: TShape;

Re1: TShape;

Do1: TShape;

Si1: TShape;

Sol1: TShape;

Fa1: TShape;

Do1d: TShape;

Fa1d: TShape;

La1d: TShape;

Sol1d: TShape;

Re1d: TShape;

Fa2d: TShape;

La2d: TShape;

Sol2d: TShape;

Re2d: TShape;

Do2d: TShape;

Fa3d: TShape;

La3d: TShape;

Sol3d: TShape;

Re3d: TShape;

Do3d: TShape;

Fa4d: TShape;

La4d: TShape;

Sol4d: TShape;

Re4d: TShape;

Do4d: TShape;

Mi5: TShape;

Re5: TShape;

Do5: TShape;

Si5: TShape;

La5: TShape;

Sol5: TShape;

Fa5: TShape;

Re5d: TShape;

Fa5d: TShape;

La5d: TShape;

Sol5d: TShape;

Do5d: TShape;

Do6: TShape;

imgFa4: TImage;

imgSol4: TImage;

imgLa4: TImage;

imgSi4: TImage;

imgDo5: TImage;

imgDo1d: TImage;

imgRe1d: TImage;

imgFa1d: TImage;

imgSol1d: TImage;

imgLa1d: TImage;

imgDo2d: TImage;

imgRe2d: TImage;

imgFa2d: TImage;

imgSol2d: TImage;

imgLa2d: TImage;

imgDo3d_2: TImage;

imgDo3d_1: TImage;

imgRe3d: TImage;

imgFa3d: TImage;

imgSol3d: TImage;

imgLa3d: TImage;

imgDo4d: TImage;

imgRe4d: TImage;

imgFa4d: TImage;

imgSol4d: TImage;

imgLa4d: TImage;

imgDo5d: TImage;

GroupBox1: TGroupBox;

UpDown1: TUpDown;

lblInstrument: TLabel;

MainMenu1: TMainMenu;

Fic1: TMenuItem;

Edition1: TMenuItem;

Baloo1: TMenuItem;

Fermer1: TMenuItem;

Aide1: TMenuItem;

Player: TGroupBox;

btnPlay: TSpeedButton;

btnPause: TSpeedButton;

btnStop: TSpeedButton;

Groupe_Notes: TGroupBox;

Notes_Alterees: TPanel;

lblDo1d: TLabel;

lblRe1d: TLabel;

lblFa1d: TLabel;

lblSol1d: TLabel;

lblLa1d: TLabel;

lblDo2d: TLabel;

lblRe2d: TLabel;

lblFa2d: TLabel;

lblSol2d: TLabel;

lblLa2d: TLabel;

lblDo3d: TLabel;

lblRe3d: TLabel;

lblFa3d: TLabel;

lblSol3d: TLabel;

lblLa3d: TLabel;

lblDo4d: TLabel;

lblRe4d: TLabel;

lblFa4d: TLabel;

lblSol4d: TLabel;

lblLa4d: TLabel;

lblDo5d: TLabel;

lblRe5d: TLabel;

lblFa5d: TLabel;

lblSol5d: TLabel;

lblLa5d: TLabel;

Notes_Primaires: TPanel;

lblDo1: TLabel;

lblRe1: TLabel;

lblMi1: TLabel;

lblFa1: TLabel;

lblSol1: TLabel;

lblLa1: TLabel;

lblSi1: TLabel;

lblDo2: TLabel;

lblRe2: TLabel;

lblMi2: TLabel;

lblFa2: TLabel;

lblSol2: TLabel;

lblLa2: TLabel;

lblSi2: TLabel;

lblDo3: TLabel;

lblRe3: TLabel;

lblMi3: TLabel;

lblFa3: TLabel;

lblSol3: TLabel;

lblLa3: TLabel;

lblSi3: TLabel;

lblDo4: TLabel;

lblRe4: TLabel;

lblMi4: TLabel;

lblFa4: TLabel;

lblSol4: TLabel;

lblLa4: TLabel;

lblSi4: TLabel;

lblDo5: TLabel;

lblRe5: TLabel;

lblMi5: TLabel;

lblFa5: TLabel;

lblSol5: TLabel;

lblLa5: TLabel;

lblSi5: TLabel;

lblDo6: TLabel;

Image1: TImage;

lblNote: TLabel;

GroupBox2: TGroupBox;

N1: TMenuItem;

XPManifest1: TXPManifest;

Label1: TLabel;

Label2: TLabel;

Procedure FormCreate(Sender: TObject);

procedure FormPaint(Sender: TObject);

Procedure FormDestroy(Sender: TObject);

procedure PianoMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure PianoMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);

procedure Baloo1Click(Sender: TObject);

procedure Fermer1Click(Sender: TObject);

procedure PianoToucheDown(Touche: string);

procedure PianoToucheUp(Touche: string);

procedure btnPauseClick(Sender: TObject);

procedure btnPlayClick(Sender: TObject);

procedure btnStopClick(Sender: TObject);

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

procedure Melodie;

procedure Accompagnement;

procedure Aide1Click(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure lblInstrumentClick(Sender: TObject);

procedure lblNoteClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

MidiOut: hMidiOut;

Instrument: string;

BPM: integer;

Pause: boolean;

Stop: boolean;

 

implementation

 

uses Unit_Main_Droite, Unit_Main_Gauche, Unit3;

 

{$R *.dfm}

 

 

procedure TForm1.btnPauseClick(Sender: TObject);

begin

midiOutShortMsg(MidiOut, $00007BB0);

Stop := false;

Pause := true;

btnPlay.Visible := true;

btnPause.Visible := false;

end;

 

procedure TForm1.btnPlayClick(Sender: TObject);

begin

Stop := false;

Pause := false;

btnPlay.Visible := false;

btnPause.Visible := true;

end;

 

procedure TForm1.btnStopClick(Sender: TObject);

begin

midiOutShortMsg(MidiOut, $00007BB0);

Pause := false;

Stop := true;

end;

 

procedure TForm1.Fermer1Click(Sender: TObject);

begin

Stop := true;

application.terminate;

end;

 

{---------------------МУЗИЧНИЙ МЕНЕДЖЕР-------------------------}

 

procedure TForm1.Aide1Click(Sender: TObject);

begin

Form2.Show;

end;

 

procedure TForm1.Baloo1Click(Sender: TObject);

begin

Pause := false;

Stop := false;

Player.Visible := true;

BPM := 350;

Instrument := '00';

Melodie;

Melodie;

Player.Visible := false;

end;

 

procedure TForm1.Melodie;

var

MD : TMain_Droite;

begin

 

// Запуск компоненту TMain_Droite (Мелодія)

MD := TMain_Droite.Create(False);

 

// Запуск процедури Акомпанемент

Accompagnement;

 

Repeat

Application.ProcessMessages;

if Stop then MD.ThreadTerminated := true;

if Pause then MD.Suspended := true;

//if MD.Suspended AND NOT Pause then MD.Resume;

until MD.ThreadTerminated;

 

end;

procedure TForm1.N1Click(Sender: TObject);

begin

About.Show;

end;

 

procedure TForm1.Accompagnement;

var

MG : TMain_Gauche;

begin

MG := TMain_Gauche.Create(False);

 

Repeat

Application.ProcessMessages;

if Stop then MG.ThreadTerminated := true;

if Pause then MG.Suspended := true;

if MG.Suspended AND NOT Pause then MG.Resume;

until MG.ThreadTerminated;

 

end;

 

 

{---------------------Форми управління---------------------------}

 

Procedure TForm1.FormCreate(Sender: TObject);

var

Res: DWORD; msg: String;

Begin

Res := midiOutOpen(@MidiOut, MIDI_MAPPER, Handle, 0, CALLBACK_WINDOW);

If Res <> 0 Then Begin

Case Res Of

MMSYSERR_BADDEVICEID: msg := 'Priphrique invalide';

MMSYSERR_ALLOCATED: msg := 'Priphrique dja allou';

MMSYSERR_NOMEM: msg := 'Mmoire insuffisante';

MIDIERR_NOMAP: msg := 'Mapper MIDI non trouv';

MIDIERR_NODEVICE: msg := 'Priphrique non trouv';

Else msg := 'Erreur inconnue';

End;

MessageBox(Form1.Handle, pChar(msg), 'Помилка', MB_OK);

Close;

End;

 

 

Instrument:='00';

 

 

BPM:=1;

 

 

Pause := false;

Stop := false;

End;

 

procedure TForm1.FormPaint(Sender: TObject);

begin

Form1.SetFocus;

end;

 

procedure TForm1.lblInstrumentClick(Sender: TObject);

begin

 

end;

 

procedure TForm1.lblNoteClick(Sender: TObject);

begin

 

end;

 

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

Stop := true;

end;

 

Procedure TForm1.FormDestroy(Sender: TObject);

Begin

midiOutShortMsg(MidiOut, $00007BB0);

midiOutClose(MidiOut);

End;

 

 

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

var

i,j : integer;

Touche: string;

begin

for i := 0 to Length(Keys) - 1 do

begin

if Keys[i].Key = Key then

begin

Touche := Keys[i].Note;

if Keys[i].Down = false then

begin

for j := 0 to Length(Notes) - 1 do

if Notes[j].Note=Touche then Notes[j].Down:=true;

PianoToucheDown(Touche);

Keys[i].Down := true;

end;

end;

end;

end;

 

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

var

i, j: integer;

Touche: string;

begin

for i := 0 to Length(Keys) - 1 do

begin

if Keys[i].Key = Key then

begin

Touche := Keys[i].Note;

Keys[i].Down := false;

for j := 0 to Length(Notes) - 1 do

if Notes[j].Note=Touche then Notes[j].Down:=false;

PianoToucheUp(Touche);

end;

end;

end;

 

procedure TForm1.PianoMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var

Touche : string;

begin

Touche := TShape(Sender).Name;

if Button=mbLeft then

PianoToucheDown(Touche);

end;

 

procedure TForm1.PianoMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var

Touche : string;

i : integer;

Note:Cardinal;

begin

Touche := TShape(Sender).Name;

if Button=mbLeft then

PianoToucheUp(Touche);

end;

 

procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);

var

InstrumentINT: integer;

begin

lblInstrument.Caption := IntToStr(UpDown1.Position);

if Length(lblInstrument.Caption)=1 then lblInstrument.Caption := '0' + lblInstrument.Caption;

Instrument := lblInstrument.Caption;

end;

 

procedure TForm1.PianoToucheDown(Touche: string);

var

i : integer;

Note : cardinal;

begin

for i := 0 to Length(Notes) - 1 do

begin

if Notes[i].Note=Touche then

begin

lblInstrument.Caption := Instrument;

Note := StrToInt('$007F' + Notes[i].SonMidi + '90');

midiOutShortMsg(MidiOut, StrToInt('$0000' + Instrument + 'C0'));

midiOutShortMsg(MidiOut, Note);

lblNote.Caption := Touche;

lblNote.Visible := true;

if Copy(Touche, Length(Touche), 1)<>'d' then

begin

Notes_Primaires.Visible := true;

Notes_Alterees.Visible := false;

end

else

begin

Notes_Primaires.Visible := false;

Notes_Alterees.Visible := true;

end;

TImage(FindComponent('lbl' + Touche)).Visible := true;

if i<50 then

begin

if Touche='Do3' then

begin

TImage(FindComponent('imgDo3_1')).Visible := true;

TImage(FindComponent('imgDo3_2')).Visible := true;

end

else if Touche='Do3d' then

begin

TImage(FindComponent('imgDo3d_1')).Visible := true;

TImage(FindComponent('imgDo3d_2')).Visible := true;

end

else TImage(Form1.FindComponent('img' + Touche)).Visible := true;

end;

if TShape(FindComponent(Touche)).Brush.Color=clWhite then

TShape(FindComponent(Touche)).Brush.Color:=clRed

else if TShape(FindComponent(Touche)).Brush.Color=clBlack then

TShape(FindComponent(Touche)).Brush.Color:=clLime;

end;

end;

end;

 

procedure TForm1.PianoToucheUp(Touche: string);

var

i : integer;

Note:Cardinal;

begin

for i := 0 to Length(Notes) - 1 do

begin

 

if Notes[i].Note=Touche then

begin

Note := StrToInt('$007F' + Notes[i].SonMidi + '80');

midiOutShortMsg(MidiOut, Note);

if (Notes[i].Down=false) then

begin

if i<50 then

begin

if Touche='Do3' then

begin

TImage(FindComponent('imgDo3_1')).Visible := false;

TImage(FindComponent('imgDo3_2')).Visible := false;

end

else if Touche='Do3d' then

begin

TImage(FindComponent('imgDo3d_1')).Visible := false;

TImage(FindComponent('imgDo3d_2')).Visible := false;

end

else TImage(Form1.FindComponent('img' + Touche)).Visible := false;

end;

lblNote.Visible := false;

if Copy(Touche, Length(Touche), 1)<>'d' then

begin

Notes_Primaires.Visible := false;

Notes_Alterees.Visible := true;

end

else

begin

Notes_Primaires.Visible := true;

Notes_Alterees.Visible := false;

end;

TImage(FindComponent('lbl' + Touche)).Visible := false;

if TShape(FindComponent(Touche)).Brush.Color=clRed then

TShape(FindComponent(Touche)).Brush.Color:=clWhite

else if TShape(FindComponent(Touche)).Brush.Color=clLime then

TShape(FindComponent(Touche)).Brush.Color:=clBlack;

end;

 

end;

end;

end;

 

 

end.

unit Musiques;

 

interface

 

type

TMusiques = Record

Note1 : string;

Note2 : string;

Note3 : string;

Note4 : string;

Duree : single;

end;

const

Musique1_MD: Array[0..27] of TMusiques =(

(Duree:1;)

,(Note1:'Do3'; Duree:1;)

,(Note1:'Re3'; Duree:1;)

,(Note1:'Fa3'; Duree:1;)

 

,(Duree:1;)

,(Note1:'La3'; Duree:2;)

,(Note1:'Sol3d';Duree:1;)

 

,(Note1:'La3'; Duree:1;)

,(Note1:'Sol3'; Duree:1;)

,(Note1:'Fa3'; Duree:1;)

,(Note1:'Fa3'; Duree:1;)

 

,(Note1:'Sol3'; Duree:1;)

,(Note1:'Fa3'; Duree:1;)

,(Note1:'Sol3'; Duree:1;)

,(Note1:'Fa3'; Duree:1;)

 

,(Note1:'Sol3'; Duree:1;)

,(Note1:'Fa3'; Duree:1;)

,(Note1:'Re3'; Duree:1;)

,(Note1:'Do3'; Duree:1;)

 

,(Note1:'Fa3'; Duree:1;)

,(Note1:'Do3'; Duree:1;)

,(Note1:'Fa3'; Duree:1;)

,(Note1:'La3'; Duree:1;)

 

,(Note1:'Re4'; Duree:1;)

,(Note1:'Do4'; Duree:1;)

,(Note1:'La3d'; Duree:1;)

,(Note1:'La3'; Duree:1;)

 

,(Note1:'Sol3'; Duree:4;)

);

 

Musique1_MG: Array[0..30] of TMusiques =(

(Duree:4;)

 

,(Note1:'Fa1'; Duree:1;)

,(Duree:1;)

,(Note1:'Do1';Duree:1;)

,(Duree:1;)

 

,(Note1:'Fa1'; Duree:1;)

,(Duree:1;)

,(Note1:'La1';Duree:1;)

,(Duree:1;)

 

,(Note1:'La1d'; Duree:1;)

,(Duree:1;)

,(Note1:'Fa1';Duree:1;)

,(Duree:1;)

 

,(Note1:'La1d'; Duree:1;)

,(Duree:1;)

,(Note1:'Sol1';Duree:1;)

,(Duree:1;)

 

,(Note1:'Fa1'; Duree:1;)

,(Duree:1;)

,(Note1:'Re1d';Duree:1;)

,(Duree:1;)

 

,(Note1:'Re1'; Duree:1;)

,(Duree:1;)

,(Note1:'Fa1d';Duree:1;)

,(Duree:1;)

 

,(Note1:'Sol1'; Duree:1;)

,(Note1:'La1'; Duree:1;)

,(Note1:'La1d';Duree:1;)

,(Note1:'La1d'; Duree:1;)

 

,(Note1:'Do2'; Duree:1;)

,(Duree:3;)

);

 

{

// Accompagnement "Accords" (Main Gauche)

Musique1_MG: Array[0..8] of TMusiques =(

(Duree:4;)

 

,(Note1:'Fa2'; Note2:'La2'; Note3:'Do3'; Note4:'Mi3'; Duree:4;)

 

,(Note1:'Fa2'; Note2:'La2'; Note3:'Do3'; Note4:'Re3d'; Duree:4;)

 

,(Note1:'Fa2'; Note2:'La2'; Note3:'Do3d'; Note4:'Re3'; Duree:4;)

 

,(Note1:'Fa2'; Note2:'Sol2'; Note3:'La3d'; Note4:'Re3'; Duree:4;)

 

,(Note1:'Fa2'; Note2:'La2'; Note3:'Do3'; Note4:'Re3'; Duree:2;)

,(Note1:'Sol2'; Note2:'La2'; Note3:'Do3'; Note4:'Re3d'; Duree:2;)

 

,(Note1:'Fa2d'; Note2:'La2'; Note3:'Do3'; Note4:'Re3'; Duree:4;)

 

,(Note1:'Fa2'; Note2:'Sol2'; Note3:'Si2'; Note4:'Re3'; Duree:4;)

 

); }

 

 

implementation

 

end.

unit Notes_Midi;

 

interface

 

type

TNotes = Record

Note : string;

SonMidi : string;

Down : boolean;

end;

 

var

Notes: Array[0..60] of TNotes =(

 

(Note:'Do1'; SonMidi:'24'; Down: false;),

(Note:'Do1d'; SonMidi:'25'; Down: false;),

(Note:'Re1'; SonMidi:'26'; Down: false;),

(Note:'Re1d'; SonMidi:'27'; Down: false;),

(Note:'Mi1'; SonMidi:'28'; Down: false;),

(Note:'Fa1'; SonMidi:'29'; Down: false;),

(Note:'Fa1d'; SonMidi:'2A'; Down: false;),

(Note:'Sol1'; SonMidi:'2B'; Down: false;),

(Note:'Sol1d'; SonMidi:'2C'; Down: false;),

(Note:'La1'; SonMidi:'2D'; Down: false;),

(Note:'La1d'; SonMidi:'2E'; Down: false;),

(Note:'Si1'; SonMidi:'2F'; Down: false;),

 

(Note:'Do2'; SonMidi:'30'; Down: false;),

(Note:'Do2d'; SonMidi:'31'; Down: false;),

(Note:'Re2'; SonMidi:'32'; Down: false;),

(Note:'Re2d'; SonMidi:'33'; Down: false;),

(Note:'Mi2'; SonMidi:'34'; Down: false;),

(Note:'Fa2'; SonMidi:'35'; Down: false;),

(Note:'Fa2d'; SonMidi:'36'; Down: false;),

(Note:'Sol2'; SonMidi:'37'; Down: false;),

(Note:'Sol2d'; SonMidi:'38'; Down: false;),

(Note:'La2'; SonMidi:'39'; Down: false;),

(Note:'La2d'; SonMidi:'3A'; Down: false;),

(Note:'Si2'; SonMidi:'3B'; Down: false;),

 

(Note:'Do3'; SonMidi:'3C'; Down: false;),

(Note:'Do3d'; SonMidi:'3D'; Down: false;),

(Note:'Re3'; SonMidi:'3E'; Down: false;),

(Note:'Re3d'; SonMidi:'3F'; Down: false;),

(Note:'Mi3'; SonMidi:'40'; Down: false;),

(Note:'Fa3'; SonMidi:'41'; Down: false;),

(Note:'Fa3d'; SonMidi:'42'; Down: false;),

(Note:'Sol3'; SonMidi:'43'; Down: false;),

(Note:'Sol3d'; SonMidi:'44'; Down: false;),

(Note:'La3'; SonMidi:'45'; Down: false;),

(Note:'La3d'; SonMidi:'46'; Down: false;),

(Note:'Si3'; SonMidi:'47'; Down: false;),

 

(Note:'Do4'; SonMidi:'48'; Down: false;),

(Note:'Do4d'; SonMidi:'49'; Down: false;),

(Note:'Re4'; SonMidi:'4A'; Down: false;),

(Note:'Re4d'; SonMidi:'4B'; Down: false;),

(Note:'Mi4'; SonMidi:'4C'; Down: false;),

(Note:'Fa4'; SonMidi:'4D'; Down: false;),

(Note:'Fa4d'; SonMidi:'4E'; Down: false;),

(Note:'Sol4'; SonMidi:'4F'; Down: false;),

(Note:'Sol4d'; SonMidi:'50'; Down: false;),

(Note:'La4'; SonMidi:'51'; Down: false;),

(Note:'La4d'; SonMidi:'52'; Down: false;),

(Note:'Si4'; SonMidi:'53'; Down: false;),

 

(Note:'Do5'; SonMidi:'54'; Down: false;),

(Note:'Do5d'; SonMidi:'55'; Down: false;),

(Note:'Re5'; SonMidi:'56'; Down: false;),

(Note:'Re5d'; SonMidi:'57'; Down: false;),

(Note:'Mi5'; SonMidi:'58'; Down: false;),

(Note:'Fa5'; SonMidi:'59'; Down: false;),

(Note:'Fa5d'; SonMidi:'5A'; Down: false;),

(Note:'Sol5'; SonMidi:'5B'; Down: false;),

(Note:'Sol5d'; SonMidi:'5C'; Down: false;),

(Note:'La5'; SonMidi:'5D'; Down: false;),

(Note:'La5d'; SonMidi:'5E'; Down: false;),

(Note:'Si5'; SonMidi:'5F'; Down: false;),

 

(Note:'Do6'; SonMidi:'60'; Down: false;)

);

 

implementation

 

end.

unit Unit3;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls;

 

type

TAbout = class(TForm)

Image1: TImage;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Button1: TButton;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

About: TAbout;

 

implementation

 

{$R *.dfm}

 

procedure TAbout.Button1Click(Sender: TObject);

begin

close

end;

 

procedure TAbout.FormCreate(Sender: TObject);

begin

 

end;

 

end.

unit Unit_Main_Droite;

 

interface

 

uses

Main, Classes, Forms, SysUtils, ExtCtrls, Graphics,

mmSystem, Notes_MIDI, Musiques;

 

type

TMain_Droite = Class(TThread)

private

idNote: integer;

procedure OnTerminateProcedure(Sender : TObject);

protected

procedure ToucheDown;

procedure ToucheUp;

procedure Execute; override;

public

ThreadTerminated : Boolean;

constructor Create(Suspended : Boolean);

end;

 

 

implementation

 

constructor TMain_Droite.Create(Suspended: Boolean);

begin

FreeOnTerminate := True;

inherited Create(Suspended);

OnTerminate := OnTerminateProcedure;

ThreadTerminated := False;

end;

 

procedure TMain_Droite.ToucheDown;

begin

Form1.PianoToucheDown(Musique1_MD[idNote].Note1);

end;

 

procedure TMain_Droite.ToucheUp;

begin

Form1.PianoToucheUp(Musique1_MD[idNote].Note1);

end;

 

procedure TMain_Droite.Execute;

var

i: integer;

begin

 

for i := 0 to Length(Musique1_MD)-1 do

begin

if ThreadTerminated then exit;

idNote := i;

 

if Musique1_MD[i].Note1<>'' then

Synchronize(ToucheDown);

 

Sleep(Round(((60/BPM)*1000) * Musique1_MD[i].Duree));

 

if Musique1_MD[i].Note1<>'' then

Synchronize(ToucheUp);

end;

 

end;

 

procedure TMain_Droite.OnTerminateProcedure(Sender: TObject);

begin

ThreadTerminated:=True;

end;

 

end.

unit Unit_Main_Gauche;

 

interface

 

uses

Main, Classes, Forms, SysUtils, ExtCtrls, Graphics,

mmSystem, Notes_MIDI, Musiques;

 

type

TMain_Gauche = class(TThread)

private

idNote: integer;

procedure OnTerminateProcedure(Sender : TObject);

protected

procedure ToucheDown;

procedure ToucheUp;

procedure Execute; override;

public

ThreadTerminated : Boolean;

constructor Create(Suspended : Boolean);

end;

 

 

implementation

 

constructor TMain_Gauche.Create(Suspended: Boolean);

begin

FreeOnTerminate := True;

inherited Create(Suspended);

OnTerminate := OnTerminateProcedure;

ThreadTerminated := False;

end;

 

procedure TMain_Gauche.ToucheDown;

begin

Form1.PianoToucheDown(Musique1_MG[idNote].Note1);

end;

 

procedure TMain_Gauche.ToucheUp;

begin

Form1.PianoToucheUp(Musique1_MG[idNote].Note1);

end;

 

procedure TMain_Gauche.Execute;

var

i: integer;

begin

 

for i := 0 to Length(Musique1_MG)-1 do

begin

if ThreadTerminated then exit;

idNote := i;

 

if Musique1_MG[i].Note1<>'' then

Synchronize(ToucheDown);

 

Sleep(Round(((60/BPM)*1000) * Musique1_MG[i].Duree));

 

if Musique1_MG[i].Note1<>'' then

Synchronize(ToucheUp);

end;

 

end;

 

procedure TMain_Gauche.OnTerminateProcedure(Sender: TObject);

begin

ThreadTerminated:=True;

end;

 

end.