From be153c6d23baf2d8ccb55dc0825edc65ec861249 Mon Sep 17 00:00:00 2001 From: Stefan de Konink Date: Sun, 13 May 2007 07:46:58 +0200 Subject: [PATCH] Configfile + Wordlist patch voor draggen --- Makefile.linuxppc | 4 +- cairo.c | 6 +-- file.c | 34 ++++++++++---- main.c | 12 ++--- praat.c | 133 +++++++++++++++++++++++++++--------------------------- sgc.glade | 22 +++++---- sgc.h | 12 ++++- signals-editor.c | 10 +++- signals.c | 25 ++-------- 9 files changed, 135 insertions(+), 123 deletions(-) diff --git a/Makefile.linuxppc b/Makefile.linuxppc index 037b01e..a35d85d 100644 --- a/Makefile.linuxppc +++ b/Makefile.linuxppc @@ -2,8 +2,8 @@ CC = gcc -O2 -Wall PRAATDIR=../sources_4518 BIN = sgc -SRC = main.c praat.c signals.c signals-realize.c signals-editor.c cairo.c file.c -OBJ = main.o praat.o signals.o signals-realize.o signals-editor.o cairo.o file.o +SRC = main.c praat.c signals.c signals-realize.c signals-editor.c cairo.c file.c config.c +OBJ = main.o praat.o signals.o signals-realize.o signals-editor.o cairo.o file.o config.o CFLAGS := `pkg-config --cflags gtk+-2.0 libglade-2.0 gthread-2.0` \ -DPPC -I$(PRAATDIR)/sys -I$(PRAATDIR)/fon -I$(PRAATDIR)/audio -I$(PRAATDIR)/dwsys -I$(PRAATDIR)/GSL -I$(PRAATDIR)/stat -g diff --git a/cairo.c b/cairo.c index 8e625c6..dfe28eb 100644 --- a/cairo.c +++ b/cairo.c @@ -2,13 +2,9 @@ void drawPitchTier(cairo_t *cr, gchar *filename, gint width, gint height, gdouble top) { gchar *contents; - GError *error = NULL; gsize length; g_debug("%s welcomes %s!", __func__, filename); - if (g_file_get_contents(filename, &contents, &length, &error) != TRUE) { -// g_warning("HET PROBLEEM ZIT IN HET INLEZEN VAN HET %s BESTAND!!!!!\n", filename); - g_warning("%s\n", error->message); - g_error_free(error); + if (g_file_get_contents(filename, &contents, &length, NULL) != TRUE) { } else { gdouble scalex = 0, scaley = 0; gdouble fromx = 0; diff --git a/file.c b/file.c index d0fe5fb..2b3f876 100644 --- a/file.c +++ b/file.c @@ -1,5 +1,8 @@ #include "sgc.h" +gchar *base = NULL; +gchar *file = NULL; + gchar * checkpinyin(gchar *pinyin) { gchar **result; g_ascii_strdown(pinyin, -1); @@ -16,25 +19,36 @@ void clear() { updateWidgets(); } +void setBase(gchar *newbase) { + if (base != NULL) + g_free(base); + + base = newbase; +} + +void setFile(gchar *newfile) { + if (file != NULL) + g_free(file); + + file = newfile; +} + void fileOpen(gchar *filename) { gchar **testList = NULL; gchar *contents; - GError *error = NULL; gsize length; clear(); - if (g_file_get_contents(filename, &contents, &length, &error) != FALSE) { + if (g_file_get_contents(filename, &contents, &length, NULL) != FALSE) { int i = 0; gchar *processed = checkpinyin(contents); testList = g_strsplit(processed, "\n", MAXTESTS); - while ( testList[i] != NULL ) { + while ( testList[i] != NULL) { add_entry(testList[i]); i++; } - } else { - g_error_free(error); } if (testList == NULL) { @@ -47,6 +61,10 @@ void fileOpen(gchar *filename) { updateWidgets(); g_strfreev(testList); + gtk_window_set_title(GTK_WINDOW(glade_xml_get_widget(xml, "windowWordlist")), filename); + + setBase(g_path_get_dirname(filename)); + setFile(g_strdup(filename)); } void fileSave(gchar *filename) { @@ -70,11 +88,9 @@ void fileSave(gchar *filename) { valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(liststore), &iter); } { - GError *error = NULL; - if (g_file_set_contents(filename, contents->str, -1, &error) == FALSE) { - g_error_free(error); - } + g_file_set_contents(filename, contents->str, -1, NULL); + g_string_free(contents, true); } } diff --git a/main.c b/main.c index fce054e..7b60e9a 100644 --- a/main.c +++ b/main.c @@ -12,19 +12,14 @@ int main(int argc, char **argv) g_error("Could not open the GUI!\n"); return -1; } else { - GError *error; - g_thread_init(NULL); /* connect signal handlers */ glade_xml_signal_autoconnect(xml); on_windowMain_realize(NULL, NULL); - - if (!g_thread_create((GThreadFunc)sound_init, NULL, FALSE, &error)) { - g_warning ("Failed to create sound_init thread: %s\n", error->message); - g_error_free(error); - } + + g_thread_create((GThreadFunc)sound_init, NULL, FALSE, NULL); removeRecordings(); @@ -32,6 +27,9 @@ int main(int argc, char **argv) removeRecordings(); + setBase(NULL); + setFile(NULL); + return 0; } } diff --git a/praat.c b/praat.c index d57308a..81e33fd 100644 --- a/praat.c +++ b/praat.c @@ -50,19 +50,25 @@ void playInPraat(gchar *path) { void playVoice() { if (treevalid) { - gchar *string; - gtk_tree_model_get(GTK_TREE_MODEL(liststore), &mainIter, COL_TEXT, &string, -1); - gchar *path = g_strjoin(NULL, PINYINPATH, G_DIR_SEPARATOR_S, string, ".wav", NULL); - playInPraat(path); - g_free(path); - g_free(string); + gchar *string; + gchar *path; + gtk_tree_model_get(GTK_TREE_MODEL(liststore), &mainIter, COL_TEXT, &string, -1); + path = g_strjoin(NULL, PINYINPATH, G_DIR_SEPARATOR_S, base, string, ".wav", NULL); + if (g_access(path, F_OK) != 0) { + g_free(path); + path = g_strjoin(NULL, PINYINPATH, G_DIR_SEPARATOR_S, string, ".wav", NULL); + } + + playInPraat(path); + g_free(path); + g_free(string); } } void playHum() { if (treevalid) { - gchar *string; - gtk_tree_model_get(GTK_TREE_MODEL(liststore), &mainIter, COL_TEXT, &string, -1); + gchar *string; + gtk_tree_model_get(GTK_TREE_MODEL(liststore), &mainIter, COL_TEXT, &string, -1); gchar *path; gchar *upper = g_malloc(4); g_ascii_dtostr(upper, 4, upperRegister); @@ -101,11 +107,11 @@ void playHum() { void playBefore() { - GtkWidget *gimiChinese = glade_xml_get_widget(xml, "checkmenuitemBeforeVoice"); + GtkWidget *gimiVoice = glade_xml_get_widget(xml, "checkmenuitemBeforeVoice"); GtkWidget *gimiHum = glade_xml_get_widget(xml, "checkmenuitemBeforeHum"); - + /* Check play Example */ - if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(gimiChinese))) { + if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(gimiVoice))) { /* Play Voice */ playVoice(); } @@ -117,13 +123,13 @@ void playBefore() { } gpointer example(void *args) { - GtkWidget *gimiChinese = glade_xml_get_widget(xml, "checkmenuitemExampleVoice"); + GtkWidget *gimiVoice = glade_xml_get_widget(xml, "checkmenuitemExampleVoice"); GtkWidget *gimiHum = glade_xml_get_widget(xml, "checkmenuitemExampleHum"); - + g_idle_add(setButtonsFalse, NULL); - + /* Check play Example */ - if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(gimiChinese))) { + if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(gimiVoice))) { /* Play Voice */ playVoice(); } @@ -139,66 +145,59 @@ gpointer example(void *args) { gpointer play(void *args) { if (treevalid) { - gchar *string; - gchar *path; - gtk_tree_model_get(GTK_TREE_MODEL(liststore), &mainIter, COL_TEXT, &string, -1); - g_idle_add(setButtonsFalse, NULL); - path = g_strjoin(NULL, RECORDPATH, G_DIR_SEPARATOR_S, string, ".wav", NULL); - playInPraat(path); - g_free(path); - g_free(string); - g_idle_add(setButtonsTrue, NULL); - g_thread_exit(NULL); + playVoice(); + g_idle_add(setButtonsTrue, NULL); + g_thread_exit(NULL); } } gpointer record(void *args) { if (treevalid) { - gchar *string; - gtk_tree_model_get(GTK_TREE_MODEL(liststore), &mainIter, COL_TEXT, &string, -1); - g_debug("%s %d welcome!\n\n\n", __func__, rand()); - g_idle_add(setButtonsFalse, NULL); - playBefore(); - if (g_access(RECORDPATH, F_OK) == 0) { - Sound melderSoundFromMic = Sound_recordFixedTime (1, 1.0, 0.5, 44100, 5.0); - - if (! melderSoundFromMic) { - g_warning("No sound from praat!\n"); + gchar *string; + gtk_tree_model_get(GTK_TREE_MODEL(liststore), &mainIter, COL_TEXT, &string, -1); + g_debug("%s %d welcome!\n\n\n", __func__, rand()); + g_idle_add(setButtonsFalse, NULL); + playBefore(); + if (g_access(RECORDPATH, F_OK) == 0) { + Sound melderSoundFromMic = Sound_recordFixedTime (1, 1.0, 0.5, 44100, 5.0); + + if (! melderSoundFromMic) { + g_warning("No sound from praat!\n"); + } else { + GString *filename = g_string_sized_new(128); + GString *cmd = g_string_sized_new(128); + gchar *path; + structMelderFile file; + + g_string_printf(filename, "%s.wav", string); + + path = g_build_filename(RECORDPATH, filename->str, NULL); + g_string_free(filename, TRUE); + + Vector_scale(melderSoundFromMic, 0.99); + Melder_pathToFile(path, &file); + Sound_writeToAudioFile16 (melderSoundFromMic, &file, Melder_WAV); + forget(melderSoundFromMic); + + g_chdir(SCRIPTPATH); + g_string_printf(cmd, "%s SGC_ToneProt.praat ..%s%s %s %0.f 3 none 0", PRAATBIN, G_DIR_SEPARATOR_S, path, string, upperRegister); + g_free(path); + g_debug(cmd->str); + g_debug("EXECUTES! "); + system(cmd->str); + g_debug("DONE!\n"); + g_chdir(".."); + g_string_free(cmd, TRUE); + } } else { - GString *filename = g_string_sized_new(128); - GString *cmd = g_string_sized_new(128); - gchar *path; - structMelderFile file; - - g_string_printf(filename, "%s.wav", string); - - path = g_build_filename(RECORDPATH, filename->str, NULL); - g_string_free(filename, TRUE); - - Vector_scale(melderSoundFromMic, 0.99); - Melder_pathToFile(path, &file); - Sound_writeToAudioFile16 (melderSoundFromMic, &file, Melder_WAV); - forget(melderSoundFromMic); - - g_chdir(SCRIPTPATH); - g_string_printf(cmd, "%s SGC_ToneProt.praat ..%s%s %s %0.f 3 none 0", PRAATBIN, G_DIR_SEPARATOR_S, path, string, upperRegister); - g_free(path); - g_debug(cmd->str); - g_debug("EXECUTES! "); - system(cmd->str); - g_debug("DONE!\n"); - g_chdir(".."); - g_string_free(cmd, TRUE); + g_warning("Missing recording directory %s.", RECORDPATH); } - } else { - g_warning("Missing recording directory %s.", RECORDPATH); - } - g_free(string); - Melder_flushError (NULL); - g_idle_add(setButtonsTrue, NULL); - g_debug("%s bye!\n", __func__); - g_thread_exit(NULL); + g_free(string); + Melder_flushError (NULL); + g_idle_add(setButtonsTrue, NULL); + g_debug("%s bye!\n", __func__); + g_thread_exit(NULL); } } diff --git a/sgc.glade b/sgc.glade index c422c0e..2e08f68 100644 --- a/sgc.glade +++ b/sgc.glade @@ -1,12 +1,13 @@ - + True Speak Good Chinese False GTK_WIN_POS_MOUSE + @@ -382,14 +383,14 @@ (c) 2007 http://speakgoodchinese.org/ GNU General Public License version 2, or in your opinion any later version. - Paul Boersma -Stefan de Konink -Rob van Son -David Weenink - Guanqin Chen -Zongyan Chen -Eveline van Hagen -Dennis Vierkant + Paul Boersma (UvA) +Stefan de Konink (UvA) +Rob van Son (UvA) +David Weenink (UvA) + Guanqin Chen (HRO) +Zongyan Chen (HvA) +Eveline van Hagen (Fontys) +Dennis Vierkant (UT) @@ -797,6 +798,9 @@ Quit - Stop application GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True True + + + 1 diff --git a/sgc.h b/sgc.h index ec70609..e3d8cf8 100644 --- a/sgc.h +++ b/sgc.h @@ -21,6 +21,7 @@ #define PITCHPATH "PitchTiers" #define GLADESOURCE "sgc.glade" +#define CONFIGFILE "sgc.ini" extern GladeXML *xml; extern gdouble upperRegister; @@ -33,6 +34,9 @@ gpointer record(void *args); void drawPitchTier(cairo_t *cr, gchar *filename, gint width, gint height, gdouble top); void on_buttonNext_clicked(GtkWidget *widget, gpointer user_data); +void on_treeview_edited (GtkCellRendererText *celltext, const gchar *string_path, const gchar *new_text, gpointer data); +void on_windowMain_realize(GtkWidget *widget, gpointer user_data); + void create_list_view(); @@ -55,13 +59,19 @@ enum NUM_COLS }; -void on_treeview_edited (GtkCellRendererText *celltext, const gchar *string_path, const gchar *new_text, gpointer data); GtkListStore *liststore; GtkTreeIter mainIter; gboolean treevalid; +gchar *base; +gchar *file; void clear(); gboolean next(GtkWidget *next); gboolean prev(GtkWidget *prev); void removeRecordings(); +void setBase(gchar *newbase); +void setFile(gchar *newfile); + +void configOpen(); +void configSave(); diff --git a/signals-editor.c b/signals-editor.c index 3dcd130..34f00db 100644 --- a/signals-editor.c +++ b/signals-editor.c @@ -44,10 +44,18 @@ void on_treeview_edited (GtkCellRendererText *celltext, GtkTreeIter iter; gtk_tree_model_get_iter_from_string(model, &iter, string_path); gtk_list_store_set(GTK_LIST_STORE(model), &iter, COL_TEXT, new_text, -1); + treevalid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(liststore), &mainIter); + updateWidgets(); +} + +gboolean on_treeother() { + treevalid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(liststore), &mainIter); + updateWidgets(); + return false; } void on_buttonOpen_clicked(GtkWidget *filechooser, gpointer data) { /* Eerst vragen oude op te slaan ? */ //TODO: Freecheck - fileOpen(gtk_file_chooser_get_filename(filechooser)); + fileOpen(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filechooser))); } diff --git a/signals.c b/signals.c index 1a58962..0b80b6e 100644 --- a/signals.c +++ b/signals.c @@ -83,16 +83,11 @@ void on_buttonRecord_clicked(GtkWidget *widget, gpointer user_data) { gtk_widget_destroy (dialog); /* Nothing to do? */ } else { - GError *error; - /* Start record Thread */ g_debug("%s creates record", __func__); - if (!g_thread_create((GThreadFunc)record, NULL, FALSE, &error)) { - /* GError free? */ - // g_error ("Failed to create record thread: %s\n", error->message); - } + g_thread_create((GThreadFunc)record, NULL, FALSE, NULL); g_debug("%s is done", __func__); g_free(string); @@ -102,28 +97,14 @@ void on_buttonRecord_clicked(GtkWidget *widget, gpointer user_data) { void on_buttonExample_clicked(GtkWidget *widget, gpointer user_data) { /* Play Thread */ - GError *error; - /* Start example Thread */ - if (!g_thread_create((GThreadFunc)example, widget, FALSE, &error)) { - /* GError free? */ - g_error ("Failed to create example thread: %s\n", error->message); - g_error_free (error) ; - } - + g_thread_create((GThreadFunc)example, widget, FALSE, NULL); } void on_buttonPlay_clicked(GtkWidget *widget, gpointer user_data) { /* Play Thread */ - GError *error; - /* Start play Thread */ - if (!g_thread_create((GThreadFunc)play, widget, FALSE, &error)) { - /* GError free? */ - g_error ("Failed to create play thread: %s\n", error->message); - g_error_free (error) ; - } - + g_thread_create((GThreadFunc)play, widget, FALSE, NULL); } gboolean prev(GtkWidget *previous) { -- 2.11.4.GIT