- 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>
|
General Development
|
||||||
Developer -> tw-nym
|
- Warren Dukes <shank@mercury.chem.pitt.edu>
|
||||||
audiofile support and command.c cleanup -> normalperson
|
- tw-nym
|
||||||
setuid patch -> Nagilum
|
- normalperson
|
||||||
'next' and 'previous' patch -> Niklas Hofer
|
|
||||||
command.c and signal handling cleanup -> mackstann
|
'next' and 'previous' command
|
||||||
replayGain -> AliasMrJones
|
- Niklas Hofer
|
||||||
|
|
||||||
|
'mute' command
|
||||||
|
- danb
|
||||||
|
|
||||||
|
setuid support
|
||||||
|
- nagilum
|
||||||
|
|
||||||
|
replayGain support
|
||||||
|
- AliasMrJones
|
||||||
|
|
||||||
libid3tag and libmad copyrighted by Robert Leslie, http://www.underbit.com/products/mad
|
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
|
mp4ff copyrighted by M. Bakker, Ahead Software AG, http://www.nero.com
|
||||||
|
|
|
@ -64,6 +64,7 @@
|
||||||
#define COMMAND_PREVIOUS "previous"
|
#define COMMAND_PREVIOUS "previous"
|
||||||
#define COMMAND_LISTALL "listall"
|
#define COMMAND_LISTALL "listall"
|
||||||
#define COMMAND_VOLUME "volume"
|
#define COMMAND_VOLUME "volume"
|
||||||
|
#define COMMAND_MUTE "mute"
|
||||||
#define COMMAND_REPEAT "repeat"
|
#define COMMAND_REPEAT "repeat"
|
||||||
#define COMMAND_RANDOM "random"
|
#define COMMAND_RANDOM "random"
|
||||||
#define COMMAND_STATS "stats"
|
#define COMMAND_STATS "stats"
|
||||||
|
@ -90,6 +91,7 @@
|
||||||
#define COMMAND_NOTCOMMANDS "notcommands"
|
#define COMMAND_NOTCOMMANDS "notcommands"
|
||||||
|
|
||||||
#define COMMAND_STATUS_VOLUME "volume"
|
#define COMMAND_STATUS_VOLUME "volume"
|
||||||
|
#define COMMAND_STATUS_MUTE "mute"
|
||||||
#define COMMAND_STATUS_STATE "state"
|
#define COMMAND_STATUS_STATE "state"
|
||||||
#define COMMAND_STATUS_REPEAT "repeat"
|
#define COMMAND_STATUS_REPEAT "repeat"
|
||||||
#define COMMAND_STATUS_RANDOM "random"
|
#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_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_REPEAT,getPlaylistRepeatStatus());
|
||||||
myfprintf(fp,"%s: %i\n",COMMAND_STATUS_RANDOM,getPlaylistRandomStatus());
|
myfprintf(fp,"%s: %i\n",COMMAND_STATUS_RANDOM,getPlaylistRandomStatus());
|
||||||
myfprintf(fp,"%s: %li\n",COMMAND_STATUS_PLAYLIST,getPlaylistVersion());
|
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);
|
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,
|
int handleRepeat(FILE * fp, unsigned int * permission, int argArrayLength,
|
||||||
char ** argArray)
|
char ** argArray)
|
||||||
{
|
{
|
||||||
|
@ -942,6 +959,7 @@ void initCommands() {
|
||||||
addCommand(COMMAND_PREVIOUS ,PERMISSION_CONTROL, 0, 0,handlePrevious,NULL);
|
addCommand(COMMAND_PREVIOUS ,PERMISSION_CONTROL, 0, 0,handlePrevious,NULL);
|
||||||
addCommand(COMMAND_LISTALL ,PERMISSION_READ, 0, 1,handleListAll,NULL);
|
addCommand(COMMAND_LISTALL ,PERMISSION_READ, 0, 1,handleListAll,NULL);
|
||||||
addCommand(COMMAND_VOLUME ,PERMISSION_CONTROL, 1, 1,handleVolume,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_REPEAT ,PERMISSION_CONTROL, 1, 1,handleRepeat,NULL);
|
||||||
addCommand(COMMAND_RANDOM ,PERMISSION_CONTROL, 1, 1,handleRandom,NULL);
|
addCommand(COMMAND_RANDOM ,PERMISSION_CONTROL, 1, 1,handleRandom,NULL);
|
||||||
addCommand(COMMAND_STATS ,PERMISSION_READ, 0, 0,handleStats,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_softwareSet = 100;
|
||||||
|
|
||||||
|
int volume_fakeMuteStatus = 0;
|
||||||
|
int volume_fakeLastUnmutedLevel = -1;
|
||||||
|
|
||||||
#ifdef HAVE_OSS
|
#ifdef HAVE_OSS
|
||||||
int volume_ossFd;
|
int volume_ossFd;
|
||||||
int volume_ossControl = SOUND_MIXER_PCM;
|
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) {
|
int changeVolumeLevel(FILE * fp, int change, int rel) {
|
||||||
|
if(getVolumeMuteStatus())
|
||||||
|
setVolumeMuteStatus(fp,0);
|
||||||
|
|
||||||
switch(volume_mixerType) {
|
switch(volume_mixerType) {
|
||||||
#ifdef HAVE_ALSA
|
#ifdef HAVE_ALSA
|
||||||
case VOLUME_MIXER_TYPE_ALSA:
|
case VOLUME_MIXER_TYPE_ALSA:
|
||||||
|
@ -459,3 +465,111 @@ int changeVolumeLevel(FILE * fp, int change, int rel) {
|
||||||
break;
|
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 changeVolumeLevel(FILE * fp, int change, int rel);
|
||||||
|
|
||||||
|
int getVolumeMuteStatus();
|
||||||
|
|
||||||
|
int setVolumeMuteStatus(FILE * fp, int status);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue