diff mixer.c @ 1038:b36fb1ae4b53

applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
author arpi_esp
date Tue, 05 Jun 2001 18:40:44 +0000
parents 72cacd3b8f30
children 0f7be115a4db
line wrap: on
line diff
--- a/mixer.c	Tue Jun 05 16:52:51 2001 +0000
+++ b/mixer.c	Tue Jun 05 18:40:44 2001 +0000
@@ -1,36 +1,34 @@
 
 #include <string.h>
 #include <sys/ioctl.h>
-#ifdef __sun
-#include <sys/audioio.h>
-#else
-#include <sys/soundcard.h>
-#endif
 #include <fcntl.h>
 #include <stdio.h>
 #include <unistd.h>
 
+#include "config.h"
+
+#ifdef USE_OSS_AUDIO
+#include <sys/soundcard.h>
+#endif
+
+#ifdef USE_SUN_AUDIO
+#include <sys/audioio.h>
+#endif
+
 #include "mixer.h"
 
-#ifdef __sun
-char * mixer_device="/dev/audioctl";
-#else
-char * mixer_device="/dev/mixer";
-#endif
+#if	defined(USE_OSS_AUDIO)
+
+char * mixer_device=DEV_MIXER;
 int    mixer_usemaster=0;
 
-void mixer_getvolume( int *l,int *r )
+void mixer_getvolume( float *l,float *r )
 {
  int fd,v,cmd,devs;
 
  fd=open( mixer_device,O_RDONLY );
  if ( fd != -1 )
   {
-#ifdef __sun
-   audio_info_t info;
-   ioctl( fd,AUDIO_GETINFO,&info );
-   *r=*l=(info.play.gain * 100 + (AUDIO_MAX_GAIN-1))/AUDIO_MAX_GAIN;
-#else
    ioctl( fd,SOUND_MIXER_READ_DEVMASK,&devs );
    if ( ( devs & SOUND_MASK_PCM ) && ( mixer_usemaster==0 ) ) cmd=SOUND_MIXER_READ_PCM;
      else
@@ -43,24 +41,17 @@
    ioctl( fd,cmd,&v );
    *r=( v & 0xFF00 ) >> 8;
    *l=( v & 0x00FF );
-#endif
    close( fd );
   }
 }
 
-void mixer_setvolume( int l,int r )
+void mixer_setvolume( float l,float r )
 {
  int fd,v,cmd,devs;
 
  fd=open( mixer_device,O_RDONLY );
  if ( fd != -1 )
   {
-#ifdef __sun
-   audio_info_t info;
-   ioctl( fd,AUDIO_GETINFO,&info );
-   info.play.gain = ((l+r)*AUDIO_MAX_GAIN+199)/200;
-   ioctl( fd,AUDIO_SETINFO,&info );
-#else
    ioctl( fd,SOUND_MIXER_READ_DEVMASK,&devs );
    if ( ( devs & SOUND_MASK_PCM ) && ( mixer_usemaster==0 ) ) cmd=SOUND_MIXER_WRITE_PCM;
      else
@@ -70,33 +61,74 @@
             close( fd );
             return;
            }
-   v=( r << 8 ) | l;
+   v=( (int)r << 8 ) | (int)l;
    ioctl( fd,cmd,&v );
-#endif
+   close( fd );
+  }
+}
+#elif	defined(USE_SUN_AUDIO)
+
+char * mixer_device="/dev/audioctl";
+int    mixer_usemaster=0;
+
+void mixer_getvolume( float *l,float *r )
+{
+ int fd,v,cmd,devs;
+
+ fd=open( mixer_device,O_RDONLY );
+ if ( fd != -1 )
+  {
+   struct audio_info info;
+
+   ioctl( fd,AUDIO_GETINFO,&info);
+   *r=info.play.gain * 100. / AUDIO_MAX_GAIN;
+   *l=info.play.gain * 100. / AUDIO_MAX_GAIN;
    close( fd );
   }
 }
 
-int mixer_l=0; int mixer_r=0;
+void mixer_setvolume( float l,float r )
+{
+ int fd,v,cmd,devs;
+
+ fd=open( mixer_device,O_RDONLY );
+ if ( fd != -1 )
+  {
+   struct audio_info info;
+   AUDIO_INITINFO(&info);
+   info.play.gain = (r+l) * AUDIO_MAX_GAIN / 100 / 2;
+   ioctl( fd,AUDIO_SETINFO,&info );
+   close( fd );
+  }
+}
+#endif
+
 
 void mixer_incvolume( void )
 {
+ float mixer_l, mixer_r;
  mixer_getvolume( &mixer_l,&mixer_r );
- if ( mixer_l < 100 ) mixer_l++;
- if ( mixer_r < 100 ) mixer_r++;
+ mixer_l++;
+ if ( mixer_l > 100 ) mixer_l = 100;
+ mixer_r++;
+ if ( mixer_r > 100 ) mixer_r = 100;
  mixer_setvolume( mixer_l,mixer_r );
 }
 
 void mixer_decvolume( void )
 {
+ float mixer_l, mixer_r;
  mixer_getvolume( &mixer_l,&mixer_r );
- if ( mixer_l > 0 ) mixer_l--;
- if ( mixer_r > 0 ) mixer_r--;
+ mixer_l--;
+ if ( mixer_l < 0 ) mixer_l = 0;
+ mixer_r--;
+ if ( mixer_r < 0 ) mixer_r = 0;
  mixer_setvolume( mixer_l,mixer_r );
 }
 
-int mixer_getbothvolume( void )
+float mixer_getbothvolume( void )
 {
+ float mixer_l, mixer_r;
  mixer_getvolume( &mixer_l,&mixer_r );
  return ( mixer_l + mixer_r ) / 2;
 }