/* * Copyright (C) 2003 Jan C. Depner, Steve Harris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * $Id: spectrum.c,v 1.19 2004/10/03 21:44:15 theno23 Exp $ */ #include #include #include #include "support.h" #include "main.h" #include "process.h" #include "gtkmeter.h" #include "gtkmeterscale.h" #include "db.h" static char *band_lbls[BANDS] = { "25.0", "31.5", "40.0", "50.0", "63.0", "80.0", "100", "125", "160", "200", "250", "315", "400", "500", "630", "800", "1k", "1k25", "1k6", "2k", "2k5", "3k1", "4k", "5k", "6k3", "8k", "10k", "10k2", "16k", "20k" }; GtkWidget *make_mini_label(const char *text); static GtkAdjustment *adjustment[BANDS]; static int bin_bands[BINS]; static int band_bin[BANDS]; static gboolean timeout_ret = TRUE; static int spectrum_freq = 10, timeout_countdown = 0; void bind_spectrum() { GtkWidget *root; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *label; GtkWidget *meter; GtkWidget *mscale; int i, bin, band; float band_freq[BANDS]; float band_bin_count[BANDS]; root = lookup_widget(main_window, "spectrum_hbox"); hbox = gtk_hbox_new(TRUE, 0); gtk_box_pack_start(GTK_BOX(root), hbox, FALSE, FALSE, 0); gtk_widget_show(hbox); vbox = gtk_vbox_new(FALSE, 1); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); mscale = gtk_meterscale_new(GTK_METERSCALE_RIGHT, LOWER_SPECTRUM_DB, UPPER_SPECTRUM_DB); gtk_widget_show(mscale); gtk_box_pack_start(GTK_BOX(vbox), mscale, TRUE, TRUE, 0); label = make_mini_label(" "); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); for (i = 0; i < BANDS; i++) { vbox = gtk_vbox_new(FALSE, 1); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); adjustment[i] = GTK_ADJUSTMENT(gtk_adjustment_new(LOWER_SPECTRUM_DB, LOWER_SPECTRUM_DB, UPPER_SPECTRUM_DB, 0.0, 0.0, 0.0)); meter = gtk_meter_new(adjustment[i], GTK_METER_UP); //gtk_widget_set_usize(GTK_WIDGET(meter), 14, -1); gtk_meter_set_warn_point(GTK_METER(meter), 0.0); gtk_widget_show(meter); gtk_box_pack_start(GTK_BOX(vbox), meter, TRUE, TRUE, 0); label = make_mini_label(band_lbls[i]); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); } vbox = gtk_vbox_new(FALSE, 1); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); mscale = gtk_meterscale_new(GTK_METERSCALE_LEFT, LOWER_SPECTRUM_DB, UPPER_SPECTRUM_DB); gtk_widget_show(mscale); gtk_box_pack_start(GTK_BOX(vbox), mscale, TRUE, TRUE, 0); label = make_mini_label(" "); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); /* Calcuate the centre frequency for each band */ for (band=0; band 0) { levels[i] = (single_levels[band_bin[i]] + single_levels[band_bin[i]+1]) * 0.5; } gtk_adjustment_set_value(adjustment[i], lin2db(levels[i])); } } else if (page == 0) { for (i=0; i%s", 6 * PANGO_SCALE, text); gtk_label_set_markup(label, markup); return GTK_WIDGET(label); } /* vi:set ts=8 sts=4 sw=4: */