diff options
Diffstat (limited to 'src/audio/audio.cc')
-rw-r--r-- | src/audio/audio.cc | 42 |
1 files changed, 31 insertions, 11 deletions
diff --git a/src/audio/audio.cc b/src/audio/audio.cc index 46d3a67..d7f85d9 100644 --- a/src/audio/audio.cc +++ b/src/audio/audio.cc @@ -15,11 +15,19 @@ namespace audio ALCdevice *audio_device = 0; ALCcontext *audio_context = 0; +bool audio_initialized = false; + +bool initialized() +{ + return audio_initialized; +} void init() { con_print << "^BInitializing audio..." << std::endl; + audio_initialized = false; + // open the default audio device audio_device = alcOpenDevice(0); @@ -54,19 +62,28 @@ void init() // console sound load("ui/console"); + + audio_initialized = true; } void reset() { - con_print << "^BInitializing audio..." << std::endl; - - Sources::shutdown(); - Buffers::shutdown(); - Buffers::init(); - Sources::init(); + if (audio_initialized) { + con_print << "^BResetting audio..." << std::endl; - load("ui/nosnd"); - load("ui/console"); + Sources::shutdown(); + Buffers::shutdown(); + } + + if (!audio_initialized) { + init(); + } else { + Buffers::init(); + Sources::init(); + + load("ui/nosnd"); + load("ui/console"); + } } void load(const char *name) @@ -78,9 +95,10 @@ void shutdown() { con_print << "^BShutting down audio..." << std::endl; - Sources::shutdown(); - - Buffers::shutdown(); + if (audio_initialized) { + Sources::shutdown(); + Buffers::shutdown(); + } if (audio_context) { alcMakeContextCurrent(0); @@ -92,6 +110,8 @@ void shutdown() alcCloseDevice(audio_device); audio_device = 0; } + + audio_initialized = false; } size_t play(const char *name) |