unsigned SimpleMixer::mix(float *outputs, unsigned space) { float sum = 0.0f; if (_info == nullptr) return 0; if (space < 1) return 0; for (unsigned i = 0; i < _info->control_count; i++) { float input; _control_cb(_cb_handle, _info->controls[i].control_group, _info->controls[i].control_index, input); sum += scale(_info->controls[i].scaler, input); } *outputs = scale(_info->output_scaler, sum); return 1; }
float Mixer::get_control(uint8_t group, uint8_t index) { float value; _control_cb(_cb_handle, group, index, value); return value; }
int SimpleMixer::check() { int ret; float junk; /* sanity that presumes that a mixer includes a control no more than once */ /* max of 32 groups due to groups_required API */ if (_pinfo->control_count > 32) { return -2; } /* validate the output scaler */ ret = scale_check(_pinfo->output_scaler); if (ret != 0) { return ret; } /* validate input scalers */ for (unsigned i = 0; i < _pinfo->control_count; i++) { /* verify that we can fetch the control */ if (_control_cb(_cb_handle, _pinfo->controls[i].control_group, _pinfo->controls[i].control_index, junk) != 0) { return -3; } /* validate the scaler */ ret = scale_check(_pinfo->controls[i].scaler); if (ret != 0) { return (10 * i + ret); } } return 0; }