mirror of
https://github.com/bjornbytes/lovr.git
synced 2024-07-03 21:13:42 +00:00
Audio listener position and orientation;
This commit is contained in:
parent
fa6b742972
commit
c2c1e8aac5
|
@ -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) {
|
void lovrAudioPlay(Source* source) {
|
||||||
lovrRetain(&source->ref);
|
lovrRetain(&source->ref);
|
||||||
vec_push(&state.sources, source);
|
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);
|
||||||
|
}
|
||||||
|
|
|
@ -17,4 +17,8 @@ typedef struct {
|
||||||
void lovrAudioInit();
|
void lovrAudioInit();
|
||||||
void lovrAudioDestroy();
|
void lovrAudioDestroy();
|
||||||
void lovrAudioUpdate();
|
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 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);
|
||||||
|
|
|
@ -7,7 +7,11 @@
|
||||||
|
|
||||||
const luaL_Reg lovrAudio[] = {
|
const luaL_Reg lovrAudio[] = {
|
||||||
{ "update", l_lovrAudioUpdate },
|
{ "update", l_lovrAudioUpdate },
|
||||||
|
{ "getOrientation", l_lovrAudioGetOrientation },
|
||||||
|
{ "getPosition", l_lovrAudioGetPosition },
|
||||||
{ "newSource", l_lovrAudioNewSource },
|
{ "newSource", l_lovrAudioNewSource },
|
||||||
|
{ "setOrientation", l_lovrAudioSetOrientation },
|
||||||
|
{ "setPosition", l_lovrAudioSetPosition },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -29,6 +33,27 @@ int l_lovrAudioUpdate(lua_State* L) {
|
||||||
return 0;
|
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) {
|
int l_lovrAudioNewSource(lua_State* L) {
|
||||||
const char* filename = luaL_checkstring(L, 1);
|
const char* filename = luaL_checkstring(L, 1);
|
||||||
if (!strstr(filename, ".ogg")) {
|
if (!strstr(filename, ".ogg")) {
|
||||||
|
@ -45,3 +70,22 @@ int l_lovrAudioNewSource(lua_State* L) {
|
||||||
luax_pushtype(L, Source, lovrSourceCreate(sourceData));
|
luax_pushtype(L, Source, lovrSourceCreate(sourceData));
|
||||||
return 1;
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -8,4 +8,8 @@ map_int_t TimeUnits;
|
||||||
extern const luaL_Reg lovrAudio[];
|
extern const luaL_Reg lovrAudio[];
|
||||||
int l_lovrAudioInit(lua_State* L);
|
int l_lovrAudioInit(lua_State* L);
|
||||||
int l_lovrAudioUpdate(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_lovrAudioNewSource(lua_State* L);
|
||||||
|
int l_lovrAudioSetOrientation(lua_State* L);
|
||||||
|
int l_lovrAudioSetPosition(lua_State* L);
|
||||||
|
|
Loading…
Reference in a new issue