Wissen van *.wav *.pitch *.pitchTier
[sgc.git] / signals.c
blob1a58962b69acf5634388f3a64a06812a6adb5a67
1 #include "sgc.h"
3 gdouble upperRegister = 200.0;
5 void setButtonPlay() {
6 GtkWidget *buttonPlay = glade_xml_get_widget(xml, "buttonPlay");
7 if (treevalid) {
8 gchar *string;
9 gchar *path;
11 gtk_tree_model_get(GTK_TREE_MODEL(liststore), &mainIter, COL_TEXT, &string, -1);
12 path = g_strjoin(NULL, RECORDPATH, G_DIR_SEPARATOR_S, string, ".wav", NULL);
14 if (g_access(path, F_OK) == 0) {
15 gtk_widget_set_sensitive(buttonPlay, TRUE);
16 } else {
17 gtk_widget_set_sensitive(buttonPlay, FALSE);
19 g_free(path);
20 g_free(string);
21 } else {
22 gtk_widget_set_sensitive(buttonPlay, FALSE);
26 gboolean setButtonsTrue() {
27 GtkWidget *buttonRecord = glade_xml_get_widget(xml, "buttonRecord");
28 GtkWidget *buttonExample = glade_xml_get_widget(xml, "buttonExample");
30 GtkWidget *drawingareaPitch = glade_xml_get_widget(xml, "drawingareaPitch");
31 gchar *feedbackTXT;
32 gchar *contents;
35 gtk_widget_set_sensitive(buttonRecord, TRUE);
36 setButtonPlay();
37 gtk_widget_set_sensitive(buttonExample, TRUE);
39 gtk_widget_queue_draw(drawingareaPitch);
41 feedbackTXT = g_build_filename(SCRIPTPATH, G_DIR_SEPARATOR_S, "feedback.txt", NULL);
43 if (g_file_get_contents(feedbackTXT, &contents, NULL, NULL) == TRUE) {
44 g_debug("Sets label!\n");
45 GtkWidget *label = glade_xml_get_widget(xml, "labelFeedback");
46 gtk_label_set_text(GTK_LABEL(label), contents);
47 g_debug("Label set!\n");
48 g_unlink(feedbackTXT);
50 g_free(feedbackTXT);
52 return FALSE;
55 gboolean setButtonsFalse() {
56 GtkWidget *buttonRecord = glade_xml_get_widget(xml, "buttonRecord");
57 GtkWidget *buttonPlay = glade_xml_get_widget(xml, "buttonPlay");
58 GtkWidget *buttonExample = glade_xml_get_widget(xml, "buttonExample");
59 g_debug("%s welcome!\n", __func__);
61 gtk_widget_set_sensitive(buttonRecord, FALSE);
62 gtk_widget_set_sensitive(buttonPlay, FALSE);
63 gtk_widget_set_sensitive(buttonExample, FALSE);
65 g_debug("%s bye!\n", __func__);
67 return FALSE;
70 void on_buttonRecord_clicked(GtkWidget *widget, gpointer user_data) {
71 if (treevalid) {
72 gchar *string;
73 gtk_tree_model_get(GTK_TREE_MODEL(liststore), &mainIter, COL_TEXT, &string, -1);
76 if (string == NULL) {
77 GtkWidget *dialog = gtk_message_dialog_new(NULL,
78 GTK_DIALOG_MODAL,
79 GTK_MESSAGE_WARNING,
80 GTK_BUTTONS_OK,
81 "Don't have any (more) tests");
82 gtk_dialog_run (GTK_DIALOG (dialog));
83 gtk_widget_destroy (dialog);
84 /* Nothing to do? */
85 } else {
86 GError *error;
88 /* Start record Thread */
90 g_debug("%s creates record", __func__);
92 if (!g_thread_create((GThreadFunc)record, NULL, FALSE, &error)) {
93 /* GError free? */
94 // g_error ("Failed to create record thread: %s\n", error->message);
97 g_debug("%s is done", __func__);
98 g_free(string);
103 void on_buttonExample_clicked(GtkWidget *widget, gpointer user_data) {
104 /* Play Thread */
105 GError *error;
107 /* Start example Thread */
108 if (!g_thread_create((GThreadFunc)example, widget, FALSE, &error)) {
109 /* GError free? */
110 g_error ("Failed to create example thread: %s\n", error->message);
111 g_error_free (error) ;
116 void on_buttonPlay_clicked(GtkWidget *widget, gpointer user_data) {
117 /* Play Thread */
118 GError *error;
120 /* Start play Thread */
121 if (!g_thread_create((GThreadFunc)play, widget, FALSE, &error)) {
122 /* GError free? */
123 g_error ("Failed to create play thread: %s\n", error->message);
124 g_error_free (error) ;
129 gboolean prev(GtkWidget *previous) {
130 gboolean ret = FALSE;
131 if (treevalid) {
132 /* Code From anchient Sylpheed */
133 GtkTreePath *path;
134 GtkTreeIter prev;
136 path = gtk_tree_model_get_path(GTK_TREE_MODEL(liststore), &mainIter);
138 if ((ret = gtk_tree_path_prev(path)) == TRUE) {
139 gtk_tree_model_get_iter(GTK_TREE_MODEL(liststore), &prev, path);
140 if (previous != NULL) {
141 mainIter = prev;
146 gtk_tree_path_free(path);
150 return ret;
153 gboolean next(GtkWidget *next) {
154 if (treevalid) {
155 if (next != NULL) {
156 return gtk_tree_model_iter_next(GTK_TREE_MODEL(liststore), &mainIter);
157 } else {
158 GtkTreeIter next = mainIter;
159 return gtk_tree_model_iter_next(GTK_TREE_MODEL(liststore), &next);
161 } else {
162 return FALSE;
166 void updateWidgets() {
167 GtkWidget *labelFeedback = glade_xml_get_widget(xml, "labelFeedback");
169 if (treevalid) {
171 gchar *string;
172 gtk_tree_model_get(GTK_TREE_MODEL(liststore), &mainIter, COL_TEXT, &string, -1);
173 GString *label = g_string_new(string);
174 g_string_prepend(label, "<span size=\"xx-large\">");
175 g_string_append(label, "</span>");
176 gtk_label_set_markup(GTK_LABEL(labelFeedback), label->str);
177 g_string_free(label, TRUE);
179 g_free(string);
180 } else {
181 gtk_label_set_markup(GTK_LABEL(labelFeedback), "");
184 gtk_widget_set_sensitive(glade_xml_get_widget(xml, "buttonRecord"), treevalid);
185 gtk_widget_set_sensitive(glade_xml_get_widget(xml, "buttonExample"), treevalid);
186 gtk_widget_set_sensitive(glade_xml_get_widget(xml, "imagemenuitemSave"), treevalid);
187 gtk_widget_set_sensitive(glade_xml_get_widget(xml, "imagemenuitemSaveAs"), treevalid);
189 gtk_widget_set_sensitive(glade_xml_get_widget(xml, "buttonPrevious"), prev(NULL));
190 gtk_widget_set_sensitive(glade_xml_get_widget(xml, "buttonNext"), next(NULL));
192 setButtonPlay();
194 gtk_widget_queue_draw(glade_xml_get_widget(xml, "drawingareaPitch"));
197 void on_Save(GtkWidget *chooser, gpointer user_data) {
198 fileSave(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser)));
201 void on_dialogAdd_close(GtkWidget *button, gpointer user_data) {
202 GtkWidget *buttonAdd = glade_xml_get_widget(xml, "buttonAdd");
203 gtk_widget_hide(gtk_widget_get_toplevel(button));
204 gtk_widget_grab_focus(buttonAdd);
207 void on_menuitemVoice_activate(GtkWidget *widget, gpointer user_data) {
208 const gchar *name = gtk_widget_get_name(widget);
209 GtkWidget *drawingareaPitch = glade_xml_get_widget(xml, "drawingareaPitch");
210 if (g_str_equal(name, "menuitemVoice_Male_Low") == TRUE) upperRegister = 150.0;
211 if (g_str_equal(name, "menuitemVoice_Male") == TRUE) upperRegister = 200.0;
212 if (g_str_equal(name, "menuitemVoice_Female") == TRUE) upperRegister = 300.0;
213 if (g_str_equal(name, "menuitemVoice_Child") == TRUE) upperRegister = 450.0;
214 gtk_widget_queue_draw(drawingareaPitch);
217 void paint (GtkWidget *widget, GdkEventExpose *eev, gpointer data) {
218 if (treevalid) {
219 gchar *string;
220 gtk_tree_model_get(GTK_TREE_MODEL(liststore), &mainIter, COL_TEXT, &string, -1);
222 if (string != NULL) {
223 cairo_t *cr;
224 GString *filename = g_string_sized_new (200);
225 GString *cmd = g_string_sized_new (200);
226 GString *recordedPT = g_string_sized_new(100);
229 g_string_printf(filename, "%s%s%s-%0.f.PitchTier", PITCHPATH, G_DIR_SEPARATOR_S, string, upperRegister);
230 g_string_printf(recordedPT, "%s%s%s.PitchTier", RECORDPATH, G_DIR_SEPARATOR_S, string);
232 if (g_access(filename->str, F_OK) == -1) {
233 /* Eigenlijk wil je de system ranzigheid vervangen door een werkende versie van dit,
234 * maar eigenlijk MOET je gewoon de praat scripts naar C omzetten ;)
235 * gint exit_status;
236 GError *err = NULL;
237 gchar *argv[4];
238 gchar *upper = g_malloc(5);
239 g_ascii_dtostr(upper, 5, upperRegister);
240 argv[0] = NULL;
241 argv[1] = testList[intTestCounter];
242 argv[2] = upper;
243 argv[3] = NULL;
245 g_spawn_sync((const gchar *) SCRIPTPATH, argv, NULL, (GSpawnFlags)(G_SPAWN_SEARCH_PATH | G_SPAWN_FILE_AND_ARGV_ZERO), NULL, NULL, NULL, NULL, &exit_status, &err);*/
246 g_chdir(SCRIPTPATH);
247 g_string_printf(cmd, "%s DrawToneContour.praat %s %0.f", PRAATBIN, string, upperRegister);
248 g_debug("%s", cmd->str);
249 system(cmd->str);
250 g_chdir("..");
253 cr = gdk_cairo_create (widget->window);
254 cairo_set_line_width (cr, 1);
255 cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_NORMAL,
256 CAIRO_FONT_WEIGHT_BOLD);
259 if (g_access(filename->str, F_OK) == 0) {
260 cairo_move_to (cr, 5, 15);
261 cairo_set_source_rgb (cr, 0,0,0);
262 cairo_show_text (cr, "Reference Pitch");
265 drawPitchTier(cr, filename->str,
266 widget->allocation.width,
267 widget->allocation.height, upperRegister + 100.0);
270 //g_debug("%s", recordedPT->str);
272 if (g_access(recordedPT->str, F_OK) == 0) {
273 cairo_move_to (cr, 15, 30);
274 cairo_set_source_rgb (cr, 1,0,0);
275 cairo_show_text (cr, "Your Pitch");
277 drawPitchTier(cr, recordedPT->str,
278 widget->allocation.width,
279 widget->allocation.height, upperRegister + 100.0);
282 g_string_free(recordedPT, TRUE);
283 cairo_destroy (cr);
284 g_string_free(filename, TRUE);
286 g_free(string);