diff options
author | tylermurphy534 <tylermurphy534@gmail.com> | 2022-09-22 11:14:00 -0400 |
---|---|---|
committer | tylermurphy534 <tylermurphy534@gmail.com> | 2022-09-22 11:14:00 -0400 |
commit | ac2868abc09e16485cd6806866067f7d7c082dff (patch) | |
tree | 164529d22bd66a976044f6f2aecfef96c39fb4cb /engine/xe_sound_device.cpp | |
parent | add openal lib (diff) | |
download | minecraftvulkan-ac2868abc09e16485cd6806866067f7d7c082dff.tar.gz minecraftvulkan-ac2868abc09e16485cd6806866067f7d7c082dff.tar.bz2 minecraftvulkan-ac2868abc09e16485cd6806866067f7d7c082dff.zip |
start implementing openal soft
Diffstat (limited to 'engine/xe_sound_device.cpp')
-rw-r--r-- | engine/xe_sound_device.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/engine/xe_sound_device.cpp b/engine/xe_sound_device.cpp new file mode 100644 index 0000000..0b85b6a --- /dev/null +++ b/engine/xe_sound_device.cpp @@ -0,0 +1,64 @@ +#include "xe_sound_device.hpp" + +#include <stdexcept> +#include <iostream> +#include <cstring> + +namespace xe { + +XeSoundDevice::XeSoundDevice() { + + ALboolean enumeration; + enumeration = alcIsExtensionPresent(NULL, "ALC_ENUMERATION_EXT"); + if (enumeration == AL_FALSE) { + fprintf(stderr, "enumeration extension not available\n"); + listAudioDevices(alcGetString(NULL, ALC_DEVICE_SPECIFIER)); + } + + listAudioDevices(alcGetString(NULL, ALC_DEVICE_SPECIFIER)); + + const ALCchar* name = alcGetString(NULL, ALC_DEFAULT_DEVICE_SPECIFIER); + + device = alcOpenDevice(name); + if (!device) { + std::runtime_error("failed to get sound device"); + } + + std::cout << "Audio Device: " << alcGetString(device, ALC_DEVICE_SPECIFIER) << "\n"; + + context = alcCreateContext(device, NULL); + if(!alcMakeContextCurrent(context)) { + std::runtime_error("failed to make sound context current"); + } + + alListener3f(AL_POSITION, 0.f, 0.f, 0.f); + alListener3f(AL_VELOCITY, 0.f, 0.f, 0.f); + ALfloat frontAndUpVectors[] = { + /* front*/1.f, 0.f, 0.f, + /* up */ 0.f, 1.f, 0.f + }; + alListenerfv(AL_ORIENTATION, frontAndUpVectors); + +} + +void XeSoundDevice::listAudioDevices(const ALCchar* devices) { + const ALCchar *device = devices, *next = devices + 1; + size_t len = 0; + + fprintf(stdout, "Devices list: "); + while (device && *device != '\0' && next && *next != '\0') { + fprintf(stdout, "%s, ", device); + len = strlen(device); + device += (len + 1); + next += (len + 2); + } + std::cout << "\n"; +} + +XeSoundDevice::~XeSoundDevice() { + alcMakeContextCurrent(nullptr); + alcDestroyContext(context); + alcCloseDevice(device); +} + +}
\ No newline at end of file |