void
EngineControl::on_map ()
{
- if (!ARDOUR_UI::instance()->session_loaded && !PublicEditor::_instance) {
+ if (!ARDOUR_UI::instance()->the_session () && !PublicEditor::_instance) {
set_type_hint (Gdk::WINDOW_TYPE_HINT_NORMAL);
} else if (UIConfiguration::instance().get_all_floating_windows_are_dialogs()) {
set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG);
if (get_popdown_string_count (buffer_size_combo) > 0) {
if (!engine_running) {
buffer_size_combo.set_sensitive (valid);
- } else if (backend->can_change_sample_rate_when_running()) {
+ } else if (backend->can_change_buffer_size_when_running ()) {
buffer_size_combo.set_sensitive (valid || !_have_control);
} else {
-#if 1
- /* TODO
- * Currently there is no way to manually stop the
- * engine in order to re-configure it.
- * This needs to remain sensitive for now.
- *
- * (it's also handy to implicily
- * re-start the engine)
- */
- buffer_size_combo.set_sensitive (true);
-#else
buffer_size_combo.set_sensitive (false);
-#endif
}
} else {
buffer_size_combo.set_sensitive (false);
if (get_popdown_string_count (sample_rate_combo) > 0) {
bool allow_to_set_rate = false;
if (!engine_running) {
- if (!ARDOUR_UI::instance()->session_loaded) {
+ if (!ARDOUR_UI::instance()->the_session ()) {
// engine is not running, no session loaded -> anything goes.
allow_to_set_rate = true;
} else if (_desired_sample_rate > 0 && get_rate () != _desired_sample_rate) {
if (!_have_control) {
// set settings from backend that we do have control over
+ set_buffersize_popdown_strings ();
set_active_text_if_present (buffer_size_combo, bufsize_as_string (backend->buffer_size()));
}
if (!s.empty()) {
if (ARDOUR::AudioEngine::instance()->running()) {
sample_rate_combo.set_active_text (rate_as_string (backend->sample_rate()));
- }
- else if (desired.empty ()) {
+ } else if (ARDOUR_UI::instance()->the_session ()) {
+ float active_sr = ARDOUR_UI::instance()->the_session()->nominal_sample_rate ();
+
+ if (std::find (sr.begin (), sr.end (), active_sr) == sr.end ()) {
+ active_sr = sr.front ();
+ }
+
+ sample_rate_combo.set_active_text (rate_as_string (active_sr));
+ } else if (desired.empty ()) {
float new_active_sr = backend->default_sample_rate ();
if (std::find (sr.begin (), sr.end (), new_active_sr) == sr.end ()) {
} else {
sample_rate_combo.set_active_text (desired);
}
-
}
update_sensitivity ();
}
s.push_back (bufsize_as_string (*x));
}
- uint32_t previous_size = 0;
+ uint32_t previous_size = backend->buffer_size ();
if (!buffer_size_combo.get_active_text().empty()) {
previous_size = get_buffer_size ();
}
EngineControl::buffer_size_changed ()
{
DEBUG_ECONTROL ("buffer_size_changed");
+ if (ARDOUR::AudioEngine::instance()->running()) {
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ if (backend && backend->can_change_buffer_size_when_running ()) {
+ backend->set_buffer_size (get_buffer_size());
+ }
+ }
show_buffer_duration ();
}
void
EngineControl::maybe_display_saved_state ()
{
- if (!_have_control) {
+ if (!_have_control || ARDOUR::AudioEngine::instance()->running ()) {
return;
}
DEBUG_ECONTROL ("Restoring saved state");
PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
- if (!_desired_sample_rate) {
+ if (0 == _desired_sample_rate && sample_rate_combo.get_sensitive ()) {
sample_rate_combo.set_active_text (rate_as_string (state->sample_rate));
}
set_active_text_if_present (buffer_size_combo, bufsize_as_string (state->buffer_size));
device_combo.set_active_text (state->device);
input_device_combo.set_active_text (state->input_device);
output_device_combo.set_active_text (state->output_device);
- if (!_desired_sample_rate) {
+ if (0 == _desired_sample_rate && sample_rate_combo.get_sensitive ()) {
sample_rate_combo.set_active_text (rate_as_string (state->sample_rate));
}
set_active_text_if_present (buffer_size_combo, bufsize_as_string (state->buffer_size));
if (ARDOUR::AudioEngine::instance()->running()) {
ARDOUR::AudioEngine::instance()->stop ();
} else {
- if (!ARDOUR_UI::instance()->session_loaded) {
+ if (!ARDOUR_UI::instance()->the_session ()) {
pop_splash ();
hide ();
ARDOUR::GUIIdle ();
}
start_engine ();
- if (!ARDOUR_UI::instance()->session_loaded) {
+ if (!ARDOUR_UI::instance()->the_session ()) {
ArdourDialog::on_response (RESPONSE_OK);
}
}
}
char buf[256];
- ARDOUR::framecnt_t const sample_rate = ARDOUR::AudioEngine::instance()->sample_rate();
+ ARDOUR::samplecnt_t const sample_rate = ARDOUR::AudioEngine::instance()->sample_rate();
if (sample_rate == 0) {
lm_results.set_markup (string_compose (results_markup, _("Disconnected from audio engine")));
return false;
}
- int frames_total = mtdm->del();
- int extra = frames_total - ARDOUR::AudioEngine::instance()->latency_signal_delay();
+ int samples_total = mtdm->del();
+ int extra = samples_total - ARDOUR::AudioEngine::instance()->latency_signal_delay();
snprintf (buf, sizeof (buf), "%s%d samples (%.3lf ms)\n%s%d samples (%.3lf ms)",
_("Detected roundtrip latency: "),
- frames_total, frames_total * 1000.0f/sample_rate,
+ samples_total, samples_total * 1000.0f/sample_rate,
_("Systemic latency: "),
extra, extra * 1000.0f/sample_rate);
}
char buf[256];
- ARDOUR::framecnt_t const sample_rate = ARDOUR::AudioEngine::instance()->sample_rate();
+ ARDOUR::samplecnt_t const sample_rate = ARDOUR::AudioEngine::instance()->sample_rate();
if (sample_rate == 0) {
lm_results.set_markup (string_compose (results_markup, _("Disconnected from audio engine")));
return false;
}
- ARDOUR::framecnt_t frames_total = mididm->latency();
- ARDOUR::framecnt_t extra = frames_total - ARDOUR::AudioEngine::instance()->latency_signal_delay();
+ ARDOUR::samplecnt_t samples_total = mididm->latency();
+ ARDOUR::samplecnt_t extra = samples_total - ARDOUR::AudioEngine::instance()->latency_signal_delay();
snprintf (buf, sizeof (buf), "%s%" PRId64" samples (%.1lf ms) dev: %.2f[spl]\n%s%" PRId64" samples (%.1lf ms)",
_("Detected roundtrip latency: "),
- frames_total, frames_total * 1000.0f / sample_rate, mididm->deviation (),
+ samples_total, samples_total * 1000.0f / sample_rate, mididm->deviation (),
_("Systemic latency: "),
extra, extra * 1000.0f / sample_rate);
if (!mididm) {
return;
}
- ARDOUR::framecnt_t frames_total = mididm->latency();
- ARDOUR::framecnt_t extra = frames_total - ARDOUR::AudioEngine::instance()->latency_signal_delay();
- uint32_t one_way = max ((ARDOUR::framecnt_t) 0, extra / 2);
+ ARDOUR::samplecnt_t samples_total = mididm->latency();
+ ARDOUR::samplecnt_t extra = samples_total - ARDOUR::AudioEngine::instance()->latency_signal_delay();
+ uint32_t one_way = max ((ARDOUR::samplecnt_t) 0, extra / 2);
_measure_midi->input_latency = one_way;
_measure_midi->output_latency = one_way;
if (backend->can_change_systemic_latency_when_running ()) {
if (ARDOUR::AudioEngine::instance()->running()) {
stop_engine ();
} else {
- if (!ARDOUR_UI::instance()->session_loaded) {
+ if (!ARDOUR_UI::instance()->the_session ()) {
pop_splash ();
hide ();
ARDOUR::GUIIdle ();
}
start_engine ();
- if (!ARDOUR_UI::instance()->session_loaded) {
+ if (!ARDOUR_UI::instance()->the_session ()) {
ArdourDialog::on_response (RESPONSE_OK);
}
}