-/*******************************************************************************
-
- Copyright (c) 2009, Charles McGarvey
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*******************************************************************************/
+/*] Copyright (c) 2009-2010, Charles McGarvey [**************************
+**] All rights reserved.
+*
+* vi:ts=4 sw=4 tw=75
+*
+* Distributable under the terms and conditions of the 2-clause BSD license;
+* see the file COPYING for a complete text of the license.
+*
+**************************************************************************/
#include <cstdio>
#include <deque>
mOggStream.datasource = 0;
}
- std::string path = Sound::getPath(name);
- int result = ov_fopen((char*)path.c_str(), &mOggStream);
+ std::string path(name);
+ if (!Sound::getPath(path))
+ {
+ Error(Error::RESOURCE_NOT_FOUND, path).raise();
+ }
- if (result < 0)
+ if (ov_fopen((char*)path.c_str(), &mOggStream) < 0)
{
- logWarning << "couldn't load sound: " << path << std::endl;
- throw Error(Error::UNKNOWN_AUDIO_FORMAT, path);
+ Error(Error::UNKNOWN_AUDIO_FORMAT, path).raise();
}
vorbis_info* vorbisInfo = ov_info(&mOggStream, -1);
{
// nothing more to play, stopping...
mIsPlaying = false;
- std::remove(mBuffers.begin(), mBuffers.end(), bufferObj);
+ std::remove(mBuffers.begin(), mBuffers.end(),
+ bufferObj);
}
}
}
ALenum state;
alGetSourcei(mSource, AL_SOURCE_STATE, &state);
- // restart playing if we're stopped but supposed to be playing... this
- // means we didn't queue enough and the audio skipped :-(
+ // restart playing if we're stopped but supposed to be playing...
+ // this means we didn't queue enough and the audio skipped :-(
if (mIsPlaying && state != AL_PLAYING)
{
alSourcePlay(mSource);
{
// don't let the music die!
update();
- // TODO - might be nice to also allow using threads for streaming rather
- // than a timer, probably as a compile-time option
+ // TODO - might be nice to also allow using threads for streaming
+ // rather than a timer, probably as a compile-time option
}
static void retainBackend()
{
alcMakeContextCurrent(gAlContext);
logInfo << "opened sound device `"
- << alcGetString(gAlDevice, ALC_DEFAULT_DEVICE_SPECIFIER)
+ << alcGetString(gAlDevice,
+ ALC_DEFAULT_DEVICE_SPECIFIER)
<< "'" << std::endl;
}
}
void Sound::setListenerPosition(const Vector3& position)
{
- //alListener3f(AL_POSITION, float(position[0]), float(position[1]),
- //float(position[2]));
float vec[] = {position[0], position[1], position[2]};
alListenerfv(AL_POSITION, vec);
}
void Sound::setListenerVelocity(const Vector3& velocity)
{
- //alListener3f(AL_VELOCITY, float(velocity[0]), float(velocity[1]),
- //float(velocity[2]));
float vec[] = {velocity[0], velocity[1], velocity[2]};
alListenerfv(AL_VELOCITY, vec);
}
-void Sound::setListenerOrientation(const Vector3& forward, const Vector3& up)
+void Sound::setListenerOrientation(const Vector3& forward,
+ const Vector3& up)
{
float vec[6];
vec[0] = float(forward[0]);
}
-std::string Sound::getPath(const std::string& name)
+bool Sound::getPath(std::string& name)
{
- if (boost::find_last(name, ".ogg"))
- {
- return Resource::getPath(name);
- }
- else
- {
- std::string path("sounds/");
- path += name;
- path += ".ogg";
- return Resource::getPath(path);
- }
+ return Resource::getPath(name, "sounds/", "ogg");
}
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void SoundStream::enqueue(const std::string& name)
} // namespace Mf
-/** vim: set ts=4 sw=4 tw=80: *************************************************/
-