Blame platform-demos/C/guitar-tuner/guitar-tuner.vala

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