Utilisateur anonyme
-
27 juin 2009 à 12:14
Utilisateur anonyme -
5 juil. 2009 à 21:47
Salut à tous ,
J'ai un petit soucis que je vous expose : Lors de la réalisation d'un fichier midi il est possible de définir le tempo en utilisant un méta évènement de la manière suivante :
Set Tempo This meta event sets the sequence tempo in terms
of microseconds per quarter-note which is encoded in three bytes. It
usually is found in the first track chunk, time-aligned to occur at the
same time as a MIDI clock message to promote more accurate
synchronization. If no set tempo event is present, 120 beats per minute
is assumed. The following formula's can be used to translate the tempo
from microseconds per quarter-note to beats per minute and back.
Procedure Write_Tempo(onst MPQN: Integer;AStream:TStream);
var
MPQNCp : Longint;
w:array of LongInt;
k: byte;
begin
If Not Assigned(AStream) Then Exit;
MPQNCp := MPQN;
SetLength(W,3);
for k := 0 to 2 do
begin
w[k]:= Byte(MPQNCp and $FF);
MPQNCp := MPQNCp shr 8;
end;
for k := 2 Downto 0 do
AStream.Write(w[k],1);
end;
procedure TMidiWriter.Add_SetTempo_Event(Const BPM: Integer);
var
Meta_Val,Event_Type,SwSize: byte;
begin
if (not Assigned(EventsStream)) then Exit;
With EventsStream Do
Begin
MPQN:=60000000 Div BPM;
Meta_Val:=255; Write(Meta_Val,1);
Event_Type:=81; Write(Event_Type,1);
SwSize:=3; Write(SwSize,1);
Write_Tempo(MPQN,EventsStream);
End;
end;
Seulement quant je lance la lecture de mon fichier midi, ca plante. Le probleme vient bien du "tempo" car en l'absence de ce dernier, le fichier midi est bon. Je ne vois pas d'ou vient mon erreur
Merci à toi : En fait il y avait 2 problèmes. Celui là et un autre : En fait tout message midi doit etre accompagné d'un temps (Delta Time) meme ce type de message : hors cela ne figurait nul part. En fait il y a bcp d'aneries de dit sur le sujet ce qui fait que j'avance à taton.