|
Packit |
1470ea |
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
#include <config.h>
|
|
Packit |
1470ea |
#include <gtk/gtk.h>
|
|
Packit |
1470ea |
#include <gst/gst.h>
|
|
Packit |
1470ea |
#include <glib/gi18n.h>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* For testing purposes, use the local (not installed) ui file */
|
|
Packit |
1470ea |
/* #define UI_FILE PACKAGE_DATA_DIR"/guitar_tuner/ui/guitar_tuner.ui" */
|
|
Packit |
1470ea |
#define UI_FILE "src/guitar_tuner.ui"
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Frequencies of the tones */
|
|
Packit |
1470ea |
#define NOTE_E 329.63
|
|
Packit |
1470ea |
#define NOTE_A 440
|
|
Packit |
1470ea |
#define NOTE_D 587.33
|
|
Packit |
1470ea |
#define NOTE_G 783.99
|
|
Packit |
1470ea |
#define NOTE_B 987.77
|
|
Packit |
1470ea |
#define NOTE_e 1318.5
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
#define LENGTH 500
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
#define WIDGET_WINDOW "window"
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
static gboolean
|
|
Packit |
1470ea |
pipeline_stop (GstElement* pipeline)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
gst_element_set_state (pipeline, GST_STATE_NULL);
|
|
Packit |
1470ea |
g_object_unref (pipeline);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* disconnect handler */
|
|
Packit |
1470ea |
return FALSE;
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
static void
|
|
Packit |
1470ea |
play_sound (gdouble frequency)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
GstElement *source, *sink;
|
|
Packit |
1470ea |
GstElement *pipeline;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
pipeline = gst_pipeline_new ("note");
|
|
Packit |
1470ea |
source = gst_element_factory_make ("audiotestsrc",
|
|
Packit |
1470ea |
"source");
|
|
Packit |
1470ea |
sink = gst_element_factory_make ("autoaudiosink",
|
|
Packit |
1470ea |
"output");
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* set frequency */
|
|
Packit |
1470ea |
g_object_set (source, "freq", frequency, NULL);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
|
|
Packit |
1470ea |
gst_element_link (source, sink);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
gst_element_set_state (pipeline, GST_STATE_PLAYING);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* stop it after 500ms */
|
|
Packit |
1470ea |
g_timeout_add (LENGTH, (GSourceFunc) pipeline_stop, pipeline);
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Callback for the buttons */
|
|
Packit |
1470ea |
void on_button_clicked (GtkButton* button,
|
|
Packit |
1470ea |
gpointer user_data)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
const gchar* text = gtk_button_get_label (button);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
if (g_str_equal (text, _("E")))
|
|
Packit |
1470ea |
play_sound (NOTE_E);
|
|
Packit |
1470ea |
else if (g_str_equal (text, _("A")))
|
|
Packit |
1470ea |
play_sound (NOTE_A);
|
|
Packit |
1470ea |
else if (g_str_equal (text, _("G")))
|
|
Packit |
1470ea |
play_sound (NOTE_G);
|
|
Packit |
1470ea |
else if (g_str_equal (text, _("D")))
|
|
Packit |
1470ea |
play_sound (NOTE_D);
|
|
Packit |
1470ea |
else if (g_str_equal (text, _("B")))
|
|
Packit |
1470ea |
play_sound (NOTE_B);
|
|
Packit |
1470ea |
else if (g_str_equal (text, _("e")))
|
|
Packit |
1470ea |
play_sound (NOTE_e);
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
int
|
|
Packit |
1470ea |
main (int argc, char *argv[])
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
GtkWidget *window;
|
|
Packit |
1470ea |
GtkBuilder *builder;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Initialize gtk+ and gstreamer */
|
|
Packit |
1470ea |
gst_init (&argc, &argv);
|
|
Packit |
1470ea |
gtk_init (&argc, &argv);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
builder = gtk_builder_new ();
|
|
Packit |
1470ea |
gtk_builder_add_from_file (builder, UI_FILE, NULL);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
window = GTK_WIDGET (gtk_builder_get_object (builder, WIDGET_WINDOW));
|
|
Packit |
1470ea |
gtk_builder_connect_signals (builder, NULL);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
gtk_widget_show (window);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
gtk_main ();
|
|
Packit |
1470ea |
return 0;
|
|
Packit |
1470ea |
}
|