From cf6acfa258605b52d4f18272a38e573ba445c75c Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Tue, 15 Oct 2013 23:09:35 -0400 Subject: [PATCH] Added Source:getChannels. Positional/directional audio only works with 1-channel (mono) sources. --- src/modules/audio/Source.h | 1 + src/modules/audio/null/Source.cpp | 5 +++++ src/modules/audio/null/Source.h | 1 + src/modules/audio/openal/Source.cpp | 7 +++++++ src/modules/audio/openal/Source.h | 3 +++ src/modules/audio/wrap_Source.cpp | 8 ++++++++ src/modules/audio/wrap_Source.h | 1 + 7 files changed, 26 insertions(+) diff --git a/src/modules/audio/Source.h b/src/modules/audio/Source.h index 87c75997b..085d18395 100644 --- a/src/modules/audio/Source.h +++ b/src/modules/audio/Source.h @@ -102,6 +102,7 @@ public: virtual void setMaxDistance(float distance) = 0; virtual float getMaxDistance() const = 0; + virtual int getChannels() const = 0; virtual Type getType() const; static bool getConstant(const char *in, Type &out); diff --git a/src/modules/audio/null/Source.cpp b/src/modules/audio/null/Source.cpp index 8894dbd46..cbd31c779 100644 --- a/src/modules/audio/null/Source.cpp +++ b/src/modules/audio/null/Source.cpp @@ -224,6 +224,11 @@ float Source::getMaxDistance() const return this->maxDistance; } +int Source::getChannels() const +{ + return 2; +} + } // null } // audio } // love diff --git a/src/modules/audio/null/Source.h b/src/modules/audio/null/Source.h index 6472d3fb1..d7608f5d8 100644 --- a/src/modules/audio/null/Source.h +++ b/src/modules/audio/null/Source.h @@ -77,6 +77,7 @@ public: virtual float getRolloffFactor() const; virtual void setMaxDistance(float distance); virtual float getMaxDistance() const; + virtual int getChannels() const; private: diff --git a/src/modules/audio/openal/Source.cpp b/src/modules/audio/openal/Source.cpp index 8cda03a21..078c80abe 100644 --- a/src/modules/audio/openal/Source.cpp +++ b/src/modules/audio/openal/Source.cpp @@ -50,6 +50,7 @@ Source::Source(Pool *pool, love::sound::SoundData *soundData) , cone() , offsetSamples(0) , offsetSeconds(0) + , channels(soundData->getChannels()) , decoder(0) , toLoop(0) { @@ -81,6 +82,7 @@ Source::Source(Pool *pool, love::sound::Decoder *decoder) , cone() , offsetSamples(0) , offsetSeconds(0) + , channels(decoder->getChannels()) , decoder(decoder) , toLoop(0) { @@ -754,6 +756,11 @@ float Source::getMaxDistance() const return this->maxDistance; } +int Source::getChannels() const +{ + return channels; +} + } // openal } // audio } // love diff --git a/src/modules/audio/openal/Source.h b/src/modules/audio/openal/Source.h index f8b21125c..669c777ca 100644 --- a/src/modules/audio/openal/Source.h +++ b/src/modules/audio/openal/Source.h @@ -95,6 +95,7 @@ public: virtual float getRolloffFactor() const; virtual void setMaxDistance(float distance); virtual float getMaxDistance() const; + virtual int getChannels() const; void playAtomic(); void stopAtomic(); @@ -155,6 +156,8 @@ private: float offsetSamples; float offsetSeconds; + int channels; + love::sound::Decoder *decoder; unsigned int toLoop; diff --git a/src/modules/audio/wrap_Source.cpp b/src/modules/audio/wrap_Source.cpp index d21b9b8f2..1dfd38c40 100644 --- a/src/modules/audio/wrap_Source.cpp +++ b/src/modules/audio/wrap_Source.cpp @@ -324,6 +324,13 @@ int w_Source_getRolloff(lua_State *L) return 1; } +int w_Source_getChannels(lua_State *L) +{ + Source *t = luax_checksource(L, 1); + lua_pushinteger(L, t->getChannels()); + return 1; +} + int w_Source_getType(lua_State *L) { Source *t = luax_checksource(L, 1); @@ -377,6 +384,7 @@ static const luaL_Reg functions[] = { "setRolloff", w_Source_setRolloff}, { "getRolloff", w_Source_getRolloff}, + { "getChannels", w_Source_getChannels }, { "getType", w_Source_getType }, { 0, 0 } diff --git a/src/modules/audio/wrap_Source.h b/src/modules/audio/wrap_Source.h index 801a0eb84..3228f2a6a 100644 --- a/src/modules/audio/wrap_Source.h +++ b/src/modules/audio/wrap_Source.h @@ -63,6 +63,7 @@ int w_Source_setAttenuationDistances(lua_State *L); int w_Source_getAttenuationDistances(lua_State *L); int w_Source_setRolloff(lua_State *L); int w_Source_getRolloff(lua_State *L); +int w_Source_getChannels(lua_State *L); int w_Source_getType(lua_State *L); extern "C" int luaopen_source(lua_State *L);