Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1608 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Copie de stream Audio dans un AVI

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Copie de stream Audio dans un AVI

n°1234293
Shadiest
Posté le 29-10-2005 à 22:48:45  profilanswer
 

Salut,
 
J'arrive à ouvrir un fichier AVI decompresser les frames pour obtenir des BMP (ou simplement un tableau de données) et recompresser ensuite ces frames pour avoir un nouveau fichier AVI par l'intermédiaire des méthodes AVIStreamGetFrame et AVIStreamWrite (dans le but d'appliquer des transformations aux images par la suite).
 
Mon problème est dans le stream audio, en effet, je ne souhaite pas modifier ce flux, je souhaiterai donc simplement le copier, j'aimerais donc creer une fonction du type "Add_Audio(PAVISTREAM stream_audio,PAVIFILE avi_file)" qui ajouterai le stream audio au fichier mais je ne vois pas du tout comment m'y prendre...
 
J'ai bien essayé d'appliquer la même méthode qu'avec le flux Vidéo mais beaucoup d'inconnues persistent, de plus, je ne souhaite pas traiter la piste audio, il n'est donc pas necessaire de la decomposer.
 
Merci d'avance de me libérer mon ignorance !

mood
Publicité
Posté le 29-10-2005 à 22:48:45  profilanswer
 

n°1234476
Shadiest
Posté le 30-10-2005 à 14:54:48  profilanswer
 

J'ai un peu avancer, et compris que le Header d'un streamAudio etait du type WAVEFORMATEX, à l'excution de ce code, un fichier d'une taille relativement petite (devrai etre autour des 3mo et ne fait que 293 ko) mais d'une durée correcte, je n'ai pas trouvé d'information sur la taille des frames de son :
 

Code :
  1. void Add_Audio(char * Name,PAVISTREAM audio)
  2. {
  3. PAVIFILE avi_file;
  4. AVIFileInit();
  5. AVIFileOpen(&avi_file, Name, OF_WRITE | OF_CREATE, NULL);
  6. //AVISTREAMINFO
  7. AVISTREAMINFO avi_stream_info;
  8. int a=AVIStreamInfo(audio, &avi_stream_info, sizeof(AVISTREAMINFO));
  9. //WAVEFORMATEX
  10. WAVEFORMATEX wave;
  11. LONG lStreamSize = sizeof(wave);
  12. AVIStreamReadFormat(audio, 0, &wave, &lStreamSize);
  13. //Nouveau stream
  14. PAVISTREAM newstream;
  15. AVIFileCreateStream(avi_file, &newstream, &avi_stream_info);
  16. AVIStreamSetFormat(newstream, 0, &wave, sizeof(wave));
  17. int size=wave.cbSize; // Quel est la taille d'une frame son ?
  18. unsigned char * trame=new unsigned char[size];
  19. //Copie byte par byte
  20. for(int i=AVIStreamStart(audio);i<AVIStreamEnd(audio);i++)
  21. {
  22.  AVIStreamRead(audio,i,1,trame,size,NULL,NULL);
  23.  AVIStreamWrite(newstream,i,1,trame,size, AVIIF_KEYFRAME, NULL, NULL);
  24. }
  25. AVIStreamRelease(audio);
  26. AVIStreamRelease(newstream);
  27. AVIFileRelease(avi_file);
  28. }


 
"int size=wave.cbSize;" j'ai de serieux doute sur cette taille, car elle est égale à 12 quand je debug, ce qui me parai peu...

n°1234493
Shadiest
Posté le 30-10-2005 à 15:29:58  profilanswer
 

PS : ce n'est pas byte par byte que je copie mais frame par frame...
 
Apparament, la trame ne change jamais dans la boucle...


Message édité par Shadiest le 30-10-2005 à 15:52:56
n°1234520
Shadiest
Posté le 30-10-2005 à 16:54:05  profilanswer
 

J'ai trouvé l'erreur, mais je ne sais comment la résoudre :
 
AVIStreamRead(audio,i,1,trame,size,NULL,NULL); me retourne AVIERR_BUFFERTOOSMALL
 
quelle taille doit-je accorder au buffer ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Copie de stream Audio dans un AVI

 

Sujets relatifs
Copie contenu d'un repertoire en fichier batchFichier audio
copie d'une chaine de caractères[resolu] batch : Probleme copie fichier
lib pour lire les tag audio[résolu]copie d'une feuille sur une autre
Cycle de copie et synchronisation base de donnée.Vfw : Ajouter un flux audio en MP3
Stream https sous php-win32[VBA] copie d'un onglet supprime le mot de passe
Plus de sujets relatifs à : [C++] Copie de stream Audio dans un AVI


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR