00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "BufferManager.h"
00011 #include "resources/resources.h"
00012
00013 namespace MMAudio {
00014 vector<const char*> soundfiles;
00015 hash_map<unsigned int, ALuint> buffers;
00016
00017 static ALuint bufferSound(unsigned int id) {
00018 ALLock lock;
00019 ALsizei size, freq;
00020 ALenum format;
00021 ALvoid *data;
00022 ALboolean loop;
00023 audioResetAlErrors();
00024 ALbyte* name = (ALbyte*)resFindResource(soundfiles.at(id));
00025
00026 #ifdef __APPLE__
00027 alutLoadWAVFile(name, &format, &data, &size, &freq);
00028 #elif _WIN32
00029 alutLoadWAVFile(name, &format, &data, &size, &freq, &loop);
00030 #else
00031 alutLoadWAVFile(name, &format, &data, &size, &freq, &loop);
00032 #endif
00033
00034
00035 audioCheckAlErrors();
00036
00037 ALuint buffername;
00038 audioResetAlErrors();
00039 alGenBuffers(1,&buffername);
00040 audioCheckAlErrors();
00041
00042 audioResetAlErrors();
00043 alBufferData(buffername,format,data,size,freq);
00044 audioCheckAlErrors();
00045
00046 audioResetAlErrors();
00047 alutUnloadWAV(format,data,size,freq);
00048 audioCheckAlErrors();
00049
00050 buffers[id] = buffername;
00051
00052 return buffername;
00053 }
00054
00055 void addSoundFiles(const char * const * names, int count) {
00056 const char * const * end = names + count;
00057 while (names < end)
00058 soundfiles.push_back(*(names++));
00059 }
00060
00061 void addSoundFile(const char * name) {
00062 soundfiles.push_back(name);
00063 }
00064
00065 ALuint getBufferForSound(unsigned int name) {
00066 if (buffers.count(name) == 0)
00067 return bufferSound(name);
00068 return buffers[name];
00069 }
00070
00071 }