1/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ 2 3using GLib; 4using Gtk; 5 6public class Main : Object 7{ 8 /* 9 * Uncomment this line when you are done testing and building a tarball 10 * or installing 11 */ 12 //const string UI_FILE = Config.PACKAGE_DATA_DIR + "/" + "guitar_tuner.ui"; 13 const string UI_FILE = "src/guitar_tuner.ui"; 14 15 Gst.Element sink; 16 Gst.Element source; 17 Gst.Pipeline pipeline; 18 19 [CCode (instance_pos=-1)] 20 public void on_button_clicked (Gtk.Button sender) { 21 var label = sender.get_child () as Gtk.Label; 22 switch (label.get_label()) { 23 case "E": 24 play_sound (329.63); 25 break; 26 case "A": 27 play_sound (440); 28 break; 29 case "D": 30 play_sound (587.33); 31 break; 32 case "G": 33 play_sound (783.99); 34 break; 35 case "B": 36 play_sound (987.77); 37 break; 38 case "e": 39 play_sound (1318); 40 break; 41 default: 42 break; 43 } 44 } 45 46 public Main () { 47 try 48 { 49 var builder = new Builder (); 50 builder.add_from_file (UI_FILE); 51 builder.connect_signals (this); 52 53 var window = builder.get_object ("window") as Window; 54 window.show_all (); 55 } 56 catch (Error e) { 57 stderr.printf ("Could not load UI: %s\n", e.message); 58 } 59 } 60 61 [CCode (instance_pos = -1)] 62 public void on_destroy (Window window) { 63 Gtk.main_quit(); 64 } 65 66 private void play_sound(double frequency) { 67 pipeline = new Gst.Pipeline ("note"); 68 source = Gst.ElementFactory.make ("audiotestsrc", 69 "source"); 70 sink = Gst.ElementFactory.make ("autoaudiosink", 71 "output"); 72 73 /* set frequency */ 74 source.set ("freq", frequency); 75 76 pipeline.add (source); 77 pipeline.add (sink); 78 source.link (sink); 79 80 pipeline.set_state (Gst.State.PLAYING); 81 82 /* stop it after 200ms */ 83 var time = new TimeoutSource(200); 84 85 time.set_callback(() => { 86 pipeline.set_state (Gst.State.NULL); 87 return false; 88 }); 89 90 time.attach(null); 91 } 92 93 static int main (string[] args) { 94 Gst.init (ref args); 95 Gtk.init (ref args); 96 var app = new Main (); 97 98 Gtk.main (); 99 100 return 0; 101 } 102} 103