Audio listener position and orientation;

This commit is contained in:
bjorn 2017-01-05 21:36:38 -08:00
parent fa6b742972
commit c2c1e8aac5
4 changed files with 76 additions and 0 deletions

View File

@ -47,7 +47,31 @@ void lovrAudioUpdate() {
}
}
void lovrAudioGetOrientation(float* fx, float* fy, float* fz, float* ux, float* uy, float* uz) {
float v[6];
alGetListenerfv(AL_ORIENTATION, v);
*fx = v[0];
*fy = v[1];
*fz = v[2];
*ux = v[3];
*uy = v[4];
*uz = v[5];
}
void lovrAudioGetPosition(float* x, float* y, float* z) {
alGetListener3f(AL_POSITION, x, y, z);
}
void lovrAudioPlay(Source* source) {
lovrRetain(&source->ref);
vec_push(&state.sources, source);
}
void lovrAudioSetOrientation(float fx, float fy, float fz, float ux, float uy, float uz) {
ALfloat orientation[6] = { fx, fy, fz, ux, uy, uz };
alListenerfv(AL_ORIENTATION, orientation);
}
void lovrAudioSetPosition(float x, float y, float z) {
alListener3f(AL_POSITION, x, y, z);
}

View File

@ -17,4 +17,8 @@ typedef struct {
void lovrAudioInit();
void lovrAudioDestroy();
void lovrAudioUpdate();
void lovrAudioGetOrientation(float* fx, float* fy, float* fz, float* ux, float* uy, float* uz);
void lovrAudioGetPosition(float* x, float* y, float* z);
void lovrAudioPlay(Source* source);
void lovrAudioSetOrientation(float fx, float fy, float fz, float ux, float uy, float uz);
void lovrAudioSetPosition(float x, float y, float z);

View File

@ -7,7 +7,11 @@
const luaL_Reg lovrAudio[] = {
{ "update", l_lovrAudioUpdate },
{ "getOrientation", l_lovrAudioGetOrientation },
{ "getPosition", l_lovrAudioGetPosition },
{ "newSource", l_lovrAudioNewSource },
{ "setOrientation", l_lovrAudioSetOrientation },
{ "setPosition", l_lovrAudioSetPosition },
{ NULL, NULL }
};
@ -29,6 +33,27 @@ int l_lovrAudioUpdate(lua_State* L) {
return 0;
}
int l_lovrAudioGetOrientation(lua_State* L) {
float fx, fy, fz, ux, uy, uz;
lovrAudioGetOrientation(&fx, &fy, &fz, &ux, &uy, &uz);
lua_pushnumber(L, fx);
lua_pushnumber(L, fy);
lua_pushnumber(L, fz);
lua_pushnumber(L, ux);
lua_pushnumber(L, uy);
lua_pushnumber(L, uz);
return 6;
}
int l_lovrAudioGetPosition(lua_State* L) {
float x, y, z;
lovrAudioGetPosition(&x, &y, &z);
lua_pushnumber(L, x);
lua_pushnumber(L, y);
lua_pushnumber(L, z);
return 3;
}
int l_lovrAudioNewSource(lua_State* L) {
const char* filename = luaL_checkstring(L, 1);
if (!strstr(filename, ".ogg")) {
@ -45,3 +70,22 @@ int l_lovrAudioNewSource(lua_State* L) {
luax_pushtype(L, Source, lovrSourceCreate(sourceData));
return 1;
}
int l_lovrAudioSetOrientation(lua_State* L) {
float fx = luaL_checknumber(L, 1);
float fy = luaL_checknumber(L, 2);
float fz = luaL_checknumber(L, 3);
float ux = luaL_checknumber(L, 4);
float uy = luaL_checknumber(L, 5);
float uz = luaL_checknumber(L, 6);
lovrAudioSetOrientation(fx, fy, fz, ux, uy, uz);
return 0;
}
int l_lovrAudioSetPosition(lua_State* L) {
float x = luaL_checknumber(L, 1);
float y = luaL_checknumber(L, 2);
float z = luaL_checknumber(L, 3);
lovrAudioSetPosition(x, y, z);
return 0;
}

View File

@ -8,4 +8,8 @@ map_int_t TimeUnits;
extern const luaL_Reg lovrAudio[];
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_lovrAudioNewSource(lua_State* L);
int l_lovrAudioSetOrientation(lua_State* L);
int l_lovrAudioSetPosition(lua_State* L);