Cleaned up the code that triggers an error when using spatial Source methods on multi-channel Sources.

--HG--
branch : minor
This commit is contained in:
Alex Szpakowski
2015-01-19 23:55:44 -04:00
parent 3db4e8dea0
commit 60c6b6a155
+28 -20
View File
@@ -32,10 +32,6 @@ namespace audio
{
namespace openal
{
// Message to be used by any exception thrown here for attempting to call spatial functions on stereo sources, as this
// is not supported by openAL.
static const char* NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE = "This spatial audio functionality is only available on monaural sources. \
Ensure your source is not stereo before calling this function.";
class InvalidFormatException : public love::Exception
{
@@ -48,6 +44,18 @@ public:
};
class SpatialSupportException : public love::Exception
{
public:
SpatialSupportException()
: Exception("This spatial audio functionality is only available for mono Sources. \
Ensure the Source is not multi-channel before calling this function.")
{
}
};
StaticDataBuffer::StaticDataBuffer(ALenum format, const ALvoid *data, ALsizei size, ALsizei freq)
{
alGenBuffers(1, &buffer);
@@ -428,7 +436,7 @@ float Source::tell(Source::Unit unit)
void Source::setPosition(float *v)
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
if (valid)
alSourcefv(source, AL_POSITION, v);
@@ -439,7 +447,7 @@ void Source::setPosition(float *v)
void Source::getPosition(float *v) const
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
if (valid)
alGetSourcefv(source, AL_POSITION, v);
@@ -450,7 +458,7 @@ void Source::getPosition(float *v) const
void Source::setVelocity(float *v)
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
if (valid)
alSourcefv(source, AL_VELOCITY, v);
@@ -461,7 +469,7 @@ void Source::setVelocity(float *v)
void Source::getVelocity(float *v) const
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
if (valid)
alGetSourcefv(source, AL_VELOCITY, v);
@@ -472,7 +480,7 @@ void Source::getVelocity(float *v) const
void Source::setDirection(float *v)
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
if (valid)
alSourcefv(source, AL_DIRECTION, v);
@@ -483,7 +491,7 @@ void Source::setDirection(float *v)
void Source::getDirection(float *v) const
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
if (valid)
alGetSourcefv(source, AL_DIRECTION, v);
@@ -494,7 +502,7 @@ void Source::getDirection(float *v) const
void Source::setCone(float innerAngle, float outerAngle, float outerVolume)
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
cone.innerAngle = (int) LOVE_TODEG(innerAngle);
cone.outerAngle = (int) LOVE_TODEG(outerAngle);
@@ -511,7 +519,7 @@ void Source::setCone(float innerAngle, float outerAngle, float outerVolume)
void Source::getCone(float &innerAngle, float &outerAngle, float &outerVolume) const
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
innerAngle = LOVE_TORAD(cone.innerAngle);
outerAngle = LOVE_TORAD(cone.outerAngle);
@@ -521,7 +529,7 @@ void Source::getCone(float &innerAngle, float &outerAngle, float &outerVolume) c
void Source::setRelative(bool enable)
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
if (valid)
alSourcei(source, AL_SOURCE_RELATIVE, relative ? AL_TRUE : AL_FALSE);
@@ -532,7 +540,7 @@ void Source::setRelative(bool enable)
bool Source::isRelative() const
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
return relative;
}
@@ -804,7 +812,7 @@ float Source::getMaxVolume() const
void Source::setReferenceDistance(float distance)
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
if (valid)
{
@@ -817,7 +825,7 @@ void Source::setReferenceDistance(float distance)
float Source::getReferenceDistance() const
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
if (valid)
{
@@ -833,7 +841,7 @@ float Source::getReferenceDistance() const
void Source::setRolloffFactor(float factor)
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
if (valid)
{
@@ -846,7 +854,7 @@ void Source::setRolloffFactor(float factor)
float Source::getRolloffFactor() const
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
if (valid)
{
@@ -862,7 +870,7 @@ float Source::getRolloffFactor() const
void Source::setMaxDistance(float distance)
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
if (valid)
{
@@ -875,7 +883,7 @@ void Source::setMaxDistance(float distance)
float Source::getMaxDistance() const
{
if (channels > 1)
throw love::Exception(NO_SPATIAL_SUPPORT_FOR_STEREO_ERROR_MESSAGE);
throw SpatialSupportException();
if (valid)
{