- Add 'mute' command for testing

- Revamp AUTHORS file

git-svn-id: https://svn.musicpd.org/mpd/trunk@3081 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Avuton Olrich 2005-03-14 02:35:46 +00:00
parent 094746d82d
commit 593e1343da
4 changed files with 152 additions and 7 deletions

23
AUTHORS
View File

@ -1,10 +1,19 @@
Developer -> Warren Dukes <shank@mercury.chem.pitt.edu>
Developer -> tw-nym
audiofile support and command.c cleanup -> normalperson
setuid patch -> Nagilum
'next' and 'previous' patch -> Niklas Hofer
command.c and signal handling cleanup -> mackstann
replayGain -> AliasMrJones
General Development
- Warren Dukes <shank@mercury.chem.pitt.edu>
- tw-nym
- normalperson
'next' and 'previous' command
- Niklas Hofer
'mute' command
- danb
setuid support
- nagilum
replayGain support
- AliasMrJones
libid3tag and libmad copyrighted by Robert Leslie, http://www.underbit.com/products/mad
mp4ff copyrighted by M. Bakker, Ahead Software AG, http://www.nero.com

View File

@ -64,6 +64,7 @@
#define COMMAND_PREVIOUS "previous"
#define COMMAND_LISTALL "listall"
#define COMMAND_VOLUME "volume"
#define COMMAND_MUTE "mute"
#define COMMAND_REPEAT "repeat"
#define COMMAND_RANDOM "random"
#define COMMAND_STATS "stats"
@ -90,6 +91,7 @@
#define COMMAND_NOTCOMMANDS "notcommands"
#define COMMAND_STATUS_VOLUME "volume"
#define COMMAND_STATUS_MUTE "mute"
#define COMMAND_STATUS_STATE "state"
#define COMMAND_STATUS_REPEAT "repeat"
#define COMMAND_STATUS_RANDOM "random"
@ -248,6 +250,7 @@ int commandStatus(FILE * fp, unsigned int * permission, int argArrayLength,
}
myfprintf(fp,"%s: %i\n",COMMAND_STATUS_VOLUME,getVolumeLevel());
myfprintf(fp,"%s: %i\n",COMMAND_STATUS_MUTE,getVolumeMuteStatus());
myfprintf(fp,"%s: %i\n",COMMAND_STATUS_REPEAT,getPlaylistRepeatStatus());
myfprintf(fp,"%s: %i\n",COMMAND_STATUS_RANDOM,getPlaylistRandomStatus());
myfprintf(fp,"%s: %li\n",COMMAND_STATUS_PLAYLIST,getPlaylistVersion());
@ -572,6 +575,20 @@ int handleSetVol(FILE * fp, unsigned int * permission, int argArrayLength,
return changeVolumeLevel(fp,level,0);
}
int handleMute(FILE * fp, unsigned int * permission, int argArrayLength,
char ** argArray)
{
int status;
char * test;
status = strtol(argArray[1],&test,10);
if(*test!='\0') {
commandError(fp, ACK_ERROR_ARG, "need an integer", NULL);
return -1;
}
return setVolumeMuteStatus(fp,status);
}
int handleRepeat(FILE * fp, unsigned int * permission, int argArrayLength,
char ** argArray)
{
@ -942,6 +959,7 @@ void initCommands() {
addCommand(COMMAND_PREVIOUS ,PERMISSION_CONTROL, 0, 0,handlePrevious,NULL);
addCommand(COMMAND_LISTALL ,PERMISSION_READ, 0, 1,handleListAll,NULL);
addCommand(COMMAND_VOLUME ,PERMISSION_CONTROL, 1, 1,handleVolume,NULL);
addCommand(COMMAND_MUTE ,PERMISSION_CONTROL, 1, 1,handleMute,NULL);
addCommand(COMMAND_REPEAT ,PERMISSION_CONTROL, 1, 1,handleRepeat,NULL);
addCommand(COMMAND_RANDOM ,PERMISSION_CONTROL, 1, 1,handleRandom,NULL);
addCommand(COMMAND_STATS ,PERMISSION_READ, 0, 0,handleStats,NULL);

View File

@ -63,6 +63,9 @@ char * volume_mixerDevice = VOLUME_MIXER_DEVICE_DEFAULT;
int volume_softwareSet = 100;
int volume_fakeMuteStatus = 0;
int volume_fakeLastUnmutedLevel = -1;
#ifdef HAVE_OSS
int volume_ossFd;
int volume_ossControl = SOUND_MIXER_PCM;
@ -443,6 +446,9 @@ int changeSoftwareVolume(FILE * fp, int change, int rel) {
}
int changeVolumeLevel(FILE * fp, int change, int rel) {
if(getVolumeMuteStatus())
setVolumeMuteStatus(fp,0);
switch(volume_mixerType) {
#ifdef HAVE_ALSA
case VOLUME_MIXER_TYPE_ALSA:
@ -459,3 +465,111 @@ int changeVolumeLevel(FILE * fp, int change, int rel) {
break;
}
}
int getAlsaVolumeMuteStatus() {
int err;
int status;
if((err = snd_mixer_selem_get_playback_switch(volume_alsaElem,
SND_MIXER_SCHN_FRONT_LEFT,&status))<0) {
WARNING("problems getting alsa mute status: %s\n",
snd_strerror(err));
return -1;
}
return !status;
}
int setAlsaVolumeMuteStatus(FILE * fp, int status) {
int err;
if(status == getVolumeMuteStatus())
return 0;
if((err = snd_mixer_selem_set_playback_switch_all(volume_alsaElem,
!status))<0) {
commandError(fp, ACK_ERROR_SYSTEM, "problems muting volume",
NULL);
WARNING("problems muting alsa volume: %s\n", snd_strerror(err));
return -1;
}
return 0;
}
int getFakeVolumeMuteStatus() {
return volume_fakeMuteStatus;
}
// Fake mute: just drop volume to 0
int setFakeVolumeMuteStatus(FILE * fp, int status) {
// Don't call changeVolumeLevel while volume_fakeMuteStatus is set!
if(status && !getVolumeMuteStatus()) {
// Mute
int ret;
volume_fakeLastUnmutedLevel = getVolumeLevel();
ret = changeVolumeLevel(fp,0,0);
volume_fakeMuteStatus = 1;
return ret;
}
else if(!status && getVolumeMuteStatus()){
// Unmute
volume_fakeMuteStatus = 0;
return changeVolumeLevel(fp,volume_fakeLastUnmutedLevel,0);
}
else {
return 0;
}
}
int getOssVolumeMuteStatus() {
return getFakeVolumeMuteStatus();
}
int setOssVolumeMuteStatus(FILE * fp, int status) {
return setFakeVolumeMuteStatus(fp,status);
}
int getSoftwareVolumeMuteStatus() {
return getFakeVolumeMuteStatus();
}
int setSoftwareVolumeMuteStatus(FILE * fp, int status) {
return setFakeVolumeMuteStatus(fp,status);
}
int getVolumeMuteStatus() {
switch(volume_mixerType) {
#ifdef HAVE_ALSA
case VOLUME_MIXER_TYPE_ALSA:
return getAlsaVolumeMuteStatus();
#endif
#ifdef HAVE_OSS
case VOLUME_MIXER_TYPE_OSS:
return getOssVolumeMuteStatus();
#endif
case VOLUME_MIXER_TYPE_SOFTWARE:
return getSoftwareVolumeMuteStatus();
default:
return 0;
break;
}
}
int setVolumeMuteStatus(FILE * fp, int status) {
switch(volume_mixerType) {
#ifdef HAVE_ALSA
case VOLUME_MIXER_TYPE_ALSA:
return setAlsaVolumeMuteStatus(fp,status);
#endif
#ifdef HAVE_OSS
case VOLUME_MIXER_TYPE_OSS:
return setOssVolumeMuteStatus(fp,status);
#endif
case VOLUME_MIXER_TYPE_SOFTWARE:
return setSoftwareVolumeMuteStatus(fp,status);
default:
return 0;
break;
}
}

View File

@ -37,4 +37,8 @@ int getVolumeLevel();
int changeVolumeLevel(FILE * fp, int change, int rel);
int getVolumeMuteStatus();
int setVolumeMuteStatus(FILE * fp, int status);
#endif