void CL_PlayBackgroundTrack (void) { char name[MAX_QPATH]; int32_t track; if (!cl.refresh_prepped) return; // using a named audio track intead of numbered if (strlen(cl.configstrings[CS_CDTRACK]) > 2) { OGG_ParseCmd(cl.configstrings[CS_CDTRACK]); // S_StartBackgroundTrack(name, name); return; } track = atoi(cl.configstrings[CS_CDTRACK]); if (track == 0) { // Stop any playing track OGG_Stop(); return; } // If an OGG file exists play it, otherwise fall back to CD audio Com_sprintf (name, sizeof(name), "track%02i", CL_MissionPackCDTrack(track)); OGG_ParseCmd(name); }
/* ========== OGG_PlayCmd Play control. ========== */ void OGG_PlayCmd( void ) { if (Cmd_Argc() < 2) { Com_Printf("Usage: ogg_play {filename | #n | ? | >n | <n}\n"); return; } OGG_ParseCmd(Cmd_Argv(1)); }
/* ========== OGG_Init Initialize the Ogg Vorbis subsystem. ========== */ void OGG_Init(void) { cvar_t *cv; /* Cvar pointer. */ if (ogg_started) return; Com_Printf("Starting Ogg Vorbis.\n"); /* Skip initialization if disabled. */ cv = Cvar_Get ("ogg_enable", "1", 0); if (cv->value != 1) { Com_Printf ("Ogg Vorbis not initializing.\n"); return; } /* Cvars. */ ogg_autoplay = Cvar_Get("ogg_autoplay", "?", CVAR_ARCHIVE); ogg_check = Cvar_Get("ogg_check", "0", CVAR_ARCHIVE); ogg_playlist = Cvar_Get("ogg_playlist", "playlist", CVAR_ARCHIVE); ogg_sequence = Cvar_Get("ogg_sequence", "next", CVAR_ARCHIVE); ogg_volume = Cvar_Get("ogg_volume", "0.7", CVAR_ARCHIVE); /* Console commands. */ Cmd_AddCommand("ogg_list", OGG_ListCmd); Cmd_AddCommand("ogg_pause", OGG_PauseCmd); Cmd_AddCommand("ogg_play", OGG_PlayCmd); Cmd_AddCommand("ogg_reinit", OGG_Reinit); Cmd_AddCommand("ogg_resume", OGG_ResumeCmd); Cmd_AddCommand("ogg_seek", OGG_SeekCmd); Cmd_AddCommand("ogg_status", OGG_StatusCmd); Cmd_AddCommand("ogg_stop", OGG_Stop); /* Build list of files. */ ogg_numfiles = 0; if (ogg_playlist->string[0] != '\0') OGG_LoadPlaylist(ogg_playlist->string); if (ogg_numfiles == 0) OGG_LoadFileList(); /* Check if we have Ogg Vorbis files. */ if (ogg_numfiles <= 0) { Com_Printf("No Ogg Vorbis files found.\n"); ogg_started = true; /* For OGG_Shutdown(). */ OGG_Shutdown(); return; } /* Initialize variables. */ if (ogg_first_init) { srand(time(NULL)); ogg_buffer = NULL; ogg_curfile = -1; ogg_status = STOP; ogg_first_init = false; } ogg_started = true; Com_Printf("%d Ogg Vorbis files found.\n", ogg_numfiles); /* Autoplay support. */ if (ogg_autoplay->string[0] != '\0') OGG_ParseCmd(ogg_autoplay->string); }
void CL_ParseConfigString(void) { int i, length; char *s; char olds[MAX_QPATH]; i = MSG_ReadShort(&net_message); if ((i < 0) || (i >= MAX_CONFIGSTRINGS)) { Com_Error(ERR_DROP, "configstring > MAX_CONFIGSTRINGS"); } s = MSG_ReadString(&net_message); Q_strlcpy(olds, cl.configstrings[i], sizeof(olds)); length = strlen(s); if (length > sizeof(cl.configstrings) - sizeof(cl.configstrings[0])*i - 1) { Com_Error(ERR_DROP, "CL_ParseConfigString: oversize configstring"); } strcpy(cl.configstrings[i], s); /* do something apropriate */ if ((i >= CS_LIGHTS) && (i < CS_LIGHTS + MAX_LIGHTSTYLES)) { CL_SetLightstyle(i - CS_LIGHTS); } else if (i == CS_CDTRACK) { if (cl.refresh_prepped) { #ifdef CDA CDAudio_Play((int)strtol(cl.configstrings[CS_CDTRACK], (char **)NULL, 10), true); #endif #ifdef OGG /* OGG/Vorbis */ if ((int)strtol(cl.configstrings[CS_CDTRACK], (char **)NULL, 10) < 10) { char tmp[3] = "0"; OGG_ParseCmd(strcat(tmp, cl.configstrings[CS_CDTRACK])); } else { OGG_ParseCmd(cl.configstrings[CS_CDTRACK]); } #endif } } else if ((i >= CS_MODELS) && (i < CS_MODELS + MAX_MODELS)) { if (cl.refresh_prepped) { cl.model_draw[i - CS_MODELS] = R_RegisterModel(cl.configstrings[i]); if (cl.configstrings[i][0] == '*') { cl.model_clip[i - CS_MODELS] = CM_InlineModel(cl.configstrings[i]); } else { cl.model_clip[i - CS_MODELS] = NULL; } } } else if ((i >= CS_SOUNDS) && (i < CS_SOUNDS + MAX_MODELS)) { if (cl.refresh_prepped) { cl.sound_precache[i - CS_SOUNDS] = S_RegisterSound(cl.configstrings[i]); } } else if ((i >= CS_IMAGES) && (i < CS_IMAGES + MAX_MODELS)) { if (cl.refresh_prepped) { cl.image_precache[i - CS_IMAGES] = Draw_FindPic(cl.configstrings[i]); } } else if ((i >= CS_PLAYERSKINS) && (i < CS_PLAYERSKINS + MAX_CLIENTS)) { if (cl.refresh_prepped && strcmp(olds, s)) { CL_ParseClientinfo(i - CS_PLAYERSKINS); } } }