/* Minetest Copyright (C) 2022 DS Copyright (C) 2013 celeron55, Perttu Ahola OpenAL support based on work by: Copyright (C) 2011 Sebastian 'Bahamada' Rühl Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits Copyright (C) 2011 Giuseppe Bilotta This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "sound_singleton.h" namespace sound { bool SoundManagerSingleton::init() { if (!(m_device = unique_ptr_alcdevice(alcOpenDevice(nullptr)))) { errorstream << "Audio: Global Initialization: Failed to open device" << std::endl; return false; } if (!(m_context = unique_ptr_alccontext(alcCreateContext(m_device.get(), nullptr)))) { errorstream << "Audio: Global Initialization: Failed to create context" << std::endl; return false; } if (!alcMakeContextCurrent(m_context.get())) { errorstream << "Audio: Global Initialization: Failed to make current context" << std::endl; return false; } alDistanceModel(AL_INVERSE_DISTANCE_CLAMPED); // Speed of sound in nodes per second // FIXME: This value assumes 1 node sidelength = 1 meter, and "normal" air. // Ideally this should be mod-controlled. alSpeedOfSound(343.3f); // doppler effect turned off for now, for best backwards compatibility alDopplerFactor(0.0f); if (alGetError() != AL_NO_ERROR) { errorstream << "Audio: Global Initialization: OpenAL Error " << alGetError() << std::endl; return false; } infostream << "Audio: Global Initialized: OpenAL " << alGetString(AL_VERSION) << ", using " << alcGetString(m_device.get(), ALC_DEVICE_SPECIFIER) << std::endl; return true; } SoundManagerSingleton::~SoundManagerSingleton() { infostream << "Audio: Global Deinitialized." << std::endl; } } // namespace sound