begin process at 2008 08 29 21:58:15
1 233 909 membres
430 nouveaux aujourd'hui
14 294 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : fichier .wav [ Mutimédia / Audio ] (AmineTheGreat)

fichier .wav le 13/06/2007 12:20:05

AmineTheGreat
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;

Re : fichier .wav le 13/06/2007 12:34:07

CptPingu
Un reset dans une boucle ca me parait bizarre... De plus tu ne close jamais ton fichier avant de le réouvrir.

Re : fichier .wav le 13/06/2007 13:00:11

Francky23012301
Membre Club
Salut

CptPingu a raison mais surtout il y a une autre erreur Reset(F,1000*sizeof(o));

----Citation : ----
The Reset procedure opens a file given by FileHandle for read, write or read and write access.
 
You must use AssignFile to assign a file to the FileHandle before using Reset.
 
Use Write or WriteLn to write to the file after this Reset is executed.
 
Version 1
 
Is used for text files. They can only be read after opening with Reset.
 
Version 2
 
Is for binary files. Before using Reset, you must set FileMode to one of the following:
 
fmOpenRead  : Read only
fmOpenWrite  : Write only
fmOpenReadWrite  : Read and write
--------------------------------

Voila ta procédure modifiée (et ca fonctionne) :

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

@+

Re : fichier .wav le 13/06/2007 13:58:33

AmineTheGreat

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"


Re : fichier .wav le 13/06/2007 14:14:25

Francky23012301
Membre Club
Re,

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

Re : fichier .wav le 13/06/2007 16:38:21

AmineTheGreat

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:

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;

    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  f:file;
  nom_rep:string;
  const MyFile:string='C:\aaa\conv.wav';
  CONST HEADER:ARRAY[0..43]OF BYTE=(
$52,$49,$46,$46, $00,$00,$00,$00, $57,$41,$56,$45, $66,$6D,$74,$20,
$10,$00,$00,$00, $01,$00,$01,$00, $44,$AC,$00,$00, $88,$58,$01,$00,
$02,$00,$10,$00, $64,$61,$74,$61, $00,$00,$00,$00);
implementation

{$R *.dfm}


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"


Re : fichier .wav le 13/06/2007 17:14:29

f0xi
Membre Club
(Admin CS)




begin
  if FileExists(MyFile) then
     { code pour fichier existant }

  with TFileStream.Create(MyFile, fmCreate) do
  try
    { code }
  finally
    Free;
  end;
end;

Re : fichier .wav le 13/06/2007 19:04:19

AmineTheGreat
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"


Re : fichier .wav le 13/06/2007 20:47:39

Francky23012301
Membre Club
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

Re : fichier .wav le 14/06/2007 11:20:13

AmineTheGreat
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"



[Page 1 Page 2]
Classé sous : fichier, end, rep, wav, conv1

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS