git-svn-id: https://scorched3d.svn.sourceforge.net/svnroot/scorched3d/trunk/scorched...
[scorched3d/parasti.git] / src / client / sound / SoundBufferWav.cpp
blobb8215861983b29b8d39f61331650b4bc8da1e2d7
1 ////////////////////////////////////////////////////////////////////////////////
2 // Scorched3D (c) 2000-2009
3 //
4 // This file is part of Scorched3D.
5 //
6 // Scorched3D is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation; either version 2 of the License, or
9 // (at your option) any later version.
11 // Scorched3D is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License
17 // along with Scorched3D; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 ////////////////////////////////////////////////////////////////////////////////
21 #include <sound/SoundBufferWav.h>
22 #include <sound/SoundBufferStaticSourceInstance.h>
23 #include <sound/Sound.h>
24 #ifdef __DARWIN__
25 #include <OpenAL/al.h>
26 #include <OpenAL/alut.h>
27 #else
28 #include <AL/al.h>
29 #include <AL/alut.h>
30 #endif
32 SoundBufferWav::SoundBufferWav(const char *fileName) :
33 SoundBuffer(fileName),
34 buffer_(0)
36 unsigned int error;
38 // Create a buffer
39 alGetError();
40 alGenBuffers(1, &buffer_);
41 if ((error = alGetError()) != AL_NO_ERROR)
43 return;
46 // Load WAV
47 void *data;
48 ALenum format;
49 ALsizei size;
50 ALsizei freq;
51 ALboolean loop;
53 #ifdef __DARWIN__
54 alutLoadWAVFile((ALbyte*) fileName,&format,&data,&size,&freq);
55 #else
56 alutLoadWAVFile((ALbyte*) fileName,&format,&data,&size,&freq,&loop);
57 #endif
59 if ((error = alGetError()) != AL_NO_ERROR)
61 return;
64 // Load WAV into buffer
65 alBufferData(buffer_,format,data,size,freq);
66 if ((error = alGetError()) != AL_NO_ERROR)
68 return;
71 // Delete WAV memory
72 alutUnloadWAV(format,data,size,freq);
73 if ((error = alGetError()) != AL_NO_ERROR)
75 return;
79 SoundBufferWav::~SoundBufferWav()
81 if (buffer_) alDeleteBuffers (1, &buffer_);
82 buffer_ = 0;
85 SoundBufferSourceInstance *SoundBufferWav::createSourceInstance(unsigned int source)
87 return new SoundBufferStaticSourceInstance(source, buffer_);