diff --git a/src/audio/audio.c b/src/audio/audio.c index 31542d39..b4029b95 100644 --- a/src/audio/audio.c +++ b/src/audio/audio.c @@ -71,6 +71,12 @@ void lovrAudioGetPosition(float* x, float* y, float* z) { alGetListener3f(AL_POSITION, x, y, z); } +float lovrAudioGetVolume() { + float volume; + alGetListenerf(AL_GAIN, &volume); + return volume; +} + int lovrAudioHas(Source* source) { int index; vec_find(&state.sources, source, index); @@ -107,6 +113,10 @@ void lovrAudioSetPosition(float x, float y, float z) { alListener3f(AL_POSITION, x, y, z); } +void lovrAudioSetVolume(float volume) { + alListenerf(AL_GAIN, volume); +} + void lovrAudioStop() { int i; Source* source; vec_foreach(&state.sources, source, i) { diff --git a/src/audio/audio.h b/src/audio/audio.h index 35ad186c..b7a46ff5 100644 --- a/src/audio/audio.h +++ b/src/audio/audio.h @@ -20,10 +20,12 @@ void lovrAudioUpdate(); void lovrAudioAdd(Source* source); void lovrAudioGetOrientation(float* fx, float* fy, float* fz, float* ux, float* uy, float* uz); void lovrAudioGetPosition(float* x, float* y, float* z); +float lovrAudioGetVolume(); int lovrAudioHas(Source* source); void lovrAudioPause(); void lovrAudioResume(); void lovrAudioRewind(); void lovrAudioSetOrientation(float fx, float fy, float fz, float ux, float uy, float uz); void lovrAudioSetPosition(float x, float y, float z); +void lovrAudioSetVolume(float volume); void lovrAudioStop(); diff --git a/src/lovr/audio.c b/src/lovr/audio.c index 8e681f23..0d9cb2f5 100644 --- a/src/lovr/audio.c +++ b/src/lovr/audio.c @@ -9,12 +9,14 @@ const luaL_Reg lovrAudio[] = { { "update", l_lovrAudioUpdate }, { "getOrientation", l_lovrAudioGetOrientation }, { "getPosition", l_lovrAudioGetPosition }, + { "getVolume", l_lovrAudioGetVolume }, { "newSource", l_lovrAudioNewSource }, { "pause", l_lovrAudioPause }, { "resume", l_lovrAudioResume }, { "rewind", l_lovrAudioRewind }, { "setOrientation", l_lovrAudioSetOrientation }, { "setPosition", l_lovrAudioSetPosition }, + { "setVolume", l_lovrAudioSetVolume }, { "stop", l_lovrAudioStop }, { NULL, NULL } }; @@ -58,6 +60,11 @@ int l_lovrAudioGetPosition(lua_State* L) { return 3; } +int l_lovrAudioGetVolume(lua_State* L) { + lua_pushnumber(L, lovrAudioGetVolume()); + return 1; +} + int l_lovrAudioNewSource(lua_State* L) { const char* filename = luaL_checkstring(L, 1); if (!strstr(filename, ".ogg")) { @@ -109,6 +116,12 @@ int l_lovrAudioSetPosition(lua_State* L) { return 0; } +int l_lovrAudioSetVolume(lua_State* L) { + float volume = luaL_checknumber(L, 1); + lovrAudioSetVolume(volume); + return 0; +} + int l_lovrAudioStop(lua_State* L) { lovrAudioStop(); return 0; diff --git a/src/lovr/audio.h b/src/lovr/audio.h index 10708898..cf25186a 100644 --- a/src/lovr/audio.h +++ b/src/lovr/audio.h @@ -10,10 +10,12 @@ int l_lovrAudioInit(lua_State* L); int l_lovrAudioUpdate(lua_State* L); int l_lovrAudioGetOrientation(lua_State* L); int l_lovrAudioGetPosition(lua_State* L); +int l_lovrAudioGetVolume(lua_State* L); int l_lovrAudioNewSource(lua_State* L); int l_lovrAudioPause(lua_State* L); int l_lovrAudioResume(lua_State* L); int l_lovrAudioRewind(lua_State* L); int l_lovrAudioSetOrientation(lua_State* L); int l_lovrAudioSetPosition(lua_State* L); +int l_lovrAudioSetVolume(lua_State* L); int l_lovrAudioStop(lua_State* L);