/* *----------------------------------------------------------------------------- * * $Log: linux.c,v $ * * Revision 2.0 1999/01/24 00:52:12 Andre Wertmann * changed to work with Heretic * * Revision 1.4 1998/06/23 12:21:38 rafaj * included missing * * Revision 1.3 1997/01/26 07:45:01 b1 * 2nd formatting run, fixed a few warnings as well. * * Revision 1.2 1997/01/21 19:00:01 b1 * First formatting run: * using Emacs cc-mode.el indentation for C++ now. * * Revision 1.1 1997/01/19 17:22:45 b1 * Initial check in DOOM sources as of Jan. 10th, 1997 * * * DESCRIPTION: * UNIX, soundserver for Linux i386. * *----------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include "soundsrv.h" int audio_fd; void myioctl( int fd, int command, int* arg ) { int rc; /* extern int errno;*/ rc = ioctl(fd, command, arg); if (rc < 0) { fprintf(stderr, "ioctl(dsp,%d,arg) failed\n", command); fprintf(stderr, "errno=%d\n", errno); exit(-1); } } void I_InitMusic(void) { } void I_InitSound( int samplerate, int samplesize ) { int i; audio_fd = open("/dev/dsp", O_WRONLY); if (audio_fd<0) fprintf(stderr, "Could not open /dev/dsp\n"); i = 11 | (2<<16); myioctl(audio_fd, SNDCTL_DSP_SETFRAGMENT, &i); myioctl(audio_fd, SNDCTL_DSP_RESET, 0); i=11025; myioctl(audio_fd, SNDCTL_DSP_SPEED, &i); i=1; myioctl(audio_fd, SNDCTL_DSP_STEREO, &i); myioctl(audio_fd, SNDCTL_DSP_GETFMTS, &i); if (i&=AFMT_S16_LE) myioctl(audio_fd, SNDCTL_DSP_SETFMT, &i); else fprintf(stderr, "Could not play signed 16 data\n"); } void I_SubmitOutputBuffer( void* samples, int samplecount ) { write(audio_fd, samples, samplecount*4); } void I_ShutdownSound(void) { close(audio_fd); } void I_ShutdownMusic(void) { }