Home AMX User Forum AMXForums Archive Threads AMX Hardware Matrix Distributed Audio

Volume Ramping

The volume ramping issue that I've noticed in the standard netlinx module I believe is when coming off of mute. Which makes sense because for some odd reason MA assigns the value of 101 for mute. An accident waiting to happen! I can only assume that in the comm module when the MA returns the 101 vol value the comm module stores that as the current volume level and then and if(vol == 101) mutes button feedback turns on. Now if you push the vol down button and send the command decrement vol -1 now we've acheived 100% volume. Oops! If the MA returns a volume value of 101 it should not be stored as current volume value but as nMA_Mute = 1 or something.

Of course we'll never know what actually goes on in the comm module so this is just an assumption. The only thing I know for sure is that sooner than later some speakers are going to blow and/or some customers are going to be very annoyed from a very loud and rude awakening.

Comments

  • flcusatflcusat Posts: 309
    vining wrote:
    The volume ramping issue that I've noticed in the standard netlinx module I believe is when coming off of mute. Which makes sense because for some odd reason MA assigns the value of 101 for mute. An accident waiting to happen! I can only assume that in the comm module when the MA returns the 101 vol value the comm module stores that as the current volume level and then and if(vol == 101) mutes button feedback turns on. Now if you push the vol down button and send the command decrement vol -1 now we've acheived 100% volume. Oops! If the MA returns a volume value of 101 it should not be stored as current volume value but as nMA_Mute = 1 or something.

    Of course we'll never know what actually goes on in the comm module so this is just an assumption. The only thing I know for sure is that sooner than later some speakers are going to blow and/or some customers are going to be very annoyed from a very loud and rude awakening.

    Vining, which equipment are you making reference to?
  • viningvining Posts: 4,368
    Matrix Audio DAS-MI0608 in conjunction w/ the "standard" netlinx module for the MA.
  • wizardwizard Posts: 2
    Dealing with similar equipment in the past, I just store the volume level internally as a persistent variable and send an absolute volume level with every key press. Let me show you some example code:
    	  CASE VOL_UP:
    		{
    		  IF (nZnVolume[ZN_THEATER] <= 96)
    		  {
    			  nZnVolume[ZN_THEATER] = nZnVolume[ZN_THEATER] + 2;
    			SEND_STRING dvAVRdenon,"'MV',ITOA(nZnVolume[ZN_THEATER]), $0D";
    			Zone[ZN_THEATER].nMute = 0;
    			}
    		}
    	  CASE VOL_DOWN:
    		{
    		  IF (nZnVolume[ZN_THEATER] >= 2)
    		  {
    			  nZnVolume[ZN_THEATER] = nZnVolume[ZN_THEATER] - 2;
    			  Zone[ZN_THEATER].nMute = 0;
    			SEND_STRING dvAVRdenon,"'MV',ITOA(nZnVolume[ZN_THEATER]), $0D";
    			}
    		}
    	  CASE VOL_MUTE:
    	  {
    		 IF (Zone[ZN_THEATER].nMute != 1)  {
    			 SEND_STRING dvAVRdenon, "'MV99', $0D"; // Denon Volume Mute On
    			Zone[ZN_THEATER].nMute = 1;
    			 } else {
    			SEND_STRING dvAVRdenon,"'MV',ITOA(nZnVolume[ZN_THEATER]), $0D"; // Denon Volume Mute Off
    			Zone[ZN_THEATER].nMute = 0;
    		                }
    	  }
    	}
    

    I know that is some spag code, but it does work. If you are looking to get feedback from the device, in your string handler you could do something like this:
    nVlInput = ATOI (sYourBufferWithJustVlLevel);
    IF (nVlInput <= 101 && nVlInput >= 0)
    {
    IF (nVlInput == 101) {
    Zonemute = 1;
    } else {
    Zonevolume = nVlInput;
    Zonemute = 0;
    }
    }
    

    Of course you would want to store your volume levels in some sort of array, and you would want to parse the incoming string for the zone on the switcher as well as put in a switch command for different types of incoming feedback. But that is a start.
Sign In or Register to comment.