DarkPlaces
Game engine based on the Quake 1 engine by id Software, developed by LadyHavoc
 
cd_shared.c File Reference
#include "quakedef.h"
#include "cdaudio.h"
#include "sound.h"
+ Include dependency graph for cd_shared.c:

Go to the source code of this file.

Macros

#define MAX_PLAYLISTS   10
 

Typedefs

typedef char filename_t[MAX_QPATH]
 

Functions

static void CD_f (cmd_state_t *cmd)
 
static void CDAudio_CloseDoor (void)
 
static void CDAudio_Eject (void)
 
static int CDAudio_GetAudioDiskInfo (void)
 
float CDAudio_GetPosition (void)
 
int CDAudio_Init (void)
 
void CDAudio_Pause (void)
 
void CDAudio_Play (int track, qbool looping)
 
static void CDAudio_Play_byName (const char *trackname, qbool looping, qbool tryreal, float startposition)
 
void CDAudio_Resume (void)
 
static void CDAudio_SetVolume (float newvol)
 
void CDAudio_Shutdown (void)
 
static void CDAudio_StartPlaylist (qbool resume)
 
int CDAudio_Startup (void)
 
void CDAudio_Stop (void)
 
static void CDAudio_StopPlaylistTrack (void)
 
void CDAudio_Update (void)
 

Variables

cvar_t cdaudioinitialized = {CF_CLIENT | CF_READONLY,"cdaudioinitialized","0","indicates if CD Audio system is active"}
 
static qbool cdPlaying = false
 
static qbool cdPlayLooping = false
 
static unsigned char cdPlayTrack
 
static float cdvolume
 
static qbool enabled = false
 
static int faketrack = -1
 
static qbool initialized = false
 
int music_playlist_active = -1
 
cvar_t music_playlist_current [MAX_PLAYLISTS]
 
cvar_t music_playlist_index = {CF_CLIENT, "music_playlist_index", "-1", "selects which of the music_playlist_ variables is the active one, -1 disables playlists"}
 
cvar_t music_playlist_list [MAX_PLAYLISTS]
 
int music_playlist_playing = 0
 
cvar_t music_playlist_random [MAX_PLAYLISTS]
 
cvar_t music_playlist_sampleposition [MAX_PLAYLISTS]
 
static filename_t remap [MAXTRACKS]
 
static qbool wasPlaying = false
 

Macro Definition Documentation

◆ MAX_PLAYLISTS

#define MAX_PLAYLISTS   10

Definition at line 30 of file cd_shared.c.

Referenced by CDAudio_Init(), and CDAudio_StopPlaylistTrack().

Typedef Documentation

◆ filename_t

typedef char filename_t[MAX_QPATH]

Definition at line 92 of file cd_shared.c.

Function Documentation

◆ CD_f()

static void CD_f ( cmd_state_t * cmd)
static

Definition at line 267 of file cd_shared.c.

268{
269 const char *command;
270#ifdef MAXTRACKS
271 int ret;
272 int n;
273#endif
274
275 command = Cmd_Argv(cmd, 1);
276
277 if (strcasecmp(command, "remap") != 0)
279
280 if (strcasecmp(command, "on") == 0)
281 {
282 enabled = true;
283 return;
284 }
285
286 if (strcasecmp(command, "off") == 0)
287 {
288 CDAudio_Stop();
289 enabled = false;
290 return;
291 }
292
293 if (strcasecmp(command, "reset") == 0)
294 {
295 enabled = true;
296 CDAudio_Stop();
297#ifdef MAXTRACKS
298 for (n = 0; n < MAXTRACKS; n++)
299 *remap[n] = 0; // empty string, that is, unremapped
300#endif
302 return;
303 }
304
305 if (strcasecmp(command, "rescan") == 0)
306 {
309 return;
310 }
311
312 if (strcasecmp(command, "remap") == 0)
313 {
314#ifdef MAXTRACKS
315 ret = Cmd_Argc(cmd) - 2;
316 if (ret <= 0)
317 {
318 for (n = 1; n < MAXTRACKS; n++)
319 if (*remap[n])
320 Con_Printf(" %u -> %s\n", n, remap[n]);
321 return;
322 }
323 for (n = 1; n <= ret; n++)
324 dp_strlcpy(remap[n], Cmd_Argv(cmd, n+1), sizeof(*remap));
325#endif
326 return;
327 }
328
329 if (strcasecmp(command, "close") == 0)
330 {
332 return;
333 }
334
335 if (strcasecmp(command, "play") == 0)
336 {
338 return;
339 CDAudio_Play_byName(Cmd_Argv(cmd, 2), false, true, (Cmd_Argc(cmd) > 3) ? atof( Cmd_Argv(cmd, 3) ) : 0);
340 return;
341 }
342
343 if (strcasecmp(command, "loop") == 0)
344 {
346 return;
347 CDAudio_Play_byName(Cmd_Argv(cmd, 2), true, true, (Cmd_Argc(cmd) > 3) ? atof( Cmd_Argv(cmd, 3) ) : 0);
348 return;
349 }
350
351 if (strcasecmp(command, "stop") == 0)
352 {
354 return;
355 CDAudio_Stop();
356 return;
357 }
358
359 if (strcasecmp(command, "pause") == 0)
360 {
362 return;
364 return;
365 }
366
367 if (strcasecmp(command, "resume") == 0)
368 {
370 return;
372 return;
373 }
374
375 if (strcasecmp(command, "eject") == 0)
376 {
377 if (faketrack == -1)
378 CDAudio_Stop();
380 return;
381 }
382
383 if (strcasecmp(command, "info") == 0)
384 {
386 if (cdPlaying)
387 Con_Printf("Currently %s track %u\n", cdPlayLooping ? "looping" : "playing", cdPlayTrack);
388 else if (wasPlaying)
389 Con_Printf("Paused %s track %u\n", cdPlayLooping ? "looping" : "playing", cdPlayTrack);
390 if (cdvolume >= 0)
391 Con_Printf("Volume is %f\n", cdvolume);
392 else
393 Con_Printf("Can't get CD volume\n");
394 return;
395 }
396
397 Con_Printf("CD commands:\n");
398 Con_Printf("cd on - enables CD audio system\n");
399 Con_Printf("cd off - stops and disables CD audio system\n");
400 Con_Printf("cd reset - resets CD audio system (clears track remapping and re-reads disc information)\n");
401 Con_Printf("cd rescan - rescans disks in drives (to use another disc)\n");
402 Con_Printf("cd remap <remap1> [remap2] [remap3] [...] - chooses emulated CD tracks to play when a map asks for a particular track, this has many uses\n");
403 Con_Printf("cd close - closes CD tray\n");
404 Con_Printf("cd eject - stops playing music and opens CD tray to allow you to change disc\n");
405 Con_Printf("cd play <tracknumber> <startposition> - plays selected track in remapping table\n");
406 Con_Printf("cd loop <tracknumber> <startposition> - plays and repeats selected track in remapping table\n");
407 Con_Printf("cd stop - stops playing current CD track\n");
408 Con_Printf("cd pause - pauses CD playback\n");
409 Con_Printf("cd resume - unpauses CD playback\n");
410 Con_Printf("cd info - prints basic disc information (number of tracks, currently playing track, volume level)\n");
411}
void CDAudio_Resume(void)
Definition cd_shared.c:258
void CDAudio_Stop(void)
Definition cd_shared.c:229
cvar_t music_playlist_index
Definition cd_shared.c:34
static void CDAudio_Play_byName(const char *trackname, qbool looping, qbool tryreal, float startposition)
Definition cd_shared.c:119
static qbool cdPlaying
Definition cd_shared.c:98
static unsigned char cdPlayTrack
Definition cd_shared.c:100
static int faketrack
Definition cd_shared.c:96
int CDAudio_Startup(void)
Definition cd_shared.c:578
static float cdvolume
Definition cd_shared.c:91
static void CDAudio_CloseDoor(void)
Definition cd_shared.c:107
static qbool wasPlaying
Definition cd_shared.c:88
static qbool cdPlayLooping
Definition cd_shared.c:99
static qbool enabled
Definition cd_shared.c:90
void CDAudio_Shutdown(void)
Definition cd_shared.c:590
static filename_t remap[MAXTRACKS]
Definition cd_shared.c:94
void CDAudio_Pause(void)
Definition cd_shared.c:247
static void CDAudio_Eject(void)
Definition cd_shared.c:102
static int CDAudio_GetAudioDiskInfo(void)
Definition cd_shared.c:111
void CL_StartVideo(void)
Definition cl_main.c:2786
static int Cmd_Argc(cmd_state_t *cmd)
Definition cmd.h:249
static const char * Cmd_Argv(cmd_state_t *cmd, int arg)
Cmd_Argv(cmd, ) will return an empty string (not a NULL) if arg > argc, so string operations are alwa...
Definition cmd.h:254
#define dp_strlcpy(dst, src, dsize)
Definition common.h:303
void Con_Printf(const char *fmt,...)
Prints to all appropriate console targets.
Definition console.c:1514
#define n(x, y)
void cmd(string command,...)
#define MAXTRACKS
max CD track index
Definition qdefs.h:142
return ret
int integer
Definition cvar.h:73

References CDAudio_CloseDoor(), CDAudio_Eject(), CDAudio_GetAudioDiskInfo(), CDAudio_Pause(), CDAudio_Play_byName(), CDAudio_Resume(), CDAudio_Shutdown(), CDAudio_Startup(), CDAudio_Stop(), cdPlaying, cdPlayLooping, cdPlayTrack, cdvolume, CL_StartVideo(), cmd(), Cmd_Argc(), Cmd_Argv(), Con_Printf(), dp_strlcpy, enabled, faketrack, cvar_t::integer, MAXTRACKS, music_playlist_index, n, remap, ret, and wasPlaying.

Referenced by CDAudio_Init().

◆ CDAudio_CloseDoor()

static void CDAudio_CloseDoor ( void )
static

Definition at line 107 of file cd_shared.c.

108{
109}

Referenced by CD_f().

◆ CDAudio_Eject()

static void CDAudio_Eject ( void )
static

Definition at line 102 of file cd_shared.c.

103{
104}

Referenced by CD_f().

◆ CDAudio_GetAudioDiskInfo()

static int CDAudio_GetAudioDiskInfo ( void )
static

Definition at line 111 of file cd_shared.c.

112{
113 return -1;
114}

Referenced by CD_f().

◆ CDAudio_GetPosition()

float CDAudio_GetPosition ( void )

Definition at line 220 of file cd_shared.c.

221{
222 if(faketrack != -1)
224 return -1;
225}
float S_GetChannelPosition(unsigned int ch_ind)
Definition snd_main.c:1773

References faketrack, and S_GetChannelPosition().

Referenced by CDAudio_StopPlaylistTrack(), CDAudio_Update(), and VM_gettime().

◆ CDAudio_Init()

int CDAudio_Init ( void )

Definition at line 544 of file cd_shared.c.

545{
546 int i;
547
548 if (cls.state == ca_dedicated)
549 return -1;
550
551// COMMANDLINEOPTION: Sound: -nocdaudio disables CD audio support
552 if (Sys_CheckParm("-nocdaudio"))
553 return -1;
554
555#ifdef MAXTRACKS
556 for (i = 0; i < MAXTRACKS; i++)
557 *remap[i] = 0;
558#endif
559
562 enabled = true;
563
565 for (i = 0;i < MAX_PLAYLISTS;i++)
566 {
571 }
572
573 Cmd_AddCommand(CF_CLIENT | CF_CLIENT_FROM_SERVER, "cd", CD_f, "execute a CD drive command (cd on/off/reset/remap/close/play/loop/stop/pause/resume/eject/info) - use cd by itself for usage");
574
575 return 0;
576}
static void CD_f(cmd_state_t *cmd)
Definition cd_shared.c:267
cvar_t music_playlist_random[MAX_PLAYLISTS]
Definition cd_shared.c:61
cvar_t music_playlist_sampleposition[MAX_PLAYLISTS]
Definition cd_shared.c:74
cvar_t music_playlist_list[MAX_PLAYLISTS]
Definition cd_shared.c:35
#define MAX_PLAYLISTS
Definition cd_shared.c:30
cvar_t cdaudioinitialized
Definition cd_shared.c:28
cvar_t music_playlist_current[MAX_PLAYLISTS]
Definition cd_shared.c:48
client_static_t cls
Definition cl_main.c:116
@ ca_dedicated
Definition client.h:530
void Cmd_AddCommand(unsigned flags, const char *cmd_name, xcommand_t function, const char *description)
called by the init functions of other parts of the program to register commands and functions to call...
Definition cmd.c:1661
#define CF_CLIENT
cvar/command that only the client can change/execute
Definition cmd.h:48
#define CF_CLIENT_FROM_SERVER
command that the server is allowed to execute on the client
Definition cmd.h:50
void Cvar_SetValueQuick(cvar_t *var, float value)
Definition cvar.c:473
void Cvar_RegisterVariable(cvar_t *variable)
registers a cvar that already has the name, string, and optionally the archive elements set.
Definition cvar.c:599
int i
cactive_t state
Definition client.h:568
int Sys_CheckParm(const char *parm)
Definition sys_shared.c:327

References ca_dedicated, CD_f(), cdaudioinitialized, CF_CLIENT, CF_CLIENT_FROM_SERVER, cls, Cmd_AddCommand(), Cvar_RegisterVariable(), Cvar_SetValueQuick(), enabled, i, MAX_PLAYLISTS, MAXTRACKS, music_playlist_current, music_playlist_index, music_playlist_list, music_playlist_random, music_playlist_sampleposition, remap, client_static_t::state, and Sys_CheckParm().

Referenced by S_Init().

◆ CDAudio_Pause()

void CDAudio_Pause ( void )

Definition at line 247 of file cd_shared.c.

248{
249 if (!enabled || !cdPlaying || faketrack == -1)
250 return;
251
254 cdPlaying = false;
255}
qbool S_SetChannelFlag(unsigned int ch_ind, unsigned int flag, qbool value)
Definition snd_main.c:1679
#define CHANNELFLAG_PAUSED
Definition sound.h:41

References cdPlaying, CHANNELFLAG_PAUSED, enabled, faketrack, S_SetChannelFlag(), and wasPlaying.

Referenced by CD_f(), CDAudio_Play_byName(), CDAudio_SetVolume(), and CL_ParseServerMessage().

◆ CDAudio_Play()

void CDAudio_Play ( int track,
qbool looping )

Definition at line 211 of file cd_shared.c.

212{
213 char buf[20];
215 return;
216 dpsnprintf(buf, sizeof(buf), "%d", (int) track);
217 CDAudio_Play_byName(buf, looping, true, 0);
218}
int dpsnprintf(char *buffer, size_t buffersize, const char *format,...)
Returns the number of printed characters, excluding the final '\0' or returns -1 if the buffer isn't ...
Definition common.c:997
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition glquake.h:657

References buf, CDAudio_Play_byName(), dpsnprintf(), cvar_t::integer, and music_playlist_index.

Referenced by CL_ParseServerMessage().

◆ CDAudio_Play_byName()

static void CDAudio_Play_byName ( const char * trackname,
qbool looping,
qbool tryreal,
float startposition )
static

Definition at line 119 of file cd_shared.c.

120{
121 unsigned int track;
122 sfx_t* sfx;
123 char filename[MAX_QPATH];
124
126
127 if (!enabled)
128 return;
129
130 if(tryreal && strspn(trackname, "0123456789") == strlen(trackname))
131 {
132 track = (unsigned int) atoi(trackname);
133#ifdef MAXTRACKS
134 if(track > 0 && track < MAXTRACKS && *remap[track])
135 trackname = remap[track];
136#endif
137 }
138
139 if(tryreal && strspn(trackname, "0123456789") == strlen(trackname))
140 {
141 track = (unsigned int) atoi(trackname);
142 if (track < 1)
143 {
144 Con_DPrintf("CDAudio: Bad track number %u.\n", track);
145 return;
146 }
147 }
148 else
149 track = 0;
150
151 // div0: I assume this code was intentionally there. Maybe turn it into a cvar?
152 if (cdPlaying && cdPlayTrack == track && faketrack == -1)
153 return;
154 CDAudio_Stop ();
155
156 // Try playing a fake track (sound file) first
157 if(track >= 1)
158 {
159 dpsnprintf(filename, sizeof(filename), "sound/cdtracks/track%03u.wav", track);
160 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "sound/cdtracks/track%03u.ogg", track);
161 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "music/track%03u.ogg", track);// added by motorsep
162 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "music/cdtracks/track%03u.ogg", track);// added by motorsep
163 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "sound/cdtracks/track%02u.wav", track);
164 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "sound/cdtracks/track%02u.ogg", track);
165 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "music/track%02u.ogg", track);// added by motorsep
166 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "music/cdtracks/track%02u.ogg", track);// added by motorsep
167 }
168 else
169 {
170 dpsnprintf(filename, sizeof(filename), "%s", trackname);
171 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "%s.wav", trackname);
172 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "%s.ogg", trackname);
173 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "sound/%s", trackname);
174 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "sound/%s.wav", trackname);
175 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "sound/%s.ogg", trackname);
176 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "sound/cdtracks/%s", trackname);
177 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "sound/cdtracks/%s.wav", trackname);
178 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "sound/cdtracks/%s.ogg", trackname);
179 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "music/%s.ogg", trackname); // added by motorsep
180 if (!FS_FileExists(filename)) dpsnprintf(filename, sizeof(filename), "music/cdtracks/%s.ogg", trackname); // added by motorsep
181 }
182 if (FS_FileExists(filename) && (sfx = S_PrecacheSound (filename, false, false)))
183 {
185 if (faketrack != -1)
186 {
187 if(track >= 1)
188 Con_DPrintf ("BGM track %u playing...\n", track);
189 else
190 Con_DPrintf ("BGM track %s playing...\n", trackname);
191 }
192 }
193
194 if (faketrack == -1)
195 {
196 if(track >= 1)
197 Con_DPrintf ("Could not load BGM track %u.\n", track);
198 else
199 Con_DPrintf ("Could not load BGM track %s.\n", trackname);
200 return;
201 }
202
203 cdPlayLooping = looping;
204 cdPlayTrack = track;
205 cdPlaying = true;
206
207 if (cdvolume == 0.0 || bgmvolume.value == 0)
208 CDAudio_Pause ();
209}
void Con_DPrintf(const char *fmt,...)
A Con_Printf that only shows up if the "developer" cvar is set.
Definition console.c:1544
static int(ZEXPORT *qz_inflate)(z_stream *strm
const char * FS_FileExists(const char *filename)
Look for a file in the packages and in the filesystem Returns its canonical name (same case as used i...
Definition fs.c:3693
vec3_t vec3_origin
Definition mathlib.c:26
float strlen(string s)
#define MAX_QPATH
max length of a quake game pathname
Definition qdefs.h:169
cvar_t bgmvolume
Definition snd_main.c:165
int S_StartSound_StartPosition_Flags(int entnum, int entchannel, sfx_t *sfx, vec3_t origin, float fvol, float attenuation, float startposition, int flags, float fspeed)
Definition snd_main.c:1571
sfx_t * S_PrecacheSound(const char *name, qbool complain, qbool levelsound)
Definition snd_main.c:1048
#define CHANNELFLAG_LOCALSOUND
Definition sound.h:40
#define CHANNELFLAG_FORCELOOP
Definition sound.h:39
#define CHANNELFLAG_FULLVOLUME
Definition sound.h:42
float value
Definition cvar.h:74

References bgmvolume, CDAudio_Pause(), CDAudio_Stop(), cdPlaying, cdPlayLooping, cdPlayTrack, cdvolume, CHANNELFLAG_FORCELOOP, CHANNELFLAG_FULLVOLUME, CHANNELFLAG_LOCALSOUND, CL_StartVideo(), Con_DPrintf(), dpsnprintf(), enabled, faketrack, FS_FileExists(), int(), MAX_QPATH, MAXTRACKS, remap, S_PrecacheSound(), S_StartSound_StartPosition_Flags(), strlen(), cvar_t::value, and vec3_origin.

Referenced by CD_f(), CDAudio_Play(), and CDAudio_StartPlaylist().

◆ CDAudio_Resume()

void CDAudio_Resume ( void )

Definition at line 258 of file cd_shared.c.

259{
260 if (!enabled || cdPlaying || !wasPlaying || faketrack == -1)
261 return;
262
264 cdPlaying = true;
265}

References cdPlaying, CHANNELFLAG_PAUSED, enabled, faketrack, S_SetChannelFlag(), and wasPlaying.

Referenced by CD_f(), CDAudio_SetVolume(), and CL_ParseServerMessage().

◆ CDAudio_SetVolume()

static void CDAudio_SetVolume ( float newvol)
static

Definition at line 413 of file cd_shared.c.

414{
415 // If the volume hasn't changed
416 if (newvol == cdvolume)
417 return;
418
419 // If the CD has been muted
420 if (newvol <= 0.0f)
421 CDAudio_Pause ();
422 else
423 {
424 // If the CD has been unmuted
425 if (cdvolume <= 0.0f)
427
428 if (faketrack != -1)
430 }
431
432 cdvolume = newvol;
433}
void S_SetChannelVolume(unsigned int ch_ind, float fvol)
Definition snd_main.c:1763

References CDAudio_Pause(), CDAudio_Resume(), cdvolume, faketrack, and S_SetChannelVolume().

Referenced by CDAudio_Update().

◆ CDAudio_Shutdown()

void CDAudio_Shutdown ( void )

Definition at line 590 of file cd_shared.c.

591{
592 if (!initialized)
593 return;
594
595 CDAudio_Stop();
596 initialized = false;
597}
static qbool initialized
Definition cd_shared.c:89

References CDAudio_Stop(), and initialized.

Referenced by CD_f(), and S_Shutdown().

◆ CDAudio_StartPlaylist()

static void CDAudio_StartPlaylist ( qbool resume)
static

Definition at line 447 of file cd_shared.c.

448{
449 const char *list;
450 const char *t;
451 int index;
452 int current;
453 int randomplay;
454 int count;
455 int listindex;
456 float position;
457 char trackname[MAX_QPATH];
458 CDAudio_Stop();
461 {
464 randomplay = music_playlist_random[index].integer;
466 count = 0;
467 trackname[0] = 0;
468 if (list && list[0])
469 {
470 for (t = list;;count++)
471 {
472 if (!COM_ParseToken_Console(&t))
473 break;
474 // if we don't find the desired track, use the first one
475 if (count == 0)
476 dp_strlcpy(trackname, com_token, sizeof(trackname));
477 }
478 }
479 if (count > 0)
480 {
481 // position < 0 means never resume track
482 if (position < 0)
483 position = 0;
484 // advance to next track in playlist if the last one ended
485 if (!resume)
486 {
487 position = 0;
488 current++;
489 if (randomplay)
490 current = (int)lhrandom(0, count);
491 }
492 // wrap playlist position if needed
493 if (current >= count)
494 current = 0;
495 // set current
497 // get the Nth trackname
498 if (current >= 0 && current < count)
499 {
500 for (listindex = 0, t = list;;listindex++)
501 {
502 if (!COM_ParseToken_Console(&t))
503 break;
504 if (listindex == current)
505 {
506 dp_strlcpy(trackname, com_token, sizeof(trackname));
507 break;
508 }
509 }
510 }
511 if (trackname[0])
512 {
513 CDAudio_Play_byName(trackname, false, false, position);
514 if (faketrack != -1)
516 }
517 }
518 }
520}
int music_playlist_active
Definition cd_shared.c:31
int music_playlist_playing
Definition cd_shared.c:32
char com_token[MAX_INPUTLINE]
Definition common.c:39
qbool COM_ParseToken_Console(const char **datapointer)
Definition common.c:819
GLenum GLenum GLsizei count
Definition glquake.h:656
GLuint index
Definition glquake.h:629
#define lhrandom(MIN, MAX)
LadyHavoc: this function never returns exactly MIN or exactly MAX, because of a QuakeC bug in id1 whe...
Definition mathlib.h:48
return position
const char * string
Definition cvar.h:71

References CDAudio_Play_byName(), CDAudio_Stop(), COM_ParseToken_Console(), com_token, count, Cvar_SetValueQuick(), dp_strlcpy, faketrack, index, int(), cvar_t::integer, lhrandom, MAX_QPATH, music_playlist_active, music_playlist_current, music_playlist_index, music_playlist_list, music_playlist_playing, music_playlist_random, music_playlist_sampleposition, position, cvar_t::string, and cvar_t::value.

Referenced by CDAudio_Update().

◆ CDAudio_Startup()

int CDAudio_Startup ( void )

Definition at line 578 of file cd_shared.c.

579{
580 if (Sys_CheckParm("-nocdaudio"))
581 return -1;
582
583 initialized = true;
584
585 Con_Print("CD Audio Initialized\n");
586
587 return 0;
588}
void Con_Print(const char *msg)
Prints to all appropriate console targets, and adds timestamps.
Definition console.c:1504

References Con_Print(), initialized, and Sys_CheckParm().

Referenced by CD_f(), and S_Startup().

◆ CDAudio_Stop()

void CDAudio_Stop ( void )

Definition at line 229 of file cd_shared.c.

230{
231 if (!enabled)
232 return;
233
234 // save the playlist position
236
237 if (faketrack != -1)
238 {
239 S_StopChannel (faketrack, true, true);
240 faketrack = -1;
241 }
242
243 wasPlaying = false;
244 cdPlaying = false;
245}
static void CDAudio_StopPlaylistTrack(void)
Definition cd_shared.c:435
void S_StopChannel(unsigned int channel_ind, qbool lockmutex, qbool freesfx)
Definition snd_main.c:1648

References CDAudio_StopPlaylistTrack(), cdPlaying, enabled, faketrack, S_StopChannel(), and wasPlaying.

Referenced by CD_f(), CDAudio_Play_byName(), CDAudio_Shutdown(), CDAudio_StartPlaylist(), and S_StopAllSounds().

◆ CDAudio_StopPlaylistTrack()

static void CDAudio_StopPlaylistTrack ( void )
static

Definition at line 435 of file cd_shared.c.

436{
438 {
439 // save position for resume
442 }
444 music_playlist_playing = 0; // not playing
445}
float CDAudio_GetPosition(void)
Definition cd_shared.c:220
GLsizei const GLfloat * value
Definition glquake.h:740

References CDAudio_GetPosition(), Cvar_SetValueQuick(), MAX_PLAYLISTS, music_playlist_active, music_playlist_playing, music_playlist_sampleposition, position, and value.

Referenced by CDAudio_Stop().

◆ CDAudio_Update()

void CDAudio_Update ( void )

Definition at line 522 of file cd_shared.c.

523{
524 static int lastplaylist = -1;
525 if (!enabled)
526 return;
527
530 {
531 // this track ended, start a new track from the beginning
533 lastplaylist = music_playlist_index.integer;
534 }
535 else if (lastplaylist != music_playlist_index.integer
537 {
538 // active playlist changed, save position and switch track
540 lastplaylist = music_playlist_index.integer;
541 }
542}
static void CDAudio_StartPlaylist(qbool resume)
Definition cd_shared.c:447
static void CDAudio_SetVolume(float newvol)
Definition cd_shared.c:413

References bgmvolume, CDAudio_GetPosition(), CDAudio_SetVolume(), CDAudio_StartPlaylist(), enabled, cvar_t::integer, music_playlist_index, music_playlist_playing, and cvar_t::value.

Referenced by CL_Frame().

Variable Documentation

◆ cdaudioinitialized

cvar_t cdaudioinitialized = {CF_CLIENT | CF_READONLY,"cdaudioinitialized","0","indicates if CD Audio system is active"}

Definition at line 28 of file cd_shared.c.

28{CF_CLIENT | CF_READONLY,"cdaudioinitialized","0","indicates if CD Audio system is active"};
#define CF_READONLY
cvar cannot be changed from the console or the command buffer, and is considered CF_PERSISTENT
Definition cmd.h:54

Referenced by CDAudio_Init(), and M_Options_Draw().

◆ cdPlaying

qbool cdPlaying = false
static

Definition at line 98 of file cd_shared.c.

Referenced by CD_f(), CDAudio_Pause(), CDAudio_Play_byName(), CDAudio_Resume(), and CDAudio_Stop().

◆ cdPlayLooping

qbool cdPlayLooping = false
static

Definition at line 99 of file cd_shared.c.

Referenced by CD_f(), and CDAudio_Play_byName().

◆ cdPlayTrack

unsigned char cdPlayTrack
static

Definition at line 100 of file cd_shared.c.

Referenced by CD_f(), and CDAudio_Play_byName().

◆ cdvolume

float cdvolume
static

Definition at line 91 of file cd_shared.c.

Referenced by CD_f(), CDAudio_Play_byName(), and CDAudio_SetVolume().

◆ enabled

◆ faketrack

◆ initialized

qbool initialized = false
static

Definition at line 89 of file cd_shared.c.

Referenced by CDAudio_Shutdown(), and CDAudio_Startup().

◆ music_playlist_active

int music_playlist_active = -1

Definition at line 31 of file cd_shared.c.

Referenced by CDAudio_StartPlaylist(), and CDAudio_StopPlaylistTrack().

◆ music_playlist_current

cvar_t music_playlist_current[MAX_PLAYLISTS]
Initial value:
=
{
{CF_CLIENT, "music_playlist_current0", "0", "current track index to play in list"},
{CF_CLIENT, "music_playlist_current1", "0", "current track index to play in list"},
{CF_CLIENT, "music_playlist_current2", "0", "current track index to play in list"},
{CF_CLIENT, "music_playlist_current3", "0", "current track index to play in list"},
{CF_CLIENT, "music_playlist_current4", "0", "current track index to play in list"},
{CF_CLIENT, "music_playlist_current5", "0", "current track index to play in list"},
{CF_CLIENT, "music_playlist_current6", "0", "current track index to play in list"},
{CF_CLIENT, "music_playlist_current7", "0", "current track index to play in list"},
{CF_CLIENT, "music_playlist_current8", "0", "current track index to play in list"},
{CF_CLIENT, "music_playlist_current9", "0", "current track index to play in list"},
}

Definition at line 48 of file cd_shared.c.

49{
50 {CF_CLIENT, "music_playlist_current0", "0", "current track index to play in list"},
51 {CF_CLIENT, "music_playlist_current1", "0", "current track index to play in list"},
52 {CF_CLIENT, "music_playlist_current2", "0", "current track index to play in list"},
53 {CF_CLIENT, "music_playlist_current3", "0", "current track index to play in list"},
54 {CF_CLIENT, "music_playlist_current4", "0", "current track index to play in list"},
55 {CF_CLIENT, "music_playlist_current5", "0", "current track index to play in list"},
56 {CF_CLIENT, "music_playlist_current6", "0", "current track index to play in list"},
57 {CF_CLIENT, "music_playlist_current7", "0", "current track index to play in list"},
58 {CF_CLIENT, "music_playlist_current8", "0", "current track index to play in list"},
59 {CF_CLIENT, "music_playlist_current9", "0", "current track index to play in list"},
60};

Referenced by CDAudio_Init(), and CDAudio_StartPlaylist().

◆ music_playlist_index

cvar_t music_playlist_index = {CF_CLIENT, "music_playlist_index", "-1", "selects which of the music_playlist_ variables is the active one, -1 disables playlists"}

Definition at line 34 of file cd_shared.c.

34{CF_CLIENT, "music_playlist_index", "-1", "selects which of the music_playlist_ variables is the active one, -1 disables playlists"};

Referenced by CD_f(), CDAudio_Init(), CDAudio_Play(), CDAudio_StartPlaylist(), and CDAudio_Update().

◆ music_playlist_list

cvar_t music_playlist_list[MAX_PLAYLISTS]
Initial value:
=
{
{CF_CLIENT, "music_playlist_list0", "", "list of tracks to play"},
{CF_CLIENT, "music_playlist_list1", "", "list of tracks to play"},
{CF_CLIENT, "music_playlist_list2", "", "list of tracks to play"},
{CF_CLIENT, "music_playlist_list3", "", "list of tracks to play"},
{CF_CLIENT, "music_playlist_list4", "", "list of tracks to play"},
{CF_CLIENT, "music_playlist_list5", "", "list of tracks to play"},
{CF_CLIENT, "music_playlist_list6", "", "list of tracks to play"},
{CF_CLIENT, "music_playlist_list7", "", "list of tracks to play"},
{CF_CLIENT, "music_playlist_list8", "", "list of tracks to play"},
{CF_CLIENT, "music_playlist_list9", "", "list of tracks to play"}
}

Definition at line 35 of file cd_shared.c.

36{
37 {CF_CLIENT, "music_playlist_list0", "", "list of tracks to play"},
38 {CF_CLIENT, "music_playlist_list1", "", "list of tracks to play"},
39 {CF_CLIENT, "music_playlist_list2", "", "list of tracks to play"},
40 {CF_CLIENT, "music_playlist_list3", "", "list of tracks to play"},
41 {CF_CLIENT, "music_playlist_list4", "", "list of tracks to play"},
42 {CF_CLIENT, "music_playlist_list5", "", "list of tracks to play"},
43 {CF_CLIENT, "music_playlist_list6", "", "list of tracks to play"},
44 {CF_CLIENT, "music_playlist_list7", "", "list of tracks to play"},
45 {CF_CLIENT, "music_playlist_list8", "", "list of tracks to play"},
46 {CF_CLIENT, "music_playlist_list9", "", "list of tracks to play"}
47};

Referenced by CDAudio_Init(), and CDAudio_StartPlaylist().

◆ music_playlist_playing

int music_playlist_playing = 0

Definition at line 32 of file cd_shared.c.

Referenced by CDAudio_StartPlaylist(), CDAudio_StopPlaylistTrack(), and CDAudio_Update().

◆ music_playlist_random

cvar_t music_playlist_random[MAX_PLAYLISTS]
Initial value:
=
{
{CF_CLIENT, "music_playlist_random0", "0", "enables random play order if 1, 0 is sequential play"},
{CF_CLIENT, "music_playlist_random1", "0", "enables random play order if 1, 0 is sequential play"},
{CF_CLIENT, "music_playlist_random2", "0", "enables random play order if 1, 0 is sequential play"},
{CF_CLIENT, "music_playlist_random3", "0", "enables random play order if 1, 0 is sequential play"},
{CF_CLIENT, "music_playlist_random4", "0", "enables random play order if 1, 0 is sequential play"},
{CF_CLIENT, "music_playlist_random5", "0", "enables random play order if 1, 0 is sequential play"},
{CF_CLIENT, "music_playlist_random6", "0", "enables random play order if 1, 0 is sequential play"},
{CF_CLIENT, "music_playlist_random7", "0", "enables random play order if 1, 0 is sequential play"},
{CF_CLIENT, "music_playlist_random8", "0", "enables random play order if 1, 0 is sequential play"},
{CF_CLIENT, "music_playlist_random9", "0", "enables random play order if 1, 0 is sequential play"},
}

Definition at line 61 of file cd_shared.c.

62{
63 {CF_CLIENT, "music_playlist_random0", "0", "enables random play order if 1, 0 is sequential play"},
64 {CF_CLIENT, "music_playlist_random1", "0", "enables random play order if 1, 0 is sequential play"},
65 {CF_CLIENT, "music_playlist_random2", "0", "enables random play order if 1, 0 is sequential play"},
66 {CF_CLIENT, "music_playlist_random3", "0", "enables random play order if 1, 0 is sequential play"},
67 {CF_CLIENT, "music_playlist_random4", "0", "enables random play order if 1, 0 is sequential play"},
68 {CF_CLIENT, "music_playlist_random5", "0", "enables random play order if 1, 0 is sequential play"},
69 {CF_CLIENT, "music_playlist_random6", "0", "enables random play order if 1, 0 is sequential play"},
70 {CF_CLIENT, "music_playlist_random7", "0", "enables random play order if 1, 0 is sequential play"},
71 {CF_CLIENT, "music_playlist_random8", "0", "enables random play order if 1, 0 is sequential play"},
72 {CF_CLIENT, "music_playlist_random9", "0", "enables random play order if 1, 0 is sequential play"},
73};

Referenced by CDAudio_Init(), and CDAudio_StartPlaylist().

◆ music_playlist_sampleposition

cvar_t music_playlist_sampleposition[MAX_PLAYLISTS]
Initial value:
=
{
{CF_CLIENT, "music_playlist_sampleposition0", "-1", "resume position for track, -1 restarts every time"},
{CF_CLIENT, "music_playlist_sampleposition1", "-1", "resume position for track, -1 restarts every time"},
{CF_CLIENT, "music_playlist_sampleposition2", "-1", "resume position for track, -1 restarts every time"},
{CF_CLIENT, "music_playlist_sampleposition3", "-1", "resume position for track, -1 restarts every time"},
{CF_CLIENT, "music_playlist_sampleposition4", "-1", "resume position for track, -1 restarts every time"},
{CF_CLIENT, "music_playlist_sampleposition5", "-1", "resume position for track, -1 restarts every time"},
{CF_CLIENT, "music_playlist_sampleposition6", "-1", "resume position for track, -1 restarts every time"},
{CF_CLIENT, "music_playlist_sampleposition7", "-1", "resume position for track, -1 restarts every time"},
{CF_CLIENT, "music_playlist_sampleposition8", "-1", "resume position for track, -1 restarts every time"},
{CF_CLIENT, "music_playlist_sampleposition9", "-1", "resume position for track, -1 restarts every time"},
}

Definition at line 74 of file cd_shared.c.

75{
76 {CF_CLIENT, "music_playlist_sampleposition0", "-1", "resume position for track, -1 restarts every time"},
77 {CF_CLIENT, "music_playlist_sampleposition1", "-1", "resume position for track, -1 restarts every time"},
78 {CF_CLIENT, "music_playlist_sampleposition2", "-1", "resume position for track, -1 restarts every time"},
79 {CF_CLIENT, "music_playlist_sampleposition3", "-1", "resume position for track, -1 restarts every time"},
80 {CF_CLIENT, "music_playlist_sampleposition4", "-1", "resume position for track, -1 restarts every time"},
81 {CF_CLIENT, "music_playlist_sampleposition5", "-1", "resume position for track, -1 restarts every time"},
82 {CF_CLIENT, "music_playlist_sampleposition6", "-1", "resume position for track, -1 restarts every time"},
83 {CF_CLIENT, "music_playlist_sampleposition7", "-1", "resume position for track, -1 restarts every time"},
84 {CF_CLIENT, "music_playlist_sampleposition8", "-1", "resume position for track, -1 restarts every time"},
85 {CF_CLIENT, "music_playlist_sampleposition9", "-1", "resume position for track, -1 restarts every time"},
86};

Referenced by CDAudio_Init(), CDAudio_StartPlaylist(), and CDAudio_StopPlaylistTrack().

◆ remap

filename_t remap[MAXTRACKS]
static

Definition at line 94 of file cd_shared.c.

Referenced by CD_f(), CDAudio_Init(), and CDAudio_Play_byName().

◆ wasPlaying

qbool wasPlaying = false
static

Definition at line 88 of file cd_shared.c.

Referenced by CD_f(), CDAudio_Pause(), CDAudio_Resume(), and CDAudio_Stop().