コード例 #1
0
ファイル: eq.c プロジェクト: mantaraya36/xmms2-mantaraya36
static void
xmms_eq_gain_changed (xmms_object_t *object, xmmsv_t *_data,
                      gpointer userdata)
{
	xmms_config_property_t *val;
	xmms_equalizer_data_t *priv;
	const gchar *name;
	gint i;
	gfloat gain;

	g_return_if_fail (object);
	g_return_if_fail (userdata);

        val = (xmms_config_property_t *) object;
	priv = userdata;

	name = xmms_config_property_get_name (val);

	XMMS_DBG ("gain value changed! %s => %f", name,
	          xmms_config_property_get_float (val));

	gain = xmms_config_property_get_float (val);
	if (gain < -20.0 || gain > 20.0) {
		gchar buf[20];

		gain = CLAMP (gain, -20.0, 20.0);
		g_snprintf (buf, sizeof (buf), "%g", gain);

		xmms_config_property_set_data (val, buf);
	}

	/* we are passed the full config key, not just the last token,
	 * which makes this code kinda ugly.
	 * fix when bug 97 has been resolved
	 */
	name = strrchr (name, '.') + 1;

	if (!strcmp (name, "preamp")) {
		/* scale the -20.0 - 20.0 value to correct one */
		for (i=0; i<EQ_CHANNELS; i++) {
			set_preamp (i, xmms_eq_gain_scale (gain, TRUE));
		}
	} else {
		gint band = -1;

		if (!strncmp (name, "gain", 4) && !priv->use_legacy) {
			band = atoi (name + 4);
		} else if (!strncmp (name, "legacy", 6) && priv->use_legacy) {
			band = atoi (name + 6);
		}

		if (band >= 0) {
			/* scale the -20.0 - 20.0 value to correct one */
			for (i=0; i<EQ_CHANNELS; i++) {
				set_gain (band, i, xmms_eq_gain_scale (gain, FALSE));
			}
		}
	}
}
コード例 #2
0
void set_eq_value(float value, int index, int chn)
{
    /* Map the gain and preamp values */
    if (index >= 0)
	{
        set_gain(index, chn, 2.5220207857061455181125E-01 * exp(8.0178361802353992349168E-02 * value) - 2.5220207852836562523180E-01 , value);
	}
    else
	{
        /* -12dB .. 12dB mapping */
        set_preamp(chn, 9.9999946497217584440165E-01 * exp(6.9314738656671842642609E-02 * value) + 3.7119444716771825623636E-07);
	}
}
コード例 #3
0
ファイル: eq.c プロジェクト: mantaraya36/xmms2-mantaraya36
static gboolean
xmms_eq_init (xmms_xform_t *xform)
{
	xmms_equalizer_data_t *priv;
	xmms_config_property_t *config;
	gint i, j, srate;
	gfloat gain;

	g_return_val_if_fail (xform, FALSE);

	priv = g_new0 (xmms_equalizer_data_t, 1);
	g_return_val_if_fail (priv, FALSE);

	xmms_xform_private_data_set (xform, priv);

	config = xmms_xform_config_lookup (xform, "enabled");
	g_return_val_if_fail (config, FALSE);
	xmms_config_property_callback_set (config, xmms_eq_config_changed, priv);
	priv->enabled = !!xmms_config_property_get_int (config);

	config = xmms_xform_config_lookup (xform, "bands");
	g_return_val_if_fail (config, FALSE);
	xmms_config_property_callback_set (config, xmms_eq_config_changed, priv);
	priv->bands = xmms_config_property_get_int (config);

	config = xmms_xform_config_lookup (xform, "extra_filtering");
	g_return_val_if_fail (config, FALSE);
	xmms_config_property_callback_set (config, xmms_eq_config_changed, priv);
	priv->extra_filtering = xmms_config_property_get_int (config);

	config = xmms_xform_config_lookup (xform, "use_legacy");
	g_return_val_if_fail (config, FALSE);
	xmms_config_property_callback_set (config, xmms_eq_config_changed, priv);
	priv->use_legacy = xmms_config_property_get_int (config);

	config = xmms_xform_config_lookup (xform, "preamp");
	g_return_val_if_fail (config, FALSE);
	xmms_config_property_callback_set (config, xmms_eq_gain_changed, priv);
	gain = xmms_config_property_get_float (config);

	for (i=0; i<EQ_CHANNELS; i++) {
		set_preamp (i, xmms_eq_gain_scale (gain, TRUE));
	}

	for (i=0; i<EQ_BANDS_LEGACY; i++) {
		gchar buf[16];

		g_snprintf (buf, sizeof (buf), "legacy%d", i);
		config = xmms_xform_config_lookup (xform, buf);
		g_return_val_if_fail (config, FALSE);

		priv->legacy[i] = config;
		xmms_config_property_callback_set (config, xmms_eq_gain_changed, priv);

		gain = xmms_config_property_get_float (config);
		if (priv->use_legacy) {
			for (j = 0; j < EQ_CHANNELS; j++) {
				set_gain (i, j, xmms_eq_gain_scale (gain, FALSE));
			}
		}
	}

	for (i=0; i<EQ_MAX_BANDS; i++) {
		gchar buf[16];

		g_snprintf (buf, sizeof (buf), "gain%02d", i);
		config = xmms_xform_config_lookup (xform, buf);
		g_return_val_if_fail (config, FALSE);

		priv->gain[i] = config;
		xmms_config_property_callback_set (config, xmms_eq_gain_changed, priv);

		gain = xmms_config_property_get_float (config);
		if (!priv->use_legacy) {
			for (j = 0; j < EQ_CHANNELS; j++) {
				set_gain (i, j, xmms_eq_gain_scale (gain, FALSE));
			}
		}
	}

	init_iir ();
	srate = xmms_xform_indata_get_int (xform, XMMS_STREAM_TYPE_FMT_SAMPLERATE);
	if (priv->use_legacy) {
		config_iir (srate, EQ_BANDS_LEGACY, 1);
	} else {
		config_iir (srate, priv->bands, 0);
	}

	xmms_xform_outdata_type_copy (xform);

	XMMS_DBG ("Equalizer initialized successfully!");

	return TRUE;
}