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 } |