diff --git a/muted.c b/muted.c index 17cc63bfe67fe118c24dea9d25a18c56438668e3..baeb63e1ab51a0c68356e9c026dfd09fb241a493 100755 --- a/muted.c +++ b/muted.c @@ -378,30 +378,46 @@ static float oldvol = 0; static float mutevol = 0; #endif +#ifndef __Darwin__ static int mutedlevel(int orig, int mutelevel) { int l = orig >> 8; int r = orig & 0xff; l = (float)(mutelevel) * (float)(l) / 100.0; r = (float)(mutelevel) * (float)(r) / 100.0; + return (l << 8) | r; +#else +static float mutedlevel(float orig, float mutelevel) +{ + float master = orig; + master = mutelevel * master / 100.0; + return master; +#endif + } static void mute(void) { #ifndef __Darwin__ int vol; + int start; + int x; #else float vol; + float start = 1.0; + float x; #endif - int start; - int x; vol = getvol(); oldvol = vol; - if (smoothfade) + if (smoothfade) +#ifdef __Darwin__ + start = mutelevel; +#else start = 100; else start = mutelevel; +#endif for (x=start;x>=mutelevel;x-=stepsize) { mutevol = mutedlevel(vol, x); setvol(mutevol); @@ -423,23 +439,31 @@ static void unmute(void) { #ifdef __Darwin__ float vol; + float start; + float x; #else int vol; -#endif int start; int x; +#endif vol = getvol(); if (debug) #ifdef __Darwin__ printf("Unmute from '%f' (should be '%f') to '%f'!\n", vol, mutevol, oldvol); + mutevol = vol; + if (vol == mutevol) { #else printf("Unmute from '%04x' (should be '%04x') to '%04x'!\n", vol, mutevol, oldvol); -#endif if ((int)vol == mutevol) { +#endif if (smoothfade) start = mutelevel; else +#ifdef __Darwin__ + start = 1.0; +#else start = 100; +#endif for (x=start;x<100;x+=stepsize) { mutevol = mutedlevel(oldvol, x); setvol(mutevol);