lovr/src/lovr/audio.c

48 lines
1.1 KiB
C
Raw Normal View History

2017-01-03 03:09:33 +00:00
#include "lovr/audio.h"
2017-01-06 01:00:53 +00:00
#include "lovr/types/source.h"
2017-01-03 03:09:33 +00:00
#include "audio/audio.h"
2017-01-06 01:00:53 +00:00
#include "audio/source.h"
#include "loaders/source.h"
#include "filesystem/filesystem.h"
2017-01-03 03:09:33 +00:00
const luaL_Reg lovrAudio[] = {
2017-01-06 01:00:53 +00:00
{ "update", l_lovrAudioUpdate },
{ "newSource", l_lovrAudioNewSource },
2017-01-03 03:09:33 +00:00
{ NULL, NULL }
};
int l_lovrAudioInit(lua_State* L) {
lua_newtable(L);
luaL_register(L, NULL, lovrAudio);
2017-01-06 01:00:53 +00:00
luax_registertype(L, "Source", lovrSource);
2017-01-06 04:21:16 +00:00
map_init(&TimeUnits);
map_set(&TimeUnits, "seconds", UNIT_SECONDS);
map_set(&TimeUnits, "samples", UNIT_SAMPLES);
2017-01-03 03:09:33 +00:00
lovrAudioInit();
return 1;
}
2017-01-06 01:00:53 +00:00
int l_lovrAudioUpdate(lua_State* L) {
lovrAudioUpdate();
return 0;
}
int l_lovrAudioNewSource(lua_State* L) {
const char* filename = luaL_checkstring(L, 1);
if (!strstr(filename, ".ogg")) {
return luaL_error(L, "Only .ogg files are supported");
}
int size;
void* data = lovrFilesystemRead(filename, &size);
if (!data) {
return luaL_error(L, "Could not load source from file '%s'", filename);
}
SoundData* soundData = lovrSoundDataFromFile(data, size);
luax_pushtype(L, Source, lovrSourceCreate(soundData));
return 1;
}