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));
130 WARN(_(
"Music has invalid value, clamping to [0:1]."));
163 files = PHYSFS_enumerateFiles( MUSIC_PATH );
168 for (
size_t i=0; files[i]!=NULL; i++) {
169 int flen = strlen(files[i]);
170 if ((flen > suflen) &&
171 strncmp( &files[i][flen - suflen],
MUSIC_SUFFIX, suflen)==0) {
178 DEBUG( n_(
"Loaded %d Song",
"Loaded %d Songs", nmusic ), nmusic );
181 PHYSFS_freeList(files);
199 music_vol = 1. / pow(2., (1.-vol) * 8. );
204 lua_rawgeti( naevL, LUA_REGISTRYINDEX, music_lua_volume );
205 lua_pushnumber( naevL, music_vol );
207 WARN(_(
"Error while running music function '%s': %s"),
"volume", lua_tostring(naevL,-1));
221 return music_vol_lin;
242 lua_rawgeti( naevL, LUA_REGISTRYINDEX, music_lua_play );
243 if (filename != NULL)
244 lua_pushstring( naevL, filename );
246 lua_pushnil( naevL );
248 WARN(_(
"Error while running music function '%s': %s"),
"play", lua_tostring(naevL,-1));
266 lua_rawgeti( naevL, LUA_REGISTRYINDEX, music_lua_stop );
267 lua_pushboolean( naevL, disable );
269 WARN(_(
"Error while running music function '%s': %s"),
"stop", lua_tostring(naevL,-1));
284 lua_rawgeti( naevL, LUA_REGISTRYINDEX, music_lua_pause );
285 lua_pushboolean( naevL, disable );
287 WARN(_(
"Error while running music function '%s': %s"),
"pause", lua_tostring(naevL,-1));
302 lua_rawgeti( naevL, LUA_REGISTRYINDEX, music_lua_resume );
304 WARN(_(
"Error while running music function '%s': %s"),
"resume", lua_tostring(naevL,-1));
323 lua_rawgeti( naevL, LUA_REGISTRYINDEX, music_lua_info );
325 WARN(_(
"Error while running music function '%s': %s"),
"info", lua_tostring(naevL,-1));
330 minfo.playing = lua_toboolean(naevL,-3);
331 minfo.name = strdup(luaL_optstring(naevL,-2,
""));
332 minfo.pos = luaL_optnumber(naevL,-1,-1);
365 if (nlua_dobufenv(
music_env, buf, bufsize, MUSIC_LUA_PATH) != 0) {
366 ERR(_(
"Error loading music file: %s\n"
368 "Most likely Lua file has improper syntax, please check"),
369 MUSIC_LUA_PATH, lua_tostring(naevL,-1) );
397 music_lua_choose = LUA_NOREF;
398 music_lua_update = LUA_NOREF;
399 music_lua_play = LUA_NOREF;
400 music_lua_stop = LUA_NOREF;
401 music_lua_pause = LUA_NOREF;
402 music_lua_resume = LUA_NOREF;
403 music_lua_info = LUA_NOREF;
404 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).
static char buf[NEWS_MAX_LENGTH]
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.