openalbridge/loaders.c
changeset 2214 eacb5b19d587
parent 2213 bd51bbf06033
child 2215 1d78579e06c2
equal deleted inserted replaced
2213:bd51bbf06033 2214:eacb5b19d587
    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(uint32_t), 1, wavfile);
    32 		fread(&WAVHeader.ChunkID, sizeof(int), 1, wavfile);
    33 		fread(&WAVHeader.ChunkSize, sizeof(uint32_t), 1, wavfile);
    33 		fread(&WAVHeader.ChunkSize, sizeof(int), 1, wavfile);
    34 		fread(&WAVHeader.Format, sizeof(uint32_t), 1, wavfile);
    34 		fread(&WAVHeader.Format, sizeof(int), 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(uint32_t), 1, wavfile);
    42 		fread(&WAVHeader.Subchunk1ID, sizeof(int), 1, wavfile);
    43 		fread(&WAVHeader.Subchunk1Size, sizeof(uint32_t), 1, wavfile);
    43 		fread(&WAVHeader.Subchunk1Size, sizeof(int), 1, wavfile);
    44 		fread(&WAVHeader.AudioFormat, sizeof(uint16_t), 1, wavfile);
    44 		fread(&WAVHeader.AudioFormat, sizeof(short int), 1, wavfile);
    45 		fread(&WAVHeader.NumChannels, sizeof(uint16_t), 1, wavfile);
    45 		fread(&WAVHeader.NumChannels, sizeof(short int), 1, wavfile);
    46 		fread(&WAVHeader.SampleRate, sizeof(uint32_t), 1, wavfile);
    46 		fread(&WAVHeader.SampleRate, sizeof(int), 1, wavfile);
    47 		fread(&WAVHeader.ByteRate, sizeof(uint32_t), 1, wavfile);
    47 		fread(&WAVHeader.ByteRate, sizeof(int), 1, wavfile);
    48 		fread(&WAVHeader.BlockAlign, sizeof(uint16_t), 1, wavfile);
    48 		fread(&WAVHeader.BlockAlign, sizeof(short int), 1, wavfile);
    49 		fread(&WAVHeader.BitsPerSample, sizeof(uint16_t), 1, wavfile);
    49 		fread(&WAVHeader.BitsPerSample, sizeof(short int), 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(uint32_t), 1, wavfile);
    63 			t = fread(&WAVHeader.Subchunk2ID, sizeof(int), 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(uint32_t), 1, wavfile);
    71 		fread(&WAVHeader.Subchunk2Size, sizeof(int), 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(uint8_t), 1, wavfile);
    82 			n += fread(&((*data)[n]), sizeof(char), 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