mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-09 08:14:58 +01:00
Engine Dialog: append monitor-model option
The Monitor Model usually depends on the studio setup (hardware mixing desk), but also to some extent on the audio interface (zero- latency monitoring). Since a user may also use different interfaces (e.g. with a laptop), it makes sense to expose the monitor model preference in the engine-dialog. NB. It is not part of the engine-state (!), but still a preference.
This commit is contained in:
parent
f587f7f2cd
commit
ee63b65df8
2 changed files with 63 additions and 2 deletions
|
|
@ -89,7 +89,7 @@ EngineControl::EngineControl ()
|
||||||
, output_latency_adjustment (0, 0, 99999, 1)
|
, output_latency_adjustment (0, 0, 99999, 1)
|
||||||
, output_latency (output_latency_adjustment)
|
, output_latency (output_latency_adjustment)
|
||||||
, control_app_button (_("Device Control Panel"))
|
, control_app_button (_("Device Control Panel"))
|
||||||
, midi_devices_button (_("Midi Device Setup"))
|
, midi_devices_button (_("MIDI Device Setup"))
|
||||||
, start_stop_button (_("Stop"))
|
, start_stop_button (_("Stop"))
|
||||||
, update_devices_button (_("Refresh Devices"))
|
, update_devices_button (_("Refresh Devices"))
|
||||||
, use_buffered_io_button (_("Use Buffered I/O"), ArdourButton::led_default_elements)
|
, use_buffered_io_button (_("Use Buffered I/O"), ArdourButton::led_default_elements)
|
||||||
|
|
@ -134,6 +134,17 @@ EngineControl::EngineControl ()
|
||||||
|
|
||||||
set_popdown_strings (backend_combo, backend_names);
|
set_popdown_strings (backend_combo, backend_names);
|
||||||
|
|
||||||
|
/* setup HW monitoring */
|
||||||
|
|
||||||
|
monitor_model_combo.append_text (PROGRAM_NAME);
|
||||||
|
monitor_model_combo.append_text (_("audio hardware"));
|
||||||
|
if (ARDOUR::HardwareMonitoring == ARDOUR::Config->get_monitoring_model ()) {
|
||||||
|
/* this really depends on running backend, check
|
||||||
|
* AudioEngine::instance()->port_engine().can_monitor_input()
|
||||||
|
*/
|
||||||
|
monitor_model_combo.append_text (_("via Audio Driver"));
|
||||||
|
}
|
||||||
|
|
||||||
/* setup basic packing characteristics for the table used on the main
|
/* setup basic packing characteristics for the table used on the main
|
||||||
* tab of the notebook
|
* tab of the notebook
|
||||||
*/
|
*/
|
||||||
|
|
@ -303,7 +314,7 @@ EngineControl::EngineControl ()
|
||||||
try_autostart_button.signal_clicked.connect (mem_fun (*this, &EngineControl::try_autostart_button_clicked));
|
try_autostart_button.signal_clicked.connect (mem_fun (*this, &EngineControl::try_autostart_button_clicked));
|
||||||
try_autostart_button.set_name ("generic button");
|
try_autostart_button.set_name ("generic button");
|
||||||
try_autostart_button.set_can_focus(true);
|
try_autostart_button.set_can_focus(true);
|
||||||
config_parameter_changed ("try-autostart-engine");
|
|
||||||
set_tooltip (try_autostart_button,
|
set_tooltip (try_autostart_button,
|
||||||
string_compose (_("Always try these settings when starting %1, if the same device is available"), PROGRAM_NAME));
|
string_compose (_("Always try these settings when starting %1, if the same device is available"), PROGRAM_NAME));
|
||||||
|
|
||||||
|
|
@ -318,6 +329,9 @@ EngineControl::EngineControl ()
|
||||||
ARDOUR::AudioEngine::instance()->Halted.connect (stopped_connection, MISSING_INVALIDATOR, boost::bind (&EngineControl::engine_stopped, this), gui_context());
|
ARDOUR::AudioEngine::instance()->Halted.connect (stopped_connection, MISSING_INVALIDATOR, boost::bind (&EngineControl::engine_stopped, this), gui_context());
|
||||||
ARDOUR::AudioEngine::instance()->DeviceListChanged.connect (devicelist_connection, MISSING_INVALIDATOR, boost::bind (&EngineControl::device_list_changed, this), gui_context());
|
ARDOUR::AudioEngine::instance()->DeviceListChanged.connect (devicelist_connection, MISSING_INVALIDATOR, boost::bind (&EngineControl::device_list_changed, this), gui_context());
|
||||||
|
|
||||||
|
config_parameter_changed ("try-autostart-engine");
|
||||||
|
config_parameter_changed ("monitoring-model");
|
||||||
|
|
||||||
if (audio_setup) {
|
if (audio_setup) {
|
||||||
if (!set_state (*audio_setup)) {
|
if (!set_state (*audio_setup)) {
|
||||||
set_default_state ();
|
set_default_state ();
|
||||||
|
|
@ -364,6 +378,9 @@ EngineControl::connect_changed_signals ()
|
||||||
sigc::mem_fun (*this, &EngineControl::latency_changed));
|
sigc::mem_fun (*this, &EngineControl::latency_changed));
|
||||||
output_latency_connection = output_latency.signal_changed ().connect (
|
output_latency_connection = output_latency.signal_changed ().connect (
|
||||||
sigc::mem_fun (*this, &EngineControl::latency_changed));
|
sigc::mem_fun (*this, &EngineControl::latency_changed));
|
||||||
|
|
||||||
|
monitor_model_connection = monitor_model_combo.signal_changed ().connect (
|
||||||
|
sigc::mem_fun (*this, &EngineControl::monitor_model_changed));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -449,6 +466,19 @@ EngineControl::config_parameter_changed (std::string const & p)
|
||||||
{
|
{
|
||||||
if (p == "try-autostart-engine") {
|
if (p == "try-autostart-engine") {
|
||||||
try_autostart_button.set_active (ARDOUR::Config->get_try_autostart_engine ());
|
try_autostart_button.set_active (ARDOUR::Config->get_try_autostart_engine ());
|
||||||
|
} else if (p == "monitoring-model") {
|
||||||
|
switch (ARDOUR::Config->get_monitoring_model ()) {
|
||||||
|
case ARDOUR::SoftwareMonitoring:
|
||||||
|
monitor_model_combo.set_active (0);
|
||||||
|
break;
|
||||||
|
case ARDOUR::ExternalMonitoring:
|
||||||
|
monitor_model_combo.set_active (1);
|
||||||
|
break;
|
||||||
|
case ARDOUR::HardwareMonitoring:
|
||||||
|
// TODO check if "via Audio Driver" is present, add it
|
||||||
|
monitor_model_combo.set_active (2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -657,6 +687,11 @@ EngineControl::build_full_control_notebook ()
|
||||||
basic_packer.attach (midi_devices_button, 3, 4, row, row+1, xopt, xopt);
|
basic_packer.attach (midi_devices_button, 3, 4, row, row+1, xopt, xopt);
|
||||||
row++;
|
row++;
|
||||||
|
|
||||||
|
label = manage (left_aligned_label (_("Record monitoring handled by:")));
|
||||||
|
basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
|
||||||
|
basic_packer.attach (monitor_model_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
|
||||||
|
row++;
|
||||||
|
|
||||||
if (!autostart_packed) {
|
if (!autostart_packed) {
|
||||||
basic_packer.attach (try_autostart_button, 3, 4, row, row+1, xopt, xopt);
|
basic_packer.attach (try_autostart_button, 3, 4, row, row+1, xopt, xopt);
|
||||||
}
|
}
|
||||||
|
|
@ -1758,6 +1793,29 @@ EngineControl::latency_changed ()
|
||||||
post_push ();
|
post_push ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
EngineControl::monitor_model_changed ()
|
||||||
|
{
|
||||||
|
ARDOUR::MonitorModel mm = ARDOUR::Config->get_monitoring_model ();
|
||||||
|
|
||||||
|
switch (monitor_model_combo.get_active_row_number()) {
|
||||||
|
case 0:
|
||||||
|
mm = ARDOUR::SoftwareMonitoring;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
mm = ARDOUR::ExternalMonitoring;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
mm = ARDOUR::HardwareMonitoring;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (mm == ARDOUR::Config->get_monitoring_model ()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ARDOUR::Config->set_monitoring_model (mm);
|
||||||
|
ARDOUR::Config->save_state ();
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
EngineControl::set_state_for_backend (const string& backend)
|
EngineControl::set_state_for_backend (const string& backend)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,7 @@ private:
|
||||||
Gtk::SpinButton input_latency;
|
Gtk::SpinButton input_latency;
|
||||||
Gtk::Adjustment output_latency_adjustment;
|
Gtk::Adjustment output_latency_adjustment;
|
||||||
Gtk::SpinButton output_latency;
|
Gtk::SpinButton output_latency;
|
||||||
|
Gtk::ComboBoxText monitor_model_combo;
|
||||||
|
|
||||||
Gtk::Label have_control_text;
|
Gtk::Label have_control_text;
|
||||||
ArdourWidgets::ArdourButton control_app_button;
|
ArdourWidgets::ArdourButton control_app_button;
|
||||||
|
|
@ -150,6 +151,7 @@ private:
|
||||||
void nperiods_changed ();
|
void nperiods_changed ();
|
||||||
void latency_changed ();
|
void latency_changed ();
|
||||||
void midi_option_changed ();
|
void midi_option_changed ();
|
||||||
|
void monitor_model_changed ();
|
||||||
|
|
||||||
void setup_midi_tab_for_backend ();
|
void setup_midi_tab_for_backend ();
|
||||||
void setup_midi_tab_for_jack ();
|
void setup_midi_tab_for_jack ();
|
||||||
|
|
@ -313,6 +315,7 @@ private:
|
||||||
sigc::connection midi_option_combo_connection;
|
sigc::connection midi_option_combo_connection;
|
||||||
sigc::connection input_latency_connection;
|
sigc::connection input_latency_connection;
|
||||||
sigc::connection output_latency_connection;
|
sigc::connection output_latency_connection;
|
||||||
|
sigc::connection monitor_model_connection;
|
||||||
|
|
||||||
void on_show ();
|
void on_show ();
|
||||||
void on_map ();
|
void on_map ();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue