dungeon_crawler

annotate prototype/src/audio/audio.cc @ 47:d52711f2b9a1

started writting audio code
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 16 Sep 2012 08:16:50 +0300
parents
children aa9e28670ae2
rev   line source
nuclear@47 1 #include <stdio.h>
nuclear@47 2 #include "openal.h"
nuclear@47 3 #include "audio.h"
nuclear@47 4
nuclear@47 5 #define CHECK_ERROR \
nuclear@47 6 do { \
nuclear@47 7 unsigned int err = alGetError(); \
nuclear@47 8 if(err != 0) { \
nuclear@47 9 fprintf(stderr, "%s:%d: AL error: %#x\n", __FILE__, __LINE__, err); \
nuclear@47 10 abort(); \
nuclear@47 11 } \
nuclear@47 12 } while(0)
nuclear@47 13
nuclear@47 14 static ALCdevice *dev;
nuclear@47 15 static ALCcontext *ctx;
nuclear@47 16
nuclear@47 17
nuclear@47 18 bool init_audio()
nuclear@47 19 {
nuclear@47 20 if(dev) {
nuclear@47 21 return true;
nuclear@47 22 }
nuclear@47 23
nuclear@47 24 if(!(dev = alcOpenDevice(0))) {
nuclear@47 25 fprintf(stderr, "failed to open OpenAL device\n");
nuclear@47 26 return false;
nuclear@47 27 }
nuclear@47 28 ctx = alcCreateContext(dev, 0);
nuclear@47 29 alcMakeContextCurrent(ctx);
nuclear@47 30
nuclear@47 31 alGetError(); // clear error code
nuclear@47 32 return true;
nuclear@47 33 }
nuclear@47 34
nuclear@47 35 void destroy_audio()
nuclear@47 36 {
nuclear@47 37 alcMakeContextCurrent(0);
nuclear@47 38 if(ctx) {
nuclear@47 39 alcDestroyContext(ctx);
nuclear@47 40 }
nuclear@47 41 if(dev) {
nuclear@47 42 alcCloseDevice(dev);
nuclear@47 43 }
nuclear@47 44 }