Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
float
Mixer::get_control(uint8_t group, uint8_t index)
{
	float	value;

	_control_cb(_cb_handle, group, index, value);

	return value;
}
Ejemplo n.º 3
0
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;
}