11#include "physfsrwops.h"
23#include "nlua_audio.h"
30#define MUSIC_SUFFIX ".ogg"
33static double music_vol = 0.;
34static double music_vol_lin = 0.;
46static int music_lua_update = LUA_NOREF;
47static int music_lua_choose = LUA_NOREF;
48static int music_lua_play = LUA_NOREF;
49static int music_lua_stop = LUA_NOREF;
50static int music_lua_pause = LUA_NOREF;
51static int music_lua_resume = LUA_NOREF;
52static int music_lua_info = LUA_NOREF;
53static int music_lua_volume = LUA_NOREF;
76 lua_rawgeti( naevL, LUA_REGISTRYINDEX, music_lua_update );
77 lua_pushnumber( naevL, dt );
79 WARN(_(
"Error while running music function '%s': %s"),
"update", lua_tostring(naevL,-1));
96 lua_rawgeti( naevL, LUA_REGISTRYINDEX, music_lua_choose );
97 if (situation != NULL)
98 lua_pushstring( naevL, situation );
100 lua_pushnil( naevL );
102 WARN(_(
"Error while running music function '%s': %s"),
"choose", lua_tostring(naevL,-1));
129 WARN(_(
"Music has invalid value, clamping to [0:1]."));
162 files = PHYSFS_enumerateFiles( MUSIC_PATH );
167 for (
size_t i=0; files[i]!=NULL; i++) {
168 int flen = strlen(files[i]);
169 if ((flen > suflen) &&
170 strncmp( &files[i][flen - suflen],
MUSIC_SUFFIX, suflen)==0) {
177 DEBUG( n_(
"Loaded %d Song",
"Loaded %d Songs", nmusic ), nmusic );
180 PHYSFS_freeList(files);
198 music_vol = 1. / pow(2., (1.-vol) * 8. );
203 lua_rawgeti( naevL, LUA_REGISTRYINDEX, music_lua_volume );
204 lua_pushnumber( naevL, music_vol );
206 WARN(_(
"Error while running music function '%s': %s"),
"volume", lua_tostring(naevL,-1));
220 return music_vol_lin;
241 lua_rawgeti( naevL, LUA_REGISTRYINDEX, music_lua_play );
242 if (filename != NULL)
243 lua_pushstring( naevL, filename );
245 lua_pushnil( naevL );
247 WARN(_(
"Error while running music function '%s': %s"),
"play", lua_tostring(naevL,-1));
265 lua_rawgeti( naevL, LUA_REGISTRYINDEX, music_lua_stop );
266 lua_pushboolean( naevL, disable );
268 WARN(_(
"Error while running music function '%s': %s"),
"stop", lua_tostring(naevL,-1));
283 lua_rawgeti( naevL, LUA_REGISTRYINDEX, music_lua_pause );
284 lua_pushboolean( naevL, disable );
286 WARN(_(
"Error while running music function '%s': %s"),
"pause", lua_tostring(naevL,-1));
301 lua_rawgeti( naevL, LUA_REGISTRYINDEX, music_lua_resume );
303 WARN(_(
"Error while running music function '%s': %s"),
"resume", lua_tostring(naevL,-1));
322 lua_rawgeti( naevL, LUA_REGISTRYINDEX, music_lua_info );
324 WARN(_(
"Error while running music function '%s': %s"),
"info", lua_tostring(naevL,-1));
329 minfo.playing = lua_toboolean(naevL,-3);
330 minfo.name = strdup(luaL_optstring(naevL,-2,
""));
331 minfo.pos = luaL_optnumber(naevL,-1,-1);
364 if (nlua_dobufenv(
music_env, buf, bufsize, MUSIC_LUA_PATH) != 0) {
365 ERR(_(
"Error loading music file: %s\n"
367 "Most likely Lua file has improper syntax, please check"),
368 MUSIC_LUA_PATH, lua_tostring(naevL,-1) );
396 music_lua_choose = LUA_NOREF;
397 music_lua_update = LUA_NOREF;
398 music_lua_play = LUA_NOREF;
399 music_lua_stop = LUA_NOREF;
400 music_lua_pause = LUA_NOREF;
401 music_lua_resume = LUA_NOREF;
402 music_lua_info = LUA_NOREF;
403 music_lua_volume = LUA_NOREF;
MusicInfo_t * music_info(void)
Gets information about the current music state.
static int music_runchoose
static int music_find(void)
Internal music loading routines.
int music_play(const char *filename)
Plays the loaded music.
int music_pause(int disable)
Pauses the music.
double music_getVolumeLog(void)
Gets the current music volume (logarithmic).
double music_getVolume(void)
Gets the current music volume (linear).
int music_choose(const char *situation)
Actually runs the music stuff, based on situation.
int music_volume(double vol)
Sets the music volume from a linear value.
int music_stop(int disable)
Stops the loaded music.
static void music_luaQuit(void)
Quits the music Lua control system.
void music_rechoose(void)
Attempts to rechoose the music.
static int music_luaInit(void)
Initialize the music Lua control system.
void music_exit(void)
Exits the music subsystem.
static nlua_env music_env
void music_update(double dt)
Updates the music.
int music_init(void)
Initializes the music subsystem.
static int music_runLua(const char *situation)
Runs the Lua music choose function.
int music_resume(void)
Resumes the music.
Header file with generic functions and naev-specifics.
void * ndata_read(const char *path, size_t *filesize)
Reads a file from the ndata (will be NUL terminated).
int nlua_loadStandard(nlua_env env)
Loads the standard Naev Lua API.
int nlua_refenvtype(nlua_env env, const char *name, int type)
Gets the reference of a global in a lua environment if it matches a type.
int nlua_loadTk(nlua_env env)
Loads the Toolkit Lua library.