comparison mixer.c @ 441:c4b4e2aac9de

ups, I missed'em..
author gabucino
date Sun, 15 Apr 2001 18:37:07 +0000
parents
children a5bfb2cdf70b
comparison
equal deleted inserted replaced
440:d19a3da6ac13 441:c4b4e2aac9de
1
2 #include <string.h>
3 #include <sys/ioctl.h>
4 #include <sys/soundcard.h>
5 #include <fcntl.h>
6 #include <stdio.h>
7
8 #include "mixer.h"
9
10 #define DEV_MIXER "/dev/mixer"
11
12 char * mixer_device=NULL;
13 char * devname=NULL;
14 int mixer_usemaster=0;
15
16 void mixer_getvolume( int *l,int *r )
17 {
18 int fd,v,cmd,devs;
19
20 if ( !mixer_device ) devname=strdup( DEV_MIXER );
21 else devname=strdup( mixer_device );
22 fd=open( devname,O_RDONLY );
23 free( devname );
24 if ( fd != -1 )
25 {
26 ioctl( fd,SOUND_MIXER_READ_DEVMASK,&devs );
27 if ( ( devs & SOUND_MASK_PCM ) && ( mixer_usemaster==0 ) ) cmd=SOUND_MIXER_READ_PCM;
28 else
29 if ( ( devs & SOUND_MASK_VOLUME ) && ( mixer_usemaster==1 ) ) cmd=SOUND_MIXER_READ_VOLUME;
30 else
31 {
32 close( fd );
33 return;
34 }
35 ioctl( fd,cmd,&v );
36 *r=( v & 0xFF00 ) >> 8;
37 *l=( v & 0x00FF );
38 close( fd );
39 }
40 }
41
42 void mixer_setvolume( int l,int r )
43 {
44 int fd,v,cmd,devs;
45
46 if ( !mixer_device ) devname=strdup( DEV_MIXER );
47 else devname=strdup( mixer_device );
48 fd=open( devname,O_RDONLY );
49 free( devname );
50 if ( fd != -1 )
51 {
52 ioctl( fd,SOUND_MIXER_READ_DEVMASK,&devs );
53 if ( ( devs & SOUND_MASK_PCM ) && ( mixer_usemaster==0 ) ) cmd=SOUND_MIXER_WRITE_PCM;
54 else
55 if ( ( devs & SOUND_MASK_VOLUME ) && ( mixer_usemaster==1 ) ) cmd=SOUND_MIXER_WRITE_VOLUME;
56 else
57 {
58 close( fd );
59 return;
60 }
61 v=( r << 8 ) | l;
62 ioctl( fd,cmd,&v );
63 close( fd );
64 }
65 }
66
67 int mixer_l=0; int mixer_r=0;
68
69 void mixer_incvolume( void )
70 {
71 fprintf( stderr,"[mixer] inc.\n" );
72 mixer_getvolume( &mixer_l,&mixer_r );
73 if ( mixer_l < 100 ) mixer_l++;
74 if ( mixer_r < 100 ) mixer_r++;
75 mixer_setvolume( mixer_l,mixer_r );
76 }
77
78 void mixer_decvolume( void )
79 {
80 fprintf( stderr,"[mixer] dec.\n" );
81 mixer_getvolume( &mixer_l,&mixer_r );
82 if ( mixer_l > 0 ) mixer_l--;
83 if ( mixer_r > 0 ) mixer_r--;
84 mixer_setvolume( mixer_l,mixer_r );
85 }
86
87 int mixer_getbothvolume( void )
88 {
89 mixer_getvolume( &mixer_l,&mixer_r );
90 return ( mixer_l + mixer_r ) / 2;
91 }