mirror of
https://github.com/mupen64plus/mupen64plus-oldsvn.git
synced 2025-04-02 10:52:35 -04:00
95 lines
2.2 KiB
C
95 lines
2.2 KiB
C
/**
|
|
* Mupen64 - volume.c
|
|
* Copyright (C) 2002 Hacktarux
|
|
*
|
|
* Mupen64 homepage: http://mupen64.emulation64.com
|
|
* email address: hacktarux@yahoo.fr
|
|
*
|
|
* If you want to contribute to the project please contact
|
|
* me first (maybe someone is already making what you are
|
|
* planning to do).
|
|
*
|
|
*
|
|
* This program is free software; you can redistribute it and/
|
|
* or modify it under the terms of the GNU General Public Li-
|
|
* cence as published by the Free Software Foundation; either
|
|
* version 2 of the Licence, or any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be use-
|
|
* ful, but WITHOUT ANY WARRANTY; without even the implied war-
|
|
* ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
* See the GNU General Public Licence for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public
|
|
* Licence along with this program; if not, write to the Free
|
|
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
|
|
* USA.
|
|
*
|
|
**/
|
|
|
|
/* Sound volume functions.
|
|
*/
|
|
|
|
#include <sys/soundcard.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/ioctl.h>
|
|
#include <fcntl.h>
|
|
#include <stdio.h>
|
|
#include <errno.h>
|
|
|
|
#include "volume.h"
|
|
#include "../main/translate.h"
|
|
|
|
/* volSet
|
|
* Sets volume of left and right PCM channels to given percentage (0-100) value.
|
|
*/
|
|
void volSet(int percent)
|
|
{
|
|
int ret, vol;
|
|
int mixerfd = open("/dev/mixer", O_RDONLY);
|
|
|
|
if(mixerfd < 0)
|
|
{
|
|
perror("/dev/mixer: ");
|
|
return;
|
|
}
|
|
|
|
if(percent > 100)
|
|
percent = 100;
|
|
else if(percent < 0)
|
|
percent = 0;
|
|
|
|
vol = (percent << 8) + percent; // set both left/right channels to same vol
|
|
ret = ioctl(mixerfd, MIXER_WRITE(SOUND_MIXER_PCM), &vol);
|
|
|
|
if(ret < 0)
|
|
perror("Setting PCM volume: ");
|
|
|
|
close(mixerfd);
|
|
}
|
|
|
|
/* volGet
|
|
* Returns volume of PCM channel as a percentage (0-100).
|
|
*/
|
|
int volGet(void)
|
|
{
|
|
int vol, ret;
|
|
int mixerfd = open("/dev/mixer", O_RDONLY);
|
|
|
|
if(mixerfd < 0)
|
|
{
|
|
perror("/dev/mixer: ");
|
|
return;
|
|
}
|
|
|
|
ret = ioctl(mixerfd, MIXER_READ(SOUND_MIXER_PCM), &vol);
|
|
|
|
if(ret < 0)
|
|
perror("Reading PCM volume: ");
|
|
|
|
close(mixerfd);
|
|
|
|
return vol & 0xff; // just return the left channel
|
|
}
|
|
|