From 0f5da82ae8555ee792aae824333798de930e1f68 Mon Sep 17 00:00:00 2001 From: Nedko Arnaudov Date: Sat, 20 Feb 2010 01:52:49 +0200 Subject: [PATCH] sample rate and latency display in statusbar --- gui/gladish.ui | 47 ------------------------------------------ gui/main.c | 55 +++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 50 insertions(+), 52 deletions(-) diff --git a/gui/gladish.ui b/gui/gladish.ui index 0998daa0..d7bfe09d 100644 --- a/gui/gladish.ui +++ b/gui/gladish.ui @@ -383,53 +383,6 @@ False 4 True - - - True - False - - - True - - - True - 48 - - - False - False - 1 - 0 - - - - - True - 1 - kHz - - - False - False - 1 - - - - - - - False - - - - - True - 8 - - - False - - True diff --git a/gui/main.c b/gui/main.c index 075a4b98..732597c9 100644 --- a/gui/main.c +++ b/gui/main.c @@ -54,6 +54,7 @@ GtkWidget * g_main_win; GtkWidget * g_clear_load_button; GtkWidget * g_xrun_progress_bar; +GtkStatusbar * g_statusbar; GtkWidget * g_menu_item_new_studio; GtkWidget * g_menu_item_start_studio; @@ -86,6 +87,11 @@ GtkWidget * g_status_tool_item; GtkWidget * g_name_dialog; GtkWidget * g_app_dialog; +GtkWidget * g_sample_rate_label; +uint32_t g_sample_rate; + +GtkWidget * g_latency_label; + graph_view_handle g_jack_view = NULL; graph_view_handle g_studio_view = NULL; @@ -166,11 +172,12 @@ void set_latency_items_sensivity(bool sensitive) static void buffer_size_clear(void) { set_latency_items_sensivity(false); + gtk_label_set_text(GTK_LABEL(g_latency_label), ""); } static bool latency_changing = false; -static void buffer_size_set(uint32_t size) +static void buffer_size_set(uint32_t size, bool force) { GtkCheckMenuItem * item_ptr; @@ -209,12 +216,18 @@ static void buffer_size_set(uint32_t size) return; } - if (!item_ptr->active) + if (force || !item_ptr->active) { log_info("JACK latency changed: %"PRIu32" samples", size); latency_changing = true; gtk_check_menu_item_set_active(item_ptr, TRUE); latency_changing = false; + + { + char buf[100]; + snprintf(buf, sizeof(buf), "Latency: %4.1f ms (%"PRIu32")", (float)size / (float)g_sample_rate * 1000.0f, size); + gtk_label_set_text(GTK_LABEL(g_latency_label), buf); + } } } @@ -242,13 +255,13 @@ static void buffer_size_change_request(GtkCheckMenuItem * item_ptr, gpointer use } } -static void update_buffer_size(void) +static void update_buffer_size(bool force) { uint32_t size; if (jack_proxy_get_buffer_size(&size)) { - buffer_size_set(size); + buffer_size_set(size, force); } else { @@ -631,7 +644,7 @@ static void rename_studio(void) static gboolean poll_jack(gpointer data) { update_load(); - update_buffer_size(); + update_buffer_size(false); return TRUE; } @@ -738,6 +751,26 @@ bool studio_state_changed(char ** name_ptr_ptr) gtk_image_set_from_stock(GTK_IMAGE(g_status_image), stock_id, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(g_status_tool_item), tooltip); + if (g_jack_state == JACK_STATE_STARTED && jack_proxy_sample_rate(&g_sample_rate)) + { + char buf[100]; + + if (fmod(g_sample_rate, 1000.0) != 0.0) + { + snprintf(buf, sizeof(buf), "Sample rate: %.1f kHz", (float)g_sample_rate / 1000.0f); + } + else + { + snprintf(buf, sizeof(buf), "Sample rate: %u kHz", g_sample_rate / 1000); + } + + gtk_label_set_text(GTK_LABEL(g_sample_rate_label), buf); + } + else + { + gtk_label_set_text(GTK_LABEL(g_sample_rate_label), ""); + } + if (buffer == NULL) { return false; @@ -882,6 +915,7 @@ void jack_started(void) studio_state_changed(NULL); set_latency_items_sensivity(true); + update_buffer_size(true); gtk_widget_set_sensitive(g_clear_load_button, true); g_jack_poll_source_tag = g_timeout_add(100, poll_jack, NULL); @@ -1130,6 +1164,7 @@ int main(int argc, char** argv) g_toolbar = get_gtk_builder_widget("toolbar"); g_status_image = get_gtk_builder_widget("startstop"); g_status_tool_item = get_gtk_builder_widget("startstop_item"); + g_statusbar = GTK_STATUSBAR(get_gtk_builder_widget("statusbar")); g_name_dialog = get_gtk_builder_widget("name_dialog"); g_app_dialog = get_gtk_builder_widget("app_dialog"); @@ -1147,6 +1182,16 @@ int main(int argc, char** argv) g_menu_item_jack_latency_4096 = GTK_CHECK_MENU_ITEM(get_gtk_builder_widget("menu_item_jack_latency_4096")); g_menu_item_jack_latency_8192 = GTK_CHECK_MENU_ITEM(get_gtk_builder_widget("menu_item_jack_latency_8192")); + g_sample_rate_label = gtk_label_new("srate"); + gtk_widget_show(g_sample_rate_label); + gtk_box_pack_start(GTK_BOX(g_statusbar), g_sample_rate_label, FALSE, TRUE, 10); + gtk_box_reorder_child(GTK_BOX(g_statusbar), g_sample_rate_label, 0); + + g_latency_label = gtk_label_new("latency"); + gtk_widget_show(g_latency_label); + gtk_box_pack_start(GTK_BOX(g_statusbar), g_latency_label, FALSE, TRUE, 10); + gtk_box_reorder_child(GTK_BOX(g_statusbar), g_latency_label, 1); + buffer_size_clear(); world_tree_init();