X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FSound.cc;h=f912b318d153c2dfa13ecf1b991169f4e87751ee;hp=43714fe04872a93e968c0e44d0c7724f78b2d966;hb=7e898e8ec0ff716e2fc722b883a626a6c346f107;hpb=5250c138b1a692e4e893a8f424d2856e519fd652 diff --git a/src/Moof/Sound.cc b/src/Moof/Sound.cc index 43714fe..f912b31 100644 --- a/src/Moof/Sound.cc +++ b/src/Moof/Sound.cc @@ -59,7 +59,6 @@ struct Sound::Impl class Buffer : public Mippleton { - FILE* soundFile; OggVorbis_File oggStream; ALenum audioFormat; ALsizei audioFreq; @@ -68,9 +67,9 @@ struct Sound::Impl public: Buffer(const std::string& name) : - Mippleton(name), - soundFile(0) + Mippleton(name) { + oggStream.datasource = 0; openFile(); } @@ -82,7 +81,7 @@ struct Sound::Impl objects.pop_back(); } - if (soundFile) + if (oggStream.datasource) { ov_clear(&oggStream); } @@ -91,30 +90,18 @@ struct Sound::Impl 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); } @@ -123,7 +110,6 @@ struct Sound::Impl audioFormat = getAudioFormat(vorbisInfo); audioFreq = vorbisInfo->rate; - logDebug(" version: %d", vorbisInfo->version); logDebug(" channels: %d", vorbisInfo->channels); logDebug(" frequency: %d", vorbisInfo->rate); } @@ -131,13 +117,12 @@ struct Sound::Impl 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; @@ -172,14 +157,14 @@ struct Sound::Impl // 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); @@ -211,7 +196,6 @@ struct Sound::Impl char data[BUFFER_SIZE]; int size = 0; - //unsigned bytes = Sound_Decode(soundFile); while (size < BUFFER_SIZE) { int section; @@ -238,7 +222,7 @@ struct Sound::Impl inline void rewind() { - if (!soundFile) openFile(); + if (!oggStream.datasource) openFile(); else ov_raw_seek(&oggStream, 0); }