int music_directplay(const char *spath, const char *lpath) { int pos; int ret; music_lock(); music_add(spath, lpath); pos = music_find(spath, lpath); if (pos < 0) { music_unlock(); return -1; } g_list.curr_pos = pos; ret = music_play(pos); if (ret == 0) { g_list.is_list_playing = true; g_list.first_time = false; } music_unlock(); return 0; }
musicp music_load (const char *file, const char *name_alias) { if (name_alias) { musicp m = music_find(name_alias); if (m) { return (m); } } if (!file) { if (!name_alias) { ERR("no file for music"); } else { ERR("no file for music loading %s", name_alias); } } if (!all_music) { all_music = tree_alloc(TREE_KEY_STRING, "TREE ROOT: music"); } musicp m = (typeof(m)) myzalloc(sizeof(*m), "TREE NODE: music"); m->tree.key = dupstr(name_alias, "TREE KEY: music"); if (!tree_insert(all_music, &m->tree.node)) { ERR("music insert name_alias [%s] failed", name_alias); } m->data = ramdisk_load(file, &m->len); if (!m->data) { ERR("cannot load music %s", file); } SDL_RWops *rw; rw = SDL_RWFromMem(m->data, m->len); if (!rw) { ERR("cannot make RW music %s", file); } #if SDL_MAJOR_VERSION == 1 && SDL_MINOR_VERSION == 2 /* { */ m->music = Mix_LoadMUS_RW(rw); #else m->music = Mix_LoadMUS_RW(rw, false); #endif /* } */ if (!m->music) { MSG_BOX("Mix_LoadMUS_RW fail %s: %s %s", file, Mix_GetError(), SDL_GetError()); SDL_ClearError(); } DBG("Load %s", file); return (m); }
int music_add(const char *spath, const char *lpath) { int pos; if (spath == NULL || lpath == NULL) return -EINVAL; if (!fs_is_music(spath, lpath)) return -EINVAL; pos = music_find(spath, lpath); if (pos >= 0) { return -1; } return musiclist_add(&g_music_list, spath, lpath); }
/** * @brief Initializes the music subsystem. * * @return 0 on success. */ int music_init (void) { if (music_disabled) return 0; if ((conf.sound_backend != NULL) && (strcmp(conf.sound_backend,"sdlmix")==0)) { #if USE_SDLMIX /* * SDL_mixer backend. */ /* Init/exit. */ music_sys_init = music_mix_init; music_sys_exit = music_mix_exit; /* Loading. */ music_sys_load = music_mix_load; music_sys_free = music_mix_free; /* Music control. */ music_sys_volume = music_mix_volume; music_sys_getVolume = music_mix_getVolume; music_sys_getVolumeLog = music_mix_getVolume; music_sys_load = music_mix_load; music_sys_play = music_mix_play; music_sys_stop = music_mix_stop; music_sys_pause = music_mix_pause; music_sys_resume = music_mix_resume; music_sys_setPos = music_mix_setPos; music_sys_isPlaying = music_mix_isPlaying; #else /* USE_SDLMIX */ WARN("SDL_mixer support not compiled in!"); return -1; #endif /* USE_SDLMIX */ } else if ((conf.sound_backend != NULL) && (strcmp(conf.sound_backend,"openal")==0)) { #if USE_OPENAL /* * OpenAL backend. */ /* Init/exit. */ music_sys_init = music_al_init; music_sys_exit = music_al_exit; /* Loading. */ music_sys_load = music_al_load; music_sys_free = music_al_free; /* Music control. */ music_sys_volume = music_al_volume; music_sys_getVolume = music_al_getVolume; music_sys_getVolumeLog = music_al_getVolumeLog; music_sys_load = music_al_load; music_sys_play = music_al_play; music_sys_stop = music_al_stop; music_sys_pause = music_al_pause; music_sys_resume = music_al_resume; music_sys_setPos = music_al_setPos; music_sys_isPlaying = music_al_isPlaying; #else /* USE_OPENAL */ WARN("OpenAL support not compiled in!"); return -1; #endif /* USE_OPENAL*/ } else { WARN("Unknown sound backend '%s'.", conf.sound_backend); return -1; } /* Start the subsystem. */ if (music_sys_init()) return -1; /* Load the music. */ if (music_find() < 0) return -1; /* Start up Lua. */ if (music_luaInit() < 0) return -1; /* Set the volume. */ if ((conf.music > 1.) || (conf.music < 0.)) WARN("Music has invalid value, clamping to [0:1]."); music_volume(conf.music); /* Create the lock. */ music_lock = SDL_CreateMutex(); return 0; }