int audio_fd;
int snd_inited;
-static int tryrates[] = {44100, 22051, 11025, 8000};
+static int tryrates[] = {44100, 22050, 11025, 8000};
qboolean SNDDMA_Init(void)
{
// set sample bits & speed
s = getenv("QUAKE_SOUND_SAMPLEBITS");
if (s)
- shm->samplebits = atoi(s);
+ shm->format.width = atoi(s) / 8;
+// COMMANDLINEOPTION: -sndbits <bits> chooses 8 bit or 16 bit sound output
else if ((i = COM_CheckParm("-sndbits")) != 0)
- shm->samplebits = atoi(com_argv[i+1]);
+ shm->format.width = atoi(com_argv[i+1]) / 8;
- if (shm->samplebits != 16 && shm->samplebits != 8)
+ if (shm->format.width != 2 && shm->format.width != 1)
{
ioctl(audio_fd, SNDCTL_DSP_GETFMTS, &fmt);
if (fmt & format16bit)
- shm->samplebits = 16;
+ shm->format.width = 2;
else if (fmt & AFMT_U8)
- shm->samplebits = 8;
+ shm->format.width = 1;
}
s = getenv("QUAKE_SOUND_SPEED");
if (s)
- shm->speed = atoi(s);
+ shm->format.speed = atoi(s);
+// COMMANDLINEOPTION: -sndspeed <hz> chooses 44100 hz, 22100 hz, or 11025 hz sound output rate
else if ((i = COM_CheckParm("-sndspeed")) != 0)
- shm->speed = atoi(com_argv[i+1]);
+ shm->format.speed = atoi(com_argv[i+1]);
else
{
for (i = 0;i < (int) sizeof(tryrates) / 4;i++)
if (!ioctl(audio_fd, SNDCTL_DSP_SPEED, &tryrates[i]))
break;
- shm->speed = tryrates[i];
+ shm->format.speed = tryrates[i];
}
s = getenv("QUAKE_SOUND_CHANNELS");
if (s)
- shm->channels = atoi(s);
+ shm->format.channels = atoi(s);
+// COMMANDLINEOPTION: -sndmono sets sound output to mono
else if ((i = COM_CheckParm("-sndmono")) != 0)
- shm->channels = 1;
+ shm->format.channels = 1;
+// COMMANDLINEOPTION: -sndstereo sets sound output to stereo
else if ((i = COM_CheckParm("-sndstereo")) != 0)
- shm->channels = 2;
+ shm->format.channels = 2;
else
- shm->channels = 2;
+ shm->format.channels = 2;
- shm->samples = info.fragstotal * info.fragsize / (shm->samplebits/8);
+ shm->samples = info.fragstotal * info.fragsize / shm->format.width;
// memory map the dma buffer
shm->bufferlength = info.fragstotal * info.fragsize;
}
tmp = 0;
- if (shm->channels == 2)
+ if (shm->format.channels == 2)
tmp = 1;
rc = ioctl(audio_fd, SNDCTL_DSP_STEREO, &tmp);
if (rc < 0)
{
perror("/dev/dsp");
- Con_Printf("Could not set /dev/dsp to stereo=%d\n", shm->channels);
+ Con_Printf("Could not set /dev/dsp to stereo=%d\n", shm->format.channels);
close(audio_fd);
return 0;
}
if (tmp)
- shm->channels = 2;
+ shm->format.channels = 2;
else
- shm->channels = 1;
+ shm->format.channels = 1;
- rc = ioctl(audio_fd, SNDCTL_DSP_SPEED, &shm->speed);
+ rc = ioctl(audio_fd, SNDCTL_DSP_SPEED, &shm->format.speed);
if (rc < 0)
{
perror("/dev/dsp");
- Con_Printf("Could not set /dev/dsp speed to %d\n", shm->speed);
+ Con_Printf("Could not set /dev/dsp speed to %d\n", shm->format.speed);
close(audio_fd);
return 0;
}
- if (shm->samplebits == 16)
+ if (shm->format.width == 2)
{
rc = format16bit;
rc = ioctl(audio_fd, SNDCTL_DSP_SETFMT, &rc);
return 0;
}
}
- else if (shm->samplebits == 8)
+ else if (shm->format.width == 1)
{
rc = AFMT_U8;
rc = ioctl(audio_fd, SNDCTL_DSP_SETFMT, &rc);
else
{
perror("/dev/dsp");
- Con_Printf("%d-bit sound not supported.\n", shm->samplebits);
+ Con_Printf("%d-bit sound not supported.\n", shm->format.width * 8);
close(audio_fd);
return 0;
}
snd_inited = 0;
return 0;
}
- shm->samplepos = count.ptr / (shm->samplebits / 8);
+ shm->samplepos = count.ptr / shm->format.width;
return shm->samplepos;
}