1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| procedure chargerWAV(dans:integer;nom:string);
var
entete:TenteteWAV;
tmp:PByte;
taille,lus,i,j,max:word;
y:smallint;
donnee:array of PReal;
echln:PSmallInt;
nb:word;
cRIFF,cWAVE,cfmt,cDATA:longword;
coll:^TColl;
t_coll:word;
p:pointer;
vects:TLPointer;
begin
{ constantes en small endian pour comparaison des id de l'entète }
cRIFF:=1179011410; { 'RIFF4 }
cWAVE:=1163280727; { 'WAVE' }
cfmt:=544501094; { ' fmt' }
cDATA:=1635017060; { 'DATA' }
{!!! vérification que l'assignation se fait bien ! }
system.Assign(f,nom);
reset(f,1);
Blockread(f,entete,sizeof(entete),lus);
nb:=entete.Datasize div entete.BytePerBloc;
taille:=entete.BytePerBloc*nb;
getmem(tmp,taille);
Blockread(f,tmp^,taille,lus);
{!!! si mono }
variables[dans].format:=cdnCollection;
variables[dans].nb:=1;
setlength(variables[dans].donnees,1);
t_coll:=sizeof(TColl);
getmem(coll,t_coll);
variables[dans].donnees[0]:=coll;
{ test des adresses dans la structure }
p:=@(coll^.nlig); { +4 }
p:=@(coll^.ncol); { +4 }
p:=@(coll^.nature); { +2 }
p:=@(coll^.taille); { +2 }
p:=@(coll^.vects);
{ ici pas d'erreur }
coll^.nlig:=entete.NbrCanaux;
coll^.ncol:=nb;
coll^.nature:=cnReel;
coll^.taille:=ctReel;
{ ces trois lignes provoquent la même erreur de segmentation si vects est en queue de TColl }
coll^.vects:=nil;
setlength(coll^.vects,0);
setlength(coll^.vects,entete.NbrCanaux);
{...}
end |
Partager