$OpenBSD: patch-src_drivers_openbsd_c,v 1.2 2005/10/04 20:16:04 espie Exp $ --- src/drivers/openbsd.c.orig Fri Dec 29 19:08:08 2000 +++ src/drivers/openbsd.c Tue Oct 4 22:12:46 2005 @@ -39,7 +39,6 @@ static void shutdown (void); static void dummy () { } static char *help[] = { - "gain=val", "Audio output gain (0 to 255)", "buffer=val", "Audio buffer size (default is 32768)", NULL }; @@ -75,35 +74,36 @@ struct xmp_drv_info drv_openbsd = { static int setaudio (struct xmp_control *ctl) { audio_info_t ainfo; - int gain = 128; int bsize = 32 * 1024; char *token; char **parm = ctl->parm; parm_init (); - chkparm1 ("gain", gain = atoi (token)); chkparm1 ("buffer", bsize = atoi (token)); parm_end (); - if (gain < AUDIO_MIN_GAIN) - gain = AUDIO_MIN_GAIN; - if (gain > AUDIO_MAX_GAIN) - gain = AUDIO_MAX_GAIN; - AUDIO_INITINFO (&ainfo); + ainfo.mode = AUMODE_PLAY; ainfo.play.sample_rate = ctl->freq; ainfo.play.channels = ctl->outfmt & XMP_FMT_MONO ? 1 : 2; ainfo.play.precision = ctl->resol; ainfo.play.encoding = ctl->resol > 8 ? AUDIO_ENCODING_SLINEAR : AUDIO_ENCODING_ULINEAR; - ainfo.play.gain = gain; ainfo.play.buffer_size = bsize; if (ioctl (audio_fd, AUDIO_SETINFO, &ainfo) == -1) { close (audio_fd); return XMP_ERR_DINIT; } + + ioctl (audio_fd, AUDIO_GETINFO, &ainfo); + ctl->freq = ainfo.play.sample_rate; + if (ainfo.play.channels == 2) + ctl->outfmt &= ~XMP_FMT_MONO; + else + ctl->outfmt |= XMP_FMT_MONO; + ctl->resol = ainfo.play.precision; drv_openbsd.description = "OpenBSD PCM audio"; return XMP_OK;