Created
January 4, 2019 13:12
-
-
Save tilkinsc/980a98917b166e52605b6afa2c97925c to your computer and use it in GitHub Desktop.
Using wav files with OpenAL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ALuint* sound_load_wav(const char* path) { | |
ALuint* sound = 0; | |
WaveData* w_data = 0; | |
ALenum error = 0; | |
w_data = wave_load(path); | |
if(w_data == 0) { | |
fprintf(stderr, "Failed to load wave file.\n"); | |
goto exit; | |
} | |
sound = malloc(1 * sizeof(ALuint)); | |
if(sound == 0) { | |
fprintf(stderr, "Out of memory.\n"); | |
goto exit; | |
} | |
alGenBuffers(1, sound); | |
if((error = alGetError()) != AL_NO_ERROR) { | |
fprintf(stderr, "Failed to generate sound buffer %d\n", error); | |
goto exit; | |
} | |
ALenum format = 0; | |
switch(w_data->channels) { | |
case 1: | |
format = w_data->bps == 8 ? AL_FORMAT_MONO8 : AL_FORMAT_MONO16; | |
break; | |
case 2: | |
format = w_data->bps == 8 ? AL_FORMAT_STEREO8 : AL_FORMAT_STEREO16; | |
break; | |
default: | |
puts("Unrecognizable bps format"); | |
goto exit; | |
} | |
alBufferData(*sound, format, w_data->sound_data, w_data->sound_size, w_data->sample_rate); | |
if ((error = alGetError()) != AL_NO_ERROR) { | |
printf("Failed to send audio information buffer to OpenAL! 0x%06x\n", error); | |
goto exit; | |
} | |
wave_free(w_data); | |
return sound; | |
exit: | |
free(sound); | |
wave_free(w_data); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment