rem: if (function.RtnStatus == ECHOSTATUS_OK) { values[0] = function.Data.iLevel; PRINT(("echo_channel_get_mix iLevel: %d\n", function.Data.iLevel));
add: 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 { values[0] = function[0].Data.bMuteOn ? 1.0 : 0.0; } PRINT(("echo_channel_get_mix iLevel: %d, %d, %d\n", function[0].Data.iLevel, channel.wChannel, channel.dwType));
context: echo_channel_get_mix(void *card, MIXER_AUDIO_CHANNEL channel, int32 type, float *values) {	echo_dev *dev = (echo_dev*) card;	MIXER_FUNCTION function;	INT32 size;	function.Channel = channel;	function.iFunction = type == B_MIX_GAIN ? MXF_GET_LEVEL : MXF_GET_MUTE;	dev->pEG->ProcessMixerFunction(&function, size);	if (function.RtnStatus == ECHOSTATUS_OK) {		values[0] = function.Data.iLevel;		PRINT(("echo_channel_get_mix iLevel: %d\n", function.Data.iLevel));	}}