From 46977288a7d1d5783dfe4b8f84abea50c35caf48 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 4 Dec 2015 20:23:47 -0500 Subject: Bring back Jack buffer size selector --- src/JackDriver.cpp | 1 + src/Patchage.cpp | 40 +++++++++++++++++++++++++++++++++++----- src/Patchage.hpp | 11 +++++++++++ src/patchage.ui | 19 +++++++++++++++++-- 4 files changed, 64 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/JackDriver.cpp b/src/JackDriver.cpp index a949c7f..a72bd8f 100644 --- a/src/JackDriver.cpp +++ b/src/JackDriver.cpp @@ -570,6 +570,7 @@ JackDriver::set_buffer_size(jack_nframes_t size) _app->error_msg("[JACK] Unable to set buffer size"); return false; } else { + _buffer_size = size; return true; } } diff --git a/src/Patchage.cpp b/src/Patchage.cpp index f8f58e3..91755e1 100644 --- a/src/Patchage.cpp +++ b/src/Patchage.cpp @@ -28,8 +28,9 @@ #include #include -#include +#include #include +#include #include #include @@ -151,6 +152,7 @@ Patchage::Patchage(int argc, char** argv) , INIT_WIDGET(_toolbar) , INIT_WIDGET(_clear_load_but) , INIT_WIDGET(_xrun_progress) + , INIT_WIDGET(_buf_size_combo) , INIT_WIDGET(_latency_label) , INIT_WIDGET(_legend_alignment) , INIT_WIDGET(_main_paned) @@ -198,6 +200,16 @@ Patchage::Patchage(int argc, char** argv) _about_win->property_logo_icon_name() = "patchage"; gtk_window_set_default_icon_name("patchage"); + // Create list model for buffer size selector + Glib::RefPtr buf_size_store = Gtk::ListStore::create(_buf_size_columns); + for (size_t i = 32; i <= 4096; i *= 2) { + Gtk::TreeModel::Row row = *(buf_size_store->append()); + row[_buf_size_columns.label] = std::to_string(i); + } + + _buf_size_combo->set_model(buf_size_store); + _buf_size_combo->pack_start(_buf_size_columns.label); + _main_scrolledwin->add(_canvas->widget()); _main_scrolledwin->property_hadjustment().get_value()->set_step_increment(10); @@ -205,10 +217,10 @@ Patchage::Patchage(int argc, char** argv) _main_scrolledwin->signal_scroll_event().connect( sigc::mem_fun(this, &Patchage::on_scroll)); - _clear_load_but->signal_clicked().connect( sigc::mem_fun(this, &Patchage::clear_load)); - + _buf_size_combo->signal_changed().connect( + sigc::mem_fun(this, &Patchage::buffer_size_changed)); _status_text->signal_size_allocate().connect( sigc::mem_fun(this, &Patchage::on_messages_resized)); @@ -468,10 +480,11 @@ Patchage::update_toolbar() if (sample_rate != 0) { const int latency_ms = lrintf(buffer_size * 1000 / (float)sample_rate); std::stringstream ss; - ss << buffer_size << " frames @ " - << (sample_rate / 1000) << "kHz (" << latency_ms << "ms)"; + ss << " frames @ " << (sample_rate / 1000) + << "kHz (" << latency_ms << "ms)"; _latency_label->set_label(ss.str()); _latency_label->set_visible(true); + _buf_size_combo->set_active((int)log2f(_jack_driver->buffer_size()) - 5); return; } } @@ -1022,3 +1035,20 @@ Patchage::on_scroll(GdkEventScroll* ev) { return false; } + +void +Patchage::buffer_size_changed() +{ +#if defined(HAVE_JACK) || defined(HAVE_JACK_DBUS) + const int selected = _buf_size_combo->get_active_row_number(); + + if (selected == -1) { + update_toolbar(); + } else { + const jack_nframes_t buffer_size = 1 << (selected + 5); + _jack_driver->set_buffer_size(buffer_size); + update_toolbar(); + } +#endif +} + diff --git a/src/Patchage.hpp b/src/Patchage.hpp index 9183b7e..2ce0984 100644 --- a/src/Patchage.hpp +++ b/src/Patchage.hpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -93,6 +94,13 @@ public: bool show_human_names() const { return _menu_view_human_names->get_active(); } protected: + class BufferSizeColumns : public Gtk::TreeModel::ColumnRecord { + public: + BufferSizeColumns() { add(label); } + + Gtk::TreeModelColumn label; + }; + void connect_widgets(); void on_arrange(); @@ -143,6 +151,8 @@ protected: Gtk::Main* _gtk_main; + BufferSizeColumns _buf_size_columns; + Widget _about_win; Widget _main_scrolledwin; Widget _main_win; @@ -174,6 +184,7 @@ protected: Widget _toolbar; Widget _clear_load_but; Widget _xrun_progress; + Widget _buf_size_combo; Widget _latency_label; Widget _legend_alignment; Widget _main_paned; diff --git a/src/patchage.ui b/src/patchage.ui index 4411193..42312bb 100644 --- a/src/patchage.ui +++ b/src/patchage.ui @@ -1159,16 +1159,31 @@ The bar represents the percentage of available time used for audio processing (i 0 + + + True + True + 1 + True + Jack buffer length in frames + Jack buffer length in frames + + + False + False + 1 + + False - ? frames @ ? kHz (? ms) + frames @ ? kHz (? ms) False False 1 - 1 + 2 -- cgit v1.2.1