/* 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", &litude, &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; }