/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ using GLib; using Gtk; public class Main : Object { /* * Uncomment this line when you are done testing and building a tarball * or installing */ //const string UI_FILE = Config.PACKAGE_DATA_DIR + "/" + "guitar_tuner.ui"; const string UI_FILE = "src/guitar_tuner.ui"; Gst.Element sink; Gst.Element source; Gst.Pipeline pipeline; [CCode (instance_pos=-1)] public void on_button_clicked (Gtk.Button sender) { var label = sender.get_child () as Gtk.Label; switch (label.get_label()) { case "E": play_sound (329.63); break; case "A": play_sound (440); break; case "D": play_sound (587.33); break; case "G": play_sound (783.99); break; case "B": play_sound (987.77); break; case "e": play_sound (1318); break; default: break; } } public Main () { try { var builder = new Builder (); builder.add_from_file (UI_FILE); builder.connect_signals (this); var window = builder.get_object ("window") as Window; window.show_all (); } catch (Error e) { stderr.printf ("Could not load UI: %s\n", e.message); } } [CCode (instance_pos = -1)] public void on_destroy (Window window) { Gtk.main_quit(); } private void play_sound(double frequency) { pipeline = new Gst.Pipeline ("note"); source = Gst.ElementFactory.make ("audiotestsrc", "source"); sink = Gst.ElementFactory.make ("autoaudiosink", "output"); /* set frequency */ source.set ("freq", frequency); pipeline.add (source); pipeline.add (sink); source.link (sink); pipeline.set_state (Gst.State.PLAYING); /* stop it after 200ms */ var time = new TimeoutSource(200); time.set_callback(() => { pipeline.set_state (Gst.State.NULL); return false; }); time.attach(null); } static int main (string[] args) { Gst.init (ref args); Gtk.init (ref args); var app = new Main (); Gtk.main (); return 0; } }