Une variable qui prend un peu trop de place ...

Une variable qui prend un peu trop de place ... - C++ - Programmation

Marsh Posté le 04-06-2009 à 05:38:50    

Bonjour,
 
Je veux realiser un enregistreur WAV, donc prendre l'entree de mon microphone puis ecrire un fichier WAV avec les donnees que j'obtiens.
 
J'ai un probleme lors de la copie d'une variable. Voici directement le code, les explications suivent:

Code :
  1. short ShortBuffer=0;
  2. for(int j=0;j<LEN_BUFFER;j++)
  3. {
  4.    ShortBuffer = (short)(waveIn[currentBuffer][j]);
  5.    fwrite(&ShortBuffer,sizeof(short),1,pdata);
  6. }


 
waveIn est un tableau de shorts a 2 dimensions (short **), qui est rempli par les inputs de mon microphone.
Pour chaque j, on est d'accord, waveIn[currentBuffer][j] devrait etre un short, mais par precaution j'ai employe le cast (short).
 
La taille du buffer est de 1024 (LEN_BUFFER = 1024)
 
Toujours est-il que lorsque je regarde la taille de mon fichier pdata, celui-ci fait plus de 2048 octets ...
 
Alors que si j'effectue la boucle suivante:  
 

Code :
  1. short ShortBuffer=0;
  2. for(int j=0;j<LEN_BUFFER;j++)
  3. {
  4.    fwrite(&ShortBuffer,sizeof(short),1,pdata);
  5. }


 
donc sans utiliser le tableau waveIn qui semble poser probleme, mon fichier tout beau tout propre fait exactement 2048 octets.
 
Il semblerait que lorsque je copie waveIn[currentBuffer][j] dans ShortBuffer, la taille de ShortBuffer devient un peu plus grande que celle d'un short classique !
 
C'est tres derangeant pour ce que je veux faire car le fichier pdata sert par la suite pour l'ecriture d'un fichier WAV, et dans ce fichier, la taille des donnees annoncee dans le header ne correspond pas a la taille reelle de donnee !
 
 
Des idees ?
 
Merci !
 

Reply

Marsh Posté le 04-06-2009 à 05:38:50   

Reply

Marsh Posté le 04-06-2009 à 06:57:20    

ton fichier est bien ouvert en mode binaire ?

Reply

Marsh Posté le 04-06-2009 à 07:34:52    

Non il ne l'etait pas!
Ca fonctionne parfaitement maintenant, merci beaucoup!
D'ailleurs, quelle est la difference entre l'ouverture binaire/non binaire d'un fichier?

Reply

Marsh Posté le 04-06-2009 à 10:04:50    

binaire tu y colles les octets directement tel qu'en mémoire
en mode texte, il considére que tu jette du texte et fwrite sur du mode texte je sais mm pas si ça a un comportement défini.

Reply

Marsh Posté le 04-06-2009 à 10:56:07    

pierrot7777 a écrit :


D'ailleurs, quelle est la difference entre l'ouverture binaire/non binaire d'un fichier?


personne ne sait vraiment, j'ai l'impression lol

Reply

Marsh Posté le 04-06-2009 à 11:09:12    

En mode binaire, il n'y a aucune interprétation des caractères de contrôle et autres codes "bizarres".
En mode texte, le système d'exploitation les interprète (donc différence Windows, Linux, MAC...) et si je ne me trompe par exemple un printf("\n" ), sera traduit par CR_LF en Windows et LF simplement en Linux (enfin un truc comme ça).
Enfin, pour ce qui est du fwrite qui est une fonction d'écriture orientée binaire, rien n'est sans doute défini pour l'écriture sur des fichiers ouverts en mode "Texte". Une fois de plus en C, il faut connaître les outils qu'on utilise.

Reply

Marsh Posté le 04-06-2009 à 12:01:59    

Boucle inutile, tu peux tout faire un seul fwrite.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed