23 #endif |
23 #endif |
24 |
24 |
25 int load_WavPcm (const char *filename, ALenum *format, char ** data, ALsizei *bitsize, ALsizei *freq) { |
25 int load_WavPcm (const char *filename, ALenum *format, char ** data, ALsizei *bitsize, ALsizei *freq) { |
26 WAV_header_t WAVHeader; |
26 WAV_header_t WAVHeader; |
27 FILE *wavfile; |
27 FILE *wavfile; |
28 int t, n = 0; |
28 int32_t t; |
|
29 uint32_t n = 0; |
29 |
30 |
30 wavfile = Fopen(filename, "rb"); |
31 wavfile = Fopen(filename, "rb"); |
31 |
32 |
32 fread(&WAVHeader.ChunkID, sizeof(uint32_t), 1, wavfile); |
33 fread(&WAVHeader.ChunkID, sizeof(uint32_t), 1, wavfile); |
33 fread(&WAVHeader.ChunkSize, sizeof(uint32_t), 1, wavfile); |
34 fread(&WAVHeader.ChunkSize, sizeof(uint32_t), 1, wavfile); |
73 #ifdef DEBUG |
74 #ifdef DEBUG |
74 fprintf(stderr, "Subchunk2ID: %X\n", invert_endianness(WAVHeader.Subchunk2ID)); |
75 fprintf(stderr, "Subchunk2ID: %X\n", invert_endianness(WAVHeader.Subchunk2ID)); |
75 fprintf(stderr, "Subchunk2Size: %d\n", WAVHeader.Subchunk2Size); |
76 fprintf(stderr, "Subchunk2Size: %d\n", WAVHeader.Subchunk2Size); |
76 #endif |
77 #endif |
77 |
78 |
78 *data = (char*) malloc (sizeof(char) * WAVHeader.Subchunk2Size); |
79 *data = (char*) Malloc (sizeof(char) * WAVHeader.Subchunk2Size); |
79 |
80 |
80 /*this could be improved*/ |
81 /*this could be improved*/ |
81 do { |
82 do { |
82 n += fread(&((*data)[n]), sizeof(uint8_t), 1, wavfile); |
83 n += fread(&((*data)[n]), sizeof(uint8_t), 1, wavfile); |
83 } while (n < WAVHeader.Subchunk2Size); |
84 } while (n < WAVHeader.Subchunk2Size); |
146 |
147 |
147 #ifdef DEBUG |
148 #ifdef DEBUG |
148 vorbisComment = ov_comment(&oggStream, -1); |
149 vorbisComment = ov_comment(&oggStream, -1); |
149 fprintf(stderr, "Version: %d\n", vorbisInfo->version); |
150 fprintf(stderr, "Version: %d\n", vorbisInfo->version); |
150 fprintf(stderr, "Channels: %d\n", vorbisInfo->channels); |
151 fprintf(stderr, "Channels: %d\n", vorbisInfo->channels); |
151 fprintf(stderr, "Rate (Hz): %d\n", vorbisInfo->rate); |
152 fprintf(stderr, "Rate (Hz): %ld\n", vorbisInfo->rate); |
152 fprintf(stderr, "Bitrate Upper: %d\n", vorbisInfo->bitrate_upper); |
153 fprintf(stderr, "Bitrate Upper: %ld\n", vorbisInfo->bitrate_upper); |
153 fprintf(stderr, "Bitrate Nominal: %d\n", vorbisInfo->bitrate_nominal); |
154 fprintf(stderr, "Bitrate Nominal: %ld\n", vorbisInfo->bitrate_nominal); |
154 fprintf(stderr, "Bitrate Lower: %d\n", vorbisInfo->bitrate_lower); |
155 fprintf(stderr, "Bitrate Lower: %ld\n", vorbisInfo->bitrate_lower); |
155 fprintf(stderr, "Bitrate Windows: %d\n", vorbisInfo->bitrate_window); |
156 fprintf(stderr, "Bitrate Windows: %ld\n", vorbisInfo->bitrate_window); |
156 fprintf(stderr, "Vendor: %s\n", vorbisComment->vendor); |
157 fprintf(stderr, "Vendor: %s\n", vorbisComment->vendor); |
157 fprintf(stderr, "PCM data size: %d\n", pcm_length); |
158 fprintf(stderr, "PCM data size: %ld\n", pcm_length); |
158 fprintf(stderr, "# comment: %d\n", vorbisComment->comments); |
159 fprintf(stderr, "# comment: %d\n", vorbisComment->comments); |
159 for (i = 0; i < vorbisComment->comments; i++) |
160 for (i = 0; i < vorbisComment->comments; i++) |
160 fprintf(stderr, "\tComment %d: %s\n", i, vorbisComment->user_comments[i]); |
161 fprintf(stderr, "\tComment %d: %s\n", i, vorbisComment->user_comments[i]); |
161 #endif |
162 #endif |
162 |
163 |
163 /*allocates enough room for the decoded data*/ |
164 /*allocates enough room for the decoded data*/ |
164 *data = (char*) malloc (sizeof(char) * pcm_length); |
165 *data = (char*) Malloc (sizeof(char) * pcm_length); |
165 |
166 |
166 /*there *should* not be ogg at 8 bits*/ |
167 /*there *should* not be ogg at 8 bits*/ |
167 if (vorbisInfo->channels == 1) |
168 if (vorbisInfo->channels == 1) |
168 *format = AL_FORMAT_MONO16; |
169 *format = AL_FORMAT_MONO16; |
169 else { |
170 else { |