Comment accéder aux données de sous-blocs de fichier .wav? J'ai essayé de copier des données binaires (44 premiers octets) vers une variable struct (taille de 44 octets). Mais il y a un problème: je suis convaincu que j'avais copié les données binaires du fichier input
vers une structure nommée hdr
. Mais quand j'essaye d'afficher hdr.ChunkID qui contient "RIFF" (tableau de char) il n'imprime pas "RIFF". Il n'imprime rien.Comment accéder aux données des sous-blocs du fichier .wav?
#include <stdio.h>
#include <stdlib.h>
typedef struct FMT
{
char Subchunk1ID[4];
int Subchunk1Size;
short int AudioFormat;
short int NumChannels;
int SampleRate;
int ByteRate;
short int BlockAlign;
short int BitsPerSample;
} fmt;
typedef struct DATA
{
char Subchunk2ID[4];
int Subchunk2Size;
int Data[441000]; // 10 secs of garbage. he-he)
} data;
typedef struct header
{
char ChunkId[4];
int ChunkSize;
char Format[4];
fmt S1;
data S2;
} Header;
int main()
{
FILE *input = fopen("in.wav", "rb");
FILE *output = fopen("out.wav", "wb");
unsigned char buf[64];
Header hdr;
if(input == NULL)
{
printf("Unable to open wave file\n");
exit(EXIT_FAILURE);
}
fread(&buf, sizeof(char), 64, input);
fwrite(&buf, sizeof(char), 64, output);
fread(&hdr, sizeof(char), 64, output);
printf("\n>>> %s", hdr.ChunkId); /* Here it is. */
fclose(input);
fclose(output);
return 0;
}
Je ne comprends pas ce qui ne va pas.
Si vous avez besoin de lire 44 octets, pourquoi vous lisez 64? Que ferez-vous avec les 20 octets supplémentaires que vous lisez? –
J'ai un programme qui me montre les 64 premiers octets et les interprète ... par ex. les 4 premiers octets ---> "RIFF" et ainsi de suite. – yulian
Pour le reste des données, vous pouvez vérifier (avec par exemple 'sizeof (Header)') que les structures que vous avez ne sont pas complétées. Si la valeur de 'sizeof' diffère de ce qu'elle devrait être, vous devez dire au compilateur que les structures ne doivent pas être complétées. –