bool AudioDevice::createMainContext() { LogInfo("Creating OpenAL main context"); // Create a main context. mainContext = createContext(); mainContext->makeCurrent(); const ALchar* version = alGetString(AL_VERSION); if( !version ) { LogWarn("Could not get OpenAL version"); return false; } LogInfo("Using OpenAL version %s", version); if( AudioCheckError() ) { LogWarn("Error initializing OpenAL: %s", AudioGetError()); return false; } return true; }
void AudioDevice::setVolume(float volume) { alListenerf(AL_GAIN, volume); if(AudioCheckError()) { LogWarn("Error changing listener volume: %s", AudioGetError()); return; } }
void AudioContext::setPosition(const Vector3& position) { // Update OpenAL's listener position. alListenerfv(AL_POSITION, &position.x); if(AudioCheckError()) { LogWarn( "Could not set listener position: %s", AudioGetError()); return; } }
void AudioContext::setVolume(float volume) { // Update OpenAL's volume. alListenerf(AL_GAIN, volume); if(AudioCheckError()) { LogWarn("Could not set new volume: %s", AudioGetError()); return; } }
void AudioContext::setOrientation(const Vector3& rotation) { Vector3 data[] = { rotation, Vector3::UnitY }; alListenerfv(AL_ORIENTATION, (const ALfloat *) &data ); if(AudioCheckError()) { LogWarn( "Could not set listener orientation: %s", AudioGetError()); return; } }
AudioDevice::~AudioDevice() { if(!device) return; #pragma TODO("Check that all contexts/buffers are closed on exit") Deallocate(mainContext); if(!alcCloseDevice(device)) { LogWarn("Error closing OpenAL device: %s", AudioGetError()); return; } }