Main Page   Modules   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   Related Pages  

/home/rdbrown/doxygen/cse125g1/src/modules/audio/BufferManager.cpp

00001 /*
00002  *  BufferManager.cpp
00003  *  MMAudio
00004  *
00005  *  Created by Rib Rdb on 4/8/05.
00006  *  Copyright 2005 __MyCompanyName__. All rights reserved.
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 }

Generated on Thu Aug 18 16:03:10 2005 for Robin Hood: Thieves & Knights by doxygen1.2.18