|
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 |
}
|