rem: function[0].iFunction = function[0].iFunction = MXF_GET_MUTE;
add: function[0].iFunction = function[1].iFunction = MXF_GET_MUTE;
context: echo_channel_get_mix(void *card, MIXER_AUDIO_CHANNEL channel, int32 type, float *values) {	echo_dev *dev = (echo_dev*) card;	MIXER_MULTI_FUNCTION multi_function[2];	PMIXER_FUNCTION function = multi_function[0].MixerFunction;	INT32 size = ComputeMixerMultiFunctionSize(2);	function[0].Channel = channel;	function[1].Channel = channel;	function[1].Channel.wChannel++;	switch (type) {	case B_MIX_GAIN:		function[0].iFunction = function[0].iFunction = MXF_GET_LEVEL;		break;	case B_MIX_MUTE:		function[0].iFunction = function[0].iFunction = MXF_GET_MUTE;		break;	case B_MIX_NOMINAL:		function[0].iFunction = function[0].iFunction = MXF_GET_NOMINAL;		break;	}	multi_function[0].iCount = 2;	dev->pEG->ProcessMixerMultiFunction(multi_function, size);	if (function[0].RtnStatus == ECHOSTATUS_OK) {		if (type == B_MIX_GAIN) {			values[0] = (float)function[0].Data.iLevel / 256;			values[1] = (float)function[1].Data.iLevel / 256;		} else if (type == B_MIX_MUTE) {			values[0] = function[0].Data.bMuteOn ? 1.0 : 0.0;		} else {			values[0] = function[0].Data.iNominal == 4 ? 1.0 : 0.0;		}		PRINT(("echo_channel_get_mix iLevel: %d, %d, %d\n", function[0].Data.iLevel, channel.wChannel, channel.dwType));	}}