- 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:
parent
094746d82d
commit
593e1343da
23
AUTHORS
23
AUTHORS
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
114
src/volume.c
114
src/volume.c
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,4 +37,8 @@ int getVolumeLevel();
|
|||
|
||||
int changeVolumeLevel(FILE * fp, int change, int rel);
|
||||
|
||||
int getVolumeMuteStatus();
|
||||
|
||||
int setVolumeMuteStatus(FILE * fp, int status);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue