class Buffer : public Mippleton<Buffer>
{
- FILE* soundFile;
OggVorbis_File oggStream;
ALenum audioFormat;
ALsizei audioFreq;
public:
Buffer(const std::string& name) :
- Mippleton<Buffer>(name),
- soundFile(0)
+ Mippleton<Buffer>(name)
{
+ oggStream.datasource = 0;
openFile();
}
objects.pop_back();
}
- if (soundFile)
+ if (oggStream.datasource)
{
ov_clear(&oggStream);
}
void openFile()
{
- if (soundFile)
+ if (oggStream.datasource)
{
ov_clear(&oggStream);
- soundFile = 0;
+ oggStream.datasource = 0;
}
- //soundFile = Sound_NewSampleFromFile(soundFile::getPath(getName()).c_str(),
- //0, BUFFER_SIZE);
- soundFile = fopen(Sound::getPath(getName()).c_str(), "rb");
-
- if (!soundFile)
- {
- logWarning("error while loading sound %s", getName().c_str());
- throw Exception(Exception::FILE_NOT_FOUND);
- }
-
- int result = ov_open(soundFile, &oggStream, NULL, 0);
+ std::string filePath = Sound::getPath(getName());
+ int result = ov_fopen((char*)filePath.c_str(), &oggStream);
if (result < 0)
{
- fclose(soundFile);
- soundFile = 0;
-
- logWarning("error while loading oggvorbis stream %s",
+ logWarning("error while loading sound %s",
getName().c_str());
throw Exception(Exception::BAD_AUDIO_FORMAT);
}
audioFormat = getAudioFormat(vorbisInfo);
audioFreq = vorbisInfo->rate;
- logDebug(" version: %d", vorbisInfo->version);
logDebug(" channels: %d", vorbisInfo->channels);
logDebug(" frequency: %d", vorbisInfo->rate);
}
void loadAll(ALuint source)
{
- if (!soundFile) openFile();
- if (!soundFile) return;
+ if (!oggStream.datasource) openFile();
+ if (!oggStream.datasource) return;
char data[BUFFER_SIZE];
int size = 0;
- //unsigned decoded = Sound_DecodeAll(soundFile);
for (;;)
{
int section;
// don't need this anymore
ov_clear(&oggStream);
- soundFile = 0;
+ oggStream.datasource = 0;
}
void beginStream(ALuint source, int nBuffers = 4)
{
- if (!soundFile) openFile();
- if (!soundFile) return;
+ if (!oggStream.datasource) openFile();
+ if (!oggStream.datasource) return;
ALuint objs[nBuffers];
alGenBuffers(nBuffers, objs);
char data[BUFFER_SIZE];
int size = 0;
- //unsigned bytes = Sound_Decode(soundFile);
while (size < BUFFER_SIZE)
{
int section;
inline void rewind()
{
- if (!soundFile) openFile();
+ if (!oggStream.datasource) openFile();
else ov_raw_seek(&oggStream, 0);
}