00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <sound/SoundBufferWav.h>
00022 #include <sound/SoundBufferStaticSourceInstance.h>
00023 #include <sound/Sound.h>
00024 #ifdef __DARWIN__
00025 #include <OpenAL/al.h>
00026 #include <OpenAL/alut.h>
00027 #else
00028 #include <AL/al.h>
00029 #include <AL/alut.h>
00030 #endif
00031
00032 SoundBufferWav::SoundBufferWav(const char *fileName) :
00033 SoundBuffer(fileName),
00034 buffer_(0)
00035 {
00036 unsigned int error;
00037
00038
00039 alGetError();
00040 alGenBuffers(1, &buffer_);
00041 if ((error = alGetError()) != AL_NO_ERROR)
00042 {
00043 return;
00044 }
00045
00046
00047 void *data;
00048 ALenum format;
00049 ALsizei size;
00050 ALsizei freq;
00051 ALboolean loop;
00052
00053 #ifdef __DARWIN__
00054 alutLoadWAVFile((ALbyte*) fileName,&format,&data,&size,&freq);
00055 #else
00056 alutLoadWAVFile((ALbyte*) fileName,&format,&data,&size,&freq,&loop);
00057 #endif
00058
00059 if ((error = alGetError()) != AL_NO_ERROR)
00060 {
00061 return;
00062 }
00063
00064
00065 alBufferData(buffer_,format,data,size,freq);
00066 if ((error = alGetError()) != AL_NO_ERROR)
00067 {
00068 return;
00069 }
00070
00071
00072 alutUnloadWAV(format,data,size,freq);
00073 if ((error = alGetError()) != AL_NO_ERROR)
00074 {
00075 return;
00076 }
00077 }
00078
00079 SoundBufferWav::~SoundBufferWav()
00080 {
00081 if (buffer_) alDeleteBuffers (1, &buffer_);
00082 buffer_ = 0;
00083 }
00084
00085 SoundBufferSourceInstance *SoundBufferWav::createSourceInstance(unsigned int source)
00086 {
00087 return new SoundBufferStaticSourceInstance(source, buffer_);
00088 }