summaryrefslogtreecommitdiff
path: root/engine/xe_sound_device.cpp
diff options
context:
space:
mode:
authortylermurphy534 <tylermurphy534@gmail.com>2022-09-22 11:14:00 -0400
committertylermurphy534 <tylermurphy534@gmail.com>2022-09-22 11:14:00 -0400
commitac2868abc09e16485cd6806866067f7d7c082dff (patch)
tree164529d22bd66a976044f6f2aecfef96c39fb4cb /engine/xe_sound_device.cpp
parentadd openal lib (diff)
downloadminecraftvulkan-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.cpp64
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