Calcul entete de fichier

/* Imaginer et creer par Abadie joris*/
/* en utilisant un concept de Andre pierre jocelyn*/
/*Cette oeuvre est protégée et n'est divulguée que pour utilisation sous linux dans les conditions Creative common ci-dessous*/
/* Cette oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique 2.0 France. */
/*Aucune garantie n'est donner sur les effets de cet executable*/
/**cette**application**a**pour**but**de*construire*le*fichier*dentete*utiliser*par*le*lecteur*de.fichier*/
/*audio*au*format*jo*en*additionnant*les*derer*sous*joa**/

/***attention code pour processeur 32 bits***sinon le long int ne donne*/
/* que deux octets a "durer et a longueur a la place de 4octet*sur le processeurs 16bits**/
/*dans le cas d'un processeur 16bits décommenté la ligne au dessus des durer et commenter la ligne actuelle**/

/***Le code ici utilise un entier long (long int)
pour avoir les 4 cotets de la durée
pour durer, longueur, nbdepoints, amplitude;
En cas d'architecture 64, il faut enlever te terme long pour avoir un int

OS           arch           size

Linux            IA-32        4 octets
Linux            Intel 64     8 octets
Linux            IA-64        8 octets

*/

/***********mono****calcul_entete****/

/*******gcc -o calcul_entete calcul_entete.c *********/

#include <stdlib.h>
#include <stdio.h>

#define cecci1 "abadie.joa"
#define cecciaa "entete.txt"

#include <string.h>

#define efface "entetebase.wav"


long int durer, longueur, nbdepoints, amplitude;

int main(int argc, unsigned char *argv[])
{

durer = 0;
longueur = 0;

/*j ouvre mon fichier de donner*/
FILE* fichierjoa1 = NULL;
FILE* fichierjo1 = NULL;
fichierjoa1 = fopen(cecci1, "r");
fichierjo1 = fopen(cecciaa, "wb");

if (fichierjoa1 != NULL)
{

if (fichierjo1 != NULL)
{


while ( fscanf(fichierjoa1,"%ld %ld", &amplitude, &nbdepoints) !=EOF )
{

durer = durer + nbdepoints;


}

fprintf(fichierjo1, "%ld", durer);

/*ici*je*commence*le*traitement*comme*jécris*chaque*base*de*temps*sur*deux*octets*je*multiplis*par*2*/

durer = durer*2;



longueur = durer + 56 - 8;

fclose(fichierjo1), fichierjo1 = NULL;;
fclose(fichierjoa1), fichierjoa1 = NULL;;
}

}







FILE* debutwav = NULL;
debutwav = fopen(efface, "wb+");
if (debutwav != NULL)
   {

/****declaration**type**audio*4octets**/


unsigned char riff[4] = {0x52,0x49,0x46,0x46};

fwrite(riff,1,sizeof(riff),debutwav);

/****longueur*du*fichier*audio*ici*21200**/


/*

unsigned char durera[4] = {0x32,0x65,0x0B,0x01};

fwrite(durera,1,sizeof(durera),debutwav);

*/

fwrite( &longueur , sizeof(longueur) , 1 , debutwav);


/****declaration**type**wave*4octets**/

unsigned char wave[4] = {0x57,0x41,0x56,0x45};

fwrite(wave,1,sizeof(wave),debutwav);


/****declaration**type**fmt suivit d'un espace qui s'écrit 0x20 soit 4octets**/

unsigned char fmt[4] = {0x66,0x6D,0x74,0x20};

fwrite(fmt,1,sizeof(fmt),debutwav);

/****declaration**de*la*maniere d'écrire*sous forme*d'un*entier long (long int) soit 4octets**/
/**comme c'est du 16 octets en exadécimal cela donne 0x10****/

unsigned char poids[4] = {0x10,0x00,0x00,0x00};

fwrite(poids,1,sizeof(poids),debutwav);


/****codage pour indiquer le PCM c'est : 1 soit 2octets**/

unsigned char pourpcm[2] = {0x01,0x00};

fwrite(pourpcm,1,sizeof(pourpcm),debutwav);

/****nombre de piste sur 2octets*ici c'est du mono, donc 1*/

unsigned char piste[2] = {0x01,0x00};

fwrite(piste,1,sizeof(piste),debutwav);



/**nombre d'échantillons par seconde**sur 4 octets**/

unsigned char tempsunitaire[4] = {0x44,0xAC,0x00,0x00};

fwrite(tempsunitaire,1,sizeof(tempsunitaire),debutwav);

/**nombre d'octets par secondes**sur 4 octets***le*double*du*précédent*dans*ce*cas*/

unsigned char octetpars[4] = {0x88,0x58,0x01,0x00};

fwrite(octetpars,1,sizeof(octetpars),debutwav);


/*taille en octet d'1 échantillon***sur*2octets**/

unsigned char tailleechant[2] = {0x02,0x00};

fwrite(tailleechant,1,sizeof(tailleechant),debutwav);

/*contient le nombre de bits par échantillon*2x8=16*soit*10*en*exa**sur*2octets**/

unsigned char bitparechan[2] = {0x10,0x00};

fwrite(bitparechan,1,sizeof(bitparechan),debutwav);


/**On ecrit ici data pour dire que le fichier commence**sur 4cotets**/

unsigned char mono[4] =
{0x64,0x61,0x74,0x61};


fwrite(mono,1,sizeof(mono),debutwav);

/****longueur*du*fichier*audio**/

/*
unsigned char durerb[4] = {0x0E,0x65,0x0B,0x01};

fwrite(durerb,1,sizeof(durerb),debutwav);
*/

fwrite( &durer , sizeof(durer) , 1 , debutwav);




fclose(debutwav), debutwav = NULL;;

   }
return 0;
}