Nederlandse vertaling II
[sgc.git] / signals.c
blob4c29ccd0286b76386da7ac7ef05ad02b15183920
1 #include "sgc.h"
3 gdouble upperRegister = 200.0;
5 gchar * voicepath(gchar *string) {
6 gchar *path = g_strjoin(NULL, base, G_DIR_SEPARATOR_S, string, ".wav", NULL);
7 if (g_access(path, F_OK) != 0) {
8 g_free(path);
9 path = g_strjoin(NULL, PINYINPATH, G_DIR_SEPARATOR_S, string, ".wav", NULL);
11 return path;
15 void setButtonPlay() {
16 GtkWidget *buttonPlay = glade_xml_get_widget(xml, "buttonPlay");
17 if (treevalid) {
18 gchar *string;
19 gchar *path;
21 gtk_tree_model_get(GTK_TREE_MODEL(liststore), &mainIter, COL_TEXT, &string, -1);
22 path = voicepath(string);
24 if (g_access(path, F_OK) == 0) {
25 gtk_widget_set_sensitive(buttonPlay, TRUE);
26 } else {
27 gtk_widget_set_sensitive(buttonPlay, FALSE);
29 g_free(path);
30 g_free(string);
31 } else {
32 gtk_widget_set_sensitive(buttonPlay, FALSE);
36 gboolean setButtonsTrue() {
37 GtkWidget *buttonRecord = glade_xml_get_widget(xml, "buttonRecord");
38 GtkWidget *buttonExample = glade_xml_get_widget(xml, "buttonExample");
40 GtkWidget *drawingareaPitch = glade_xml_get_widget(xml, "drawingareaPitch");
41 gchar *feedbackTXT;
42 gchar *contents;
45 gtk_widget_set_sensitive(buttonRecord, TRUE);
46 setButtonPlay();
47 gtk_widget_set_sensitive(buttonExample, TRUE);
49 gtk_widget_queue_draw(drawingareaPitch);
51 feedbackTXT = g_build_filename(SCRIPTPATH, G_DIR_SEPARATOR_S, "feedback.txt", NULL);
53 if (g_file_get_contents(feedbackTXT, &contents, NULL, NULL) == TRUE) {
54 g_debug("Sets label!\n");
55 GtkWidget *label = glade_xml_get_widget(xml, "labelFeedback");
56 gtk_label_set_text(GTK_LABEL(label), contents);
57 g_debug("Label set!\n");
58 g_unlink(feedbackTXT);
60 g_free(feedbackTXT);
62 return FALSE;
65 gboolean setButtonsFalse() {
66 GtkWidget *buttonRecord = glade_xml_get_widget(xml, "buttonRecord");
67 GtkWidget *buttonPlay = glade_xml_get_widget(xml, "buttonPlay");
68 GtkWidget *buttonExample = glade_xml_get_widget(xml, "buttonExample");
69 // g_debug("%s welcome!\n", __func__);
71 gtk_widget_set_sensitive(buttonRecord, FALSE);
72 gtk_widget_set_sensitive(buttonPlay, FALSE);
73 gtk_widget_set_sensitive(buttonExample, FALSE);
75 // g_debug("%s bye!\n", __func__);
77 return FALSE;
80 void on_buttonRecord_clicked(GtkWidget *widget, gpointer user_data) {
81 if (treevalid) {
82 gchar *string;
83 gtk_tree_model_get(GTK_TREE_MODEL(liststore), &mainIter, COL_TEXT, &string, -1);
86 if (string == NULL) {
87 GtkWidget *dialog = gtk_message_dialog_new(NULL,
88 GTK_DIALOG_MODAL,
89 GTK_MESSAGE_WARNING,
90 GTK_BUTTONS_OK,
91 _("Don't have any (more) tests"));
92 gtk_dialog_run (GTK_DIALOG (dialog));
93 gtk_widget_destroy (dialog);
94 /* Nothing to do? */
95 } else {
96 /* Start record Thread */
98 // g_debug("%s creates record", __func__);
100 g_thread_create((GThreadFunc)record, NULL, FALSE, NULL);
102 // g_debug("%s is done", __func__);
103 g_free(string);
108 void on_buttonExample_clicked(GtkWidget *widget, gpointer user_data) {
109 /* Play Thread */
110 /* Start example Thread */
111 g_thread_create((GThreadFunc)example, widget, FALSE, NULL);
114 void on_buttonPlay_clicked(GtkWidget *widget, gpointer user_data) {
115 /* Play Thread */
116 /* Start play Thread */
117 g_thread_create((GThreadFunc)play, widget, FALSE, NULL);
120 gboolean prev(GtkWidget *previous) {
121 gboolean ret = FALSE;
122 if (treevalid) {
123 /* Code From anchient Sylpheed */
124 GtkTreePath *path;
125 GtkTreeIter prev;
127 path = gtk_tree_model_get_path(GTK_TREE_MODEL(liststore), &mainIter);
129 if ((ret = gtk_tree_path_prev(path)) == TRUE) {
130 gtk_tree_model_get_iter(GTK_TREE_MODEL(liststore), &prev, path);
131 if (previous != NULL) {
132 mainIter = prev;
137 gtk_tree_path_free(path);
141 return ret;
144 gboolean next(GtkWidget *next) {
145 if (treevalid) {
146 if (next != NULL) {
147 return gtk_tree_model_iter_next(GTK_TREE_MODEL(liststore), &mainIter);
148 } else {
149 GtkTreeIter next = mainIter;
150 return gtk_tree_model_iter_next(GTK_TREE_MODEL(liststore), &next);
152 } else {
153 return FALSE;
157 void updateWidgets() {
158 GtkWidget *labelFeedback = glade_xml_get_widget(xml, "labelFeedback");
160 if (treevalid) {
162 gchar *string;
163 gtk_tree_model_get(GTK_TREE_MODEL(liststore), &mainIter, COL_TEXT, &string, -1);
164 GString *label = g_string_new(string);
165 g_string_prepend(label, "<span size=\"xx-large\">");
166 g_string_append(label, "</span>");
167 gtk_label_set_markup(GTK_LABEL(labelFeedback), label->str);
168 g_string_free(label, TRUE);
170 g_free(string);
171 } else {
172 gtk_label_set_markup(GTK_LABEL(labelFeedback), "");
175 gtk_widget_set_sensitive(glade_xml_get_widget(xml, "buttonRecord"), treevalid);
176 gtk_widget_set_sensitive(glade_xml_get_widget(xml, "buttonExample"), treevalid);
177 gtk_widget_set_sensitive(glade_xml_get_widget(xml, "imagemenuitemSave"), treevalid);
178 gtk_widget_set_sensitive(glade_xml_get_widget(xml, "imagemenuitemSaveAs"), treevalid);
180 gtk_widget_set_sensitive(glade_xml_get_widget(xml, "buttonPrevious"), prev(NULL));
181 gtk_widget_set_sensitive(glade_xml_get_widget(xml, "buttonNext"), next(NULL));
183 setButtonPlay();
185 gtk_widget_queue_draw(glade_xml_get_widget(xml, "drawingareaPitch"));
188 void on_Save(GtkWidget *chooser, gpointer user_data) {
189 fileSave(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser)));
192 void on_dialogAdd_close(GtkWidget *button, gpointer user_data) {
193 GtkWidget *buttonAdd = glade_xml_get_widget(xml, "buttonAdd");
194 gtk_widget_hide(gtk_widget_get_toplevel(button));
195 gtk_widget_grab_focus(buttonAdd);
198 void on_menuitemVoice_activate(GtkWidget *widget, gpointer user_data) {
199 const gchar *name = gtk_widget_get_name(widget);
200 GtkWidget *drawingareaPitch = glade_xml_get_widget(xml, "drawingareaPitch");
201 if (g_str_equal(name, "menuitemVoice_Male_Low") == TRUE) upperRegister = 150.0;
202 if (g_str_equal(name, "menuitemVoice_Male") == TRUE) upperRegister = 200.0;
203 if (g_str_equal(name, "menuitemVoice_Female") == TRUE) upperRegister = 300.0;
204 if (g_str_equal(name, "menuitemVoice_Child") == TRUE) upperRegister = 450.0;
205 gtk_widget_queue_draw(drawingareaPitch);
208 void paint (GtkWidget *widget, GdkEventExpose *eev, gpointer data) {
209 if (treevalid) {
210 gchar *string;
211 gtk_tree_model_get(GTK_TREE_MODEL(liststore), &mainIter, COL_TEXT, &string, -1);
213 if (string != NULL) {
214 cairo_t *cr;
215 GString *filename = g_string_sized_new (200);
216 GString *cmd = g_string_sized_new (200);
217 GString *recordedPT = g_string_sized_new(100);
219 #ifdef PITCHTIER
220 g_string_printf(filename, "%s%s%s-%0.f.PitchTier", PITCHPATH, G_DIR_SEPARATOR_S, string, upperRegister);
221 g_string_printf(recordedPT, "%s%s%s.PitchTier", RECORDPATH, G_DIR_SEPARATOR_S, string);
222 #else
223 g_string_printf(filename, "%s%s%s-%0.f.Pitch", PITCHPATH, G_DIR_SEPARATOR_S, string, upperRegister);
224 g_string_printf(recordedPT, "%s%s%s.Pitch", RECORDPATH, G_DIR_SEPARATOR_S, string);
225 #endif
227 if (g_access(filename->str, F_OK) == -1) {
228 /* Eigenlijk wil je de system ranzigheid vervangen door een werkende versie van dit,
229 * maar eigenlijk MOET je gewoon de praat scripts naar C omzetten ;)
230 * gint exit_status;
231 GError *err = NULL;
232 gchar *argv[4];
233 gchar *upper = g_malloc(5);
234 g_ascii_dtostr(upper, 5, upperRegister);
235 argv[0] = NULL;
236 argv[1] = testList[intTestCounter];
237 argv[2] = upper;
238 argv[3] = NULL;
240 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);*/
241 g_chdir(SCRIPTPATH);
242 g_string_printf(cmd, "%s DrawToneContour.praat %s %0.f", PRAATBIN, string, upperRegister);
243 // g_debug("%s", cmd->str);
244 system(cmd->str);
245 g_chdir("..");
248 cr = gdk_cairo_create (widget->window);
249 cairo_set_line_width (cr, 1);
250 cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_NORMAL,
251 CAIRO_FONT_WEIGHT_BOLD);
254 if (g_access(filename->str, F_OK) == 0) {
255 cairo_move_to (cr, 5, 15);
256 cairo_set_source_rgb (cr, 0,0,0);
257 cairo_show_text (cr, _("Reference Pitch"));
260 drawPitchTier(cr, filename->str,
261 widget->allocation.width,
262 widget->allocation.height, upperRegister + 100.0);
265 //g_debug("%s", recordedPT->str);
267 if (g_access(recordedPT->str, F_OK) == 0) {
268 cairo_move_to (cr, 15, 30);
269 cairo_set_source_rgb (cr, 1,0,0);
270 cairo_show_text (cr, _("Your Pitch"));
272 drawPitchTier(cr, recordedPT->str,
273 widget->allocation.width,
274 widget->allocation.height, upperRegister + 100.0);
277 g_string_free(recordedPT, TRUE);
278 cairo_destroy (cr);
279 g_string_free(filename, TRUE);
281 g_free(string);