AmineTheGreat
Messages postés47Date d'inscriptionmercredi 13 juin 2007StatutMembreDernière intervention28 décembre 2010
-
13 juin 2007 à 12:20
Utilisateur anonyme -
14 juin 2007 à 15:27
bonjour,
j'ai un problème c'est que je veux écrire des données sur un fichier .wav mais il me donne à chaque fois une erreur d'entrée sortie:
i/o error 32 ou i/o error 1784. le fichier où je veux écrire si il existe les données ne sont pas écrite et il me donne des fois une erreur des deux. voici le code que j'ai utiliser(c'est un code pour faire l'expérience seulement):
procedure TForm1.Button2Click(Sender: TObject);
var f:file;nom_rep:string;o:integer;i:integer;
begin
nom_rep:='C:\Documents and Settings\conversation téléphonique';
if(fileexists(nom_rep+'\conv1'+'.wav')=false) then
begin
FileCreate(nom_rep+'\conv1'+'.wav');
end;
AssignFile(F,nom_rep+'\conv1'+'.wav');
for i:=1 to 1000 do
begin
o:=i;
Reset(F,1000*sizeof(o));
blockwrite(F,o,sizeof(o));
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var f:file;MyFile:string;i:integer;
begin
MyFile:='C:\conv1.Wav';//On fait un test =>On utilise MyFile : plus simple pour la suite
Button1.Enabled:=False;// Permet de savoir quand la procedure est finit : évite les beugs
if not fileexists(MyFile) then FileCreate(MyFile);
for i:=1 to 1000 do
begin
AssignFile(F,MyFile);
//O:=I : Ca ne sert à rien du tout
Rewrite(F,1);// Et c'est quoi ce truc pas beau à la place du 1 (1=Write only)
blockwrite(F,i,sizeof(i));
CloseFile(F);//On ferme aussi le fichier
end;
Button1.Enabled:=True;
end;
Pour finir : les Blocks c'est finit, on utilise les streams maintenant
AmineTheGreat
Messages postés47Date d'inscriptionmercredi 13 juin 2007StatutMembreDernière intervention28 décembre 2010 13 juin 2007 à 13:58
je viens d'utiliser les streams mais j'ai le boutton qui se bloque, voici le code:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer; stream:Tstream;MyFile:String;
begin
MyFile:='C:\Documents and Settings\conversation téléphonique\conv.wav';//On fait un test =>On utilise MyFile : plus simple pour la suite
Button1.Enabled:=False;// Permet de savoir quand la procedure est finit : évite les beugs
if not fileexists(MyFile) then Stream := TFileStream.Create(MyFile, fmcreate);
for i:=1 to 1000 do
begin
Stream.Write(i, SizeOf(i));
end;
Button1.Enabled:=True;
Stream.Free;
end;
"Si tu veux du miel, résiste au piqure des abeilles"
Chez moi il ya rien qui se bloque . Par contre il y avait un message d'alerte parlant d'initialisation du Stream : tu l'as pas vu celui la ?
Cette procédure fonctionne sans beug de boutons.
procedure TForm1.Button1Click(Sender: TObject);
var i:integer; stream:Tstream;MyFile:String;
begin
MyFile:='C:\conv.wav';
If FileExists(MyFile) then exit;
Button1.Enabled:=False;
Stream := TFileStream.Create(MyFile, fmcreate);
for i:=1 to 1000 do
Stream.Write(i, SizeOf(i));
Stream.Free;
Button1.Enabled:=True;
end;
Tu peux retirer les instructions en rouge.
@+ et n'oublie pas de valider le message
Vous n’avez pas trouvé la réponse que vous recherchez ?
AmineTheGreat
Messages postés47Date d'inscriptionmercredi 13 juin 2007StatutMembreDernière intervention28 décembre 2010 13 juin 2007 à 16:38
je ne comprends pas, il arrive une chose bizzard: Quand j'excécute le programme et je clique sur le boutton, le fichier est créé et les données sont envoyées vers le fichier. mais quand je clique sur le boutton une deuxieme fois il disparrait...
voici le code de tout le programme:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer; stream:Tstream;
begin
If not FileExists(MyFile) then Stream := TFileStream.Create(MyFile, fmcreate);
for i:=1 to 100 do
Stream.Write(i,SizeOf(i));
Stream.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
halt;
end;
end.
"Si tu veux du miel, résiste au piqure des abeilles"
AmineTheGreat
Messages postés47Date d'inscriptionmercredi 13 juin 2007StatutMembreDernière intervention28 décembre 2010 13 juin 2007 à 19:04
je veux faire un programme qui va copier les échantillons que je récuppere de mon port parallèle sur un fichier .wav. mais le truc c'est que j'arrive même pas à écrire dans un fichier .wav, ça me donne des erreurs. j'utilise mnt les streams et toujours des problemes: ça ne s'enregistre que lorsque le fichier est créé pour la premiere fois. est ce que quelqu'un connait comment faire pour écrire des données à la fin d'un fichier .wav et quesque je dois écris à l'entete du dichier si je veux un son 8 bits, mono.
merci.
"Si tu veux du miel, résiste au piqure des abeilles"
Je me demande si tu formules bien ta question : Déjà ta procédure avec les blocks ne rajoutait pas les donnés mais les substituait. Ensuite, la derniere procédure fonctionne parfaitement que l'on clicke une fois ou plusieurs fois : le fichier est toujours recréé.
Si maintenant tu veux rajouter des données à un fichier existant, il est normal qu'avec TStreamFile.Create('myfile.abc',fmCreate) détruise le fichier précédent.
Pour rajouter des données à un fichier existant il faut l'ouvrir en écriture
(MySteam := TStreamFile.Create('myfile.abc',fmOpenWrite) puis se placer à la fin du flux (MySteam.Position:=MyStream.Size).
Maintenant si ce n'est pas ca, j'abandonne : j'y comprends rien à ton probleme moi
AmineTheGreat
Messages postés47Date d'inscriptionmercredi 13 juin 2007StatutMembreDernière intervention28 décembre 2010 14 juin 2007 à 11:20
bjr,
pour ajouter des données à la fin de mon fichier .wav j'ai utilisé l'instruction (MySteam := TStreamFile.Create('myfile.abc',fmOpenWrite)) ( merci Franky ).
j'ai écrit une procedure Delay pour provoquer le retard en lecture de deux bits qui arrive sur une pin du port parallèle. le problème c que je ne sais pas combien dure cette procedure....
le code de cette procedure est simple:
procedure Delay(i:integer);
begin
for j:=1 to i do
begin
end;
end;
par exemple pour Delay(1000) combien cela va durer
merci pour tous.
"Si tu veux du miel, résiste au piqure des abeilles"