X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=snd_oss.c;h=eef8e62c9681a851357b69ec8ddba4e79e3b7ee4;hb=390250f388e317c5d3e218d6026d4e9a4d760777;hp=d06e4780b9d14ecdbbfe4b5438f413d116caec43;hpb=ad40941adf0fe050fcc609b588cc05266bf26b84;p=xonotic%2Fdarkplaces.git diff --git a/snd_oss.c b/snd_oss.c index d06e4780..eef8e62c 100644 --- a/snd_oss.c +++ b/snd_oss.c @@ -17,6 +17,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +// OSS module, used by Linux and FreeBSD + #include #include #include @@ -28,6 +31,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include "quakedef.h" +#include "snd_main.h" int audio_fd; int snd_inited; @@ -53,7 +57,7 @@ qboolean SNDDMA_Init(void) snd_inited = 0; // open /dev/dsp, confirm capability to mmap, and get size of dma buffer - audio_fd = open("/dev/dsp", O_RDWR); + audio_fd = open("/dev/dsp", O_RDWR); // we have to open it O_RDWR for mmap if (audio_fd < 0) { perror("/dev/dsp"); @@ -96,6 +100,7 @@ qboolean SNDDMA_Init(void) s = getenv("QUAKE_SOUND_SAMPLEBITS"); if (s) shm->format.width = atoi(s) / 8; +// COMMANDLINEOPTION: Linux OSS Sound: -sndbits chooses 8 bit or 16 bit sound output else if ((i = COM_CheckParm("-sndbits")) != 0) shm->format.width = atoi(com_argv[i+1]) / 8; @@ -111,11 +116,12 @@ qboolean SNDDMA_Init(void) s = getenv("QUAKE_SOUND_SPEED"); if (s) shm->format.speed = atoi(s); +// COMMANDLINEOPTION: Linux OSS Sound: -sndspeed chooses 44100 hz, 22100 hz, or 11025 hz sound output rate else if ((i = COM_CheckParm("-sndspeed")) != 0) shm->format.speed = atoi(com_argv[i+1]); else { - for (i = 0;i < (int) sizeof(tryrates) / 4;i++) + for (i = 0;i < (int) sizeof(tryrates) / (int) sizeof(tryrates[0]);i++) if (!ioctl(audio_fd, SNDCTL_DSP_SPEED, &tryrates[i])) break; @@ -125,42 +131,22 @@ qboolean SNDDMA_Init(void) s = getenv("QUAKE_SOUND_CHANNELS"); if (s) shm->format.channels = atoi(s); +// COMMANDLINEOPTION: Linux OSS Sound: -sndmono sets sound output to mono else if ((i = COM_CheckParm("-sndmono")) != 0) shm->format.channels = 1; - else if ((i = COM_CheckParm("-sndstereo")) != 0) - shm->format.channels = 2; - else +// COMMANDLINEOPTION: Linux OSS Sound: -sndstereo sets sound output to stereo + else // if ((i = COM_CheckParm("-sndstereo")) != 0) shm->format.channels = 2; - shm->samples = info.fragstotal * info.fragsize / shm->format.width; - - // memory map the dma buffer - shm->bufferlength = info.fragstotal * info.fragsize; - shm->buffer = (unsigned char *) mmap(NULL, shm->bufferlength, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, audio_fd, 0); - if (!shm->buffer || shm->buffer == (unsigned char *)-1) - { - perror("/dev/dsp"); - Con_Print("Could not mmap /dev/dsp\n"); - close(audio_fd); - return 0; - } - - tmp = 0; - if (shm->format.channels == 2) - tmp = 1; - + tmp = (shm->format.channels == 2); 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->format.channels); + Con_Printf("Could not set /dev/dsp to stereo=%d\n", tmp); close(audio_fd); return 0; } - if (tmp) - shm->format.channels = 2; - else - shm->format.channels = 1; rc = ioctl(audio_fd, SNDCTL_DSP_SPEED, &shm->format.speed); if (rc < 0) @@ -203,6 +189,19 @@ qboolean SNDDMA_Init(void) return 0; } + shm->samples = info.fragstotal * info.fragsize / shm->format.width; + + // memory map the dma buffer + shm->bufferlength = info.fragstotal * info.fragsize; + shm->buffer = (unsigned char *) mmap(NULL, shm->bufferlength, PROT_WRITE, MAP_FILE|MAP_SHARED, audio_fd, 0); + if (!shm->buffer || shm->buffer == (unsigned char *)-1) + { + perror("/dev/dsp"); + Con_Print("Could not mmap /dev/dsp\n"); + close(audio_fd); + return 0; + } + // toggle the trigger & start her up tmp = 0; rc = ioctl(audio_fd, SNDCTL_DSP_SETTRIGGER, &tmp);