// Copyright (c) 2023 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #include "AudioData.hpp" using namespace Dawn; AudioData::AudioData() { } void AudioData::init() { alGenBuffers((ALsizei)1, &this->buffer); // Test AudioFile audioFile; audioFile.load ("C:\\sample.wav"); audioFile.printSummary(); ALenum format; switch(audioFile.getBitDepth()) { case 16: switch(audioFile.getNumChannels()) { case 2: format = AL_FORMAT_STEREO16; break; case 1: format = AL_FORMAT_MONO16; break; default: assertUnreachable(); } break; case 8: switch(audioFile.getNumChannels()) { case 2: format = AL_FORMAT_STEREO8; break; case 1: format = AL_FORMAT_MONO8; break; default: assertUnreachable(); } break; default: assertUnreachable(); } format = AL_FORMAT_MONO16; std::vector data; for (int i = 0; i < audioFile.getNumSamplesPerChannel(); i++) { // for(int y = 0; y < audioFile.getNumChannels(); y++) { for(int y = 0; y < 1; y++) { double sample = audioFile.samples[y][i]; sample = mathClamp(sample, -1., 1.); auto q = static_cast (sample * 32767.); uint8_t bytes[2]; bytes[0] = (q >> 8) & 0xFF; bytes[1] = q & 0xFF; data.push_back(bytes[1]); data.push_back(bytes[0]); } } alBufferData(buffer, format, &data[0], data.size(), audioFile.getSampleRate()); this->ready = true; } AudioData::~AudioData() { if(this->ready) alDeleteBuffers((ALsizei)1, &this->buffer); }