Skip to content

Instantly share code, notes, and snippets.

@tilkinsc
Created January 4, 2019 13:12
Show Gist options
  • Save tilkinsc/980a98917b166e52605b6afa2c97925c to your computer and use it in GitHub Desktop.
Save tilkinsc/980a98917b166e52605b6afa2c97925c to your computer and use it in GitHub Desktop.
Using wav files with OpenAL
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