27 FILE *wavfile; |
27 FILE *wavfile; |
28 int t, n = 0; |
28 int t, n = 0; |
29 |
29 |
30 wavfile = Fopen(filename, "rb"); |
30 wavfile = Fopen(filename, "rb"); |
31 |
31 |
32 fread(&WAVHeader.ChunkID, sizeof(int), 1, wavfile); |
32 fread(&WAVHeader.ChunkID, sizeof(uint32_t), 1, wavfile); |
33 fread(&WAVHeader.ChunkSize, sizeof(int), 1, wavfile); |
33 fread(&WAVHeader.ChunkSize, sizeof(uint32_t), 1, wavfile); |
34 fread(&WAVHeader.Format, sizeof(int), 1, wavfile); |
34 fread(&WAVHeader.Format, sizeof(uint32_t), 1, wavfile); |
35 |
35 |
36 #ifdef DEBUG |
36 #ifdef DEBUG |
37 fprintf(stderr, "ChunkID: %X\n", invert_endianness(WAVHeader.ChunkID)); |
37 fprintf(stderr, "ChunkID: %X\n", invert_endianness(WAVHeader.ChunkID)); |
38 fprintf(stderr, "ChunkSize: %d\n", WAVHeader.ChunkSize); |
38 fprintf(stderr, "ChunkSize: %d\n", WAVHeader.ChunkSize); |
39 fprintf(stderr, "Format: %X\n", invert_endianness(WAVHeader.Format)); |
39 fprintf(stderr, "Format: %X\n", invert_endianness(WAVHeader.Format)); |
40 #endif |
40 #endif |
41 |
41 |
42 fread(&WAVHeader.Subchunk1ID, sizeof(int), 1, wavfile); |
42 fread(&WAVHeader.Subchunk1ID, sizeof(uint32_t), 1, wavfile); |
43 fread(&WAVHeader.Subchunk1Size, sizeof(int), 1, wavfile); |
43 fread(&WAVHeader.Subchunk1Size, sizeof(uint32_t), 1, wavfile); |
44 fread(&WAVHeader.AudioFormat, sizeof(short int), 1, wavfile); |
44 fread(&WAVHeader.AudioFormat, sizeof(uint16_t), 1, wavfile); |
45 fread(&WAVHeader.NumChannels, sizeof(short int), 1, wavfile); |
45 fread(&WAVHeader.NumChannels, sizeof(uint16_t), 1, wavfile); |
46 fread(&WAVHeader.SampleRate, sizeof(int), 1, wavfile); |
46 fread(&WAVHeader.SampleRate, sizeof(uint32_t), 1, wavfile); |
47 fread(&WAVHeader.ByteRate, sizeof(int), 1, wavfile); |
47 fread(&WAVHeader.ByteRate, sizeof(uint32_t), 1, wavfile); |
48 fread(&WAVHeader.BlockAlign, sizeof(short int), 1, wavfile); |
48 fread(&WAVHeader.BlockAlign, sizeof(uint16_t), 1, wavfile); |
49 fread(&WAVHeader.BitsPerSample, sizeof(short int), 1, wavfile); |
49 fread(&WAVHeader.BitsPerSample, sizeof(uint16_t), 1, wavfile); |
50 |
50 |
51 #ifdef DEBUG |
51 #ifdef DEBUG |
52 fprintf(stderr, "Subchunk1ID: %X\n", invert_endianness(WAVHeader.Subchunk1ID)); |
52 fprintf(stderr, "Subchunk1ID: %X\n", invert_endianness(WAVHeader.Subchunk1ID)); |
53 fprintf(stderr, "Subchunk1Size: %d\n", WAVHeader.Subchunk1Size); |
53 fprintf(stderr, "Subchunk1Size: %d\n", WAVHeader.Subchunk1Size); |
54 fprintf(stderr, "AudioFormat: %d\n", WAVHeader.AudioFormat); |
54 fprintf(stderr, "AudioFormat: %d\n", WAVHeader.AudioFormat); |
58 fprintf(stderr, "BlockAlign: %d\n", WAVHeader.BlockAlign); |
58 fprintf(stderr, "BlockAlign: %d\n", WAVHeader.BlockAlign); |
59 fprintf(stderr, "BitsPerSample: %d\n", WAVHeader.BitsPerSample); |
59 fprintf(stderr, "BitsPerSample: %d\n", WAVHeader.BitsPerSample); |
60 #endif |
60 #endif |
61 |
61 |
62 do { /*remove useless header chunks (plenty room for improvements)*/ |
62 do { /*remove useless header chunks (plenty room for improvements)*/ |
63 t = fread(&WAVHeader.Subchunk2ID, sizeof(int), 1, wavfile); |
63 t = fread(&WAVHeader.Subchunk2ID, sizeof(uint32_t), 1, wavfile); |
64 if (invert_endianness(WAVHeader.Subchunk2ID) == 0x64617461) |
64 if (invert_endianness(WAVHeader.Subchunk2ID) == 0x64617461) |
65 break; |
65 break; |
66 if (t <= 0) { /*eof*/ |
66 if (t <= 0) { /*eof*/ |
67 fprintf(stderr, "ERROR: wrong WAV header\n"); |
67 fprintf(stderr, "ERROR: wrong WAV header\n"); |
68 return AL_FALSE; |
68 return AL_FALSE; |
69 } |
69 } |
70 } while (1); |
70 } while (1); |
71 fread(&WAVHeader.Subchunk2Size, sizeof(int), 1, wavfile); |
71 fread(&WAVHeader.Subchunk2Size, sizeof(uint32_t), 1, wavfile); |
72 |
72 |
73 #ifdef DEBUG |
73 #ifdef DEBUG |
74 fprintf(stderr, "Subchunk2ID: %X\n", invert_endianness(WAVHeader.Subchunk2ID)); |
74 fprintf(stderr, "Subchunk2ID: %X\n", invert_endianness(WAVHeader.Subchunk2ID)); |
75 fprintf(stderr, "Subchunk2Size: %d\n", WAVHeader.Subchunk2Size); |
75 fprintf(stderr, "Subchunk2Size: %d\n", WAVHeader.Subchunk2Size); |
76 #endif |
76 #endif |
77 |
77 |
78 *data = (char*) malloc (sizeof(char) * WAVHeader.Subchunk2Size); |
78 *data = (char*) malloc (sizeof(char) * WAVHeader.Subchunk2Size); |
79 |
79 |
80 /*this could be improved*/ |
80 /*this could be improved*/ |
81 do { |
81 do { |
82 n += fread(&((*data)[n]), sizeof(char), 1, wavfile); |
82 n += fread(&((*data)[n]), sizeof(uint8_t), 1, wavfile); |
83 } while (n < WAVHeader.Subchunk2Size); |
83 } while (n < WAVHeader.Subchunk2Size); |
84 |
84 |
85 fclose(wavfile); |
85 fclose(wavfile); |
86 |
86 |
87 #ifdef DEBUG |
87 #ifdef DEBUG |