Mercurial > mplayer.hg
changeset 441:c4b4e2aac9de
ups, I missed'em..
author | gabucino |
---|---|
date | Sun, 15 Apr 2001 18:37:07 +0000 |
parents | d19a3da6ac13 |
children | 0828c5d13418 |
files | mixer.c mixer.h |
diffstat | 2 files changed, 110 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mixer.c Sun Apr 15 18:37:07 2001 +0000 @@ -0,0 +1,91 @@ + +#include <string.h> +#include <sys/ioctl.h> +#include <sys/soundcard.h> +#include <fcntl.h> +#include <stdio.h> + +#include "mixer.h" + +#define DEV_MIXER "/dev/mixer" + +char * mixer_device=NULL; +char * devname=NULL; +int mixer_usemaster=0; + +void mixer_getvolume( int *l,int *r ) +{ + int fd,v,cmd,devs; + + if ( !mixer_device ) devname=strdup( DEV_MIXER ); + else devname=strdup( mixer_device ); + fd=open( devname,O_RDONLY ); + free( devname ); + if ( fd != -1 ) + { + ioctl( fd,SOUND_MIXER_READ_DEVMASK,&devs ); + if ( ( devs & SOUND_MASK_PCM ) && ( mixer_usemaster==0 ) ) cmd=SOUND_MIXER_READ_PCM; + else + if ( ( devs & SOUND_MASK_VOLUME ) && ( mixer_usemaster==1 ) ) cmd=SOUND_MIXER_READ_VOLUME; + else + { + close( fd ); + return; + } + ioctl( fd,cmd,&v ); + *r=( v & 0xFF00 ) >> 8; + *l=( v & 0x00FF ); + close( fd ); + } +} + +void mixer_setvolume( int l,int r ) +{ + int fd,v,cmd,devs; + + if ( !mixer_device ) devname=strdup( DEV_MIXER ); + else devname=strdup( mixer_device ); + fd=open( devname,O_RDONLY ); + free( devname ); + if ( fd != -1 ) + { + ioctl( fd,SOUND_MIXER_READ_DEVMASK,&devs ); + if ( ( devs & SOUND_MASK_PCM ) && ( mixer_usemaster==0 ) ) cmd=SOUND_MIXER_WRITE_PCM; + else + if ( ( devs & SOUND_MASK_VOLUME ) && ( mixer_usemaster==1 ) ) cmd=SOUND_MIXER_WRITE_VOLUME; + else + { + close( fd ); + return; + } + v=( r << 8 ) | l; + ioctl( fd,cmd,&v ); + close( fd ); + } +} + +int mixer_l=0; int mixer_r=0; + +void mixer_incvolume( void ) +{ + fprintf( stderr,"[mixer] inc.\n" ); + mixer_getvolume( &mixer_l,&mixer_r ); + if ( mixer_l < 100 ) mixer_l++; + if ( mixer_r < 100 ) mixer_r++; + mixer_setvolume( mixer_l,mixer_r ); +} + +void mixer_decvolume( void ) +{ + fprintf( stderr,"[mixer] dec.\n" ); + mixer_getvolume( &mixer_l,&mixer_r ); + if ( mixer_l > 0 ) mixer_l--; + if ( mixer_r > 0 ) mixer_r--; + mixer_setvolume( mixer_l,mixer_r ); +} + +int mixer_getbothvolume( void ) +{ + mixer_getvolume( &mixer_l,&mixer_r ); + return ( mixer_l + mixer_r ) / 2; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mixer.h Sun Apr 15 18:37:07 2001 +0000 @@ -0,0 +1,19 @@ + +#ifndef __MPLAYER_MIXER +#define __MPLAYER_MIXER + +#define DEV_MIXER "/dev/mixer" + +extern int mixer_usemaster; +extern char * mixer_device; + +extern void mixer_getvolume( int *l,int *r ); +extern void mixer_setvolume( int l,int r ); +extern void mixer_incvolume( void ); +extern void mixer_decvolume( void ); +extern int mixer_getbothvolume( void ); + +//extern void mixer_setbothvolume( int v ); +#define mixer_setbothvolume( v ) mixer_setvolume( v,v ) + +#endif \ No newline at end of file