rem: MIXER_FUNCTION function; INT32 size; function.Channel = channel; function.Data.iLevel = values[0]; function.iFunction = type == B_MIX_GAIN ? MXF_SET_LEVEL : MXF_SET_MUTE; dev->pEG->ProcessMixerFunction(&function, size);
add: 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++; if (type == B_MIX_GAIN) { function[0].Data.iLevel = (int)(values[0] * 256); function[0].iFunction = MXF_SET_LEVEL; function[1].Data.iLevel = (int)(values[1] * 256); function[1].iFunction = MXF_SET_LEVEL; } else { function[0].Data.bMuteOn = values[0] == 1.0; function[0].iFunction = MXF_SET_MUTE; function[1].Data.bMuteOn = values[0] == 1.0; function[1].iFunction = MXF_SET_MUTE; }
context: echo_channel_set_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.Data.iLevel = values[0];        function.iFunction = type == B_MIX_GAIN ? MXF_SET_LEVEL : MXF_SET_MUTE;        dev->pEG->ProcessMixerFunction(&function, size);        if (function.RtnStatus == ECHOSTATUS_OK) {                PRINT(("echo_channel_set_mix OK\n"));        }}