summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-10-16 22:06:56 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-10-16 22:06:56 -0400
commite5888d398350b26ba2cdc634cc9791e90b4fc6b6 (patch)
tree54f485ea56d034ecba01938fbc680b12884fc136
parent18850253e9f0034fad132e0da07a2651ce041450 (diff)
parentda5a49067839ec32a016bf1b66c3808ad7cbf699 (diff)
merge with master and fix 2 conflicts
-rw-r--r--gtk2_ardour/ardour.menus.in11
-rw-r--r--gtk2_ardour/ardour_button.cc2
-rw-r--r--gtk2_ardour/ardour_button.h2
-rw-r--r--gtk2_ardour/ardour_ui.cc304
-rw-r--r--gtk2_ardour/ardour_ui.h19
-rw-r--r--gtk2_ardour/ardour_ui_dependents.cc8
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc61
-rw-r--r--gtk2_ardour/ardour_ui_options.cc16
-rw-r--r--gtk2_ardour/audio_clock.cc2
-rw-r--r--gtk2_ardour/editor.cc3
-rw-r--r--gtk2_ardour/editor.h2
-rw-r--r--gtk2_ardour/editor_ops.cc2
-rw-r--r--gtk2_ardour/editor_regions.cc8
-rw-r--r--gtk2_ardour/editor_videotimeline.cc4
-rw-r--r--gtk2_ardour/engine_dialog.cc2758
-rw-r--r--gtk2_ardour/engine_dialog.h37
-rw-r--r--gtk2_ardour/export_video_dialog.cc23
-rw-r--r--gtk2_ardour/export_video_dialog.h2
-rw-r--r--gtk2_ardour/gtk_pianokeyboard.c8
-rw-r--r--gtk2_ardour/keyeditor.cc2
-rw-r--r--gtk2_ardour/main.cc12
-rw-r--r--gtk2_ardour/mixer_strip.cc4
-rw-r--r--gtk2_ardour/plugin_selector.cc10
-rw-r--r--gtk2_ardour/plugin_ui.cc3
-rw-r--r--gtk2_ardour/po/de.po2563
-rw-r--r--gtk2_ardour/po/ru.po2791
-rw-r--r--gtk2_ardour/processor_box.cc99
-rw-r--r--gtk2_ardour/processor_box.h12
-rw-r--r--gtk2_ardour/public_editor.h2
-rw-r--r--gtk2_ardour/rc_option_editor.cc6
-rw-r--r--gtk2_ardour/session_dialog.cc1075
-rw-r--r--gtk2_ardour/session_dialog.h240
-rw-r--r--gtk2_ardour/session_option_editor.cc2
-rw-r--r--gtk2_ardour/sfdb_ui.cc4
-rw-r--r--gtk2_ardour/small-splash.pngbin0 -> 9671 bytes
-rw-r--r--gtk2_ardour/startup.cc1096
-rw-r--r--gtk2_ardour/startup.h181
-rw-r--r--gtk2_ardour/transcode_video_dialog.cc1
-rw-r--r--gtk2_ardour/utils.cc13
-rw-r--r--gtk2_ardour/utils.h2
-rw-r--r--gtk2_ardour/video_monitor.cc2
-rw-r--r--gtk2_ardour/video_server_dialog.cc2
-rw-r--r--gtk2_ardour/window_manager.cc36
-rw-r--r--gtk2_ardour/window_manager.h2
-rw-r--r--gtk2_ardour/wscript3
-rw-r--r--libs/ardour/ardour/ardour.h2
-rw-r--r--libs/ardour/ardour/audio_backend.h58
-rw-r--r--libs/ardour/ardour/audioengine.h20
-rw-r--r--libs/ardour/ardour/graph.h5
-rw-r--r--libs/ardour/ardour/processor.h4
-rw-r--r--libs/ardour/ardour/rc_configuration_vars.h2
-rw-r--r--libs/ardour/ardour/session.h16
-rw-r--r--libs/ardour/ardour/slave.h6
-rw-r--r--libs/ardour/ardour/types.h17
-rw-r--r--libs/ardour/audioengine.cc123
-rw-r--r--libs/ardour/engine_slave.cc (renamed from libs/ardour/jack_slave.cc)10
-rw-r--r--libs/ardour/enums.cc1
-rw-r--r--libs/ardour/globals.cc19
-rw-r--r--libs/ardour/graph.cc30
-rw-r--r--libs/ardour/po/de.po602
-rw-r--r--libs/ardour/po/ru.po559
-rw-r--r--libs/ardour/processor.cc12
-rw-r--r--libs/ardour/route.cc4
-rwxr-xr-x[-rw-r--r--]libs/ardour/run-session-tests.sh15
-rwxr-xr-xlibs/ardour/run-tests.sh1
-rw-r--r--libs/ardour/session.cc34
-rw-r--r--libs/ardour/session_state.cc80
-rw-r--r--libs/ardour/session_time.cc2
-rw-r--r--libs/ardour/session_transport.cc30
-rw-r--r--libs/ardour/test-env.sh1
-rw-r--r--libs/ardour/test/audio_region_read_test.cc1
-rw-r--r--libs/ardour/test/audio_region_test.cc3
-rw-r--r--libs/ardour/test/automation_list_property_test.cc42
-rw-r--r--libs/ardour/test/load_session.cc4
-rw-r--r--libs/ardour/test/playlist_read_test.cc1
-rw-r--r--libs/ardour/test/profiling/load_session.cc4
-rw-r--r--libs/ardour/test/profiling/runpc.cc3
-rw-r--r--libs/ardour/test/session_test.cc16
-rw-r--r--libs/ardour/test/test_common.cc9
-rw-r--r--libs/ardour/test/test_common.h4
-rw-r--r--libs/ardour/test/test_globals.cc3
-rw-r--r--libs/ardour/test/test_globals.h2
-rw-r--r--libs/ardour/test/test_needing_session.cc4
-rw-r--r--libs/ardour/test/test_util.cc9
-rw-r--r--libs/ardour/test/test_util.h2
-rw-r--r--libs/ardour/utils.cc9
-rw-r--r--libs/ardour/wscript22
-rw-r--r--libs/backends/jack/jack_api.cc2
-rw-r--r--libs/backends/jack/jack_audiobackend.cc111
-rw-r--r--libs/backends/jack/jack_audiobackend.h28
-rw-r--r--libs/backends/jack/jack_connection.cc36
-rw-r--r--libs/backends/jack/jack_connection.h6
-rw-r--r--libs/backends/jack/jack_session.cc (renamed from libs/ardour/session_jack.cc)98
-rw-r--r--libs/backends/jack/jack_session.h47
-rw-r--r--libs/backends/jack/jack_utils.cc80
-rw-r--r--libs/backends/jack/jack_utils.h7
-rw-r--r--libs/backends/jack/wscript5
-rw-r--r--libs/gtkmm2ext/gtk_ui.cc10
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/gtk_ui.h3
-rw-r--r--libs/gtkmm2ext/po/ru.po23
-rw-r--r--libs/pbd/controllable_descriptor.cc3
-rw-r--r--libs/pbd/stacktrace.cc6
-rw-r--r--libs/surfaces/mackie/gui.cc4
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.cc2
-rwxr-xr-xtools/linux_packaging/build12
-rwxr-xr-xtools/osx_packaging/osx_build19
-rw-r--r--wscript9
107 files changed, 7524 insertions, 6213 deletions
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index 9694556e56..6068055324 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -35,10 +35,9 @@
<menuitem action='addExistingAudioFiles'/>
<!--menuitem action='importFromSession'/-->
-#ifndef NOVIDEOTIMELINE
<menuitem action='OpenVideo'/>
<menuitem action='CloseVideo'/>
-#endif
+
<menu name='Export' action='Export'>
<menuitem action='ExportAudio'/>
<menuitem action='StemExport'/>
@@ -282,9 +281,7 @@
<menuitem action='snap-regions-to-grid'/>
<menuitem action='toggle-region-lock'/>
<menuitem action='toggle-region-lock-style'/>
-#ifndef NOVIDEOTIMELINE
<menuitem action='toggle-region-video-lock'/>
-#endif
<menuitem action='set-region-sync-position'/>
<menuitem action='remove-region-sync'/>
<menuitem action='nudge-forward'/>
@@ -437,9 +434,7 @@
<menuitem action="toggle-cd-marker-ruler"/>
<menuitem action="toggle-marker-ruler"/>
<separator/>
-#ifndef NOVIDEOTIMELINE
<menuitem action="toggle-video-ruler"/>
-#endif
</menu>
<menu action="VideoMonitorMenu">
<menuitem action="zoom-vmon-100"/>
@@ -543,10 +538,8 @@
<menuitem action="toggle-marker-ruler"/>
<menuitem action="toggle-cd-marker-ruler"/>
<menuitem action="toggle-loop-punch-ruler"/>
-#ifndef NOVIDEOTIMELINE
<separator/>
<menuitem action="toggle-video-ruler"/>
-#endif
</popup>
<popup name='ProcessorMenu'>
@@ -642,9 +635,7 @@
<menuitem action='naturalize-region'/>
<menuitem action='toggle-region-lock'/>
<menuitem action='toggle-region-lock-style'/>
-#ifndef NOVIDEOTIMELINE
<menuitem action='toggle-region-video-lock'/>
-#endif
<menuitem action='snap-regions-to-grid'/>
<menuitem action='set-region-sync-position'/>
<menuitem action='remove-region-sync'/>
diff --git a/gtk2_ardour/ardour_button.cc b/gtk2_ardour/ardour_button.cc
index 89e6a20385..3f118921d6 100644
--- a/gtk2_ardour/ardour_button.cc
+++ b/gtk2_ardour/ardour_button.cc
@@ -162,7 +162,7 @@ ArdourButton::set_markup (const std::string& str)
_layout = Pango::Layout::create (get_pango_context());
}
- _layout->set_text (str);
+ _layout->set_markup (str);
queue_resize ();
}
diff --git a/gtk2_ardour/ardour_button.h b/gtk2_ardour/ardour_button.h
index efa956162a..65ea10b201 100644
--- a/gtk2_ardour/ardour_button.h
+++ b/gtk2_ardour/ardour_button.h
@@ -156,7 +156,7 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
bool _fixed_diameter;
bool _distinct_led_click;
bool _hovering;
-
+
static bool _flat_buttons;
void setup_led_rect ();
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 67520925d9..1ab229dbac 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -109,6 +109,7 @@ typedef uint64_t microseconds_t;
#include "rc_option_editor.h"
#include "route_time_axis.h"
#include "route_params_ui.h"
+#include "session_dialog.h"
#include "session_metadata_dialog.h"
#include "session_option_editor.h"
#include "shuttle_control.h"
@@ -156,7 +157,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
/* start of private members */
- , _startup (0)
, nsm (0)
, _was_dirty (false)
, _mixer_on_top (false)
@@ -191,6 +191,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
, about (X_("about"), _("About"))
, location_ui (X_("locations"), _("Locations"))
, route_params (X_("inspector"), _("Tracks and Busses"))
+ , audio_midi_setup (X_("audio-midi-setup"), _("Audio/MIDI Setup"))
, session_option_editor (X_("session-options-editor"), _("Properties"), boost::bind (&ARDOUR_UI::create_session_option_editor, this))
, add_video_dialog (X_("add-video"), _("Add Tracks/Busses"), boost::bind (&ARDOUR_UI::create_add_video_dialog, this))
, bundle_manager (X_("bundle-manager"), _("Bundle Manager"), boost::bind (&ARDOUR_UI::create_bundle_manager, this))
@@ -202,7 +203,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
, _status_bar_visibility (X_("status-bar"))
, _feedback_exists (false)
- , _audio_midi_setup (0)
{
Gtkmm2ext::init(localedir);
@@ -353,6 +353,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
WM::Manager::instance().register_window (&add_route_dialog);
WM::Manager::instance().register_window (&add_video_dialog);
WM::Manager::instance().register_window (&route_params);
+ WM::Manager::instance().register_window (&audio_midi_setup);
WM::Manager::instance().register_window (&bundle_manager);
WM::Manager::instance().register_window (&location_ui);
WM::Manager::instance().register_window (&big_clock_window);
@@ -366,9 +367,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
(void) theme_manager.get (true);
- starting.connect (sigc::mem_fun(*this, &ARDOUR_UI::startup));
- stopping.connect (sigc::mem_fun(*this, &ARDOUR_UI::shutdown));
-
_process_thread = new ProcessThread ();
_process_thread->init ();
@@ -407,58 +405,12 @@ ARDOUR_UI::engine_running ()
if (first_time_engine_run) {
post_engine();
first_time_engine_run = false;
- }
+ }
- ActionManager::set_sensitive (ActionManager::engine_sensitive_actions, true);
- ActionManager::set_sensitive (ActionManager::engine_opposite_sensitive_actions, false);
-
- Glib::RefPtr<Action> action;
- const char* action_name = 0;
-
- switch (AudioEngine::instance()->samples_per_cycle()) {
- case 32:
- action_name = X_("JACKLatency32");
- break;
- case 64:
- action_name = X_("JACKLatency64");
- break;
- case 128:
- action_name = X_("JACKLatency128");
- break;
- case 512:
- action_name = X_("JACKLatency512");
- break;
- case 1024:
- action_name = X_("JACKLatency1024");
- break;
- case 2048:
- action_name = X_("JACKLatency2048");
- break;
- case 4096:
- action_name = X_("JACKLatency4096");
- break;
- case 8192:
- action_name = X_("JACKLatency8192");
- break;
- default:
- /* XXX can we do anything useful ? */
- break;
- }
-
- if (action_name) {
-
- action = ActionManager::get_action (X_("JACK"), action_name);
-
- if (action) {
- Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic (action);
- ract->set_active ();
- }
-
- update_disk_space ();
- update_cpu_load ();
- update_sample_rate (AudioEngine::instance()->sample_rate());
- update_timecode_format ();
- }
+ update_disk_space ();
+ update_cpu_load ();
+ update_sample_rate (AudioEngine::instance()->sample_rate());
+ update_timecode_format ();
}
void
@@ -486,13 +438,13 @@ ARDOUR_UI::engine_halted (const char* reason, bool free_reason)
*/
if (strlen (reason)) {
- msgstr = string_compose (_("The audio backend (JACK) was shutdown because:\n\n%1"), reason);
+ msgstr = string_compose (_("The audio backend was shutdown because:\n\n%1"), reason);
} else {
msgstr = string_compose (_("\
-JACK has either been shutdown or it\n\
+The audio backend has either been shutdown or it\n\
disconnected %1 because %1\n\
was not fast enough. Try to restart\n\
-JACK, reconnect and save the session."), PROGRAM_NAME);
+the audio backend and save the session."), PROGRAM_NAME);
}
MessageDialog msg (*editor, msgstr);
@@ -587,6 +539,10 @@ ARDOUR_UI::post_engine ()
ARDOUR_UI::~ARDOUR_UI ()
{
+ if (ui_config->dirty()) {
+ ui_config->save_state();
+ }
+
delete keyboard;
delete editor;
delete mixer;
@@ -763,11 +719,12 @@ ARDOUR_UI::check_announcements ()
#endif
}
-void
-ARDOUR_UI::startup ()
+int
+ARDOUR_UI::starting ()
{
Application* app = Application::instance ();
char *nsm_url;
+ bool brand_new_user = ArdourStartup::required ();
app->ShouldQuit.connect (sigc::mem_fun (*this, &ARDOUR_UI::queue_finish));
app->ShouldLoad.connect (sigc::mem_fun (*this, &ARDOUR_UI::idle_load));
@@ -826,10 +783,39 @@ ARDOUR_UI::startup ()
delete nsm;
nsm = 0;
}
- }
- else if (get_session_parameters (true, ARDOUR_COMMAND_LINE::new_session, ARDOUR_COMMAND_LINE::load_template)) {
- exit (1);
+ } else {
+
+ if (brand_new_user) {
+ ArdourStartup s;
+ s.present ();
+ main().run();
+ s.hide ();
+ switch (s.response ()) {
+ case Gtk::RESPONSE_OK:
+ break;
+ default:
+ return -1;
+ }
+ }
+
+ /* we need to create this early because it may need to set the
+ * audio backend end up.
+ */
+
+ try {
+ audio_midi_setup.get (true);
+ } catch (...) {
+ return -1;
+ }
+
+ /* go get a session */
+
+ const bool new_session_required = (ARDOUR_COMMAND_LINE::new_session || brand_new_user);
+
+ if (get_session_parameters (false, new_session_required, ARDOUR_COMMAND_LINE::load_template)) {
+ return -1;
+ }
}
use_config ();
@@ -844,6 +830,7 @@ ARDOUR_UI::startup ()
_status_bar_visibility.update ();
BootMessage (string_compose (_("%1 is ready for use"), PROGRAM_NAME));
+ return 0;
}
void
@@ -1157,7 +1144,6 @@ ARDOUR_UI::update_sample_rate (framecnt_t)
}
}
}
-
sample_rate_label.set_markup (buf);
}
@@ -1861,7 +1847,7 @@ ARDOUR_UI::transport_roll ()
#if 0
if (_session->config.get_external_sync()) {
switch (Config->get_sync_source()) {
- case JACK:
+ case Engine:
break;
default:
/* transport controlled by the master */
@@ -1911,7 +1897,7 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode)
if (_session->config.get_external_sync()) {
switch (Config->get_sync_source()) {
- case JACK:
+ case Engine:
break;
default:
/* transport controlled by the master */
@@ -2483,7 +2469,7 @@ ARDOUR_UI::ask_about_loading_existing_session (const std::string& session_path)
}
int
-ARDOUR_UI::build_session_from_nsd (const std::string& session_path, const std::string& session_name)
+ARDOUR_UI::build_session_from_dialog (SessionDialog& sd, const std::string& session_path, const std::string& session_name)
{
BusProfile bus_profile;
@@ -2499,13 +2485,13 @@ ARDOUR_UI::build_session_from_nsd (const std::string& session_path, const std::s
/* get settings from advanced section of NSD */
- if (_startup->create_master_bus()) {
- bus_profile.master_out_channels = (uint32_t) _startup->master_channel_count();
+ if (sd.create_master_bus()) {
+ bus_profile.master_out_channels = (uint32_t) sd.master_channel_count();
} else {
bus_profile.master_out_channels = 0;
}
- if (_startup->connect_inputs()) {
+ if (sd.connect_inputs()) {
bus_profile.input_ac = AutoConnectPhysical;
} else {
bus_profile.input_ac = AutoConnectOption (0);
@@ -2513,16 +2499,16 @@ ARDOUR_UI::build_session_from_nsd (const std::string& session_path, const std::s
bus_profile.output_ac = AutoConnectOption (0);
- if (_startup->connect_outputs ()) {
- if (_startup->connect_outs_to_master()) {
+ if (sd.connect_outputs ()) {
+ if (sd.connect_outs_to_master()) {
bus_profile.output_ac = AutoConnectMaster;
- } else if (_startup->connect_outs_to_physical()) {
+ } else if (sd.connect_outs_to_physical()) {
bus_profile.output_ac = AutoConnectPhysical;
}
}
- bus_profile.requested_physical_in = (uint32_t) _startup->input_limit_count();
- bus_profile.requested_physical_out = (uint32_t) _startup->output_limit_count();
+ bus_profile.requested_physical_in = (uint32_t) sd.input_limit_count();
+ bus_profile.requested_physical_out = (uint32_t) sd.output_limit_count();
}
if (build_session (session_path, session_name, bus_profile)) {
@@ -2558,6 +2544,7 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri
string template_name;
int ret = -1;
bool likely_new = false;
+ bool cancel_not_quit;
/* deal with any existing DIRTY session now, rather than later. don't
* treat a non-dirty session this way, so that it stays visible
@@ -2568,6 +2555,11 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri
ARDOUR_UI::instance()->video_timeline->sync_session_state();
}
+ /* if there is already a session, relabel the button
+ on the SessionDialog so that we don't Quit directly
+ */
+ cancel_not_quit = (_session != 0);
+
if (_session && _session->dirty()) {
if (unload_session (false)) {
/* unload cancelled by user */
@@ -2581,6 +2573,20 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri
template_name = load_template;
}
+ session_name = basename_nosuffix (ARDOUR_COMMAND_LINE::session_name);
+ session_path = ARDOUR_COMMAND_LINE::session_name;
+
+ if (!session_path.empty()) {
+ if (Glib::file_test (session_path.c_str(), Glib::FILE_TEST_EXISTS)) {
+ if (Glib::file_test (session_path.c_str(), Glib::FILE_TEST_IS_REGULAR)) {
+ /* session/snapshot file, change path to be dir */
+ session_path = Glib::path_get_dirname (session_path);
+ }
+ }
+ }
+
+ SessionDialog session_dialog (should_be_new, session_name, session_path, load_template, cancel_not_quit);
+
while (ret != 0) {
if (!ARDOUR_COMMAND_LINE::session_name.empty()) {
@@ -2603,34 +2609,35 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri
} else {
session_path = "";
session_name = "";
+ session_dialog.clear_given ();
}
-
- delete _startup;
- _startup = new ArdourStartup (should_be_new, session_name, session_path, load_template);
- if (!_startup->ready_without_display()) {
- _startup->present ();
- main().run();
- _startup->hide ();
- }
-
- switch (_startup->response()) {
- case RESPONSE_OK:
- break;
- default:
- if (quit_on_cancel) {
- exit (1);
- } else {
- return ret;
+ if (should_be_new || session_name.empty()) {
+ /* need the dialog to get info from user */
+
+ cerr << "run dialog\n";
+
+ switch (session_dialog.run()) {
+ case RESPONSE_ACCEPT:
+ break;
+ default:
+ if (quit_on_cancel) {
+ exit (1);
+ } else {
+ return ret;
+ }
}
+
+ session_dialog.hide ();
}
/* if we run the startup dialog again, offer more than just "new session" */
should_be_new = false;
- session_name = _startup->session_name (likely_new);
-
+ session_name = session_dialog.session_name (likely_new);
+ session_path = session_dialog.session_folder ();
+
if (nsm) {
likely_new = true;
}
@@ -2647,8 +2654,8 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri
continue;
}
- if (_startup->use_session_template()) {
- template_name = _startup->session_template_name();
+ if (session_dialog.use_session_template()) {
+ template_name = session_dialog.session_template_name();
_session_is_new = true;
}
@@ -2665,12 +2672,12 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri
} else {
- session_path = _startup->session_folder();
+ session_path = session_dialog.session_folder();
char illegal = Session::session_name_is_legal (session_name);
if (illegal) {
- MessageDialog msg (*_startup,
+ MessageDialog msg (session_dialog,
string_compose (_("To ensure compatibility with various systems\n"
"session names may not contain a '%1' character"),
illegal));
@@ -2682,6 +2689,7 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri
if (Glib::file_test (session_path, Glib::FileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))) {
+
if (likely_new && !nsm) {
std::string existing = Glib::build_filename (session_path, session_name);
@@ -2697,12 +2705,7 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri
} else {
if (!likely_new) {
- if (_startup) {
- pop_back_splash (*_startup);
- } else {
- hide_splash ();
- }
-
+ pop_back_splash (session_dialog);
MessageDialog msg (string_compose (_("There is no existing session at \"%1\""), session_path));
msg.run ();
ARDOUR_COMMAND_LINE::session_name = ""; // cancel that
@@ -2710,10 +2713,11 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri
}
char illegal = Session::session_name_is_legal(session_name);
+
if (illegal) {
- pop_back_splash (*_startup);
- MessageDialog msg (*_startup, string_compose(_("To ensure compatibility with various systems\n"
- "session names may not contain a '%1' character"), illegal));
+ pop_back_splash (session_dialog);
+ MessageDialog msg (session_dialog, string_compose(_("To ensure compatibility with various systems\n"
+ "session names may not contain a '%1' character"), illegal));
msg.run ();
ARDOUR_COMMAND_LINE::session_name = ""; // cancel that
continue;
@@ -2724,7 +2728,7 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri
if (likely_new && template_name.empty()) {
- ret = build_session_from_nsd (session_path, session_name);
+ ret = build_session_from_dialog (session_dialog, session_path, session_name);
} else {
@@ -2739,6 +2743,12 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri
_session->save_state (ARDOUR_COMMAND_LINE::immediate_save, false);
exit (1);
}
+
+ /* clear this to avoid endless attempts to load the
+ same session.
+ */
+
+ ARDOUR_COMMAND_LINE::session_name = "";
}
}
@@ -2831,22 +2841,12 @@ ARDOUR_UI::load_session (const std::string& path, const std::string& snap_name,
Gtk::MESSAGE_INFO,
BUTTONS_OK);
+ msg.set_keep_above (true);
msg.set_title (_("Loading Error"));
- msg.set_secondary_text (_("Click the Refresh button to try again."));
- msg.add_button (Stock::REFRESH, 1);
msg.set_position (Gtk::WIN_POS_CENTER);
pop_back_splash (msg);
msg.present ();
-
- int response = msg.run ();
-
- switch (response) {
- case 1:
- break;
- default:
- exit (1);
- }
-
+ (void) msg.run ();
msg.hide ();
goto out;
@@ -2860,6 +2860,22 @@ ARDOUR_UI::load_session (const std::string& path, const std::string& snap_name,
}
}
+ if (!new_session->writable()) {
+ MessageDialog msg (_("This session has been opened in read-only mode.\n\nYou will not be able to record or save."),
+ true,
+ Gtk::MESSAGE_INFO,
+ BUTTONS_OK);
+
+ msg.set_keep_above (true);
+ msg.set_title (_("Read-only Session"));
+ msg.set_position (Gtk::WIN_POS_CENTER);
+ pop_back_splash (msg);
+ msg.present ();
+ (void) msg.run ();
+ msg.hide ();
+ }
+
+
/* Now the session been created, add the transport controls */
new_session->add_controllable(roll_controllable);
new_session->add_controllable(stop_controllable);
@@ -3797,6 +3813,7 @@ ARDOUR_UI::disconnect_from_engine ()
/* drop connection to AudioEngine::Halted so that we don't act
* as if the engine unexpectedly shut down
*/
+
halt_connection.disconnect ();
if (AudioEngine::instance()->stop ()) {
@@ -3815,8 +3832,13 @@ int
ARDOUR_UI::reconnect_to_engine ()
{
if (AudioEngine::instance()->start ()) {
- MessageDialog msg (*editor, _("Could not reconnect to the Audio/MIDI engine"));
- msg.run ();
+ if (editor) {
+ MessageDialog msg (*editor, _("Could not reconnect to the Audio/MIDI engine"));
+ msg.run ();
+ } else {
+ MessageDialog msg (_("Could not reconnect to the Audio/MIDI engine"));
+ msg.run ();
+ }
return -1;
}
@@ -4129,41 +4151,13 @@ ARDOUR_UI::reset_route_peak_display (Route* route)
}
}
-void
-ARDOUR_UI::toggle_audio_midi_setup ()
-{
- Glib::RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("toggle-audio-midi-setup"));
- if (!act) {
- return;
- }
-
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
-
- if (tact->get_active()) {
- launch_audio_midi_setup ();
- } else {
- _audio_midi_setup->hide ();
- }
-}
-
-void
-ARDOUR_UI::launch_audio_midi_setup ()
-{
- if (!_audio_midi_setup) {
- _audio_midi_setup = new EngineControl ();
- }
-
- _audio_midi_setup->present ();
-}
-
int
ARDOUR_UI::do_audio_midi_setup (uint32_t desired_sample_rate)
{
- launch_audio_midi_setup ();
+ audio_midi_setup->set_desired_sample_rate (desired_sample_rate);
+ audio_midi_setup->set_position (WIN_POS_CENTER);
- _audio_midi_setup->set_desired_sample_rate (desired_sample_rate);
-
- switch (_audio_midi_setup->run()) {
+ switch (audio_midi_setup->run()) {
case Gtk::RESPONSE_OK:
return 0;
case Gtk::RESPONSE_APPLY:
@@ -4172,3 +4166,5 @@ ARDOUR_UI::do_audio_midi_setup (uint32_t desired_sample_rate)
return -1;
}
}
+
+
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 09edb9de38..1052ee23a6 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -82,7 +82,6 @@ class AddRouteDialog;
class AddVideoDialog;
class VideoTimeLine;
class SystemExec;
-class ArdourStartup;
class ArdourKeyboard;
class AudioClock;
class BigClockWindow;
@@ -97,6 +96,7 @@ class Mixer_UI;
class PublicEditor;
class RCOptionEditor;
class RouteParams_UI;
+class SessionDialog;
class SessionOptionEditor;
class ShuttleControl;
class Splash;
@@ -152,7 +152,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
bool get_smart_mode () const;
int get_session_parameters (bool quit_on_cancel, bool should_be_new = false, std::string load_template = "");
- int build_session_from_nsd (const std::string& session_name, const std::string& session_path);
+ int build_session_from_dialog (SessionDialog&, const std::string& session_name, const std::string& session_path);
bool ask_about_loading_existing_session (const std::string& session_path);
/// @return true if session was successfully unloaded.
@@ -311,11 +311,10 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
void toggle_session_options_window ();
private:
- ArdourStartup* _startup;
- Gtk::Tooltips _tooltips;
+ Gtk::Tooltips _tooltips;
NSM_Client *nsm;
- bool _was_dirty;
- bool _mixer_on_top;
+ bool _was_dirty;
+ bool _mixer_on_top;
bool first_time_engine_run;
void goto_editor_window ();
@@ -330,8 +329,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
static ARDOUR_UI *theArdourUI;
- void startup ();
- void shutdown ();
+ int starting ();
int ask_about_saving_session (const std::vector<std::string>& actions);
@@ -602,6 +600,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
WM::Proxy<About> about;
WM::Proxy<LocationUIWindow> location_ui;
WM::Proxy<RouteParams_UI> route_params;
+ WM::Proxy<EngineControl> audio_midi_setup;
/* Windows/Dialogs that require a creator method */
@@ -669,8 +668,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
int pending_state_dialog ();
int sr_mismatch_dialog (ARDOUR::framecnt_t, ARDOUR::framecnt_t);
- void set_engine_buffer_size (ARDOUR::pframes_t);
-
Gtk::MenuItem* jack_disconnect_item;
Gtk::MenuItem* jack_reconnect_item;
Gtk::Menu* jack_bufsize_menu;
@@ -748,8 +745,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
std::string _announce_string;
void check_announcements ();
- EngineControl* _audio_midi_setup;
- void launch_audio_midi_setup ();
int do_audio_midi_setup (uint32_t);
};
diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc
index 821382717f..fbfc8c7afd 100644
--- a/gtk2_ardour/ardour_ui_dependents.cc
+++ b/gtk2_ardour/ardour_ui_dependents.cc
@@ -51,14 +51,6 @@ namespace ARDOUR {
using namespace ARDOUR;
void
-ARDOUR_UI::shutdown ()
-{
- if (ui_config->dirty()) {
- ui_config->save_state();
- }
-}
-
-void
ARDOUR_UI::we_have_dependents ()
{
install_actions ();
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index b64498fb33..0ed7a95df3 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -139,7 +139,7 @@ ARDOUR_UI::install_actions ()
sigc::mem_fun (*this, &ARDOUR_UI::remove_video));
act->set_sensitive (false);
act = ActionManager::register_action (main_actions, X_("ExportVideo"), _("Export To Video File"),
- sigc::mem_fun (*editor, &PublicEditor::export_video));
+ hide_return (sigc::bind (sigc::mem_fun(*editor, &PublicEditor::export_video), false)));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (main_actions, X_("Snapshot"), _("Snapshot..."), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::snapshot_session), false));
@@ -197,7 +197,6 @@ ARDOUR_UI::install_actions ()
ActionManager::register_toggle_action (common_actions, X_("toggle-mixer"), S_("Window|Mixer"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_mixer_window));
ActionManager::register_action (common_actions, X_("toggle-editor-mixer"), _("Toggle Editor+Mixer"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_editor_mixer));
ActionManager::register_toggle_action (common_actions, X_("toggle-meterbridge"), S_("Window|Meterbridge"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_meterbridge));
- ActionManager::register_toggle_action (common_actions, X_("toggle-audio-midi-setup"), S_("Window|Audio/MIDI Setup"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_audio_midi_setup));
act = ActionManager::register_action (common_actions, X_("NewMIDITracer"), _("MIDI Tracer"), sigc::mem_fun(*this, &ARDOUR_UI::new_midi_tracer_window));
ActionManager::session_sensitive_actions.push_back (act);
@@ -397,60 +396,6 @@ ARDOUR_UI::install_actions ()
}
void
-ARDOUR_UI::set_engine_buffer_size (pframes_t nframes)
-{
- Glib::RefPtr<Action> action;
- const char* action_name = 0;
-
- switch (nframes) {
- case 32:
- action_name = X_("EngineLatency32");
- break;
- case 64:
- action_name = X_("EngineLatency64");
- break;
- case 128:
- action_name = X_("EngineLatency128");
- break;
- case 256:
- action_name = X_("EngineLatency256");
- break;
- case 512:
- action_name = X_("EngineLatency512");
- break;
- case 1024:
- action_name = X_("EngineLatency1024");
- break;
- case 2048:
- action_name = X_("EngineLatency2048");
- break;
- case 4096:
- action_name = X_("EngineLatency4096");
- break;
- case 8192:
- action_name = X_("EngineLatency8192");
- break;
- default:
- /* XXX can we do anything useful ? */
- break;
- }
-
- if (action_name) {
-
- action = ActionManager::get_action (X_("JACK"), action_name);
-
- if (action) {
- Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic (action);
-
- if (ract && ract->get_active()) {
- AudioEngine::instance()->request_buffer_size (nframes);
- update_sample_rate (0);
- }
- }
- }
-}
-
-void
ARDOUR_UI::build_menu_bar ()
{
menu_bar = dynamic_cast<MenuBar*> (ActionManager::get_widget (X_("/Main")));
@@ -528,7 +473,7 @@ ARDOUR_UI::build_menu_bar ()
_status_bar_visibility.add (&disk_space_label, X_("Disk"), _("Disk Space"), disk_space);
_status_bar_visibility.add (&cpu_load_label, X_("DSP"), _("DSP"), true);
_status_bar_visibility.add (&buffer_load_label, X_("Buffers"), _("Buffers"), true);
- _status_bar_visibility.add (&sample_rate_label, X_("JACK"), _("JACK Sampling Rate and Latency"), true);
+ _status_bar_visibility.add (&sample_rate_label, X_("Audio"), _("Audio"), true);
_status_bar_visibility.add (&timecode_format_label, X_("TCFormat"), _("Timecode Format"), true);
_status_bar_visibility.add (&format_label, X_("Format"), _("File Format"), true);
@@ -614,7 +559,7 @@ ARDOUR_UI::save_ardour_state ()
window_node->add_child_nocopy (*tearoff_node);
Config->add_extra_xml (*window_node);
- Config->add_extra_xml (_audio_midi_setup->get_state());
+ Config->add_extra_xml (audio_midi_setup->get_state());
Config->save_state();
diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc
index 55314037e3..fe88d8dff5 100644
--- a/gtk2_ardour/ardour_ui_options.cc
+++ b/gtk2_ardour/ardour_ui_options.cc
@@ -33,8 +33,6 @@
#include "ardour/osc.h"
#endif
-#include "canvas/wave_view.h"
-
#include "audio_clock.h"
#include "ardour_ui.h"
#include "actions.h"
@@ -62,7 +60,7 @@ ARDOUR_UI::toggle_external_sync()
{
if (_session) {
if (_session->config.get_video_pullup() != 0.0f) {
- if (Config->get_sync_source() == JACK) {
+ if (Config->get_sync_source() == Engine) {
MessageDialog msg (
_("It is not possible to use JACK as the the sync source\n\
when the pull up/down setting is non-zero."));
@@ -342,16 +340,6 @@ ARDOUR_UI::parameter_changed (std::string p)
ActionManager::map_some_state ("options", "SendMMC", &RCConfiguration::get_send_mmc);
- } else if (p == "use-osc") {
-
-#ifdef HAVE_LIBLO
- if (Config->get_use_osc()) {
- osc->start ();
- } else {
- osc->stop ();
- }
-#endif
-
} else if (p == "keep-tearoffs") {
ActionManager::map_some_state ("Common", "KeepTearoffs", &RCConfiguration::get_keep_tearoffs);
} else if (p == "mmc-control") {
@@ -467,7 +455,7 @@ ARDOUR_UI::synchronize_sync_source_and_video_pullup ()
act->set_sensitive (true);
} else {
/* can't sync to JACK if video pullup != 0.0 */
- if (Config->get_sync_source() == JACK) {
+ if (Config->get_sync_source() == Engine) {
act->set_sensitive (false);
} else {
act->set_sensitive (true);
diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc
index c658160e14..6680e95b15 100644
--- a/gtk2_ardour/audio_clock.cc
+++ b/gtk2_ardour/audio_clock.cc
@@ -996,7 +996,7 @@ AudioClock::set_slave_info ()
Slave* slave = _session->slave();
switch (sync_src) {
- case JACK:
+ case Engine:
_left_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "%2</span></span>",
INFO_FONT_SIZE, sync_source_to_string(sync_src, true)));
_right_layout->set_text ("");
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index c7bdfc15da..5da1d09d8f 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -1913,6 +1913,9 @@ Editor::add_selection_context_items (Menu_Helpers::MenuList& edit_items)
edit_items.push_back (MenuElem (_("Bounce Range to Region List"), sigc::bind (sigc::mem_fun(*this, &Editor::bounce_range_selection), false, false)));
edit_items.push_back (MenuElem (_("Bounce Range to Region List With Processing"), sigc::bind (sigc::mem_fun(*this, &Editor::bounce_range_selection), false, true)));
edit_items.push_back (MenuElem (_("Export Range..."), sigc::mem_fun(*this, &Editor::export_selection)));
+ if (ARDOUR_UI::instance()->video_timeline->get_duration() > 0) {
+ edit_items.push_back (MenuElem (_("Export Video Range..."), sigc::bind (sigc::mem_fun(*this, &Editor::export_video), true)));
+ }
}
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 566586ebe4..c427429897 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -895,7 +895,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void toggle_ruler_video (bool onoff) {ruler_video_action->set_active(onoff);}
int videotl_bar_height; /* in units of timebar_height; default: 4 */
int get_videotl_bar_height () const { return videotl_bar_height; }
- void export_video ();
+ void export_video (bool range = false);
void toggle_region_video_lock ();
Gtk::VBox time_bars_vbox;
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index e1daeca75c..6ef4cebf6b 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -2100,7 +2100,7 @@ Editor::transition_to_rolling (bool fwd)
if (_session->config.get_external_sync()) {
switch (Config->get_sync_source()) {
- case JACK:
+ case Engine:
break;
default:
/* transport controlled by the master */
diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc
index ad5263d1d1..72a0da2909 100644
--- a/gtk2_ardour/editor_regions.cc
+++ b/gtk2_ardour/editor_regions.cc
@@ -1115,7 +1115,7 @@ EditorRegions::sorter (TreeModel::iterator a, TreeModel::iterator b)
switch (_sort_type) {
case ByName:
- cmp = strcasecmp (region1->name().c_str(), region2->name().c_str());
+ cmp = g_strcasecmp (region1->name().c_str(), region2->name().c_str());
break;
case ByLength:
@@ -1140,7 +1140,7 @@ EditorRegions::sorter (TreeModel::iterator a, TreeModel::iterator b)
break;
case BySourceFileName:
- cmp = strcasecmp (region1->source()->name().c_str(), region2->source()->name().c_str());
+ cmp = g_strcasecmp (region1->source()->name().c_str(), region2->source()->name().c_str());
break;
case BySourceFileLength:
@@ -1153,9 +1153,9 @@ EditorRegions::sorter (TreeModel::iterator a, TreeModel::iterator b)
case BySourceFileFS:
if (region1->source()->name() == region2->source()->name()) {
- cmp = strcasecmp (region1->name().c_str(), region2->name().c_str());
+ cmp = g_strcasecmp (region1->name().c_str(), region2->name().c_str());
} else {
- cmp = strcasecmp (region1->source()->name().c_str(), region2->source()->name().c_str());
+ cmp = g_strcasecmp (region1->source()->name().c_str(), region2->source()->name().c_str());
}
break;
}
diff --git a/gtk2_ardour/editor_videotimeline.cc b/gtk2_ardour/editor_videotimeline.cc
index 4bf8b047cb..83a9745b89 100644
--- a/gtk2_ardour/editor_videotimeline.cc
+++ b/gtk2_ardour/editor_videotimeline.cc
@@ -109,7 +109,7 @@ Editor::embed_audio_from_video (std::string path, framepos_t n)
}
void
-Editor::export_video ()
+Editor::export_video (bool range)
{
if (ARDOUR::Config->get_show_video_export_info()) {
ExportVideoInfobox infobox (_session);
@@ -125,7 +125,7 @@ Editor::export_video ()
break;
}
}
- ExportVideoDialog dialog (_session, get_selection().time);
+ ExportVideoDialog dialog (_session, get_selection().time, range);
Gtk::ResponseType r = (Gtk::ResponseType) dialog.run();
(void) r; // keep gcc quiet
dialog.hide();
diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc
index 65fa7227a7..b6306ae285 100644
--- a/gtk2_ardour/engine_dialog.cc
+++ b/gtk2_ardour/engine_dialog.cc
@@ -30,6 +30,7 @@
#include "pbd/error.h"
#include "pbd/xml++.h"
#include "pbd/unwind.h"
+#include "pbd/failed_constructor.h"
#include <gtkmm/alignment.h>
#include <gtkmm/stock.h>
@@ -48,6 +49,7 @@
#include "ardour_ui.h"
#include "engine_dialog.h"
#include "gui_thread.h"
+#include "utils.h"
#include "i18n.h"
using namespace std;
@@ -56,9 +58,14 @@ using namespace Gtkmm2ext;
using namespace PBD;
using namespace Glib;
+static const unsigned int midi_tab = -1; /* not currently in use */
+static const unsigned int latency_tab = 1; /* zero-based, page zero is the main setup page */
+
+static const char* results_markup = X_("<span foreground=\"red\" style=\"italic\" size=\"larger\">%1</span>");
+
EngineControl::EngineControl ()
: ArdourDialog (_("Audio/MIDI Setup"))
- , basic_packer (9, 3)
+ , basic_packer (9, 4)
, input_latency_adjustment (0, 0, 99999, 1)
, input_latency (input_latency_adjustment)
, output_latency_adjustment (0, 0, 99999, 1)
@@ -70,181 +77,59 @@ EngineControl::EngineControl ()
, ports_adjustment (128, 8, 1024, 1, 16)
, ports_spinner (ports_adjustment)
, control_app_button (_("Device Control Panel"))
- , lm_start_stop_label (_("Measure latency"))
+ , lm_measure_label (_("Measure"))
, lm_use_button (_("Use results"))
- , lm_table (5, 2)
+ , lm_back_button (_("Back to settings ... (ignore results)"))
+ , lm_button (_("Calibrate..."))
+ , lm_table (12, 3)
, have_lm_results (false)
+ , lm_running (false)
, midi_refresh_button (_("Refresh list"))
- , aj_button (_("Start MIDI ALSA/JACK bridge"))
, ignore_changes (0)
, _desired_sample_rate (0)
+ , no_push (true)
+ , started_at_least_once (false)
{
- if (!ARDOUR::AudioEngine::instance()->setup_required()) {
- _have_control = false;
- } else {
- _have_control = true;
- }
+ using namespace Notebook_Helpers;
+ vector<string> strings;
+ Label* label;
+ AttachOptions xopt = AttachOptions (FILL|EXPAND);
+ int row;
set_name (X_("AudioMIDISetup"));
- build_notebook ();
-
- get_vbox()->set_border_width (12);
- get_vbox()->pack_start (notebook);
-
- control_app_button.signal_clicked().connect (mem_fun (*this, &EngineControl::control_app_button_clicked));
- manage_control_app_sensitivity ();
-
- cancel_button = add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
- ok_button = add_button (Gtk::Stock::OK, Gtk::RESPONSE_OK);
- apply_button = add_button (Gtk::Stock::APPLY, Gtk::RESPONSE_APPLY);
-
- /* Pick up any existing audio setup configuration, if appropriate */
-
- XMLNode* audio_setup = ARDOUR::Config->extra_xml ("AudioMIDISetup");
-
- /* push a change as if we altered the backend */
- backend_changed ();
+ /* the backend combo is the one thing that is ALWAYS visible
+ */
- if (audio_setup) {
- set_state (*audio_setup);
- }
-}
+ vector<const ARDOUR::AudioBackendInfo*> backends = ARDOUR::AudioEngine::instance()->available_backends();
-void
-EngineControl::on_response (int response_id)
-{
- ArdourDialog::on_response (response_id);
-
- switch (response_id) {
- case RESPONSE_APPLY:
- push_state_to_backend (true);
- break;
- case RESPONSE_OK:
- push_state_to_backend (true);
- hide ();
- break;
- case RESPONSE_DELETE_EVENT: {
- GdkEventButton ev;
- ev.type = GDK_BUTTON_PRESS;
- ev.button = 1;
- on_delete_event ((GdkEventAny*) &ev);
- break;
+ if (backends.empty()) {
+ MessageDialog msg (string_compose (_("No audio/MIDI backends detected. %1 cannot run\n\n(This is a build/packaging/system error. It should never happen.)"), PROGRAM_NAME));
+ msg.run ();
+ throw failed_constructor ();
}
- default:
- hide ();
- }
-}
-
-void
-EngineControl::build_notebook ()
-{
- using namespace Notebook_Helpers;
- Label* label;
- vector<string> strings;
- int row = 0;
- vector<const ARDOUR::AudioBackendInfo*> backends = ARDOUR::AudioEngine::instance()->available_backends();
for (vector<const ARDOUR::AudioBackendInfo*>::const_iterator b = backends.begin(); b != backends.end(); ++b) {
strings.push_back ((*b)->name);
}
set_popdown_strings (backend_combo, strings);
backend_combo.set_active_text (strings.front());
+ backend_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::backend_changed));
+
+ /* setup basic packing characteristics for the table used on the main
+ * tab of the notebook
+ */
basic_packer.set_spacings (6);
basic_packer.set_border_width (12);
- basic_packer.set_homogeneous (true);
+ basic_packer.set_homogeneous (false);
- row = 0;
-
- AttachOptions xopt = AttachOptions (FILL|EXPAND);
-
- label = manage (left_aligned_label (_("Audio System:")));
- basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
- basic_packer.attach (backend_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
- row++;
-
- label = manage (left_aligned_label (_("Driver:")));
- basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
- basic_packer.attach (driver_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
- row++;
-
- label = manage (left_aligned_label (_("Device:")));
- basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
- basic_packer.attach (device_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
- row++;
-
- label = manage (left_aligned_label (_("Sample rate:")));
- basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
- basic_packer.attach (sample_rate_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
- row++;
-
-
- label = manage (left_aligned_label (_("Buffer size:")));
- basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
- basic_packer.attach (buffer_size_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
- buffer_size_duration_label.set_alignment (0.0); /* left-align */
- basic_packer.attach (buffer_size_duration_label, 2, 3, row, row+1, xopt, (AttachOptions) 0);
- row++;
-
- input_channels.set_name ("InputChannels");
- input_channels.set_flags(Gtk::CAN_FOCUS);
- input_channels.set_digits(0);
- input_channels.set_wrap(false);
- output_channels.set_editable (true);
-
- label = manage (left_aligned_label (_("Input Channels:")));
- basic_packer.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0);
- basic_packer.attach (input_channels, 1, 2, row, row+1, xopt, (AttachOptions) 0);
- ++row;
-
- output_channels.set_name ("OutputChannels");
- output_channels.set_flags(Gtk::CAN_FOCUS);
- output_channels.set_digits(0);
- output_channels.set_wrap(false);
- output_channels.set_editable (true);
-
- label = manage (left_aligned_label (_("Output Channels:")));
- basic_packer.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0);
- basic_packer.attach (output_channels, 1, 2, row, row+1, xopt, (AttachOptions) 0);
- ++row;
-
- input_latency.set_name ("InputLatency");
- input_latency.set_flags(Gtk::CAN_FOCUS);
- input_latency.set_digits(0);
- input_latency.set_wrap(false);
- input_latency.set_editable (true);
-
- label = manage (left_aligned_label (_("Hardware input latency:")));
- basic_packer.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0);
- basic_packer.attach (input_latency, 1, 2, row, row+1, xopt, (AttachOptions) 0);
- label = manage (left_aligned_label (_("samples")));
- basic_packer.attach (*label, 2, 3, row, row+1, xopt, (AttachOptions) 0);
- ++row;
-
- output_latency.set_name ("OutputLatency");
- output_latency.set_flags(Gtk::CAN_FOCUS);
- output_latency.set_digits(0);
- output_latency.set_wrap(false);
- output_latency.set_editable (true);
-
- label = manage (left_aligned_label (_("Hardware output latency:")));
- basic_packer.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0);
- basic_packer.attach (output_latency, 1, 2, row, row+1, xopt, (AttachOptions) 0);
- label = manage (left_aligned_label (_("samples")));
- basic_packer.attach (*label, 2, 3, row, row+1, xopt, (AttachOptions) 0);
- ++row;
+ /* pack it in */
basic_hbox.pack_start (basic_packer, false, false);
- basic_vbox.pack_start (basic_hbox, false, false);
- Gtk::HBox* hpacker = manage (new HBox);
- hpacker->set_border_width (12);
- hpacker->pack_start (control_app_button, false, false);
- hpacker->show ();
- control_app_button.show();
- basic_vbox.pack_start (*hpacker);
+ /* latency tab */
/* latency measurement tab */
@@ -252,8 +137,10 @@ EngineControl::build_notebook ()
row = 0;
lm_table.set_row_spacings (12);
-
- lm_table.attach (lm_title, 0, 2, row, row+1, xopt, (AttachOptions) 0);
+ lm_table.set_col_spacings (6);
+ lm_table.set_homogeneous (false);
+
+ lm_table.attach (lm_title, 0, 3, row, row+1, xopt, (AttachOptions) 0);
row++;
Gtk::Label* preamble;
@@ -261,17 +148,17 @@ EngineControl::build_notebook ()
preamble = manage (new Label);
preamble->set_width_chars (60);
preamble->set_line_wrap (true);
- preamble->set_markup (_("<span weight=\"bold\">Turn down the volume on your hardware to a very low level.</span>"));
+ preamble->set_markup (_("<span weight=\"bold\">Turn down the volume on your audio equipment to a very low level.</span>"));
- lm_table.attach (*preamble, 0, 2, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0);
+ lm_table.attach (*preamble, 0, 3, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0);
row++;
preamble = manage (new Label);
preamble->set_width_chars (60);
preamble->set_line_wrap (true);
- preamble->set_markup (_("Select two channels below and connect them using a cable or (less ideally) a speaker and microphone."));
+ preamble->set_markup (_("Select two channels below and connect them using a cable."));
- lm_table.attach (*preamble, 0, 2, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0);
+ lm_table.attach (*preamble, 0, 3, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0);
row++;
label = manage (new Label (_("Output channel")));
@@ -279,7 +166,7 @@ EngineControl::build_notebook ()
Gtk::Alignment* misc_align = manage (new Alignment (0.0, 0.5));
misc_align->add (lm_output_channel_combo);
- lm_table.attach (*misc_align, 1, 2, row, row+1, xopt, (AttachOptions) 0);
+ lm_table.attach (*misc_align, 1, 3, row, row+1, xopt, (AttachOptions) 0);
++row;
label = manage (new Label (_("Input channel")));
@@ -287,42 +174,59 @@ EngineControl::build_notebook ()
misc_align = manage (new Alignment (0.0, 0.5));
misc_align->add (lm_input_channel_combo);
- lm_table.attach (*misc_align, 1, 2, row, row+1, FILL, (AttachOptions) 0);
+ lm_table.attach (*misc_align, 1, 3, row, row+1, FILL, (AttachOptions) 0);
++row;
xopt = AttachOptions(0);
- lm_measure_button.add (lm_start_stop_label);
-
- lm_measure_button.signal_toggled().connect (sigc::mem_fun (*this, &EngineControl::latency_button_toggled));
+ lm_measure_label.set_padding (10, 10);
+ lm_measure_button.add (lm_measure_label);
+ lm_measure_button.signal_clicked().connect (sigc::mem_fun (*this, &EngineControl::latency_button_clicked));
lm_use_button.signal_clicked().connect (sigc::mem_fun (*this, &EngineControl::use_latency_button_clicked));
+ lm_back_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (notebook, &Gtk::Notebook::set_current_page), 0));
+
lm_use_button.set_sensitive (false);
-
+
+ /* Increase the default spacing around the labels of these three
+ * buttons
+ */
+
+ Gtk::Misc* l;
+
+ if ((l = dynamic_cast<Gtk::Misc*>(lm_use_button.get_child())) != 0) {
+ l->set_padding (10, 10);
+ }
+
+ if ((l = dynamic_cast<Gtk::Misc*>(lm_back_button.get_child())) != 0) {
+ l->set_padding (10, 10);
+ }
preamble = manage (new Label);
preamble->set_width_chars (60);
preamble->set_line_wrap (true);
- preamble->set_markup (_("Once the channels are connected, click the \"Measure latency\" button."));
- lm_table.attach (*preamble, 0, 2, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0);
+ preamble->set_markup (_("Once the channels are connected, click the \"Measure\" button."));
+ lm_table.attach (*preamble, 0, 3, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0);
row++;
- lm_table.attach (lm_measure_button, 0, 2, row, row+1, xopt, (AttachOptions) 0);
- ++row;
- lm_table.attach (lm_results, 0, 2, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0);
- ++row;
-
-
preamble = manage (new Label);
preamble->set_width_chars (60);
preamble->set_line_wrap (true);
preamble->set_markup (_("When satisfied with the results, click the \"Use results\" button."));
- lm_table.attach (*preamble, 0, 2, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0);
- row++;
+ lm_table.attach (*preamble, 0, 3, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0);
- lm_table.attach (lm_use_button, 0, 2, row, row+1, xopt, (AttachOptions) 0);
- ++row;
+ ++row; // skip a row in the table
+ ++row; // skip a row in the table
+
+ lm_table.attach (lm_results, 0, 3, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0);
+
+ ++row; // skip a row in the table
+ ++row; // skip a row in the table
- lm_results.set_markup ("<i>No measurement results yet</i>");
+ lm_table.attach (lm_measure_button, 0, 1, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0);
+ lm_table.attach (lm_use_button, 1, 2, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0);
+ lm_table.attach (lm_back_button, 2, 3, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0);
+
+ lm_results.set_markup (string_compose (results_markup, _("No measurement results yet")));
lm_vbox.set_border_width (12);
lm_vbox.pack_start (lm_table, false, false);
@@ -330,1090 +234,1467 @@ EngineControl::build_notebook ()
/* pack it all up */
notebook.pages().push_back (TabElem (basic_vbox, _("Audio")));
- notebook.pages().push_back (TabElem (midi_vbox, _("MIDI")));
+ // notebook.pages().push_back (TabElem (midi_vbox, _("MIDI")));
notebook.pages().push_back (TabElem (lm_vbox, _("Latency")));
notebook.set_border_width (12);
- notebook.set_tab_pos (POS_RIGHT);
+ notebook.set_show_tabs (false);
notebook.show_all ();
notebook.set_name ("SettingsNotebook");
- /* Connect to signals */
+ /* packup the notebook */
- backend_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::backend_changed));
- driver_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::driver_changed));
- sample_rate_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::sample_rate_changed));
- buffer_size_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::buffer_size_changed));
- device_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::device_changed));
+ get_vbox()->set_border_width (12);
+ get_vbox()->pack_start (notebook);
- input_latency.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
- output_latency.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
- input_channels.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
- output_channels.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
+ /* need a special function to print "all available channels" when the
+ * channel counts hit zero.
+ */
input_channels.signal_output().connect (sigc::bind (sigc::ptr_fun (&EngineControl::print_channel_count), &input_channels));
output_channels.signal_output().connect (sigc::bind (sigc::ptr_fun (&EngineControl::print_channel_count), &output_channels));
- notebook.signal_switch_page().connect (sigc::mem_fun (*this, &EngineControl::on_switch_page));
-}
-
-EngineControl::~EngineControl ()
-{
-
-}
-
-void
-EngineControl::disable_latency_tab ()
-{
- vector<string> empty;
- set_popdown_strings (lm_output_channel_combo, empty);
- set_popdown_strings (lm_input_channel_combo, empty);
- lm_measure_button.set_sensitive (false);
- lm_use_button.set_sensitive (false);
-}
-
-void
-EngineControl::enable_latency_tab ()
-{
- vector<string> outputs;
- ARDOUR::AudioEngine::instance()->get_physical_outputs (ARDOUR::DataType::AUDIO, outputs);
- set_popdown_strings (lm_output_channel_combo, outputs);
- lm_output_channel_combo.set_active_text (outputs.front());
-
- vector<string> inputs;
- ARDOUR::AudioEngine::instance()->get_physical_inputs (ARDOUR::DataType::AUDIO, inputs);
- set_popdown_strings (lm_input_channel_combo, inputs);
- lm_input_channel_combo.set_active_text (inputs.front());
-
- lm_measure_button.set_sensitive (true);
-}
-
-void
-EngineControl::setup_midi_tab_for_backend ()
-{
- string backend = backend_combo.get_active_text ();
-
- Gtkmm2ext::container_clear (midi_vbox);
-
- midi_vbox.set_border_width (12);
- midi_device_table.set_border_width (12);
-
- if (backend == "JACK") {
- setup_midi_tab_for_jack ();
- }
-
- midi_vbox.pack_start (midi_device_table, true, true);
- midi_vbox.pack_start (midi_refresh_button, false, false);
- midi_vbox.show_all ();
-
- midi_refresh_button.signal_clicked().connect (sigc::mem_fun (*this, &EngineControl::refresh_midi_display));
-}
-
-void
-EngineControl::setup_midi_tab_for_jack ()
-{
- midi_vbox.pack_start (aj_button, false, false);
-}
-
-void
-EngineControl::refresh_midi_display ()
-{
- boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
- assert (backend);
-
- vector<string> midi_inputs;
- vector<string> midi_outputs;
- int row = 0;
- AttachOptions xopt = AttachOptions (FILL|EXPAND);
- Gtk::Label* l;
-
- Gtkmm2ext::container_clear (midi_device_table);
-
- backend->get_physical_inputs (ARDOUR::DataType::MIDI, midi_inputs);
- backend->get_physical_outputs (ARDOUR::DataType::MIDI, midi_outputs);
-
- midi_device_table.set_spacings (6);
- midi_device_table.set_homogeneous (true);
- midi_device_table.resize (midi_inputs.size() + midi_outputs.size() + 3, 1);
-
- l = manage (new Label);
- l->set_markup (string_compose ("<span size=\"large\" weight=\"bold\">%1</span>", _("MIDI Inputs")));
- midi_device_table.attach (*l, 0, 1, row, row + 1, xopt, AttachOptions (0));
- l->set_alignment (0, 0.5);
- row++;
- l->show ();
-
- for (vector<string>::iterator p = midi_inputs.begin(); p != midi_inputs.end(); ++p) {
- l = manage (new Label ((*p).substr ((*p).find_last_of (':') + 1)));
- l->set_alignment (0, 0.5);
- midi_device_table.attach (*l, 0, 1, row, row + 1, xopt, AttachOptions (0));
- l->show ();
- row++;
- }
-
- row++; // extra row of spacing
-
- l = manage (new Label);
- l->set_markup (string_compose ("<span size=\"large\" weight=\"bold\">%1</span>", _("MIDI Outputs")));
- midi_device_table.attach (*l, 0, 1, row, row + 1, xopt, AttachOptions (0));
- l->set_alignment (0, 0.5);
- row++;
- l->show ();
-
- for (vector<string>::iterator p = midi_outputs.begin(); p != midi_outputs.end(); ++p) {
- l = manage (new Label ((*p).substr ((*p).find_last_of (':') + 1)));
- l->set_alignment (0, 0.5);
- midi_device_table.attach (*l, 0, 1, row, row + 1, xopt, AttachOptions (0));
- l->show ();
- row++;
- }
-}
-
-void
-EngineControl::backend_changed ()
-{
- if (ignore_changes) {
- return;
- }
-
- string backend_name = backend_combo.get_active_text();
- boost::shared_ptr<ARDOUR::AudioBackend> backend;
-
- if (!(backend = ARDOUR::AudioEngine::instance()->set_backend (backend_name, "ardour", ""))) {
- /* eh? setting the backend failed... how ? */
- return;
- }
-
- setup_midi_tab_for_backend ();
-
- if (backend->requires_driver_selection()) {
- vector<string> drivers = backend->enumerate_drivers();
- driver_combo.set_sensitive (true);
- set_popdown_strings (driver_combo, drivers);
- driver_combo.set_active_text (drivers.front());
- driver_changed ();
- } else {
- driver_combo.set_sensitive (false);
- list_devices ();
- }
-
- maybe_display_saved_state ();
-}
-
-bool
-EngineControl::print_channel_count (Gtk::SpinButton* sb)
-{
- uint32_t cnt = (uint32_t) sb->get_value();
- if (cnt == 0) {
- sb->set_text (_("all available channels"));
- } else {
- char buf[32];
- snprintf (buf, sizeof (buf), "%d", cnt);
- sb->set_text (buf);
- }
- return true;
-}
-
-void
-EngineControl::list_devices ()
-{
- boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
- assert (backend);
-
- /* now fill out devices, mark sample rates, buffer sizes insensitive */
-
- vector<ARDOUR::AudioBackend::DeviceStatus> all_devices = backend->enumerate_devices ();
-
- /* NOTE: Ardour currently does not display the "available" field of the
- * returned devices.
- *
- * Doing so would require a different GUI widget than the combo
- * box/popdown that we currently use, since it has no way to list
- * items that are not selectable. Something more like a popup menu,
- * which could have unselectable items, would be appropriate.
- */
-
- vector<string> available_devices;
-
- for (vector<ARDOUR::AudioBackend::DeviceStatus>::const_iterator i = all_devices.begin(); i != all_devices.end(); ++i) {
- available_devices.push_back (i->name);
- }
-
- ignore_changes++;
- set_popdown_strings (device_combo, available_devices);
- ignore_changes--;
-
- if (!available_devices.empty()) {
- sample_rate_combo.set_sensitive (true);
- buffer_size_combo.set_sensitive (true);
- input_latency.set_sensitive (true);
- output_latency.set_sensitive (true);
- input_channels.set_sensitive (true);
- output_channels.set_sensitive (true);
-
- /* changing the text in the combo will trigger device_changed()
- which should populate the parameter controls
- */
-
- device_combo.set_active_text (available_devices.front());
- } else {
- sample_rate_combo.set_sensitive (true);
- buffer_size_combo.set_sensitive (true);
- input_latency.set_sensitive (true);
- output_latency.set_sensitive (true);
- input_channels.set_sensitive (true);
- output_channels.set_sensitive (true);
- }
-}
-
-void
-EngineControl::driver_changed ()
-{
- if (ignore_changes) {
- return;
- }
-
- boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
- assert (backend);
-
- backend->set_driver (driver_combo.get_active_text());
- list_devices ();
-
- maybe_display_saved_state ();
-}
-
-void
-EngineControl::device_changed ()
-{
- if (ignore_changes) {
- return;
- }
-
- boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
- assert (backend);
- string device_name = device_combo.get_active_text ();
- vector<string> s;
-
- /* don't allow programmatic change to sample_rate_combo to cause a
- recursive call to this method.
- */
-
- ignore_changes++;
-
- /* sample rates */
-
- string desired;
-
- vector<float> sr = backend->available_sample_rates (device_name);
- for (vector<float>::const_iterator x = sr.begin(); x != sr.end(); ++x) {
- s.push_back (rate_as_string (*x));
- if (*x == _desired_sample_rate) {
- desired = s.back();
- }
- }
-
- if (!s.empty()) {
- set_popdown_strings (sample_rate_combo, s);
-
- if (desired.empty()) {
- sample_rate_combo.set_active_text (s.front());
- } else {
- sample_rate_combo.set_active_text (desired);
- }
- } else {
- /* hmm ... how to tell the user about the fact that we have no
- * available sample rates.
- */
- }
-
-
- vector<uint32_t> bs = backend->available_buffer_sizes(device_name);
- s.clear ();
- for (vector<uint32_t>::const_iterator x = bs.begin(); x != bs.end(); ++x) {
- s.push_back (bufsize_as_string (*x));
- }
-
- if (!s.empty()) {
- set_popdown_strings (buffer_size_combo, s);
- buffer_size_combo.set_active_text (s.front());
- show_buffer_duration ();
- } else {
- /* hmm ... how to tell the user about the fact that we have no
- * available buffer sizes.
- */
- }
-
+ control_app_button.signal_clicked().connect (mem_fun (*this, &EngineControl::control_app_button_clicked));
manage_control_app_sensitivity ();
- ignore_changes--;
-
- /* pick up any saved state for this device */
-
- maybe_display_saved_state ();
-
- /* and push it to the backend */
-
- push_state_to_backend (false);
-}
-
-string
-EngineControl::rate_as_string (float r)
-{
- char buf[32];
- if (fmod (r, 1000.0f)) {
- snprintf (buf, sizeof (buf), "%.1f kHz", r/1000.0);
- } else {
- snprintf (buf, sizeof (buf), "%.0f kHz", r/1000.0);
- }
- return buf;
-}
-
-string
-EngineControl::bufsize_as_string (uint32_t sz)
-{
- /* Translators: "samples" is always plural here, so no
- need for plural+singular forms.
- */
- char buf[32];
- snprintf (buf, sizeof (buf), _("%u samples"), sz);
- return buf;
-}
-
-void
-EngineControl::sample_rate_changed ()
-{
- if (ignore_changes) {
- return;
- }
-
- /* reset the strings for buffer size to show the correct msec value
- (reflecting the new sample rate).
- */
-
- show_buffer_duration ();
- save_state ();
-
-}
-
-void
-EngineControl::buffer_size_changed ()
-{
- if (ignore_changes) {
- return;
- }
-
- show_buffer_duration ();
- save_state ();
-}
-
-void
-EngineControl::show_buffer_duration ()
-{
-
- /* buffer sizes - convert from just samples to samples + msecs for
- * the displayed string
- */
-
- string bs_text = buffer_size_combo.get_active_text ();
- uint32_t samples = atoi (bs_text); /* will ignore trailing text */
- uint32_t rate = get_rate();
-
- /* Translators: "msecs" is ALWAYS plural here, so we do not
- need singular form as well.
- */
- /* Developers: note the hard-coding of a double buffered model
- in the (2 * samples) computation of latency. we always start
- the audiobackend in this configuration.
- */
- char buf[32];
- snprintf (buf, sizeof (buf), _("(%.1f msecs)"), (2 * samples) / (rate/1000.0));
- buffer_size_duration_label.set_text (buf);
-}
-
-void
-EngineControl::parameter_changed ()
-{
- if (!ignore_changes) {
- save_state ();
- }
-}
-
-EngineControl::State*
-EngineControl::get_matching_state (const string& backend,
- const string& driver,
- const string& device)
-{
- for (StateList::iterator i = states.begin(); i != states.end(); ++i) {
- if ((*i).backend == backend &&
- (*i).driver == driver &&
- (*i).device == device) {
- return &(*i);
- }
- }
- return 0;
-}
-
-EngineControl::State*
-EngineControl::get_saved_state_for_currently_displayed_backend_and_device ()
-{
- boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
-
- if (backend) {
- return get_matching_state (backend_combo.get_active_text(),
- (backend->requires_driver_selection() ? (std::string) driver_combo.get_active_text() : string()),
- device_combo.get_active_text());
- }
-
-
- return get_matching_state (backend_combo.get_active_text(),
- string(),
- device_combo.get_active_text());
-}
-
-EngineControl::State*
-EngineControl::save_state ()
-{
- bool existing = true;
- State* state = get_saved_state_for_currently_displayed_backend_and_device ();
-
- if (!state) {
- existing = false;
- state = new State;
- }
-
- store_state (*state);
-
- if (!existing) {
- states.push_back (*state);
- }
-
- return state;
-}
-
-void
-EngineControl::store_state (State& state)
-{
- state.backend = get_backend ();
- state.driver = get_driver ();
- state.device = get_device_name ();
- state.sample_rate = get_rate ();
- state.buffer_size = get_buffer_size ();
- state.input_latency = get_input_latency ();
- state.output_latency = get_output_latency ();
- state.input_channels = get_input_channels ();
- state.output_channels = get_output_channels ();
-}
-
-void
-EngineControl::maybe_display_saved_state ()
-{
- State* state = get_saved_state_for_currently_displayed_backend_and_device ();
-
- if (state) {
- ignore_changes++;
- if (!_desired_sample_rate) {
- sample_rate_combo.set_active_text (rate_as_string (state->sample_rate));
- }
- buffer_size_combo.set_active_text (bufsize_as_string (state->buffer_size));
- /* call this explicitly because we're ignoring changes to
- the controls at this point.
- */
- show_buffer_duration ();
- input_latency.set_value (state->input_latency);
- output_latency.set_value (state->output_latency);
- ignore_changes--;
- }
-}
-
-XMLNode&
-EngineControl::get_state ()
-{
- XMLNode* root = new XMLNode ("AudioMIDISetup");
- std::string path;
-
- if (!states.empty()) {
- XMLNode* state_nodes = new XMLNode ("EngineStates");
-
- for (StateList::const_iterator i = states.begin(); i != states.end(); ++i) {
-
- XMLNode* node = new XMLNode ("State");
-
- node->add_property ("backend", (*i).backend);
- node->add_property ("driver", (*i).driver);
- node->add_property ("device", (*i).device);
- node->add_property ("sample-rate", (*i).sample_rate);
- node->add_property ("buffer-size", (*i).buffer_size);
- node->add_property ("input-latency", (*i).input_latency);
- node->add_property ("output-latency", (*i).output_latency);
- node->add_property ("input-channels", (*i).input_channels);
- node->add_property ("output-channels", (*i).output_channels);
- node->add_property ("active", (*i).active ? "yes" : "no");
-
- state_nodes->add_child_nocopy (*node);
- }
-
- root->add_child_nocopy (*state_nodes);
- }
-
- return *root;
-}
-
-void
-EngineControl::set_state (const XMLNode& root)
-{
- XMLNodeList clist, cclist;
- XMLNodeConstIterator citer, cciter;
- XMLNode* child;
- XMLNode* grandchild;
- XMLProperty* prop = NULL;
-
- if (root.name() != "AudioMIDISetup") {
- return;
- }
+ cancel_button = add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+ ok_button = add_button (Gtk::Stock::OK, Gtk::RESPONSE_OK);
+ apply_button = add_button (Gtk::Stock::APPLY, Gtk::RESPONSE_APPLY);
- clist = root.children();
-
- states.clear ();
-
- for (citer = clist.begin(); citer != clist.end(); ++citer) {
-
- child = *citer;
-
- if (child->name() != "EngineStates") {
- continue;
- }
-
- cclist = child->children();
-
- for (cciter = cclist.begin(); cciter != cclist.end(); ++cciter) {
- State state;
-
- grandchild = *cciter;
-
- if (grandchild->name() != "State") {
- continue;
- }
-
- if ((prop = grandchild->property ("backend")) == 0) {
- continue;
- }
- state.backend = prop->value ();
-
- if ((prop = grandchild->property ("driver")) == 0) {
- continue;
- }
- state.driver = prop->value ();
-
- if ((prop = grandchild->property ("device")) == 0) {
- continue;
- }
- state.device = prop->value ();
-
- if ((prop = grandchild->property ("sample-rate")) == 0) {
- continue;
- }
- state.sample_rate = atof (prop->value ());
-
- if ((prop = grandchild->property ("buffer-size")) == 0) {
- continue;
- }
- state.buffer_size = atoi (prop->value ());
-
- if ((prop = grandchild->property ("input-latency")) == 0) {
- continue;
- }
- state.input_latency = atoi (prop->value ());
-
- if ((prop = grandchild->property ("output-latency")) == 0) {
- continue;
- }
- state.output_latency = atoi (prop->value ());
-
- if ((prop = grandchild->property ("input-channels")) == 0) {
- continue;
- }
- state.input_channels = atoi (prop->value ());
-
- if ((prop = grandchild->property ("output-channels")) == 0) {
- continue;
- }
- state.output_channels = atoi (prop->value ());
-
- if ((prop = grandchild->property ("active")) == 0) {
- continue;
- }
- state.active = string_is_affirmative (prop->value ());
-
- states.push_back (state);
- }
- }
+ /* Pick up any existing audio setup configuration, if appropriate */
- /* now see if there was an active state and switch the setup to it */
-
- for (StateList::const_iterator i = states.begin(); i != states.end(); ++i) {
- if ((*i).active) {
- ignore_changes++;
- backend_combo.set_active_text ((*i).backend);
- driver_combo.set_active_text ((*i).driver);
- device_combo.set_active_text ((*i).device);
- sample_rate_combo.set_active_text (rate_as_string ((*i).sample_rate));
- buffer_size_combo.set_active_text (bufsize_as_string ((*i).buffer_size));
- input_latency.set_value ((*i).input_latency);
- output_latency.set_value ((*i).output_latency);
- ignore_changes--;
- break;
- }
- }
-}
+ XMLNode* audio_setup = ARDOUR::Config->extra_xml ("AudioMIDISetup");
+ ARDOUR::AudioEngine::instance()->Running.connect (running_connection, MISSING_INVALIDATOR, boost::bind (&EngineControl::engine_running, this), gui_context());
+ ARDOUR::AudioEngine::instance()->Stopped.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());
-int
-EngineControl::push_state_to_backend (bool start)
-{
- boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ backend_changed ();
- if (!backend) {
- return 0;
+ if (audio_setup) {
+ set_state (*audio_setup);
}
-
- /* figure out what is going to change */
-
- bool restart_required = false;
- bool was_running = ARDOUR::AudioEngine::instance()->running();
- bool change_driver = false;
- bool change_device = false;
- bool change_rate = false;
- bool change_bufsize = false;
- bool change_latency = false;
- bool change_channels = false;
-
- uint32_t ochan = get_output_channels ();
- uint32_t ichan = get_input_channels ();
-
- if (_have_control) {
-
- /* we can control the backend */
-
- if (backend->requires_driver_selection()) {
- if (get_driver() != backend->driver_name()) {
- change_driver = true;
- }
- }
-
- if (get_device_name() != backend->device_name()) {
- change_device = true;
- }
-
- if (get_rate() != backend->sample_rate()) {
- change_rate = true;
- }
-
- if (get_buffer_size() != backend->buffer_size()) {
- change_bufsize = true;
- }
-
- /* zero-requested channels means "all available" */
-
- if (ichan == 0) {
- ichan = backend->input_channels();
- }
-
- if (ochan == 0) {
- ochan = backend->output_channels();
- }
-
- if (ichan != backend->input_channels()) {
- change_channels = true;
- }
-
- if (ochan != backend->output_channels()) {
- change_channels = true;
- }
-
- if (get_input_latency() != backend->systemic_input_latency() ||
- get_output_latency() != backend->systemic_output_latency()) {
- change_latency = true;
- }
-
- } else {
-
- /* we have no control over the backend, meaning that we can
- * only possibly change sample rate and buffer size.
- */
+ /* Connect to signals */
- if (get_rate() != backend->sample_rate()) {
- change_bufsize = true;
- }
+ driver_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::driver_changed));
+ sample_rate_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::sample_rate_changed));
+ buffer_size_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::buffer_size_changed));
+ device_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::device_changed));
+ midi_option_combo.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::midi_option_changed));
- if (get_buffer_size() != backend->buffer_size()) {
- change_bufsize = true;
- }
- }
+ input_latency.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
+ output_latency.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
+ input_channels.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
+ output_channels.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
- if (!_have_control) {
+ notebook.signal_switch_page().connect (sigc::mem_fun (*this, &EngineControl::on_switch_page));
- /* We do not have control over the backend, so the best we can
- * do is try to change the sample rate and/or bufsize and get
- * out of here.
+ no_push = false;
+ }
+
+ void
+ EngineControl::on_response (int response_id)
+ {
+ ArdourDialog::on_response (response_id);
+
+ switch (response_id) {
+ case RESPONSE_APPLY:
+ push_state_to_backend (true);
+ break;
+ case RESPONSE_OK:
+ push_state_to_backend (true);
+ hide ();
+ break;
+ case RESPONSE_DELETE_EVENT: {
+ GdkEventButton ev;
+ ev.type = GDK_BUTTON_PRESS;
+ ev.button = 1;
+ on_delete_event ((GdkEventAny*) &ev);
+ break;
+ }
+ default:
+ hide ();
+ }
+ }
+
+ void
+ EngineControl::build_notebook ()
+ {
+ Label* label;
+ AttachOptions xopt = AttachOptions (FILL|EXPAND);
+
+ /* clear the table */
+
+ Gtkmm2ext::container_clear (basic_vbox);
+ Gtkmm2ext::container_clear (basic_packer);
+
+ label = manage (left_aligned_label (_("Audio System:")));
+ basic_packer.attach (*label, 0, 1, 0, 1, xopt, (AttachOptions) 0);
+ basic_packer.attach (backend_combo, 1, 2, 0, 1, xopt, (AttachOptions) 0);
+
+ lm_button.signal_clicked.connect (sigc::mem_fun (*this, &EngineControl::calibrate_latency));
+ lm_button.set_name ("record enable button");
+ if (_have_control) {
+ build_full_control_notebook ();
+ } else {
+ build_no_control_notebook ();
+ }
+
+ basic_vbox.pack_start (basic_hbox, false, false);
+
+ if (_have_control) {
+ Gtk::HBox* hpacker = manage (new HBox);
+ hpacker->set_border_width (12);
+ hpacker->pack_start (control_app_button, false, false);
+ hpacker->show ();
+ control_app_button.show();
+ basic_vbox.pack_start (*hpacker);
+ }
+
+ basic_vbox.show_all ();
+ }
+
+ void
+ EngineControl::build_full_control_notebook ()
+ {
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ assert (backend);
+
+ using namespace Notebook_Helpers;
+ Label* label;
+ vector<string> strings;
+ AttachOptions xopt = AttachOptions (FILL|EXPAND);
+ int row = 1; // row zero == backend combo
+
+ /* start packing it up */
+
+ if (backend->requires_driver_selection()) {
+ label = manage (left_aligned_label (_("Driver:")));
+ basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
+ basic_packer.attach (driver_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
+ row++;
+ }
+
+ label = manage (left_aligned_label (_("Device:")));
+ basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
+ basic_packer.attach (device_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
+ row++;
+
+ label = manage (left_aligned_label (_("Sample rate:")));
+ basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
+ basic_packer.attach (sample_rate_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
+ row++;
+
+
+ label = manage (left_aligned_label (_("Buffer size:")));
+ basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
+ basic_packer.attach (buffer_size_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
+ buffer_size_duration_label.set_alignment (0.0); /* left-align */
+ basic_packer.attach (buffer_size_duration_label, 2, 3, row, row+1, SHRINK, (AttachOptions) 0);
+ row++;
+
+ input_channels.set_name ("InputChannels");
+ input_channels.set_flags(Gtk::CAN_FOCUS);
+ input_channels.set_digits(0);
+ input_channels.set_wrap(false);
+ output_channels.set_editable (true);
+
+ label = manage (left_aligned_label (_("Input Channels:")));
+ basic_packer.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0);
+ basic_packer.attach (input_channels, 1, 2, row, row+1, xopt, (AttachOptions) 0);
+ ++row;
+
+ output_channels.set_name ("OutputChannels");
+ output_channels.set_flags(Gtk::CAN_FOCUS);
+ output_channels.set_digits(0);
+ output_channels.set_wrap(false);
+ output_channels.set_editable (true);
+
+ label = manage (left_aligned_label (_("Output Channels:")));
+ basic_packer.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0);
+ basic_packer.attach (output_channels, 1, 2, row, row+1, xopt, (AttachOptions) 0);
+ ++row;
+
+ input_latency.set_name ("InputLatency");
+ input_latency.set_flags(Gtk::CAN_FOCUS);
+ input_latency.set_digits(0);
+ input_latency.set_wrap(false);
+ input_latency.set_editable (true);
+
+ label = manage (left_aligned_label (_("Hardware input latency:")));
+ basic_packer.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0);
+ basic_packer.attach (input_latency, 1, 2, row, row+1, xopt, (AttachOptions) 0);
+ label = manage (left_aligned_label (_("samples")));
+ basic_packer.attach (*label, 2, 3, row, row+1, SHRINK, (AttachOptions) 0);
+ ++row;
+
+ output_latency.set_name ("OutputLatency");
+ output_latency.set_flags(Gtk::CAN_FOCUS);
+ output_latency.set_digits(0);
+ output_latency.set_wrap(false);
+ output_latency.set_editable (true);
+
+ label = manage (left_aligned_label (_("Hardware output latency:")));
+ basic_packer.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0);
+ basic_packer.attach (output_latency, 1, 2, row, row+1, xopt, (AttachOptions) 0);
+ label = manage (left_aligned_label (_("samples")));
+ basic_packer.attach (*label, 2, 3, row, row+1, SHRINK, (AttachOptions) 0);
+
+ /* button spans 2 rows */
+
+ basic_packer.attach (lm_button, 3, 4, row-1, row+1, xopt, xopt);
+ ++row;
+
+ label = manage (left_aligned_label (_("MIDI System")));
+ basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
+ basic_packer.attach (midi_option_combo, 1, 2, row, row + 1, SHRINK, (AttachOptions) 0);
+ row++;
+ }
+
+ void
+ EngineControl::build_no_control_notebook ()
+ {
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ assert (backend);
+
+ using namespace Notebook_Helpers;
+ Label* label;
+ vector<string> strings;
+ AttachOptions xopt = AttachOptions (FILL|EXPAND);
+ int row = 1; // row zero == backend combo
+ const string msg = string_compose (_("The %1 audio backend was configured and started externally.\nThis limits your control over it."), backend->name());
+
+ label = manage (new Label);
+ label->set_markup (string_compose ("<span weight=\"bold\" foreground=\"red\">%1</span>", msg));
+ basic_packer.attach (*label, 0, 2, row, row + 1, xopt, (AttachOptions) 0);
+ row++;
+
+ if (backend->can_change_sample_rate_when_running()) {
+ label = manage (left_aligned_label (_("Sample rate:")));
+ basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
+ basic_packer.attach (sample_rate_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
+ row++;
+ }
+
+ if (backend->can_change_buffer_size_when_running()) {
+ label = manage (left_aligned_label (_("Buffer size:")));
+ basic_packer.attach (*label, 0, 1, row, row + 1, xopt, (AttachOptions) 0);
+ basic_packer.attach (buffer_size_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
+ buffer_size_duration_label.set_alignment (0.0); /* left-align */
+ basic_packer.attach (buffer_size_duration_label, 2, 3, row, row+1, xopt, (AttachOptions) 0);
+ row++;
+ }
+
+ connect_disconnect_button.signal_clicked().connect (sigc::mem_fun (*this, &EngineControl::connect_disconnect_click));
+
+ basic_packer.attach (connect_disconnect_button, 0, 2, row, row+1, FILL, AttachOptions (0));
+ row++;
+ }
+
+ EngineControl::~EngineControl ()
+ {
+ ignore_changes = true;
+ }
+
+ void
+ EngineControl::disable_latency_tab ()
+ {
+ vector<string> empty;
+ set_popdown_strings (lm_output_channel_combo, empty);
+ set_popdown_strings (lm_input_channel_combo, empty);
+ lm_measure_button.set_sensitive (false);
+ lm_use_button.set_sensitive (false);
+ }
+
+ void
+ EngineControl::enable_latency_tab ()
+ {
+ vector<string> outputs;
+ vector<string> inputs;
+
+ ARDOUR::AudioEngine::instance()->get_physical_outputs (ARDOUR::DataType::AUDIO, outputs);
+ ARDOUR::AudioEngine::instance()->get_physical_inputs (ARDOUR::DataType::AUDIO, inputs);
+
+ if (inputs.empty() || outputs.empty()) {
+ MessageDialog msg (_("Your selected audio configuration is playback- or capture-only.\n\nLatency calibration requires playback and capture"));
+ lm_measure_button.set_sensitive (false);
+ notebook.set_current_page (0);
+ msg.run ();
+ return;
+ }
+
+ if (!outputs.empty()) {
+ set_popdown_strings (lm_output_channel_combo, outputs);
+ lm_output_channel_combo.set_active_text (outputs.front());
+ lm_output_channel_combo.set_sensitive (true);
+ } else {
+ lm_output_channel_combo.set_sensitive (false);
+ }
+
+ if (!inputs.empty()) {
+ set_popdown_strings (lm_input_channel_combo, inputs);
+ lm_input_channel_combo.set_active_text (inputs.front());
+ lm_input_channel_combo.set_sensitive (true);
+ } else {
+ lm_input_channel_combo.set_sensitive (false);
+ }
+
+ lm_measure_button.set_sensitive (true);
+ }
+
+ void
+ EngineControl::setup_midi_tab_for_backend ()
+ {
+ string backend = backend_combo.get_active_text ();
+
+ Gtkmm2ext::container_clear (midi_vbox);
+
+ midi_vbox.set_border_width (12);
+ midi_device_table.set_border_width (12);
+
+ if (backend == "JACK") {
+ setup_midi_tab_for_jack ();
+ }
+
+ midi_vbox.pack_start (midi_device_table, true, true);
+ midi_vbox.pack_start (midi_refresh_button, false, false);
+ midi_vbox.show_all ();
+
+ midi_refresh_button.signal_clicked().connect (sigc::mem_fun (*this, &EngineControl::refresh_midi_display));
+ }
+
+ void
+ EngineControl::setup_midi_tab_for_jack ()
+ {
+ }
+
+ void
+ EngineControl::refresh_midi_display ()
+ {
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ assert (backend);
+
+ vector<string> midi_inputs;
+ vector<string> midi_outputs;
+ int row = 0;
+ AttachOptions xopt = AttachOptions (FILL|EXPAND);
+ Gtk::Label* l;
+
+ Gtkmm2ext::container_clear (midi_device_table);
+
+ backend->get_physical_inputs (ARDOUR::DataType::MIDI, midi_inputs);
+ backend->get_physical_outputs (ARDOUR::DataType::MIDI, midi_outputs);
+
+ midi_device_table.set_spacings (6);
+ midi_device_table.set_homogeneous (true);
+ midi_device_table.resize (midi_inputs.size() + midi_outputs.size() + 3, 1);
+
+ l = manage (new Label);
+ l->set_markup (string_compose ("<span size=\"large\" weight=\"bold\">%1</span>", _("MIDI Inputs")));
+ midi_device_table.attach (*l, 0, 1, row, row + 1, xopt, AttachOptions (0));
+ l->set_alignment (0, 0.5);
+ row++;
+ l->show ();
+
+ for (vector<string>::iterator p = midi_inputs.begin(); p != midi_inputs.end(); ++p) {
+ l = manage (new Label ((*p).substr ((*p).find_last_of (':') + 1)));
+ l->set_alignment (0, 0.5);
+ midi_device_table.attach (*l, 0, 1, row, row + 1, xopt, AttachOptions (0));
+ l->show ();
+ row++;
+ }
+
+ row++; // extra row of spacing
+
+ l = manage (new Label);
+ l->set_markup (string_compose ("<span size=\"large\" weight=\"bold\">%1</span>", _("MIDI Outputs")));
+ midi_device_table.attach (*l, 0, 1, row, row + 1, xopt, AttachOptions (0));
+ l->set_alignment (0, 0.5);
+ row++;
+ l->show ();
+
+ for (vector<string>::iterator p = midi_outputs.begin(); p != midi_outputs.end(); ++p) {
+ l = manage (new Label ((*p).substr ((*p).find_last_of (':') + 1)));
+ l->set_alignment (0, 0.5);
+ midi_device_table.attach (*l, 0, 1, row, row + 1, xopt, AttachOptions (0));
+ l->show ();
+ row++;
+ }
+ }
+
+ void
+ EngineControl::update_sensitivity ()
+ {
+ }
+
+ void
+ EngineControl::backend_changed ()
+ {
+ if (ignore_changes) {
+ return;
+ }
+
+ string backend_name = backend_combo.get_active_text();
+ boost::shared_ptr<ARDOUR::AudioBackend> backend;
+
+ if (!(backend = ARDOUR::AudioEngine::instance()->set_backend (backend_name, "ardour", ""))) {
+ /* eh? setting the backend failed... how ? */
+ return;
+ }
+
+ _have_control = ARDOUR::AudioEngine::instance()->setup_required ();
+
+ build_notebook ();
+ setup_midi_tab_for_backend ();
+
+ if (backend->requires_driver_selection()) {
+ vector<string> drivers = backend->enumerate_drivers();
+
+ if (!drivers.empty()) {
+ {
+ PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
+ set_popdown_strings (driver_combo, drivers);
+ driver_combo.set_active_text (drivers.front());
+ }
+
+ driver_changed ();
+ }
+
+ } else {
+ driver_combo.set_sensitive (false);
+ /* this will change the device text which will cause a call to
+ * device changed which will set up parameters
+ */
+ list_devices ();
+ }
+
+ vector<string> midi_options = backend->enumerate_midi_options();
+
+ if (midi_options.size() == 1) {
+ /* only contains the "none" option */
+ midi_option_combo.set_sensitive (false);
+ } else {
+ if (_have_control) {
+ set_popdown_strings (midi_option_combo, midi_options);
+ midi_option_combo.set_active_text (midi_options.front());
+ midi_option_combo.set_sensitive (true);
+ } else {
+ midi_option_combo.set_sensitive (false);
+ }
+ }
+
+ maybe_display_saved_state ();
+ }
+
+ bool
+ EngineControl::print_channel_count (Gtk::SpinButton* sb)
+ {
+ uint32_t cnt = (uint32_t) sb->get_value();
+ if (cnt == 0) {
+ sb->set_text (_("all available channels"));
+ } else {
+ char buf[32];
+ snprintf (buf, sizeof (buf), "%d", cnt);
+ sb->set_text (buf);
+ }
+ return true;
+ }
+
+ void
+ EngineControl::list_devices ()
+ {
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ assert (backend);
+
+ /* now fill out devices, mark sample rates, buffer sizes insensitive */
+
+ vector<ARDOUR::AudioBackend::DeviceStatus> all_devices = backend->enumerate_devices ();
+
+ /* NOTE: Ardour currently does not display the "available" field of the
+ * returned devices.
+ *
+ * Doing so would require a different GUI widget than the combo
+ * box/popdown that we currently use, since it has no way to list
+ * items that are not selectable. Something more like a popup menu,
+ * which could have unselectable items, would be appropriate.
+ */
+
+ vector<string> available_devices;
+
+ for (vector<ARDOUR::AudioBackend::DeviceStatus>::const_iterator i = all_devices.begin(); i != all_devices.end(); ++i) {
+ available_devices.push_back (i->name);
+ }
+
+ if (!available_devices.empty()) {
+
+ update_sensitivity ();
+
+ {
+ PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
+ set_popdown_strings (device_combo, available_devices);
+ device_combo.set_active_text (available_devices.front());
+ }
+
+ device_changed ();
+
+ ok_button->set_sensitive (true);
+ apply_button->set_sensitive (true);
+
+ } else {
+ sample_rate_combo.set_sensitive (false);
+ buffer_size_combo.set_sensitive (false);
+ input_latency.set_sensitive (false);
+ output_latency.set_sensitive (false);
+ input_channels.set_sensitive (false);
+ output_channels.set_sensitive (false);
+ ok_button->set_sensitive (false);
+ apply_button->set_sensitive (false);
+ }
+ }
+
+ void
+ EngineControl::driver_changed ()
+ {
+ if (ignore_changes) {
+ return;
+ }
+
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ assert (backend);
+
+ backend->set_driver (driver_combo.get_active_text());
+ list_devices ();
+
+ maybe_display_saved_state ();
+ }
+
+ void
+ EngineControl::device_changed ()
+ {
+ if (ignore_changes) {
+ return;
+ }
+
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ assert (backend);
+ string device_name = device_combo.get_active_text ();
+ vector<string> s;
+
+ {
+ PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
+
+ /* don't allow programmatic change to combos to cause a
+ recursive call to this method.
*/
- if (change_rate && !backend->can_change_sample_rate_when_running()) {
- return 1;
- }
-
- if (change_bufsize && !backend->can_change_buffer_size_when_running()) {
- return 1;
- }
-
- if (change_rate) {
- backend->set_sample_rate (get_rate());
- }
-
- if (change_bufsize) {
- backend->set_buffer_size (get_buffer_size());
- }
-
- post_push ();
-
- return 0;
- }
-
- /* determine if we need to stop the backend before changing parameters */
-
- if (change_driver || change_device || change_channels || change_latency ||
- (change_rate && !backend->can_change_sample_rate_when_running()) ||
- (change_bufsize && !backend->can_change_buffer_size_when_running())) {
- restart_required = true;
- } else {
- restart_required = false;
- }
-
- if (was_running) {
-
- if (!change_driver && !change_device && !change_channels && !change_latency) {
- /* no changes in any parameters that absolutely require a
- * restart, so check those that might be changeable without a
- * restart
- */
-
- if (change_rate && !backend->can_change_sample_rate_when_running()) {
- /* can't do this while running ... */
- restart_required = true;
- }
-
- if (change_bufsize && !backend->can_change_buffer_size_when_running()) {
- /* can't do this while running ... */
- restart_required = true;
- }
- }
- }
-
- if (was_running) {
- if (restart_required) {
- if (ARDOUR_UI::instance()->disconnect_from_engine ()) {
- return -1;
- }
- }
- }
-
-
- if (change_driver && backend->set_driver (get_driver())) {
- error << string_compose (_("Cannot set driver to %1"), get_driver()) << endmsg;
- return -1;
- }
- if (change_device && backend->set_device_name (get_device_name())) {
- error << string_compose (_("Cannot set device name to %1"), get_device_name()) << endmsg;
- return -1;
- }
- if (change_rate && backend->set_sample_rate (get_rate())) {
- error << string_compose (_("Cannot set sample rate to %1"), get_rate()) << endmsg;
- return -1;
- }
- if (change_bufsize && backend->set_buffer_size (get_buffer_size())) {
- error << string_compose (_("Cannot set buffer size to %1"), get_buffer_size()) << endmsg;
- return -1;
- }
-
- if (change_channels || get_input_channels() == 0 || get_output_channels() == 0) {
- if (backend->set_input_channels (get_input_channels())) {
- error << string_compose (_("Cannot set input channels to %1"), get_input_channels()) << endmsg;
- return -1;
- }
- if (backend->set_output_channels (get_output_channels())) {
- error << string_compose (_("Cannot set output channels to %1"), get_output_channels()) << endmsg;
- return -1;
- }
- }
- if (change_latency) {
- if (backend->set_systemic_input_latency (get_input_latency())) {
- error << string_compose (_("Cannot set input latency to %1"), get_input_latency()) << endmsg;
- return -1;
- }
- if (backend->set_systemic_output_latency (get_output_latency())) {
- error << string_compose (_("Cannot set output latency to %1"), get_output_latency()) << endmsg;
- return -1;
- }
- }
-
- if (start || (was_running && restart_required)) {
- if (ARDOUR_UI::instance()->reconnect_to_engine()) {
- return -1;
- }
- }
-
- post_push ();
-
- return 0;
-}
-
-void
-EngineControl::post_push ()
-{
- /* get a pointer to the current state object, creating one if
- * necessary
- */
-
- State* state = get_saved_state_for_currently_displayed_backend_and_device ();
-
- if (!state) {
- state = save_state ();
- assert (state);
- }
-
- /* all off */
-
- for (StateList::iterator i = states.begin(); i != states.end(); ++i) {
- (*i).active = false;
- }
-
- /* mark this one active (to be used next time the dialog is
- * shown)
+ /* sample rates */
+
+ string desired;
+
+ vector<float> sr;
+
+ if (_have_control) {
+ sr = backend->available_sample_rates (device_name);
+ } else {
+
+ sr.push_back (8000.0f);
+ sr.push_back (16000.0f);
+ sr.push_back (32000.0f);
+ sr.push_back (44100.0f);
+ sr.push_back (48000.0f);
+ sr.push_back (88200.0f);
+ sr.push_back (96000.0f);
+ sr.push_back (192000.0f);
+ sr.push_back (384000.0f);
+ }
+
+ for (vector<float>::const_iterator x = sr.begin(); x != sr.end(); ++x) {
+ s.push_back (rate_as_string (*x));
+ if (*x == _desired_sample_rate) {
+ desired = s.back();
+ }
+ }
+
+ if (!s.empty()) {
+ sample_rate_combo.set_sensitive (true);
+ set_popdown_strings (sample_rate_combo, s);
+
+ if (desired.empty()) {
+ sample_rate_combo.set_active_text (s.front());
+ } else {
+ sample_rate_combo.set_active_text (desired);
+ }
+
+ } else {
+ sample_rate_combo.set_sensitive (false);
+ }
+
+ /* buffer sizes */
+
+ vector<uint32_t> bs;
+
+ if (_have_control) {
+ bs = backend->available_buffer_sizes(device_name);
+ } else if (backend->can_change_buffer_size_when_running()) {
+ bs.push_back (8);
+ bs.push_back (16);
+ bs.push_back (32);
+ bs.push_back (64);
+ bs.push_back (128);
+ bs.push_back (256);
+ bs.push_back (512);
+ bs.push_back (1024);
+ bs.push_back (2048);
+ bs.push_back (4096);
+ bs.push_back (8192);
+ }
+ s.clear ();
+ for (vector<uint32_t>::const_iterator x = bs.begin(); x != bs.end(); ++x) {
+ s.push_back (bufsize_as_string (*x));
+ }
+
+ if (!s.empty()) {
+ buffer_size_combo.set_sensitive (true);
+ set_popdown_strings (buffer_size_combo, s);
+
+ buffer_size_combo.set_active_text (s.front());
+ show_buffer_duration ();
+ } else {
+ buffer_size_combo.set_sensitive (false);
+ }
+
+ /* XXX theoretically need to set min + max channel counts here
+ */
+
+ manage_control_app_sensitivity ();
+ }
+
+ /* pick up any saved state for this device */
+
+ maybe_display_saved_state ();
+
+ /* and push it to the backend */
+
+ push_state_to_backend (false);
+ }
+
+ string
+ EngineControl::bufsize_as_string (uint32_t sz)
+ {
+ /* Translators: "samples" is always plural here, so no
+ need for plural+singular forms.
*/
-
- state->active = true;
-
- manage_control_app_sensitivity ();
-
- /* schedule a redisplay of MIDI ports */
-
- Glib::signal_timeout().connect (sigc::bind_return (sigc::mem_fun (*this, &EngineControl::refresh_midi_display), false), 1000);
-}
-
-
-float
-EngineControl::get_rate () const
-{
- float r = atof (sample_rate_combo.get_active_text ());
- /* the string may have been translated with an abbreviation for
- * thousands, so use a crude heuristic to fix this.
+ char buf[32];
+ snprintf (buf, sizeof (buf), _("%u samples"), sz);
+ return buf;
+ }
+
+ void
+ EngineControl::sample_rate_changed ()
+ {
+ if (ignore_changes) {
+ return;
+ }
+
+ /* reset the strings for buffer size to show the correct msec value
+ (reflecting the new sample rate).
*/
- if (r < 1000.0) {
- r *= 1000.0;
- }
- return r;
-}
-
-uint32_t
-EngineControl::get_buffer_size () const
-{
- string txt = buffer_size_combo.get_active_text ();
- uint32_t samples;
+ show_buffer_duration ();
+ save_state ();
- if (sscanf (txt.c_str(), "%d", &samples) != 1) {
- throw exception ();
- }
+ }
- return samples;
-}
+ void
+ EngineControl::buffer_size_changed ()
+ {
+ if (ignore_changes) {
+ return;
+ }
-uint32_t
-EngineControl::get_input_channels() const
-{
- return (uint32_t) input_channels_adjustment.get_value();
-}
+ show_buffer_duration ();
+ save_state ();
+ }
-uint32_t
-EngineControl::get_output_channels() const
-{
- return (uint32_t) output_channels_adjustment.get_value();
-}
+ void
+ EngineControl::show_buffer_duration ()
+ {
-uint32_t
-EngineControl::get_input_latency() const
-{
- return (uint32_t) input_latency_adjustment.get_value();
-}
-
-uint32_t
-EngineControl::get_output_latency() const
-{
- return (uint32_t) output_latency_adjustment.get_value();
-}
-
-string
-EngineControl::get_backend () const
-{
- return backend_combo.get_active_text ();
-}
-
-string
-EngineControl::get_driver () const
-{
- return driver_combo.get_active_text ();
-}
-
-string
-EngineControl::get_device_name () const
-{
- return device_combo.get_active_text ();
-}
-
-void
-EngineControl::control_app_button_clicked ()
-{
- boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
-
- if (!backend) {
- return;
- }
-
- backend->launch_control_app ();
-}
-
-void
-EngineControl::manage_control_app_sensitivity ()
-{
- boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
-
- if (!backend) {
- return;
- }
-
- string appname = backend->control_app_name();
-
- if (appname.empty()) {
- control_app_button.set_sensitive (false);
- } else {
- control_app_button.set_sensitive (true);
- }
-}
+ /* buffer sizes - convert from just samples to samples + msecs for
+ * the displayed string
+ */
-void
-EngineControl::set_desired_sample_rate (uint32_t sr)
-{
- _desired_sample_rate = sr;
- device_changed ();
-}
+ string bs_text = buffer_size_combo.get_active_text ();
+ uint32_t samples = atoi (bs_text); /* will ignore trailing text */
+ uint32_t rate = get_rate();
-void
-EngineControl::on_switch_page (GtkNotebookPage*, guint page_num)
-{
- if (page_num == 0) {
- cancel_button->set_sensitive (true);
- ok_button->set_sensitive (true);
- apply_button->set_sensitive (true);
- } else {
- cancel_button->set_sensitive (false);
- ok_button->set_sensitive (false);
- apply_button->set_sensitive (false);
- }
+ /* Translators: "msecs" is ALWAYS plural here, so we do not
+ need singular form as well.
+ */
+ /* Developers: note the hard-coding of a double buffered model
+ in the (2 * samples) computation of latency. we always start
+ the audiobackend in this configuration.
+ */
+ char buf[32];
+ snprintf (buf, sizeof (buf), _("(%.1f msecs)"), (2 * samples) / (rate/1000.0));
+ buffer_size_duration_label.set_text (buf);
+ }
+
+ void
+ EngineControl::midi_option_changed ()
+ {
+ if (!ignore_changes) {
+ save_state ();
+ }
+ }
+
+ void
+ EngineControl::parameter_changed ()
+ {
+ if (!ignore_changes) {
+ save_state ();
+ }
+ }
+
+ EngineControl::State*
+ EngineControl::get_matching_state (const string& backend,
+ const string& driver,
+ const string& device)
+ {
+ for (StateList::iterator i = states.begin(); i != states.end(); ++i) {
+ if ((*i).backend == backend &&
+ (*i).driver == driver &&
+ (*i).device == device) {
+ return &(*i);
+ }
+ }
+ return 0;
+ }
+
+ EngineControl::State*
+ EngineControl::get_saved_state_for_currently_displayed_backend_and_device ()
+ {
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+
+ if (backend) {
+ return get_matching_state (backend_combo.get_active_text(),
+ (backend->requires_driver_selection() ? (std::string) driver_combo.get_active_text() : string()),
+ device_combo.get_active_text());
+ }
+
+
+ return get_matching_state (backend_combo.get_active_text(),
+ string(),
+ device_combo.get_active_text());
+ }
+
+ EngineControl::State*
+ EngineControl::save_state ()
+ {
+ if (!_have_control) {
+ return 0;
+ }
+
+ bool existing = true;
+ State* state = get_saved_state_for_currently_displayed_backend_and_device ();
+
+ if (!state) {
+ existing = false;
+ state = new State;
+ }
+
+ store_state (*state);
+
+ if (!existing) {
+ states.push_back (*state);
+ }
+
+ return state;
+ }
+
+ void
+ EngineControl::store_state (State& state)
+ {
+ state.backend = get_backend ();
+ state.driver = get_driver ();
+ state.device = get_device_name ();
+ state.sample_rate = get_rate ();
+ state.buffer_size = get_buffer_size ();
+ state.input_latency = get_input_latency ();
+ state.output_latency = get_output_latency ();
+ state.input_channels = get_input_channels ();
+ state.output_channels = get_output_channels ();
+ state.midi_option = get_midi_option ();
+ }
+
+ void
+ EngineControl::maybe_display_saved_state ()
+ {
+ if (!_have_control) {
+ return;
+ }
+
+ State* state = get_saved_state_for_currently_displayed_backend_and_device ();
+
+ if (state) {
+ PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
+
+ if (!_desired_sample_rate) {
+ sample_rate_combo.set_active_text (rate_as_string (state->sample_rate));
+ }
+ buffer_size_combo.set_active_text (bufsize_as_string (state->buffer_size));
+ /* call this explicitly because we're ignoring changes to
+ the controls at this point.
+ */
+ show_buffer_duration ();
+ input_latency.set_value (state->input_latency);
+ output_latency.set_value (state->output_latency);
+
+ if (!state->midi_option.empty()) {
+ midi_option_combo.set_active_text (state->midi_option);
+ }
+ }
+ }
- if (page_num == 1) {
- /* MIDI tab */
- refresh_midi_display ();
- }
+ XMLNode&
+ EngineControl::get_state ()
+ {
+ XMLNode* root = new XMLNode ("AudioMIDISetup");
+ std::string path;
+
+ if (!states.empty()) {
+ XMLNode* state_nodes = new XMLNode ("EngineStates");
+
+ for (StateList::const_iterator i = states.begin(); i != states.end(); ++i) {
+
+ XMLNode* node = new XMLNode ("State");
+
+ node->add_property ("backend", (*i).backend);
+ node->add_property ("driver", (*i).driver);
+ node->add_property ("device", (*i).device);
+ node->add_property ("sample-rate", (*i).sample_rate);
+ node->add_property ("buffer-size", (*i).buffer_size);
+ node->add_property ("input-latency", (*i).input_latency);
+ node->add_property ("output-latency", (*i).output_latency);
+ node->add_property ("input-channels", (*i).input_channels);
+ node->add_property ("output-channels", (*i).output_channels);
+ node->add_property ("active", (*i).active ? "yes" : "no");
+ node->add_property ("midi-option", (*i).midi_option);
+
+ state_nodes->add_child_nocopy (*node);
+ }
+
+ root->add_child_nocopy (*state_nodes);
+ }
+
+ return *root;
+ }
+
+ void
+ EngineControl::set_state (const XMLNode& root)
+ {
+ XMLNodeList clist, cclist;
+ XMLNodeConstIterator citer, cciter;
+ XMLNode* child;
+ XMLNode* grandchild;
+ XMLProperty* prop = NULL;
+
+ if (root.name() != "AudioMIDISetup") {
+ return;
+ }
+
+ clist = root.children();
+
+ states.clear ();
+
+ for (citer = clist.begin(); citer != clist.end(); ++citer) {
+
+ child = *citer;
+
+ if (child->name() != "EngineStates") {
+ continue;
+ }
+
+ cclist = child->children();
+
+ for (cciter = cclist.begin(); cciter != cclist.end(); ++cciter) {
+ State state;
+
+ grandchild = *cciter;
+
+ if (grandchild->name() != "State") {
+ continue;
+ }
+
+ if ((prop = grandchild->property ("backend")) == 0) {
+ continue;
+ }
+ state.backend = prop->value ();
+
+ if ((prop = grandchild->property ("driver")) == 0) {
+ continue;
+ }
+ state.driver = prop->value ();
+
+ if ((prop = grandchild->property ("device")) == 0) {
+ continue;
+ }
+ state.device = prop->value ();
+
+ if ((prop = grandchild->property ("sample-rate")) == 0) {
+ continue;
+ }
+ state.sample_rate = atof (prop->value ());
+
+ if ((prop = grandchild->property ("buffer-size")) == 0) {
+ continue;
+ }
+ state.buffer_size = atoi (prop->value ());
+
+ if ((prop = grandchild->property ("input-latency")) == 0) {
+ continue;
+ }
+ state.input_latency = atoi (prop->value ());
+
+ if ((prop = grandchild->property ("output-latency")) == 0) {
+ continue;
+ }
+ state.output_latency = atoi (prop->value ());
+
+ if ((prop = grandchild->property ("input-channels")) == 0) {
+ continue;
+ }
+ state.input_channels = atoi (prop->value ());
+
+ if ((prop = grandchild->property ("output-channels")) == 0) {
+ continue;
+ }
+ state.output_channels = atoi (prop->value ());
+
+ if ((prop = grandchild->property ("active")) == 0) {
+ continue;
+ }
+ state.active = string_is_affirmative (prop->value ());
+
+ if ((prop = grandchild->property ("midi-option")) == 0) {
+ continue;
+ }
+ state.midi_option = prop->value ();
- if (page_num == 2) {
- /* latency tab */
+ states.push_back (state);
+ }
+ }
+
+ /* now see if there was an active state and switch the setup to it */
+
+ for (StateList::const_iterator i = states.begin(); i != states.end(); ++i) {
+
+ if ((*i).active) {
+ ignore_changes++;
+ backend_combo.set_active_text ((*i).backend);
+ driver_combo.set_active_text ((*i).driver);
+ device_combo.set_active_text ((*i).device);
+ sample_rate_combo.set_active_text (rate_as_string ((*i).sample_rate));
+ buffer_size_combo.set_active_text (bufsize_as_string ((*i).buffer_size));
+ input_latency.set_value ((*i).input_latency);
+ output_latency.set_value ((*i).output_latency);
+ midi_option_combo.set_active_text ((*i).midi_option);
+ ignore_changes--;
+ break;
+ }
+ }
+ }
+
+
+ int
+ EngineControl::push_state_to_backend (bool start)
+ {
+ if (no_push) {
+ return 0;
+ }
+
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+
+ if (!backend) {
+ return 0;
+ }
+
+ /* figure out what is going to change */
+
+ bool restart_required = false;
+ bool was_running = ARDOUR::AudioEngine::instance()->running();
+ bool change_driver = false;
+ bool change_device = false;
+ bool change_rate = false;
+ bool change_bufsize = false;
+ bool change_latency = false;
+ bool change_channels = false;
+ bool change_midi = false;
+
+ uint32_t ochan = get_output_channels ();
+ uint32_t ichan = get_input_channels ();
+
+ if (_have_control) {
+
+ if (started_at_least_once) {
+
+ /* we can control the backend */
+
+ if (backend->requires_driver_selection()) {
+ if (get_driver() != backend->driver_name()) {
+ change_driver = true;
+ }
+ }
+
+ if (get_device_name() != backend->device_name()) {
+ change_device = true;
+ }
+
+ if (get_rate() != backend->sample_rate()) {
+ change_rate = true;
+ }
+
+ if (get_buffer_size() != backend->buffer_size()) {
+ change_bufsize = true;
+ }
+
+ if (get_midi_option() != backend->midi_option()) {
+ change_midi = true;
+ }
+
+ /* zero-requested channels means "all available" */
+
+ if (ichan == 0) {
+ ichan = backend->input_channels();
+ }
+
+ if (ochan == 0) {
+ ochan = backend->output_channels();
+ }
+
+ if (ichan != backend->input_channels()) {
+ change_channels = true;
+ }
+
+ if (ochan != backend->output_channels()) {
+ change_channels = true;
+ }
+
+ if (get_input_latency() != backend->systemic_input_latency() ||
+ get_output_latency() != backend->systemic_output_latency()) {
+ change_latency = true;
+ }
+ } else {
+ /* backend never started, so we have to force a group
+ of settings.
+ */
+ change_device = true;
+ if (backend->requires_driver_selection()) {
+ change_driver = true;
+ }
+ change_rate = true;
+ change_bufsize = true;
+ change_channels = true;
+ change_latency = true;
+ change_midi = true;
+ }
+
+ } else {
+
+ /* we have no control over the backend, meaning that we can
+ * only possibly change sample rate and buffer size.
+ */
+
+
+ if (get_rate() != backend->sample_rate()) {
+ change_bufsize = true;
+ }
+
+ if (get_buffer_size() != backend->buffer_size()) {
+ change_bufsize = true;
+ }
+ }
+
+ if (!_have_control) {
+
+ /* We do not have control over the backend, so the best we can
+ * do is try to change the sample rate and/or bufsize and get
+ * out of here.
+ */
+
+ if (change_rate && !backend->can_change_sample_rate_when_running()) {
+ return 1;
+ }
+
+ if (change_bufsize && !backend->can_change_buffer_size_when_running()) {
+ return 1;
+ }
+
+ if (change_rate) {
+ backend->set_sample_rate (get_rate());
+ }
+
+ if (change_bufsize) {
+ backend->set_buffer_size (get_buffer_size());
+ }
+
+ post_push ();
+
+ return 0;
+ }
+
+ /* determine if we need to stop the backend before changing parameters */
+
+ if (change_driver || change_device || change_channels || change_latency ||
+ (change_rate && !backend->can_change_sample_rate_when_running()) ||
+ change_midi ||
+ (change_bufsize && !backend->can_change_buffer_size_when_running())) {
+ restart_required = true;
+ } else {
+ restart_required = false;
+ }
+
+ if (was_running) {
+
+ if (!change_driver && !change_device && !change_channels && !change_latency && !change_midi) {
+ /* no changes in any parameters that absolutely require a
+ * restart, so check those that might be changeable without a
+ * restart
+ */
+
+ if (change_rate && !backend->can_change_sample_rate_when_running()) {
+ /* can't do this while running ... */
+ restart_required = true;
+ }
+
+ if (change_bufsize && !backend->can_change_buffer_size_when_running()) {
+ /* can't do this while running ... */
+ restart_required = true;
+ }
+ }
+ }
+
+ if (was_running) {
+ if (restart_required) {
+ if (ARDOUR_UI::instance()->disconnect_from_engine ()) {
+ return -1;
+ }
+ }
+ }
+
+
+ if (change_driver && backend->set_driver (get_driver())) {
+ error << string_compose (_("Cannot set driver to %1"), get_driver()) << endmsg;
+ return -1;
+ }
+ if (change_device && backend->set_device_name (get_device_name())) {
+ error << string_compose (_("Cannot set device name to %1"), get_device_name()) << endmsg;
+ return -1;
+ }
+ if (change_rate && backend->set_sample_rate (get_rate())) {
+ error << string_compose (_("Cannot set sample rate to %1"), get_rate()) << endmsg;
+ return -1;
+ }
+ if (change_bufsize && backend->set_buffer_size (get_buffer_size())) {
+ error << string_compose (_("Cannot set buffer size to %1"), get_buffer_size()) << endmsg;
+ return -1;
+ }
+
+ if (change_channels || get_input_channels() == 0 || get_output_channels() == 0) {
+ if (backend->set_input_channels (get_input_channels())) {
+ error << string_compose (_("Cannot set input channels to %1"), get_input_channels()) << endmsg;
+ return -1;
+ }
+ if (backend->set_output_channels (get_output_channels())) {
+ error << string_compose (_("Cannot set output channels to %1"), get_output_channels()) << endmsg;
+ return -1;
+ }
+ }
+ if (change_latency) {
+ if (backend->set_systemic_input_latency (get_input_latency())) {
+ error << string_compose (_("Cannot set input latency to %1"), get_input_latency()) << endmsg;
+ return -1;
+ }
+ if (backend->set_systemic_output_latency (get_output_latency())) {
+ error << string_compose (_("Cannot set output latency to %1"), get_output_latency()) << endmsg;
+ return -1;
+ }
+ }
+
+ if (change_midi) {
+ backend->set_midi_option (get_midi_option());
+ }
+
+ if (start || (was_running && restart_required)) {
+ if (ARDOUR_UI::instance()->reconnect_to_engine()) {
+ return -1;
+ }
+ }
+
+ post_push ();
+
+ return 0;
+ }
+
+ void
+ EngineControl::post_push ()
+ {
+ /* get a pointer to the current state object, creating one if
+ * necessary
+ */
+
+ if (_have_control) {
+ State* state = get_saved_state_for_currently_displayed_backend_and_device ();
+
+ if (!state) {
+ state = save_state ();
+ assert (state);
+ }
+
+ /* all off */
+
+ for (StateList::iterator i = states.begin(); i != states.end(); ++i) {
+ (*i).active = false;
+ }
+
+ /* mark this one active (to be used next time the dialog is
+ * shown)
+ */
+
+ state->active = true;
+
+ manage_control_app_sensitivity ();
+ }
+
+ /* schedule a redisplay of MIDI ports */
+
+ Glib::signal_timeout().connect (sigc::bind_return (sigc::mem_fun (*this, &EngineControl::refresh_midi_display), false), 1000);
+ }
+
+
+ float
+ EngineControl::get_rate () const
+ {
+ float r = atof (sample_rate_combo.get_active_text ());
+ /* the string may have been translated with an abbreviation for
+ * thousands, so use a crude heuristic to fix this.
+ */
+ if (r < 1000.0) {
+ r *= 1000.0;
+ }
+ return r;
+ }
+
+
+ uint32_t
+ EngineControl::get_buffer_size () const
+ {
+ string txt = buffer_size_combo.get_active_text ();
+ uint32_t samples;
+
+ if (sscanf (txt.c_str(), "%d", &samples) != 1) {
+ throw exception ();
+ }
+
+ return samples;
+ }
+
+ string
+ EngineControl::get_midi_option () const
+ {
+ return midi_option_combo.get_active_text();
+ }
+
+ uint32_t
+ EngineControl::get_input_channels() const
+ {
+ return (uint32_t) input_channels_adjustment.get_value();
+ }
+
+ uint32_t
+ EngineControl::get_output_channels() const
+ {
+ return (uint32_t) output_channels_adjustment.get_value();
+ }
+
+ uint32_t
+ EngineControl::get_input_latency() const
+ {
+ return (uint32_t) input_latency_adjustment.get_value();
+ }
+
+ uint32_t
+ EngineControl::get_output_latency() const
+ {
+ return (uint32_t) output_latency_adjustment.get_value();
+ }
+
+ string
+ EngineControl::get_backend () const
+ {
+ return backend_combo.get_active_text ();
+ }
+
+ string
+ EngineControl::get_driver () const
+ {
+ return driver_combo.get_active_text ();
+ }
+
+ string
+ EngineControl::get_device_name () const
+ {
+ return device_combo.get_active_text ();
+ }
+
+ void
+ EngineControl::control_app_button_clicked ()
+ {
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+
+ if (!backend) {
+ return;
+ }
+
+ backend->launch_control_app ();
+ }
+
+ void
+ EngineControl::manage_control_app_sensitivity ()
+ {
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+
+ if (!backend) {
+ return;
+ }
+
+ string appname = backend->control_app_name();
+
+ if (appname.empty()) {
+ control_app_button.set_sensitive (false);
+ } else {
+ control_app_button.set_sensitive (true);
+ }
+ }
+
+ void
+ EngineControl::set_desired_sample_rate (uint32_t sr)
+ {
+ _desired_sample_rate = sr;
+ device_changed ();
+ }
+
+ void
+ EngineControl::on_switch_page (GtkNotebookPage*, guint page_num)
+ {
+ if (page_num == 0) {
+ cancel_button->set_sensitive (true);
+ ok_button->set_sensitive (true);
+ apply_button->set_sensitive (true);
+ } else {
+ cancel_button->set_sensitive (false);
+ ok_button->set_sensitive (false);
+ apply_button->set_sensitive (false);
+ }
+
+ if (page_num == midi_tab) {
+ /* MIDI tab */
+ refresh_midi_display ();
+ }
+
+ if (page_num == latency_tab) {
+ /* latency tab */
+
+ if (!ARDOUR::AudioEngine::instance()->running()) {
+
+ PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
+
+ /* save any existing latency values */
+
+ uint32_t il = (uint32_t) input_latency.get_value ();
+ uint32_t ol = (uint32_t) input_latency.get_value ();
+
+ /* reset to zero so that our new test instance of JACK
+ will be clean of any existing latency measures.
+ */
- if (!ARDOUR::AudioEngine::instance()->running()) {
-
- PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
-
- /* save any existing latency values */
-
- uint32_t il = (uint32_t) input_latency.get_value ();
- uint32_t ol = (uint32_t) input_latency.get_value ();
+ input_latency.set_value (0);
+ output_latency.set_value (0);
- /* reset to zero so that our new test instance of JACK
- will be clean of any existing latency measures.
- */
-
- input_latency.set_value (0);
- output_latency.set_value (0);
-
- /* reset control */
+ /* reset control */
- input_latency.set_value (il);
- output_latency.set_value (ol);
+ input_latency.set_value (il);
+ output_latency.set_value (ol);
- }
+ }
- if (ARDOUR::AudioEngine::instance()->prepare_for_latency_measurement()) {
- disable_latency_tab ();
- }
+ if (ARDOUR::AudioEngine::instance()->prepare_for_latency_measurement()) {
+ disable_latency_tab ();
+ }
- enable_latency_tab ();
+ enable_latency_tab ();
- } else {
- ARDOUR::AudioEngine::instance()->stop_latency_detection();
- }
-}
+ } else {
+ if (lm_running) {
+ ARDOUR::AudioEngine::instance()->stop_latency_detection();
+ }
+ }
+ }
-/* latency measurement */
+ /* latency measurement */
-bool
-EngineControl::check_latency_measurement ()
-{
- MTDM* mtdm = ARDOUR::AudioEngine::instance()->mtdm ();
+ bool
+ EngineControl::check_latency_measurement ()
+ {
+ MTDM* mtdm = ARDOUR::AudioEngine::instance()->mtdm ();
- if (mtdm->resolve () < 0) {
- lm_results.set_markup (string_compose ("<span foreground=\"red\">%1</span>", _("No signal detected ")));
- return true;
- }
+ if (mtdm->resolve () < 0) {
+ lm_results.set_markup (string_compose (results_markup, _("No signal detected ")));
+ return true;
+ }
- if (mtdm->err () > 0.3) {
- mtdm->invert ();
- mtdm->resolve ();
- }
+ if (mtdm->err () > 0.3) {
+ mtdm->invert ();
+ mtdm->resolve ();
+ }
- char buf[128];
- ARDOUR::framecnt_t const sample_rate = ARDOUR::AudioEngine::instance()->sample_rate();
+ char buf[128];
+ ARDOUR::framecnt_t const sample_rate = ARDOUR::AudioEngine::instance()->sample_rate();
- if (sample_rate == 0) {
- lm_results.set_text (_("Disconnected from audio engine"));
- ARDOUR::AudioEngine::instance()->stop_latency_detection ();
- return false;
- }
+ if (sample_rate == 0) {
+ lm_results.set_markup (string_compose (results_markup, _("Disconnected from audio engine")));
+ ARDOUR::AudioEngine::instance()->stop_latency_detection ();
+ return false;
+ }
- uint32_t frames_total = mtdm->del();
- uint32_t extra = frames_total - ARDOUR::AudioEngine::instance()->latency_signal_delay();
+ uint32_t frames_total = mtdm->del();
+ uint32_t extra = frames_total - ARDOUR::AudioEngine::instance()->latency_signal_delay();
- snprintf (buf, sizeof (buf), "%u samples %10.3lf ms", extra, extra * 1000.0f/sample_rate);
+ snprintf (buf, sizeof (buf), "%u samples / %.3lf ms", extra, extra * 1000.0f/sample_rate);
- bool solid = true;
+ bool solid = true;
- if (mtdm->err () > 0.2) {
- strcat (buf, " ??");
- solid = false;
- }
+ if (mtdm->err () > 0.2) {
+ strcat (buf, " ");
+ strcat (buf, _("(signal detection error)"));
+ solid = false;
+ }
- if (mtdm->inv ()) {
- strcat (buf, " (Inv)");
- solid = false;
- }
+ if (mtdm->inv ()) {
+ strcat (buf, " ");
+ strcat (buf, _("(inverted - bad wiring)"));
+ solid = false;
+ }
- if (solid) {
- lm_measure_button.set_active (false);
- lm_use_button.set_sensitive (true);
- strcat (buf, " (set)");
- have_lm_results = true;
+ if (solid) {
+ end_latency_detection ();
+ lm_use_button.set_sensitive (true);
+ have_lm_results = true;
}
- lm_results.set_text (buf);
+ lm_results.set_markup (string_compose (results_markup, string_compose (_("Detected roundtrip latency: %1"), buf)));
return true;
}
@@ -1423,32 +1704,39 @@ EngineControl::start_latency_detection ()
{
ARDOUR::AudioEngine::instance()->set_latency_input_port (lm_input_channel_combo.get_active_text());
ARDOUR::AudioEngine::instance()->set_latency_output_port (lm_output_channel_combo.get_active_text());
- ARDOUR::AudioEngine::instance()->start_latency_detection ();
- lm_results.set_text (_("Detecting ..."));
- latency_timeout = Glib::signal_timeout().connect (mem_fun (*this, &EngineControl::check_latency_measurement), 250);
- lm_start_stop_label.set_text (_("Cancel measurement"));
- have_lm_results = false;
- lm_input_channel_combo.set_sensitive (false);
- lm_output_channel_combo.set_sensitive (false);
+
+ if (ARDOUR::AudioEngine::instance()->start_latency_detection () == 0) {
+ lm_results.set_markup (string_compose (results_markup, _("Detecting ...")));
+ latency_timeout = Glib::signal_timeout().connect (mem_fun (*this, &EngineControl::check_latency_measurement), 100);
+ lm_measure_label.set_text (_("Cancel"));
+ have_lm_results = false;
+ lm_use_button.set_sensitive (false);
+ lm_input_channel_combo.set_sensitive (false);
+ lm_output_channel_combo.set_sensitive (false);
+ lm_running = true;
+ }
}
void
EngineControl::end_latency_detection ()
{
- ARDOUR::AudioEngine::instance()->stop_latency_detection ();
latency_timeout.disconnect ();
- lm_start_stop_label.set_text (_("Measure latency"));
+ ARDOUR::AudioEngine::instance()->stop_latency_detection ();
+ lm_measure_label.set_text (_("Measure"));
if (!have_lm_results) {
- lm_results.set_markup ("<i>No measurement results yet</i>");
+ lm_results.set_markup (string_compose (results_markup, _("No measurement results yet")));
+ } else {
+ lm_use_button.set_sensitive (false);
}
lm_input_channel_combo.set_sensitive (true);
lm_output_channel_combo.set_sensitive (true);
+ lm_running = false;
}
void
-EngineControl::latency_button_toggled ()
+EngineControl::latency_button_clicked ()
{
- if (lm_measure_button.get_active ()) {
+ if (!lm_running) {
start_latency_detection ();
} else {
end_latency_detection ();
@@ -1470,6 +1758,10 @@ EngineControl::use_latency_button_clicked ()
input_latency_adjustment.set_value (one_way);
output_latency_adjustment.set_value (one_way);
+
+ /* back to settings page */
+
+ notebook.set_current_page (0);
}
bool
@@ -1482,3 +1774,49 @@ EngineControl::on_delete_event (GdkEventAny* ev)
return ArdourDialog::on_delete_event (ev);
}
+void
+EngineControl::engine_running ()
+{
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ assert (backend);
+
+ buffer_size_combo.set_active_text (bufsize_as_string (backend->buffer_size()));
+ sample_rate_combo.set_active_text (rate_as_string (backend->sample_rate()));
+
+ buffer_size_combo.set_sensitive (true);
+ sample_rate_combo.set_sensitive (true);
+
+ connect_disconnect_button.set_label (string_compose (_("Disconnect from %1"), backend->name()));
+
+ started_at_least_once = true;
+}
+
+void
+EngineControl::engine_stopped ()
+{
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ assert (backend);
+
+ buffer_size_combo.set_sensitive (false);
+ connect_disconnect_button.set_label (string_compose (_("Connect to %1"), backend->name()));
+
+ sample_rate_combo.set_sensitive (true);
+ buffer_size_combo.set_sensitive (true);
+}
+
+void
+EngineControl::connect_disconnect_click()
+{
+ if (ARDOUR::AudioEngine::instance()->running()) {
+ ARDOUR_UI::instance()->disconnect_from_engine ();
+ } else {
+ ARDOUR_UI::instance()->reconnect_to_engine ();
+ }
+}
+
+void
+EngineControl::calibrate_latency ()
+{
+ notebook.set_current_page (latency_tab);
+}
+
diff --git a/gtk2_ardour/engine_dialog.h b/gtk2_ardour/engine_dialog.h
index fcbdfe4cb8..31648b6dbb 100644
--- a/gtk2_ardour/engine_dialog.h
+++ b/gtk2_ardour/engine_dialog.h
@@ -36,6 +36,7 @@
#include "pbd/signals.h"
#include "ardour_dialog.h"
+#include "ardour_button.h"
class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
public:
@@ -62,6 +63,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
Gtk::ComboBoxText driver_combo;
Gtk::ComboBoxText device_combo;
Gtk::ComboBoxText sample_rate_combo;
+ Gtk::ComboBoxText midi_option_combo;
Gtk::ComboBoxText buffer_size_combo;
Gtk::Label buffer_size_duration_label;
Gtk::Adjustment input_latency_adjustment;
@@ -75,20 +77,26 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
Gtk::Adjustment ports_adjustment;
Gtk::SpinButton ports_spinner;
+ Gtk::Label have_control_text;
Gtk::Button control_app_button;
+ Gtk::Button connect_disconnect_button;
+
/* latency measurement */
Gtk::ComboBoxText lm_output_channel_combo;
Gtk::ComboBoxText lm_input_channel_combo;
- Gtk::Label lm_start_stop_label;
- Gtk::ToggleButton lm_measure_button;
+ Gtk::Label lm_measure_label;
+ Gtk::Button lm_measure_button;
Gtk::Button lm_use_button;
+ Gtk::Button lm_back_button;
+ ArdourButton lm_button;
Gtk::Label lm_title;
Gtk::Label lm_results;
Gtk::Table lm_table;
Gtk::VBox lm_vbox;
bool have_lm_results;
+ bool lm_running;
Gtk::Button* cancel_button;
Gtk::Button* ok_button;
@@ -106,20 +114,20 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
uint32_t ignore_changes;
uint32_t _desired_sample_rate;
-
- static bool engine_running ();
-
+ bool no_push;
+ bool started_at_least_once;
+
void driver_changed ();
void backend_changed ();
void sample_rate_changed ();
void buffer_size_changed ();
void parameter_changed ();
+ void midi_option_changed ();
void setup_midi_tab_for_backend ();
void setup_midi_tab_for_jack ();
void refresh_midi_display ();
- std::string rate_as_string (float);
std::string bufsize_as_string (uint32_t);
float get_rate() const;
@@ -131,6 +139,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
std::string get_device_name() const;
std::string get_driver() const;
std::string get_backend() const;
+ std::string get_midi_option () const;
void device_changed ();
void list_devices ();
@@ -147,6 +156,7 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
uint32_t input_channels;
uint32_t output_channels;
bool active;
+ std::string midi_option;
State()
: input_latency (0)
@@ -174,6 +184,8 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
static bool print_channel_count (Gtk::SpinButton*);
void build_notebook ();
+ void build_full_control_notebook ();
+ void build_no_control_notebook ();
void on_response (int);
void control_app_button_clicked ();
@@ -181,18 +193,27 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
void manage_control_app_sensitivity ();
int push_state_to_backend (bool start);
void post_push ();
+ void update_sensitivity ();
/* latency measurement */
- void latency_button_toggled ();
+ void latency_button_clicked ();
bool check_latency_measurement ();
sigc::connection latency_timeout;
void enable_latency_tab ();
void disable_latency_tab ();
void start_latency_detection ();
void end_latency_detection ();
-
+
void on_switch_page (GtkNotebookPage*, guint page_num);
bool on_delete_event (GdkEventAny*);
+
+ void engine_running ();
+ void engine_stopped ();
+ PBD::ScopedConnection running_connection;
+ PBD::ScopedConnection stopped_connection;
+
+ void connect_disconnect_click ();
+ void calibrate_latency ();
};
#endif /* __gtk2_ardour_engine_dialog_h__ */
diff --git a/gtk2_ardour/export_video_dialog.cc b/gtk2_ardour/export_video_dialog.cc
index b1b59fa088..2f9df2fb1c 100644
--- a/gtk2_ardour/export_video_dialog.cc
+++ b/gtk2_ardour/export_video_dialog.cc
@@ -28,7 +28,6 @@
#include <fcntl.h>
#include <sigc++/bind.h>
-#include <libgen.h>
#include "pbd/error.h"
#include "pbd/convert.h"
@@ -62,7 +61,7 @@ using namespace PBD;
using namespace ARDOUR;
using namespace VideoUtils;
-ExportVideoDialog::ExportVideoDialog (Session* s, TimeSelection &tme)
+ExportVideoDialog::ExportVideoDialog (Session* s, TimeSelection &tme, bool range)
: ArdourDialog (_("Export Video File "))
, export_range (tme)
, outfn_path_label (_("File:"), Gtk::ALIGN_LEFT)
@@ -153,7 +152,11 @@ ExportVideoDialog::ExportVideoDialog (Session* s, TimeSelection &tme)
if (!export_range.empty()) {
insnd_combo.append_text (_("Selected range")); // TODO show export_range.start() -> export_range.end_frame()
}
- insnd_combo.set_active(0);
+ if (range) {
+ insnd_combo.set_active(2);
+ } else {
+ insnd_combo.set_active(0);
+ }
outfn_path_entry.set_width_chars(38);
outfn_path_entry.set_text (_session->session_directory().export_path() + G_DIR_SEPARATOR +"export.avi");
@@ -511,9 +514,8 @@ ExportVideoDialog::launch_export ()
end += av_offset;
}
else if (insnd_combo.get_active_row_number() == 2) {
- // TODO quantize to video-frame ?!
- start = export_range.start();
- end = export_range.end_frame();
+ start = ARDOUR_UI::instance()->video_timeline->quantify_frames_to_apv(export_range.start());
+ end = ARDOUR_UI::instance()->video_timeline->quantify_frames_to_apv(export_range.end_frame());
}
if (end <= 0) {
start = _session->current_start_frame();
@@ -523,6 +525,15 @@ ExportVideoDialog::launch_export ()
printf("audio export-range %lld -> %lld\n", start, end);
#endif
+ const frameoffset_t vstart = ARDOUR_UI::instance()->video_timeline->get_offset();
+ const frameoffset_t vend = vstart + ARDOUR_UI::instance()->video_timeline->get_duration();
+
+ if ( (start >= end) || (end < vstart) || (start > vend)) {
+ warning << _("Export Video: export-range does not include video.") << endmsg;
+ Gtk::Dialog::response(RESPONSE_CANCEL);
+ return;
+ }
+
tsp->set_range (start, end);
tsp->set_name ("mysession");
tsp->set_range_id ("session");
diff --git a/gtk2_ardour/export_video_dialog.h b/gtk2_ardour/export_video_dialog.h
index 7e3cf442a7..5ebcf3258d 100644
--- a/gtk2_ardour/export_video_dialog.h
+++ b/gtk2_ardour/export_video_dialog.h
@@ -41,7 +41,7 @@
class ExportVideoDialog : public ArdourDialog , public PBD::ScopedConnectionList
{
public:
- ExportVideoDialog (ARDOUR::Session*, TimeSelection &tme);
+ ExportVideoDialog (ARDOUR::Session*, TimeSelection &tme, bool range = false);
~ExportVideoDialog ();
std::string get_exported_filename () { return outfn_path_entry.get_text(); }
diff --git a/gtk2_ardour/gtk_pianokeyboard.c b/gtk2_ardour/gtk_pianokeyboard.c
index 5101bd8aff..a8561cc6bd 100644
--- a/gtk2_ardour/gtk_pianokeyboard.c
+++ b/gtk2_ardour/gtk_pianokeyboard.c
@@ -33,9 +33,9 @@
#include <assert.h>
#include <string.h>
-#include <strings.h>
#include <stdint.h>
#include <cairo/cairo.h>
+
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
@@ -740,13 +740,13 @@ piano_keyboard_set_keyboard_layout(PianoKeyboard *pk, const char *layout)
{
assert(layout);
- if (!strcasecmp(layout, "QWERTY")) {
+ if (!g_strcasecmp(layout, "QWERTY")) {
bind_keys_qwerty(pk);
- } else if (!strcasecmp(layout, "QWERTZ")) {
+ } else if (!g_strcasecmp(layout, "QWERTZ")) {
bind_keys_qwertz(pk);
- } else if (!strcasecmp(layout, "AZERTY")) {
+ } else if (!g_strcasecmp(layout, "AZERTY")) {
bind_keys_azerty(pk);
} else {
diff --git a/gtk2_ardour/keyeditor.cc b/gtk2_ardour/keyeditor.cc
index 07042a1cdf..f23e246958 100644
--- a/gtk2_ardour/keyeditor.cc
+++ b/gtk2_ardour/keyeditor.cc
@@ -250,8 +250,6 @@ KeyEditor::populate ()
//kinda kludgy way to avoid displaying menu items as mappable
if ( parts[1] == _("Main_menu") )
continue;
- if ( parts[1] == _("JACK") )
- continue;
if ( parts[1] == _("redirectmenu") )
continue;
if ( parts[1] == _("Editor_menus") )
diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc
index c8f8d76a98..ceb6ceb312 100644
--- a/gtk2_ardour/main.cc
+++ b/gtk2_ardour/main.cc
@@ -36,8 +36,6 @@
#include "pbd/boost_debug.h"
#endif
-#include <jack/jack.h>
-
#include "ardour/revision.h"
#include "ardour/version.h"
#include "ardour/ardour.h"
@@ -80,17 +78,10 @@ static const char* localedir = LOCALEDIR;
void
gui_jack_error ()
{
- MessageDialog win (string_compose (_("%1 could not connect to JACK."), PROGRAM_NAME),
+ MessageDialog win (string_compose (_("%1 could not connect to the audio backend."), PROGRAM_NAME),
false,
Gtk::MESSAGE_INFO,
Gtk::BUTTONS_NONE);
- win.set_secondary_text(string_compose (_("There are several possible reasons:\n\
-\n\
-1) JACK is not running.\n\
-2) JACK is running as another user, perhaps root.\n\
-3) There is already another client called \"%1\".\n\
-\n\
-Please consider the possibilities, and perhaps (re)start JACK."), PROGRAM_NAME));
win.add_button (Stock::QUIT, RESPONSE_CLOSE);
win.set_default_response (RESPONSE_CLOSE);
@@ -527,6 +518,7 @@ int main (int argc, char *argv[])
ui->run (text_receiver);
Gtkmm2ext::Application::instance()->cleanup();
+ delete ui;
ui = 0;
ARDOUR::cleanup ();
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index d77023d201..50594378de 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -698,7 +698,7 @@ MixerStrip::output_press (GdkEventButton *ev)
{
using namespace Menu_Helpers;
if (!_session->engine().connected()) {
- MessageDialog msg (_("Not connected to JACK - no I/O changes are possible"));
+ MessageDialog msg (_("Not connected to audio engine - no I/O changes are possible"));
msg.run ();
return true;
}
@@ -826,7 +826,7 @@ MixerStrip::input_press (GdkEventButton *ev)
citems.clear();
if (!_session->engine().connected()) {
- MessageDialog msg (_("Not connected to JACK - no I/O changes are possible"));
+ MessageDialog msg (_("Not connected to audio engine - no I/O changes are possible"));
msg.run ();
return true;
}
diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc
index 81adf40896..ebfcc677ac 100644
--- a/gtk2_ardour/plugin_selector.cc
+++ b/gtk2_ardour/plugin_selector.cc
@@ -538,13 +538,13 @@ struct PluginMenuCompareByCreator {
bool operator() (PluginInfoPtr a, PluginInfoPtr b) const {
int cmp;
- cmp = strcasecmp (a->creator.c_str(), b->creator.c_str());
+ cmp = g_strcasecmp (a->creator.c_str(), b->creator.c_str());
if (cmp < 0) {
return true;
} else if (cmp == 0) {
/* same creator ... compare names */
- if (strcasecmp (a->name.c_str(), b->name.c_str()) < 0) {
+ if (g_strcasecmp (a->name.c_str(), b->name.c_str()) < 0) {
return true;
}
}
@@ -556,7 +556,7 @@ struct PluginMenuCompareByName {
bool operator() (PluginInfoPtr a, PluginInfoPtr b) const {
int cmp;
- cmp = strcasecmp (a->name.c_str(), b->name.c_str());
+ cmp = g_strcasecmp (a->name.c_str(), b->name.c_str());
if (cmp < 0) {
return true;
@@ -574,13 +574,13 @@ struct PluginMenuCompareByCategory {
bool operator() (PluginInfoPtr a, PluginInfoPtr b) const {
int cmp;
- cmp = strcasecmp (a->category.c_str(), b->category.c_str());
+ cmp = g_strcasecmp (a->category.c_str(), b->category.c_str());
if (cmp < 0) {
return true;
} else if (cmp == 0) {
/* same category ... compare names */
- if (strcasecmp (a->name.c_str(), b->name.c_str()) < 0) {
+ if (g_strcasecmp (a->name.c_str(), b->name.c_str()) < 0) {
return true;
}
}
diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc
index 713b98cdaf..3f523a82d2 100644
--- a/gtk2_ardour/plugin_ui.cc
+++ b/gtk2_ardour/plugin_ui.cc
@@ -161,6 +161,7 @@ PluginUIWindow::PluginUIWindow (
PluginUIWindow::~PluginUIWindow ()
{
+ cerr << "PluginWindow deleted for " << this << endl;
delete _pluginui;
}
@@ -405,8 +406,6 @@ PluginUIWindow::plugin_going_away ()
}
death_connection.disconnect ();
-
- delete_when_idle (this);
}
PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi)
diff --git a/gtk2_ardour/po/de.po b/gtk2_ardour/po/de.po
index 74288bde3f..5817ab3878 100644
--- a/gtk2_ardour/po/de.po
+++ b/gtk2_ardour/po/de.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gtk-ardour 0.347.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-03 10:44+0200\n"
-"PO-Revision-Date: 2013-09-03 11:41+0200\n"
+"POT-Creation-Date: 2013-09-26 16:09+0200\n"
+"PO-Revision-Date: 2013-09-26 16:32+0200\n"
"Last-Translator: Edgar Aichinger <edogawa@aon.at>\n"
"Language-Team: German <ardour-dev@lists.ardour.org>\n"
"Language: de\n"
@@ -448,8 +448,8 @@ msgstr "Audiobusse"
msgid "Add:"
msgstr "Erstelle:"
-#: add_route_dialog.cc:114 startup.cc:841 time_fx_dialog.cc:91
-#: add_video_dialog.cc:150 video_server_dialog.cc:112
+#: add_route_dialog.cc:114 time_fx_dialog.cc:91 add_video_dialog.cc:150
+#: video_server_dialog.cc:112
msgid "<b>Options</b>"
msgstr "<b>Optionen</b>"
@@ -463,21 +463,22 @@ msgid "Group:"
msgstr "Gruppe:"
#: add_route_dialog.cc:215 add_route_dialog.cc:224 add_route_dialog.cc:298
-#: rc_option_editor.cc:1456 rc_option_editor.cc:1458 rc_option_editor.cc:1460
-#: rc_option_editor.cc:1478 rc_option_editor.cc:1480 rc_option_editor.cc:1488
-#: rc_option_editor.cc:1490 rc_option_editor.cc:1508 rc_option_editor.cc:1521
-#: rc_option_editor.cc:1523 rc_option_editor.cc:1525 rc_option_editor.cc:1556
-#: rc_option_editor.cc:1558 rc_option_editor.cc:1560 rc_option_editor.cc:1568
-#: rc_option_editor.cc:1576 rc_option_editor.cc:1584
+#: ardour_ui_ed.cc:476 engine_dialog.cc:201 rc_option_editor.cc:1454
+#: rc_option_editor.cc:1456 rc_option_editor.cc:1458 rc_option_editor.cc:1474
+#: rc_option_editor.cc:1476 rc_option_editor.cc:1484 rc_option_editor.cc:1486
+#: rc_option_editor.cc:1504 rc_option_editor.cc:1517 rc_option_editor.cc:1519
+#: rc_option_editor.cc:1521 rc_option_editor.cc:1552 rc_option_editor.cc:1554
+#: rc_option_editor.cc:1556 rc_option_editor.cc:1564 rc_option_editor.cc:1572
+#: rc_option_editor.cc:1580
msgid "Audio"
msgstr "Audio"
#: add_route_dialog.cc:216 add_route_dialog.cc:227 add_route_dialog.cc:299
-#: editor_actions.cc:105 missing_file_dialog.cc:55 rc_option_editor.cc:1707
-#: rc_option_editor.cc:1715 rc_option_editor.cc:1723 rc_option_editor.cc:1732
-#: rc_option_editor.cc:1740 rc_option_editor.cc:1748 rc_option_editor.cc:1756
-#: rc_option_editor.cc:1765 rc_option_editor.cc:1774 rc_option_editor.cc:1783
-#: rc_option_editor.cc:1791 rc_option_editor.cc:1799
+#: editor_actions.cc:105 engine_dialog.cc:202 missing_file_dialog.cc:55
+#: rc_option_editor.cc:1703 rc_option_editor.cc:1711 rc_option_editor.cc:1719
+#: rc_option_editor.cc:1728 rc_option_editor.cc:1736 rc_option_editor.cc:1744
+#: rc_option_editor.cc:1752 rc_option_editor.cc:1761 rc_option_editor.cc:1770
+#: rc_option_editor.cc:1779 rc_option_editor.cc:1787 rc_option_editor.cc:1795
msgid "MIDI"
msgstr "MIDI"
@@ -626,7 +627,7 @@ msgstr "Normalisieren"
msgid "FFT analysis window"
msgstr "FFT-Analysefenster"
-#: analysis_window.cc:60 editor.cc:1856
+#: analysis_window.cc:60 editor.cc:1857
msgid "Spectral Analysis"
msgstr "FFT-Analyse"
@@ -650,50 +651,54 @@ msgstr ""
"Schaltfläche kann den Status des nichtexistenten Kontrollzieles nicht "
"verfolgen\n"
-#: ardour_ui.cc:180
+#: ardour_ui.cc:179
msgid "audition"
msgstr "Vorhören"
-#: ardour_ui.cc:181
+#: ardour_ui.cc:180
msgid "solo"
msgstr "Solo"
-#: ardour_ui.cc:182
+#: ardour_ui.cc:181
msgid "feedback"
msgstr "Feedback"
-#: ardour_ui.cc:187 speaker_dialog.cc:36
+#: ardour_ui.cc:186 speaker_dialog.cc:36
msgid "Speaker Configuration"
msgstr "Lautsprechereinstellung"
-#: ardour_ui.cc:188 theme_manager.cc:56 theme_manager.cc:64
+#: ardour_ui.cc:187 theme_manager.cc:56 theme_manager.cc:64
msgid "Theme Manager"
msgstr "Thema"
-#: ardour_ui.cc:189 keyeditor.cc:53
+#: ardour_ui.cc:188 keyeditor.cc:53
msgid "Key Bindings"
msgstr "Tastenkombinationen"
-#: ardour_ui.cc:190
+#: ardour_ui.cc:189
msgid "Preferences"
msgstr "Globale Einstellungen"
-#: ardour_ui.cc:191 ardour_ui.cc:196
+#: ardour_ui.cc:190 ardour_ui.cc:196
msgid "Add Tracks/Busses"
msgstr "Spuren/Busse hinzufügen"
-#: ardour_ui.cc:192
+#: ardour_ui.cc:191
msgid "About"
msgstr "Über..."
-#: ardour_ui.cc:193 location_ui.cc:1146
+#: ardour_ui.cc:192 location_ui.cc:1146
msgid "Locations"
msgstr "Positionen"
-#: ardour_ui.cc:194 route_params_ui.cc:58 route_params_ui.cc:606
+#: ardour_ui.cc:193 route_params_ui.cc:58 route_params_ui.cc:606
msgid "Tracks and Busses"
msgstr "Spuren/Busse"
+#: ardour_ui.cc:194 engine_dialog.cc:61
+msgid "Audio/MIDI Setup"
+msgstr "Audio/MIDI Einstellungen"
+
#: ardour_ui.cc:195
msgid "Properties"
msgstr "Projekteinstellungen"
@@ -718,15 +723,33 @@ msgstr "MIDI-Verbindungen"
msgid "Errors"
msgstr "Fehlermeldungen"
-#: ardour_ui.cc:388
-msgid "Starting audio engine"
-msgstr "Starte Audio-Engine"
+#: ardour_ui.cc:438
+msgid ""
+"The audio backend was shutdown because:\n"
+"\n"
+"%1"
+msgstr ""
+"Das Audiobackend wurde aus folgendem Grund beendet:\n"
+"\n"
+"%1"
-#: ardour_ui.cc:758 startup.cc:638
+#: ardour_ui.cc:440
+msgid ""
+"`The audio backend has either been shutdown or it\n"
+"disconnected %1 because %1\n"
+"was not fast enough. Try to restart\n"
+"the audio backend and save the session."
+msgstr ""
+"Das Audiobackend wurde entweder beendet oder von\n"
+"%1 getrennt, weil %1 nicht schnell genug\n"
+"war. Sie sollten versuchen, das Audiobackend \n"
+"neu zu starten und das Projekt zu speichern."
+
+#: ardour_ui.cc:818 startup.cc:378
msgid "%1 is ready for use"
msgstr "%1 ist bereit"
-#: ardour_ui.cc:806
+#: ardour_ui.cc:866
msgid ""
"WARNING: Your system has a limit for maximum amount of locked memory. This "
"might cause %1 to run out of memory before your system runs out of memory. \n"
@@ -741,23 +764,23 @@ msgstr ""
"Sie können die Speicherbegrenzung mit 'ulimit -l' einsehen und normalerweise "
"in %2 verändern."
-#: ardour_ui.cc:823
+#: ardour_ui.cc:883
msgid "Do not show this window again"
msgstr "Diese Meldung nicht erneut anzeigen"
-#: ardour_ui.cc:865
+#: ardour_ui.cc:925
msgid "Don't quit"
msgstr "Abbrechen"
-#: ardour_ui.cc:866
+#: ardour_ui.cc:926
msgid "Just quit"
msgstr "Beenden ohne zu speichern"
-#: ardour_ui.cc:867
+#: ardour_ui.cc:927
msgid "Save and quit"
msgstr "Speichern und beenden"
-#: ardour_ui.cc:877
+#: ardour_ui.cc:937
msgid ""
"%1 was unable to save your session.\n"
"\n"
@@ -771,15 +794,15 @@ msgstr ""
"\n"
"\"Trotzdem beenden\"."
-#: ardour_ui.cc:908
+#: ardour_ui.cc:968
msgid "Please wait while %1 cleans up..."
msgstr "Bitte warten Sie, während %1 aufräumt."
-#: ardour_ui.cc:925
+#: ardour_ui.cc:986
msgid "Unsaved Session"
msgstr "Nicht gespeichertes Projekt"
-#: ardour_ui.cc:946
+#: ardour_ui.cc:1007
msgid ""
"The session \"%1\"\n"
"has not been saved.\n"
@@ -797,7 +820,7 @@ msgstr ""
"\n"
"Wie wollen Sie vorgehen?"
-#: ardour_ui.cc:949
+#: ardour_ui.cc:1010
msgid ""
"The snapshot \"%1\"\n"
"has not been saved.\n"
@@ -815,74 +838,75 @@ msgstr ""
"\n"
"Wie wollen Sie vorgehen?"
-#: ardour_ui.cc:963
+#: ardour_ui.cc:1024
msgid "Prompter"
msgstr "Frage"
-#: ardour_ui.cc:1049
-msgid "disconnected"
-msgstr "getrennt"
+#: ardour_ui.cc:1110 ardour_ui.cc:1118
+#, c-format
+msgid "Audio: <span foreground=\"red\">none</span>"
+msgstr "Audio: <span foreground=\"red\">Kein</span>"
-#: ardour_ui.cc:1056
+#: ardour_ui.cc:1122
#, c-format
-msgid "JACK: <span foreground=\"green\">%.1f kHz / %4.1f ms</span>"
-msgstr "JACK: <span foreground=\"green\">%.1f kHz / %4.1f ms</span>"
+msgid "Audio: <span foreground=\"green\">%.1f kHz / %4.1f ms</span>"
+msgstr "Audio: <span foreground=\"green\">%.1f kHz / %4.1f ms</span>"
-#: ardour_ui.cc:1060
+#: ardour_ui.cc:1126
#, c-format
-msgid "JACK: <span foreground=\"green\">%<PRId64> kHz / %4.1f ms</span>"
-msgstr "JACK: <span foreground=\"green\">%<PRId64> kHz / %4.1f ms</span>"
+msgid "Audio: <span foreground=\"green\">%<PRId64> kHz / %4.1f ms</span>"
+msgstr "Audio: <span foreground=\"green\">%<PRId64> kHz / %4.1f ms</span>"
-#: ardour_ui.cc:1078 export_video_dialog.cc:68
+#: ardour_ui.cc:1144 export_video_dialog.cc:68
msgid "File:"
msgstr "Datei:"
-#: ardour_ui.cc:1082
+#: ardour_ui.cc:1148
msgid "BWF"
msgstr "BWF"
-#: ardour_ui.cc:1085
+#: ardour_ui.cc:1151
msgid "WAV"
msgstr "WAV"
-#: ardour_ui.cc:1088
+#: ardour_ui.cc:1154
msgid "WAV64"
msgstr "WAV64"
-#: ardour_ui.cc:1091 session_option_editor.cc:197
+#: ardour_ui.cc:1157 session_option_editor.cc:197
msgid "CAF"
msgstr "CAF"
-#: ardour_ui.cc:1094
+#: ardour_ui.cc:1160
msgid "AIFF"
msgstr "AIFF"
-#: ardour_ui.cc:1097
+#: ardour_ui.cc:1163
msgid "iXML"
msgstr "iXML"
-#: ardour_ui.cc:1100
+#: ardour_ui.cc:1166
msgid "RF64"
msgstr "RF64"
-#: ardour_ui.cc:1108
+#: ardour_ui.cc:1174
msgid "32-float"
msgstr "32-float"
-#: ardour_ui.cc:1111
+#: ardour_ui.cc:1177
msgid "24-int"
msgstr "24-int"
-#: ardour_ui.cc:1114
+#: ardour_ui.cc:1180
msgid "16-int"
msgstr "16-int"
-#: ardour_ui.cc:1133
+#: ardour_ui.cc:1199
#, c-format
msgid "DSP: <span foreground=\"%s\">%5.1f%%</span>"
msgstr "DSP: <span foreground=\"%s\">%5.1f%%</span>"
-#: ardour_ui.cc:1152
+#: ardour_ui.cc:1218
#, c-format
msgid ""
"Buffers: <span foreground=\"green\">p:</span><span foreground=\"%s\">"
@@ -893,61 +917,62 @@ msgstr ""
"%%</span> <span foreground=\"green\">c:</span><span foreground=\"%s\">"
"%<PRIu32>%%</span>"
-#: ardour_ui.cc:1188
+#: ardour_ui.cc:1259
msgid "Disk: <span foreground=\"green\">Unknown</span>"
msgstr "Disk: <span foreground=\"green\">Unbekannt</span>"
-#: ardour_ui.cc:1190
+#: ardour_ui.cc:1261
msgid "Disk: <span foreground=\"green\">24hrs+</span>"
msgstr "Disk: <span foreground=\"green\">24h+</span>"
-#: ardour_ui.cc:1208
+#: ardour_ui.cc:1279
msgid "Disk: <span foreground=\"green\">&gt;24 hrs</span>"
msgstr "Disk: <span foreground=\"green\">&gt;24 h</span>"
-#: ardour_ui.cc:1219
+#: ardour_ui.cc:1290
#, c-format
msgid "Disk: <span foreground=\"%s\">%02dh:%02dm:%02ds</span>"
msgstr "Disk: <span foreground=\"%s\">%02dh:%02dm:%02ds</span>"
-#: ardour_ui.cc:1245
+#: ardour_ui.cc:1316
#, c-format
msgid "Timecode|TC: <span foreground=\"%s\">%s</span>"
msgstr "Timecode|TC: <span foreground=\"%s\">%s</span>"
-#: ardour_ui.cc:1362 ardour_ui.cc:1371 startup.cc:1054
+#: ardour_ui.cc:1433 ardour_ui.cc:1442 session_dialog.cc:301
+#: session_dialog.cc:306
msgid "Recent Sessions"
msgstr "Zuletzt verwendete Projekte"
-#: ardour_ui.cc:1451
+#: ardour_ui.cc:1521
msgid ""
-"%1 is not connected to JACK\n"
+"%1 is not connected to any audio backend.\n"
"You cannot open or close sessions in this condition"
msgstr ""
-"%1 ist derzeit nicht mit JACK verbunden.\n"
-"Dadurch können keine Projekte geöffnet oder geschlossen werden."
+"%1 ist derzeit mit keinem Audiobackend verbunden.\n"
+"Daher können keine Projekte geöffnet oder geschlossen werden."
-#: ardour_ui.cc:1478
+#: ardour_ui.cc:1545
msgid "Open Session"
msgstr "Projekt öffnen"
-#: ardour_ui.cc:1503 session_import_dialog.cc:169
-#: session_metadata_dialog.cc:729 startup.cc:1083
+#: ardour_ui.cc:1570 session_dialog.cc:332 session_import_dialog.cc:169
+#: session_metadata_dialog.cc:729
msgid "%1 sessions"
msgstr "%1 Projekte"
-#: ardour_ui.cc:1540
+#: ardour_ui.cc:1607
msgid "You cannot add a track without a session already loaded."
msgstr ""
"Sie können erst Spuren oder Busse hinzufügen, wenn ein Projekt geladen wurde."
-#: ardour_ui.cc:1548
+#: ardour_ui.cc:1615
msgid "could not create %1 new mixed track"
msgid_plural "could not create %1 new mixed tracks"
msgstr[0] "konnte %1 neue Audio+MIDI-Spur nicht erstellen"
msgstr[1] "konnte %1 neue Audio+MIDI-Spuren nicht erstellen"
-#: ardour_ui.cc:1554 ardour_ui.cc:1615
+#: ardour_ui.cc:1621 ardour_ui.cc:1682
msgid ""
"There are insufficient JACK ports available\n"
"to create a new track or bus.\n"
@@ -960,24 +985,24 @@ msgstr ""
"%1 und starten Sie JACK mit einer größeren\n"
"Anzahl Ports neu."
-#: ardour_ui.cc:1589
+#: ardour_ui.cc:1656
msgid "You cannot add a track or bus without a session already loaded."
msgstr ""
"Sie können erst Spuren oder Busse hinzufügen, wenn ein Projekt geladen wurde."
-#: ardour_ui.cc:1598
+#: ardour_ui.cc:1665
msgid "could not create %1 new audio track"
msgid_plural "could not create %1 new audio tracks"
msgstr[0] "konnte %1 neue Audiospur nicht erstellen."
msgstr[1] "konnte %1 neue Audiospuren nicht erstellen."
-#: ardour_ui.cc:1607
+#: ardour_ui.cc:1674
msgid "could not create %1 new audio bus"
msgid_plural "could not create %1 new audio busses"
msgstr[0] "konnte %1 neuen Audiobus nicht erstellen"
msgstr[1] "konnte %1 neue Audiobusse nicht erstellen"
-#: ardour_ui.cc:1724
+#: ardour_ui.cc:1798
msgid ""
"Please create one or more tracks before trying to record.\n"
"You can do this with the \"Add Track or Bus\" option in the Session menu."
@@ -986,41 +1011,15 @@ msgstr ""
"eine oder mehrere Spur hinzu. Die geht über \"Spur/Bus hinzufügen\"\n"
"im Menüpunkt Projekt."
-#: ardour_ui.cc:2114
-msgid ""
-"The audio backend (JACK) was shutdown because:\n"
-"\n"
-"%1"
-msgstr ""
-"Der Audioserver (JACK) wurde aus folgendem Grund beendet:\n"
-"\n"
-"%1"
-
-#: ardour_ui.cc:2116
-msgid ""
-"JACK has either been shutdown or it\n"
-"disconnected %1 because %1\n"
-"was not fast enough. Try to restart\n"
-"JACK, reconnect and save the session."
-msgstr ""
-"JACK wurde entweder beendet oder von\n"
-"%1 getrennt, weil %1 nicht schnell genug\n"
-"war. Sie sollten versuchen, JACK neu zu starten,\n"
-"neu zu verbinden, und das Projekt zu speichern."
-
-#: ardour_ui.cc:2142
-msgid "Unable to start the session running"
-msgstr "Konnte das aktuelle Projekt nicht starten"
-
-#: ardour_ui.cc:2222
+#: ardour_ui.cc:2175
msgid "Take Snapshot"
msgstr "Schnappschuss machen"
-#: ardour_ui.cc:2223
+#: ardour_ui.cc:2176
msgid "Name of new snapshot"
msgstr "Name für neuen Schnappschuss"
-#: ardour_ui.cc:2247
+#: ardour_ui.cc:2200
msgid ""
"To ensure compatibility with various systems\n"
"snapshot names may not contain a '%1' character"
@@ -1028,29 +1027,29 @@ msgstr ""
"Um die Kompatibilität mit verschiedenen Systemen sicher zu stellen,\n"
"dürfen Namen von Schnappschüssen kein '%1'-Zeichen enthalten"
-#: ardour_ui.cc:2259
+#: ardour_ui.cc:2212
msgid "Confirm Snapshot Overwrite"
msgstr "Bestätige das Überschreiben des Schnappschusses"
-#: ardour_ui.cc:2260
+#: ardour_ui.cc:2213
msgid "A snapshot already exists with that name. Do you want to overwrite it?"
msgstr ""
"Ein Schnappschuss mit diesem Namen existiert bereits. Wollen Sie ihn "
"überschreiben?"
-#: ardour_ui.cc:2263 utils_videotl.cc:67
+#: ardour_ui.cc:2216 utils_videotl.cc:67
msgid "Overwrite"
msgstr "Überschreiben"
-#: ardour_ui.cc:2297
+#: ardour_ui.cc:2250
msgid "Rename Session"
msgstr "Projekt umbenennen"
-#: ardour_ui.cc:2298
+#: ardour_ui.cc:2251
msgid "New session name"
msgstr "Neuer Projektname"
-#: ardour_ui.cc:2312 ardour_ui.cc:2692 ardour_ui.cc:2737
+#: ardour_ui.cc:2265 ardour_ui.cc:2650 ardour_ui.cc:2686
msgid ""
"To ensure compatibility with various systems\n"
"session names may not contain a '%1' character"
@@ -1058,14 +1057,14 @@ msgstr ""
"Um die Kompatibilität mit verschiedenen Systemen sicher zu stellen,\n"
"dürfen Projektnamen kein '%1'-Zeichen enthalten"
-#: ardour_ui.cc:2320
+#: ardour_ui.cc:2273
msgid ""
"That name is already in use by another directory/folder. Please try again."
msgstr ""
"Dieser Name wird schon von einem anderen Verzeichnis/Ordner benutzt. Bitte "
"versuchen Sie einen anderen Namen."
-#: ardour_ui.cc:2329
+#: ardour_ui.cc:2282
msgid ""
"Renaming this session failed.\n"
"Things could be seriously messed up at this point"
@@ -1073,19 +1072,19 @@ msgstr ""
"Das Umbenennen des Projekts ist fehlgeschlagen.\n"
"Dies könnte auf schwerwiegende Probleme hinweisen."
-#: ardour_ui.cc:2440
+#: ardour_ui.cc:2393
msgid "Save Template"
msgstr "Als Vorlage Speichern"
-#: ardour_ui.cc:2441
+#: ardour_ui.cc:2394
msgid "Name for template:"
msgstr "Name für Vorlage"
-#: ardour_ui.cc:2442
+#: ardour_ui.cc:2395
msgid "-template"
msgstr "-Vorlage"
-#: ardour_ui.cc:2480
+#: ardour_ui.cc:2433
msgid ""
"This session\n"
"%1\n"
@@ -1095,52 +1094,48 @@ msgstr ""
"%1\n"
"existiert bereits. Wollen Sie sie öffnen?"
-#: ardour_ui.cc:2490
+#: ardour_ui.cc:2443
msgid "Open Existing Session"
msgstr "Vorhandenes Projekt öffnen"
-#: ardour_ui.cc:2728
+#: ardour_ui.cc:2677
msgid "There is no existing session at \"%1\""
msgstr "Es gibt kein Projekt in: \"%1\""
-#: ardour_ui.cc:2815
+#: ardour_ui.cc:2764
msgid "Please wait while %1 loads your session"
msgstr "Bitte warten Sie, während %1 das Projekt lädt"
-#: ardour_ui.cc:2830
+#: ardour_ui.cc:2779
msgid "Port Registration Error"
msgstr "Fehler bei der Registrierung von Ports"
-#: ardour_ui.cc:2831
+#: ardour_ui.cc:2780
msgid "Click the Close button to try again."
msgstr "Klicken Sie auf Schließen, um es erneut zu versuchen."
-#: ardour_ui.cc:2852
+#: ardour_ui.cc:2801
msgid "Session \"%1 (snapshot %2)\" did not load successfully"
msgstr "Projekt \"%1 (Schnappschuss %2)\" konnte nicht geladen werden."
-#: ardour_ui.cc:2858
+#: ardour_ui.cc:2808
msgid "Loading Error"
msgstr "Fehler beim Laden"
-#: ardour_ui.cc:2859
-msgid "Click the Refresh button to try again."
-msgstr "Klicken Sie auf Aktualisieren, um es erneut zu versuchen."
-
-#: ardour_ui.cc:2941
+#: ardour_ui.cc:2875
msgid "Could not create session in \"%1\""
msgstr "Konnte kein Projekt in \"%1\" anlegen"
-#: ardour_ui.cc:3041
+#: ardour_ui.cc:2975
msgid "No files were ready for clean-up"
msgstr "Keine Audiodateien zum Aufräumen vorhanden"
-#: ardour_ui.cc:3045 ardour_ui.cc:3055 ardour_ui.cc:3188 ardour_ui.cc:3195
+#: ardour_ui.cc:2979 ardour_ui.cc:2989 ardour_ui.cc:3122 ardour_ui.cc:3129
#: ardour_ui_ed.cc:104
msgid "Clean-up"
msgstr "Aufräumen"
-#: ardour_ui.cc:3046
+#: ardour_ui.cc:2980
msgid ""
"If this seems suprising, \n"
"check for any existing snapshots.\n"
@@ -1152,19 +1147,19 @@ msgstr ""
"sind sie wahrscheinlich noch in einem\n"
"älteren Schnappschuss als Region eingebunden."
-#: ardour_ui.cc:3105
+#: ardour_ui.cc:3039
msgid "kilo"
msgstr "kilo"
-#: ardour_ui.cc:3108
+#: ardour_ui.cc:3042
msgid "mega"
msgstr "mega"
-#: ardour_ui.cc:3111
+#: ardour_ui.cc:3045
msgid "giga"
msgstr "giga"
-#: ardour_ui.cc:3116
+#: ardour_ui.cc:3050
msgid ""
"The following file was deleted from %2,\n"
"releasing %3 %4bytes of disk space"
@@ -1178,7 +1173,7 @@ msgstr[1] ""
"Die folgenden %1 Dateien wurden von %2\n"
"gelöscht und gaben %3 %4bytes Speicherplatz frei"
-#: ardour_ui.cc:3123
+#: ardour_ui.cc:3057
msgid ""
"The following file was not in use and \n"
"has been moved to: %2\n"
@@ -1216,11 +1211,11 @@ msgstr[1] ""
"\n"
"%3 %4bytes Speicherplatz freigegeben werden.\n"
-#: ardour_ui.cc:3183
+#: ardour_ui.cc:3117
msgid "Are you sure you want to clean-up?"
msgstr "Wollen Sie wirklich aufräumen?"
-#: ardour_ui.cc:3190
+#: ardour_ui.cc:3124
msgid ""
"Clean-up is a destructive operation.\n"
"ALL undo/redo information will be lost if you clean-up.\n"
@@ -1232,42 +1227,42 @@ msgstr ""
"Nach dem Aufräumen werden alle nicht benötigten Audiodateien in den \"dead "
"sounds\" Ordner verschoben."
-#: ardour_ui.cc:3198
+#: ardour_ui.cc:3132
msgid "CleanupDialog"
msgstr "Aufräumdialog"
-#: ardour_ui.cc:3228
+#: ardour_ui.cc:3162
msgid "Cleaned Files"
msgstr "Aufgeräumte Dateien"
-#: ardour_ui.cc:3245
+#: ardour_ui.cc:3179
msgid "deleted file"
msgstr "gelöschte Datei"
-#: ardour_ui.cc:3337
+#: ardour_ui.cc:3271
msgid ""
"Video-Server was not launched by Ardour. The request to stop it is ignored."
msgstr ""
"Der Video-Server wurde nicht von Ardour gestartet, der Befehl ihn anzuhalten "
"wird ignoriert."
-#: ardour_ui.cc:3341
+#: ardour_ui.cc:3275
msgid "Stop Video-Server"
msgstr "Video-Server anhalten"
-#: ardour_ui.cc:3342
+#: ardour_ui.cc:3276
msgid "Do you really want to stop the Video Server?"
msgstr "Wollen Sie den Video-Server wirklich anhalten?"
-#: ardour_ui.cc:3345
+#: ardour_ui.cc:3279
msgid "Yes, Stop It"
msgstr "Ja, anhalten."
-#: ardour_ui.cc:3371
+#: ardour_ui.cc:3305
msgid "The Video Server is already started."
msgstr "Der Video-Server läuft bereits"
-#: ardour_ui.cc:3373
+#: ardour_ui.cc:3307
msgid ""
"An external Video Server is configured and can be reached. Not starting a "
"new instance."
@@ -1275,7 +1270,7 @@ msgstr ""
"Ein externer Video-Server wurde konfiguriert, ist aber nicht erreichbar. Es "
"wird keine neue Instanz gestartet."
-#: ardour_ui.cc:3381 ardour_ui.cc:3471
+#: ardour_ui.cc:3315 ardour_ui.cc:3405
msgid ""
"Could not connect to the Video Server. Start it or configure its access URL "
"in Edit -> Preferences."
@@ -1284,36 +1279,36 @@ msgstr ""
"ihn vorher starten oder die Adresse in Bearbeiten -> Globale Einstellungen "
"anpassen"
-#: ardour_ui.cc:3405
+#: ardour_ui.cc:3339
msgid "Specified docroot is not an existing directory."
msgstr "Das eingestellte Dokumentenverzeichnis existiert nicht."
-#: ardour_ui.cc:3410
+#: ardour_ui.cc:3344
msgid "Given Video Server is not an executable file."
msgstr "Der eingestellte Video-Server ist keine ausführbare Datei."
-#: ardour_ui.cc:3443
+#: ardour_ui.cc:3377
msgid "Cannot launch the video-server"
msgstr "Kann den Videoserver nicht starten "
-#: ardour_ui.cc:3452
+#: ardour_ui.cc:3386
msgid "Video-server was started but does not respond to requests..."
msgstr "Viideoserver wurde gestartet, reagiert aber nicht auf Anfragen..."
-#: ardour_ui.cc:3497 editor_audio_import.cc:632
+#: ardour_ui.cc:3431 editor_audio_import.cc:632
msgid "could not open %1"
msgstr "Konnte \"%s\" nicht öffnen."
-#: ardour_ui.cc:3501
+#: ardour_ui.cc:3435
msgid "no video-file selected"
msgstr "Es wurde keine Video-Datei ausgewählt."
-#: ardour_ui.cc:3673
+#: ardour_ui.cc:3607
msgid "Recording was stopped because your system could not keep up."
msgstr ""
"Die Aufnahme wurde gestoppt, da Ihr System nicht schnell genug folgen konnte."
-#: ardour_ui.cc:3702
+#: ardour_ui.cc:3636
msgid ""
"The disk system on your computer\n"
"was not able to keep up with %1.\n"
@@ -1327,7 +1322,7 @@ msgstr ""
"Die Daten konnten nicht schnell genug geschrieben\n"
"werden, um die Aufnahme fortzuführen.\n"
-#: ardour_ui.cc:3721
+#: ardour_ui.cc:3655
msgid ""
"The disk system on your computer\n"
"was not able to keep up with %1.\n"
@@ -1341,11 +1336,11 @@ msgstr ""
"Die Daten konnten nicht schnell genug gelesen\n"
"werden, um die Wiedergabe aufrechtzuerhalten.\n"
-#: ardour_ui.cc:3761
+#: ardour_ui.cc:3695
msgid "Crash Recovery"
msgstr "Absturz-Wiederherstellung"
-#: ardour_ui.cc:3762
+#: ardour_ui.cc:3696
msgid ""
"This session appears to have been in the\n"
"middle of recording when %1 or\n"
@@ -1363,19 +1358,19 @@ msgstr ""
"für Sie wiederherstellen oder sie verwerfen.\n"
"Bitte entscheiden Sie, wie Sie vorgehen möchten.\n"
-#: ardour_ui.cc:3774
+#: ardour_ui.cc:3708
msgid "Ignore crash data"
msgstr "Daten verwerfen"
-#: ardour_ui.cc:3775
+#: ardour_ui.cc:3709
msgid "Recover from crash"
msgstr "Daten wiederherstellen"
-#: ardour_ui.cc:3795
+#: ardour_ui.cc:3729
msgid "Sample Rate Mismatch"
msgstr "Samplerate passt nicht"
-#: ardour_ui.cc:3796
+#: ardour_ui.cc:3730
msgid ""
"This session was created with a sample rate of %1 Hz, but\n"
"%2 is currently running at %3 Hz. If you load this session,\n"
@@ -1386,23 +1381,23 @@ msgstr ""
"%2 läuft derzeit mit %3 Hz. Wenn Sie dieses Projekt laden, \n"
"wird Ihr Audiomaterial mit der falschen Samplerate abgespielt.\n"
-#: ardour_ui.cc:3805
+#: ardour_ui.cc:3739
msgid "Do not load session"
msgstr "Projekt nicht laden"
-#: ardour_ui.cc:3806
+#: ardour_ui.cc:3740
msgid "Load session anyway"
msgstr "Projekt trotzdem laden"
-#: ardour_ui.cc:3829
-msgid "Could not disconnect from JACK"
-msgstr "Konnte Verbindung mit JACK nicht trennen"
+#: ardour_ui.cc:3766
+msgid "Could not disconnect from Audio/MIDI engine"
+msgstr "Konnte Verbindung mit der Audio/MIDI Engine nicht trennen"
-#: ardour_ui.cc:3842
-msgid "Could not reconnect to JACK"
-msgstr "Konnte nicht erneut zu JACK verbinden"
+#: ardour_ui.cc:3781
+msgid "Could not reconnect to the Audio/MIDI engine"
+msgstr "Konnte nicht zur Audio/MIDI Engine wiederverbinden"
-#: ardour_ui.cc:4116
+#: ardour_ui.cc:4056
msgid ""
"%4This is a session from an older version of %3%5\n"
"\n"
@@ -1562,20 +1557,20 @@ msgstr "[WARNUNG]:"
msgid "[INFO]: "
msgstr "[INFO]: "
-#: ardour_ui2.cc:247 ardour_ui_ed.cc:377
+#: ardour_ui2.cc:247 ardour_ui_ed.cc:344
msgid "Auto Return"
msgstr "Auto Return"
-#: ardour_ui2.cc:249 ardour_ui_ed.cc:380
+#: ardour_ui2.cc:249 ardour_ui_ed.cc:347
msgid "Follow Edits"
msgstr "Folge Bearbeitungen"
-#: ardour_ui2.cc:628 rc_option_editor.cc:1004 rc_option_editor.cc:1022
-#: rc_option_editor.cc:1025 rc_option_editor.cc:1027 rc_option_editor.cc:1029
-#: rc_option_editor.cc:1037 rc_option_editor.cc:1045 rc_option_editor.cc:1047
-#: rc_option_editor.cc:1055 rc_option_editor.cc:1062 rc_option_editor.cc:1071
-#: rc_option_editor.cc:1073 rc_option_editor.cc:1075 rc_option_editor.cc:1083
-#: rc_option_editor.cc:1085 rc_option_editor.cc:1094
+#: ardour_ui2.cc:628 rc_option_editor.cc:1002 rc_option_editor.cc:1020
+#: rc_option_editor.cc:1023 rc_option_editor.cc:1025 rc_option_editor.cc:1027
+#: rc_option_editor.cc:1035 rc_option_editor.cc:1043 rc_option_editor.cc:1045
+#: rc_option_editor.cc:1053 rc_option_editor.cc:1060 rc_option_editor.cc:1069
+#: rc_option_editor.cc:1071 rc_option_editor.cc:1073 rc_option_editor.cc:1081
+#: rc_option_editor.cc:1083 rc_option_editor.cc:1092
#: session_option_editor.cc:234 session_option_editor.cc:236
#: session_option_editor.cc:257 session_option_editor.cc:259
#: session_option_editor.cc:261 session_option_editor.cc:268
@@ -1594,19 +1589,19 @@ msgstr "Mixer laden"
msgid "Reload Session History"
msgstr "Projekt-Aktionsverlauf laden"
-#: ardour_ui_dialogs.cc:242
+#: ardour_ui_dialogs.cc:238
msgid "Don't close"
msgstr "Abbrechen"
-#: ardour_ui_dialogs.cc:243
+#: ardour_ui_dialogs.cc:239
msgid "Just close"
msgstr "Ohne speichern schließen"
-#: ardour_ui_dialogs.cc:244
+#: ardour_ui_dialogs.cc:240
msgid "Save and close"
msgstr "Speichern und schließen"
-#: ardour_ui_dialogs.cc:340
+#: ardour_ui_dialogs.cc:339
msgid "This screen is not tall enough to display the mixer window"
msgstr ""
"Dieser Bildschirm ist nicht hoch genug, um das Mixerfenster darzustellen"
@@ -1616,11 +1611,11 @@ msgid "Session"
msgstr "Projekt"
#: ardour_ui_ed.cc:106 editor_actions.cc:134 editor_regions.cc:115
-#: port_group.cc:457 session_option_editor.cc:82 session_option_editor.cc:89
+#: port_group.cc:458 session_option_editor.cc:82 session_option_editor.cc:89
msgid "Sync"
msgstr "Sync"
-#: ardour_ui_ed.cc:107 engine_dialog.cc:369
+#: ardour_ui_ed.cc:107
msgid "Options"
msgstr "Optionen"
@@ -1648,15 +1643,15 @@ msgstr "Dateiformat"
msgid "Sample Format"
msgstr "Sampleformat"
-#: ardour_ui_ed.cc:114 rc_option_editor.cc:1826 rc_option_editor.cc:1839
+#: ardour_ui_ed.cc:114 rc_option_editor.cc:1822 rc_option_editor.cc:1835
msgid "Control Surfaces"
msgstr "Eingabegeräte / Controller"
-#: ardour_ui_ed.cc:115 rc_option_editor.cc:1558
+#: ardour_ui_ed.cc:115 rc_option_editor.cc:1554
msgid "Plugins"
msgstr "Plugins"
-#: ardour_ui_ed.cc:116 rc_option_editor.cc:1902
+#: ardour_ui_ed.cc:116 rc_option_editor.cc:1898
msgid "Metering"
msgstr "Pegelanzeige"
@@ -1754,170 +1749,153 @@ msgstr "Nicht benutzte Dateien entfernen..."
msgid "Flush Wastebasket"
msgstr "Müll leeren"
-#: ardour_ui_ed.cc:189 keyeditor.cc:253 rc_option_editor.cc:1472
-msgid "JACK"
-msgstr "JACK"
-
-#: ardour_ui_ed.cc:190 route_params_ui.cc:105
-msgid "Latency"
-msgstr "Latenz"
-
-#: ardour_ui_ed.cc:192
-msgid "Reconnect"
-msgstr "Verbinde neu"
-
-#: ardour_ui_ed.cc:195 global_port_matrix.cc:207 io_selector.cc:210
-#: mixer_strip.cc:719 mixer_strip.cc:845
-msgid "Disconnect"
-msgstr "Trenne"
-
-#: ardour_ui_ed.cc:222
+#: ardour_ui_ed.cc:189
msgid "Quit"
msgstr "Beenden"
-#: ardour_ui_ed.cc:226
+#: ardour_ui_ed.cc:193
msgid "Maximise Editor Space"
msgstr "Editor maximieren"
-#: ardour_ui_ed.cc:227
+#: ardour_ui_ed.cc:194
msgid "Show Toolbars"
msgstr "Zeige Werkzeugleisten"
-#: ardour_ui_ed.cc:230 mixer_ui.cc:1865 mixer_ui.cc:1871
+#: ardour_ui_ed.cc:197 mixer_ui.cc:1865 mixer_ui.cc:1871
msgid "Window|Mixer"
msgstr "Mixer"
-#: ardour_ui_ed.cc:231
+#: ardour_ui_ed.cc:198
msgid "Toggle Editor+Mixer"
msgstr "Editor+Mixer umschalten"
-#: ardour_ui_ed.cc:232 meterbridge.cc:230 meterbridge.cc:236
+#: ardour_ui_ed.cc:199 meterbridge.cc:230 meterbridge.cc:236
msgid "Window|Meterbridge"
msgstr "Meterbridge"
-#: ardour_ui_ed.cc:234 midi_tracer.cc:39
+#: ardour_ui_ed.cc:201 midi_tracer.cc:42
msgid "MIDI Tracer"
msgstr "Midisignale verfolgen"
-#: ardour_ui_ed.cc:236
+#: ardour_ui_ed.cc:203
msgid "Chat"
msgstr "Chat"
-#: ardour_ui_ed.cc:238
+#: ardour_ui_ed.cc:205
msgid "Help|Manual"
msgstr "Handbuch"
-#: ardour_ui_ed.cc:239
+#: ardour_ui_ed.cc:206
msgid "Reference"
msgstr "Referenz"
-#: ardour_ui_ed.cc:241 plugin_ui.cc:418
+#: ardour_ui_ed.cc:208 plugin_ui.cc:416
msgid "Save"
msgstr "Speichern"
-#: ardour_ui_ed.cc:249 rc_option_editor.cc:1114 rc_option_editor.cc:1125
-#: rc_option_editor.cc:1134 rc_option_editor.cc:1147 rc_option_editor.cc:1160
-#: rc_option_editor.cc:1169 rc_option_editor.cc:1179 rc_option_editor.cc:1181
-#: rc_option_editor.cc:1191 rc_option_editor.cc:1207 rc_option_editor.cc:1220
-#: rc_option_editor.cc:1238 rc_option_editor.cc:1240 rc_option_editor.cc:1254
-#: rc_option_editor.cc:1257 rc_option_editor.cc:1259 rc_option_editor.cc:1276
-#: rc_option_editor.cc:1287
+#: ardour_ui_ed.cc:216 rc_option_editor.cc:1112 rc_option_editor.cc:1123
+#: rc_option_editor.cc:1132 rc_option_editor.cc:1145 rc_option_editor.cc:1158
+#: rc_option_editor.cc:1167 rc_option_editor.cc:1177 rc_option_editor.cc:1179
+#: rc_option_editor.cc:1189 rc_option_editor.cc:1205 rc_option_editor.cc:1218
+#: rc_option_editor.cc:1236 rc_option_editor.cc:1238 rc_option_editor.cc:1252
+#: rc_option_editor.cc:1255 rc_option_editor.cc:1257 rc_option_editor.cc:1274
+#: rc_option_editor.cc:1285
msgid "Transport"
msgstr "Transport"
-#: ardour_ui_ed.cc:255 engine_dialog.cc:85
+#: ardour_ui_ed.cc:222
msgid "Stop"
msgstr "Stopp"
-#: ardour_ui_ed.cc:258
+#: ardour_ui_ed.cc:225
msgid "Roll"
msgstr "Wiedergabe"
-#: ardour_ui_ed.cc:262
+#: ardour_ui_ed.cc:229
msgid "Start/Stop"
msgstr "Start/Stopp"
-#: ardour_ui_ed.cc:265
+#: ardour_ui_ed.cc:232
msgid "Start/Continue/Stop"
msgstr "Start/Stopp"
-#: ardour_ui_ed.cc:268
+#: ardour_ui_ed.cc:235
msgid "Stop and Forget Capture"
msgstr "Stopp + Aufnahme verwerfen"
-#: ardour_ui_ed.cc:278
+#: ardour_ui_ed.cc:245
msgid "Transition To Roll"
msgstr "Vorwärts (normal)"
-#: ardour_ui_ed.cc:282
+#: ardour_ui_ed.cc:249
msgid "Transition To Reverse"
msgstr "Rückwärts (normal)"
-#: ardour_ui_ed.cc:286
+#: ardour_ui_ed.cc:253
msgid "Play Loop Range"
msgstr "Schleife wiedergeben"
-#: ardour_ui_ed.cc:289
+#: ardour_ui_ed.cc:256
msgid "Play Selected Range"
msgstr "Gewählten Bereich wiedergeben"
-#: ardour_ui_ed.cc:292
+#: ardour_ui_ed.cc:259
msgid "Play Selection w/Preroll"
msgstr "Ausgewählten Bereich mit Vorlauf wiedergeben"
-#: ardour_ui_ed.cc:296
+#: ardour_ui_ed.cc:263
msgid "Enable Record"
msgstr "Aufnahme aktivieren"
-#: ardour_ui_ed.cc:299
+#: ardour_ui_ed.cc:266
msgid "Start Recording"
msgstr "Aufnahme starten"
-#: ardour_ui_ed.cc:303
+#: ardour_ui_ed.cc:270
msgid "Rewind"
msgstr "Rückwärts (beschleunigen)"
-#: ardour_ui_ed.cc:306
+#: ardour_ui_ed.cc:273
msgid "Rewind (Slow)"
msgstr "Rückwärts (langsam)"
-#: ardour_ui_ed.cc:309
+#: ardour_ui_ed.cc:276
msgid "Rewind (Fast)"
msgstr "Rückwärts (schnell)"
-#: ardour_ui_ed.cc:312 startup.cc:727
+#: ardour_ui_ed.cc:279
msgid "Forward"
msgstr "Vorwärts (beschleunigen)"
-#: ardour_ui_ed.cc:315
+#: ardour_ui_ed.cc:282
msgid "Forward (Slow)"
msgstr "Vorwärts (langsam)"
-#: ardour_ui_ed.cc:318
+#: ardour_ui_ed.cc:285
msgid "Forward (Fast)"
msgstr "Vorwärts (schnell)"
-#: ardour_ui_ed.cc:321
+#: ardour_ui_ed.cc:288
msgid "Goto Zero"
msgstr "Zum Nullpunkt springen"
-#: ardour_ui_ed.cc:324
+#: ardour_ui_ed.cc:291
msgid "Goto Start"
msgstr "Zum Anfang springen"
-#: ardour_ui_ed.cc:327
+#: ardour_ui_ed.cc:294
msgid "Goto End"
msgstr "Zum Ende springen"
-#: ardour_ui_ed.cc:330
+#: ardour_ui_ed.cc:297
msgid "Goto Wall Clock"
msgstr "Zur lokalen Uhrzeit springen"
-#: ardour_ui_ed.cc:334
+#: ardour_ui_ed.cc:301
msgid "Focus On Clock"
msgstr "Fokus auf Zeitanzeige setzen"
-#: ardour_ui_ed.cc:338 ardour_ui_ed.cc:347 audio_clock.cc:2046 editor.cc:237
+#: ardour_ui_ed.cc:305 ardour_ui_ed.cc:314 audio_clock.cc:2046 editor.cc:237
#: editor_actions.cc:544 editor_actions.cc:553 export_timespan_selector.cc:88
#: session_option_editor.cc:41 session_option_editor.cc:61
#: session_option_editor.cc:80 session_option_editor.cc:96
@@ -1926,125 +1904,121 @@ msgstr "Fokus auf Zeitanzeige setzen"
msgid "Timecode"
msgstr "Timecode"
-#: ardour_ui_ed.cc:340 ardour_ui_ed.cc:349 editor_actions.cc:542
+#: ardour_ui_ed.cc:307 ardour_ui_ed.cc:316 editor_actions.cc:542
msgid "Bars & Beats"
msgstr "Takte & Schläge"
-#: ardour_ui_ed.cc:342 ardour_ui_ed.cc:351
+#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:318
msgid "Minutes & Seconds"
msgstr "Minuten & Sekunden"
-#: ardour_ui_ed.cc:344 ardour_ui_ed.cc:353 audio_clock.cc:2050 editor.cc:238
+#: ardour_ui_ed.cc:311 ardour_ui_ed.cc:320 audio_clock.cc:2050 editor.cc:238
#: editor_actions.cc:543
msgid "Samples"
msgstr "Samples"
-#: ardour_ui_ed.cc:356
+#: ardour_ui_ed.cc:323
msgid "Punch In"
msgstr "Punch In"
-#: ardour_ui_ed.cc:357 mixer_strip.cc:1905 route_ui.cc:137
+#: ardour_ui_ed.cc:324 mixer_strip.cc:1905 route_ui.cc:137
#: time_info_box.cc:113
msgid "In"
msgstr "In"
-#: ardour_ui_ed.cc:360
+#: ardour_ui_ed.cc:327
msgid "Punch Out"
msgstr "Punch Out"
-#: ardour_ui_ed.cc:361 time_info_box.cc:114
+#: ardour_ui_ed.cc:328 time_info_box.cc:114
msgid "Out"
msgstr "Out"
-#: ardour_ui_ed.cc:364
+#: ardour_ui_ed.cc:331
msgid "Punch In/Out"
msgstr "Punch In/Out"
-#: ardour_ui_ed.cc:365
+#: ardour_ui_ed.cc:332
msgid "In/Out"
msgstr "In/Out"
-#: ardour_ui_ed.cc:368 rc_option_editor.cc:1071
+#: ardour_ui_ed.cc:335 rc_option_editor.cc:1069
msgid "Click"
msgstr "Klick"
-#: ardour_ui_ed.cc:371
+#: ardour_ui_ed.cc:338
msgid "Auto Input"
msgstr "Auto Input"
-#: ardour_ui_ed.cc:374
+#: ardour_ui_ed.cc:341
msgid "Auto Play"
msgstr "Auto Play"
-#: ardour_ui_ed.cc:385
+#: ardour_ui_ed.cc:352
msgid "Sync Startup to Video"
msgstr "Start mit Video synchronisieren"
-#: ardour_ui_ed.cc:387
+#: ardour_ui_ed.cc:354
msgid "Time Master"
msgstr "Time Master"
-#: ardour_ui_ed.cc:394
+#: ardour_ui_ed.cc:361
msgid "Toggle Record Enable Track %1"
msgstr "Aufnahme auf Spur %1 aktivieren"
-#: ardour_ui_ed.cc:401
+#: ardour_ui_ed.cc:368
msgid "Percentage"
msgstr "Prozent"
-#: ardour_ui_ed.cc:402 shuttle_control.cc:169
+#: ardour_ui_ed.cc:369 shuttle_control.cc:169
msgid "Semitones"
msgstr "Halbtöne"
-#: ardour_ui_ed.cc:406
+#: ardour_ui_ed.cc:373
msgid "Send MTC"
msgstr "MTC senden"
-#: ardour_ui_ed.cc:408
+#: ardour_ui_ed.cc:375
msgid "Send MMC"
msgstr "MMC senden"
-#: ardour_ui_ed.cc:410
+#: ardour_ui_ed.cc:377
msgid "Use MMC"
msgstr "Benutze MMC"
-#: ardour_ui_ed.cc:412 rc_option_editor.cc:1710
+#: ardour_ui_ed.cc:379 rc_option_editor.cc:1706
msgid "Send MIDI Clock"
msgstr "MIDI Clock senden"
-#: ardour_ui_ed.cc:414
+#: ardour_ui_ed.cc:381
msgid "Send MIDI Feedback"
msgstr "MIDI Feedback senden"
-#: ardour_ui_ed.cc:420
+#: ardour_ui_ed.cc:387
msgid "Panic"
msgstr "Panic"
-#: ardour_ui_ed.cc:560
+#: ardour_ui_ed.cc:472
msgid "Wall Clock"
msgstr "Uhrzeit"
-#: ardour_ui_ed.cc:561
+#: ardour_ui_ed.cc:473
msgid "Disk Space"
msgstr "Speicherplatz"
-#: ardour_ui_ed.cc:562
+#: ardour_ui_ed.cc:474
msgid "DSP"
msgstr "DSP"
-#: ardour_ui_ed.cc:563
+#: ardour_ui_ed.cc:475
msgid "Buffers"
msgstr "Puffer"
-#: ardour_ui_ed.cc:564
-msgid "JACK Sampling Rate and Latency"
-msgstr "JACK Samplerate und Latenz"
-
-#: ardour_ui_ed.cc:565
+#: ardour_ui_ed.cc:477
msgid "Timecode Format"
msgstr "Timecode-Format"
-#: ardour_ui_ed.cc:566
+#: ardour_ui_ed.cc:478
msgid "File Format"
msgstr "Dateiformat"
@@ -2183,32 +2157,32 @@ msgid "hide track"
msgstr "Diese Spur verbergen"
#: automation_time_axis.cc:255 automation_time_axis.cc:307
-#: automation_time_axis.cc:496 gain_meter.cc:195 generic_pluginui.cc:456
-#: generic_pluginui.cc:746 panner_ui.cc:150
+#: automation_time_axis.cc:496 gain_meter.cc:194 generic_pluginui.cc:454
+#: generic_pluginui.cc:744 panner_ui.cc:149
msgid "Automation|Manual"
msgstr "Manuell"
#: automation_time_axis.cc:257 automation_time_axis.cc:318
-#: automation_time_axis.cc:501 editor.cc:1933 editor.cc:2010
-#: editor_actions.cc:118 editor_actions.cc:1865 gain_meter.cc:198
-#: generic_pluginui.cc:459 generic_pluginui.cc:748 midi_time_axis.cc:1488
-#: midi_time_axis.cc:1491 midi_time_axis.cc:1494 panner_ui.cc:153
+#: automation_time_axis.cc:501 editor.cc:1934 editor.cc:2011
+#: editor_actions.cc:118 editor_actions.cc:1865 gain_meter.cc:197
+#: generic_pluginui.cc:457 generic_pluginui.cc:746 midi_time_axis.cc:1488
+#: midi_time_axis.cc:1491 midi_time_axis.cc:1494 panner_ui.cc:152
msgid "Play"
msgstr "Wiedergabe"
#: automation_time_axis.cc:259 automation_time_axis.cc:329
-#: automation_time_axis.cc:506 gain_meter.cc:201 generic_pluginui.cc:462
-#: generic_pluginui.cc:750 panner_ui.cc:156
+#: automation_time_axis.cc:506 gain_meter.cc:200 generic_pluginui.cc:460
+#: generic_pluginui.cc:748 panner_ui.cc:155
msgid "Write"
msgstr "Schreiben"
#: automation_time_axis.cc:261 automation_time_axis.cc:340
-#: automation_time_axis.cc:511 gain_meter.cc:204 generic_pluginui.cc:465
-#: generic_pluginui.cc:752 panner_ui.cc:159
+#: automation_time_axis.cc:511 gain_meter.cc:203 generic_pluginui.cc:463
+#: generic_pluginui.cc:750 panner_ui.cc:158
msgid "Touch"
msgstr "Ändern"
-#: automation_time_axis.cc:351 generic_pluginui.cc:468 meter_patterns.cc:108
+#: automation_time_axis.cc:351 generic_pluginui.cc:466 meter_patterns.cc:108
msgid "???"
msgstr "???"
@@ -2233,8 +2207,8 @@ msgstr "Automationssmodus"
msgid "Discrete"
msgstr "Diskret"
-#: automation_time_axis.cc:537 editor.cc:1457 editor.cc:1464 editor.cc:1520
-#: editor.cc:1526 export_format_dialog.cc:476
+#: automation_time_axis.cc:537 editor.cc:1458 editor.cc:1465 editor.cc:1521
+#: editor.cc:1527 export_format_dialog.cc:476
msgid "Linear"
msgstr "Linear"
@@ -2265,13 +2239,13 @@ msgstr "Eingang"
msgid "Output"
msgstr "Ausgang"
-#: bundle_manager.cc:264 editor.cc:1974 editor_actions.cc:90
+#: bundle_manager.cc:264 editor.cc:1975 editor_actions.cc:90
#: editor_actions.cc:100
msgid "Edit"
msgstr "Bearbeiten"
-#: bundle_manager.cc:265 editor.cc:5493 editor_actions.cc:310
-#: editor_actions.cc:368 plugin_ui.cc:419 processor_box.cc:2229
+#: bundle_manager.cc:265 editor.cc:5494 editor_actions.cc:310
+#: editor_actions.cc:368 plugin_ui.cc:417 processor_box.cc:2229
#: route_time_axis.cc:713
msgid "Delete"
msgstr "Löschen"
@@ -2448,164 +2422,164 @@ msgstr "Länge"
msgid "edit note"
msgstr "Note bearbeiten"
-#: editor.cc:137 editor.cc:3429
+#: editor.cc:137 editor.cc:3430
msgid "CD Frames"
msgstr "CD-Frames"
-#: editor.cc:138 editor.cc:3431
+#: editor.cc:138 editor.cc:3432
msgid "Timecode Frames"
msgstr "Timecode-Frames"
-#: editor.cc:139 editor.cc:3433
+#: editor.cc:139 editor.cc:3434
msgid "Timecode Seconds"
msgstr "Timecode-Sekunden"
-#: editor.cc:140 editor.cc:3435
+#: editor.cc:140 editor.cc:3436
msgid "Timecode Minutes"
msgstr "Timecode-Minuten"
-#: editor.cc:141 editor.cc:3437
+#: editor.cc:141 editor.cc:3438
msgid "Seconds"
msgstr "Sekunden"
-#: editor.cc:142 editor.cc:3439
+#: editor.cc:142 editor.cc:3440
msgid "Minutes"
msgstr "Minuten"
-#: editor.cc:143 editor.cc:3413 quantize_dialog.cc:37 quantize_dialog.cc:141
+#: editor.cc:143 editor.cc:3414 quantize_dialog.cc:37 quantize_dialog.cc:141
msgid "Beats/128"
msgstr "Schläge/128"
-#: editor.cc:144 editor.cc:3411 quantize_dialog.cc:38 quantize_dialog.cc:143
+#: editor.cc:144 editor.cc:3412 quantize_dialog.cc:38 quantize_dialog.cc:143
msgid "Beats/64"
msgstr "Schläge/64"
-#: editor.cc:145 editor.cc:3409 quantize_dialog.cc:39 quantize_dialog.cc:145
+#: editor.cc:145 editor.cc:3410 quantize_dialog.cc:39 quantize_dialog.cc:145
msgid "Beats/32"
msgstr "Schläge/32"
-#: editor.cc:146 editor.cc:3407
+#: editor.cc:146 editor.cc:3408
msgid "Beats/28"
msgstr "Schläge/28"
-#: editor.cc:147 editor.cc:3405
+#: editor.cc:147 editor.cc:3406
msgid "Beats/24"
msgstr "Schläge/24"
-#: editor.cc:148 editor.cc:3403
+#: editor.cc:148 editor.cc:3404
msgid "Beats/20"
msgstr "Schläge/20"
-#: editor.cc:149 editor.cc:3401 quantize_dialog.cc:40 quantize_dialog.cc:147
+#: editor.cc:149 editor.cc:3402 quantize_dialog.cc:40 quantize_dialog.cc:147
msgid "Beats/16"
msgstr "Schläge/16"
-#: editor.cc:150 editor.cc:3399
+#: editor.cc:150 editor.cc:3400
msgid "Beats/14"
msgstr "Schläge/14"
-#: editor.cc:151 editor.cc:3397
+#: editor.cc:151 editor.cc:3398
msgid "Beats/12"
msgstr "Schläge/12"
-#: editor.cc:152 editor.cc:3395
+#: editor.cc:152 editor.cc:3396
msgid "Beats/10"
msgstr "Schläge/10"
-#: editor.cc:153 editor.cc:3393 quantize_dialog.cc:41 quantize_dialog.cc:149
+#: editor.cc:153 editor.cc:3394 quantize_dialog.cc:41 quantize_dialog.cc:149
msgid "Beats/8"
msgstr "Schläge/8"
-#: editor.cc:154 editor.cc:3391
+#: editor.cc:154 editor.cc:3392
msgid "Beats/7"
msgstr "Schläge/7"
-#: editor.cc:155 editor.cc:3389
+#: editor.cc:155 editor.cc:3390
msgid "Beats/6"
msgstr "Schläge/6"
-#: editor.cc:156 editor.cc:3387
+#: editor.cc:156 editor.cc:3388
msgid "Beats/5"
msgstr "Schläge/5"
-#: editor.cc:157 editor.cc:3385 quantize_dialog.cc:42 quantize_dialog.cc:151
+#: editor.cc:157 editor.cc:3386 quantize_dialog.cc:42 quantize_dialog.cc:151
msgid "Beats/4"
msgstr "Schläge/4"
-#: editor.cc:158 editor.cc:3383 quantize_dialog.cc:43 quantize_dialog.cc:153
+#: editor.cc:158 editor.cc:3384 quantize_dialog.cc:43 quantize_dialog.cc:153
msgid "Beats/3"
msgstr "Schläge/3"
-#: editor.cc:159 editor.cc:3381 quantize_dialog.cc:44 quantize_dialog.cc:155
+#: editor.cc:159 editor.cc:3382 quantize_dialog.cc:44 quantize_dialog.cc:155
msgid "Beats/2"
msgstr "Schläge/2"
-#: editor.cc:160 editor.cc:3415 quantize_dialog.cc:45 quantize_dialog.cc:157
+#: editor.cc:160 editor.cc:3416 quantize_dialog.cc:45 quantize_dialog.cc:157
msgid "Beats"
msgstr "Schläge"
-#: editor.cc:161 editor.cc:3417
+#: editor.cc:161 editor.cc:3418
msgid "Bars"
msgstr "Takte"
-#: editor.cc:162 editor.cc:3419
+#: editor.cc:162 editor.cc:3420
msgid "Marks"
msgstr "Marker"
-#: editor.cc:163 editor.cc:3421
+#: editor.cc:163 editor.cc:3422
msgid "Region starts"
msgstr "Regionen-Anfang"
-#: editor.cc:164 editor.cc:3423
+#: editor.cc:164 editor.cc:3424
msgid "Region ends"
msgstr "Regionen-Ende"
-#: editor.cc:165 editor.cc:3427
+#: editor.cc:165 editor.cc:3428
msgid "Region syncs"
msgstr "Regionen-Sync"
-#: editor.cc:166 editor.cc:3425
+#: editor.cc:166 editor.cc:3426
msgid "Region bounds"
msgstr "Regionengrenzen"
-#: editor.cc:171 editor.cc:3455 editor_actions.cc:485
+#: editor.cc:171 editor.cc:3456 editor_actions.cc:485
msgid "No Grid"
msgstr "Raster aus"
-#: editor.cc:172 editor.cc:3457 editor_actions.cc:486
+#: editor.cc:172 editor.cc:3458 editor_actions.cc:486
msgid "Grid"
msgstr "Einrasten"
-#: editor.cc:173 editor.cc:3459 editor_actions.cc:487
+#: editor.cc:173 editor.cc:3460 editor_actions.cc:487
msgid "Magnetic"
msgstr "Magnetisch"
-#: editor.cc:178 editor.cc:188 editor.cc:3498 editor.cc:3523
+#: editor.cc:178 editor.cc:188 editor.cc:3499 editor.cc:3524
#: editor_actions.cc:117 editor_actions.cc:468
msgid "Playhead"
msgstr "Positionszeiger"
-#: editor.cc:179 editor.cc:3496 editor_actions.cc:470
+#: editor.cc:179 editor.cc:3497 editor_actions.cc:470
msgid "Marker"
msgstr "Marker"
-#: editor.cc:180 editor.cc:189 editor.cc:3525 editor_actions.cc:469
+#: editor.cc:180 editor.cc:189 editor.cc:3526 editor_actions.cc:469
msgid "Mouse"
msgstr "Maus"
-#: editor.cc:185 editor.cc:3517 mono_panner_editor.cc:42
+#: editor.cc:185 editor.cc:3518 mono_panner_editor.cc:42
msgid "Left"
msgstr "Links"
-#: editor.cc:186 editor.cc:3519 mono_panner_editor.cc:47
+#: editor.cc:186 editor.cc:3520 mono_panner_editor.cc:47
msgid "Right"
msgstr "Rechts"
-#: editor.cc:187 editor.cc:3521
+#: editor.cc:187 editor.cc:3522
msgid "Center"
msgstr "Mitte"
-#: editor.cc:190 editor.cc:3090 editor.cc:3527
+#: editor.cc:190 editor.cc:3091 editor.cc:3528
msgid "Edit point"
msgstr "Arbeitspunkt"
@@ -2665,337 +2639,337 @@ msgstr "Video Zeitleiste"
msgid "mode"
msgstr "Modus"
-#: editor.cc:542
+#: editor.cc:541
msgid "Regions"
msgstr "Regionen"
-#: editor.cc:543
+#: editor.cc:542
msgid "Tracks & Busses"
msgstr "Spuren & Busse"
-#: editor.cc:544
+#: editor.cc:543
msgid "Snapshots"
msgstr "Schnappschüsse"
-#: editor.cc:545
+#: editor.cc:544
msgid "Track & Bus Groups"
msgstr "Spuren & Bus-Gruppen"
-#: editor.cc:546
+#: editor.cc:545
msgid "Ranges & Marks"
msgstr "Bereiche & Marker"
-#: editor.cc:690 editor.cc:5345 rc_option_editor.cc:1294
-#: rc_option_editor.cc:1302 rc_option_editor.cc:1310 rc_option_editor.cc:1318
-#: rc_option_editor.cc:1335 rc_option_editor.cc:1337 rc_option_editor.cc:1345
-#: rc_option_editor.cc:1353 rc_option_editor.cc:1373 rc_option_editor.cc:1385
-#: rc_option_editor.cc:1387 rc_option_editor.cc:1395 rc_option_editor.cc:1403
-#: rc_option_editor.cc:1411 rc_option_editor.cc:1419 rc_option_editor.cc:1427
-#: rc_option_editor.cc:1442 rc_option_editor.cc:1446
+#: editor.cc:690 editor.cc:5346 rc_option_editor.cc:1292
+#: rc_option_editor.cc:1300 rc_option_editor.cc:1308 rc_option_editor.cc:1316
+#: rc_option_editor.cc:1333 rc_option_editor.cc:1335 rc_option_editor.cc:1343
+#: rc_option_editor.cc:1351 rc_option_editor.cc:1371 rc_option_editor.cc:1383
+#: rc_option_editor.cc:1385 rc_option_editor.cc:1393 rc_option_editor.cc:1401
+#: rc_option_editor.cc:1409 rc_option_editor.cc:1417 rc_option_editor.cc:1425
+#: rc_option_editor.cc:1440 rc_option_editor.cc:1444
msgid "Editor"
msgstr "Editor"
-#: editor.cc:1215 editor.cc:1225 editor.cc:4440 editor_actions.cc:130
+#: editor.cc:1215 editor.cc:1225 editor.cc:4441 editor_actions.cc:130
#: editor_actions.cc:1813
msgid "Loop"
msgstr "Schleife"
-#: editor.cc:1231 editor.cc:1241 editor.cc:4467 editor_actions.cc:131
+#: editor.cc:1231 editor.cc:1241 editor.cc:4468 editor_actions.cc:131
#: time_info_box.cc:67
msgid "Punch"
msgstr "Punch"
-#: editor.cc:1352
+#: editor.cc:1353
msgid "Linear (for highly correlated material)"
msgstr "Linear (für stark korreliertes Material)"
-#: editor.cc:1362 editor.cc:1499 editor.cc:1561
+#: editor.cc:1363 editor.cc:1500 editor.cc:1562
msgid "Constant power"
msgstr "Konstante Energie"
-#: editor.cc:1371 editor.cc:1492 editor.cc:1554
+#: editor.cc:1372 editor.cc:1493 editor.cc:1555
msgid "Symmetric"
msgstr "Symmetrisch"
-#: editor.cc:1381 editor.cc:1474 editor.cc:1536
+#: editor.cc:1382 editor.cc:1475 editor.cc:1537
msgid "Slow"
msgstr "Langsam"
-#: editor.cc:1390 editor.cc:1483 editor.cc:1545 sfdb_ui.cc:1627
+#: editor.cc:1391 editor.cc:1484 editor.cc:1546 sfdb_ui.cc:1627
#: sfdb_ui.cc:1736
msgid "Fast"
msgstr "Schnell"
-#: editor.cc:1437
+#: editor.cc:1438
msgid "programming error: fade in canvas item has no regionview data pointer!"
msgstr "Programmierfehler: fade in canvas item has no regionview data pointer!"
-#: editor.cc:1448 editor.cc:1512
+#: editor.cc:1449 editor.cc:1513
msgid "Deactivate"
msgstr "Deaktivieren"
-#: editor.cc:1450 editor.cc:1514
+#: editor.cc:1451 editor.cc:1515
msgid "Activate"
msgstr "Aktivieren"
-#: editor.cc:1458 editor.cc:1521
+#: editor.cc:1459 editor.cc:1522
msgid "Slowest"
msgstr "Sehr langsam"
-#: editor.cc:1572 route_time_axis.cc:1877 selection.cc:1009 selection.cc:1064
+#: editor.cc:1573 route_time_axis.cc:1877 selection.cc:1009 selection.cc:1064
msgid "programming error: "
msgstr "Programmierfehler:"
-#: editor.cc:1673 editor.cc:1681 editor_ops.cc:3522
+#: editor.cc:1674 editor.cc:1682 editor_ops.cc:3522
msgid "Freeze"
msgstr "Einfrieren"
-#: editor.cc:1677
+#: editor.cc:1678
msgid "Unfreeze"
msgstr "Auftauen"
-#: editor.cc:1816
+#: editor.cc:1817
msgid "Selected Regions"
msgstr "Ausgewählte Regionen"
-#: editor.cc:1852 editor_markers.cc:895
+#: editor.cc:1853 editor_markers.cc:895
msgid "Play Range"
msgstr "Bereich wiedergeben"
-#: editor.cc:1853 editor_markers.cc:898
+#: editor.cc:1854 editor_markers.cc:898
msgid "Loop Range"
msgstr "Bereich in Schleife wiedergeben"
-#: editor.cc:1862 editor_actions.cc:332
+#: editor.cc:1863 editor_actions.cc:332
msgid "Move Range Start to Previous Region Boundary"
msgstr "Anfang des Bereiches zur vorherigen Regiongrenze verschieben"
-#: editor.cc:1869 editor_actions.cc:339
+#: editor.cc:1870 editor_actions.cc:339
msgid "Move Range Start to Next Region Boundary"
msgstr "Anfang des Bereiches zur nächsten Regiongrenze verschieben"
-#: editor.cc:1876 editor_actions.cc:346
+#: editor.cc:1877 editor_actions.cc:346
msgid "Move Range End to Previous Region Boundary"
msgstr "Ende des Bereiches zur vorherigen Regiongrenze verschieben"
-#: editor.cc:1883 editor_actions.cc:353
+#: editor.cc:1884 editor_actions.cc:353
msgid "Move Range End to Next Region Boundary"
msgstr "Ende des Bereiches zur nächsten Regiongrenze verschieben"
-#: editor.cc:1889
+#: editor.cc:1890
msgid "Convert to Region In-Place"
msgstr "In Region umwanden (direkt)"
-#: editor.cc:1890
+#: editor.cc:1891
msgid "Convert to Region in Region List"
msgstr "In Region umwanden (in Regionenliste hinzufügen)"
-#: editor.cc:1893 editor_markers.cc:925
+#: editor.cc:1894 editor_markers.cc:925
msgid "Select All in Range"
msgstr "Alles im Bereich auswählen"
-#: editor.cc:1896
+#: editor.cc:1897
msgid "Set Loop from Range"
msgstr "Schleife aus Bereich erstellen"
-#: editor.cc:1897
+#: editor.cc:1898
msgid "Set Punch from Range"
msgstr "Punch aus Bereich erstellen"
-#: editor.cc:1900
+#: editor.cc:1901
msgid "Add Range Markers"
msgstr "Bereichsmarker einfügen"
-#: editor.cc:1903
+#: editor.cc:1904
msgid "Crop Region to Range"
msgstr "Region auf Bereich kürzen"
-#: editor.cc:1904
+#: editor.cc:1905
msgid "Fill Range with Region"
msgstr "Bereich mit Region füllen"
-#: editor.cc:1905 editor_actions.cc:289
+#: editor.cc:1906 editor_actions.cc:289
msgid "Duplicate Range"
msgstr "Bereich duplizieren"
-#: editor.cc:1908
+#: editor.cc:1909
msgid "Consolidate Range"
msgstr "Bereich als neue Region pre-Mixer"
-#: editor.cc:1909
+#: editor.cc:1910
msgid "Consolidate Range With Processing"
msgstr "Bereich als neue Region post-mixer"
-#: editor.cc:1910
+#: editor.cc:1911
msgid "Bounce Range to Region List"
msgstr "Auswahl zur Regionenliste bouncen"
-#: editor.cc:1911
+#: editor.cc:1912
msgid "Bounce Range to Region List With Processing"
msgstr "Auswahl zur Regionenliste bouncen (Post-Fader)"
-#: editor.cc:1912 editor_markers.cc:908
+#: editor.cc:1913 editor_markers.cc:908
msgid "Export Range..."
msgstr "Bereich exportieren..."
-#: editor.cc:1927 editor.cc:2008 editor_actions.cc:281
+#: editor.cc:1928 editor.cc:2009 editor_actions.cc:281
msgid "Play From Edit Point"
msgstr "Wiedergabe ab Arbeitspunkt"
-#: editor.cc:1928 editor.cc:2009
+#: editor.cc:1929 editor.cc:2010
msgid "Play From Start"
msgstr "Wiedergabe ab Anfang"
-#: editor.cc:1929
+#: editor.cc:1930
msgid "Play Region"
msgstr "Region wiedergeben"
-#: editor.cc:1931
+#: editor.cc:1932
msgid "Loop Region"
msgstr "Region in Schleife wiedergeben"
-#: editor.cc:1941 editor.cc:2018
+#: editor.cc:1942 editor.cc:2019
msgid "Select All in Track"
msgstr "Alles in der Spur auswählen"
-#: editor.cc:1942 editor.cc:2019 editor_actions.cc:185
+#: editor.cc:1943 editor.cc:2020 editor_actions.cc:185
#: export_timespan_selector.cc:53 processor_box.cc:2237
msgid "Select All"
msgstr "Alles auswählen"
-#: editor.cc:1943 editor.cc:2020
+#: editor.cc:1944 editor.cc:2021
msgid "Invert Selection in Track"
msgstr "Auswahl in der Spur umkehren"
-#: editor.cc:1944 editor.cc:2021 editor_actions.cc:187
+#: editor.cc:1945 editor.cc:2022 editor_actions.cc:187
msgid "Invert Selection"
msgstr "Auswahl umkehren"
-#: editor.cc:1946
+#: editor.cc:1947
msgid "Set Range to Loop Range"
msgstr "Bereich als Schleife auswählen"
-#: editor.cc:1947
+#: editor.cc:1948
msgid "Set Range to Punch Range"
msgstr "Bereich als Punchbereich"
-#: editor.cc:1949 editor.cc:2023 editor_actions.cc:188
+#: editor.cc:1950 editor.cc:2024 editor_actions.cc:188
msgid "Select All After Edit Point"
msgstr "Alle Regionen nach dem Arbeitspunkt auswählen"
-#: editor.cc:1950 editor.cc:2024 editor_actions.cc:189
+#: editor.cc:1951 editor.cc:2025 editor_actions.cc:189
msgid "Select All Before Edit Point"
msgstr "Alle Regionen vor dem Arbeitspunkt auswählen"
-#: editor.cc:1951 editor.cc:2025
+#: editor.cc:1952 editor.cc:2026
msgid "Select All After Playhead"
msgstr "Alle Regionen nach dem Positionszeiger auswählen"
-#: editor.cc:1952 editor.cc:2026
+#: editor.cc:1953 editor.cc:2027
msgid "Select All Before Playhead"
msgstr "Alle Regionen vor dem Positionszeiger auswählen"
-#: editor.cc:1953
+#: editor.cc:1954
msgid "Select All Between Playhead and Edit Point"
msgstr "Alle zwischen Positionszeiger und Arbeitspunkt auswählen"
-#: editor.cc:1954
+#: editor.cc:1955
msgid "Select All Within Playhead and Edit Point"
msgstr "Alles zwischen Positionszeiger und Arbeitspunkt auswählen"
-#: editor.cc:1955
+#: editor.cc:1956
msgid "Select Range Between Playhead and Edit Point"
msgstr "Wähle Bereich zwischen Positionszeiger und Arbeitspunkt aus"
-#: editor.cc:1957 editor.cc:2028 editor_actions.cc:127 editor_actions.cc:128
+#: editor.cc:1958 editor.cc:2029 editor_actions.cc:127 editor_actions.cc:128
msgid "Select"
msgstr "Auswahl"
-#: editor.cc:1965 editor.cc:2036 editor_actions.cc:309 processor_box.cc:2222
+#: editor.cc:1966 editor.cc:2037 editor_actions.cc:309 processor_box.cc:2222
msgid "Cut"
msgstr "Ausschneiden"
-#: editor.cc:1966 editor.cc:2037 editor_actions.cc:312 processor_box.cc:2225
+#: editor.cc:1967 editor.cc:2038 editor_actions.cc:312 processor_box.cc:2225
msgid "Copy"
msgstr "Kopieren"
-#: editor.cc:1967 editor.cc:2038 editor_actions.cc:313 processor_box.cc:2233
+#: editor.cc:1968 editor.cc:2039 editor_actions.cc:313 processor_box.cc:2233
msgid "Paste"
msgstr "Einfügen"
-#: editor.cc:1971 editor_actions.cc:87
+#: editor.cc:1972 editor_actions.cc:87
msgid "Align"
msgstr "Ausrichten"
-#: editor.cc:1972
+#: editor.cc:1973
msgid "Align Relative"
msgstr "Relativ ausrichten"
-#: editor.cc:1979
+#: editor.cc:1980
msgid "Insert Selected Region"
msgstr "Ausgewählte Region einfügen"
-#: editor.cc:1980
+#: editor.cc:1981
msgid "Insert Existing Media"
msgstr "Vorhandenes Material importieren"
-#: editor.cc:1989 editor.cc:2045
+#: editor.cc:1990 editor.cc:2046
msgid "Nudge Entire Track Later"
msgstr "Gesamte Spur schrittweise nach hinten"
-#: editor.cc:1990 editor.cc:2046
+#: editor.cc:1991 editor.cc:2047
msgid "Nudge Track After Edit Point Later"
msgstr "Spur nach Arbeitspunkt schrittweise nach hinten"
-#: editor.cc:1991 editor.cc:2047
+#: editor.cc:1992 editor.cc:2048
msgid "Nudge Entire Track Earlier"
msgstr "Gesamte Spur schrittweise nach vorne"
-#: editor.cc:1992 editor.cc:2048
+#: editor.cc:1993 editor.cc:2049
msgid "Nudge Track After Edit Point Earlier"
msgstr "Spur nach Arbeitspunkt schrittweise nach vorne"
-#: editor.cc:1994 editor.cc:2050
+#: editor.cc:1995 editor.cc:2051
msgid "Nudge"
msgstr "Verschieben"
-#: editor.cc:3070
+#: editor.cc:3071
msgid "Smart Mode (add Range functions to Object mode)"
msgstr "Smart-Modus (zusätzliche Bereichsfunktionen m Objekt-Modus)"
-#: editor.cc:3071
+#: editor.cc:3072
msgid "Object Mode (select/move Objects)"
msgstr "Objekt-Modus (Objekte auswählen/verschieben)"
-#: editor.cc:3072
+#: editor.cc:3073
msgid "Range Mode (select/move Ranges)"
msgstr "Bereichs-Modus (Bereiche auswählen/verschieben)"
-#: editor.cc:3073
+#: editor.cc:3074
msgid "Draw/Edit MIDI Notes"
msgstr "MIDI Noten eingeben/editieren"
-#: editor.cc:3074
+#: editor.cc:3075
msgid "Draw Region Gain"
msgstr "Lautstärkeautomation zeichnen"
-#: editor.cc:3075
+#: editor.cc:3076
msgid "Select Zoom Range"
msgstr "Zoombereich auswählen"
-#: editor.cc:3076
+#: editor.cc:3077
msgid "Stretch/Shrink Regions and MIDI Notes"
msgstr "Regionen und MIDI-Noten strecken/stauchen (Time-Stretch)"
-#: editor.cc:3077
+#: editor.cc:3078
msgid "Listen to Specific Regions"
msgstr "Ausgewählte Regionen vorhören"
-#: editor.cc:3078
+#: editor.cc:3079
msgid "Note Level Editing"
msgstr "Auf Notenebene bearbeiten"
-#: editor.cc:3079
+#: editor.cc:3080
msgid ""
"Groups: click to (de)activate\n"
"Context-click for other operations"
@@ -3003,51 +2977,51 @@ msgstr ""
"Gruppen: Klicken zum (De)aktivieren\n"
"Rechtsklick für Optionen"
-#: editor.cc:3080
+#: editor.cc:3081
msgid "Nudge Region/Selection Later"
msgstr "Region/Auswahl schrittweise nach hinten"
-#: editor.cc:3081
+#: editor.cc:3082
msgid "Nudge Region/Selection Earlier"
msgstr "Region/Auswahl schrittweise nach vorne"
-#: editor.cc:3082 editor_actions.cc:242
+#: editor.cc:3083 editor_actions.cc:242
msgid "Zoom In"
msgstr "Vergrößern"
-#: editor.cc:3083 editor_actions.cc:241
+#: editor.cc:3084 editor_actions.cc:241
msgid "Zoom Out"
msgstr "Verkleinern"
-#: editor.cc:3084 editor_actions.cc:243
+#: editor.cc:3085 editor_actions.cc:243
msgid "Zoom to Session"
msgstr "Auf ganzes Projekt zoomen"
-#: editor.cc:3085
+#: editor.cc:3086
msgid "Zoom focus"
msgstr "Zoom-Mittelpunkt"
-#: editor.cc:3086
+#: editor.cc:3087
msgid "Expand Tracks"
msgstr "Spuren vergrößern"
-#: editor.cc:3087
+#: editor.cc:3088
msgid "Shrink Tracks"
msgstr "Spuren verkleinern"
-#: editor.cc:3088
+#: editor.cc:3089
msgid "Snap/Grid Units"
msgstr "Rastereinheiten"
-#: editor.cc:3089
+#: editor.cc:3090
msgid "Snap/Grid Mode"
msgstr "Einrastmodus"
-#: editor.cc:3091
+#: editor.cc:3092
msgid "Edit Mode"
msgstr "Bearbeitungsmodus"
-#: editor.cc:3092
+#: editor.cc:3093
msgid ""
"Nudge Clock\n"
"(controls distance used to nudge regions and selections)"
@@ -3056,39 +3030,39 @@ msgstr ""
"(bestimmt den Abstand für das schrittweise Verschieben von Regionen und "
"Bereichen)"
-#: editor.cc:3194
+#: editor.cc:3195
msgid "malformed URL passed to drag-n-drop code"
msgstr "Ungültige URL an drag-n-drop-Code weitergeleitet"
-#: editor.cc:3256 editor_actions.cc:291
+#: editor.cc:3257 editor_actions.cc:291
msgid "Command|Undo"
msgstr "Rückgängig"
-#: editor.cc:3258
+#: editor.cc:3259
msgid "Command|Undo (%1)"
msgstr "Rückgängig (%1)"
-#: editor.cc:3265 editor_actions.cc:292
+#: editor.cc:3266 editor_actions.cc:292
msgid "Redo"
msgstr "Wiederherstellen"
-#: editor.cc:3267
+#: editor.cc:3268
msgid "Redo (%1)"
msgstr "Wiederherstellen (%1)"
-#: editor.cc:3286 editor.cc:3310 editor_actions.cc:106 editor_actions.cc:1794
+#: editor.cc:3287 editor.cc:3311 editor_actions.cc:106 editor_actions.cc:1794
msgid "Duplicate"
msgstr "Duplizieren"
-#: editor.cc:3287
+#: editor.cc:3288
msgid "Number of duplications:"
msgstr "Anzahl der Duplikate:"
-#: editor.cc:3864
+#: editor.cc:3865
msgid "Playlist Deletion"
msgstr "Löschen von Wiedergabelisten"
-#: editor.cc:3865
+#: editor.cc:3866
msgid ""
"Playlist %1 is currently unused.\n"
"If it is kept, its audio files will not be cleaned.\n"
@@ -3100,36 +3074,36 @@ msgstr ""
"Falls sie gelöscht wird, werden die ausschließlich von ihr verwendeten "
"Audiodateien gelöscht."
-#: editor.cc:3875
+#: editor.cc:3876
msgid "Delete Playlist"
msgstr "Wiedergabeliste löschen"
-#: editor.cc:3876
+#: editor.cc:3877
msgid "Keep Playlist"
msgstr "Wiedergabeliste behalten"
-#: editor.cc:3877 editor_audio_import.cc:581 editor_ops.cc:5856
+#: editor.cc:3878 editor_audio_import.cc:581 editor_ops.cc:5856
#: sfdb_freesound_mootcher.cc:69 processor_box.cc:2003 processor_box.cc:2028
msgid "Cancel"
msgstr "Abbrechen"
-#: editor.cc:4021
+#: editor.cc:4022
msgid "new playlists"
msgstr "Neue Wiedergabelisten"
-#: editor.cc:4037
+#: editor.cc:4038
msgid "copy playlists"
msgstr "Wiedergabelisten kopieren"
-#: editor.cc:4052
+#: editor.cc:4053
msgid "clear playlists"
msgstr "Wiedergabelisten zurücksetzen"
-#: editor.cc:4687
+#: editor.cc:4688
msgid "Please wait while %1 loads visual data."
msgstr "Bitte warten Sie, während %1 die Daten zur Anzeige des Projekts lädt."
-#: editor.cc:5492 editor_markers.cc:940 panner_ui.cc:393 processor_box.cc:2253
+#: editor.cc:5493 editor_markers.cc:940 panner_ui.cc:392 processor_box.cc:2253
msgid "Edit..."
msgstr "Bearbeiten..."
@@ -3178,8 +3152,8 @@ msgstr "Layering"
msgid "Position"
msgstr "Position"
-#: editor_actions.cc:101 gain_meter.cc:121 gain_meter.cc:791 panner_ui.cc:177
-#: panner_ui.cc:586
+#: editor_actions.cc:101 gain_meter.cc:120 gain_meter.cc:794 panner_ui.cc:176
+#: panner_ui.cc:585
msgid "Trim"
msgstr "Anpassen"
@@ -3229,7 +3203,7 @@ msgstr "MIDI Optionen"
msgid "Misc Options"
msgstr "Sonstiges"
-#: editor_actions.cc:115 rc_option_editor.cc:1460 route_group_dialog.cc:48
+#: editor_actions.cc:115 rc_option_editor.cc:1458 route_group_dialog.cc:48
#: session_option_editor.cc:218 session_option_editor.cc:225
msgid "Monitoring"
msgstr "Monitoring"
@@ -3637,11 +3611,11 @@ msgstr "Log"
#: editor_actions.cc:320
msgid "Move Later to Transient"
-msgstr "Zum nächsten Transienten"
+msgstr "Zum nächsten Transienten bewegen"
#: editor_actions.cc:321
msgid "Move Earlier to Transient"
-msgstr "Zum vorigen Transienten"
+msgstr "Zum vorigen Transienten bewegen"
#: editor_actions.cc:325
msgid "Start Range"
@@ -3966,7 +3940,7 @@ msgstr "Min:Sek"
msgid "Video Monitor"
msgstr "Videomonitor"
-#: editor_actions.cc:549 rc_option_editor.cc:1842
+#: editor_actions.cc:549 rc_option_editor.cc:1838
msgid "Video"
msgstr "Video"
@@ -4485,31 +4459,31 @@ msgstr "Tempomarker kopieren"
msgid "move tempo mark"
msgstr "Tempowechsel bewegen"
-#: editor_drag.cc:2545
+#: editor_drag.cc:2550
msgid "change fade in length"
msgstr "Ändere Fade-In Länge"
-#: editor_drag.cc:2663
+#: editor_drag.cc:2668
msgid "change fade out length"
msgstr "Fade-Out verändern"
-#: editor_drag.cc:3018
+#: editor_drag.cc:3023
msgid "move marker"
msgstr "Marker bewegen"
-#: editor_drag.cc:3581
+#: editor_drag.cc:3586
msgid "An error occurred while executing time stretch operation"
msgstr "Beim Ausführen der Timestretch-Operation trat ein Fehler auf"
-#: editor_drag.cc:4011
+#: editor_drag.cc:4016
msgid "programming_error: %1"
msgstr "Programmierfehler: %1"
-#: editor_drag.cc:4081 editor_markers.cc:680
+#: editor_drag.cc:4086 editor_markers.cc:680
msgid "new range marker"
msgstr "Neuer Bereich"
-#: editor_drag.cc:4762
+#: editor_drag.cc:4767
msgid "rubberband selection"
msgstr "Gummiband-Auswahl"
@@ -5206,7 +5180,7 @@ msgstr "Übermäßige Aufteilung?"
#: editor_ops.cc:6125
msgid "place transient"
-msgstr "Transienten Platzieren"
+msgstr "Transienten platzieren"
#: editor_ops.cc:6160
msgid "snap regions to grid"
@@ -5401,8 +5375,8 @@ msgstr "G"
msgid "Region position glued to Bars|Beats time?"
msgstr "Regionenposition an Takt und Schäge gebunden?"
-#: editor_regions.cc:120 editor_routes.cc:207 gain_meter.cc:759
-#: mixer_strip.cc:1931 meter_strip.cc:320 panner_ui.cc:554
+#: editor_regions.cc:120 editor_routes.cc:207 gain_meter.cc:762
+#: mixer_strip.cc:1931 meter_strip.cc:320 panner_ui.cc:553
#: stereo_panner.cc:237
msgid "M"
msgstr "M"
@@ -5447,8 +5421,7 @@ msgstr "Ungenutzte Regionen entfernen"
msgid "Mult."
msgstr "Viele"
-#: editor_regions.cc:847 engine_dialog.cc:84 midi_list_editor.cc:103
-#: time_info_box.cc:91
+#: editor_regions.cc:847 midi_list_editor.cc:103 time_info_box.cc:91
msgid "Start"
msgstr "Start"
@@ -5514,7 +5487,7 @@ msgstr "Solo ein"
msgid "SI"
msgstr "SI"
-#: editor_routes.cc:209 mixer_strip.cc:353 rc_option_editor.cc:1880
+#: editor_routes.cc:209 mixer_strip.cc:353 rc_option_editor.cc:1876
msgid "Solo Isolated"
msgstr "Isoliertes Solo"
@@ -5733,264 +5706,196 @@ msgstr ""
"Time-Stretch konnte nicht gestartet werden - Fehler beim erstellen des "
"Threads"
-#: engine_dialog.cc:75
-msgid "Realtime"
-msgstr "Realtime"
+#: engine_dialog.cc:73
+msgid "Device Control Panel"
+msgstr "Gerätekontrollfeld"
-#: engine_dialog.cc:76
-msgid "Do not lock memory"
-msgstr "Speicherzugriff nicht sperren"
+#: engine_dialog.cc:74 engine_dialog.cc:1600
+msgid "Measure latency"
+msgstr "Latenz messen"
-#: engine_dialog.cc:77
-msgid "Unlock memory"
-msgstr "Speicherzugriff öffnen"
+#: engine_dialog.cc:75
+msgid "Use results"
+msgstr "Benutze Ergebnisse"
#: engine_dialog.cc:78
-msgid "No zombies"
-msgstr "Keine Zombies (Soft Mode)"
+msgid "Refresh list"
+msgstr "Liste auffrischen"
#: engine_dialog.cc:79
-msgid "Provide monitor ports"
-msgstr "Monitor-Ports erstellen"
-
-#: engine_dialog.cc:80
-msgid "Force 16 bit"
-msgstr "Erzwinge 16 Bit"
-
-#: engine_dialog.cc:81
-msgid "H/W monitoring"
-msgstr "Hardware Monitoring"
-
-#: engine_dialog.cc:82
-msgid "H/W metering"
-msgstr "Hardware-Pegelanzeige"
-
-#: engine_dialog.cc:83
-msgid "Verbose output"
-msgstr "Ausführliche Statusmeldungen"
+msgid "Start MIDI ALSA/JACK bridge"
+msgstr "Starte MIDI ALSA/JACK bridge"
-#: engine_dialog.cc:103
-msgid "8000Hz"
-msgstr "8000 Hz"
+#: engine_dialog.cc:121
+msgid "Latency Measurement Tool"
+msgstr "Latenzmeßwerkzeug"
-#: engine_dialog.cc:104
-msgid "22050Hz"
-msgstr "22050 Hz"
-
-#: engine_dialog.cc:105
-msgid "44100Hz"
-msgstr "44100 Hz"
-
-#: engine_dialog.cc:106
-msgid "48000Hz"
-msgstr "48000 Hz"
-
-#: engine_dialog.cc:107
-msgid "88200Hz"
-msgstr "88200 Hz"
-
-#: engine_dialog.cc:108
-msgid "96000Hz"
-msgstr "96000 Hz"
-
-#: engine_dialog.cc:109
-msgid "192000Hz"
-msgstr "192000 Hz"
-
-#: engine_dialog.cc:127 engine_dialog.cc:132 engine_dialog.cc:169
-#: engine_dialog.cc:562 midi_channel_selector.cc:163
-#: midi_channel_selector.cc:402 midi_channel_selector.cc:438
-#: rc_option_editor.cc:1250 sfdb_ui.cc:538
-msgid "None"
-msgstr "Kein"
-
-#: engine_dialog.cc:128 engine_dialog.cc:563
-msgid "Triangular"
-msgstr "dreieckig"
-
-#: engine_dialog.cc:129 engine_dialog.cc:565
-msgid "Rectangular"
-msgstr "rechteckig"
-
-#: engine_dialog.cc:130 engine_dialog.cc:567
-msgid "Shaped"
-msgstr "shaped"
+#: engine_dialog.cc:134
+msgid ""
+"<span weight=\"bold\">Turn down the volume on your hardware to a very low "
+"level.</span>"
+msgstr ""
+"<span weight=\"bold\">Stellen Sie Ihre Hardwarelautstärke auf einen sehr "
+"niedrigen "
+"Pegel ein.</span>"
-#: engine_dialog.cc:158 engine_dialog.cc:483 engine_dialog.cc:974
-msgid "Playback/recording on 1 device"
-msgstr "Wiedergabe/Aufnahme mit einem Gerät"
+#: engine_dialog.cc:142
+msgid ""
+"Select two channels below and connect them using a cable or (less ideally) a "
+"speaker and microphone."
+msgstr ""
+"Wählen Sie unten zwei Kanäle aus und verbinden sie mit einem Kabel oder "
+"(weniger empfehlenswert) mittels Lautsprecher und Mikrofon."
-#: engine_dialog.cc:159 engine_dialog.cc:487 engine_dialog.cc:540
-#: engine_dialog.cc:977
-msgid "Playback/recording on 2 devices"
-msgstr "Wiedergabe/Aufnahme mit zwei Geräten"
+#: engine_dialog.cc:147
+msgid "Output channel"
+msgstr "Ausgangskanal"
-#: engine_dialog.cc:160 engine_dialog.cc:503 engine_dialog.cc:980
-msgid "Playback only"
-msgstr "Nur Wiedergabe"
+#: engine_dialog.cc:155
+msgid "Input channel"
+msgstr "Eingangskanal"
-#: engine_dialog.cc:161 engine_dialog.cc:505 engine_dialog.cc:983
-msgid "Recording only"
-msgstr "Nur Aufnahme"
+#: engine_dialog.cc:174
+msgid "Once the channels are connected, click the \"Measure latency\" button."
+msgstr ""
+"Wenn die Kanäle verbunden sind, klicken Sie den Knopf \"Latenz messen\"."
-#: engine_dialog.cc:171 engine_dialog.cc:448
-msgid "coremidi"
-msgstr "coremidi"
+#: engine_dialog.cc:187
+msgid "When satisfied with the results, click the \"Use results\" button."
+msgstr ""
+"Wenn Sie mit dem Resultat zufrieden sind, klicken Sie den Knopf \"Benutze "
+"Ergebnisse\"."
-#: engine_dialog.cc:173 engine_dialog.cc:581
-msgid "seq"
-msgstr "seq"
+#: engine_dialog.cc:203 route_params_ui.cc:105
+msgid "Latency"
+msgstr "Latenz"
-#: engine_dialog.cc:174 engine_dialog.cc:583
-msgid "raw"
-msgstr "raw"
+#: engine_dialog.cc:298
+msgid "Audio System:"
+msgstr "Audiosystem:"
-#: engine_dialog.cc:181
+#: engine_dialog.cc:337
msgid "Driver:"
msgstr "Treiber:"
-#: engine_dialog.cc:186
-msgid "Audio Interface:"
-msgstr "Audio-Schnittstelle:"
+#: engine_dialog.cc:343
+msgid "Device:"
+msgstr "Gerät:"
-#: engine_dialog.cc:191 sfdb_ui.cc:147 sfdb_ui.cc:260 sfdb_ui.cc:265
+#: engine_dialog.cc:348 engine_dialog.cc:430 sfdb_ui.cc:147 sfdb_ui.cc:260
+#: sfdb_ui.cc:265
msgid "Sample rate:"
msgstr "Samplerate:"
-#: engine_dialog.cc:196
+#: engine_dialog.cc:354 engine_dialog.cc:437
msgid "Buffer size:"
msgstr "Puffergröße"
-#: engine_dialog.cc:202
-msgid "Number of buffers:"
-msgstr "Pufferanzahl:"
+#: engine_dialog.cc:367
+msgid "Input Channels:"
+msgstr "Eingangskanäle:"
-#: engine_dialog.cc:209
-msgid "Approximate latency:"
-msgstr "Latenz (ca.)"
+#: engine_dialog.cc:378
+msgid "Output Channels:"
+msgstr "Ausgangskanäle:"
-#: engine_dialog.cc:222
-msgid "Audio mode:"
-msgstr "Audio-Modus:"
+#: engine_dialog.cc:389
+msgid "Hardware input latency:"
+msgstr "Hardware Eingangslatenz (Samples)"
-#: engine_dialog.cc:284 engine_dialog.cc:408
-msgid "Ignore"
-msgstr "ignorieren"
+#: engine_dialog.cc:392 engine_dialog.cc:405
+msgid "samples"
+msgstr "Samples"
-#: engine_dialog.cc:292
-msgid "Client timeout"
-msgstr "Client Timeout"
+#: engine_dialog.cc:402
+msgid "Hardware output latency:"
+msgstr "Hardware Ausgangslatenz (Samples)"
-#: engine_dialog.cc:299
-msgid "Number of ports:"
-msgstr "Portanzahl"
+#: engine_dialog.cc:422
+msgid ""
+"The %1 audio backend was configured and started externally.\n"
+"This limits your control over it."
+msgstr ""
+"Das %1 Audiobackend wurde extern konfiguriert und gestartet.\n"
+"Dies beschränkt Ihre Kontrolle darüber."
-#: engine_dialog.cc:304
-msgid "MIDI driver:"
-msgstr "MIDI-Treiber:"
+#: engine_dialog.cc:531
+msgid "MIDI Inputs"
+msgstr "MIDI Eingänge"
-#: engine_dialog.cc:310
-msgid "Dither:"
-msgstr "Dithering:"
+#: engine_dialog.cc:548
+msgid "MIDI Outputs"
+msgstr "MIDI Ausgänge"
-#: engine_dialog.cc:319
-msgid ""
-"No JACK server found anywhere on this system. Please install JACK and restart"
-msgstr ""
-"Es wurde kein JACK Server auf diesem System gefunden. Bitte installieren Sie "
-"JACK vor einem Neuversuch."
+#: engine_dialog.cc:617
+msgid "all available channels"
+msgstr "alle verfügbaren Kanäle"
-#: engine_dialog.cc:327
-msgid "Server:"
-msgstr "Server:"
+#: engine_dialog.cc:811
+#, c-format
+msgid "%u samples"
+msgstr "%u Samples"
-#: engine_dialog.cc:339
-msgid "Input device:"
-msgstr "Eingangsgerät:"
+#: engine_dialog.cc:862
+#, c-format
+msgid "(%.1f msecs)"
+msgstr "(%.1f msecs)"
-#: engine_dialog.cc:343
-msgid "Output device:"
-msgstr "Ausgabegerät:"
+#: engine_dialog.cc:1281
+msgid "Cannot set driver to %1"
+msgstr "Kann Treiber nicht auf %1 setzen"
-#: engine_dialog.cc:348
-msgid "Hardware input latency:"
-msgstr "Hardware Eingangslatenz (Samples)"
+#: engine_dialog.cc:1285
+msgid "Cannot set device name to %1"
+msgstr "Kann Gerät nicht auf %1 setzen"
-#: engine_dialog.cc:351 engine_dialog.cc:357
-msgid "samples"
-msgstr "Samples"
+#: engine_dialog.cc:1289
+msgid "Cannot set sample rate to %1"
+msgstr "Kann Samplerate nicht auf %1 setzen"
-#: engine_dialog.cc:354
-msgid "Hardware output latency:"
-msgstr "Hardware Ausgangslatenz (Samples)"
+#: engine_dialog.cc:1293
+msgid "Cannot set buffer size to %1"
+msgstr "Kann Buffergröße nicht auf %1 setzen"
-#: engine_dialog.cc:368
-msgid "Device"
-msgstr "Gerät"
+#: engine_dialog.cc:1299
+msgid "Cannot set input channels to %1"
+msgstr "Kann Eingangskanäle nicht auf %1 setzen"
-#: engine_dialog.cc:370
-msgid "Advanced"
-msgstr "Erweitert"
+#: engine_dialog.cc:1303
+msgid "Cannot set output channels to %1"
+msgstr "Kann Ausgangskanäle nicht auf %1 setzen"
-#: engine_dialog.cc:653
-msgid "cannot open JACK rc file %1 to store parameters"
-msgstr "kann die JACK rc-Datei %1 nicht öffnen, um die Parameter zu sichern"
+#: engine_dialog.cc:1309
+msgid "Cannot set input latency to %1"
+msgstr "Kann Eingangslatenz nicht auf %1 setzen"
-#: engine_dialog.cc:787
-msgid ""
-"You do not have any audio devices capable of\n"
-"simultaneous playback and recording.\n"
-"\n"
-"Please use Applications -> Utilities -> Audio MIDI Setup\n"
-"to create an \"aggregrate\" device, or install a suitable\n"
-"audio interface.\n"
-"\n"
-"Please send email to Apple and ask them why new Macs\n"
-"have no duplex audio device.\n"
-"\n"
-"Alternatively, if you really want just playback\n"
-"or recording but not both, start JACK before running\n"
-"%1 and choose the relevant device then."
-msgstr ""
-"Sie haben keine Soundkarte, die gleichzeitiges\n"
-"Abspielen und Aufnehmen unterstützt.\n"
-"\n"
-"Benützen Sie Programme>Dienstprogramme>Audio-Midi-Setup\n"
-" um ein kombiniertes Gerät zu erzeugen, oder installieren Sie ein\n"
-"geeignetes Audiointerface.\n"
-"\n"
-"Bitte senden Sie eine E-Mail an Apple und fragen Sie, warum Sie\n"
-"keine Duplex Soundkarte in Ihrem Mac haben.\n"
-"\n"
-"Wenn Sie Audiomaterial wirklich nicht gleichzeitig aufnehmen und wiedergeben "
-"wollen,\n"
-"können Sie JACK vor dem Starten von %1 aufrufen und das entsprechende Gerät "
-"auswählen."
+#: engine_dialog.cc:1313
+msgid "Cannot set output latency to %1"
+msgstr "Kann Ausgangslatenz nicht auf %1 setzen"
-#: engine_dialog.cc:800
-msgid "No suitable audio devices"
-msgstr "Keine passenden Audiogeräte."
+#: engine_dialog.cc:1534
+msgid "No signal detected "
+msgstr "Kein Signal erkannt"
-#: engine_dialog.cc:1017
-msgid "JACK appears to be missing from the %1 bundle"
-msgstr "JACK scheint im %1-Paket zu fehlen."
+#: engine_dialog.cc:1547 port_insert_ui.cc:71 port_insert_ui.cc:99
+msgid "Disconnected from audio engine"
+msgstr "Von Audio-Engine getrennt"
-#: engine_dialog.cc:1087
-msgid "You need to choose an audio device first."
-msgstr "Sie müssen zuerst ein Audiogerät auswählen."
+#: engine_dialog.cc:1587 port_insert_ui.cc:135
+msgid "Detecting ..."
+msgstr "Messe..."
-#: engine_dialog.cc:1104
-msgid "Audio device \"%1\" not known on this computer."
-msgstr "Audiogerät %1 scheint auf diesem Computer nicht vorhanden zu sein."
+#: engine_dialog.cc:1589
+msgid "Cancel measurement"
+msgstr "Messung abbrechen"
-#: engine_dialog.cc:1256
-msgid "AudioSetup value for %1 is missing data"
-msgstr "Es fehlen Daten zum AudioSetup-Wert von %1"
+#: engine_dialog.cc:1657
+msgid "Disconnect from %1"
+msgstr "Trenne von %1"
-#: engine_dialog.cc:1335
-msgid "configuration files contain a JACK server path that doesn't exist (%1)"
-msgstr ""
-"die Konfiguration enthält einen JACK-Serverpfad, der nicht existiert (%1)"
+#: engine_dialog.cc:1669
+msgid "Connect to %1"
+msgstr "Verbinde zu %1"
#: export_channel_selector.cc:45 sfdb_ui.cc:145
msgid "Channels:"
@@ -6325,72 +6230,77 @@ msgstr "getSoundResourceFile: Wurzel = %1, != Antwort"
msgid "%1"
msgstr "%1"
-#: gain_meter.cc:106 gain_meter.cc:357 gain_meter.cc:462 gain_meter.cc:856
+#: gain_meter.cc:105 gain_meter.cc:360 gain_meter.cc:465 gain_meter.cc:859
msgid "-inf"
msgstr "-inf"
-#: gain_meter.cc:112 gain_meter.cc:913
+#: gain_meter.cc:111 gain_meter.cc:916
msgid "Fader automation mode"
msgstr "Fader Automationsmodus"
-#: gain_meter.cc:113 gain_meter.cc:914
+#: gain_meter.cc:112 gain_meter.cc:917
msgid "Fader automation type"
msgstr "Fader-Automationstyp"
-#: gain_meter.cc:122 gain_meter.cc:795 panner_ui.cc:178 panner_ui.cc:590
+#: gain_meter.cc:121 gain_meter.cc:798 panner_ui.cc:177 panner_ui.cc:589
msgid "Abs"
msgstr "Abs"
-#: gain_meter.cc:762 mixer_strip.cc:1948 meter_strip.cc:337 panner_ui.cc:557
+#: gain_meter.cc:765 mixer_strip.cc:1948 meter_strip.cc:337 panner_ui.cc:556
#: route_time_axis.cc:2411
msgid "P"
msgstr "P"
-#: gain_meter.cc:765 panner_ui.cc:560
+#: gain_meter.cc:768 panner_ui.cc:559
msgid "T"
msgstr "T"
-#: gain_meter.cc:768 panner_ui.cc:563
+#: gain_meter.cc:771 panner_ui.cc:562
msgid "W"
msgstr "W"
-#: generic_pluginui.cc:83
+#: generic_pluginui.cc:81
msgid "<span size=\"large\">Presets</span>"
msgstr "<span size=\"large\">Voreinstellungen</span>"
-#: generic_pluginui.cc:232
+#: generic_pluginui.cc:230
msgid "Switches"
msgstr "Schalter"
-#: generic_pluginui.cc:242 generic_pluginui.cc:376 processor_box.cc:2212
+#: generic_pluginui.cc:240 generic_pluginui.cc:374 processor_box.cc:2212
msgid "Controls"
msgstr "Steuerelemente"
-#: generic_pluginui.cc:270
+#: generic_pluginui.cc:268
msgid "Plugin Editor: could not build control element for port %1"
msgstr "Plugin Editor: konnte kein Steuerelement für Port %1 erzeugen"
-#: generic_pluginui.cc:408
+#: generic_pluginui.cc:406
msgid "Meters"
msgstr "Pegelanzeigen"
-#: generic_pluginui.cc:423
+#: generic_pluginui.cc:421
msgid "Automation control"
msgstr "Automation"
-#: generic_pluginui.cc:430
+#: generic_pluginui.cc:428
msgid "Mgnual"
msgstr "Mgnuell"
-#: global_port_matrix.cc:164
+#: global_port_matrix.cc:157
msgid "Audio Connection Manager"
msgstr "Audio Verbindungsmanager"
-#: global_port_matrix.cc:167
+#: global_port_matrix.cc:160
msgid "MIDI Connection Manager"
msgstr "Midi Verbindungsmanager"
-#: global_port_matrix.cc:213 io_selector.cc:216
+#: global_port_matrix.cc:200 io_selector.cc:210 mixer_strip.cc:719
+#: mixer_strip.cc:845
+msgid "Disconnect"
+msgstr "Trenne"
+
+#: global_port_matrix.cc:206 io_selector.cc:216
msgid "port"
msgstr "Port"
@@ -6588,19 +6498,19 @@ msgstr ""
msgid "Main_menu"
msgstr "Hauptmenü"
-#: keyeditor.cc:255
+#: keyeditor.cc:253
msgid "redirectmenu"
msgstr "Umleitungsmenü"
-#: keyeditor.cc:257
+#: keyeditor.cc:255
msgid "Editor_menus"
msgstr "Editor-Menü"
-#: keyeditor.cc:259
+#: keyeditor.cc:257
msgid "RegionList"
msgstr "Regionenliste"
-#: keyeditor.cc:261
+#: keyeditor.cc:259
msgid "ProcessorMenu"
msgstr "Prozessor-Menü"
@@ -6622,7 +6532,7 @@ msgid_plural "%1 samples"
msgstr[0] "%1 Sample"
msgstr[1] "%1 Samples"
-#: latency_gui.cc:72 panner_ui.cc:392
+#: latency_gui.cc:72 panner_ui.cc:391
msgid "Reset"
msgstr "Zurücksetzen"
@@ -6714,103 +6624,73 @@ msgstr "<b>Bereiche (Inclusive CD Track-Bereichen)</b>"
msgid "add range marker"
msgstr "Bereich hinzufügen"
-#: main.cc:83
-msgid "%1 could not connect to JACK."
-msgstr "%1 konnte nicht zu JACK verbinden."
+#: main.cc:81
+msgid "%1 could not connect to the audio backend."
+msgstr "%1 konnte nicht zum Audiobackend verbinden."
-#: main.cc:87
-msgid ""
-"There are several possible reasons:\n"
-"\n"
-"1) JACK is not running.\n"
-"2) JACK is running as another user, perhaps root.\n"
-"3) There is already another client called \"%1\".\n"
-"\n"
-"Please consider the possibilities, and perhaps (re)start JACK."
-msgstr ""
-"Dafür kann es verschiedene Gründe geben:\n"
-"\n"
-"1) JACK läuft nicht.\n"
-"2) JACK wurde unter einem anderen Benutzer gestartet, möglicherweise als "
-"root.\n"
-"3) Es gibt bereits einen anderen Client mit der Bezeichnung \"%1\".\n"
-"\n"
-"Betrachten Sie bitte diese Möglichkeiten und starten Sie ggf. JACK neu."
-
-#: main.cc:203 main.cc:324
+#: main.cc:194 main.cc:315
msgid "cannot create user %3 folder %1 (%2)"
msgstr "Kann benutzerspezifischen %3-Ordner %1 nicht erstellen: %2"
-#: main.cc:210 main.cc:331
+#: main.cc:201 main.cc:322
msgid "cannot open pango.rc file %1"
msgstr "kann die Datei pango.rc nicht öffnen %1"
-#: main.cc:235 main.cc:358
+#: main.cc:226 main.cc:349
msgid "Cannot find ArdourMono TrueType font"
msgstr "Kann den TrueType-Font ArdourMono nicht finden"
-#: main.cc:247 main.cc:364
+#: main.cc:238 main.cc:355
msgid "Cannot load ArdourMono TrueType font."
msgstr "Kann den TrueType-Font ArdourMono nicht laden."
-#: main.cc:312
+#: main.cc:303
msgid ""
"No fontconfig file found on your system. Things may looked very odd or ugly"
msgstr ""
"Keine fontconfig-Datei auf Ihrem System gefunden. Das kann zu seltsamem oder "
"hässlichem Aussehen führen"
-#: main.cc:368
+#: main.cc:359
msgid "Failed to set fontconfig configuration."
msgstr "Fontconfig-Konfiguration gescheitert."
-#: main.cc:379 main.cc:395
-msgid "JACK exited"
-msgstr "JACK wurde beendet"
+#: main.cc:370 main.cc:386
+msgid "The audio backend (%1) has failed, or terminated"
+msgstr "Das Audiobackend (%1) funktioniert nicht oder wurde beendet"
-#: main.cc:382
+#: main.cc:373
msgid ""
-"JACK exited unexpectedly, and without notifying %1.\n"
+"%2 exited unexpectedly, and without notifying %1.\n"
"\n"
-"This could be due to misconfiguration or to an error inside JACK.\n"
+"This could be due to misconfiguration or to an error inside %2.\n"
"\n"
"Click OK to exit %1."
msgstr ""
-"JACK wurde unerwartet und ohne Benachrichtigung beendet %1.\n"
+"%2 wurde unerwartet und ohne %1 zu benachrichtigen beendet .\n"
"\n"
"Dies liegt entweder an einer fehlerhaften Konfiguration oder an einem Fehler "
-"in JACK.\n"
+"in %2.\n"
"\n"
"Klicke OK, um %1 zu verlassen."
-#: main.cc:397
-msgid ""
-"JACK exited unexpectedly, and without notifying %1.\n"
-"\n"
-"This is probably due to an error inside JACK. You should restart JACK\n"
-"and reconnect %1 to it, or exit %1 now. You cannot save your\n"
-"session at this time, because we would lose your connection information.\n"
-msgstr ""
-"JACK wurde unerwartet und ohne Benachrichtigung beendet %1.\n"
-"\n"
-"Dies liegt wahrscheinlich an einem Fehler in JACK. Sie sollten\n"
-"JACK neu starten und %1 erneut mit ihm verbinden, oder %1 jetzt beenden.\n"
-"Momentan läßt sich das Projekt nicht speichern, da alle Informationen\n"
-"über Verbindungen verloren gehen würden.\n"
+#: main.cc:387
+msgid "%2 exited unexpectedly, and without notifying %1."
+msgstr "%2 wurde unerwartet und ohne %1 zu benachrichtigen beendet "
-#: main.cc:487
+#: main.cc:474
msgid " (built using "
msgstr " (kompiliert mit Version "
-#: main.cc:490
+#: main.cc:477
msgid " and GCC version "
msgstr " und GCC Version"
-#: main.cc:500
+#: main.cc:487
msgid "Copyright (C) 1999-2012 Paul Davis"
msgstr "Copyright (C) 1999-2012 Paul Davis"
-#: main.cc:501
+#: main.cc:488
msgid ""
"Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
"Baker, Robin Gareus"
@@ -6818,34 +6698,34 @@ msgstr ""
"Einige Teile Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
"Baker, Robin Gareus"
-#: main.cc:503
+#: main.cc:490
msgid "%1 comes with ABSOLUTELY NO WARRANTY"
msgstr "%1 wird Ihnen ohne jegliche Gewährleistung"
-#: main.cc:504
+#: main.cc:491
msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
msgstr ""
"für allgemeine oder spezielle Gebrauchstauglichkeit zur Verfügung gestellt."
-#: main.cc:505
+#: main.cc:492
msgid "This is free software, and you are welcome to redistribute it "
msgstr "Dies ist freie Software, die Sie gerne weitergeben dürfen"
-#: main.cc:506
+#: main.cc:493
msgid "under certain conditions; see the source for copying conditions."
msgstr ""
"solange Sie sich an die Bedingungen, die in der Datei COPYING aufgeführt "
"sind halten."
-#: main.cc:513
+#: main.cc:500
msgid "could not initialize %1."
msgstr "Konnte %1 nicht initialisieren."
-#: main.cc:522
+#: main.cc:509
msgid "Cannot xinstall SIGPIPE error handler"
msgstr "Kann die SIGPIPE Fehlerbehandlung nicht installieren"
-#: main.cc:528
+#: main.cc:515
msgid "could not create %1 GUI"
msgstr "konnte das %1 GUI nicht erstellen"
@@ -6862,6 +6742,11 @@ msgstr "MarkerText"
msgid "All"
msgstr "Alle"
+#: midi_channel_selector.cc:163 midi_channel_selector.cc:402
+#: midi_channel_selector.cc:438 rc_option_editor.cc:1248 sfdb_ui.cc:538
+msgid "None"
+msgstr "Kein"
+
#: midi_channel_selector.cc:167 midi_channel_selector.cc:407
#: midi_channel_selector.cc:443
msgid "Invert"
@@ -7250,27 +7135,27 @@ msgstr "alle"
msgid "some"
msgstr "einige"
-#: midi_tracer.cc:43
+#: midi_tracer.cc:46
msgid "Line history: "
msgstr "Aktionsliste:"
-#: midi_tracer.cc:51
+#: midi_tracer.cc:54
msgid "Auto-Scroll"
msgstr "Auto-Scroll"
-#: midi_tracer.cc:52
+#: midi_tracer.cc:55
msgid "Decimal"
msgstr "Dezimal"
-#: midi_tracer.cc:53 rc_option_editor.cc:659
+#: midi_tracer.cc:56 rc_option_editor.cc:657
msgid "Enabled"
msgstr "Aktiviert"
-#: midi_tracer.cc:54
+#: midi_tracer.cc:57
msgid "Delta times"
msgstr "Deltazeiten"
-#: midi_tracer.cc:66
+#: midi_tracer.cc:70
msgid "Port:"
msgstr "Port:"
@@ -7411,7 +7296,7 @@ msgid "pre"
msgstr "Pre"
#: mixer_strip.cc:95 mixer_strip.cc:123 mixer_strip.cc:354 mixer_strip.cc:1300
-#: rc_option_editor.cc:1881
+#: rc_option_editor.cc:1877
msgid "Comments"
msgstr "Kommentare"
@@ -7459,11 +7344,11 @@ msgstr "iso"
msgid "Mix group"
msgstr "Bearbeitungsgruppe"
-#: mixer_strip.cc:351 rc_option_editor.cc:1878
+#: mixer_strip.cc:351 rc_option_editor.cc:1874
msgid "Phase Invert"
msgstr "Phaseninvertierung"
-#: mixer_strip.cc:352 rc_option_editor.cc:1879 route_ui.cc:1218
+#: mixer_strip.cc:352 rc_option_editor.cc:1875 route_ui.cc:1218
msgid "Solo Safe"
msgstr "Solo sperren"
@@ -7471,7 +7356,7 @@ msgstr "Solo sperren"
msgid "Group"
msgstr "Gruppe"
-#: mixer_strip.cc:356 rc_option_editor.cc:1882
+#: mixer_strip.cc:356 rc_option_editor.cc:1878
msgid "Meter Point"
msgstr "Abgreifpunkt der Pegelanzeige"
@@ -7492,9 +7377,10 @@ msgid "Snd"
msgstr "Snd"
#: mixer_strip.cc:701 mixer_strip.cc:829 processor_box.cc:2154
-msgid "Not connected to JACK - no I/O changes are possible"
+msgid "Not connected to audio engine - no I/O changes are possible"
msgstr ""
-"Nicht mit Jack verbunden - es sind keine Änderungen an Ein-/Ausgängen möglich"
+"Nicht mit Audioengine verbunden - es sind keine Änderungen an Ein-/Ausgängen "
+"möglich"
#: mixer_strip.cc:1096
msgid "<b>INPUT</b> to %1"
@@ -8014,11 +7900,11 @@ msgstr ""
#: opts.cc:63
msgid ""
-" -c, --name <name> Use a specific jack client name, default is "
+" -c, --name <name> Use a specific backend client name, default is "
"ardour\n"
msgstr ""
-" -c, --name name Benutze spezielle JACK-Clientkennung, "
-"Standard: ardour\n"
+" -c, --name name Benutze speziellen Backend-Clientnamen, "
+"Voreinstellung: ardour\n"
#: opts.cc:64
msgid ""
@@ -8092,7 +7978,7 @@ msgstr ""
msgid "Panner (2D)"
msgstr "Panner (2D)"
-#: panner2d.cc:783 panner_ui.cc:384 plugin_ui.cc:451
+#: panner2d.cc:783 panner_ui.cc:383 plugin_ui.cc:449
msgid "Bypass"
msgstr "Bypass"
@@ -8100,15 +7986,15 @@ msgstr "Bypass"
msgid "Panner"
msgstr "Panner"
-#: panner_ui.cc:71
+#: panner_ui.cc:70
msgid "Pan automation mode"
msgstr "Pan-Automationsmodus"
-#: panner_ui.cc:72
+#: panner_ui.cc:71
msgid "Pan automation type"
msgstr "Pan-Automationstyp"
-#: panner_ui.cc:295
+#: panner_ui.cc:294
msgid ""
"No panner user interface is currently available for %1-in/2out tracks/busses"
msgstr "Für %1-in/2out Spuren/Busse ist momentan kein Panner-UI verfügbar"
@@ -8264,11 +8150,11 @@ msgstr "Nach Urheber"
msgid "By Category"
msgstr "Nach Kategorie"
-#: plugin_ui.cc:116
+#: plugin_ui.cc:114
msgid "Eh? LADSPA plugins don't have editors!"
msgstr "Merkwürdig... LADSPA-Plugins sollten kein GUI haben!"
-#: plugin_ui.cc:125 plugin_ui.cc:227
+#: plugin_ui.cc:123 plugin_ui.cc:225
msgid ""
"unknown type of editor-supplying plugin (note: no VST support in this "
"version of %1)"
@@ -8276,11 +8162,11 @@ msgstr ""
"Unbekannter Plugintyp mit eigenem Editor (Hinweis: diese %1-Version "
"unterstützt keine VST-Plugins)"
-#: plugin_ui.cc:128
+#: plugin_ui.cc:126
msgid "unknown type of editor-supplying plugin"
msgstr "Unbekannter Plugintyp"
-#: plugin_ui.cc:257
+#: plugin_ui.cc:255
msgid ""
"unknown type of editor-supplying plugin (note: no linuxVST support in this "
"version of %1)"
@@ -8288,23 +8174,23 @@ msgstr ""
"Unbekannter Plugintyp mit eigenem Editor (Hinweis: diese %1-Version "
"unterstützt keine linuxVST-Plugins)"
-#: plugin_ui.cc:329
+#: plugin_ui.cc:327
msgid "create_lv2_editor called on non-LV2 plugin"
msgstr "create_lv2_editor auf nicht-LV2-Plugin angewandt"
-#: plugin_ui.cc:417
+#: plugin_ui.cc:415
msgid "Add"
msgstr "Hinzufügen"
-#: plugin_ui.cc:421
+#: plugin_ui.cc:419
msgid "Description"
msgstr "Beschreibung:"
-#: plugin_ui.cc:422
+#: plugin_ui.cc:420
msgid "Plugin analysis"
msgstr "Pluginanalyse"
-#: plugin_ui.cc:429
+#: plugin_ui.cc:427
msgid ""
"Presets (if any) for this plugin\n"
"(Both factory and user-created)"
@@ -8312,23 +8198,23 @@ msgstr ""
"Presets (falls existent) für dieses Plugin\n"
"(Hersteller- und Benutzerpresets)"
-#: plugin_ui.cc:430
+#: plugin_ui.cc:428
msgid "Save a new preset"
msgstr "Neues Preset speichern"
-#: plugin_ui.cc:431
+#: plugin_ui.cc:429
msgid "Save the current preset"
msgstr "Momentanes Preset speichern"
-#: plugin_ui.cc:432
+#: plugin_ui.cc:430
msgid "Delete the current preset"
msgstr "Lösche das aktuelle Preset"
-#: plugin_ui.cc:433
+#: plugin_ui.cc:431
msgid "Disable signal processing by the plugin"
msgstr "Deaktiviere die Signalverarbeitung des Plugins"
-#: plugin_ui.cc:466 plugin_ui.cc:662
+#: plugin_ui.cc:464 plugin_ui.cc:660
msgid ""
"Click to allow the plugin to receive keyboard events that %1 would normally "
"use as a shortcut"
@@ -8336,29 +8222,29 @@ msgstr ""
"Klicke, damit das Plugin Tastaturbefehle erhält, die %1 sonst als "
"Tastenkürzel verwenden würde"
-#: plugin_ui.cc:467
+#: plugin_ui.cc:465
msgid "Click to enable/disable this plugin"
msgstr "Klicke, um dieses Plugin zu ein/auszuschalten"
-#: plugin_ui.cc:506
+#: plugin_ui.cc:504
msgid "latency (%1 sample)"
msgid_plural "latency (%1 samples)"
msgstr[0] "Latenz (%1 Sample)"
msgstr[1] "Latenz (%1 Samples)"
-#: plugin_ui.cc:508
+#: plugin_ui.cc:506
msgid "latency (%1 ms)"
msgstr "Latenz (%1 ms)"
-#: plugin_ui.cc:519
+#: plugin_ui.cc:517
msgid "Edit Latency"
msgstr "Latenz bearbeiten"
-#: plugin_ui.cc:558
+#: plugin_ui.cc:556
msgid "Plugin preset %1 not found"
msgstr "Plugin Preset %1 nicht gefunden"
-#: plugin_ui.cc:595
+#: plugin_ui.cc:593
msgid ""
"Plugin presets are not supported in this build of %1. Consider paying for a "
"full version"
@@ -8366,7 +8252,7 @@ msgstr ""
"Pluginpresets werden in diesem Version von %1 nicht unterstützt. Erwägen "
"Sie, für eine Vollversion zu zahlen"
-#: plugin_ui.cc:615 plugin_ui.cc:630
+#: plugin_ui.cc:613 plugin_ui.cc:628
msgid ""
"Plugin presets are not supported in this build of %1. Consider paying for a "
"newer version"
@@ -8374,35 +8260,35 @@ msgstr ""
"Pluginpresets werden in diesem Version von %1 nicht unterstützt. Erwägen "
"Sie, für eine neuere Version zu zahlen"
-#: plugin_ui.cc:669
+#: plugin_ui.cc:667
msgid "Click to allow normal use of %1 keyboard shortcuts"
msgstr "Klicke, um die normale Verwendung von %1 Tastenkürzeln zu aktivieren"
-#: port_group.cc:335
+#: port_group.cc:337
msgid "%1 Busses"
msgstr "%1 Busse"
-#: port_group.cc:336
+#: port_group.cc:338
msgid "%1 Tracks"
msgstr "%1 Spuren"
-#: port_group.cc:337
+#: port_group.cc:339
msgid "Hardware"
msgstr "Hardware"
-#: port_group.cc:338
+#: port_group.cc:340
msgid "%1 Misc"
msgstr "%1 Sonstige"
-#: port_group.cc:339
+#: port_group.cc:341
msgid "Other"
msgstr "Andere"
-#: port_group.cc:430 port_group.cc:431
+#: port_group.cc:432 port_group.cc:433
msgid "LTC Out"
msgstr "LTC Ausgang"
-#: port_group.cc:434 port_group.cc:435
+#: port_group.cc:436 port_group.cc:437
msgid "LTC In"
msgstr "LTC Eingang"
@@ -8438,15 +8324,15 @@ msgstr "MIDI clock out"
msgid "MMC out"
msgstr "MMC out"
-#: port_group.cc:540
+#: port_group.cc:532
msgid ":monitor"
msgstr ":monitor"
-#: port_group.cc:552
+#: port_group.cc:544
msgid "system:"
msgstr "system:"
-#: port_group.cc:553
+#: port_group.cc:545
msgid "alsa_pcm"
msgstr "alsa_pcm"
@@ -8462,18 +8348,10 @@ msgstr "Send/Ausgang"
msgid "Return/Input"
msgstr "Return/Input"
-#: port_insert_ui.cc:71 port_insert_ui.cc:99
-msgid "Disconnected from audio engine"
-msgstr "Von Audio-Engine getrennt"
-
#: port_insert_ui.cc:86
msgid "No signal detected"
msgstr "Kein Signal erkannt"
-#: port_insert_ui.cc:135
-msgid "Detecting ..."
-msgstr "Messe..."
-
#: port_insert_ui.cc:166
msgid "Port Insert "
msgstr "Port Insert "
@@ -8596,7 +8474,7 @@ msgstr "Alle Regler verbergen"
msgid "on"
msgstr "an"
-#: processor_box.cc:465 rc_option_editor.cc:1911 rc_option_editor.cc:1925
+#: processor_box.cc:465 rc_option_editor.cc:1907 rc_option_editor.cc:1921
msgid "off"
msgstr "Aus"
@@ -8830,101 +8708,101 @@ msgstr "Notenanfang einrasten an"
msgid "Snap note end"
msgstr "Notenende einrasten an"
-#: rc_option_editor.cc:69
+#: rc_option_editor.cc:67
msgid "Click audio file:"
msgstr "Audiodatei für Klick"
-#: rc_option_editor.cc:72 rc_option_editor.cc:79
+#: rc_option_editor.cc:70 rc_option_editor.cc:77
msgid "Browse..."
msgstr "Durchsuchen..."
-#: rc_option_editor.cc:76
+#: rc_option_editor.cc:74
msgid "Click emphasis audio file:"
msgstr "Audiodatei für Klick-Betonung"
-#: rc_option_editor.cc:108
+#: rc_option_editor.cc:106
msgid "Choose Click"
msgstr "Click auswählen"
-#: rc_option_editor.cc:128
+#: rc_option_editor.cc:126
msgid "Choose Click Emphasis"
msgstr "Click-Betonung auswählen"
-#: rc_option_editor.cc:160
+#: rc_option_editor.cc:158
msgid "Limit undo history to"
msgstr "Limitiere Aktionsliste auf"
-#: rc_option_editor.cc:161
+#: rc_option_editor.cc:159
msgid "Save undo history of"
msgstr "Speichere Aktionsliste von"
-#: rc_option_editor.cc:170 rc_option_editor.cc:177
+#: rc_option_editor.cc:168 rc_option_editor.cc:175
msgid "commands"
msgstr "Aktionen"
-#: rc_option_editor.cc:315
+#: rc_option_editor.cc:313
msgid "Edit using:"
msgstr "Bearbeiten mit:"
-#: rc_option_editor.cc:321 rc_option_editor.cc:347 rc_option_editor.cc:374
+#: rc_option_editor.cc:319 rc_option_editor.cc:345 rc_option_editor.cc:372
msgid "+ button"
msgstr "+ Maustaste"
-#: rc_option_editor.cc:341
+#: rc_option_editor.cc:339
msgid "Delete using:"
msgstr "Entfernen mit:"
-#: rc_option_editor.cc:368
+#: rc_option_editor.cc:366
msgid "Insert note using:"
msgstr "Note einfügen:"
-#: rc_option_editor.cc:395
+#: rc_option_editor.cc:393
msgid "Ignore snap using:"
msgstr "Einrasten ignorieren mittels:"
-#: rc_option_editor.cc:411
+#: rc_option_editor.cc:409
msgid "Keyboard layout:"
msgstr "Tastaturlayout:"
-#: rc_option_editor.cc:534
+#: rc_option_editor.cc:532
msgid "Font scaling:"
msgstr "Schriftskalierung"
-#: rc_option_editor.cc:586
+#: rc_option_editor.cc:584
msgid "Playback (seconds of buffering):"
msgstr "Wiedergabe (gepufferte Sekunden):"
-#: rc_option_editor.cc:599
+#: rc_option_editor.cc:597
msgid "Recording (seconds of buffering):"
msgstr "Aufnahme (gepufferte Sekunden):"
-#: rc_option_editor.cc:656
+#: rc_option_editor.cc:654
msgid "Control Surface Protocol"
msgstr "Eingabegeräteprotokoll"
-#: rc_option_editor.cc:660
+#: rc_option_editor.cc:658
msgid "Feedback"
msgstr "Feedback"
-#: rc_option_editor.cc:665
+#: rc_option_editor.cc:663
msgid "Double-click on a name to edit settings for an enabled protocol"
msgstr ""
"Doppelklick auf einen Namen editiert Einstellungen für ein aktiviertes "
"Protokoll"
-#: rc_option_editor.cc:817
+#: rc_option_editor.cc:815
msgid "Show Video Export Info before export"
msgstr "Zeige Video-Exportinformationen vor dem Exportieren"
-#: rc_option_editor.cc:818
+#: rc_option_editor.cc:816
msgid "Show Video Server Startup Dialog"
msgstr "Zeige den Videoserver-Startdialog"
-#: rc_option_editor.cc:819
+#: rc_option_editor.cc:817
msgid "Advanced Setup (remote video server)"
msgstr "Ausführliche Einrichtung (entfernter Videoserver)"
-#: rc_option_editor.cc:827
+#: rc_option_editor.cc:825
msgid ""
"<b>When enabled</b> you can speficify a custom video-server URL and docroot. "
"- Do not enable this option unless you know what you are doing."
@@ -8933,11 +8811,11 @@ msgstr ""
"für den Videoserver eingeben. - Aktivieren Sie diese Option nur, wenn Sie "
"wissen, was Sie tun."
-#: rc_option_editor.cc:829
+#: rc_option_editor.cc:827
msgid "Video Server URL:"
msgstr "Videoserver URL:"
-#: rc_option_editor.cc:834
+#: rc_option_editor.cc:832
msgid ""
"Base URL of the video-server including http prefix. This is usually 'http://"
"hostname.example.org:1554/' and defaults to 'http://localhost:1554/' when "
@@ -8947,11 +8825,11 @@ msgstr ""
"hostname.example.org:1554/' und ist auf 'http://localhost:1554/' "
"voreingestellt, wenn der Videoserver lokal läuft"
-#: rc_option_editor.cc:836
+#: rc_option_editor.cc:834
msgid "Video Folder:"
msgstr "Videoordner:"
-#: rc_option_editor.cc:841
+#: rc_option_editor.cc:839
msgid ""
"Local path to the video-server document-root. Only files below this "
"directory will be accessible by the video-server. If the server run on a "
@@ -8966,7 +8844,7 @@ msgstr ""
"werden, falls es nicht zugänglich ist. Wird für den lokalen Videomonitor und "
"die Dateisuche beim Öffnen/Hinzufügen einer Videodatei benutzt."
-#: rc_option_editor.cc:848
+#: rc_option_editor.cc:846
msgid ""
"<b>When enabled</b> an information window with details is displayed before "
"the video-export dialog."
@@ -8974,94 +8852,94 @@ msgstr ""
"<b>Wenn aktiviert</b> , wird vor dem Videoexport-Dialog ein "
"Informationsfenster mit Details angezeigt."
-#: rc_option_editor.cc:853
+#: rc_option_editor.cc:851
msgid ""
"<b>When enabled</b> the video server is never launched automatically without "
"confirmation"
msgstr ""
"<b>Wenn aktiviert</b>, wird der Videoserver nie ohne Bestätigung gestartet"
-#: rc_option_editor.cc:993
+#: rc_option_editor.cc:991
msgid "%1 Preferences"
msgstr "%1 Einstellungen"
-#: rc_option_editor.cc:1004
+#: rc_option_editor.cc:1002
msgid "DSP CPU Utilization"
msgstr "DSP CPU Nutzung"
-#: rc_option_editor.cc:1008
+#: rc_option_editor.cc:1006
msgid "Signal processing uses"
msgstr "Die Signalverarbeitung verwendet"
-#: rc_option_editor.cc:1013
+#: rc_option_editor.cc:1011
msgid "all but one processor"
msgstr "Alle außer einem Prozessor"
-#: rc_option_editor.cc:1014
+#: rc_option_editor.cc:1012
msgid "all available processors"
msgstr "Alle verfügbaren Prozessoren"
-#: rc_option_editor.cc:1017
+#: rc_option_editor.cc:1015
msgid "%1 processors"
msgstr "%1 Prozessoren"
-#: rc_option_editor.cc:1020
+#: rc_option_editor.cc:1018
msgid "This setting will only take effect when %1 is restarted."
msgstr "Diese Einstellung wird erst nach einem Neustart von %1 wirksam."
-#: rc_option_editor.cc:1025
+#: rc_option_editor.cc:1023
msgid "Options|Undo"
msgstr "Undo"
-#: rc_option_editor.cc:1032
+#: rc_option_editor.cc:1030
msgid "Verify removal of last capture"
msgstr "Verwerfen der letzten Aufnahme bestätigen"
-#: rc_option_editor.cc:1040
+#: rc_option_editor.cc:1038
msgid "Make periodic backups of the session file"
msgstr "Erstelle regelmäßig Backups der Projektdatei"
-#: rc_option_editor.cc:1045
+#: rc_option_editor.cc:1043
msgid "Session Management"
msgstr "Projektmanagement:"
-#: rc_option_editor.cc:1050
+#: rc_option_editor.cc:1048
msgid "Always copy imported files"
msgstr "Importierte Dateien immer kopieren"
-#: rc_option_editor.cc:1057
+#: rc_option_editor.cc:1055
msgid "Default folder for new sessions:"
msgstr "Standardordner für neue Projekte"
-#: rc_option_editor.cc:1065
+#: rc_option_editor.cc:1063
msgid "Maximum number of recent sessions"
msgstr "Maximale Anzahl kürzlich geöffneter Projekte"
-#: rc_option_editor.cc:1078
+#: rc_option_editor.cc:1076
msgid "Click gain level"
msgstr "Lautstärke für Klick"
-#: rc_option_editor.cc:1083 route_time_axis.cc:215 route_time_axis.cc:676
+#: rc_option_editor.cc:1081 route_time_axis.cc:215 route_time_axis.cc:676
msgid "Automation"
msgstr "Automationen"
-#: rc_option_editor.cc:1088
+#: rc_option_editor.cc:1086
msgid "Thinning factor (larger value => less data)"
msgstr "Ausdünnungsfaktor (größerer Wert => weniger Daten)"
-#: rc_option_editor.cc:1097
+#: rc_option_editor.cc:1095
msgid "Automation sampling interval (milliseconds)"
msgstr "Meßintervall für Automation (Millisekunden)"
-#: rc_option_editor.cc:1109
+#: rc_option_editor.cc:1107
msgid "Keep record-enable engaged on stop"
msgstr "Aufnahme bleibt nach Stopp aktiviert"
-#: rc_option_editor.cc:1118
+#: rc_option_editor.cc:1116
msgid "Stop recording when an xrun occurs"
msgstr "Aufnahme bei xrun stoppen"
-#: rc_option_editor.cc:1123
+#: rc_option_editor.cc:1121
msgid ""
"<b>When enabled</b> %1 will stop recording if an over- or underrun is "
"detected by the audio engine"
@@ -9069,15 +8947,15 @@ msgstr ""
"<b>Falls an</b>, wird %1 Aufnahmen bei Auftreten von Over- oder Underruns "
"abbrechen"
-#: rc_option_editor.cc:1129
+#: rc_option_editor.cc:1127
msgid "Create markers where xruns occur"
msgstr "Bei xrun Marker erzeugen"
-#: rc_option_editor.cc:1138
+#: rc_option_editor.cc:1136
msgid "Stop at the end of the session"
msgstr "Am Ende des Projektes anhalten"
-#: rc_option_editor.cc:1143
+#: rc_option_editor.cc:1141
msgid ""
"<b>When enabled</b> if %1 is <b>not recording</b>, it will stop the "
"transport when it reaches the current session end marker\n"
@@ -9090,11 +8968,11 @@ msgstr ""
"\n"
"<b>Falls aus</b> , wird Ardour am Ende des Projektes immer weiterlaufen"
-#: rc_option_editor.cc:1151
-msgid "Do seamless looping (not possible when slaved to MTC, JACK etc)"
-msgstr "Nahtlose Schleifen (nicht möglich wenn MTC, JACK etc. Master sind)"
+#: rc_option_editor.cc:1149
+msgid "Do seamless looping (not possible when slaved to MTC, LTC etc)"
+msgstr "Nahtlose Schleifen (nicht möglich, wenn an MTC, LTC o.ä. gekoppelt)"
-#: rc_option_editor.cc:1156
+#: rc_option_editor.cc:1154
msgid ""
"<b>When enabled</b> this will loop by reading ahead and wrapping around at "
"the loop point, preventing any need to do a transport locate at the end of "
@@ -9111,11 +8989,11 @@ msgstr ""
"Schleife springen, was oft einen hörbaren Klick oder kurze Verzögerung "
"verursacht"
-#: rc_option_editor.cc:1164
+#: rc_option_editor.cc:1162
msgid "Disable per-track record disarm while rolling"
msgstr "Während der Aufnahme Aufnahmestatus einzelner Spuren sperren"
-#: rc_option_editor.cc:1168
+#: rc_option_editor.cc:1166
msgid ""
"<b>When enabled</b> this will prevent you from accidentally stopping "
"specific tracks recording during a take"
@@ -9123,11 +9001,11 @@ msgstr ""
"<b>Wenn eingeschaltet</b> , hindert Sie dies daran, während eines "
"Aufnahmevorgangs unabsichtlich bei einzelnen Spuren die Aufnahme zu beenden"
-#: rc_option_editor.cc:1173
+#: rc_option_editor.cc:1171
msgid "12dB gain reduction during fast-forward and fast-rewind"
msgstr "Beim Spulen Pegel um 12dB absenken"
-#: rc_option_editor.cc:1177
+#: rc_option_editor.cc:1175
msgid ""
"This will reduce the unpleasant increase in perceived volume that occurs "
"when fast-forwarding or rewinding through some kinds of audio"
@@ -9135,19 +9013,19 @@ msgstr ""
"Dies wird die unangenehme Steigerung der wahrgenommenen Lautstärke "
"verringern, die bei manchem Material bei Vor/Rücklauf auftritt"
-#: rc_option_editor.cc:1181
+#: rc_option_editor.cc:1179
msgid "Sync/Slave"
msgstr "Sync/Slave"
-#: rc_option_editor.cc:1185
+#: rc_option_editor.cc:1183
msgid "External timecode source"
msgstr "Externe Timecode-Quelle"
-#: rc_option_editor.cc:1195
+#: rc_option_editor.cc:1193
msgid "Match session video frame rate to external timecode"
msgstr "Videoframerate des Projekts an externen Timecode anpassen"
-#: rc_option_editor.cc:1201
+#: rc_option_editor.cc:1199
msgid ""
"This option controls the value of the video frame rate <i>while chasing</i> "
"an external timecode source.\n"
@@ -9171,11 +9049,11 @@ msgstr ""
"wird zwischen den Standards der externen Quelle und des Projektes "
"konvertieren."
-#: rc_option_editor.cc:1211
+#: rc_option_editor.cc:1209
msgid "External timecode is sync locked"
msgstr "Externe Timecode-Quelle ist starr synchronisiert"
-#: rc_option_editor.cc:1217
+#: rc_option_editor.cc:1215
msgid ""
"<b>When enabled</b> indicates that the selected external timecode source "
"shares sync (Black &amp; Burst, Wordclock, etc) with the audio interface."
@@ -9183,11 +9061,11 @@ msgstr ""
"<b>Falls an</b>, zeigt dies an, daß die ausgewählte externe Timecode-Quelle "
"synchron zum Audio-Interface läuft (Black &amp; Burst, Wordclock, etc)."
-#: rc_option_editor.cc:1224
+#: rc_option_editor.cc:1222
msgid "Lock to 29.9700 fps instead of 30000/1001"
msgstr "Fest auf 29.9700 fps statt 30000/1001"
-#: rc_option_editor.cc:1230
+#: rc_option_editor.cc:1228
msgid ""
"<b>When enabled</b> the external timecode source is assumed to use 29.97 fps "
"instead of 30000/1001.\n"
@@ -9210,27 +9088,27 @@ msgstr ""
"widersprechend - da bei der Variante mit exakt 29.97 fps kein Timecode-Drift "
"auftritt.\n"
-#: rc_option_editor.cc:1240
+#: rc_option_editor.cc:1238
msgid "LTC Reader"
msgstr "LTC-Leser"
-#: rc_option_editor.cc:1244
+#: rc_option_editor.cc:1242
msgid "LTC incoming port"
msgstr "LTC Eingangsport"
-#: rc_option_editor.cc:1257
+#: rc_option_editor.cc:1255
msgid "LTC Generator"
msgstr "LTC-Generator"
-#: rc_option_editor.cc:1262
+#: rc_option_editor.cc:1260
msgid "Enable LTC generator"
msgstr "LTC-Generator aktivieren"
-#: rc_option_editor.cc:1269
+#: rc_option_editor.cc:1267
msgid "send LTC while stopped"
msgstr "LTC senden, wenn Transport steht"
-#: rc_option_editor.cc:1275
+#: rc_option_editor.cc:1273
msgid ""
"<b>When enabled</b> %1 will continue to send LTC information even when the "
"transport (playhead) is not moving"
@@ -9238,11 +9116,11 @@ msgstr ""
"<b>Falls an</b>, wird %1 weiterhin LTC-Information senden, sogar wenn der "
"Transport (Positionszeiger) stillsteht"
-#: rc_option_editor.cc:1281
+#: rc_option_editor.cc:1279
msgid "LTC generator level"
msgstr "LTC-Generator-Lautstärke"
-#: rc_option_editor.cc:1285
+#: rc_option_editor.cc:1283
msgid ""
"Specify the Peak Volume of the generated LTC signal in dbFS. A good value "
"is 0dBu ^= -18dbFS in an EBU calibrated system"
@@ -9250,108 +9128,108 @@ msgstr ""
"Geben Sie den Spitzenwert des erzeugten LTC-Signals in dbFS an. Ein guter "
"Wert für ein EBU-kalibriertes System ist 0dBu ^= -18dbFS"
-#: rc_option_editor.cc:1297
+#: rc_option_editor.cc:1295
msgid "Link selection of regions and tracks"
msgstr "Auswahl von Spuren und Regionen verbinden"
-#: rc_option_editor.cc:1305
+#: rc_option_editor.cc:1303
msgid "Move relevant automation when audio regions are moved"
msgstr "Verschiebe relevante Automationen mit Region"
-#: rc_option_editor.cc:1313
+#: rc_option_editor.cc:1311
msgid "Show meters on tracks in the editor"
msgstr "Aktiviere Pegelanzeigen im Editor"
-#: rc_option_editor.cc:1321
+#: rc_option_editor.cc:1319
msgid "Display master-meter in the toolbar"
msgstr "Master-Pegelanzeige in der Werkzeugleiste anzeigen"
-#: rc_option_editor.cc:1328
+#: rc_option_editor.cc:1326
msgid "Regions in active edit groups are edited together"
msgstr "Regionen der aktiven Bearbeitungsgruppen werden gemeinsam bearbeitet"
-#: rc_option_editor.cc:1329
+#: rc_option_editor.cc:1327
msgid "whenever they overlap in time"
msgstr "immer, wenn sie sich auf der Zeitachse überlappen"
-#: rc_option_editor.cc:1330
+#: rc_option_editor.cc:1328
msgid "only if they have identical length, position and origin"
msgstr "nur bei identischer Länge, Position und Herkunft"
-#: rc_option_editor.cc:1340
+#: rc_option_editor.cc:1338
msgid "Make rubberband selection rectangle snap to the grid"
msgstr "Gummiband-Auswahl an Raster ausrichten"
-#: rc_option_editor.cc:1348
+#: rc_option_editor.cc:1346
msgid "Show waveforms in regions"
msgstr "Zeige Wellenformen in Regionen"
-#: rc_option_editor.cc:1356
+#: rc_option_editor.cc:1354
msgid "Show gain envelopes in audio regions"
msgstr "Zeige Lautstärkekurven in Regionen an"
-#: rc_option_editor.cc:1357
+#: rc_option_editor.cc:1355
msgid "in all modes"
msgstr "in allen Modi"
-#: rc_option_editor.cc:1358
+#: rc_option_editor.cc:1356
msgid "only in region gain mode"
msgstr "nur im Region-Gain Modus"
-#: rc_option_editor.cc:1365
+#: rc_option_editor.cc:1363
msgid "Waveform scale"
msgstr "Wellenformskalierung"
-#: rc_option_editor.cc:1370
+#: rc_option_editor.cc:1368
msgid "linear"
msgstr "Linear"
-#: rc_option_editor.cc:1371
+#: rc_option_editor.cc:1369
msgid "logarithmic"
msgstr "Logarithmisch"
-#: rc_option_editor.cc:1377
+#: rc_option_editor.cc:1375
msgid "Waveform shape"
msgstr "Wellenform Anzeigeart"
-#: rc_option_editor.cc:1382
+#: rc_option_editor.cc:1380
msgid "traditional"
msgstr "Traditionell"
-#: rc_option_editor.cc:1383
+#: rc_option_editor.cc:1381
msgid "rectified"
msgstr "Rectified"
-#: rc_option_editor.cc:1390
+#: rc_option_editor.cc:1388
msgid "Show waveforms for audio while it is being recorded"
msgstr "Zeige bei Aufnahmen die Wellenformen des aufgenommenen Audiomaterials"
-#: rc_option_editor.cc:1398
+#: rc_option_editor.cc:1396
msgid "Show zoom toolbar"
msgstr "Zeige Zoom Toolbar"
-#: rc_option_editor.cc:1406
+#: rc_option_editor.cc:1404
msgid "Color regions using their track's color"
msgstr "Färbe Regionen in der Spurfarbe ein"
-#: rc_option_editor.cc:1414
+#: rc_option_editor.cc:1412
msgid "Update editor window during drags of the summary"
msgstr ""
"Aktualisiere das Editorfenster, während die Projektübersicht verändert wird"
-#: rc_option_editor.cc:1422
+#: rc_option_editor.cc:1420
msgid "Synchronise editor and mixer track order"
msgstr "Einheitliche Reihenfolge der Spuren im Editor und Mixer"
-#: rc_option_editor.cc:1430
+#: rc_option_editor.cc:1428
msgid "Synchronise editor and mixer selection"
msgstr "Synchronisiere Auswahl der Spuren im Editor und Mixer"
-#: rc_option_editor.cc:1437
+#: rc_option_editor.cc:1435
msgid "Name new markers"
msgstr "Neue Marker benennen"
-#: rc_option_editor.cc:1443
+#: rc_option_editor.cc:1441
msgid ""
"If enabled, popup a dialog when a new marker is created to allow its name to "
"be set as it is created.\n"
@@ -9363,241 +9241,245 @@ msgstr ""
"\n"
"Marker können jederzeit per Rechtsklick umbenannt werden"
-#: rc_option_editor.cc:1449
+#: rc_option_editor.cc:1447
msgid "Auto-scroll editor window when dragging near its edges"
msgstr "Bei Mausziehen nahe den Rändern das Editorfenster automatisch scrollen"
-#: rc_option_editor.cc:1456
+#: rc_option_editor.cc:1454
msgid "Buffering"
msgstr "Pufferung"
-#: rc_option_editor.cc:1464
+#: rc_option_editor.cc:1462
msgid "Record monitoring handled by"
msgstr "Aufnahmemonitoring wird verwaltet von"
-#: rc_option_editor.cc:1475
+#: rc_option_editor.cc:1468
+msgid "via Audio Driver"
+msgstr "via Audiotreiber"
+
+#: rc_option_editor.cc:1471
msgid "ardour"
msgstr "Ardour"
-#: rc_option_editor.cc:1476
+#: rc_option_editor.cc:1472
msgid "audio hardware"
msgstr "Audiohardware"
-#: rc_option_editor.cc:1483
+#: rc_option_editor.cc:1479
msgid "Tape machine mode"
msgstr "Bandmaschinen-Modus"
-#: rc_option_editor.cc:1488
+#: rc_option_editor.cc:1484
msgid "Connection of tracks and busses"
msgstr "Verbindung von Spuren und Bussen"
-#: rc_option_editor.cc:1493
+#: rc_option_editor.cc:1489
msgid "Auto-connect master/monitor busses"
msgstr "Master/Monitor-Busse automatisch verbinden"
-#: rc_option_editor.cc:1500
+#: rc_option_editor.cc:1496
msgid "Connect track inputs"
msgstr "Verbinde Spureingänge"
-#: rc_option_editor.cc:1505
+#: rc_option_editor.cc:1501
msgid "automatically to physical inputs"
msgstr "automatisch mit Audioeingängen"
-#: rc_option_editor.cc:1506 rc_option_editor.cc:1519
+#: rc_option_editor.cc:1502 rc_option_editor.cc:1515
msgid "manually"
msgstr "manuell"
-#: rc_option_editor.cc:1512
+#: rc_option_editor.cc:1508
msgid "Connect track and bus outputs"
msgstr "Verbinde Spur- und Busausgänge"
-#: rc_option_editor.cc:1517
+#: rc_option_editor.cc:1513
msgid "automatically to physical outputs"
msgstr "automatisch mit Audioausgängen"
-#: rc_option_editor.cc:1518
+#: rc_option_editor.cc:1514
msgid "automatically to master bus"
msgstr "automatisch mit dem Master-Bus"
-#: rc_option_editor.cc:1523
+#: rc_option_editor.cc:1519
msgid "Denormals"
msgstr "Denormals"
-#: rc_option_editor.cc:1528
+#: rc_option_editor.cc:1524
msgid "Use DC bias to protect against denormals"
msgstr "Nutze DC bias als Schutz vor Denormals"
-#: rc_option_editor.cc:1535
+#: rc_option_editor.cc:1531
msgid "Processor handling"
msgstr "Umgang des Prozessors mit Denormals"
-#: rc_option_editor.cc:1540
+#: rc_option_editor.cc:1536
msgid "no processor handling"
msgstr "nicht behandeln"
-#: rc_option_editor.cc:1545
+#: rc_option_editor.cc:1541
msgid "use FlushToZero"
msgstr "Benutze FlushToZero"
-#: rc_option_editor.cc:1549
+#: rc_option_editor.cc:1545
msgid "use DenormalsAreZero"
msgstr "Benutze DenormalsAreZero"
-#: rc_option_editor.cc:1553
+#: rc_option_editor.cc:1549
msgid "use FlushToZero and DenormalsAreZero"
msgstr "Benutze FlushToZero & DenormalsAreZero"
-#: rc_option_editor.cc:1563
+#: rc_option_editor.cc:1559
msgid "Silence plugins when the transport is stopped"
msgstr "Deaktiviere Plugins, wenn der Transport gestoppt ist."
-#: rc_option_editor.cc:1571
+#: rc_option_editor.cc:1567
msgid "Make new plugins active"
msgstr "Neue Plugins sind aktiv"
-#: rc_option_editor.cc:1579
+#: rc_option_editor.cc:1575
msgid "Enable automatic analysis of audio"
msgstr "Audiodaten automatisch analysieren"
-#: rc_option_editor.cc:1587
+#: rc_option_editor.cc:1583
msgid "Replicate missing region channels"
msgstr "Fehlende Kanäle von Regionen ersetzen"
-#: rc_option_editor.cc:1594 rc_option_editor.cc:1609 rc_option_editor.cc:1621
-#: rc_option_editor.cc:1633 rc_option_editor.cc:1645 rc_option_editor.cc:1649
-#: rc_option_editor.cc:1657 rc_option_editor.cc:1665 rc_option_editor.cc:1673
-#: rc_option_editor.cc:1675 rc_option_editor.cc:1683 rc_option_editor.cc:1691
-#: rc_option_editor.cc:1699
+#: rc_option_editor.cc:1590 rc_option_editor.cc:1605 rc_option_editor.cc:1617
+#: rc_option_editor.cc:1629 rc_option_editor.cc:1641 rc_option_editor.cc:1645
+#: rc_option_editor.cc:1653 rc_option_editor.cc:1661 rc_option_editor.cc:1669
+#: rc_option_editor.cc:1671 rc_option_editor.cc:1679 rc_option_editor.cc:1687
+#: rc_option_editor.cc:1695
msgid "Solo / mute"
msgstr "Solo / Mute"
-#: rc_option_editor.cc:1597
+#: rc_option_editor.cc:1593
msgid "Solo-in-place mute cut (dB)"
msgstr "Solo-in-Place Mute Dämpfung (dB)"
-#: rc_option_editor.cc:1604
+#: rc_option_editor.cc:1600
msgid "Solo controls are Listen controls"
msgstr "Solo-Schalter arbeiten als AFL/PFL"
-#: rc_option_editor.cc:1613
+#: rc_option_editor.cc:1609
msgid "Listen Position"
msgstr "Abhörpunkt"
-#: rc_option_editor.cc:1618
+#: rc_option_editor.cc:1614
msgid "after-fader (AFL)"
msgstr "After-Fader (AFL)"
-#: rc_option_editor.cc:1619
+#: rc_option_editor.cc:1615
msgid "pre-fader (PFL)"
msgstr "Pre-Fader (PFL)"
-#: rc_option_editor.cc:1625
+#: rc_option_editor.cc:1621
msgid "PFL signals come from"
msgstr "Abgreifpunkt der PFL Signale"
-#: rc_option_editor.cc:1630
+#: rc_option_editor.cc:1626
msgid "before pre-fader processors"
msgstr "Vor den Pre-Fader Prozessoren"
-#: rc_option_editor.cc:1631
+#: rc_option_editor.cc:1627
msgid "pre-fader but after pre-fader processors"
msgstr "Pre-Fader, aber nach den Prozessoren"
-#: rc_option_editor.cc:1637
+#: rc_option_editor.cc:1633
msgid "AFL signals come from"
msgstr "Abgreifpunkt der AFL Signale"
-#: rc_option_editor.cc:1642
+#: rc_option_editor.cc:1638
msgid "immediately post-fader"
msgstr "Direkt nach dem Fader"
-#: rc_option_editor.cc:1643
+#: rc_option_editor.cc:1639
msgid "after post-fader processors (before pan)"
msgstr "Nach den Post-Fader Prozessoren (vor Pan)"
-#: rc_option_editor.cc:1652
+#: rc_option_editor.cc:1648
msgid "Exclusive solo"
msgstr "Exclusives Solo"
-#: rc_option_editor.cc:1660
+#: rc_option_editor.cc:1656
msgid "Show solo muting"
msgstr "Solo auf anderen Kanälen als Mute anzeigen"
-#: rc_option_editor.cc:1668
+#: rc_option_editor.cc:1664
msgid "Soloing overrides muting"
msgstr "Solo ist trotz Mute hörbar"
-#: rc_option_editor.cc:1673
+#: rc_option_editor.cc:1669
msgid "Default track / bus muting options"
msgstr "Standardeinstellungen für Mute von Spuren / Bussen"
-#: rc_option_editor.cc:1678
+#: rc_option_editor.cc:1674
msgid "Mute affects pre-fader sends"
msgstr "Mute schaltet Pre-Fader Sends stumm"
-#: rc_option_editor.cc:1686
+#: rc_option_editor.cc:1682
msgid "Mute affects post-fader sends"
msgstr "Mute schaltet Post-Fader Sends stumm"
-#: rc_option_editor.cc:1694
+#: rc_option_editor.cc:1690
msgid "Mute affects control outputs"
msgstr "Mute schaltet Abhörausgänge stumm"
-#: rc_option_editor.cc:1702
+#: rc_option_editor.cc:1698
msgid "Mute affects main outputs"
msgstr "Mute schaltet Hauptausgänge stumm"
-#: rc_option_editor.cc:1718
+#: rc_option_editor.cc:1714
msgid "Send MIDI Time Code"
msgstr "Sende MIDI Time Code"
-#: rc_option_editor.cc:1726
+#: rc_option_editor.cc:1722
msgid "Percentage either side of normal transport speed to transmit MTC"
msgstr ""
"Prozentzahl beiderseits der normalen Transportgeschwindigkeit, bis zu der "
"MTC übertragen wird"
-#: rc_option_editor.cc:1735
+#: rc_option_editor.cc:1731
msgid "Obey MIDI Machine Control commands"
msgstr "MIDI Machine Control Commands empfangen"
-#: rc_option_editor.cc:1743
+#: rc_option_editor.cc:1739
msgid "Send MIDI Machine Control commands"
msgstr "MIDI Machine Control Commands senden"
-#: rc_option_editor.cc:1751
+#: rc_option_editor.cc:1747
msgid "Send MIDI control feedback"
msgstr "MIDI Control Feedback senden"
-#: rc_option_editor.cc:1759
+#: rc_option_editor.cc:1755
msgid "Inbound MMC device ID"
msgstr "ID des eingehenden MMC-Geräts"
-#: rc_option_editor.cc:1768
+#: rc_option_editor.cc:1764
msgid "Outbound MMC device ID"
msgstr "ID des ausgehenden MMC-Geräts"
-#: rc_option_editor.cc:1777
+#: rc_option_editor.cc:1773
msgid "Initial program change"
msgstr "Erstmaliger Programmwechsel"
-#: rc_option_editor.cc:1786
+#: rc_option_editor.cc:1782
msgid "Display first MIDI bank/program as 0"
msgstr "Erste(s) MIDI Bank/Programm als 0 anzeigen"
-#: rc_option_editor.cc:1794
+#: rc_option_editor.cc:1790
msgid "Never display periodic MIDI messages (MTC, MIDI Clock)"
msgstr "Periodische MIDI Nachrichten nie anzeigen (MTC, MIDI Clock)"
-#: rc_option_editor.cc:1802
+#: rc_option_editor.cc:1798
msgid "Sound MIDI notes as they are selected"
msgstr "MIDI Noten ertönen bei Auswahl"
-#: rc_option_editor.cc:1810 rc_option_editor.cc:1820 rc_option_editor.cc:1822
+#: rc_option_editor.cc:1806 rc_option_editor.cc:1816 rc_option_editor.cc:1818
msgid "User interaction"
msgstr "Benutzerinteraktion"
-#: rc_option_editor.cc:1813
+#: rc_option_editor.cc:1809
msgid ""
"Use translations of %1 messages\n"
" <i>(requires a restart of %1 to take effect)</i>\n"
@@ -9607,131 +9489,131 @@ msgstr ""
" <i>(erfordert Neustart von %1)</i>\n"
" <i>(falls für Ihre gewünschte Sprache verfügbar)</i>"
-#: rc_option_editor.cc:1820
+#: rc_option_editor.cc:1816
msgid "Keyboard"
msgstr "Tastatur"
-#: rc_option_editor.cc:1830
+#: rc_option_editor.cc:1826
msgid "Control surface remote ID"
msgstr "Remote ID des Eingabegeräts"
-#: rc_option_editor.cc:1835
+#: rc_option_editor.cc:1831
msgid "assigned by user"
msgstr "vom Benutzer festgelegt"
-#: rc_option_editor.cc:1836
+#: rc_option_editor.cc:1832
msgid "follows order of mixer"
msgstr "folgt Reihenfolge im Mixer"
-#: rc_option_editor.cc:1837
+#: rc_option_editor.cc:1833
msgid "follows order of editor"
msgstr "folgt Reihenfolge im Editor"
-#: rc_option_editor.cc:1846 rc_option_editor.cc:1854 rc_option_editor.cc:1864
-#: rc_option_editor.cc:1885 rc_option_editor.cc:1894 rc_option_editor.cc:1902
-#: rc_option_editor.cc:1916 rc_option_editor.cc:1935 rc_option_editor.cc:1951
-#: rc_option_editor.cc:1967 rc_option_editor.cc:1981 rc_option_editor.cc:1995
-#: rc_option_editor.cc:1997
+#: rc_option_editor.cc:1842 rc_option_editor.cc:1850 rc_option_editor.cc:1860
+#: rc_option_editor.cc:1881 rc_option_editor.cc:1890 rc_option_editor.cc:1898
+#: rc_option_editor.cc:1912 rc_option_editor.cc:1931 rc_option_editor.cc:1947
+#: rc_option_editor.cc:1963 rc_option_editor.cc:1977 rc_option_editor.cc:1991
+#: rc_option_editor.cc:1993
msgid "Preferences|GUI"
msgstr "GUI"
-#: rc_option_editor.cc:1849
+#: rc_option_editor.cc:1845
msgid "Graphically indicate mouse pointer hovering over various widgets"
msgstr "Mouseover-Effekt über verschiedenen Anzeigen"
-#: rc_option_editor.cc:1857
+#: rc_option_editor.cc:1853
msgid "Show tooltips if mouse hovers over a control"
msgstr "Zeige Tooltips, wenn die Maus über einem Element schwebt"
-#: rc_option_editor.cc:1867
+#: rc_option_editor.cc:1863
msgid "GUI"
msgstr "GUI"
-#: rc_option_editor.cc:1870
+#: rc_option_editor.cc:1866
msgid "update transport clock display every 40ms instead of every 100ms"
msgstr "Auffrischen der Transport-Zeitanzeige alle 40ms statt 100ms"
-#: rc_option_editor.cc:1887
+#: rc_option_editor.cc:1883
msgid "Mixer Strip"
msgstr "Anzeige im Channel strip"
-#: rc_option_editor.cc:1897
+#: rc_option_editor.cc:1893
msgid "Use narrow strips in the mixer by default"
msgstr "Standardmäßig schmale Mixer-Kanalzüge verwenden"
-#: rc_option_editor.cc:1906
+#: rc_option_editor.cc:1902
msgid "Peak hold time"
msgstr "Haltezeit für Spitzenwert"
-#: rc_option_editor.cc:1912
+#: rc_option_editor.cc:1908
msgid "short"
msgstr "Kurz"
-#: rc_option_editor.cc:1913
+#: rc_option_editor.cc:1909
msgid "medium"
msgstr "Mittel"
-#: rc_option_editor.cc:1914
+#: rc_option_editor.cc:1910
msgid "long"
msgstr "Lange"
-#: rc_option_editor.cc:1920
+#: rc_option_editor.cc:1916
msgid "DPM fall-off"
msgstr "Abfall der digitalen Pegelanzeige"
-#: rc_option_editor.cc:1926
+#: rc_option_editor.cc:1922
msgid "slowest [6.6dB/sec]"
msgstr "am langsamsten [6.6dB/sec]"
-#: rc_option_editor.cc:1927
+#: rc_option_editor.cc:1923
msgid "slow [8.6dB/sec] (BBC PPM, EBU PPM)"
msgstr "langsam [8.6dB/sec] (BBC PPM, EBU PPM)"
-#: rc_option_editor.cc:1928
+#: rc_option_editor.cc:1924
msgid "slowish [12.0dB/sec] (DIN)"
msgstr "etwas langsam [12.0dB/sec] (DIN)"
-#: rc_option_editor.cc:1929
+#: rc_option_editor.cc:1925
msgid "moderate [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)"
msgstr "mäßig [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)"
-#: rc_option_editor.cc:1930
+#: rc_option_editor.cc:1926
msgid "medium [20dB/sec]"
msgstr "mittel [20dB/sec]"
-#: rc_option_editor.cc:1931
+#: rc_option_editor.cc:1927
msgid "fast [32dB/sec]"
msgstr "schnell [32dB/sec]"
-#: rc_option_editor.cc:1932
+#: rc_option_editor.cc:1928
msgid "faster [46dB/sec]"
msgstr "schneller [46dB/sec]"
-#: rc_option_editor.cc:1933
+#: rc_option_editor.cc:1929
msgid "fastest [70dB/sec]"
msgstr "am schnellsten [70dB/sec]"
-#: rc_option_editor.cc:1939
+#: rc_option_editor.cc:1935
msgid "Meter line-up level; 0dBu"
msgstr "Ausrichtung der Pegelanzeige; 0dBu"
-#: rc_option_editor.cc:1944 rc_option_editor.cc:1960
+#: rc_option_editor.cc:1940 rc_option_editor.cc:1956
msgid "-24dBFS (SMPTE US: 4dBu = -20dBFS)"
msgstr "-24dBFS (SMPTE US: 4dBu = -20dBFS)"
-#: rc_option_editor.cc:1945 rc_option_editor.cc:1961
+#: rc_option_editor.cc:1941 rc_option_editor.cc:1957
msgid "-20dBFS (SMPTE RP.0155)"
msgstr "-20dBFS (SMPTE RP.0155)"
-#: rc_option_editor.cc:1946 rc_option_editor.cc:1962
+#: rc_option_editor.cc:1942 rc_option_editor.cc:1958
msgid "-18dBFS (EBU, BBC)"
msgstr "-18dBFS (EBU, BBC)"
-#: rc_option_editor.cc:1947 rc_option_editor.cc:1963
+#: rc_option_editor.cc:1943 rc_option_editor.cc:1959
msgid "-15dBFS (DIN)"
msgstr "-15dBFS (DIN)"
-#: rc_option_editor.cc:1949
+#: rc_option_editor.cc:1945
msgid ""
"Configure meter-marks and color-knee point for dBFS scale DPM, set reference "
"level for IEC1/Nordic, IEC2 PPM and VU meter."
@@ -9739,39 +9621,39 @@ msgstr ""
"Konfiguriere Skalierung und Farbschwellwert für DPM mit dBFS-Skala, "
"setzeReferenzpegel für IEC1/Nordisch, IEC2 PPM und VU Pegelanzeigen."
-#: rc_option_editor.cc:1955
+#: rc_option_editor.cc:1951
msgid "IEC1/DIN Meter line-up level; 0dBu"
msgstr "Ausrichtung der IEC1/DIN Pegelanzeige; 0dBu"
-#: rc_option_editor.cc:1965
+#: rc_option_editor.cc:1961
msgid "Reference level for IEC1/DIN meter."
msgstr "Referenzpegel für IEC1/DIN Pegelanzeige."
-#: rc_option_editor.cc:1971
+#: rc_option_editor.cc:1967
msgid "VU Meter standard"
msgstr "Standard für VU-Pegelanzeige"
-#: rc_option_editor.cc:1976
+#: rc_option_editor.cc:1972
msgid "0VU = -2dBu (France)"
msgstr "0VU = -2dBu (Frankreich)"
-#: rc_option_editor.cc:1977
+#: rc_option_editor.cc:1973
msgid "0VU = 0dBu (North America, Australia)"
msgstr "0VU = 0dBu (Nordamerika, Australien)"
-#: rc_option_editor.cc:1978
+#: rc_option_editor.cc:1974
msgid "0VU = +4dBu (standard)"
msgstr "0VU = +4dBu (Standard)"
-#: rc_option_editor.cc:1979
+#: rc_option_editor.cc:1975
msgid "0VU = +8dBu"
msgstr "0VU = +8dBu"
-#: rc_option_editor.cc:1985
+#: rc_option_editor.cc:1981
msgid "Peak threshold [dBFS]"
msgstr "Schwelle für Spitzenwert [dBFS]"
-#: rc_option_editor.cc:1993
+#: rc_option_editor.cc:1989
msgid ""
"Specify the audio signal level in dbFS at and above which the meter-peak "
"indicator will flash red."
@@ -9779,7 +9661,7 @@ msgstr ""
"Geben Sie den Signalpegel in dbFS an, bei dessen Erreichen oder "
"Überschreitung die Spitzenwertanzeige in der Pegelanzeige rot blinkt"
-#: rc_option_editor.cc:2000
+#: rc_option_editor.cc:1996
msgid "LED meter style"
msgstr "Pegelanzeigen im LED-Stil"
@@ -10496,6 +10378,118 @@ msgstr "Projektordner"
msgid "Send "
msgstr "Send "
+#: session_dialog.cc:66
+msgid "Session Setup"
+msgstr "Projekteinrichtung"
+
+#: session_dialog.cc:71
+msgid "Advanced options ..."
+msgstr "Erweiterte Einstellungen..."
+
+#: session_dialog.cc:247
+msgid "New Session"
+msgstr "Neues Projekt"
+
+#: session_dialog.cc:284
+msgid "Check the website for more..."
+msgstr "Informieren Sie sich auf der Webseite weiter..."
+
+#: session_dialog.cc:287
+msgid "Click to open the program website in your web browser"
+msgstr "Klicken Sie, um die Webseite in Ihrem Web-Browse zu öffnen"
+
+#: session_dialog.cc:307
+msgid "Sample Rate"
+msgstr "Samplerate"
+
+#: session_dialog.cc:308
+msgid "Disk Format"
+msgstr "Dateiformat"
+
+#: session_dialog.cc:326
+msgid "Select session file"
+msgstr "Projektdatei auswählen"
+
+#: session_dialog.cc:341
+msgid "Other Sessions"
+msgstr "Andere Projekte"
+
+#: session_dialog.cc:367
+msgid "Open"
+msgstr "Öffnen"
+
+#: session_dialog.cc:434
+msgid "Session name:"
+msgstr "Projektname:"
+
+#: session_dialog.cc:456
+msgid "Create session folder in:"
+msgstr "Ort des Projektverzeichnisses:"
+
+#: session_dialog.cc:479
+msgid "Select folder for session"
+msgstr "Ordner für Projekt wählen"
+
+#: session_dialog.cc:508
+msgid "Use this template"
+msgstr "Diese Vorlage verwenden"
+
+#: session_dialog.cc:511
+msgid "no template"
+msgstr "keine Vorlage"
+
+#: session_dialog.cc:643 session_dialog.cc:675
+msgid "32 bit float"
+msgstr "32 Bit float"
+
+#: session_dialog.cc:646 session_dialog.cc:678
+msgid "24 bit"
+msgstr "24 Bit"
+
+#: session_dialog.cc:649 session_dialog.cc:681
+msgid "16 bit"
+msgstr "16 Bit"
+
+#: session_dialog.cc:720 session_dialog.cc:721 session_dialog.cc:722
+msgid "channels"
+msgstr "Kanäle"
+
+#: session_dialog.cc:736
+msgid "<b>Busses</b>"
+msgstr "<b>Busse</b>"
+
+#: session_dialog.cc:737
+msgid "<b>Inputs</b>"
+msgstr "<b>Eingänge</b>"
+
+#: session_dialog.cc:738
+msgid "<b>Outputs</b>"
+msgstr "<b>Ausgänge</b>"
+
+#: session_dialog.cc:746
+msgid "Create master bus"
+msgstr "Master-Bus erstellen"
+
+#: session_dialog.cc:756
+msgid "Automatically connect to physical inputs"
+msgstr "Automatisch mit Audioeingängen verbinden"
+
+#: session_dialog.cc:763 session_dialog.cc:822
+msgid "Use only"
+msgstr "Benutze nur"
+
+#: session_dialog.cc:816
+msgid "Automatically connect outputs"
+msgstr "Ausgänge automatisch verbinden"
+
+#: session_dialog.cc:838
+msgid "... to master bus"
+msgstr "... mit dem Master-Bus"
+
+#: session_dialog.cc:848
+msgid "... to physical outputs"
+msgstr "... mit den Audioausgängen"
+
#: session_import_dialog.cc:64
msgid "Import from Session"
msgstr "Aus Projekt importieren"
@@ -11387,14 +11381,6 @@ msgid "Azimuth:"
msgstr "Azimut:"
#: startup.cc:72
-msgid "Create a new session"
-msgstr "Neues Projekt erzeugen"
-
-#: startup.cc:73
-msgid "Open an existing session"
-msgstr "Vorhandenes Projekt öffnen"
-
-#: startup.cc:74
msgid ""
"Use an external mixer or the hardware mixer of your audio interface.\n"
"%1 will play NO role in monitoring"
@@ -11402,15 +11388,11 @@ msgstr ""
"Verwende einen externen Mixer oder den Hardwaremixer der Audiohardware.\n"
"%1 wird das Monitoring NICHT übernehmen."
-#: startup.cc:76
+#: startup.cc:74
msgid "Ask %1 to play back material as it is being recorded"
msgstr "%1 soll laufende Aufnahmen wiedergeben"
-#: startup.cc:79
-msgid "I'd like more options for this session"
-msgstr "Erweiterte Optionen für dieses Projekt"
-
-#: startup.cc:194
+#: startup.cc:143
msgid ""
"<b>Welcome to this BETA release of Ardour %1</b>\n"
"\n"
@@ -11462,15 +11444,11 @@ msgstr ""
"\n"
" http://ardour.org/support\n"
-#: startup.cc:218
+#: startup.cc:167
msgid "This is a BETA RELEASE"
msgstr "Dies ist ein BETA RELEASE"
-#: startup.cc:324
-msgid "Audio / MIDI Setup"
-msgstr "Audio / MIDI Einstellungen"
-
-#: startup.cc:336
+#: startup.cc:176
msgid ""
"<span size=\"larger\">%1 is a digital audio workstation. You can use it to "
"record, edit and mix multi-track audio. You can produce your own CDs, mix "
@@ -11487,15 +11465,15 @@ msgstr ""
"Es gibt ein paar Dinge, die vor dem ersten Programmstart konfiguriert werden "
"müssen.</span>"
-#: startup.cc:362
+#: startup.cc:202
msgid "Welcome to %1"
msgstr "Willkommen zu %1"
-#: startup.cc:385
+#: startup.cc:225
msgid "Default folder for %1 sessions"
msgstr "Standardordner für %1 Projekte"
-#: startup.cc:391
+#: startup.cc:231
msgid ""
"Each project that you work on with %1 has its own folder.\n"
"These can require a lot of disk space if you are recording audio.\n"
@@ -11512,11 +11490,11 @@ msgstr ""
"<i>(Neue Projekte können überall abgespeichert werden, dies ist nur die "
"Vorgabe)</i>"
-#: startup.cc:415
+#: startup.cc:253
msgid "Default folder for new sessions"
msgstr "Standardordner für neue Projekte"
-#: startup.cc:436
+#: startup.cc:274
msgid ""
"While recording instruments or vocals, you probably want to listen to the\n"
"signal as well as record it. This is called \"monitoring\". There are\n"
@@ -11541,15 +11519,15 @@ msgstr ""
"\n"
"<i>If you do not understand what this is about, just accept the default.</i>"
-#: startup.cc:457
+#: startup.cc:295
msgid "Monitoring Choices"
msgstr "Auswahl des Monitoring"
-#: startup.cc:480
+#: startup.cc:318
msgid "Use a Master bus directly"
msgstr "Nutze den Master-Bus direkt"
-#: startup.cc:482
+#: startup.cc:320
msgid ""
"Connect the Master bus directly to your hardware outputs. This is preferable "
"for simple usage."
@@ -11557,11 +11535,11 @@ msgstr ""
"Verbinde den Master-Bus direkt mit den Audioausgängen. Wird für "
"einfacheAnwendungen empfohlen."
-#: startup.cc:491
+#: startup.cc:329
msgid "Use an additional Monitor bus"
msgstr "Nutze einen zusätzlichen Monitor-Bus"
-#: startup.cc:494
+#: startup.cc:332
msgid ""
"Use a Monitor bus between Master bus and hardware outputs for \n"
"greater control in monitoring without affecting the mix."
@@ -11569,7 +11547,7 @@ msgstr ""
"Nutze einen Monitor-Bus zwischen Master-Bus und Audioausgängen, um mehr\n"
"Möglichkeiten für das Monitoring zu bekommen, ohne den Mix zu beeinflussen."
-#: startup.cc:516
+#: startup.cc:354
msgid ""
"<i>You can change this preference at any time via the Preferences dialog.\n"
"You can also add or remove the monitor section to/from any session.</i>\n"
@@ -11583,110 +11561,10 @@ msgstr ""
"\n"
"</i>Im Zweifelsfall akzeptieren Sie die Voreinstellung.</i>"
-#: startup.cc:527
+#: startup.cc:365
msgid "Monitor Section"
msgstr "Monitorsektion"
-#: startup.cc:573
-msgid "Check the website for more..."
-msgstr "Informieren Sie sich auf der Webseite weiter..."
-
-#: startup.cc:576
-msgid "Click to open the program website in your web browser"
-msgstr "Klicken Sie, um die Webseite in Ihrem Web-Browse zu öffnen"
-
-#: startup.cc:729
-msgid "Open"
-msgstr "Öffnen"
-
-#: startup.cc:775
-msgid "Session name:"
-msgstr "Projektname:"
-
-#: startup.cc:798
-msgid "Create session folder in:"
-msgstr "Ort des Projektverzeichnisses:"
-
-#: startup.cc:821
-msgid "Select folder for session"
-msgstr "Ordner für Projekt wählen"
-
-#: startup.cc:853
-msgid "Use this template"
-msgstr "Diese Vorlage verwenden"
-
-#: startup.cc:856
-msgid "no template"
-msgstr "keine Vorlage"
-
-#: startup.cc:884
-msgid "Use an existing session as a template:"
-msgstr "Ein vorhandenes Projekt als Vorlage verwenden:"
-
-#: startup.cc:896
-msgid "Select template"
-msgstr "Vorlage auswählen"
-
-#: startup.cc:922
-msgid "New Session"
-msgstr "Neues Projekt"
-
-#: startup.cc:1077
-msgid "Select session file"
-msgstr "Projektdatei auswählen"
-
-#: startup.cc:1093
-msgid "Browse:"
-msgstr "Durchsuchen:"
-
-#: startup.cc:1102
-msgid "Select a session"
-msgstr "Projekt auswählen"
-
-#: startup.cc:1129 startup.cc:1130 startup.cc:1131
-msgid "channels"
-msgstr "Kanäle"
-
-#: startup.cc:1145
-msgid "<b>Busses</b>"
-msgstr "<b>Busse</b>"
-
-#: startup.cc:1146
-msgid "<b>Inputs</b>"
-msgstr "<b>Eingänge</b>"
-
-#: startup.cc:1147
-msgid "<b>Outputs</b>"
-msgstr "<b>Ausgänge</b>"
-
-#: startup.cc:1155
-msgid "Create master bus"
-msgstr "Master-Bus erstellen"
-
-#: startup.cc:1165
-msgid "Automatically connect to physical inputs"
-msgstr "Automatisch mit Audioeingängen verbinden"
-
-#: startup.cc:1172 startup.cc:1231
-msgid "Use only"
-msgstr "Benutze nur"
-
-#: startup.cc:1225
-msgid "Automatically connect outputs"
-msgstr "Ausgänge automatisch verbinden"
-
-#: startup.cc:1247
-msgid "... to master bus"
-msgstr "... mit dem Master-Bus"
-
-#: startup.cc:1257
-msgid "... to physical outputs"
-msgstr "... mit den Audioausgängen"
-
-#: startup.cc:1307
-msgid "Advanced Session Options"
-msgstr "Erweiterte Einstellungen"
-
#: step_entry.cc:59
msgid "Step Entry: %1"
msgstr "Eingabemodus (Step Entry): %1"
@@ -12364,23 +12242,23 @@ msgstr ""
msgid "Config file %1 not saved"
msgstr "Konfigurationsdatei %1 nicht gespeichert"
-#: utils.cc:110 utils.cc:153
+#: utils.cc:111 utils.cc:154
msgid "bad XPM header %1"
msgstr "Fehlerhafter XPM Header %1"
-#: utils.cc:292 utils.cc:324
+#: utils.cc:293 utils.cc:325
msgid "missing RGBA style for \"%1\""
msgstr "Fehlender RGBA Style für \"%1\""
-#: utils.cc:591
+#: utils.cc:598
msgid "cannot find XPM file for %1"
msgstr "Konnte XPM-Datei für %1 nicht finden"
-#: utils.cc:617
+#: utils.cc:624
msgid "cannot find icon image for %1 using %2"
msgstr "Konnte Icon-Bild für %1 unter %2 nicht finden"
-#: utils.cc:632
+#: utils.cc:639
msgid "Caught exception while loading icon named %1"
msgstr ""
"Während des Ladens des Icons mit dem Namen %1 trat ein Ausnahmefehler auf"
@@ -12809,51 +12687,55 @@ msgstr "von 00:00:00:00 bis Videoende"
msgid "from the video's start to the video's end"
msgstr "von Videostart bis Videoende"
-#: export_video_dialog.cc:184
+#: export_video_dialog.cc:154
+msgid "Selected range"
+msgstr "Ausgewählter Bereich"
+
+#: export_video_dialog.cc:190
msgid "<b>Settings:</b>"
msgstr "<b>Einstellungen:</b>"
-#: export_video_dialog.cc:192
+#: export_video_dialog.cc:198
msgid "Range:"
msgstr "Bereich:"
-#: export_video_dialog.cc:195
+#: export_video_dialog.cc:201
msgid "Preset:"
msgstr "Preset:"
-#: export_video_dialog.cc:198
+#: export_video_dialog.cc:204
msgid "Video Codec:"
msgstr "Videocodec:"
-#: export_video_dialog.cc:201
+#: export_video_dialog.cc:207
msgid "Video KBit/s:"
msgstr "Video KBit/s:"
-#: export_video_dialog.cc:204
+#: export_video_dialog.cc:210
msgid "Audio Codec:"
msgstr "Audiocodec:"
-#: export_video_dialog.cc:207
+#: export_video_dialog.cc:213
msgid "Audio KBit/s:"
msgstr "Audio KBit/s:"
-#: export_video_dialog.cc:210
+#: export_video_dialog.cc:216
msgid "Audio Samplerate:"
msgstr "Audiosamplerate:"
-#: export_video_dialog.cc:387
+#: export_video_dialog.cc:392
msgid "Normalizing audio"
msgstr "Audio normalisieren"
-#: export_video_dialog.cc:391
+#: export_video_dialog.cc:396
msgid "Exporting audio"
msgstr "Exportiere Audio"
-#: export_video_dialog.cc:437
+#: export_video_dialog.cc:442
msgid "Exporting Audio..."
msgstr "Exportiere Audio..."
-#: export_video_dialog.cc:494
+#: export_video_dialog.cc:499
msgid ""
"Export Video: Cannot query duration of video-file, using duration from "
"timeline instead."
@@ -12861,33 +12743,33 @@ msgstr ""
"Exportiere Video: Kann die Dauer der Videodatei nicht eruieren, verwende "
"statt dessen die Dauer aus der Zeitleiste."
-#: export_video_dialog.cc:523
+#: export_video_dialog.cc:533
msgid "Export Video: No Master Out Ports to Connect for Audio Export"
msgstr ""
"Exportiere Video: Keine Master-Ausgangsports zum Verbinden für den "
"Audioexport"
-#: export_video_dialog.cc:562
+#: export_video_dialog.cc:572
msgid "Encoding Video..."
msgstr "Enkodiere Video..."
-#: export_video_dialog.cc:581
+#: export_video_dialog.cc:591
msgid "Export Video: Video input file cannot be read."
msgstr "Exportiere Video: Die Videoquelldatei kann nicht gelesen werden."
-#: export_video_dialog.cc:679
+#: export_video_dialog.cc:684
msgid "Encoding Video.. Pass 1/2"
msgstr "Kodiere Video.. Durchgang 1/2"
-#: export_video_dialog.cc:691
+#: export_video_dialog.cc:696
msgid "Encoding Video.. Pass 2/2"
msgstr "Kodiere Video.. Durchgang 2/2"
-#: export_video_dialog.cc:779
+#: export_video_dialog.cc:803
msgid "Transcoding failed."
msgstr "Transkodieren fehlgeschlagen."
-#: export_video_dialog.cc:948 export_video_dialog.cc:968
+#: export_video_dialog.cc:972 export_video_dialog.cc:992
msgid "Save Exported Video File"
msgstr "Sichere exportierte Videodatei"
@@ -12920,6 +12802,286 @@ msgstr ""
"\n"
"Handbuch im Browser öffnen? "
+#~ msgid "Click the Refresh button to try again."
+#~ msgstr "Klicken Sie auf Aktualisieren, um es erneut zu versuchen."
+
+#~ msgid "JACK"
+#~ msgstr "JACK"
+
+#~ msgid "Reconnect"
+#~ msgstr "Verbinde neu"
+
+#~ msgid "Window|Audio/MIDI Setup"
+#~ msgstr "Audio/MIDI Einstellungen"
+
+#~ msgid "JACK Sampling Rate and Latency"
+#~ msgstr "JACK Samplerate und Latenz"
+
+#~ msgid "Launch Control App"
+#~ msgstr "Starte Steuerungsprogramm"
+
+#~ msgid ""
+#~ "1. <span weight=\"bold\">Turn down the volume on your hardware to a very "
+#~ "low level.</span>\n"
+#~ "\n"
+#~ "2. Connect the two channels that you select below using either a cable or "
+#~ "(less ideally) a speaker and microphone.\n"
+#~ "\n"
+#~ "3. Once the channels are connected, click the \"Measure latency\" "
+#~ "button.\n"
+#~ "\n"
+#~ "4. When satisfied with the results, click the \"Use results\" button."
+#~ msgstr ""
+#~ "1. <span weight=\"bold\">Stellen Sie die Lautstärke ihrer Hardware auf "
+#~ "einen sehr leisen Pegel.</span>\n"
+#~ "\n"
+#~ "2. Verbinden Sie die zwei Kanäle, die Sie unten auswählen, entweder per "
+#~ "Kabel oder (weniger ideal) per Lautsprecher und Mikrophon.\n"
+#~ "\n"
+#~ "3. Klicken Sie den Knopf \"Latenz messen\".\n"
+#~ "\n"
+#~ "4. Wenn Sie mit den Ergebnissen zufrieden sind, klicken Sie den Knopf "
+#~ "\"Benutze Egebnisse\"."
+
+#~ msgid ""
+#~ "There are several possible reasons:\n"
+#~ "\n"
+#~ "1) JACK is not running.\n"
+#~ "2) JACK is running as another user, perhaps root.\n"
+#~ "3) There is already another client called \"%1\".\n"
+#~ "\n"
+#~ "Please consider the possibilities, and perhaps (re)start JACK."
+#~ msgstr ""
+#~ "Dafür kann es verschiedene Gründe geben:\n"
+#~ "\n"
+#~ "1) JACK läuft nicht.\n"
+#~ "2) JACK wurde unter einem anderen Benutzer gestartet, möglicherweise als "
+#~ "root.\n"
+#~ "3) Es gibt bereits einen anderen Client mit der Bezeichnung \"%1\".\n"
+#~ "\n"
+#~ "Betrachten Sie bitte diese Möglichkeiten und starten Sie ggf. JACK neu."
+
+#~ msgid "Create a new session"
+#~ msgstr "Neues Projekt erzeugen"
+
+#~ msgid "Open an existing session"
+#~ msgstr "Vorhandenes Projekt öffnen"
+
+#~ msgid "I'd like more options for this session"
+#~ msgstr "Erweiterte Optionen für dieses Projekt"
+
+#~ msgid "Use an existing session as a template:"
+#~ msgstr "Ein vorhandenes Projekt als Vorlage verwenden:"
+
+#~ msgid "Select template"
+#~ msgstr "Vorlage auswählen"
+
+#~ msgid "Browse:"
+#~ msgstr "Durchsuchen:"
+
+#~ msgid "Select a session"
+#~ msgstr "Projekt auswählen"
+
+#~ msgid "Playback/recording on 1 device"
+#~ msgstr "Wiedergabe/Aufnahme mit einem Gerät"
+
+#~ msgid "Playback/recording on 2 devices"
+#~ msgstr "Wiedergabe/Aufnahme mit zwei Geräten"
+
+#~ msgid "Playback only"
+#~ msgstr "Nur Wiedergabe"
+
+#~ msgid "Recording only"
+#~ msgstr "Nur Aufnahme"
+
+#~ msgid "Realtime"
+#~ msgstr "Realtime"
+
+#~ msgid "Starting audio engine"
+#~ msgstr "Starte Audio-Engine"
+
+#~ msgid "disconnected"
+#~ msgstr "getrennt"
+
+#~ msgid "Unable to start the session running"
+#~ msgstr "Konnte das aktuelle Projekt nicht starten"
+
+#~ msgid "Do not lock memory"
+#~ msgstr "Speicherzugriff nicht sperren"
+
+#~ msgid "Unlock memory"
+#~ msgstr "Speicherzugriff öffnen"
+
+#~ msgid "No zombies"
+#~ msgstr "Keine Zombies (Soft Mode)"
+
+#~ msgid "Provide monitor ports"
+#~ msgstr "Monitor-Ports erstellen"
+
+#~ msgid "H/W monitoring"
+#~ msgstr "Hardware Monitoring"
+
+#~ msgid "H/W metering"
+#~ msgstr "Hardware-Pegelanzeige"
+
+#~ msgid "Verbose output"
+#~ msgstr "Ausführliche Statusmeldungen"
+
+#~ msgid "8000Hz"
+#~ msgstr "8000 Hz"
+
+#~ msgid "22050Hz"
+#~ msgstr "22050 Hz"
+
+#~ msgid "44100Hz"
+#~ msgstr "44100 Hz"
+
+#~ msgid "48000Hz"
+#~ msgstr "48000 Hz"
+
+#~ msgid "88200Hz"
+#~ msgstr "88200 Hz"
+
+#~ msgid "96000Hz"
+#~ msgstr "96000 Hz"
+
+#~ msgid "192000Hz"
+#~ msgstr "192000 Hz"
+
+#~ msgid "Triangular"
+#~ msgstr "dreieckig"
+
+#~ msgid "Rectangular"
+#~ msgstr "rechteckig"
+
+#~ msgid "Shaped"
+#~ msgstr "shaped"
+
+#~ msgid "coremidi"
+#~ msgstr "coremidi"
+
+#~ msgid "seq"
+#~ msgstr "seq"
+
+#~ msgid "raw"
+#~ msgstr "raw"
+
+#~ msgid "Audio Interface:"
+#~ msgstr "Audio-Schnittstelle:"
+
+#~ msgid "Number of buffers:"
+#~ msgstr "Pufferanzahl:"
+
+#~ msgid "Approximate latency:"
+#~ msgstr "Latenz (ca.)"
+
+#~ msgid "Audio mode:"
+#~ msgstr "Audio-Modus:"
+
+#~ msgid "Ignore"
+#~ msgstr "ignorieren"
+
+#~ msgid "Client timeout"
+#~ msgstr "Client Timeout"
+
+#~ msgid "Number of ports:"
+#~ msgstr "Portanzahl"
+
+#~ msgid "MIDI driver:"
+#~ msgstr "MIDI-Treiber:"
+
+#~ msgid "Dither:"
+#~ msgstr "Dithering:"
+
+#~ msgid ""
+#~ "No JACK server found anywhere on this system. Please install JACK and "
+#~ "restart"
+#~ msgstr ""
+#~ "Es wurde kein JACK Server auf diesem System gefunden. Bitte installieren "
+#~ "Sie JACK vor einem Neuversuch."
+
+#~ msgid "Server:"
+#~ msgstr "Server:"
+
+#~ msgid "Input device:"
+#~ msgstr "Eingangsgerät:"
+
+#~ msgid "Output device:"
+#~ msgstr "Ausgabegerät:"
+
+#~ msgid "Advanced"
+#~ msgstr "Erweitert"
+
+#~ msgid "cannot open JACK rc file %1 to store parameters"
+#~ msgstr "kann die JACK rc-Datei %1 nicht öffnen, um die Parameter zu sichern"
+
+#~ msgid ""
+#~ "You do not have any audio devices capable of\n"
+#~ "simultaneous playback and recording.\n"
+#~ "\n"
+#~ "Please use Applications -> Utilities -> Audio MIDI Setup\n"
+#~ "to create an \"aggregrate\" device, or install a suitable\n"
+#~ "audio interface.\n"
+#~ "\n"
+#~ "Please send email to Apple and ask them why new Macs\n"
+#~ "have no duplex audio device.\n"
+#~ "\n"
+#~ "Alternatively, if you really want just playback\n"
+#~ "or recording but not both, start JACK before running\n"
+#~ "%1 and choose the relevant device then."
+#~ msgstr ""
+#~ "Sie haben keine Soundkarte, die gleichzeitiges\n"
+#~ "Abspielen und Aufnehmen unterstützt.\n"
+#~ "\n"
+#~ "Benützen Sie Programme>Dienstprogramme>Audio-Midi-Setup\n"
+#~ " um ein kombiniertes Gerät zu erzeugen, oder installieren Sie ein\n"
+#~ "geeignetes Audiointerface.\n"
+#~ "\n"
+#~ "Bitte senden Sie eine E-Mail an Apple und fragen Sie, warum Sie\n"
+#~ "keine Duplex Soundkarte in Ihrem Mac haben.\n"
+#~ "\n"
+#~ "Wenn Sie Audiomaterial wirklich nicht gleichzeitig aufnehmen und "
+#~ "wiedergeben wollen,\n"
+#~ "können Sie JACK vor dem Starten von %1 aufrufen und das entsprechende "
+#~ "Gerät auswählen."
+
+#~ msgid "No suitable audio devices"
+#~ msgstr "Keine passenden Audiogeräte."
+
+#~ msgid "JACK appears to be missing from the %1 bundle"
+#~ msgstr "JACK scheint im %1-Paket zu fehlen."
+
+#~ msgid "You need to choose an audio device first."
+#~ msgstr "Sie müssen zuerst ein Audiogerät auswählen."
+
+#~ msgid "Audio device \"%1\" not known on this computer."
+#~ msgstr "Audiogerät %1 scheint auf diesem Computer nicht vorhanden zu sein."
+
+#~ msgid "AudioSetup value for %1 is missing data"
+#~ msgstr "Es fehlen Daten zum AudioSetup-Wert von %1"
+
+#~ msgid ""
+#~ "configuration files contain a JACK server path that doesn't exist (%1)"
+#~ msgstr ""
+#~ "die Konfiguration enthält einen JACK-Serverpfad, der nicht existiert (%1)"
+
+#~ msgid "JACK exited"
+#~ msgstr "JACK wurde beendet"
+
+#~ msgid ""
+#~ "JACK exited unexpectedly, and without notifying %1.\n"
+#~ "\n"
+#~ "This is probably due to an error inside JACK. You should restart JACK\n"
+#~ "and reconnect %1 to it, or exit %1 now. You cannot save your\n"
+#~ "session at this time, because we would lose your connection information.\n"
+#~ msgstr ""
+#~ "JACK wurde unerwartet und ohne Benachrichtigung beendet %1.\n"
+#~ "\n"
+#~ "Dies liegt wahrscheinlich an einem Fehler in JACK. Sie sollten\n"
+#~ "JACK neu starten und %1 erneut mit ihm verbinden, oder %1 jetzt beenden.\n"
+#~ "Momentan läßt sich das Projekt nicht speichern, da alle Informationen\n"
+#~ "über Verbindungen verloren gehen würden.\n"
+
#~ msgid "Failed to set session-framerate: "
#~ msgstr "Konnte Projekt-Framerate nicht einstellen: "
@@ -12974,9 +13136,6 @@ msgstr ""
#~ msgid "What would you like to do ?"
#~ msgstr "Was möchten Sie tun?"
-#~ msgid "Connect"
-#~ msgstr "Verbinden"
-
#~ msgid "Mixer on Top"
#~ msgstr "Mixer über Editor"
diff --git a/gtk2_ardour/po/ru.po b/gtk2_ardour/po/ru.po
index 1891a32bf1..2ceaf3c1b0 100644
--- a/gtk2_ardour/po/ru.po
+++ b/gtk2_ardour/po/ru.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Ardour 3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-03 07:59-0400\n"
-"PO-Revision-Date: 2013-07-14 18:04+0300\n"
+"POT-Creation-Date: 2013-10-15 21:42+0400\n"
+"PO-Revision-Date: 2013-10-15 23:24+0300\n"
"Last-Translator: Александр Прокудин <alexandre.prokoudine@gmail.com>\n"
"Language-Team: русский <>\n"
"Language: ru\n"
@@ -449,8 +449,8 @@ msgstr "Шины"
msgid "Add:"
msgstr "Добавить:"
-#: add_route_dialog.cc:114 startup.cc:841 time_fx_dialog.cc:91
-#: add_video_dialog.cc:150 video_server_dialog.cc:112
+#: add_route_dialog.cc:114 time_fx_dialog.cc:91 add_video_dialog.cc:150
+#: video_server_dialog.cc:112
msgid "<b>Options</b>"
msgstr "<b>Параметры</b>"
@@ -464,21 +464,22 @@ msgid "Group:"
msgstr "Группа:"
#: add_route_dialog.cc:215 add_route_dialog.cc:224 add_route_dialog.cc:298
-#: rc_option_editor.cc:1456 rc_option_editor.cc:1458 rc_option_editor.cc:1460
-#: rc_option_editor.cc:1478 rc_option_editor.cc:1480 rc_option_editor.cc:1488
-#: rc_option_editor.cc:1490 rc_option_editor.cc:1508 rc_option_editor.cc:1521
-#: rc_option_editor.cc:1523 rc_option_editor.cc:1525 rc_option_editor.cc:1556
-#: rc_option_editor.cc:1558 rc_option_editor.cc:1560 rc_option_editor.cc:1568
-#: rc_option_editor.cc:1576 rc_option_editor.cc:1584
+#: ardour_ui_ed.cc:476 engine_dialog.cc:238 rc_option_editor.cc:1454
+#: rc_option_editor.cc:1456 rc_option_editor.cc:1458 rc_option_editor.cc:1474
+#: rc_option_editor.cc:1476 rc_option_editor.cc:1484 rc_option_editor.cc:1486
+#: rc_option_editor.cc:1504 rc_option_editor.cc:1517 rc_option_editor.cc:1519
+#: rc_option_editor.cc:1521 rc_option_editor.cc:1552 rc_option_editor.cc:1554
+#: rc_option_editor.cc:1556 rc_option_editor.cc:1564 rc_option_editor.cc:1572
+#: rc_option_editor.cc:1580
msgid "Audio"
msgstr "Audio"
#: add_route_dialog.cc:216 add_route_dialog.cc:227 add_route_dialog.cc:299
-#: editor_actions.cc:105 missing_file_dialog.cc:55 rc_option_editor.cc:1707
-#: rc_option_editor.cc:1715 rc_option_editor.cc:1723 rc_option_editor.cc:1732
-#: rc_option_editor.cc:1740 rc_option_editor.cc:1748 rc_option_editor.cc:1756
-#: rc_option_editor.cc:1765 rc_option_editor.cc:1774 rc_option_editor.cc:1783
-#: rc_option_editor.cc:1791 rc_option_editor.cc:1799
+#: editor_actions.cc:105 missing_file_dialog.cc:55 rc_option_editor.cc:1703
+#: rc_option_editor.cc:1711 rc_option_editor.cc:1719 rc_option_editor.cc:1728
+#: rc_option_editor.cc:1736 rc_option_editor.cc:1744 rc_option_editor.cc:1752
+#: rc_option_editor.cc:1761 rc_option_editor.cc:1770 rc_option_editor.cc:1779
+#: rc_option_editor.cc:1787 rc_option_editor.cc:1795
msgid "MIDI"
msgstr "MIDI"
@@ -628,7 +629,7 @@ msgstr "Нормировать значения"
msgid "FFT analysis window"
msgstr "Спектральный анализ"
-#: analysis_window.cc:60 editor.cc:1856
+#: analysis_window.cc:60 editor.cc:1857
msgid "Spectral Analysis"
msgstr "Спектральный анализ"
@@ -650,50 +651,54 @@ msgstr "Повторно проанализировать данные"
msgid "button cannot watch state of non-existing Controllable\n"
msgstr ""
-#: ardour_ui.cc:180
+#: ardour_ui.cc:179
msgid "audition"
msgstr "прослушивание"
-#: ardour_ui.cc:181
+#: ardour_ui.cc:180
msgid "solo"
msgstr "солирование"
-#: ardour_ui.cc:182
+#: ardour_ui.cc:181
msgid "feedback"
msgstr "отклик"
-#: ardour_ui.cc:187 speaker_dialog.cc:36
+#: ardour_ui.cc:186 speaker_dialog.cc:36
msgid "Speaker Configuration"
msgstr "Конфигурация громкоговорителей"
-#: ardour_ui.cc:188 theme_manager.cc:56 theme_manager.cc:64
+#: ardour_ui.cc:187 theme_manager.cc:56 theme_manager.cc:64
msgid "Theme Manager"
msgstr "Стиль оформления"
-#: ardour_ui.cc:189 keyeditor.cc:53
+#: ardour_ui.cc:188 keyeditor.cc:53
msgid "Key Bindings"
msgstr "Клавиатурные комбинации"
-#: ardour_ui.cc:190
+#: ardour_ui.cc:189
msgid "Preferences"
msgstr "Параметры"
-#: ardour_ui.cc:191 ardour_ui.cc:196
+#: ardour_ui.cc:190 ardour_ui.cc:196
msgid "Add Tracks/Busses"
msgstr "Добавить дорожки/шины"
-#: ardour_ui.cc:192
+#: ardour_ui.cc:191
msgid "About"
msgstr "О программе"
-#: ardour_ui.cc:193 location_ui.cc:1146
+#: ardour_ui.cc:192 location_ui.cc:1146
msgid "Locations"
msgstr "Позиции"
-#: ardour_ui.cc:194 route_params_ui.cc:58 route_params_ui.cc:606
+#: ardour_ui.cc:193 route_params_ui.cc:58 route_params_ui.cc:606
msgid "Tracks and Busses"
msgstr "Дорожки и шины"
+#: ardour_ui.cc:194 engine_dialog.cc:67
+msgid "Audio/MIDI Setup"
+msgstr "Настройка звука и MIDI"
+
#: ardour_ui.cc:195
msgid "Properties"
msgstr "Свойства"
@@ -718,15 +723,30 @@ msgstr "Соединения MIDI"
msgid "Errors"
msgstr "Ошибки"
-#: ardour_ui.cc:388
-msgid "Starting audio engine"
-msgstr "Запускается звуковой движок"
+#: ardour_ui.cc:435
+msgid ""
+"The audio backend was shutdown because:\n"
+"\n"
+"%1"
+msgstr ""
+
+#: ardour_ui.cc:437
+msgid ""
+"The audio backend has either been shutdown or it\n"
+"disconnected %1 because %1\n"
+"was not fast enough. Try to restart\n"
+"the audio backend and save the session."
+msgstr ""
+"Звуковая подсистема либо завершила работу, либо\n"
+"отсоединила %1, потому что %1\n"
+"работал недостаточно быстро. Попробуйте снова\n"
+"запустить подсистему и сохранить сеанс."
-#: ardour_ui.cc:758 startup.cc:638
+#: ardour_ui.cc:826 startup.cc:379
msgid "%1 is ready for use"
msgstr "%1 готов к работе"
-#: ardour_ui.cc:806
+#: ardour_ui.cc:875
msgid ""
"WARNING: Your system has a limit for maximum amount of locked memory. This "
"might cause %1 to run out of memory before your system runs out of memory. \n"
@@ -741,23 +761,23 @@ msgstr ""
"Вы можете узнать установленный предел при помощи команды 'ulimit -l'. Обычно "
"это контролируется в %2."
-#: ardour_ui.cc:823
+#: ardour_ui.cc:892
msgid "Do not show this window again"
msgstr "Больше не показывать это окно"
-#: ardour_ui.cc:865
+#: ardour_ui.cc:934
msgid "Don't quit"
msgstr "Не выходить"
-#: ardour_ui.cc:866
+#: ardour_ui.cc:935
msgid "Just quit"
msgstr "Просто выйти"
-#: ardour_ui.cc:867
+#: ardour_ui.cc:936
msgid "Save and quit"
msgstr "Сохранить и выйти"
-#: ardour_ui.cc:877
+#: ardour_ui.cc:946
msgid ""
"%1 was unable to save your session.\n"
"\n"
@@ -772,15 +792,15 @@ msgstr ""
"\n"
"«Просто выйти»."
-#: ardour_ui.cc:908
+#: ardour_ui.cc:977
msgid "Please wait while %1 cleans up..."
msgstr "Дождитесь завершения подчистки сеанса в %1..."
-#: ardour_ui.cc:925
+#: ardour_ui.cc:995
msgid "Unsaved Session"
msgstr "Сеанс не сохранён"
-#: ardour_ui.cc:946
+#: ardour_ui.cc:1016
msgid ""
"The session \"%1\"\n"
"has not been saved.\n"
@@ -798,7 +818,7 @@ msgstr ""
"\n"
"Что вы хотите сделать?"
-#: ardour_ui.cc:949
+#: ardour_ui.cc:1019
msgid ""
"The snapshot \"%1\"\n"
"has not been saved.\n"
@@ -816,74 +836,75 @@ msgstr ""
"\n"
"Что вы хотите сделать?"
-#: ardour_ui.cc:963
+#: ardour_ui.cc:1033
msgid "Prompter"
msgstr ""
-#: ardour_ui.cc:1049
-msgid "disconnected"
-msgstr "отсоединено"
+#: ardour_ui.cc:1119 ardour_ui.cc:1127
+#, c-format
+msgid "Audio: <span foreground=\"red\">none</span>"
+msgstr "Звук: <span foreground=\"red\">нет</span>"
-#: ardour_ui.cc:1056
+#: ardour_ui.cc:1131
#, c-format
-msgid "JACK: <span foreground=\"green\">%.1f kHz / %4.1f ms</span>"
-msgstr "JACK: <span foreground=\"green\">%.1f КГц / %4.1f мс</span>"
+msgid "Audio: <span foreground=\"green\">%.1f kHz / %4.1f ms</span>"
+msgstr "Звук: <span foreground=\"green\">%.1f КГц / %4.1f мс</span>"
-#: ardour_ui.cc:1060
+#: ardour_ui.cc:1135
#, c-format
-msgid "JACK: <span foreground=\"green\">%<PRId64> kHz / %4.1f ms</span>"
-msgstr "JACK: <span foreground=\"green\">%<PRId64> КГц / %4.1f мс</span>"
+msgid "Audio: <span foreground=\"green\">%<PRId64> kHz / %4.1f ms</span>"
+msgstr "Звук: <span foreground=\"green\">%<PRId64> КГц / %4.1f мс</span>"
-#: ardour_ui.cc:1078 export_video_dialog.cc:68
+#: ardour_ui.cc:1153 export_video_dialog.cc:67
msgid "File:"
msgstr "Файл:"
-#: ardour_ui.cc:1082
+#: ardour_ui.cc:1157
msgid "BWF"
msgstr "BWF"
-#: ardour_ui.cc:1085
+#: ardour_ui.cc:1160
msgid "WAV"
msgstr "WAV"
-#: ardour_ui.cc:1088
+#: ardour_ui.cc:1163
msgid "WAV64"
msgstr "WAV64"
-#: ardour_ui.cc:1091 session_option_editor.cc:197
+#: ardour_ui.cc:1166 session_option_editor.cc:197
msgid "CAF"
msgstr "CAF"
-#: ardour_ui.cc:1094
+#: ardour_ui.cc:1169
msgid "AIFF"
msgstr "AIFF"
-#: ardour_ui.cc:1097
+#: ardour_ui.cc:1172
msgid "iXML"
msgstr "iXML"
-#: ardour_ui.cc:1100
+#: ardour_ui.cc:1175
msgid "RF64"
msgstr "RF64"
-#: ardour_ui.cc:1108
+#: ardour_ui.cc:1183
msgid "32-float"
msgstr "32-float"
-#: ardour_ui.cc:1111
+#: ardour_ui.cc:1186
msgid "24-int"
msgstr "24-int"
-#: ardour_ui.cc:1114
+#: ardour_ui.cc:1189
msgid "16-int"
msgstr "16-int"
-#: ardour_ui.cc:1133
+#: ardour_ui.cc:1208
#, c-format
msgid "DSP: <span foreground=\"%s\">%5.1f%%</span>"
msgstr "ЦП: <span foreground=\"%s\">%5.1f%%</span>"
-#: ardour_ui.cc:1152
+#: ardour_ui.cc:1227
#, c-format
msgid ""
"Buffers: <span foreground=\"green\">p:</span><span foreground=\"%s\">"
@@ -894,61 +915,62 @@ msgstr ""
"%%</span> <span foreground=\"green\">c:</span><span foreground=\"%s\">"
"%<PRIu32>%%</span>"
-#: ardour_ui.cc:1188
+#: ardour_ui.cc:1268
msgid "Disk: <span foreground=\"green\">Unknown</span>"
msgstr "На диске: <span foreground=\"green\">неизвестно</span>"
-#: ardour_ui.cc:1190
+#: ardour_ui.cc:1270
msgid "Disk: <span foreground=\"green\">24hrs+</span>"
msgstr "На диске: <span foreground=\"green\">24ч+</span>"
-#: ardour_ui.cc:1208
+#: ardour_ui.cc:1288
msgid "Disk: <span foreground=\"green\">&gt;24 hrs</span>"
msgstr "На диске: <span foreground=\"green\">&gt;24ч</span>"
-#: ardour_ui.cc:1219
+#: ardour_ui.cc:1299
#, c-format
msgid "Disk: <span foreground=\"%s\">%02dh:%02dm:%02ds</span>"
msgstr "На диске: <span foreground=\"%s\">%02dч:%02dм:%02dс</span>"
-#: ardour_ui.cc:1245
+#: ardour_ui.cc:1325
#, c-format
msgid "Timecode|TC: <span foreground=\"%s\">%s</span>"
msgstr "ТК: <span foreground=\"%s\">%s</span>"
-#: ardour_ui.cc:1362 ardour_ui.cc:1371 startup.cc:1054
+#: ardour_ui.cc:1442 ardour_ui.cc:1451 session_dialog.cc:322
+#: session_dialog.cc:327
msgid "Recent Sessions"
msgstr "Недавние сеансы"
-#: ardour_ui.cc:1451
+#: ardour_ui.cc:1530
msgid ""
-"%1 is not connected to JACK\n"
+"%1 is not connected to any audio backend.\n"
"You cannot open or close sessions in this condition"
msgstr ""
-"%1 не соединен с JACK.\n"
+"%1 не соединен с какой-либо звуковой подсистемой.\n"
"Открытие и закрытие сеансов невозможно."
-#: ardour_ui.cc:1478
+#: ardour_ui.cc:1554
msgid "Open Session"
msgstr "Открыть сеанс"
-#: ardour_ui.cc:1503 session_import_dialog.cc:169
-#: session_metadata_dialog.cc:729 startup.cc:1083
+#: ardour_ui.cc:1579 session_dialog.cc:353 session_import_dialog.cc:169
+#: session_metadata_dialog.cc:729
msgid "%1 sessions"
msgstr "Cеансы %1"
-#: ardour_ui.cc:1540
+#: ardour_ui.cc:1616
msgid "You cannot add a track without a session already loaded."
msgstr "Вы не можете добавить дорожку без загруженного сеанса."
-#: ardour_ui.cc:1548
+#: ardour_ui.cc:1624
msgid "could not create %1 new mixed track"
msgid_plural "could not create %1 new mixed tracks"
msgstr[0] "Не удалось создать %1 новую смешанную дорожку"
msgstr[1] "Не удалось создать %1 новых смешанных дорожки"
msgstr[2] "Не удалось создать %1 новых смешанных дорожек"
-#: ardour_ui.cc:1554 ardour_ui.cc:1615
+#: ardour_ui.cc:1630 ardour_ui.cc:1691
msgid ""
"There are insufficient JACK ports available\n"
"to create a new track or bus.\n"
@@ -960,25 +982,25 @@ msgstr ""
"Необходимо сохранить %1, выйти и запустить\n"
"JACK с увеличенным количеством портов."
-#: ardour_ui.cc:1589
+#: ardour_ui.cc:1665
msgid "You cannot add a track or bus without a session already loaded."
msgstr "Вы не можете добавить дорожку или шину без открытого сеанса."
-#: ardour_ui.cc:1598
+#: ardour_ui.cc:1674
msgid "could not create %1 new audio track"
msgid_plural "could not create %1 new audio tracks"
msgstr[0] "Не удалось создать %1 новую звуковую дорожку"
msgstr[1] "Не удалось создать %2 новых звуковых дорожки"
msgstr[2] "Не удалось создать %2 новых звуковых дорожек"
-#: ardour_ui.cc:1607
+#: ardour_ui.cc:1683
msgid "could not create %1 new audio bus"
msgid_plural "could not create %1 new audio busses"
msgstr[0] "Не удалось создать %1 новую звуковую шину"
msgstr[1] "Не удалось создать %1 новых звуковых шины"
msgstr[2] "Не удалось создать %1 новых звуковых шин"
-#: ardour_ui.cc:1724
+#: ardour_ui.cc:1807
msgid ""
"Please create one or more tracks before trying to record.\n"
"You can do this with the \"Add Track or Bus\" option in the Session menu."
@@ -987,37 +1009,15 @@ msgstr ""
"как пытаться что-либо записать.\n"
"Используйте меню «Сеанс > Добавить дорожку/шину»."
-#: ardour_ui.cc:2114
-msgid ""
-"The audio backend (JACK) was shutdown because:\n"
-"\n"
-"%1"
-msgstr ""
-
-#: ardour_ui.cc:2116
-msgid ""
-"JACK has either been shutdown or it\n"
-"disconnected %1 because %1\n"
-"was not fast enough. Try to restart\n"
-"JACK, reconnect and save the session."
-msgstr ""
-"JACK завершил работу или потерял синхронизацию\n"
-"с %1 и отсоединил его. Необходимо перезапустить \n"
-"JACK, восстановить соединение и сохранить сеанс."
-
-#: ardour_ui.cc:2142
-msgid "Unable to start the session running"
-msgstr "Невозможно запустить уже выполняемый сеанс"
-
-#: ardour_ui.cc:2222
+#: ardour_ui.cc:2184
msgid "Take Snapshot"
msgstr "Создать снимок"
-#: ardour_ui.cc:2223
+#: ardour_ui.cc:2185
msgid "Name of new snapshot"
msgstr "Название нового снимка"
-#: ardour_ui.cc:2247
+#: ardour_ui.cc:2209
msgid ""
"To ensure compatibility with various systems\n"
"snapshot names may not contain a '%1' character"
@@ -1025,27 +1025,27 @@ msgstr ""
"Для обеспечения совместимости с различными системами\n"
"названия снимков не могут содержать символ '%1'."
-#: ardour_ui.cc:2259
+#: ardour_ui.cc:2221
msgid "Confirm Snapshot Overwrite"
msgstr "Подтвердите перезапись снимка"
-#: ardour_ui.cc:2260
+#: ardour_ui.cc:2222
msgid "A snapshot already exists with that name. Do you want to overwrite it?"
msgstr "Снимок с таким названием уже есть. Перезаписать его?"
-#: ardour_ui.cc:2263 utils_videotl.cc:67
+#: ardour_ui.cc:2225 utils_videotl.cc:67
msgid "Overwrite"
msgstr "Перезаписать"
-#: ardour_ui.cc:2297
+#: ardour_ui.cc:2259
msgid "Rename Session"
msgstr "Переименовать сеанс"
-#: ardour_ui.cc:2298
+#: ardour_ui.cc:2260
msgid "New session name"
msgstr "Новое название сеанса"
-#: ardour_ui.cc:2312 ardour_ui.cc:2692 ardour_ui.cc:2737
+#: ardour_ui.cc:2274 ardour_ui.cc:2675 ardour_ui.cc:2713
msgid ""
"To ensure compatibility with various systems\n"
"session names may not contain a '%1' character"
@@ -1053,12 +1053,12 @@ msgstr ""
"Для обеспечения совместимости с различными системами\n"
"названия сеансов не могут содержать символ '%1'."
-#: ardour_ui.cc:2320
+#: ardour_ui.cc:2282
msgid ""
"That name is already in use by another directory/folder. Please try again."
msgstr ""
-#: ardour_ui.cc:2329
+#: ardour_ui.cc:2291
msgid ""
"Renaming this session failed.\n"
"Things could be seriously messed up at this point"
@@ -1066,19 +1066,19 @@ msgstr ""
"Не удалось переименовать этот сеанс.\n"
"Очень может быть, что всё испортилось."
-#: ardour_ui.cc:2440
+#: ardour_ui.cc:2402
msgid "Save Template"
msgstr "Сохранить шаблон"
-#: ardour_ui.cc:2441
+#: ardour_ui.cc:2403
msgid "Name for template:"
msgstr "Название шаблона:"
-#: ardour_ui.cc:2442
+#: ardour_ui.cc:2404
msgid "-template"
msgstr "-шаблон"
-#: ardour_ui.cc:2480
+#: ardour_ui.cc:2442
msgid ""
"This session\n"
"%1\n"
@@ -1088,52 +1088,62 @@ msgstr ""
"%1\n"
"уже существует. Открыть его?"
-#: ardour_ui.cc:2490
+#: ardour_ui.cc:2452
msgid "Open Existing Session"
msgstr "Открыть существующий сеанс"
-#: ardour_ui.cc:2728
+#: ardour_ui.cc:2703
msgid "There is no existing session at \"%1\""
msgstr "По адресу \"%1\" не существующего сеанса"
-#: ardour_ui.cc:2815
+#: ardour_ui.cc:2795
msgid "Please wait while %1 loads your session"
msgstr "Дождитесь завершения загрузки сеанса в %1"
-#: ardour_ui.cc:2830
+#: ardour_ui.cc:2810
msgid "Port Registration Error"
msgstr "Ошибка регистрации порта"
-#: ardour_ui.cc:2831
+#: ardour_ui.cc:2811
msgid "Click the Close button to try again."
msgstr "Щелкните кнопку «Закрыть» для возврата к предыдущему диалогу."
-#: ardour_ui.cc:2852
+#: ardour_ui.cc:2832
msgid "Session \"%1 (snapshot %2)\" did not load successfully"
msgstr "Не удалось загрузить сеанс \"%1 (снимок %2)\""
-#: ardour_ui.cc:2858
+#: ardour_ui.cc:2839
msgid "Loading Error"
msgstr "Ошибка при загрузке"
-#: ardour_ui.cc:2859
-msgid "Click the Refresh button to try again."
-msgstr "Щёлкните кнопку «Обновить» для повторной попытки."
+#: ardour_ui.cc:2858
+msgid ""
+"This session has been opened in read-only mode.\n"
+"\n"
+"You will not be able to record or save."
+msgstr ""
+"Этот сеанс открыт в режиме только чтения.\n"
+"\n"
+"Вы не сможете записывать или сохранять."
+
+#: ardour_ui.cc:2864
+msgid "Read-only Session"
+msgstr "Сеанс в режиме чтения"
-#: ardour_ui.cc:2941
+#: ardour_ui.cc:2922
msgid "Could not create session in \"%1\""
msgstr "Не удалось создать сеанс «%1»"
-#: ardour_ui.cc:3041
+#: ardour_ui.cc:3022
msgid "No files were ready for clean-up"
msgstr "Нет готовых к удалению звуковых файлов"
-#: ardour_ui.cc:3045 ardour_ui.cc:3055 ardour_ui.cc:3188 ardour_ui.cc:3195
+#: ardour_ui.cc:3026 ardour_ui.cc:3036 ardour_ui.cc:3169 ardour_ui.cc:3176
#: ardour_ui_ed.cc:104
msgid "Clean-up"
msgstr "Очистить"
-#: ardour_ui.cc:3046
+#: ardour_ui.cc:3027
msgid ""
"If this seems suprising, \n"
"check for any existing snapshots.\n"
@@ -1145,19 +1155,19 @@ msgstr ""
"Они могут включать области, которым\n"
"нужны неиспользуемые файлы."
-#: ardour_ui.cc:3105
+#: ardour_ui.cc:3086
msgid "kilo"
msgstr "кило"
-#: ardour_ui.cc:3108
+#: ardour_ui.cc:3089
msgid "mega"
msgstr "мега"
-#: ardour_ui.cc:3111
+#: ardour_ui.cc:3092
msgid "giga"
msgstr "гига"
-#: ardour_ui.cc:3116
+#: ardour_ui.cc:3097
msgid ""
"The following file was deleted from %2,\n"
"releasing %3 %4bytes of disk space"
@@ -1177,7 +1187,7 @@ msgstr[2] ""
"освободив при этом %3 %4байт\n"
"дискового пространства."
-#: ardour_ui.cc:3123
+#: ardour_ui.cc:3104
msgid ""
"The following file was not in use and \n"
"has been moved to: %2\n"
@@ -1224,11 +1234,11 @@ msgstr[2] ""
"\n"
"дополнительно освободит %3 %4байт дискового пространства.\n"
-#: ardour_ui.cc:3183
+#: ardour_ui.cc:3164
msgid "Are you sure you want to clean-up?"
msgstr "Вы уверены, что хотите выполнить очистку?"
-#: ardour_ui.cc:3190
+#: ardour_ui.cc:3171
msgid ""
"Clean-up is a destructive operation.\n"
"ALL undo/redo information will be lost if you clean-up.\n"
@@ -1239,80 +1249,81 @@ msgstr ""
"неиспользуемые звуковые файлы\n"
"будут перемещены в «мертвую» зону."
-#: ardour_ui.cc:3198
+#: ardour_ui.cc:3179
msgid "CleanupDialog"
msgstr "Очистка"
-#: ardour_ui.cc:3228
+#: ardour_ui.cc:3209
msgid "Cleaned Files"
msgstr "Очищенные файлы"
-#: ardour_ui.cc:3245
+#: ardour_ui.cc:3226
msgid "deleted file"
msgstr "удалён файл"
-#: ardour_ui.cc:3337
+#: ardour_ui.cc:3318
msgid ""
"Video-Server was not launched by Ardour. The request to stop it is ignored."
msgstr ""
+"Видеосервер не был запущен Ardour. Запрос на его остановку проигнорирован."
-#: ardour_ui.cc:3341
+#: ardour_ui.cc:3322
msgid "Stop Video-Server"
-msgstr ""
+msgstr "Остановить видеосервер"
-#: ardour_ui.cc:3342
+#: ardour_ui.cc:3323
msgid "Do you really want to stop the Video Server?"
msgstr "Вы действительно хотите остановить видеосервер?"
-#: ardour_ui.cc:3345
+#: ardour_ui.cc:3326
msgid "Yes, Stop It"
msgstr "Да, остановить"
-#: ardour_ui.cc:3371
+#: ardour_ui.cc:3352
msgid "The Video Server is already started."
msgstr ""
-#: ardour_ui.cc:3373
+#: ardour_ui.cc:3354
msgid ""
"An external Video Server is configured and can be reached. Not starting a "
"new instance."
msgstr ""
-#: ardour_ui.cc:3381 ardour_ui.cc:3471
+#: ardour_ui.cc:3362 ardour_ui.cc:3452
msgid ""
"Could not connect to the Video Server. Start it or configure its access URL "
"in Edit -> Preferences."
msgstr ""
-#: ardour_ui.cc:3405
+#: ardour_ui.cc:3386
msgid "Specified docroot is not an existing directory."
msgstr ""
-#: ardour_ui.cc:3410
+#: ardour_ui.cc:3391
msgid "Given Video Server is not an executable file."
msgstr ""
-#: ardour_ui.cc:3443
+#: ardour_ui.cc:3424
msgid "Cannot launch the video-server"
msgstr "Не удалось запустить видеосервер"
-#: ardour_ui.cc:3452
+#: ardour_ui.cc:3433
msgid "Video-server was started but does not respond to requests..."
msgstr ""
-#: ardour_ui.cc:3497 editor_audio_import.cc:632
+#: ardour_ui.cc:3478 editor_audio_import.cc:632
msgid "could not open %1"
msgstr "не удалось открыть %1"
-#: ardour_ui.cc:3501
+#: ardour_ui.cc:3482
msgid "no video-file selected"
msgstr ""
-#: ardour_ui.cc:3673
+#: ardour_ui.cc:3654
msgid "Recording was stopped because your system could not keep up."
msgstr "Запись остановлена из-за недостаточного быстродействия системы"
-#: ardour_ui.cc:3702
+#: ardour_ui.cc:3683
msgid ""
"The disk system on your computer\n"
"was not able to keep up with %1.\n"
@@ -1326,7 +1337,7 @@ msgstr ""
"В частности ей не удалось записать данные на диск\n"
"достаточно быстро для фиксации захваченных данных.\n"
-#: ardour_ui.cc:3721
+#: ardour_ui.cc:3702
msgid ""
"The disk system on your computer\n"
"was not able to keep up with %1.\n"
@@ -1340,11 +1351,11 @@ msgstr ""
"В частности ей не удалось прочитать данные\n"
"с диска достаточно быстро для воспроизведения.\n"
-#: ardour_ui.cc:3761
+#: ardour_ui.cc:3742
msgid "Crash Recovery"
msgstr "Восстановление данных"
-#: ardour_ui.cc:3762
+#: ardour_ui.cc:3743
msgid ""
"This session appears to have been in the\n"
"middle of recording when %1 or\n"
@@ -1360,19 +1371,19 @@ msgstr ""
"%1 может восстановить записанные данные,\n"
"либо проигнорировать их. Примите решение.\n"
-#: ardour_ui.cc:3774
+#: ardour_ui.cc:3755
msgid "Ignore crash data"
msgstr "Проигнорировать"
-#: ardour_ui.cc:3775
+#: ardour_ui.cc:3756
msgid "Recover from crash"
msgstr "Восстановить данные"
-#: ardour_ui.cc:3795
+#: ardour_ui.cc:3776
msgid "Sample Rate Mismatch"
msgstr "Несовпадение частот сэмплирования"
-#: ardour_ui.cc:3796
+#: ardour_ui.cc:3777
msgid ""
"This session was created with a sample rate of %1 Hz, but\n"
"%2 is currently running at %3 Hz. If you load this session,\n"
@@ -1384,23 +1395,23 @@ msgstr ""
"Если вы загрузите этот сеанс, звуковые данные могут быть\n"
"воспроизведены с некорректной частотой сэмплирования.\n"
-#: ardour_ui.cc:3805
+#: ardour_ui.cc:3786
msgid "Do not load session"
msgstr "Не загружать сеанс"
-#: ardour_ui.cc:3806
+#: ardour_ui.cc:3787
msgid "Load session anyway"
msgstr "Все равно загрузить"
-#: ardour_ui.cc:3829
-msgid "Could not disconnect from JACK"
-msgstr "Не удалось отсоединиться от сервера JACK"
+#: ardour_ui.cc:3814
+msgid "Could not disconnect from Audio/MIDI engine"
+msgstr "Не удалось отсоединиться от аудио/MIDI-подсистемы."
-#: ardour_ui.cc:3842
-msgid "Could not reconnect to JACK"
-msgstr "Не удалось соединиться с сервером JACK"
+#: ardour_ui.cc:3830 ardour_ui.cc:3833
+msgid "Could not reconnect to the Audio/MIDI engine"
+msgstr "Не удалось повторно соединиться с аудио/MIDI-подсистемой."
-#: ardour_ui.cc:4116
+#: ardour_ui.cc:4109
msgid ""
"%4This is a session from an older version of %3%5\n"
"\n"
@@ -1524,9 +1535,8 @@ msgstr ""
"'+' или '-' вводит разницу во времени.\n"
#: ardour_ui2.cc:147
-#, fuzzy
msgid "Reset Level Meter"
-msgstr "Сбросить огибающую"
+msgstr "Сбросить индикатор громкости"
#: ardour_ui2.cc:179
msgid "[ERROR]: "
@@ -1540,51 +1550,51 @@ msgstr "[ПРЕДУПРЕЖДЕНИЕ]:"
msgid "[INFO]: "
msgstr "[СПРАВКА]:"
-#: ardour_ui2.cc:247 ardour_ui_ed.cc:377
+#: ardour_ui2.cc:247 ardour_ui_ed.cc:344
msgid "Auto Return"
msgstr "Автовозврат"
-#: ardour_ui2.cc:249 ardour_ui_ed.cc:380
+#: ardour_ui2.cc:249 ardour_ui_ed.cc:347
msgid "Follow Edits"
msgstr "Следовать правкам"
-#: ardour_ui2.cc:628 rc_option_editor.cc:1004 rc_option_editor.cc:1022
-#: rc_option_editor.cc:1025 rc_option_editor.cc:1027 rc_option_editor.cc:1029
-#: rc_option_editor.cc:1037 rc_option_editor.cc:1045 rc_option_editor.cc:1047
-#: rc_option_editor.cc:1055 rc_option_editor.cc:1062 rc_option_editor.cc:1071
-#: rc_option_editor.cc:1073 rc_option_editor.cc:1075 rc_option_editor.cc:1083
-#: rc_option_editor.cc:1085 rc_option_editor.cc:1094
+#: ardour_ui2.cc:628 rc_option_editor.cc:1002 rc_option_editor.cc:1020
+#: rc_option_editor.cc:1023 rc_option_editor.cc:1025 rc_option_editor.cc:1027
+#: rc_option_editor.cc:1035 rc_option_editor.cc:1043 rc_option_editor.cc:1045
+#: rc_option_editor.cc:1053 rc_option_editor.cc:1060 rc_option_editor.cc:1069
+#: rc_option_editor.cc:1071 rc_option_editor.cc:1073 rc_option_editor.cc:1081
+#: rc_option_editor.cc:1083 rc_option_editor.cc:1092
#: session_option_editor.cc:234 session_option_editor.cc:236
#: session_option_editor.cc:257 session_option_editor.cc:259
#: session_option_editor.cc:261 session_option_editor.cc:268
msgid "Misc"
msgstr "Прочее"
-#: ardour_ui_dependents.cc:77
+#: ardour_ui_dependents.cc:69
msgid "Setup Editor"
msgstr "Настройка редактора"
-#: ardour_ui_dependents.cc:79
+#: ardour_ui_dependents.cc:71
msgid "Setup Mixer"
msgstr "Настройка микшера"
-#: ardour_ui_dependents.cc:85
+#: ardour_ui_dependents.cc:77
msgid "Reload Session History"
msgstr "Повторная загрузка истории сеансов"
-#: ardour_ui_dialogs.cc:242
+#: ardour_ui_dialogs.cc:238
msgid "Don't close"
msgstr "Не закрывать"
-#: ardour_ui_dialogs.cc:243
+#: ardour_ui_dialogs.cc:239
msgid "Just close"
msgstr "Просто закрыть"
-#: ardour_ui_dialogs.cc:244
+#: ardour_ui_dialogs.cc:240
msgid "Save and close"
msgstr "Сохранить и закрыть"
-#: ardour_ui_dialogs.cc:340
+#: ardour_ui_dialogs.cc:339
msgid "This screen is not tall enough to display the mixer window"
msgstr "Размеров экрана недостаточно, чтобы показать окно микшера"
@@ -1593,11 +1603,11 @@ msgid "Session"
msgstr "Сеанс"
#: ardour_ui_ed.cc:106 editor_actions.cc:134 editor_regions.cc:115
-#: port_group.cc:457 session_option_editor.cc:82 session_option_editor.cc:89
+#: port_group.cc:458 session_option_editor.cc:82 session_option_editor.cc:89
msgid "Sync"
msgstr "Синхронизация"
-#: ardour_ui_ed.cc:107 engine_dialog.cc:369
+#: ardour_ui_ed.cc:107
msgid "Options"
msgstr "Параметры"
@@ -1625,15 +1635,15 @@ msgstr "Тип файла"
msgid "Sample Format"
msgstr "Формат сэмпла"
-#: ardour_ui_ed.cc:114 rc_option_editor.cc:1826 rc_option_editor.cc:1839
+#: ardour_ui_ed.cc:114 rc_option_editor.cc:1822 rc_option_editor.cc:1835
msgid "Control Surfaces"
msgstr "Устройства управления"
-#: ardour_ui_ed.cc:115 rc_option_editor.cc:1558
+#: ardour_ui_ed.cc:115 rc_option_editor.cc:1554
msgid "Plugins"
msgstr "Модули"
-#: ardour_ui_ed.cc:116 rc_option_editor.cc:1902
+#: ardour_ui_ed.cc:116 rc_option_editor.cc:1898
msgid "Metering"
msgstr "Индикаторы"
@@ -1719,7 +1729,7 @@ msgid "Stem export..."
msgstr "Каждую дорожку в свой файл..."
#: ardour_ui_ed.cc:175 editor_export_audio.cc:63 export_dialog.cc:129
-#: export_video_dialog.cc:72
+#: export_video_dialog.cc:71
msgid "Export"
msgstr "Экспортировать"
@@ -1731,170 +1741,153 @@ msgstr "Очистить неиспользуемые источники..."
msgid "Flush Wastebasket"
msgstr "Очистить корзину"
-#: ardour_ui_ed.cc:189 keyeditor.cc:253 rc_option_editor.cc:1472
-msgid "JACK"
-msgstr "JACK"
-
-#: ardour_ui_ed.cc:190 route_params_ui.cc:105
-msgid "Latency"
-msgstr "Задержка отклика"
-
-#: ardour_ui_ed.cc:192
-msgid "Reconnect"
-msgstr "Пересоединить"
-
-#: ardour_ui_ed.cc:195 global_port_matrix.cc:207 io_selector.cc:210
-#: mixer_strip.cc:719 mixer_strip.cc:845
-msgid "Disconnect"
-msgstr "Отсоединить"
-
-#: ardour_ui_ed.cc:222
+#: ardour_ui_ed.cc:189
msgid "Quit"
msgstr "Выход"
-#: ardour_ui_ed.cc:226
+#: ardour_ui_ed.cc:193
msgid "Maximise Editor Space"
msgstr "Редактор на полный экран"
-#: ardour_ui_ed.cc:227
+#: ardour_ui_ed.cc:194
msgid "Show Toolbars"
msgstr "Показывать панели"
-#: ardour_ui_ed.cc:230 mixer_ui.cc:1865 mixer_ui.cc:1871
+#: ardour_ui_ed.cc:197 mixer_ui.cc:1865 mixer_ui.cc:1871
msgid "Window|Mixer"
msgstr "Микшер"
-#: ardour_ui_ed.cc:231
+#: ardour_ui_ed.cc:198
msgid "Toggle Editor+Mixer"
msgstr "Редактор или микшер на переднем плане"
-#: ardour_ui_ed.cc:232 meterbridge.cc:230 meterbridge.cc:236
+#: ardour_ui_ed.cc:199 meterbridge.cc:230 meterbridge.cc:236
msgid "Window|Meterbridge"
msgstr "Панель индикаторов"
-#: ardour_ui_ed.cc:234 midi_tracer.cc:39
+#: ardour_ui_ed.cc:201 midi_tracer.cc:42
msgid "MIDI Tracer"
msgstr "Журнал MIDI-событий"
-#: ardour_ui_ed.cc:236
+#: ardour_ui_ed.cc:203
msgid "Chat"
msgstr "Пообщаться"
-#: ardour_ui_ed.cc:238
+#: ardour_ui_ed.cc:205
msgid "Help|Manual"
msgstr "Справка"
-#: ardour_ui_ed.cc:239
+#: ardour_ui_ed.cc:206
msgid "Reference"
msgstr "Справка в Интернете"
-#: ardour_ui_ed.cc:241 plugin_ui.cc:418
+#: ardour_ui_ed.cc:208 plugin_ui.cc:415
msgid "Save"
msgstr "Сохранить"
-#: ardour_ui_ed.cc:249 rc_option_editor.cc:1114 rc_option_editor.cc:1125
-#: rc_option_editor.cc:1134 rc_option_editor.cc:1147 rc_option_editor.cc:1160
-#: rc_option_editor.cc:1169 rc_option_editor.cc:1179 rc_option_editor.cc:1181
-#: rc_option_editor.cc:1191 rc_option_editor.cc:1207 rc_option_editor.cc:1220
-#: rc_option_editor.cc:1238 rc_option_editor.cc:1240 rc_option_editor.cc:1254
-#: rc_option_editor.cc:1257 rc_option_editor.cc:1259 rc_option_editor.cc:1276
-#: rc_option_editor.cc:1287
+#: ardour_ui_ed.cc:216 rc_option_editor.cc:1112 rc_option_editor.cc:1123
+#: rc_option_editor.cc:1132 rc_option_editor.cc:1145 rc_option_editor.cc:1158
+#: rc_option_editor.cc:1167 rc_option_editor.cc:1177 rc_option_editor.cc:1179
+#: rc_option_editor.cc:1189 rc_option_editor.cc:1205 rc_option_editor.cc:1218
+#: rc_option_editor.cc:1236 rc_option_editor.cc:1238 rc_option_editor.cc:1252
+#: rc_option_editor.cc:1255 rc_option_editor.cc:1257 rc_option_editor.cc:1274
+#: rc_option_editor.cc:1285
msgid "Transport"
msgstr "Транспорт"
-#: ardour_ui_ed.cc:255 engine_dialog.cc:85
+#: ardour_ui_ed.cc:222
msgid "Stop"
msgstr "Стоп"
-#: ardour_ui_ed.cc:258
+#: ardour_ui_ed.cc:225
msgid "Roll"
msgstr ""
-#: ardour_ui_ed.cc:262
+#: ardour_ui_ed.cc:229
msgid "Start/Stop"
msgstr "Старт/Стоп"
-#: ardour_ui_ed.cc:265
+#: ardour_ui_ed.cc:232
msgid "Start/Continue/Stop"
msgstr "Старт/Продолжить/Стоп"
-#: ardour_ui_ed.cc:268
+#: ardour_ui_ed.cc:235
msgid "Stop and Forget Capture"
msgstr "Остановиться и забыть захват"
-#: ardour_ui_ed.cc:278
+#: ardour_ui_ed.cc:245
msgid "Transition To Roll"
msgstr "В обычном направлении"
-#: ardour_ui_ed.cc:282
+#: ardour_ui_ed.cc:249
msgid "Transition To Reverse"
msgstr "В обратном направлении"
-#: ardour_ui_ed.cc:286
+#: ardour_ui_ed.cc:253
msgid "Play Loop Range"
msgstr "Воспроизвести петлю"
-#: ardour_ui_ed.cc:289
+#: ardour_ui_ed.cc:256
msgid "Play Selected Range"
msgstr ""
-#: ardour_ui_ed.cc:292
+#: ardour_ui_ed.cc:259
msgid "Play Selection w/Preroll"
msgstr ""
-#: ardour_ui_ed.cc:296
+#: ardour_ui_ed.cc:263
msgid "Enable Record"
msgstr "Разрешить запись"
-#: ardour_ui_ed.cc:299
+#: ardour_ui_ed.cc:266
msgid "Start Recording"
msgstr "Начать запись"
-#: ardour_ui_ed.cc:303
+#: ardour_ui_ed.cc:270
msgid "Rewind"
msgstr "Перемотать назад"
-#: ardour_ui_ed.cc:306
+#: ardour_ui_ed.cc:273
msgid "Rewind (Slow)"
msgstr "Перемотать назад (медленно)"
-#: ardour_ui_ed.cc:309
+#: ardour_ui_ed.cc:276
msgid "Rewind (Fast)"
msgstr "Перемотать назад (быстро)"
-#: ardour_ui_ed.cc:312 startup.cc:727
+#: ardour_ui_ed.cc:279
msgid "Forward"
msgstr "Перемотать вперёд"
-#: ardour_ui_ed.cc:315
+#: ardour_ui_ed.cc:282
msgid "Forward (Slow)"
msgstr "Перемотать вперёд (медленно)"
-#: ardour_ui_ed.cc:318
+#: ardour_ui_ed.cc:285
msgid "Forward (Fast)"
msgstr "Перемотать вперёд (быстро)"
-#: ardour_ui_ed.cc:321
+#: ardour_ui_ed.cc:288
msgid "Goto Zero"
msgstr "К нулевой отметке"
-#: ardour_ui_ed.cc:324
+#: ardour_ui_ed.cc:291
msgid "Goto Start"
msgstr "К началу"
-#: ardour_ui_ed.cc:327
+#: ardour_ui_ed.cc:294
msgid "Goto End"
msgstr "В конец"
-#: ardour_ui_ed.cc:330
+#: ardour_ui_ed.cc:297
msgid "Goto Wall Clock"
msgstr "К текущему времени"
-#: ardour_ui_ed.cc:334
+#: ardour_ui_ed.cc:301
msgid "Focus On Clock"
msgstr ""
-#: ardour_ui_ed.cc:338 ardour_ui_ed.cc:347 audio_clock.cc:2046 editor.cc:237
+#: ardour_ui_ed.cc:305 ardour_ui_ed.cc:314 audio_clock.cc:2046 editor.cc:237
#: editor_actions.cc:544 editor_actions.cc:553 export_timespan_selector.cc:88
#: session_option_editor.cc:41 session_option_editor.cc:61
#: session_option_editor.cc:80 session_option_editor.cc:96
@@ -1903,143 +1896,139 @@ msgstr ""
msgid "Timecode"
msgstr "Тайм-код"
-#: ardour_ui_ed.cc:340 ardour_ui_ed.cc:349 editor_actions.cc:542
+#: ardour_ui_ed.cc:307 ardour_ui_ed.cc:316 editor_actions.cc:542
msgid "Bars & Beats"
msgstr "Такты и доли"
-#: ardour_ui_ed.cc:342 ardour_ui_ed.cc:351
+#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:318
msgid "Minutes & Seconds"
msgstr "Минуты и секунды"
-#: ardour_ui_ed.cc:344 ardour_ui_ed.cc:353 audio_clock.cc:2050 editor.cc:238
+#: ardour_ui_ed.cc:311 ardour_ui_ed.cc:320 audio_clock.cc:2050 editor.cc:238
#: editor_actions.cc:543
msgid "Samples"
msgstr "Сэмплы"
-#: ardour_ui_ed.cc:356
+#: ardour_ui_ed.cc:323
msgid "Punch In"
msgstr "Начало врезки"
-#: ardour_ui_ed.cc:357 mixer_strip.cc:1905 route_ui.cc:137
+#: ardour_ui_ed.cc:324 mixer_strip.cc:1905 route_ui.cc:137
#: time_info_box.cc:113
msgid "In"
msgstr "Вход"
-#: ardour_ui_ed.cc:360
+#: ardour_ui_ed.cc:327
msgid "Punch Out"
msgstr "Конец врезки"
-#: ardour_ui_ed.cc:361 time_info_box.cc:114
+#: ardour_ui_ed.cc:328 time_info_box.cc:114
msgid "Out"
msgstr "Выход"
-#: ardour_ui_ed.cc:364
+#: ardour_ui_ed.cc:331
msgid "Punch In/Out"
msgstr "Врезка"
-#: ardour_ui_ed.cc:365
+#: ardour_ui_ed.cc:332
msgid "In/Out"
msgstr "Вх/Вых"
-#: ardour_ui_ed.cc:368 rc_option_editor.cc:1071
+#: ardour_ui_ed.cc:335 rc_option_editor.cc:1069
msgid "Click"
msgstr "Метроном"
-#: ardour_ui_ed.cc:371
+#: ardour_ui_ed.cc:338
msgid "Auto Input"
msgstr "Автовход"
-#: ardour_ui_ed.cc:374
+#: ardour_ui_ed.cc:341
msgid "Auto Play"
msgstr "Автовоспр."
-#: ardour_ui_ed.cc:385
+#: ardour_ui_ed.cc:352
msgid "Sync Startup to Video"
msgstr "Синхронизировать начало с видео"
-#: ardour_ui_ed.cc:387
+#: ardour_ui_ed.cc:354
msgid "Time Master"
msgstr "Ведущий времени"
-#: ardour_ui_ed.cc:394
+#: ardour_ui_ed.cc:361
msgid "Toggle Record Enable Track %1"
msgstr "Переключить записываемость дорожки %1"
-#: ardour_ui_ed.cc:401
+#: ardour_ui_ed.cc:368
msgid "Percentage"
msgstr "Проценты"
-#: ardour_ui_ed.cc:402 shuttle_control.cc:169
+#: ardour_ui_ed.cc:369 shuttle_control.cc:169
msgid "Semitones"
msgstr "Полутона"
-#: ardour_ui_ed.cc:406
+#: ardour_ui_ed.cc:373
msgid "Send MTC"
msgstr "Передавать MTC"
-#: ardour_ui_ed.cc:408
+#: ardour_ui_ed.cc:375
msgid "Send MMC"
msgstr "Передавать MMC"
-#: ardour_ui_ed.cc:410
+#: ardour_ui_ed.cc:377
msgid "Use MMC"
msgstr "Использовать MMC"
-#: ardour_ui_ed.cc:412 rc_option_editor.cc:1710
+#: ardour_ui_ed.cc:379 rc_option_editor.cc:1706
msgid "Send MIDI Clock"
msgstr "Отправлять MIDI Clock"
-#: ardour_ui_ed.cc:414
+#: ardour_ui_ed.cc:381
msgid "Send MIDI Feedback"
msgstr "Отправлять MIDI Feedback"
-#: ardour_ui_ed.cc:420
+#: ardour_ui_ed.cc:387
msgid "Panic"
msgstr ""
-#: ardour_ui_ed.cc:560
+#: ardour_ui_ed.cc:472
msgid "Wall Clock"
msgstr "Текущее время"
-#: ardour_ui_ed.cc:561
+#: ardour_ui_ed.cc:473
msgid "Disk Space"
msgstr "Диск. пространство"
-#: ardour_ui_ed.cc:562
+#: ardour_ui_ed.cc:474
msgid "DSP"
msgstr "DSP"
-#: ardour_ui_ed.cc:563
+#: ardour_ui_ed.cc:475
msgid "Buffers"
msgstr "Буферы"
-#: ardour_ui_ed.cc:564
-msgid "JACK Sampling Rate and Latency"
-msgstr "Частота сэмплирования и задержка JACK"
-
-#: ardour_ui_ed.cc:565
+#: ardour_ui_ed.cc:477
msgid "Timecode Format"
msgstr "Формат тайм-кода"
-#: ardour_ui_ed.cc:566
+#: ardour_ui_ed.cc:478
msgid "File Format"
msgstr "Формат файлов"
-#: ardour_ui_options.cc:65
+#: ardour_ui_options.cc:61
msgid ""
"It is not possible to use JACK as the the sync source\n"
"when the pull up/down setting is non-zero."
msgstr ""
-#: ardour_ui_options.cc:321
+#: ardour_ui_options.cc:317
msgid "Internal"
msgstr "Внутр. синхронизация"
-#: ardour_ui_options.cc:482
+#: ardour_ui_options.cc:468
msgid "Enable/Disable external positional sync"
msgstr "Включить или выключить внешнюю синхронизацию позиционирования"
-#: ardour_ui_options.cc:484
+#: ardour_ui_options.cc:470
msgid "Sync to JACK is not possible: video pull up/down is set"
msgstr ""
@@ -2158,32 +2147,32 @@ msgid "hide track"
msgstr "Скрыть дорожку"
#: automation_time_axis.cc:255 automation_time_axis.cc:307
-#: automation_time_axis.cc:496 gain_meter.cc:195 generic_pluginui.cc:456
-#: generic_pluginui.cc:746 panner_ui.cc:150
+#: automation_time_axis.cc:496 gain_meter.cc:194 generic_pluginui.cc:454
+#: generic_pluginui.cc:744 panner_ui.cc:149
msgid "Automation|Manual"
msgstr "Вручную"
#: automation_time_axis.cc:257 automation_time_axis.cc:318
-#: automation_time_axis.cc:501 editor.cc:1933 editor.cc:2010
-#: editor_actions.cc:118 editor_actions.cc:1865 gain_meter.cc:198
-#: generic_pluginui.cc:459 generic_pluginui.cc:748 midi_time_axis.cc:1488
-#: midi_time_axis.cc:1491 midi_time_axis.cc:1494 panner_ui.cc:153
+#: automation_time_axis.cc:501 editor.cc:1937 editor.cc:2014
+#: editor_actions.cc:118 editor_actions.cc:1865 gain_meter.cc:197
+#: generic_pluginui.cc:457 generic_pluginui.cc:746 midi_time_axis.cc:1488
+#: midi_time_axis.cc:1491 midi_time_axis.cc:1494 panner_ui.cc:152
msgid "Play"
msgstr "Воспр."
#: automation_time_axis.cc:259 automation_time_axis.cc:329
-#: automation_time_axis.cc:506 gain_meter.cc:201 generic_pluginui.cc:462
-#: generic_pluginui.cc:750 panner_ui.cc:156
+#: automation_time_axis.cc:506 gain_meter.cc:200 generic_pluginui.cc:460
+#: generic_pluginui.cc:748 panner_ui.cc:155
msgid "Write"
msgstr "Запись"
#: automation_time_axis.cc:261 automation_time_axis.cc:340
-#: automation_time_axis.cc:511 gain_meter.cc:204 generic_pluginui.cc:465
-#: generic_pluginui.cc:752 panner_ui.cc:159
+#: automation_time_axis.cc:511 gain_meter.cc:203 generic_pluginui.cc:463
+#: generic_pluginui.cc:750 panner_ui.cc:158
msgid "Touch"
msgstr "Касание"
-#: automation_time_axis.cc:351 generic_pluginui.cc:468 meter_patterns.cc:108
+#: automation_time_axis.cc:351 generic_pluginui.cc:466 meter_patterns.cc:108
msgid "???"
msgstr "???"
@@ -2208,8 +2197,8 @@ msgstr "Состояние"
msgid "Discrete"
msgstr "Дискретный"
-#: automation_time_axis.cc:537 editor.cc:1457 editor.cc:1464 editor.cc:1520
-#: editor.cc:1526 export_format_dialog.cc:476
+#: automation_time_axis.cc:537 editor.cc:1458 editor.cc:1465 editor.cc:1521
+#: editor.cc:1527 export_format_dialog.cc:476
msgid "Linear"
msgstr "Линейная"
@@ -2240,13 +2229,13 @@ msgstr "Вход"
msgid "Output"
msgstr "Выход"
-#: bundle_manager.cc:264 editor.cc:1974 editor_actions.cc:90
+#: bundle_manager.cc:264 editor.cc:1978 editor_actions.cc:90
#: editor_actions.cc:100
msgid "Edit"
msgstr "Правка"
-#: bundle_manager.cc:265 editor.cc:5493 editor_actions.cc:310
-#: editor_actions.cc:368 plugin_ui.cc:419 processor_box.cc:2229
+#: bundle_manager.cc:265 editor.cc:5497 editor_actions.cc:310
+#: editor_actions.cc:368 plugin_ui.cc:416 processor_box.cc:2268
#: route_time_axis.cc:713
msgid "Delete"
msgstr "Удалить"
@@ -2423,164 +2412,164 @@ msgstr "Длительность"
msgid "edit note"
msgstr "правка ноты"
-#: editor.cc:137 editor.cc:3429
+#: editor.cc:137 editor.cc:3433
msgid "CD Frames"
msgstr "Выборки CD"
-#: editor.cc:138 editor.cc:3431
+#: editor.cc:138 editor.cc:3435
msgid "Timecode Frames"
msgstr ""
-#: editor.cc:139 editor.cc:3433
+#: editor.cc:139 editor.cc:3437
msgid "Timecode Seconds"
msgstr ""
-#: editor.cc:140 editor.cc:3435
+#: editor.cc:140 editor.cc:3439
msgid "Timecode Minutes"
msgstr ""
-#: editor.cc:141 editor.cc:3437
+#: editor.cc:141 editor.cc:3441
msgid "Seconds"
msgstr "Секунды"
-#: editor.cc:142 editor.cc:3439
+#: editor.cc:142 editor.cc:3443
msgid "Minutes"
msgstr "Минуты"
-#: editor.cc:143 editor.cc:3413 quantize_dialog.cc:37 quantize_dialog.cc:141
+#: editor.cc:143 editor.cc:3417 quantize_dialog.cc:37 quantize_dialog.cc:141
msgid "Beats/128"
msgstr "Доли/128"
-#: editor.cc:144 editor.cc:3411 quantize_dialog.cc:38 quantize_dialog.cc:143
+#: editor.cc:144 editor.cc:3415 quantize_dialog.cc:38 quantize_dialog.cc:143
msgid "Beats/64"
msgstr "Доли/64"
-#: editor.cc:145 editor.cc:3409 quantize_dialog.cc:39 quantize_dialog.cc:145
+#: editor.cc:145 editor.cc:3413 quantize_dialog.cc:39 quantize_dialog.cc:145
msgid "Beats/32"
msgstr "Доли/32"
-#: editor.cc:146 editor.cc:3407
+#: editor.cc:146 editor.cc:3411
msgid "Beats/28"
msgstr "Доли/28"
-#: editor.cc:147 editor.cc:3405
+#: editor.cc:147 editor.cc:3409
msgid "Beats/24"
msgstr "Доли/24"
-#: editor.cc:148 editor.cc:3403
+#: editor.cc:148 editor.cc:3407
msgid "Beats/20"
msgstr "Доли/20"
-#: editor.cc:149 editor.cc:3401 quantize_dialog.cc:40 quantize_dialog.cc:147
+#: editor.cc:149 editor.cc:3405 quantize_dialog.cc:40 quantize_dialog.cc:147
msgid "Beats/16"
msgstr "Доли/16"
-#: editor.cc:150 editor.cc:3399
+#: editor.cc:150 editor.cc:3403
msgid "Beats/14"
msgstr "Доли/14"
-#: editor.cc:151 editor.cc:3397
+#: editor.cc:151 editor.cc:3401
msgid "Beats/12"
msgstr "Доли/12"
-#: editor.cc:152 editor.cc:3395
+#: editor.cc:152 editor.cc:3399
msgid "Beats/10"
msgstr "Доли/10"
-#: editor.cc:153 editor.cc:3393 quantize_dialog.cc:41 quantize_dialog.cc:149
+#: editor.cc:153 editor.cc:3397 quantize_dialog.cc:41 quantize_dialog.cc:149
msgid "Beats/8"
msgstr "Доли/8"
-#: editor.cc:154 editor.cc:3391
+#: editor.cc:154 editor.cc:3395
msgid "Beats/7"
msgstr "Доли/7"
-#: editor.cc:155 editor.cc:3389
+#: editor.cc:155 editor.cc:3393
msgid "Beats/6"
msgstr "Доли/6"
-#: editor.cc:156 editor.cc:3387
+#: editor.cc:156 editor.cc:3391
msgid "Beats/5"
msgstr "Доли/5"
-#: editor.cc:157 editor.cc:3385 quantize_dialog.cc:42 quantize_dialog.cc:151
+#: editor.cc:157 editor.cc:3389 quantize_dialog.cc:42 quantize_dialog.cc:151
msgid "Beats/4"
msgstr "Доли/4"
-#: editor.cc:158 editor.cc:3383 quantize_dialog.cc:43 quantize_dialog.cc:153
+#: editor.cc:158 editor.cc:3387 quantize_dialog.cc:43 quantize_dialog.cc:153
msgid "Beats/3"
msgstr "Доли/3"
-#: editor.cc:159 editor.cc:3381 quantize_dialog.cc:44 quantize_dialog.cc:155
+#: editor.cc:159 editor.cc:3385 quantize_dialog.cc:44 quantize_dialog.cc:155
msgid "Beats/2"
msgstr "Доли/2"
-#: editor.cc:160 editor.cc:3415 quantize_dialog.cc:45 quantize_dialog.cc:157
+#: editor.cc:160 editor.cc:3419 quantize_dialog.cc:45 quantize_dialog.cc:157
msgid "Beats"
msgstr "Доли"
-#: editor.cc:161 editor.cc:3417
+#: editor.cc:161 editor.cc:3421
msgid "Bars"
msgstr "Такты"
-#: editor.cc:162 editor.cc:3419
+#: editor.cc:162 editor.cc:3423
msgid "Marks"
msgstr "Маркеры"
-#: editor.cc:163 editor.cc:3421
+#: editor.cc:163 editor.cc:3425
msgid "Region starts"
msgstr "Начала областей"
-#: editor.cc:164 editor.cc:3423
+#: editor.cc:164 editor.cc:3427
msgid "Region ends"
msgstr "Концы областей"
-#: editor.cc:165 editor.cc:3427
+#: editor.cc:165 editor.cc:3431
msgid "Region syncs"
msgstr "Синхр. областей"
-#: editor.cc:166 editor.cc:3425
+#: editor.cc:166 editor.cc:3429
msgid "Region bounds"
msgstr "Границы областей"
-#: editor.cc:171 editor.cc:3455 editor_actions.cc:485
+#: editor.cc:171 editor.cc:3459 editor_actions.cc:485
msgid "No Grid"
msgstr "Без сетки"
-#: editor.cc:172 editor.cc:3457 editor_actions.cc:486
+#: editor.cc:172 editor.cc:3461 editor_actions.cc:486
msgid "Grid"
msgstr "По сетке"
-#: editor.cc:173 editor.cc:3459 editor_actions.cc:487
+#: editor.cc:173 editor.cc:3463 editor_actions.cc:487
msgid "Magnetic"
msgstr "Магнит"
-#: editor.cc:178 editor.cc:188 editor.cc:3498 editor.cc:3523
+#: editor.cc:178 editor.cc:188 editor.cc:3502 editor.cc:3527
#: editor_actions.cc:117 editor_actions.cc:468
msgid "Playhead"
msgstr "Указатель воспроизведения"
-#: editor.cc:179 editor.cc:3496 editor_actions.cc:470
+#: editor.cc:179 editor.cc:3500 editor_actions.cc:470
msgid "Marker"
msgstr "Маркер"
-#: editor.cc:180 editor.cc:189 editor.cc:3525 editor_actions.cc:469
+#: editor.cc:180 editor.cc:189 editor.cc:3529 editor_actions.cc:469
msgid "Mouse"
msgstr "Мышь"
-#: editor.cc:185 editor.cc:3517 mono_panner_editor.cc:42
+#: editor.cc:185 editor.cc:3521 mono_panner_editor.cc:42
msgid "Left"
msgstr "Влево"
-#: editor.cc:186 editor.cc:3519 mono_panner_editor.cc:47
+#: editor.cc:186 editor.cc:3523 mono_panner_editor.cc:47
msgid "Right"
msgstr "Вправо"
-#: editor.cc:187 editor.cc:3521
+#: editor.cc:187 editor.cc:3525
msgid "Center"
msgstr "По центру"
-#: editor.cc:190 editor.cc:3090 editor.cc:3527
+#: editor.cc:190 editor.cc:3094 editor.cc:3531
msgid "Edit point"
msgstr "Курсор редактора"
@@ -2640,337 +2629,341 @@ msgstr "Видеолинейка"
msgid "mode"
msgstr "Режим"
-#: editor.cc:542
+#: editor.cc:541
msgid "Regions"
msgstr "Области"
-#: editor.cc:543
+#: editor.cc:542
msgid "Tracks & Busses"
msgstr "Дорожки и шины"
-#: editor.cc:544
+#: editor.cc:543
msgid "Snapshots"
msgstr "Снимки"
-#: editor.cc:545
+#: editor.cc:544
msgid "Track & Bus Groups"
msgstr "Группы дорожек и шин"
-#: editor.cc:546
+#: editor.cc:545
msgid "Ranges & Marks"
msgstr "Области и маркеры"
-#: editor.cc:690 editor.cc:5345 rc_option_editor.cc:1294
-#: rc_option_editor.cc:1302 rc_option_editor.cc:1310 rc_option_editor.cc:1318
-#: rc_option_editor.cc:1335 rc_option_editor.cc:1337 rc_option_editor.cc:1345
-#: rc_option_editor.cc:1353 rc_option_editor.cc:1373 rc_option_editor.cc:1385
-#: rc_option_editor.cc:1387 rc_option_editor.cc:1395 rc_option_editor.cc:1403
-#: rc_option_editor.cc:1411 rc_option_editor.cc:1419 rc_option_editor.cc:1427
-#: rc_option_editor.cc:1442 rc_option_editor.cc:1446
+#: editor.cc:690 editor.cc:5349 rc_option_editor.cc:1292
+#: rc_option_editor.cc:1300 rc_option_editor.cc:1308 rc_option_editor.cc:1316
+#: rc_option_editor.cc:1333 rc_option_editor.cc:1335 rc_option_editor.cc:1343
+#: rc_option_editor.cc:1351 rc_option_editor.cc:1371 rc_option_editor.cc:1383
+#: rc_option_editor.cc:1385 rc_option_editor.cc:1393 rc_option_editor.cc:1401
+#: rc_option_editor.cc:1409 rc_option_editor.cc:1417 rc_option_editor.cc:1425
+#: rc_option_editor.cc:1440 rc_option_editor.cc:1444
msgid "Editor"
msgstr "Редактор"
-#: editor.cc:1215 editor.cc:1225 editor.cc:4440 editor_actions.cc:130
+#: editor.cc:1215 editor.cc:1225 editor.cc:4444 editor_actions.cc:130
#: editor_actions.cc:1813
msgid "Loop"
msgstr "Петля"
-#: editor.cc:1231 editor.cc:1241 editor.cc:4467 editor_actions.cc:131
+#: editor.cc:1231 editor.cc:1241 editor.cc:4471 editor_actions.cc:131
#: time_info_box.cc:67
msgid "Punch"
msgstr "Врезка"
-#: editor.cc:1352
+#: editor.cc:1353
msgid "Linear (for highly correlated material)"
msgstr "Линейно (для схожего материала)"
-#: editor.cc:1362 editor.cc:1499 editor.cc:1561
+#: editor.cc:1363 editor.cc:1500 editor.cc:1562
msgid "Constant power"
msgstr "С постоянной силой"
-#: editor.cc:1371 editor.cc:1492 editor.cc:1554
+#: editor.cc:1372 editor.cc:1493 editor.cc:1555
msgid "Symmetric"
msgstr "Симметрично"
-#: editor.cc:1381 editor.cc:1474 editor.cc:1536
+#: editor.cc:1382 editor.cc:1475 editor.cc:1537
msgid "Slow"
msgstr "Медленно"
-#: editor.cc:1390 editor.cc:1483 editor.cc:1545 sfdb_ui.cc:1627
+#: editor.cc:1391 editor.cc:1484 editor.cc:1546 sfdb_ui.cc:1627
#: sfdb_ui.cc:1736
msgid "Fast"
msgstr "Быстро"
-#: editor.cc:1437
+#: editor.cc:1438
msgid "programming error: fade in canvas item has no regionview data pointer!"
msgstr "programming error: fade in canvas item has no regionview data pointer!"
-#: editor.cc:1448 editor.cc:1512
+#: editor.cc:1449 editor.cc:1513
msgid "Deactivate"
msgstr "Деактивировать"
-#: editor.cc:1450 editor.cc:1514
+#: editor.cc:1451 editor.cc:1515
msgid "Activate"
msgstr "Активировать"
-#: editor.cc:1458 editor.cc:1521
+#: editor.cc:1459 editor.cc:1522
msgid "Slowest"
msgstr "Медленнее всего"
-#: editor.cc:1572 route_time_axis.cc:1877 selection.cc:1009 selection.cc:1064
+#: editor.cc:1573 route_time_axis.cc:1877 selection.cc:1009 selection.cc:1064
msgid "programming error: "
msgstr "Ошибка в программе: "
-#: editor.cc:1673 editor.cc:1681 editor_ops.cc:3522
+#: editor.cc:1674 editor.cc:1682 editor_ops.cc:3522
msgid "Freeze"
msgstr "Заморозить"
-#: editor.cc:1677
+#: editor.cc:1678
msgid "Unfreeze"
msgstr "Разморозить"
-#: editor.cc:1816
+#: editor.cc:1817
msgid "Selected Regions"
msgstr "Выделенные области"
-#: editor.cc:1852 editor_markers.cc:895
+#: editor.cc:1853 editor_markers.cc:895
msgid "Play Range"
msgstr "Воспроизвести выделение"
-#: editor.cc:1853 editor_markers.cc:898
+#: editor.cc:1854 editor_markers.cc:898
msgid "Loop Range"
msgstr "Создать петлю из выделения"
-#: editor.cc:1862 editor_actions.cc:332
+#: editor.cc:1863 editor_actions.cc:332
msgid "Move Range Start to Previous Region Boundary"
msgstr "Переместить начало выделения к границе предыдущей области"
-#: editor.cc:1869 editor_actions.cc:339
+#: editor.cc:1870 editor_actions.cc:339
msgid "Move Range Start to Next Region Boundary"
msgstr "Переместить начало выделения к границе следующей области"
-#: editor.cc:1876 editor_actions.cc:346
+#: editor.cc:1877 editor_actions.cc:346
msgid "Move Range End to Previous Region Boundary"
msgstr "Переместить конец выделения к границе предыдущей области"
-#: editor.cc:1883 editor_actions.cc:353
+#: editor.cc:1884 editor_actions.cc:353
msgid "Move Range End to Next Region Boundary"
msgstr "Переместить конец выделения к границе следующей области"
-#: editor.cc:1889
+#: editor.cc:1890
msgid "Convert to Region In-Place"
msgstr "Преобразовать в область на месте"
-#: editor.cc:1890
+#: editor.cc:1891
msgid "Convert to Region in Region List"
msgstr "Преобразовать в область в списке областей"
-#: editor.cc:1893 editor_markers.cc:925
+#: editor.cc:1894 editor_markers.cc:925
msgid "Select All in Range"
msgstr "Выбрать всё в выделении"
-#: editor.cc:1896
+#: editor.cc:1897
msgid "Set Loop from Range"
msgstr "Создать петлю из выделения"
-#: editor.cc:1897
+#: editor.cc:1898
msgid "Set Punch from Range"
msgstr "Создать врезку из выделения"
-#: editor.cc:1900
+#: editor.cc:1901
msgid "Add Range Markers"
msgstr "Добавить маркеры областей"
-#: editor.cc:1903
+#: editor.cc:1904
msgid "Crop Region to Range"
msgstr "Обрезать область по выделению"
-#: editor.cc:1904
+#: editor.cc:1905
msgid "Fill Range with Region"
msgstr "Заполнить диапазон областью"
-#: editor.cc:1905 editor_actions.cc:289
+#: editor.cc:1906 editor_actions.cc:289
msgid "Duplicate Range"
msgstr "Продублировать диапазон"
-#: editor.cc:1908
+#: editor.cc:1909
msgid "Consolidate Range"
msgstr "Объединить диапазон"
-#: editor.cc:1909
+#: editor.cc:1910
msgid "Consolidate Range With Processing"
msgstr "Объединить диапазон с обработкой"
-#: editor.cc:1910
+#: editor.cc:1911
msgid "Bounce Range to Region List"
msgstr "Свести диапазон в список областей"
-#: editor.cc:1911
+#: editor.cc:1912
msgid "Bounce Range to Region List With Processing"
msgstr "Свести выделение в список областей с обработкой"
-#: editor.cc:1912 editor_markers.cc:908
+#: editor.cc:1913 editor_markers.cc:908
msgid "Export Range..."
msgstr "Экспортировать выделение…"
-#: editor.cc:1927 editor.cc:2008 editor_actions.cc:281
+#: editor.cc:1915
+msgid "Export Video Range..."
+msgstr "Экспортировать фрагмент видео..."
+
+#: editor.cc:1931 editor.cc:2012 editor_actions.cc:281
msgid "Play From Edit Point"
msgstr "Воспроизвести от курсора редактора"
-#: editor.cc:1928 editor.cc:2009
+#: editor.cc:1932 editor.cc:2013
msgid "Play From Start"
msgstr "Воспроизвести с начала"
-#: editor.cc:1929
+#: editor.cc:1933
msgid "Play Region"
msgstr "Воспроизвести область"
-#: editor.cc:1931
+#: editor.cc:1935
msgid "Loop Region"
msgstr "Создать петлю из области"
-#: editor.cc:1941 editor.cc:2018
+#: editor.cc:1945 editor.cc:2022
msgid "Select All in Track"
msgstr "Выделить всё на дорожке"
-#: editor.cc:1942 editor.cc:2019 editor_actions.cc:185
-#: export_timespan_selector.cc:53 processor_box.cc:2237
+#: editor.cc:1946 editor.cc:2023 editor_actions.cc:185
+#: export_timespan_selector.cc:53 processor_box.cc:2276
msgid "Select All"
msgstr "Выделить всё"
-#: editor.cc:1943 editor.cc:2020
+#: editor.cc:1947 editor.cc:2024
msgid "Invert Selection in Track"
msgstr "Обратить выделение на дорожке"
-#: editor.cc:1944 editor.cc:2021 editor_actions.cc:187
+#: editor.cc:1948 editor.cc:2025 editor_actions.cc:187
msgid "Invert Selection"
msgstr "Обратить выделение"
-#: editor.cc:1946
+#: editor.cc:1950
msgid "Set Range to Loop Range"
msgstr "Установить диапазон по диапазону петли"
-#: editor.cc:1947
+#: editor.cc:1951
msgid "Set Range to Punch Range"
msgstr "Установить диапазон по диапазону врезки"
-#: editor.cc:1949 editor.cc:2023 editor_actions.cc:188
+#: editor.cc:1953 editor.cc:2027 editor_actions.cc:188
msgid "Select All After Edit Point"
msgstr "Выделить всё после курсора редактора"
-#: editor.cc:1950 editor.cc:2024 editor_actions.cc:189
+#: editor.cc:1954 editor.cc:2028 editor_actions.cc:189
msgid "Select All Before Edit Point"
msgstr "Выделить всё до курсора редактора"
-#: editor.cc:1951 editor.cc:2025
+#: editor.cc:1955 editor.cc:2029
msgid "Select All After Playhead"
msgstr "Выделить всё после указателя"
-#: editor.cc:1952 editor.cc:2026
+#: editor.cc:1956 editor.cc:2030
msgid "Select All Before Playhead"
msgstr "Выделить всё до указателя"
-#: editor.cc:1953
+#: editor.cc:1957
msgid "Select All Between Playhead and Edit Point"
msgstr "Выделить всё между указателем и курсором редактора"
-#: editor.cc:1954
+#: editor.cc:1958
msgid "Select All Within Playhead and Edit Point"
msgstr "Выделить всё между указателем и точкой редактирования"
-#: editor.cc:1955
+#: editor.cc:1959
msgid "Select Range Between Playhead and Edit Point"
msgstr "Создать выделение между указателем и курсором редактора"
-#: editor.cc:1957 editor.cc:2028 editor_actions.cc:127 editor_actions.cc:128
+#: editor.cc:1961 editor.cc:2032 editor_actions.cc:127 editor_actions.cc:128
msgid "Select"
msgstr "Выделить"
-#: editor.cc:1965 editor.cc:2036 editor_actions.cc:309 processor_box.cc:2222
+#: editor.cc:1969 editor.cc:2040 editor_actions.cc:309 processor_box.cc:2261
msgid "Cut"
msgstr "Вырезать"
-#: editor.cc:1966 editor.cc:2037 editor_actions.cc:312 processor_box.cc:2225
+#: editor.cc:1970 editor.cc:2041 editor_actions.cc:312 processor_box.cc:2264
msgid "Copy"
msgstr "Копировать"
-#: editor.cc:1967 editor.cc:2038 editor_actions.cc:313 processor_box.cc:2233
+#: editor.cc:1971 editor.cc:2042 editor_actions.cc:313 processor_box.cc:2272
msgid "Paste"
msgstr "Вставить"
-#: editor.cc:1971 editor_actions.cc:87
+#: editor.cc:1975 editor_actions.cc:87
msgid "Align"
msgstr "Выровнять"
-#: editor.cc:1972
+#: editor.cc:1976
msgid "Align Relative"
msgstr "Выровнять относительно"
-#: editor.cc:1979
+#: editor.cc:1983
msgid "Insert Selected Region"
msgstr "Вставить выделенную область"
-#: editor.cc:1980
+#: editor.cc:1984
msgid "Insert Existing Media"
msgstr "Вставить существующие данные"
-#: editor.cc:1989 editor.cc:2045
+#: editor.cc:1993 editor.cc:2049
msgid "Nudge Entire Track Later"
msgstr "Толкнуть всю дорожку вперёд"
-#: editor.cc:1990 editor.cc:2046
+#: editor.cc:1994 editor.cc:2050
msgid "Nudge Track After Edit Point Later"
msgstr "Толкнуть дорожку вперёд после курсора редактора"
-#: editor.cc:1991 editor.cc:2047
+#: editor.cc:1995 editor.cc:2051
msgid "Nudge Entire Track Earlier"
msgstr "Толкнуть всю дорожку назад"
-#: editor.cc:1992 editor.cc:2048
+#: editor.cc:1996 editor.cc:2052
msgid "Nudge Track After Edit Point Earlier"
msgstr "Толкнуть дорожку назад после курсора редактора"
-#: editor.cc:1994 editor.cc:2050
+#: editor.cc:1998 editor.cc:2054
msgid "Nudge"
msgstr "Толкнуть"
-#: editor.cc:3070
+#: editor.cc:3074
msgid "Smart Mode (add Range functions to Object mode)"
msgstr "Универсальный режим, совмещает функции работы с областями и объектами"
-#: editor.cc:3071
+#: editor.cc:3075
msgid "Object Mode (select/move Objects)"
msgstr "Объектный режим (выделение и перемещение объектов)"
-#: editor.cc:3072
+#: editor.cc:3076
msgid "Range Mode (select/move Ranges)"
msgstr "Режим выделения (создание и перемещение выделений)"
-#: editor.cc:3073
+#: editor.cc:3077
msgid "Draw/Edit MIDI Notes"
msgstr "Рисовать или редактировать ноты MIDI"
-#: editor.cc:3074
+#: editor.cc:3078
msgid "Draw Region Gain"
msgstr "Нарисовать линию усиления области"
-#: editor.cc:3075
+#: editor.cc:3079
msgid "Select Zoom Range"
msgstr "Менять масштаб просмотра"
-#: editor.cc:3076
+#: editor.cc:3080
msgid "Stretch/Shrink Regions and MIDI Notes"
msgstr "Растянуть или сжать области и ноты MIDI"
-#: editor.cc:3077
+#: editor.cc:3081
msgid "Listen to Specific Regions"
msgstr "Воспроизводить отдельные области"
-#: editor.cc:3078
+#: editor.cc:3082
msgid "Note Level Editing"
msgstr "Редактировать MIDI-дорожки"
-#: editor.cc:3079
+#: editor.cc:3083
msgid ""
"Groups: click to (de)activate\n"
"Context-click for other operations"
@@ -2978,89 +2971,89 @@ msgstr ""
"Группы: щёлкните для (де)активации\n"
"Щелчок другой клавишей вызывает контекстное меню"
-#: editor.cc:3080
+#: editor.cc:3084
msgid "Nudge Region/Selection Later"
msgstr "Толкнуть область или выделение вперёд"
-#: editor.cc:3081
+#: editor.cc:3085
msgid "Nudge Region/Selection Earlier"
msgstr "Толкнуть область или выделение назад"
-#: editor.cc:3082 editor_actions.cc:242
+#: editor.cc:3086 editor_actions.cc:242
msgid "Zoom In"
msgstr "Увеличить"
-#: editor.cc:3083 editor_actions.cc:241
+#: editor.cc:3087 editor_actions.cc:241
msgid "Zoom Out"
msgstr "Уменьшить"
-#: editor.cc:3084 editor_actions.cc:243
+#: editor.cc:3088 editor_actions.cc:243
msgid "Zoom to Session"
msgstr "Показать всё"
-#: editor.cc:3085
+#: editor.cc:3089
msgid "Zoom focus"
msgstr "Фокус при масштабировании"
-#: editor.cc:3086
+#: editor.cc:3090
msgid "Expand Tracks"
msgstr "Увеличить дорожки по высоте"
-#: editor.cc:3087
+#: editor.cc:3091
msgid "Shrink Tracks"
msgstr "Уменьшить дорожки по высоте"
-#: editor.cc:3088
+#: editor.cc:3092
msgid "Snap/Grid Units"
msgstr "Единица прилипания/сетки"
-#: editor.cc:3089
+#: editor.cc:3093
msgid "Snap/Grid Mode"
msgstr "Режим прилипания/сетки"
-#: editor.cc:3091
+#: editor.cc:3095
msgid "Edit Mode"
msgstr "Режим редактирования"
-#: editor.cc:3092
+#: editor.cc:3096
msgid ""
"Nudge Clock\n"
"(controls distance used to nudge regions and selections)"
msgstr ""
-#: editor.cc:3194
+#: editor.cc:3198
msgid "malformed URL passed to drag-n-drop code"
msgstr ""
-#: editor.cc:3256 editor_actions.cc:291
+#: editor.cc:3260 editor_actions.cc:291
msgid "Command|Undo"
msgstr "Отменить"
-#: editor.cc:3258
+#: editor.cc:3262
msgid "Command|Undo (%1)"
msgstr "Отменить (%1)"
-#: editor.cc:3265 editor_actions.cc:292
+#: editor.cc:3269 editor_actions.cc:292
msgid "Redo"
msgstr "Вернуть"
-#: editor.cc:3267
+#: editor.cc:3271
msgid "Redo (%1)"
msgstr "Вернуть (%1)"
-#: editor.cc:3286 editor.cc:3310 editor_actions.cc:106 editor_actions.cc:1794
+#: editor.cc:3290 editor.cc:3314 editor_actions.cc:106 editor_actions.cc:1794
msgid "Duplicate"
msgstr "Продублировать"
-#: editor.cc:3287
+#: editor.cc:3291
msgid "Number of duplications:"
msgstr "Количество копий:"
-#: editor.cc:3864
+#: editor.cc:3868
msgid "Playlist Deletion"
msgstr "Удаление списка воспроизведения"
-#: editor.cc:3865
+#: editor.cc:3869
msgid ""
"Playlist %1 is currently unused.\n"
"If it is kept, its audio files will not be cleaned.\n"
@@ -3070,36 +3063,37 @@ msgstr ""
"Если его оставить, связанные звуковые файлы не будут подчищены.\n"
"Если его удалить, будут подчищены и связанные звуковые файлы."
-#: editor.cc:3875
+#: editor.cc:3879
msgid "Delete Playlist"
msgstr "Удалить список"
-#: editor.cc:3876
+#: editor.cc:3880
msgid "Keep Playlist"
msgstr "Сохранить список"
-#: editor.cc:3877 editor_audio_import.cc:581 editor_ops.cc:5856
-#: sfdb_freesound_mootcher.cc:69 processor_box.cc:2003 processor_box.cc:2028
+#: editor.cc:3881 editor_audio_import.cc:581 editor_ops.cc:5856
+#: engine_dialog.cc:1713 sfdb_freesound_mootcher.cc:69 processor_box.cc:2030
+#: processor_box.cc:2055
msgid "Cancel"
msgstr "Отмена"
-#: editor.cc:4021
+#: editor.cc:4025
msgid "new playlists"
msgstr "Создать списки воспроизведения"
-#: editor.cc:4037
+#: editor.cc:4041
msgid "copy playlists"
msgstr "Скопировать списки воспроизведения"
-#: editor.cc:4052
+#: editor.cc:4056
msgid "clear playlists"
msgstr "Очистить списки воспроизведения"
-#: editor.cc:4687
+#: editor.cc:4691
msgid "Please wait while %1 loads visual data."
msgstr "Дождитесь загрузки визуальных данных в %1."
-#: editor.cc:5492 editor_markers.cc:940 panner_ui.cc:393 processor_box.cc:2253
+#: editor.cc:5496 editor_markers.cc:940 panner_ui.cc:392 processor_box.cc:2292
msgid "Edit..."
msgstr "Изменить"
@@ -3148,8 +3142,8 @@ msgstr "Слои"
msgid "Position"
msgstr "Положение"
-#: editor_actions.cc:101 gain_meter.cc:121 gain_meter.cc:791 panner_ui.cc:177
-#: panner_ui.cc:586
+#: editor_actions.cc:101 gain_meter.cc:120 gain_meter.cc:794 panner_ui.cc:176
+#: panner_ui.cc:585
msgid "Trim"
msgstr "Обрезать"
@@ -3199,7 +3193,7 @@ msgstr "Параметры MIDI"
msgid "Misc Options"
msgstr "Прочие параметры"
-#: editor_actions.cc:115 rc_option_editor.cc:1460 route_group_dialog.cc:48
+#: editor_actions.cc:115 rc_option_editor.cc:1458 route_group_dialog.cc:48
#: session_option_editor.cc:218 session_option_editor.cc:225
msgid "Monitoring"
msgstr "Мониторинг"
@@ -3377,7 +3371,7 @@ msgstr "К началу области"
msgid "Playhead to Range End"
msgstr "К концу области"
-#: editor_actions.cc:186 export_timespan_selector.cc:61 processor_box.cc:2239
+#: editor_actions.cc:186 export_timespan_selector.cc:61 processor_box.cc:2278
msgid "Deselect All"
msgstr "Снять все выделения"
@@ -3936,7 +3930,7 @@ msgstr "Мин:С"
msgid "Video Monitor"
msgstr "Видеомонитор"
-#: editor_actions.cc:549 rc_option_editor.cc:1842
+#: editor_actions.cc:549 rc_option_editor.cc:1838
msgid "Video"
msgstr "Видео"
@@ -4266,7 +4260,7 @@ msgstr "Вставить смену программы..."
#: editor_actions.cc:1888
msgid "Unlink from other copies"
-msgstr ""
+msgstr "Отсоединить от других копий"
#: editor_actions.cc:1889
msgid "Strip Silence..."
@@ -4437,7 +4431,7 @@ msgstr "Разница:"
#: editor_drag.cc:1722
msgid "Move Video"
-msgstr ""
+msgstr "Переместить видео"
#: editor_drag.cc:2200
msgid "copy meter mark"
@@ -4455,31 +4449,31 @@ msgstr "скопировать маркер темпа"
msgid "move tempo mark"
msgstr "переместить маркер темпа"
-#: editor_drag.cc:2545
+#: editor_drag.cc:2550
msgid "change fade in length"
msgstr "смена длительности фейда нарастания"
-#: editor_drag.cc:2663
+#: editor_drag.cc:2668
msgid "change fade out length"
msgstr "смена длительности фейда затухания"
-#: editor_drag.cc:3018
+#: editor_drag.cc:3023
msgid "move marker"
msgstr "смещение маркера"
-#: editor_drag.cc:3581
+#: editor_drag.cc:3586
msgid "An error occurred while executing time stretch operation"
msgstr ""
-#: editor_drag.cc:4011
+#: editor_drag.cc:4016
msgid "programming_error: %1"
msgstr "Ошибка в программе: %1"
-#: editor_drag.cc:4081 editor_markers.cc:680
+#: editor_drag.cc:4086 editor_markers.cc:680
msgid "new range marker"
msgstr "новый маркер выделения"
-#: editor_drag.cc:4762
+#: editor_drag.cc:4767
msgid "rubberband selection"
msgstr "прямоугольное выделение"
@@ -4703,8 +4697,8 @@ msgstr "Переименовать маркер"
msgid "Rename Range"
msgstr "Переименовать выделение"
-#: editor_markers.cc:1363 editor_mouse.cc:2510 processor_box.cc:1781
-#: processor_box.cc:2235 route_time_axis.cc:982 route_ui.cc:1540
+#: editor_markers.cc:1363 editor_mouse.cc:2510 processor_box.cc:1808
+#: processor_box.cc:2274 route_time_axis.cc:982 route_ui.cc:1540
msgid "Rename"
msgstr "Переименовать"
@@ -4840,7 +4834,7 @@ msgstr "опускание областей вниз"
msgid "Rename Region"
msgstr "Переименовать область..."
-#: editor_ops.cc:2372 processor_box.cc:1779 route_ui.cc:1538
+#: editor_ops.cc:2372 processor_box.cc:1806 route_ui.cc:1538
msgid "New name:"
msgstr "Новое название:"
@@ -5352,8 +5346,8 @@ msgstr ""
msgid "Region position glued to Bars|Beats time?"
msgstr ""
-#: editor_regions.cc:120 editor_routes.cc:207 gain_meter.cc:759
-#: mixer_strip.cc:1931 meter_strip.cc:320 panner_ui.cc:554
+#: editor_regions.cc:120 editor_routes.cc:207 gain_meter.cc:762
+#: mixer_strip.cc:1931 meter_strip.cc:320 panner_ui.cc:553
#: stereo_panner.cc:237
msgid "M"
msgstr "В"
@@ -5398,8 +5392,7 @@ msgstr "Удалить неиспользуемые области"
msgid "Mult."
msgstr ""
-#: editor_regions.cc:847 engine_dialog.cc:84 midi_list_editor.cc:103
-#: time_info_box.cc:91
+#: editor_regions.cc:847 midi_list_editor.cc:103 time_info_box.cc:91
msgid "Start"
msgstr "Начало"
@@ -5465,7 +5458,7 @@ msgstr "..."
msgid "SI"
msgstr ""
-#: editor_routes.cc:209 mixer_strip.cc:353 rc_option_editor.cc:1880
+#: editor_routes.cc:209 mixer_strip.cc:353 rc_option_editor.cc:1876
msgid "Solo Isolated"
msgstr "Изолирование соло"
@@ -5680,248 +5673,224 @@ msgstr "смена высоты тона"
msgid "timefx cannot be started - thread creation error"
msgstr ""
-#: engine_dialog.cc:75
-msgid "Realtime"
-msgstr ""
-
-#: engine_dialog.cc:76
-msgid "Do not lock memory"
-msgstr "Не блокировать память"
-
-#: engine_dialog.cc:77
-msgid "Unlock memory"
-msgstr "Разблокировать память"
-
-#: engine_dialog.cc:78
-msgid "No zombies"
-msgstr "Без зомби"
-
#: engine_dialog.cc:79
-msgid "Provide monitor ports"
-msgstr "Предоставить порты мониторинга"
+msgid "Device Control Panel"
+msgstr "Панель управления устройством"
-#: engine_dialog.cc:80
-msgid "Force 16 bit"
-msgstr "Принудительно 16 разрядов"
+#: engine_dialog.cc:80 engine_dialog.cc:1727
+msgid "Measure"
+msgstr "Измерить"
#: engine_dialog.cc:81
-msgid "H/W monitoring"
-msgstr "Аппаратный мониторинг"
+msgid "Use results"
+msgstr "Использовать результаты"
#: engine_dialog.cc:82
-msgid "H/W metering"
-msgstr "Аппаратный замер"
+msgid "Back to settings ... (ignore results)"
+msgstr "Закрыть и не использовать"
#: engine_dialog.cc:83
-msgid "Verbose output"
-msgstr "Подробный вывод"
-
-#: engine_dialog.cc:103
-msgid "8000Hz"
-msgstr "8000 Гц"
-
-#: engine_dialog.cc:104
-msgid "22050Hz"
-msgstr "22,05 КГц"
+msgid "Calibrate..."
+msgstr "Откалибровать..."
-#: engine_dialog.cc:105
-msgid "44100Hz"
-msgstr "44,1 КГц"
-
-#: engine_dialog.cc:106
-msgid "48000Hz"
-msgstr "48 КГц"
+#: engine_dialog.cc:87
+msgid "Refresh list"
+msgstr "Обновить список"
#: engine_dialog.cc:107
-msgid "88200Hz"
-msgstr "88,2 КГц"
-
-#: engine_dialog.cc:108
-msgid "96000Hz"
-msgstr "96 КГц"
-
-#: engine_dialog.cc:109
-msgid "192000Hz"
-msgstr "192КГц"
-
-#: engine_dialog.cc:127 engine_dialog.cc:132 engine_dialog.cc:169
-#: engine_dialog.cc:562 midi_channel_selector.cc:163
-#: midi_channel_selector.cc:402 midi_channel_selector.cc:438
-#: rc_option_editor.cc:1250 sfdb_ui.cc:538
-msgid "None"
-msgstr "Нет"
-
-#: engine_dialog.cc:128 engine_dialog.cc:563
-msgid "Triangular"
-msgstr "Треугольное"
+msgid ""
+"No audio/MIDI backends detected. %1 cannot run\n"
+"\n"
+"(This is a build/packaging/system error. It should never happen.)"
+msgstr ""
-#: engine_dialog.cc:129 engine_dialog.cc:565
-msgid "Rectangular"
-msgstr "Прямоугольное"
+#: engine_dialog.cc:136
+msgid "Latency Measurement Tool"
+msgstr "Тестирование задержки отклика"
-#: engine_dialog.cc:130 engine_dialog.cc:567
-msgid "Shaped"
-msgstr "По очертаниям"
+#: engine_dialog.cc:151
+msgid ""
+"<span weight=\"bold\">Turn down the volume on your audio equipment to a very "
+"low level.</span>"
+msgstr ""
+"<span weight=\"bold\">Уберите громкость выхода звуковой карты до минимума.</"
+"span>"
-#: engine_dialog.cc:158 engine_dialog.cc:483 engine_dialog.cc:974
-msgid "Playback/recording on 1 device"
-msgstr "Воспроизведение и запись на 1 устройстве"
+#: engine_dialog.cc:159
+msgid "Select two channels below and connect them using a cable."
+msgstr "Выберите ниже два канала и соедините их кабелем."
-#: engine_dialog.cc:159 engine_dialog.cc:487 engine_dialog.cc:540
-#: engine_dialog.cc:977
-msgid "Playback/recording on 2 devices"
-msgstr "Воспроизведение и запись на 2 устройствах"
+#: engine_dialog.cc:164
+msgid "Output channel"
+msgstr "Канал выхода"
-#: engine_dialog.cc:160 engine_dialog.cc:503 engine_dialog.cc:980
-msgid "Playback only"
-msgstr "Только воспроизведение"
+#: engine_dialog.cc:172
+msgid "Input channel"
+msgstr "Канал входа"
-#: engine_dialog.cc:161 engine_dialog.cc:505 engine_dialog.cc:983
-msgid "Recording only"
-msgstr "Только запись"
+#: engine_dialog.cc:209
+msgid "Once the channels are connected, click the \"Measure\" button."
+msgstr "Соединив каналы, нажмите кнопку «Измерить»."
-#: engine_dialog.cc:171 engine_dialog.cc:448
-msgid "coremidi"
+#: engine_dialog.cc:216
+msgid "When satisfied with the results, click the \"Use results\" button."
msgstr ""
+"Если результат вас устраивает, нажмите кнопку «Использовать результаты»."
-#: engine_dialog.cc:173 engine_dialog.cc:581
-msgid "seq"
-msgstr ""
+#: engine_dialog.cc:231 engine_dialog.cc:1729
+msgid "No measurement results yet"
+msgstr "Пока нет результатов измерения"
-#: engine_dialog.cc:174 engine_dialog.cc:583
-msgid "raw"
-msgstr ""
+#: engine_dialog.cc:240 route_params_ui.cc:105
+msgid "Latency"
+msgstr "Задержка отклика"
+
+#: engine_dialog.cc:335
+msgid "Audio System:"
+msgstr "Звуковая подсистема:"
-#: engine_dialog.cc:181
+#: engine_dialog.cc:376
msgid "Driver:"
msgstr "Драйвер:"
-#: engine_dialog.cc:186
-msgid "Audio Interface:"
-msgstr "Звуковой интерфейс:"
+#: engine_dialog.cc:382
+msgid "Device:"
+msgstr "Устройство:"
-#: engine_dialog.cc:191 sfdb_ui.cc:147 sfdb_ui.cc:260 sfdb_ui.cc:265
+#: engine_dialog.cc:387 engine_dialog.cc:477 sfdb_ui.cc:147 sfdb_ui.cc:260
+#: sfdb_ui.cc:265
msgid "Sample rate:"
msgstr "Частота сэмплирования:"
-#: engine_dialog.cc:196
+#: engine_dialog.cc:393 engine_dialog.cc:484
msgid "Buffer size:"
msgstr "Размер буфера:"
-#: engine_dialog.cc:202
-msgid "Number of buffers:"
-msgstr "Число буферов:"
+#: engine_dialog.cc:406
+msgid "Input Channels:"
+msgstr "Каналов входа:"
-#: engine_dialog.cc:209
-msgid "Approximate latency:"
-msgstr "Примерная задержка:"
-
-#: engine_dialog.cc:222
-msgid "Audio mode:"
-msgstr "Звуковой режим:"
+#: engine_dialog.cc:417
+msgid "Output Channels:"
+msgstr "Каналов выхода:"
-#: engine_dialog.cc:284 engine_dialog.cc:408
-msgid "Ignore"
-msgstr "Игнорировать"
+#: engine_dialog.cc:428
+msgid "Hardware input latency:"
+msgstr "Задержка аппаратных входов:"
-#: engine_dialog.cc:292
-msgid "Client timeout"
-msgstr "Ошибка времени ожидания клиента"
+#: engine_dialog.cc:431 engine_dialog.cc:444
+msgid "samples"
+msgstr "сэмплов"
-#: engine_dialog.cc:299
-msgid "Number of ports:"
-msgstr "Число портов:"
+#: engine_dialog.cc:441
+msgid "Hardware output latency:"
+msgstr "Задержка аппаратных выходов:"
-#: engine_dialog.cc:304
-msgid "MIDI driver:"
-msgstr "Драйвер MIDI:"
+#: engine_dialog.cc:452
+msgid "MIDI System"
+msgstr "Подсистема MIDI"
-#: engine_dialog.cc:310
-msgid "Dither:"
-msgstr "Подмешивание шума:"
+#: engine_dialog.cc:469
+msgid ""
+"The %1 audio backend was configured and started externally.\n"
+"This limits your control over it."
+msgstr ""
+"Звуковая подсистема %1 была настроена и запущена извне.\n"
+"Вы не сможете полностью контролировать её."
-#: engine_dialog.cc:319
+#: engine_dialog.cc:523
msgid ""
-"No JACK server found anywhere on this system. Please install JACK and restart"
-msgstr "Сервер JACK в системе не обнаружен. Установить его и попробуйте снова."
+"Your selected audio configuration is playback- or capture-only.\n"
+"\n"
+"Latency calibration requires playback and capture"
+msgstr ""
-#: engine_dialog.cc:327
-msgid "Server:"
-msgstr "Сервер:"
+#: engine_dialog.cc:597
+msgid "MIDI Inputs"
+msgstr "MIDI-входы"
-#: engine_dialog.cc:339
-msgid "Input device:"
-msgstr "Устройство входа:"
+#: engine_dialog.cc:614
+msgid "MIDI Outputs"
+msgstr "MIDI-выходы"
-#: engine_dialog.cc:343
-msgid "Output device:"
-msgstr "Устройство выхода:"
+#: engine_dialog.cc:698
+msgid "all available channels"
+msgstr "все доступные каналы"
-#: engine_dialog.cc:348
-msgid "Hardware input latency:"
-msgstr "Задержка аппаратных входов:"
+#: engine_dialog.cc:892
+#, c-format
+msgid "%u samples"
+msgstr "%u сэмплов"
-#: engine_dialog.cc:351 engine_dialog.cc:357
-msgid "samples"
-msgstr "сэмплов"
+#: engine_dialog.cc:943
+#, c-format
+msgid "(%.1f msecs)"
+msgstr "(%.1f мс)"
-#: engine_dialog.cc:354
-msgid "Hardware output latency:"
-msgstr "Задержка аппаратных выходов:"
+#: engine_dialog.cc:1391
+msgid "Cannot set driver to %1"
+msgstr "Невозможно использовать %1 в качестве драйвера."
-#: engine_dialog.cc:368
-msgid "Device"
-msgstr "Устройство"
+#: engine_dialog.cc:1395
+msgid "Cannot set device name to %1"
+msgstr "Невозможно %1 в имени устройства."
-#: engine_dialog.cc:370
-msgid "Advanced"
-msgstr "Дополнительно"
+#: engine_dialog.cc:1399
+msgid "Cannot set sample rate to %1"
+msgstr "Невозможно использовать %1 в частоты сэмплирования."
-#: engine_dialog.cc:653
-msgid "cannot open JACK rc file %1 to store parameters"
+#: engine_dialog.cc:1403
+msgid "Cannot set buffer size to %1"
+msgstr "Невозможно использовать %1 в размера буфера."
+
+#: engine_dialog.cc:1409
+msgid "Cannot set input channels to %1"
msgstr ""
-#: engine_dialog.cc:787
-msgid ""
-"You do not have any audio devices capable of\n"
-"simultaneous playback and recording.\n"
-"\n"
-"Please use Applications -> Utilities -> Audio MIDI Setup\n"
-"to create an \"aggregrate\" device, or install a suitable\n"
-"audio interface.\n"
-"\n"
-"Please send email to Apple and ask them why new Macs\n"
-"have no duplex audio device.\n"
-"\n"
-"Alternatively, if you really want just playback\n"
-"or recording but not both, start JACK before running\n"
-"%1 and choose the relevant device then."
+#: engine_dialog.cc:1413
+msgid "Cannot set output channels to %1"
msgstr ""
-#: engine_dialog.cc:800
-msgid "No suitable audio devices"
-msgstr "Нет подходящих звуковых устройств"
+#: engine_dialog.cc:1419
+msgid "Cannot set input latency to %1"
+msgstr ""
-#: engine_dialog.cc:1017
-msgid "JACK appears to be missing from the %1 bundle"
-msgstr "JACK отсутствует в поставке %1"
+#: engine_dialog.cc:1423
+msgid "Cannot set output latency to %1"
+msgstr ""
-#: engine_dialog.cc:1087
-msgid "You need to choose an audio device first."
-msgstr "Для начала нужно выбрать звуковое устройство."
+#: engine_dialog.cc:1656
+msgid "No signal detected "
+msgstr "Сигнал не обнаружен"
-#: engine_dialog.cc:1104
-msgid "Audio device \"%1\" not known on this computer."
-msgstr "Звуковое устройство \"%1\" в этом компьютере не обнаружено."
+#: engine_dialog.cc:1669 port_insert_ui.cc:71 port_insert_ui.cc:99
+msgid "Disconnected from audio engine"
+msgstr "Выполнено отсоединение от звукового движка"
-#: engine_dialog.cc:1256
-msgid "AudioSetup value for %1 is missing data"
-msgstr "Значению AudioSetup для %1 не хватает данных"
+#: engine_dialog.cc:1683
+msgid "(signal detection error)"
+msgstr "(ошибка обнаружения сигнала)"
-#: engine_dialog.cc:1335
-msgid "configuration files contain a JACK server path that doesn't exist (%1)"
+#: engine_dialog.cc:1689
+msgid "(inverted - bad wiring)"
msgstr ""
+#: engine_dialog.cc:1699
+msgid "Detected roundtrip latency: %1"
+msgstr "Обнаружена циклическая задержка отклика: %1"
+
+#: engine_dialog.cc:1711 port_insert_ui.cc:135
+msgid "Detecting ..."
+msgstr "Выполняется определение..."
+
+#: engine_dialog.cc:1791
+msgid "Disconnect from %1"
+msgstr "Отсоединить от %1"
+
+#: engine_dialog.cc:1803
+msgid "Connect to %1"
+msgstr "Соединить с %1"
+
#: export_channel_selector.cc:45 sfdb_ui.cc:145
msgid "Channels:"
msgstr "Каналов:"
@@ -6072,9 +6041,9 @@ msgid "Folder:"
msgstr "Папка:"
#: export_filename_selector.cc:37 session_import_dialog.cc:44
-#: transcode_video_dialog.cc:59 video_server_dialog.cc:45
-#: video_server_dialog.cc:47 export_video_dialog.cc:69
-#: export_video_dialog.cc:71
+#: transcode_video_dialog.cc:58 video_server_dialog.cc:45
+#: video_server_dialog.cc:47 export_video_dialog.cc:68
+#: export_video_dialog.cc:70
msgid "Browse"
msgstr "Указать"
@@ -6230,9 +6199,8 @@ msgid "Range"
msgstr "Диапазон"
#: sfdb_freesound_mootcher.cc:189 sfdb_freesound_mootcher.cc:324
-#, fuzzy
msgid "curl error %1 (%2)"
-msgstr "Ошибка в программе: %1 (%2)"
+msgstr "Ошибка curl %1 (%2)"
#: sfdb_freesound_mootcher.cc:266
msgid "getSoundResourceFile: There is no valid root in the xml file"
@@ -6243,76 +6211,80 @@ msgid "getSoundResourceFile: root = %1, != response"
msgstr ""
#: sfdb_freesound_mootcher.cc:410
-#, fuzzy
msgid "%1"
-msgstr "%"
+msgstr "%1"
-#: gain_meter.cc:106 gain_meter.cc:357 gain_meter.cc:462 gain_meter.cc:856
+#: gain_meter.cc:105 gain_meter.cc:360 gain_meter.cc:465 gain_meter.cc:859
msgid "-inf"
msgstr "-inf"
-#: gain_meter.cc:112 gain_meter.cc:913
+#: gain_meter.cc:111 gain_meter.cc:916
msgid "Fader automation mode"
msgstr "Режим автоматизации фейдера"
-#: gain_meter.cc:113 gain_meter.cc:914
+#: gain_meter.cc:112 gain_meter.cc:917
msgid "Fader automation type"
msgstr "Тип автоматизации фейдера"
-#: gain_meter.cc:122 gain_meter.cc:795 panner_ui.cc:178 panner_ui.cc:590
+#: gain_meter.cc:121 gain_meter.cc:798 panner_ui.cc:177 panner_ui.cc:589
msgid "Abs"
msgstr "Абс"
-#: gain_meter.cc:762 mixer_strip.cc:1948 meter_strip.cc:337 panner_ui.cc:557
+#: gain_meter.cc:765 mixer_strip.cc:1948 meter_strip.cc:337 panner_ui.cc:556
#: route_time_axis.cc:2411
msgid "P"
msgstr "P"
-#: gain_meter.cc:765 panner_ui.cc:560
+#: gain_meter.cc:768 panner_ui.cc:559
msgid "T"
msgstr "К"
-#: gain_meter.cc:768 panner_ui.cc:563
+#: gain_meter.cc:771 panner_ui.cc:562
msgid "W"
msgstr "З"
-#: generic_pluginui.cc:83
+#: generic_pluginui.cc:81
msgid "<span size=\"large\">Presets</span>"
msgstr "<span size=\"large\">Профили</span>"
-#: generic_pluginui.cc:232
+#: generic_pluginui.cc:230
msgid "Switches"
msgstr "Переключатели"
-#: generic_pluginui.cc:242 generic_pluginui.cc:376 processor_box.cc:2212
+#: generic_pluginui.cc:240 generic_pluginui.cc:374 processor_box.cc:2251
msgid "Controls"
msgstr "Управление"
-#: generic_pluginui.cc:270
+#: generic_pluginui.cc:268
msgid "Plugin Editor: could not build control element for port %1"
msgstr "Редактор модулей: невозможно создать управляющий элемент для порта %1"
-#: generic_pluginui.cc:408
+#: generic_pluginui.cc:406
msgid "Meters"
msgstr "Индикаторы уровня"
-#: generic_pluginui.cc:423
+#: generic_pluginui.cc:421
msgid "Automation control"
msgstr "Контроль автоматизации"
-#: generic_pluginui.cc:430
+#: generic_pluginui.cc:428
msgid "Mgnual"
msgstr ""
-#: global_port_matrix.cc:164
+#: global_port_matrix.cc:157
msgid "Audio Connection Manager"
msgstr "Управление звуковыми соединениями"
-#: global_port_matrix.cc:167
+#: global_port_matrix.cc:160
msgid "MIDI Connection Manager"
msgstr "Управление MIDI-соединениями"
-#: global_port_matrix.cc:213 io_selector.cc:216
+#: global_port_matrix.cc:200 io_selector.cc:210 mixer_strip.cc:719
+#: mixer_strip.cc:845
+msgid "Disconnect"
+msgstr "Отсоединить"
+
+#: global_port_matrix.cc:206 io_selector.cc:216
msgid "port"
msgstr "порт"
@@ -6505,19 +6477,19 @@ msgstr "Выберите действие и нажмите комбинацию
msgid "Main_menu"
msgstr ""
-#: keyeditor.cc:255
+#: keyeditor.cc:253
msgid "redirectmenu"
msgstr ""
-#: keyeditor.cc:257
+#: keyeditor.cc:255
msgid "Editor_menus"
msgstr ""
-#: keyeditor.cc:259
+#: keyeditor.cc:257
msgid "RegionList"
msgstr ""
-#: keyeditor.cc:261
+#: keyeditor.cc:259
msgid "ProcessorMenu"
msgstr ""
@@ -6540,7 +6512,7 @@ msgstr[0] "%1 сэмпл"
msgstr[1] "%1 сэмпла"
msgstr[2] "%1 сэмплов"
-#: latency_gui.cc:72 panner_ui.cc:392
+#: latency_gui.cc:72 panner_ui.cc:391
msgid "Reset"
msgstr "Сбросить"
@@ -6632,88 +6604,65 @@ msgstr "<b>Диапазоны (включая диапазоны дорожек
msgid "add range marker"
msgstr "добавка маркера выделения"
-#: main.cc:83
-msgid "%1 could not connect to JACK."
-msgstr "%1 не удалось соединиться с сервером JACK."
+#: main.cc:81
+msgid "%1 could not connect to the audio backend."
+msgstr "%1 не удалось соединиться со звуковой подсистемой."
-#: main.cc:87
-msgid ""
-"There are several possible reasons:\n"
-"\n"
-"1) JACK is not running.\n"
-"2) JACK is running as another user, perhaps root.\n"
-"3) There is already another client called \"%1\".\n"
-"\n"
-"Please consider the possibilities, and perhaps (re)start JACK."
-msgstr ""
-"Существует несколько возможных причин:\n"
-"\n"
-"1) Сервер JACK не запущен.\n"
-"2) Сервер JACK запущен с правами другого пользователя — возможно, root.\n"
-"3) Уже существует клиент сервера JACK с именем \"%1\".\n"
-"\n"
-"Пожалуйста, проверьте все варианты; возможно потребуется (пере)запуск JACK."
-
-#: main.cc:203 main.cc:324
+#: main.cc:194 main.cc:315
msgid "cannot create user %3 folder %1 (%2)"
msgstr "Не удалось создать пользовательскую папку %3: %1 (%2)"
-#: main.cc:210 main.cc:331
+#: main.cc:201 main.cc:322
msgid "cannot open pango.rc file %1"
msgstr ""
-#: main.cc:235 main.cc:358
+#: main.cc:226 main.cc:349
msgid "Cannot find ArdourMono TrueType font"
msgstr ""
-#: main.cc:247 main.cc:364
+#: main.cc:238 main.cc:355
msgid "Cannot load ArdourMono TrueType font."
msgstr ""
-#: main.cc:312
+#: main.cc:303
msgid ""
"No fontconfig file found on your system. Things may looked very odd or ugly"
msgstr ""
-#: main.cc:368
+#: main.cc:359
msgid "Failed to set fontconfig configuration."
msgstr ""
-#: main.cc:379 main.cc:395
-msgid "JACK exited"
-msgstr "JACk завершил работу"
+#: main.cc:370 main.cc:386
+msgid "The audio backend (%1) has failed, or terminated"
+msgstr ""
-#: main.cc:382
+#: main.cc:373
msgid ""
-"JACK exited unexpectedly, and without notifying %1.\n"
+"%2 exited unexpectedly, and without notifying %1.\n"
"\n"
-"This could be due to misconfiguration or to an error inside JACK.\n"
+"This could be due to misconfiguration or to an error inside %2.\n"
"\n"
"Click OK to exit %1."
msgstr ""
-#: main.cc:397
-msgid ""
-"JACK exited unexpectedly, and without notifying %1.\n"
-"\n"
-"This is probably due to an error inside JACK. You should restart JACK\n"
-"and reconnect %1 to it, or exit %1 now. You cannot save your\n"
-"session at this time, because we would lose your connection information.\n"
+#: main.cc:387
+msgid "%2 exited unexpectedly, and without notifying %1."
msgstr ""
-#: main.cc:487
+#: main.cc:474
msgid " (built using "
msgstr ""
-#: main.cc:490
+#: main.cc:477
msgid " and GCC version "
msgstr ", при помощи GCC версии "
-#: main.cc:500
+#: main.cc:487
msgid "Copyright (C) 1999-2012 Paul Davis"
msgstr "Авторские права © 1999-2012 Paul Davis"
-#: main.cc:501
+#: main.cc:488
msgid ""
"Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel "
"Baker, Robin Gareus"
@@ -6721,31 +6670,31 @@ msgstr ""
"Частичные авторские права © Steve Harris, Ari Johnson, Brett Viren, Joel "
"Baker, Robin Gareus"
-#: main.cc:503
+#: main.cc:490
msgid "%1 comes with ABSOLUTELY NO WARRANTY"
msgstr "%1 распространяется БЕЗО ВСЯКИХ ГАРАНТИЙ"
-#: main.cc:504
+#: main.cc:491
msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
msgstr ""
-#: main.cc:505
+#: main.cc:492
msgid "This is free software, and you are welcome to redistribute it "
msgstr "Это свободное программное обеспечение, Вы можете распространять его"
-#: main.cc:506
+#: main.cc:493
msgid "under certain conditions; see the source for copying conditions."
msgstr "на определённых условиях; подробнее об этом читайте в файле COPYING."
-#: main.cc:513
+#: main.cc:500
msgid "could not initialize %1."
msgstr "Не удалось инициализировать %1."
-#: main.cc:522
+#: main.cc:509
msgid "Cannot xinstall SIGPIPE error handler"
msgstr ""
-#: main.cc:528
+#: main.cc:515
msgid "could not create %1 GUI"
msgstr "не удалось создать графический интерфейс для %1"
@@ -6762,6 +6711,11 @@ msgstr ""
msgid "All"
msgstr "Все"
+#: midi_channel_selector.cc:163 midi_channel_selector.cc:402
+#: midi_channel_selector.cc:438 rc_option_editor.cc:1248 sfdb_ui.cc:538
+msgid "None"
+msgstr "Нет"
+
#: midi_channel_selector.cc:167 midi_channel_selector.cc:407
#: midi_channel_selector.cc:443
msgid "Invert"
@@ -7148,27 +7102,27 @@ msgstr "все"
msgid "some"
msgstr "не все"
-#: midi_tracer.cc:43
+#: midi_tracer.cc:46
msgid "Line history: "
msgstr "Запоминать строк:"
-#: midi_tracer.cc:51
+#: midi_tracer.cc:54
msgid "Auto-Scroll"
msgstr "Автопрокрутка"
-#: midi_tracer.cc:52
+#: midi_tracer.cc:55
msgid "Decimal"
msgstr "Десятичный"
-#: midi_tracer.cc:53 rc_option_editor.cc:659
+#: midi_tracer.cc:56 rc_option_editor.cc:657
msgid "Enabled"
msgstr "Включено"
-#: midi_tracer.cc:54
+#: midi_tracer.cc:57
msgid "Delta times"
msgstr "Разница во времени"
-#: midi_tracer.cc:66
+#: midi_tracer.cc:70
msgid "Port:"
msgstr "Порт:"
@@ -7232,7 +7186,7 @@ msgstr "Выберите дополнительную папку:"
msgid "Missing Plugins"
msgstr "Отсутствующие модули"
-#: missing_plugin_dialog.cc:33 transcode_video_dialog.cc:60
+#: missing_plugin_dialog.cc:33 transcode_video_dialog.cc:59
msgid "OK"
msgstr "ОК"
@@ -7309,7 +7263,7 @@ msgid "pre"
msgstr "lj"
#: mixer_strip.cc:95 mixer_strip.cc:123 mixer_strip.cc:354 mixer_strip.cc:1300
-#: rc_option_editor.cc:1881
+#: rc_option_editor.cc:1877
msgid "Comments"
msgstr "Комментарии"
@@ -7355,11 +7309,11 @@ msgstr "Изол"
msgid "Mix group"
msgstr "Группа микса"
-#: mixer_strip.cc:351 rc_option_editor.cc:1878
+#: mixer_strip.cc:351 rc_option_editor.cc:1874
msgid "Phase Invert"
msgstr "Инверсия фазы"
-#: mixer_strip.cc:352 rc_option_editor.cc:1879 route_ui.cc:1218
+#: mixer_strip.cc:352 rc_option_editor.cc:1875 route_ui.cc:1218
msgid "Solo Safe"
msgstr "Блокировка солирования"
@@ -7367,7 +7321,7 @@ msgstr "Блокировка солирования"
msgid "Group"
msgstr "Группа"
-#: mixer_strip.cc:356 rc_option_editor.cc:1882
+#: mixer_strip.cc:356 rc_option_editor.cc:1878
msgid "Meter Point"
msgstr "Точка измерения"
@@ -7385,9 +7339,11 @@ msgstr ""
msgid "Snd"
msgstr "Псл"
-#: mixer_strip.cc:701 mixer_strip.cc:829 processor_box.cc:2154
-msgid "Not connected to JACK - no I/O changes are possible"
-msgstr "Нет соединения с JACK, любые изменения входа-выхода невозможны"
+#: mixer_strip.cc:701 mixer_strip.cc:829 processor_box.cc:2193
+msgid "Not connected to audio engine - no I/O changes are possible"
+msgstr ""
+"Нет соединения со звуковой подсистемой, любые изменения входа-выхода "
+"невозможны."
#: mixer_strip.cc:1096
msgid "<b>INPUT</b> to %1"
@@ -7502,9 +7458,8 @@ msgid "D"
msgstr ""
#: mixer_strip.cc:1953
-#, fuzzy
msgid "i"
-msgstr "вх"
+msgstr ""
#: mixer_strip.cc:2128
msgid "Pre-fader"
@@ -7515,19 +7470,16 @@ msgid "Post-fader"
msgstr "После фейдера"
#: mixer_strip.cc:2166 meter_strip.cc:728
-#, fuzzy
msgid "Change all in Group to %1"
-msgstr "Поменять все в группе на пиковое"
+msgstr "Поменять все в группе на %1"
#: mixer_strip.cc:2168 meter_strip.cc:730
-#, fuzzy
msgid "Change all to %1"
-msgstr "Поменять все на пиковое"
+msgstr "Поменять все на %1"
#: mixer_strip.cc:2170 meter_strip.cc:732
-#, fuzzy
msgid "Change same track-type to %1"
-msgstr "Поменять дорожки одного типа на пиковое"
+msgstr "Поменять дорожки одного типа на %1"
#: mixer_ui.cc:1189
msgid "track display list item for renamed strip not found!"
@@ -7542,14 +7494,12 @@ msgid "Strips"
msgstr "Каналы"
#: meter_strip.cc:764
-#, fuzzy
msgid "Variable height"
-msgstr "Высота видеолинейки"
+msgstr "Переменная высота"
#: meter_strip.cc:765
-#, fuzzy
msgid "Short"
-msgstr "Короткое"
+msgstr ""
#: meter_strip.cc:766
msgid "Tall"
@@ -7573,31 +7523,31 @@ msgstr "Среднеквадратичное + пиковое значение"
#: meter_patterns.cc:87
msgid "IEC1/DIN"
-msgstr ""
+msgstr "IEC1/DIN"
#: meter_patterns.cc:90
msgid "IEC1/Nordic"
-msgstr ""
+msgstr "IEC1/Nordic"
#: meter_patterns.cc:93
msgid "IEC2/BBC"
-msgstr ""
+msgstr "IEC2/BBC"
#: meter_patterns.cc:96
msgid "IEC2/EBU"
-msgstr ""
+msgstr "IEC2/EBU"
#: meter_patterns.cc:99
msgid "K20"
-msgstr ""
+msgstr "K20"
#: meter_patterns.cc:102
msgid "K14"
-msgstr ""
+msgstr "K14"
#: meter_patterns.cc:105
msgid "VU"
-msgstr ""
+msgstr "VU"
#: monitor_section.cc:62
msgid "SiP"
@@ -7902,11 +7852,11 @@ msgstr ""
#: opts.cc:63
msgid ""
-" -c, --name <name> Use a specific jack client name, default is "
+" -c, --name <name> Use a specific backend client name, default is "
"ardour\n"
msgstr ""
-" -c, --jack-client-name имя Использовать другое имя клиента к JACK, "
-"по умолчанию -- ardour\n"
+" -c, --name <имя> Использовать другое имя клиента звуковой "
+"подсистемы, по умолчанию -- ardour\n"
#: opts.cc:64
msgid ""
@@ -7979,7 +7929,7 @@ msgstr ""
msgid "Panner (2D)"
msgstr "Панорамирование (2D)"
-#: panner2d.cc:783 panner_ui.cc:384 plugin_ui.cc:451
+#: panner2d.cc:783 panner_ui.cc:383 plugin_ui.cc:448
msgid "Bypass"
msgstr "Обход"
@@ -7987,15 +7937,15 @@ msgstr "Обход"
msgid "Panner"
msgstr "Панорамирование"
-#: panner_ui.cc:71
+#: panner_ui.cc:70
msgid "Pan automation mode"
msgstr "Режим автоматизации панорамы"
-#: panner_ui.cc:72
+#: panner_ui.cc:71
msgid "Pan automation type"
msgstr "Тип автоматизации панорамы"
-#: panner_ui.cc:295
+#: panner_ui.cc:294
msgid ""
"No panner user interface is currently available for %1-in/2out tracks/busses"
msgstr ""
@@ -8148,65 +8098,65 @@ msgstr "По создателю"
msgid "By Category"
msgstr "По категории"
-#: plugin_ui.cc:116
+#: plugin_ui.cc:114
msgid "Eh? LADSPA plugins don't have editors!"
msgstr "Что? У эффектов LADSPA нет своих редакторов!"
-#: plugin_ui.cc:125 plugin_ui.cc:227
+#: plugin_ui.cc:123 plugin_ui.cc:226
msgid ""
"unknown type of editor-supplying plugin (note: no VST support in this "
"version of %1)"
msgstr ""
-#: plugin_ui.cc:128
+#: plugin_ui.cc:126
msgid "unknown type of editor-supplying plugin"
msgstr ""
-#: plugin_ui.cc:257
+#: plugin_ui.cc:256
msgid ""
"unknown type of editor-supplying plugin (note: no linuxVST support in this "
"version of %1)"
msgstr ""
-#: plugin_ui.cc:329
+#: plugin_ui.cc:328
msgid "create_lv2_editor called on non-LV2 plugin"
msgstr ""
-#: plugin_ui.cc:417
+#: plugin_ui.cc:414
msgid "Add"
msgstr "Добавить"
-#: plugin_ui.cc:421
+#: plugin_ui.cc:418
msgid "Description"
msgstr "Описание"
-#: plugin_ui.cc:422
+#: plugin_ui.cc:419
msgid "Plugin analysis"
msgstr "Частотный анализ модуля"
-#: plugin_ui.cc:429
+#: plugin_ui.cc:426
msgid ""
"Presets (if any) for this plugin\n"
"(Both factory and user-created)"
msgstr "Все доступные профили этого модуля,как «заводские», так и собственные"
-#: plugin_ui.cc:430
+#: plugin_ui.cc:427
msgid "Save a new preset"
msgstr "Сохранить новый профиль"
-#: plugin_ui.cc:431
+#: plugin_ui.cc:428
msgid "Save the current preset"
msgstr "Сохранить текущий профиль"
-#: plugin_ui.cc:432
+#: plugin_ui.cc:429
msgid "Delete the current preset"
msgstr "Удалить текущий профиль"
-#: plugin_ui.cc:433
+#: plugin_ui.cc:430
msgid "Disable signal processing by the plugin"
msgstr "Выключить обработку сигнала этим модулем"
-#: plugin_ui.cc:466 plugin_ui.cc:662
+#: plugin_ui.cc:463 plugin_ui.cc:659
msgid ""
"Click to allow the plugin to receive keyboard events that %1 would normally "
"use as a shortcut"
@@ -8214,71 +8164,71 @@ msgstr ""
"Щёлкните, чтобы разрешить этому модулю получать клавиатурные события, "
"которые %1 обычно использует как горячие клавиши"
-#: plugin_ui.cc:467
+#: plugin_ui.cc:464
msgid "Click to enable/disable this plugin"
msgstr "Щелкните, чтобы включить или отключить этот модуль"
-#: plugin_ui.cc:506
+#: plugin_ui.cc:503
msgid "latency (%1 sample)"
msgid_plural "latency (%1 samples)"
msgstr[0] "Задержка (%1 сэмпл)"
msgstr[1] "Задержка (%1 сэмпла)"
msgstr[2] "Задержка (%1 сэмплов)"
-#: plugin_ui.cc:508
+#: plugin_ui.cc:505
msgid "latency (%1 ms)"
msgstr "Задержка (%1 мс)"
-#: plugin_ui.cc:519
+#: plugin_ui.cc:516
msgid "Edit Latency"
msgstr "Изменить задержку"
-#: plugin_ui.cc:558
+#: plugin_ui.cc:555
msgid "Plugin preset %1 not found"
msgstr "Предустановка модуля %1 не обнаружена"
-#: plugin_ui.cc:595
+#: plugin_ui.cc:592
msgid ""
"Plugin presets are not supported in this build of %1. Consider paying for a "
"full version"
msgstr ""
-#: plugin_ui.cc:615 plugin_ui.cc:630
+#: plugin_ui.cc:612 plugin_ui.cc:627
msgid ""
"Plugin presets are not supported in this build of %1. Consider paying for a "
"newer version"
msgstr ""
-#: plugin_ui.cc:669
+#: plugin_ui.cc:666
msgid "Click to allow normal use of %1 keyboard shortcuts"
msgstr ""
"Щёлкните, чтобы переключиться на обычное использование горячих клавиш %1"
-#: port_group.cc:335
+#: port_group.cc:337
msgid "%1 Busses"
msgstr "Шины %1"
-#: port_group.cc:336
+#: port_group.cc:338
msgid "%1 Tracks"
msgstr "Дорожки %1"
-#: port_group.cc:337
+#: port_group.cc:339
msgid "Hardware"
msgstr "Аппаратное обеспечение"
-#: port_group.cc:338
+#: port_group.cc:340
msgid "%1 Misc"
msgstr "Прочее"
-#: port_group.cc:339
+#: port_group.cc:341
msgid "Other"
msgstr "Прочее"
-#: port_group.cc:430 port_group.cc:431
+#: port_group.cc:432 port_group.cc:433
msgid "LTC Out"
msgstr "LTC Out"
-#: port_group.cc:434 port_group.cc:435
+#: port_group.cc:436 port_group.cc:437
msgid "LTC In"
msgstr "LTC In"
@@ -8314,15 +8264,15 @@ msgstr "MIDI clock out"
msgid "MMC out"
msgstr "MMC out"
-#: port_group.cc:540
+#: port_group.cc:532
msgid ":monitor"
msgstr ""
-#: port_group.cc:552
+#: port_group.cc:544
msgid "system:"
msgstr ""
-#: port_group.cc:553
+#: port_group.cc:545
msgid "alsa_pcm"
msgstr "alsa_pcm"
@@ -8338,18 +8288,10 @@ msgstr "Посыл/Выход"
msgid "Return/Input"
msgstr "Возврат/Вход"
-#: port_insert_ui.cc:71 port_insert_ui.cc:99
-msgid "Disconnected from audio engine"
-msgstr "Выполнено отсоединение от звукового движка"
-
#: port_insert_ui.cc:86
msgid "No signal detected"
msgstr ""
-#: port_insert_ui.cc:135
-msgid "Detecting ..."
-msgstr "Выполняется определение..."
-
#: port_insert_ui.cc:166
msgid "Port Insert "
msgstr "Вставка порта"
@@ -8468,7 +8410,7 @@ msgstr "Скрыть все регуляторы"
msgid "on"
msgstr "Вкл"
-#: processor_box.cc:465 rc_option_editor.cc:1911 rc_option_editor.cc:1925
+#: processor_box.cc:465 rc_option_editor.cc:1907 rc_option_editor.cc:1921
msgid "off"
msgstr "Выкл"
@@ -8480,7 +8422,7 @@ msgstr ""
"Щелчком правой клавишей мыши можно добавлять, \n"
"изменять и удалять модули, посылы, возвраты и прочее."
-#: processor_box.cc:1197 processor_box.cc:1591
+#: processor_box.cc:1197 processor_box.cc:1618
msgid "Plugin Incompatibility"
msgstr "Несовместимость модулей"
@@ -8544,7 +8486,7 @@ msgstr ""
msgid "Cannot set up new send: %1"
msgstr "Невозможно настроить новый посыл: %1"
-#: processor_box.cc:1594
+#: processor_box.cc:1621
msgid ""
"You cannot reorder these plugins/sends/inserts\n"
"in that way because the inputs and\n"
@@ -8554,19 +8496,19 @@ msgstr ""
"посылы и возвраты подобным образом, поскольку \n"
"входы и выходы перестанут корректно работать."
-#: processor_box.cc:1778
+#: processor_box.cc:1805
msgid "Rename Processor"
msgstr "Переименовать обработчик"
-#: processor_box.cc:1809
+#: processor_box.cc:1836
msgid "At least 100 IO objects exist with a name like %1 - name not changed"
msgstr ""
-#: processor_box.cc:1943
+#: processor_box.cc:1970
msgid "plugin insert constructor failed"
msgstr ""
-#: processor_box.cc:1954
+#: processor_box.cc:1981
msgid ""
"Copying the set of processors on the clipboard failed,\n"
"probably because the I/O configuration of the plugins\n"
@@ -8576,7 +8518,7 @@ msgstr ""
"буфер обмена. Вероятно, конфигурация входа и выхода\n"
"модулей не совпала с конфигурацией этой дорожки."
-#: processor_box.cc:2000
+#: processor_box.cc:2027
msgid ""
"Do you really want to remove all processors from %1?\n"
"(this cannot be undone)"
@@ -8585,15 +8527,15 @@ msgstr ""
"обработчики из \"%1\" ?\n"
"(отмена невозможна)"
-#: processor_box.cc:2004 processor_box.cc:2029
+#: processor_box.cc:2031 processor_box.cc:2056
msgid "Yes, remove them all"
msgstr "Да, удалить их все"
-#: processor_box.cc:2006 processor_box.cc:2031
+#: processor_box.cc:2033 processor_box.cc:2058
msgid "Remove processors"
msgstr "Удалить обработчики"
-#: processor_box.cc:2021
+#: processor_box.cc:2048
msgid ""
"Do you really want to remove all pre-fader processors from %1?\n"
"(this cannot be undone)"
@@ -8602,7 +8544,7 @@ msgstr ""
"предфейдерные обработчики из \"%1\" ?\n"
"(отмена невозможна)"
-#: processor_box.cc:2024
+#: processor_box.cc:2051
msgid ""
"Do you really want to remove all post-fader processors from %1?\n"
"(this cannot be undone)"
@@ -8611,54 +8553,58 @@ msgstr ""
"послефейдерные обработчики из \"%1\" ?\n"
"(отмена невозможна)"
-#: processor_box.cc:2200
+#: processor_box.cc:2239
msgid "New Plugin"
msgstr "Добавить модуль"
-#: processor_box.cc:2203
+#: processor_box.cc:2242
msgid "New Insert"
msgstr "Добавить возврат"
-#: processor_box.cc:2206
+#: processor_box.cc:2245
msgid "New External Send ..."
msgstr "Добавить внешний посыл с портом JACK..."
-#: processor_box.cc:2210
+#: processor_box.cc:2249
msgid "New Aux Send ..."
msgstr "Добавить внешний посыл без порта JACK..."
-#: processor_box.cc:2214
+#: processor_box.cc:2253
msgid "Clear (all)"
msgstr "Очистить (всё)"
-#: processor_box.cc:2216
+#: processor_box.cc:2255
msgid "Clear (pre-fader)"
msgstr "Очистить (до фейдера)"
-#: processor_box.cc:2218
+#: processor_box.cc:2257
msgid "Clear (post-fader)"
msgstr "Очистить (после фейдера)"
-#: processor_box.cc:2244
+#: processor_box.cc:2283
msgid "Activate All"
msgstr "Активировать все"
-#: processor_box.cc:2246
+#: processor_box.cc:2285
msgid "Deactivate All"
msgstr "Деактивировать все"
-#: processor_box.cc:2248
+#: processor_box.cc:2287
msgid "A/B Plugins"
msgstr "Отключить все"
-#: processor_box.cc:2257
+#: processor_box.cc:2296
msgid "Edit with generic controls..."
msgstr "Изменить с интерфейсом хоста..."
-#: processor_box.cc:2557
+#: processor_box.cc:2599
msgid "%1: %2 (by %3)"
msgstr "%1: %2 (автор — %3)"
+#: processor_box.cc:2601
+msgid "%2 (by %3)"
+msgstr ""
+
#: patch_change_dialog.cc:51
msgid "Patch Change"
msgstr "Смена программы"
@@ -8707,122 +8653,122 @@ msgstr "Начало привязки ноты"
msgid "Snap note end"
msgstr "Конец привязки ноты"
-#: rc_option_editor.cc:69
+#: rc_option_editor.cc:67
msgid "Click audio file:"
msgstr "Файл щелчка доли:"
-#: rc_option_editor.cc:72 rc_option_editor.cc:79
+#: rc_option_editor.cc:70 rc_option_editor.cc:77
msgid "Browse..."
msgstr "Просмотр..."
-#: rc_option_editor.cc:76
+#: rc_option_editor.cc:74
msgid "Click emphasis audio file:"
msgstr "Файл щелчка сильной доли:"
-#: rc_option_editor.cc:108
+#: rc_option_editor.cc:106
msgid "Choose Click"
msgstr "Выберите щелчок метронома"
-#: rc_option_editor.cc:128
+#: rc_option_editor.cc:126
msgid "Choose Click Emphasis"
msgstr "Выберите акцентирующий щелчок метронома"
-#: rc_option_editor.cc:160
+#: rc_option_editor.cc:158
msgid "Limit undo history to"
msgstr "Ограничивать историю действий"
-#: rc_option_editor.cc:161
+#: rc_option_editor.cc:159
msgid "Save undo history of"
msgstr "Ограничивать сохранение истории действий"
-#: rc_option_editor.cc:170 rc_option_editor.cc:177
+#: rc_option_editor.cc:168 rc_option_editor.cc:175
msgid "commands"
msgstr "командами"
-#: rc_option_editor.cc:315
+#: rc_option_editor.cc:313
msgid "Edit using:"
msgstr "Редактировать с:"
-#: rc_option_editor.cc:321 rc_option_editor.cc:347 rc_option_editor.cc:374
+#: rc_option_editor.cc:319 rc_option_editor.cc:345 rc_option_editor.cc:372
msgid "+ button"
msgstr "+ клавиша"
-#: rc_option_editor.cc:341
+#: rc_option_editor.cc:339
msgid "Delete using:"
msgstr "Удалять с:"
-#: rc_option_editor.cc:368
+#: rc_option_editor.cc:366
msgid "Insert note using:"
msgstr "Вставлять ноты с:"
-#: rc_option_editor.cc:395
+#: rc_option_editor.cc:393
msgid "Ignore snap using:"
msgstr "Игнорировать прилипание с:"
-#: rc_option_editor.cc:411
+#: rc_option_editor.cc:409
msgid "Keyboard layout:"
msgstr "Раскладка клавиатуры:"
-#: rc_option_editor.cc:534
+#: rc_option_editor.cc:532
msgid "Font scaling:"
msgstr "Масштаб шрифта:"
-#: rc_option_editor.cc:586
+#: rc_option_editor.cc:584
msgid "Playback (seconds of buffering):"
msgstr "Воспроизведение (в секундах):"
-#: rc_option_editor.cc:599
+#: rc_option_editor.cc:597
msgid "Recording (seconds of buffering):"
msgstr "Запись (в секундах):"
-#: rc_option_editor.cc:656
+#: rc_option_editor.cc:654
msgid "Control Surface Protocol"
msgstr "Устройства управления"
-#: rc_option_editor.cc:660
+#: rc_option_editor.cc:658
msgid "Feedback"
msgstr "Отклик"
-#: rc_option_editor.cc:665
+#: rc_option_editor.cc:663
msgid "Double-click on a name to edit settings for an enabled protocol"
msgstr ""
"Двойной щелчок по названию открывает редактор параметров включённого "
"протокола"
-#: rc_option_editor.cc:817
+#: rc_option_editor.cc:815
msgid "Show Video Export Info before export"
msgstr "Показывать диалог с вводной информацией об экспорте видео"
-#: rc_option_editor.cc:818
+#: rc_option_editor.cc:816
msgid "Show Video Server Startup Dialog"
msgstr "Показывать диалог с параметрами видеосервера"
-#: rc_option_editor.cc:819
+#: rc_option_editor.cc:817
msgid "Advanced Setup (remote video server)"
msgstr "Дополнительные параметры (удалённого видеосервера)"
-#: rc_option_editor.cc:827
+#: rc_option_editor.cc:825
msgid ""
"<b>When enabled</b> you can speficify a custom video-server URL and docroot. "
"- Do not enable this option unless you know what you are doing."
msgstr ""
-#: rc_option_editor.cc:829
+#: rc_option_editor.cc:827
msgid "Video Server URL:"
msgstr "URL видеосервера:"
-#: rc_option_editor.cc:834
+#: rc_option_editor.cc:832
msgid ""
"Base URL of the video-server including http prefix. This is usually 'http://"
"hostname.example.org:1554/' and defaults to 'http://localhost:1554/' when "
"the video-server is running locally"
msgstr ""
-#: rc_option_editor.cc:836
+#: rc_option_editor.cc:834
msgid "Video Folder:"
msgstr "Папка с видео:"
-#: rc_option_editor.cc:841
+#: rc_option_editor.cc:839
msgid ""
"Local path to the video-server document-root. Only files below this "
"directory will be accessible by the video-server. If the server run on a "
@@ -8831,7 +8777,7 @@ msgid ""
"monitor and file-browsing when opening/adding a video file."
msgstr ""
-#: rc_option_editor.cc:848
+#: rc_option_editor.cc:846
msgid ""
"<b>When enabled</b> an information window with details is displayed before "
"the video-export dialog."
@@ -8839,7 +8785,7 @@ msgstr ""
"<b>Если включено,</b> перед экспортом видео показывается окно со справочной "
"информацией"
-#: rc_option_editor.cc:853
+#: rc_option_editor.cc:851
msgid ""
"<b>When enabled</b> the video server is never launched automatically without "
"confirmation"
@@ -8847,101 +8793,101 @@ msgstr ""
"<b>Если включено,</b> видеосервер никогда автоматически не запускается без "
"подтверждения"
-#: rc_option_editor.cc:993
+#: rc_option_editor.cc:991
msgid "%1 Preferences"
msgstr "Параметры %1"
-#: rc_option_editor.cc:1004
+#: rc_option_editor.cc:1002
msgid "DSP CPU Utilization"
msgstr "Использование центрального процессора"
-#: rc_option_editor.cc:1008
+#: rc_option_editor.cc:1006
msgid "Signal processing uses"
msgstr "При обработке используются"
-#: rc_option_editor.cc:1013
+#: rc_option_editor.cc:1011
msgid "all but one processor"
msgstr "Все процессоры кроме одного"
-#: rc_option_editor.cc:1014
+#: rc_option_editor.cc:1012
msgid "all available processors"
msgstr "Все доступные процессоры"
-#: rc_option_editor.cc:1017
+#: rc_option_editor.cc:1015
msgid "%1 processors"
msgstr "%1 процессора"
-#: rc_option_editor.cc:1020
+#: rc_option_editor.cc:1018
msgid "This setting will only take effect when %1 is restarted."
msgstr "Это изменение вступит в силу при следующем запуске %1."
-#: rc_option_editor.cc:1025
+#: rc_option_editor.cc:1023
msgid "Options|Undo"
msgstr "История действий"
-#: rc_option_editor.cc:1032
+#: rc_option_editor.cc:1030
msgid "Verify removal of last capture"
msgstr "Проверять удаление последней записи"
-#: rc_option_editor.cc:1040
+#: rc_option_editor.cc:1038
msgid "Make periodic backups of the session file"
msgstr "Периодически создавать резервные копии файла сеанса"
-#: rc_option_editor.cc:1045
+#: rc_option_editor.cc:1043
msgid "Session Management"
msgstr "Управление сеансами"
-#: rc_option_editor.cc:1050
+#: rc_option_editor.cc:1048
msgid "Always copy imported files"
msgstr "Всегда копировать импортируемые файлы"
-#: rc_option_editor.cc:1057
+#: rc_option_editor.cc:1055
msgid "Default folder for new sessions:"
msgstr "Папка для новых сеансов по умолчанию:"
-#: rc_option_editor.cc:1065
+#: rc_option_editor.cc:1063
msgid "Maximum number of recent sessions"
msgstr "Максимальное число недавних сеансов"
-#: rc_option_editor.cc:1078
+#: rc_option_editor.cc:1076
msgid "Click gain level"
msgstr "Уровень щелчка метронома"
-#: rc_option_editor.cc:1083 route_time_axis.cc:215 route_time_axis.cc:676
+#: rc_option_editor.cc:1081 route_time_axis.cc:215 route_time_axis.cc:676
msgid "Automation"
msgstr "Автоматизация"
-#: rc_option_editor.cc:1088
+#: rc_option_editor.cc:1086
msgid "Thinning factor (larger value => less data)"
msgstr ""
-#: rc_option_editor.cc:1097
+#: rc_option_editor.cc:1095
msgid "Automation sampling interval (milliseconds)"
msgstr "Интервал сэмплирования для автоматизации (мс)"
-#: rc_option_editor.cc:1109
+#: rc_option_editor.cc:1107
msgid "Keep record-enable engaged on stop"
msgstr "Готовность к записи сохраняется после остановки"
-#: rc_option_editor.cc:1118
+#: rc_option_editor.cc:1116
msgid "Stop recording when an xrun occurs"
msgstr "Останавливать запись при рассинхронизации"
-#: rc_option_editor.cc:1123
+#: rc_option_editor.cc:1121
msgid ""
"<b>When enabled</b> %1 will stop recording if an over- or underrun is "
"detected by the audio engine"
msgstr ""
-#: rc_option_editor.cc:1129
+#: rc_option_editor.cc:1127
msgid "Create markers where xruns occur"
msgstr "Создавать маркеры в точках рассинхронизации"
-#: rc_option_editor.cc:1138
+#: rc_option_editor.cc:1136
msgid "Stop at the end of the session"
msgstr "Останавливаться в конце сеанса"
-#: rc_option_editor.cc:1143
+#: rc_option_editor.cc:1141
msgid ""
"<b>When enabled</b> if %1 is <b>not recording</b>, it will stop the "
"transport when it reaches the current session end marker\n"
@@ -8954,13 +8900,13 @@ msgstr ""
"\n"
"<b>Если выключено</b>, %1 будет воспроизводить дальше маркера конца сеанса."
-#: rc_option_editor.cc:1151
-msgid "Do seamless looping (not possible when slaved to MTC, JACK etc)"
+#: rc_option_editor.cc:1149
+msgid "Do seamless looping (not possible when slaved to MTC, LTC etc)"
msgstr ""
"Бесшовное циклическое воспроизведение (невозможно, когда Ardour ведом по "
-"MTC, JACK и т.д.)"
+"MTC, LTC и т.д.)"
-#: rc_option_editor.cc:1156
+#: rc_option_editor.cc:1154
msgid ""
"<b>When enabled</b> this will loop by reading ahead and wrapping around at "
"the loop point, preventing any need to do a transport locate at the end of "
@@ -8970,11 +8916,11 @@ msgid ""
"loop when %1 reaches the end which will often cause a small click or delay"
msgstr ""
-#: rc_option_editor.cc:1164
+#: rc_option_editor.cc:1162
msgid "Disable per-track record disarm while rolling"
msgstr "Сделать невозможным отключение готовности к записи при захвате"
-#: rc_option_editor.cc:1168
+#: rc_option_editor.cc:1166
msgid ""
"<b>When enabled</b> this will prevent you from accidentally stopping "
"specific tracks recording during a take"
@@ -8982,11 +8928,11 @@ msgstr ""
"<b>Если включено</b>, вы не сможете нечаянно выключить готовность к записи "
"во время захвата сигнала"
-#: rc_option_editor.cc:1173
+#: rc_option_editor.cc:1171
msgid "12dB gain reduction during fast-forward and fast-rewind"
msgstr "Приглушение громкости на 12Дб при перемотке"
-#: rc_option_editor.cc:1177
+#: rc_option_editor.cc:1175
msgid ""
"This will reduce the unpleasant increase in perceived volume that occurs "
"when fast-forwarding or rewinding through some kinds of audio"
@@ -8994,19 +8940,19 @@ msgstr ""
"При перемотке воспринимаемое на слух резкое увеличение громкости будет "
"нивелировано"
-#: rc_option_editor.cc:1181
+#: rc_option_editor.cc:1179
msgid "Sync/Slave"
msgstr "Синхронизация и ведомый режим"
-#: rc_option_editor.cc:1185
+#: rc_option_editor.cc:1183
msgid "External timecode source"
msgstr "Внешний источник синхросигнала"
-#: rc_option_editor.cc:1195
+#: rc_option_editor.cc:1193
msgid "Match session video frame rate to external timecode"
msgstr "Адаптировать частоту кадров видео в сеансе к внешнему тайм-коду"
-#: rc_option_editor.cc:1201
+#: rc_option_editor.cc:1199
msgid ""
"This option controls the value of the video frame rate <i>while chasing</i> "
"an external timecode source.\n"
@@ -9029,21 +8975,21 @@ msgstr ""
"этого индикатор частоты кадров в основном счётчике будет мерцать красным, а "
"%1 будет конвертировать внешний тайм-код в тайм-код сеанса."
-#: rc_option_editor.cc:1211
+#: rc_option_editor.cc:1209
msgid "External timecode is sync locked"
msgstr "Внешний источник синхросигнала заблокировн"
-#: rc_option_editor.cc:1217
+#: rc_option_editor.cc:1215
msgid ""
"<b>When enabled</b> indicates that the selected external timecode source "
"shares sync (Black &amp; Burst, Wordclock, etc) with the audio interface."
msgstr ""
-#: rc_option_editor.cc:1224
+#: rc_option_editor.cc:1222
msgid "Lock to 29.9700 fps instead of 30000/1001"
msgstr "Принудительно использовать 29,9700 к/с вместо 30000/1001"
-#: rc_option_editor.cc:1230
+#: rc_option_editor.cc:1228
msgid ""
"<b>When enabled</b> the external timecode source is assumed to use 29.97 fps "
"instead of 30000/1001.\n"
@@ -9056,143 +9002,143 @@ msgid ""
"variant of using exactly 29.97 fps has zero timecode drift.\n"
msgstr ""
-#: rc_option_editor.cc:1240
+#: rc_option_editor.cc:1238
msgid "LTC Reader"
msgstr "Чтение LTC"
-#: rc_option_editor.cc:1244
+#: rc_option_editor.cc:1242
msgid "LTC incoming port"
msgstr "Входящий порт LTC"
-#: rc_option_editor.cc:1257
+#: rc_option_editor.cc:1255
msgid "LTC Generator"
msgstr "Генератор LTC"
-#: rc_option_editor.cc:1262
+#: rc_option_editor.cc:1260
msgid "Enable LTC generator"
msgstr "Включить генератор LTC"
-#: rc_option_editor.cc:1269
+#: rc_option_editor.cc:1267
msgid "send LTC while stopped"
msgstr "Посылать LTC во время остановки"
-#: rc_option_editor.cc:1275
+#: rc_option_editor.cc:1273
msgid ""
"<b>When enabled</b> %1 will continue to send LTC information even when the "
"transport (playhead) is not moving"
msgstr ""
-#: rc_option_editor.cc:1281
+#: rc_option_editor.cc:1279
msgid "LTC generator level"
msgstr "Уровень генератора LTC"
-#: rc_option_editor.cc:1285
+#: rc_option_editor.cc:1283
msgid ""
"Specify the Peak Volume of the generated LTC signal in dbFS. A good value "
"is 0dBu ^= -18dbFS in an EBU calibrated system"
msgstr ""
-#: rc_option_editor.cc:1297
+#: rc_option_editor.cc:1295
msgid "Link selection of regions and tracks"
msgstr "Связывать выделение областей и дорожек"
-#: rc_option_editor.cc:1305
+#: rc_option_editor.cc:1303
msgid "Move relevant automation when audio regions are moved"
msgstr "Перемещать автоматизацию вместе с областями"
-#: rc_option_editor.cc:1313
+#: rc_option_editor.cc:1311
msgid "Show meters on tracks in the editor"
msgstr "Показывать индикаторы громкости в дорожках"
-#: rc_option_editor.cc:1321
+#: rc_option_editor.cc:1319
msgid "Display master-meter in the toolbar"
-msgstr ""
+msgstr "Показывать индикатор громкости мастер-шины в панели"
-#: rc_option_editor.cc:1328
+#: rc_option_editor.cc:1326
msgid "Regions in active edit groups are edited together"
msgstr "Области в активных редактируемых группах меняются вместе"
-#: rc_option_editor.cc:1329
+#: rc_option_editor.cc:1327
msgid "whenever they overlap in time"
msgstr "Когда пересекаются по времени"
-#: rc_option_editor.cc:1330
+#: rc_option_editor.cc:1328
msgid "only if they have identical length, position and origin"
msgstr "При одинаковой длительности, позиции и происхождении"
-#: rc_option_editor.cc:1340
+#: rc_option_editor.cc:1338
msgid "Make rubberband selection rectangle snap to the grid"
msgstr "Прямоугольное выделение прилипает к сетке"
-#: rc_option_editor.cc:1348
+#: rc_option_editor.cc:1346
msgid "Show waveforms in regions"
msgstr "Показывать форму волны в областях"
-#: rc_option_editor.cc:1356
+#: rc_option_editor.cc:1354
msgid "Show gain envelopes in audio regions"
msgstr "Показывать огибающие усиления"
-#: rc_option_editor.cc:1357
+#: rc_option_editor.cc:1355
msgid "in all modes"
msgstr "Во всех режимах"
-#: rc_option_editor.cc:1358
+#: rc_option_editor.cc:1356
msgid "only in region gain mode"
msgstr "Только в режиме правки огибающей"
-#: rc_option_editor.cc:1365
+#: rc_option_editor.cc:1363
msgid "Waveform scale"
msgstr "Масштаб сигнала"
-#: rc_option_editor.cc:1370
+#: rc_option_editor.cc:1368
msgid "linear"
msgstr "Линейный"
-#: rc_option_editor.cc:1371
+#: rc_option_editor.cc:1369
msgid "logarithmic"
msgstr "Логарифмический"
-#: rc_option_editor.cc:1377
+#: rc_option_editor.cc:1375
msgid "Waveform shape"
msgstr "Форма сигнала"
-#: rc_option_editor.cc:1382
+#: rc_option_editor.cc:1380
msgid "traditional"
msgstr "Обычная"
-#: rc_option_editor.cc:1383
+#: rc_option_editor.cc:1381
msgid "rectified"
msgstr "От низа"
-#: rc_option_editor.cc:1390
+#: rc_option_editor.cc:1388
msgid "Show waveforms for audio while it is being recorded"
msgstr "Показывать форму сигнала при записи"
-#: rc_option_editor.cc:1398
+#: rc_option_editor.cc:1396
msgid "Show zoom toolbar"
msgstr "Показывать панель для управления масштабом"
-#: rc_option_editor.cc:1406
+#: rc_option_editor.cc:1404
msgid "Color regions using their track's color"
msgstr "Раскрашивать области цветом дорожки"
-#: rc_option_editor.cc:1414
+#: rc_option_editor.cc:1412
msgid "Update editor window during drags of the summary"
msgstr "Обновлять окно редактора при изменениях в панели сводки"
-#: rc_option_editor.cc:1422
+#: rc_option_editor.cc:1420
msgid "Synchronise editor and mixer track order"
msgstr "Синхронизировать порядок дорожек в редакторе и микшере"
-#: rc_option_editor.cc:1430
+#: rc_option_editor.cc:1428
msgid "Synchronise editor and mixer selection"
msgstr "Синхронизировать выделение в редакторе и микшере"
-#: rc_option_editor.cc:1437
+#: rc_option_editor.cc:1435
msgid "Name new markers"
msgstr "Спрашивать об имени каждого нового маркера"
-#: rc_option_editor.cc:1443
+#: rc_option_editor.cc:1441
msgid ""
"If enabled, popup a dialog when a new marker is created to allow its name to "
"be set as it is created.\n"
@@ -9200,240 +9146,244 @@ msgid ""
"You can always rename markers by right-clicking on them"
msgstr ""
-#: rc_option_editor.cc:1449
+#: rc_option_editor.cc:1447
msgid "Auto-scroll editor window when dragging near its edges"
msgstr ""
"Автоматически прокручивать окно редактора при перетаскивании близко к краям"
-#: rc_option_editor.cc:1456
+#: rc_option_editor.cc:1454
msgid "Buffering"
msgstr "Буферизация"
-#: rc_option_editor.cc:1464
+#: rc_option_editor.cc:1462
msgid "Record monitoring handled by"
msgstr "Мониторинг записи выполняет"
-#: rc_option_editor.cc:1475
+#: rc_option_editor.cc:1468
+msgid "via Audio Driver"
+msgstr ""
+
+#: rc_option_editor.cc:1471
msgid "ardour"
msgstr "Ardour"
-#: rc_option_editor.cc:1476
+#: rc_option_editor.cc:1472
msgid "audio hardware"
msgstr "Аппаратное обеспечение"
-#: rc_option_editor.cc:1483
+#: rc_option_editor.cc:1479
msgid "Tape machine mode"
msgstr "Режим плёночного магнитофона"
-#: rc_option_editor.cc:1488
+#: rc_option_editor.cc:1484
msgid "Connection of tracks and busses"
msgstr "Соединение дорожек и шин"
-#: rc_option_editor.cc:1493
+#: rc_option_editor.cc:1489
msgid "Auto-connect master/monitor busses"
msgstr "Автоматически соединять шины master/monitor"
-#: rc_option_editor.cc:1500
+#: rc_option_editor.cc:1496
msgid "Connect track inputs"
msgstr "Соединять входы дорожек"
-#: rc_option_editor.cc:1505
+#: rc_option_editor.cc:1501
msgid "automatically to physical inputs"
msgstr "Автоматически с физическими входами"
-#: rc_option_editor.cc:1506 rc_option_editor.cc:1519
+#: rc_option_editor.cc:1502 rc_option_editor.cc:1515
msgid "manually"
msgstr "Вручную"
-#: rc_option_editor.cc:1512
+#: rc_option_editor.cc:1508
msgid "Connect track and bus outputs"
msgstr "Соединять выходы дорожек и шин"
-#: rc_option_editor.cc:1517
+#: rc_option_editor.cc:1513
msgid "automatically to physical outputs"
msgstr "Автоматически с физическими выходами"
-#: rc_option_editor.cc:1518
+#: rc_option_editor.cc:1514
msgid "automatically to master bus"
msgstr "Автоматически с общей шиной"
-#: rc_option_editor.cc:1523
+#: rc_option_editor.cc:1519
msgid "Denormals"
msgstr "Отклонения сигнала"
-#: rc_option_editor.cc:1528
+#: rc_option_editor.cc:1524
msgid "Use DC bias to protect against denormals"
msgstr ""
-#: rc_option_editor.cc:1535
+#: rc_option_editor.cc:1531
msgid "Processor handling"
-msgstr ""
+msgstr "Что делать с обработчиками"
-#: rc_option_editor.cc:1540
+#: rc_option_editor.cc:1536
msgid "no processor handling"
-msgstr ""
+msgstr "Ничего не делать"
-#: rc_option_editor.cc:1545
+#: rc_option_editor.cc:1541
msgid "use FlushToZero"
msgstr "Использовать FlushToZero"
-#: rc_option_editor.cc:1549
+#: rc_option_editor.cc:1545
msgid "use DenormalsAreZero"
msgstr "Использовать DenormalsAreZero"
-#: rc_option_editor.cc:1553
+#: rc_option_editor.cc:1549
msgid "use FlushToZero and DenormalsAreZero"
msgstr "Использовать FlushToZero и DenormalsAreZero"
-#: rc_option_editor.cc:1563
+#: rc_option_editor.cc:1559
msgid "Silence plugins when the transport is stopped"
msgstr "Приглушать модули при остановке транспорта"
-#: rc_option_editor.cc:1571
+#: rc_option_editor.cc:1567
msgid "Make new plugins active"
msgstr "Делать новые эффекты/инструменты активными"
-#: rc_option_editor.cc:1579
+#: rc_option_editor.cc:1575
msgid "Enable automatic analysis of audio"
msgstr "Включить автоматический анализ звука"
-#: rc_option_editor.cc:1587
+#: rc_option_editor.cc:1583
msgid "Replicate missing region channels"
msgstr "Воссоздавать отсутствующие каналы области"
-#: rc_option_editor.cc:1594 rc_option_editor.cc:1609 rc_option_editor.cc:1621
-#: rc_option_editor.cc:1633 rc_option_editor.cc:1645 rc_option_editor.cc:1649
-#: rc_option_editor.cc:1657 rc_option_editor.cc:1665 rc_option_editor.cc:1673
-#: rc_option_editor.cc:1675 rc_option_editor.cc:1683 rc_option_editor.cc:1691
-#: rc_option_editor.cc:1699
+#: rc_option_editor.cc:1590 rc_option_editor.cc:1605 rc_option_editor.cc:1617
+#: rc_option_editor.cc:1629 rc_option_editor.cc:1641 rc_option_editor.cc:1645
+#: rc_option_editor.cc:1653 rc_option_editor.cc:1661 rc_option_editor.cc:1669
+#: rc_option_editor.cc:1671 rc_option_editor.cc:1679 rc_option_editor.cc:1687
+#: rc_option_editor.cc:1695
msgid "Solo / mute"
msgstr "Соло/Приглушение"
-#: rc_option_editor.cc:1597
+#: rc_option_editor.cc:1593
msgid "Solo-in-place mute cut (dB)"
msgstr "Приглушение сигнала при солировании (dB)"
-#: rc_option_editor.cc:1604
+#: rc_option_editor.cc:1600
msgid "Solo controls are Listen controls"
msgstr "Управление солированием работает как управление прослушиванием"
-#: rc_option_editor.cc:1613
+#: rc_option_editor.cc:1609
msgid "Listen Position"
msgstr "Положение прослушивания"
-#: rc_option_editor.cc:1618
+#: rc_option_editor.cc:1614
msgid "after-fader (AFL)"
msgstr "После фейдера (AFL)"
-#: rc_option_editor.cc:1619
+#: rc_option_editor.cc:1615
msgid "pre-fader (PFL)"
msgstr "До фейдера (PFL)"
-#: rc_option_editor.cc:1625
+#: rc_option_editor.cc:1621
msgid "PFL signals come from"
msgstr "Источник сигнала PFL"
-#: rc_option_editor.cc:1630
+#: rc_option_editor.cc:1626
msgid "before pre-fader processors"
msgstr "До послефейдерных обработчиков"
-#: rc_option_editor.cc:1631
+#: rc_option_editor.cc:1627
msgid "pre-fader but after pre-fader processors"
msgstr "До фейдера, но после предфейдерных обработчиков"
-#: rc_option_editor.cc:1637
+#: rc_option_editor.cc:1633
msgid "AFL signals come from"
msgstr "Источник сигнала AFL"
-#: rc_option_editor.cc:1642
+#: rc_option_editor.cc:1638
msgid "immediately post-fader"
msgstr "Сразу после фейдера"
-#: rc_option_editor.cc:1643
+#: rc_option_editor.cc:1639
msgid "after post-fader processors (before pan)"
msgstr "За послефейдерными обработчиками и до панорамирования"
-#: rc_option_editor.cc:1652
+#: rc_option_editor.cc:1648
msgid "Exclusive solo"
msgstr "Эксклюзивное солирование"
-#: rc_option_editor.cc:1660
+#: rc_option_editor.cc:1656
msgid "Show solo muting"
msgstr "Показывать приглушение при солировании"
-#: rc_option_editor.cc:1668
+#: rc_option_editor.cc:1664
msgid "Soloing overrides muting"
msgstr "Солирование приоритетнее приглушения"
-#: rc_option_editor.cc:1673
+#: rc_option_editor.cc:1669
msgid "Default track / bus muting options"
msgstr "Приглушение дорожек и шин по умолчанию затрагивает"
-#: rc_option_editor.cc:1678
+#: rc_option_editor.cc:1674
msgid "Mute affects pre-fader sends"
msgstr "Предфейдерные посылы"
-#: rc_option_editor.cc:1686
+#: rc_option_editor.cc:1682
msgid "Mute affects post-fader sends"
msgstr "Послефейдерные посылы"
-#: rc_option_editor.cc:1694
+#: rc_option_editor.cc:1690
msgid "Mute affects control outputs"
msgstr "Выходы мониторинга"
-#: rc_option_editor.cc:1702
+#: rc_option_editor.cc:1698
msgid "Mute affects main outputs"
msgstr "Основные выходы"
-#: rc_option_editor.cc:1718
+#: rc_option_editor.cc:1714
msgid "Send MIDI Time Code"
msgstr "Передавать MIDI Time Code"
-#: rc_option_editor.cc:1726
+#: rc_option_editor.cc:1722
msgid "Percentage either side of normal transport speed to transmit MTC"
msgstr ""
-#: rc_option_editor.cc:1735
+#: rc_option_editor.cc:1731
msgid "Obey MIDI Machine Control commands"
msgstr "Выполнять команды MIDI Machine Control"
-#: rc_option_editor.cc:1743
+#: rc_option_editor.cc:1739
msgid "Send MIDI Machine Control commands"
msgstr "Отправлять команды MIDI Machine Control"
-#: rc_option_editor.cc:1751
+#: rc_option_editor.cc:1747
msgid "Send MIDI control feedback"
msgstr "Отправлять отклик на контрольные события MIDI"
-#: rc_option_editor.cc:1759
+#: rc_option_editor.cc:1755
msgid "Inbound MMC device ID"
msgstr "Идентификатор входящего устройства MMC"
-#: rc_option_editor.cc:1768
+#: rc_option_editor.cc:1764
msgid "Outbound MMC device ID"
-msgstr ""
+msgstr "Идентификатор выходящего устройства MMC"
-#: rc_option_editor.cc:1777
+#: rc_option_editor.cc:1773
msgid "Initial program change"
msgstr "Исходная смена программы"
-#: rc_option_editor.cc:1786
+#: rc_option_editor.cc:1782
msgid "Display first MIDI bank/program as 0"
msgstr "Показывать первый банк/программу MIDI как 0"
-#: rc_option_editor.cc:1794
+#: rc_option_editor.cc:1790
msgid "Never display periodic MIDI messages (MTC, MIDI Clock)"
msgstr "Никогда не показывать периодические сообщения MIDI (MTC, MIDI Clock)"
-#: rc_option_editor.cc:1802
+#: rc_option_editor.cc:1798
msgid "Sound MIDI notes as they are selected"
msgstr "Воспроизводить ноты MIDI при их выделении"
-#: rc_option_editor.cc:1810 rc_option_editor.cc:1820 rc_option_editor.cc:1822
+#: rc_option_editor.cc:1806 rc_option_editor.cc:1816 rc_option_editor.cc:1818
msgid "User interaction"
msgstr "Взаимодействие с пользователем"
-#: rc_option_editor.cc:1813
+#: rc_option_editor.cc:1809
msgid ""
"Use translations of %1 messages\n"
" <i>(requires a restart of %1 to take effect)</i>\n"
@@ -9443,181 +9393,177 @@ msgstr ""
" <i>(вступает в силу после перезапуска %1)</i>\n"
" <i>(если локализация для вашего языка доступна)</i>"
-#: rc_option_editor.cc:1820
+#: rc_option_editor.cc:1816
msgid "Keyboard"
msgstr "Клавиатура"
-#: rc_option_editor.cc:1830
+#: rc_option_editor.cc:1826
msgid "Control surface remote ID"
msgstr "ID для удалённого управления"
-#: rc_option_editor.cc:1835
+#: rc_option_editor.cc:1831
msgid "assigned by user"
msgstr "Назначенные пользователем"
-#: rc_option_editor.cc:1836
+#: rc_option_editor.cc:1832
msgid "follows order of mixer"
msgstr "Следуют порядку микшера"
-#: rc_option_editor.cc:1837
+#: rc_option_editor.cc:1833
msgid "follows order of editor"
msgstr "Следуют порядку редактора"
-#: rc_option_editor.cc:1846 rc_option_editor.cc:1854 rc_option_editor.cc:1864
-#: rc_option_editor.cc:1885 rc_option_editor.cc:1894 rc_option_editor.cc:1902
-#: rc_option_editor.cc:1916 rc_option_editor.cc:1935 rc_option_editor.cc:1951
-#: rc_option_editor.cc:1967 rc_option_editor.cc:1981 rc_option_editor.cc:1995
-#: rc_option_editor.cc:1997
+#: rc_option_editor.cc:1842 rc_option_editor.cc:1850 rc_option_editor.cc:1860
+#: rc_option_editor.cc:1881 rc_option_editor.cc:1890 rc_option_editor.cc:1898
+#: rc_option_editor.cc:1912 rc_option_editor.cc:1931 rc_option_editor.cc:1947
+#: rc_option_editor.cc:1963 rc_option_editor.cc:1977 rc_option_editor.cc:1991
+#: rc_option_editor.cc:1993
msgid "Preferences|GUI"
msgstr "Интерфейс"
-#: rc_option_editor.cc:1849
+#: rc_option_editor.cc:1845
msgid "Graphically indicate mouse pointer hovering over various widgets"
msgstr "Подсвечивать элементы интерфейса под указателем мыши"
-#: rc_option_editor.cc:1857
+#: rc_option_editor.cc:1853
msgid "Show tooltips if mouse hovers over a control"
msgstr "Показывать всплывающие подсказки к элементам интерфейса"
-#: rc_option_editor.cc:1867
+#: rc_option_editor.cc:1863
msgid "GUI"
msgstr "Интерфейс"
-#: rc_option_editor.cc:1870
+#: rc_option_editor.cc:1866
msgid "update transport clock display every 40ms instead of every 100ms"
msgstr "Обновлять счётчик транспорта каждые 40мс вместо каждых 100мс"
-#: rc_option_editor.cc:1887
+#: rc_option_editor.cc:1883
msgid "Mixer Strip"
msgstr "Полоса микшера"
-#: rc_option_editor.cc:1897
+#: rc_option_editor.cc:1893
msgid "Use narrow strips in the mixer by default"
msgstr "Использовать тонкие полоски в микшере по умолчанию"
-#: rc_option_editor.cc:1906
+#: rc_option_editor.cc:1902
msgid "Peak hold time"
msgstr "Удерживание пика"
-#: rc_option_editor.cc:1912
+#: rc_option_editor.cc:1908
msgid "short"
msgstr "Короткое"
-#: rc_option_editor.cc:1913
+#: rc_option_editor.cc:1909
msgid "medium"
msgstr "Среднее"
-#: rc_option_editor.cc:1914
+#: rc_option_editor.cc:1910
msgid "long"
msgstr "Долгое"
-#: rc_option_editor.cc:1920
+#: rc_option_editor.cc:1916
msgid "DPM fall-off"
msgstr "Скорость спадания"
-#: rc_option_editor.cc:1926
+#: rc_option_editor.cc:1922
msgid "slowest [6.6dB/sec]"
msgstr "Самое медленное [6,6 Дб/с]"
-#: rc_option_editor.cc:1927
+#: rc_option_editor.cc:1923
msgid "slow [8.6dB/sec] (BBC PPM, EBU PPM)"
msgstr "Медленное [8,6 Дб/с] (BBC PPM, EBU PPM)"
-#: rc_option_editor.cc:1928
+#: rc_option_editor.cc:1924
msgid "slowish [12.0dB/sec] (DIN)"
msgstr "Неторопливое [12 Дб/с] (DIN)"
-#: rc_option_editor.cc:1929
+#: rc_option_editor.cc:1925
msgid "moderate [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)"
msgstr "Умеренное [13,3 Дб/с] (EBU Digi PPM, IRT Digi PPM)"
-#: rc_option_editor.cc:1930
+#: rc_option_editor.cc:1926
msgid "medium [20dB/sec]"
msgstr "Среднее [20 Дб/с]"
-#: rc_option_editor.cc:1931
+#: rc_option_editor.cc:1927
msgid "fast [32dB/sec]"
msgstr "Быстрое [32 Дб/с]"
-#: rc_option_editor.cc:1932
+#: rc_option_editor.cc:1928
msgid "faster [46dB/sec]"
msgstr "Ещё быстрее [46 Дб/с]"
-#: rc_option_editor.cc:1933
+#: rc_option_editor.cc:1929
msgid "fastest [70dB/sec]"
msgstr "Самое быстрое [70 Дб/с]"
-#: rc_option_editor.cc:1939
-#, fuzzy
+#: rc_option_editor.cc:1935
msgid "Meter line-up level; 0dBu"
-msgstr "Уровень выравнивания"
+msgstr "Точка выравнивания индикатора; 0dBu"
-#: rc_option_editor.cc:1944 rc_option_editor.cc:1960
+#: rc_option_editor.cc:1940 rc_option_editor.cc:1956
msgid "-24dBFS (SMPTE US: 4dBu = -20dBFS)"
-msgstr ""
+msgstr "-24dBFS (SMPTE US: 4dBu = -20dBFS)"
-#: rc_option_editor.cc:1945 rc_option_editor.cc:1961
-#, fuzzy
+#: rc_option_editor.cc:1941 rc_option_editor.cc:1957
msgid "-20dBFS (SMPTE RP.0155)"
-msgstr "-20 Дб (SMPTE)"
+msgstr "-20dBFS (SMPTE RP.0155)"
-#: rc_option_editor.cc:1946 rc_option_editor.cc:1962
-#, fuzzy
+#: rc_option_editor.cc:1942 rc_option_editor.cc:1958
msgid "-18dBFS (EBU, BBC)"
-msgstr "-18 Дб (EBU)"
+msgstr "-18dBFS (EBU, BBC)"
-#: rc_option_editor.cc:1947 rc_option_editor.cc:1963
+#: rc_option_editor.cc:1943 rc_option_editor.cc:1959
msgid "-15dBFS (DIN)"
-msgstr ""
+msgstr "-15dBFS (DIN)"
-#: rc_option_editor.cc:1949
+#: rc_option_editor.cc:1945
msgid ""
"Configure meter-marks and color-knee point for dBFS scale DPM, set reference "
"level for IEC1/Nordic, IEC2 PPM and VU meter."
msgstr ""
-#: rc_option_editor.cc:1955
-#, fuzzy
+#: rc_option_editor.cc:1951
msgid "IEC1/DIN Meter line-up level; 0dBu"
-msgstr "Уровень выравнивания"
+msgstr "Точка выравнивания индикатора IEC1/DIN; 0dBu"
-#: rc_option_editor.cc:1965
+#: rc_option_editor.cc:1961
msgid "Reference level for IEC1/DIN meter."
-msgstr ""
+msgstr "Референсный уровень индикатора IEC1/DIN"
-#: rc_option_editor.cc:1971
+#: rc_option_editor.cc:1967
msgid "VU Meter standard"
-msgstr ""
+msgstr "Стандарт индикатора VU"
-#: rc_option_editor.cc:1976
+#: rc_option_editor.cc:1972
msgid "0VU = -2dBu (France)"
-msgstr ""
+msgstr "0VU = -2dBu (Франция)"
-#: rc_option_editor.cc:1977
+#: rc_option_editor.cc:1973
msgid "0VU = 0dBu (North America, Australia)"
-msgstr ""
+msgstr "0VU = 0dBu (Северная Америка, Австралия)"
-#: rc_option_editor.cc:1978
+#: rc_option_editor.cc:1974
msgid "0VU = +4dBu (standard)"
-msgstr ""
+msgstr "0VU = +4dBu (стандарт)"
-#: rc_option_editor.cc:1979
+#: rc_option_editor.cc:1975
msgid "0VU = +8dBu"
-msgstr ""
+msgstr "0VU = +8dBu"
-#: rc_option_editor.cc:1985
+#: rc_option_editor.cc:1981
msgid "Peak threshold [dBFS]"
msgstr "Порог пика (dbFS)"
-#: rc_option_editor.cc:1993
+#: rc_option_editor.cc:1989
msgid ""
"Specify the audio signal level in dbFS at and above which the meter-peak "
"indicator will flash red."
msgstr ""
-#: rc_option_editor.cc:2000
+#: rc_option_editor.cc:1996
msgid "LED meter style"
-msgstr ""
+msgstr "Индикатор в стиле LED"
#: region_editor.cc:79
msgid "audition this region"
@@ -9641,7 +9587,7 @@ msgstr "Точка синхронизации (относительно обла
#: region_editor.cc:96
msgid "Sync point (absolute):"
-msgstr "Точка синхронизации (абсолютная:"
+msgstr "Точка синхронизации (абсолютная):"
#: region_editor.cc:98
msgid "File start:"
@@ -10087,7 +10033,7 @@ msgstr "Включить записываемость этой дорожки"
#: route_ui.cc:133
msgid "make mixer strips show sends to this bus"
-msgstr ""
+msgstr "Показывать в полосках микшера посылы к этой шине"
#: route_ui.cc:138
msgid "Monitor input"
@@ -10139,7 +10085,7 @@ msgstr "Назначить выбранным дорожкам и шинам (п
#: route_ui.cc:889
msgid "Copy track/bus gains to sends"
-msgstr ""
+msgstr "Скопировать фейдеры дорожки/шины в посылы"
#: route_ui.cc:890
msgid "Set sends gain to -inf"
@@ -10327,6 +10273,118 @@ msgstr "в папке сеанса"
msgid "Send "
msgstr "Посыл"
+#: session_dialog.cc:66
+msgid "Session Setup"
+msgstr "Настройка сеанса"
+
+#: session_dialog.cc:71
+msgid "Advanced options ..."
+msgstr "Дополнительные параметры"
+
+#: session_dialog.cc:267
+msgid "New Session"
+msgstr "Создать сеанс"
+
+#: session_dialog.cc:305
+msgid "Check the website for more..."
+msgstr ""
+
+#: session_dialog.cc:308
+msgid "Click to open the program website in your web browser"
+msgstr ""
+
+#: session_dialog.cc:328
+msgid "Sample Rate"
+msgstr "Частота сэмплирования"
+
+#: session_dialog.cc:329
+msgid "Disk Format"
+msgstr ""
+
+#: session_dialog.cc:347
+msgid "Select session file"
+msgstr "Выберите файл сеанса"
+
+#: session_dialog.cc:362
+msgid "Other Sessions"
+msgstr "Другие сеансы"
+
+#: session_dialog.cc:388
+msgid "Open"
+msgstr "Открыть"
+
+#: session_dialog.cc:455
+msgid "Session name:"
+msgstr "Название сеанса:"
+
+#: session_dialog.cc:477
+msgid "Create session folder in:"
+msgstr "Создать папку сеанса в:"
+
+#: session_dialog.cc:500
+msgid "Select folder for session"
+msgstr "Выберите папку для сеанса"
+
+#: session_dialog.cc:529
+msgid "Use this template"
+msgstr "Использовать этот шаблон"
+
+#: session_dialog.cc:532
+msgid "no template"
+msgstr "Без шаблона"
+
+#: session_dialog.cc:664 session_dialog.cc:696
+msgid "32 bit float"
+msgstr "32bit float"
+
+#: session_dialog.cc:667 session_dialog.cc:699
+msgid "24 bit"
+msgstr ""
+
+#: session_dialog.cc:670 session_dialog.cc:702
+msgid "16 bit"
+msgstr "16bit"
+
+#: session_dialog.cc:741 session_dialog.cc:742 session_dialog.cc:743
+msgid "channels"
+msgstr "канал(-ов)"
+
+#: session_dialog.cc:757
+msgid "<b>Busses</b>"
+msgstr "<b>Шины</b>"
+
+#: session_dialog.cc:758
+msgid "<b>Inputs</b>"
+msgstr "<b>Входы</b>"
+
+#: session_dialog.cc:759
+msgid "<b>Outputs</b>"
+msgstr "<b>Выходы</b>"
+
+#: session_dialog.cc:767
+msgid "Create master bus"
+msgstr "Создать мастер-шину"
+
+#: session_dialog.cc:777
+msgid "Automatically connect to physical inputs"
+msgstr "Автоматически подключить к физическим входам"
+
+#: session_dialog.cc:784 session_dialog.cc:843
+msgid "Use only"
+msgstr "Использовать только"
+
+#: session_dialog.cc:837
+msgid "Automatically connect outputs"
+msgstr "Автоматически подключить выходы"
+
+#: session_dialog.cc:859
+msgid "... to master bus"
+msgstr "... к мастер-шине"
+
+#: session_dialog.cc:869
+msgid "... to physical outputs"
+msgstr "... к физическим выходам"
+
#: session_import_dialog.cc:64
msgid "Import from Session"
msgstr "Импортировать из сеанса"
@@ -11207,14 +11265,6 @@ msgid "Azimuth:"
msgstr "Азимут:"
#: startup.cc:72
-msgid "Create a new session"
-msgstr "Начать новый сеанс"
-
-#: startup.cc:73
-msgid "Open an existing session"
-msgstr "Открыть существующий сеанс"
-
-#: startup.cc:74
msgid ""
"Use an external mixer or the hardware mixer of your audio interface.\n"
"%1 will play NO role in monitoring"
@@ -11222,16 +11272,11 @@ msgstr ""
"Использовать внешний микшер или микшер звукового интерфейса.\n"
"%1 никак не будет участвовать в мониторинге."
-#: startup.cc:76
+#: startup.cc:74
msgid "Ask %1 to play back material as it is being recorded"
msgstr "Дать %1 воспроизводить материал при его записи"
-#: startup.cc:79
-msgid "I'd like more options for this session"
-msgstr "Указать дополнительные параметры для этого сеанса"
-
-#: startup.cc:194
-#, fuzzy
+#: startup.cc:143
msgid ""
"<b>Welcome to this BETA release of Ardour %1</b>\n"
"\n"
@@ -11255,7 +11300,7 @@ msgid ""
"\n"
" http://ardour.org/support\n"
msgstr ""
-"<b>Перед вами БЕТА-версия Ardour 3.0</b>\n"
+"<b>Перед вами БЕТА-версия Ardour %1</b>\n"
"\n"
"Версия для Linux уже выпущена, но за отсутствием достаточного количества\n"
"тестировщиков версия для OS X является бетой. Отсюда — несколько советов:\n"
@@ -11278,15 +11323,11 @@ msgstr ""
"\n"
" http://ardour.org/support\n"
-#: startup.cc:218
+#: startup.cc:167
msgid "This is a BETA RELEASE"
msgstr "Это БЕТА-версия программы"
-#: startup.cc:324
-msgid "Audio / MIDI Setup"
-msgstr "Параметры звука и MIDI"
-
-#: startup.cc:336
+#: startup.cc:176
msgid ""
"<span size=\"larger\">%1 is a digital audio workstation. You can use it to "
"record, edit and mix multi-track audio. You can produce your own CDs, mix "
@@ -11303,15 +11344,15 @@ msgstr ""
"\n"
"Перед началом работы с программой необходимо кое-что настроить.</span>"
-#: startup.cc:362
+#: startup.cc:202
msgid "Welcome to %1"
msgstr "Приветствуем вас в %1"
-#: startup.cc:385
+#: startup.cc:225
msgid "Default folder for %1 sessions"
msgstr "Папка для сеансов %1 по умолчанию"
-#: startup.cc:391
+#: startup.cc:231
msgid ""
"Each project that you work on with %1 has its own folder.\n"
"These can require a lot of disk space if you are recording audio.\n"
@@ -11329,11 +11370,11 @@ msgstr ""
"<i>(Сохранять сеансы можно будет где угодно, просто указанная\n"
"папка будет использоваться по умолчанию)</i>"
-#: startup.cc:415
+#: startup.cc:254
msgid "Default folder for new sessions"
msgstr "Папка для новых сеансов по умолчанию"
-#: startup.cc:436
+#: startup.cc:275
msgid ""
"While recording instruments or vocals, you probably want to listen to the\n"
"signal as well as record it. This is called \"monitoring\". There are\n"
@@ -11358,15 +11399,15 @@ msgstr ""
"<i>Если вы не понимаете смысл этого параметра, просто используйте \n"
"предлагаемый по умолчанию вариант.</i>"
-#: startup.cc:457
+#: startup.cc:296
msgid "Monitoring Choices"
msgstr "Способ мониторинга"
-#: startup.cc:480
+#: startup.cc:319
msgid "Use a Master bus directly"
msgstr "Использовать мастер-шину напрямую"
-#: startup.cc:482
+#: startup.cc:321
msgid ""
"Connect the Master bus directly to your hardware outputs. This is preferable "
"for simple usage."
@@ -11374,11 +11415,11 @@ msgstr ""
"Соединить мастер-шину напрямую с выходами звукового интерфейса.\n"
"Предпочтительно для простого использования."
-#: startup.cc:491
+#: startup.cc:330
msgid "Use an additional Monitor bus"
msgstr "Использовать дополнительную шину мониторинга"
-#: startup.cc:494
+#: startup.cc:333
msgid ""
"Use a Monitor bus between Master bus and hardware outputs for \n"
"greater control in monitoring without affecting the mix."
@@ -11386,7 +11427,7 @@ msgstr ""
"Использовать шину мониторинга между мастер-шиной и выходами \n"
"звукового интерфейса для полного контроля без вмешательства в микс."
-#: startup.cc:516
+#: startup.cc:355
msgid ""
"<i>You can change this preference at any time via the Preferences dialog.\n"
"You can also add or remove the monitor section to/from any session.</i>\n"
@@ -11399,110 +11440,10 @@ msgstr ""
"<i>Если вы не понимаете смысл этого параметра, просто используйте\n"
"предлагаемое по умолчанию.</i>"
-#: startup.cc:527
+#: startup.cc:366
msgid "Monitor Section"
msgstr "Секция монитора"
-#: startup.cc:573
-msgid "Check the website for more..."
-msgstr ""
-
-#: startup.cc:576
-msgid "Click to open the program website in your web browser"
-msgstr ""
-
-#: startup.cc:729
-msgid "Open"
-msgstr "Открыть"
-
-#: startup.cc:775
-msgid "Session name:"
-msgstr "Название сеанса:"
-
-#: startup.cc:798
-msgid "Create session folder in:"
-msgstr "Создать папку сеанса в:"
-
-#: startup.cc:821
-msgid "Select folder for session"
-msgstr "Выберите папку для сеанса"
-
-#: startup.cc:853
-msgid "Use this template"
-msgstr "Использовать этот шаблон"
-
-#: startup.cc:856
-msgid "no template"
-msgstr "Без шаблона"
-
-#: startup.cc:884
-msgid "Use an existing session as a template:"
-msgstr "Использовать существующий сеанс как шаблон:"
-
-#: startup.cc:896
-msgid "Select template"
-msgstr "Выберите шаблон"
-
-#: startup.cc:922
-msgid "New Session"
-msgstr "Создать сеанс"
-
-#: startup.cc:1077
-msgid "Select session file"
-msgstr "Выберите файл сеанса"
-
-#: startup.cc:1093
-msgid "Browse:"
-msgstr "Обзор:"
-
-#: startup.cc:1102
-msgid "Select a session"
-msgstr "Выберите сеанс"
-
-#: startup.cc:1129 startup.cc:1130 startup.cc:1131
-msgid "channels"
-msgstr "канал(-ов)"
-
-#: startup.cc:1145
-msgid "<b>Busses</b>"
-msgstr "<b>Шины</b>"
-
-#: startup.cc:1146
-msgid "<b>Inputs</b>"
-msgstr "<b>Входы</b>"
-
-#: startup.cc:1147
-msgid "<b>Outputs</b>"
-msgstr "<b>Выходы</b>"
-
-#: startup.cc:1155
-msgid "Create master bus"
-msgstr "Создать мастер-шину"
-
-#: startup.cc:1165
-msgid "Automatically connect to physical inputs"
-msgstr "Автоматически подключить к физическим входам"
-
-#: startup.cc:1172 startup.cc:1231
-msgid "Use only"
-msgstr "Использовать только"
-
-#: startup.cc:1225
-msgid "Automatically connect outputs"
-msgstr "Автоматически подключить выходы"
-
-#: startup.cc:1247
-msgid "... to master bus"
-msgstr "... к мастер-шине"
-
-#: startup.cc:1257
-msgid "... to physical outputs"
-msgstr "... к физическим выходам"
-
-#: startup.cc:1307
-msgid "Advanced Session Options"
-msgstr "Дополнительные параметры сеанса"
-
#: step_entry.cc:59
msgid "Step Entry: %1"
msgstr "Пошаговый ввод: %1"
@@ -12168,23 +12109,23 @@ msgstr "could not find any ui configuration file, canvas will look broken."
msgid "Config file %1 not saved"
msgstr "Config file %1 not saved"
-#: utils.cc:110 utils.cc:153
+#: utils.cc:111 utils.cc:154
msgid "bad XPM header %1"
msgstr "bad XPM header %1"
-#: utils.cc:292 utils.cc:324
+#: utils.cc:293 utils.cc:325
msgid "missing RGBA style for \"%1\""
msgstr "missing RGBA style for \"%1\""
-#: utils.cc:591
+#: utils.cc:598
msgid "cannot find XPM file for %1"
msgstr "cannot find XPM file for %1"
-#: utils.cc:617
+#: utils.cc:624
msgid "cannot find icon image for %1 using %2"
msgstr "cannot find icon image for %1 using %2"
-#: utils.cc:632
+#: utils.cc:639
msgid "Caught exception while loading icon named %1"
msgstr ""
@@ -12293,117 +12234,118 @@ msgid ""
"ffprobe to ffprobe_harvid.\n"
msgstr ""
-#: transcode_video_dialog.cc:56
+#: transcode_video_dialog.cc:55
msgid "Transcode/Import Video File "
msgstr "Импортировать/перекодировать видеофайл"
-#: transcode_video_dialog.cc:58
+#: transcode_video_dialog.cc:57
msgid "Output File:"
msgstr "Файл вывода:"
-#: transcode_video_dialog.cc:61 export_video_dialog.cc:73
+#: transcode_video_dialog.cc:60 export_video_dialog.cc:72
msgid "Abort"
msgstr "Прервать"
-#: transcode_video_dialog.cc:63
+#: transcode_video_dialog.cc:62
msgid "Height = "
msgstr "Высота = "
-#: transcode_video_dialog.cc:66
+#: transcode_video_dialog.cc:65
msgid "Manual Override"
msgstr ""
-#: transcode_video_dialog.cc:70 export_video_dialog.cc:89
-#, fuzzy
+#: transcode_video_dialog.cc:69 export_video_dialog.cc:88
msgid "Debug Mode: Print ffmpeg command and output to stdout."
msgstr "Режим отладки: вывод команд ffmpeg в stdout"
-#: transcode_video_dialog.cc:107
+#: transcode_video_dialog.cc:106
msgid "<b>File Information</b>"
msgstr "<b>Информация о файле</b>"
-#: transcode_video_dialog.cc:113
+#: transcode_video_dialog.cc:112
msgid ""
"No ffprobe or ffmpeg executables could be found on this system. Video Import "
"is not possible until you install those tools. See the Log window for more "
"information."
msgstr ""
+"Исполняемые файлы ffprobe и ffmpeg не найдены в системе. Импорт видео "
+"невозможен, пока вы их не установите. Подробности приведены в окне журнала."
-#: transcode_video_dialog.cc:120
+#: transcode_video_dialog.cc:119
msgid ""
"File-info can not be read. Most likely '%1' is not a valid video-file or an "
"unsupported video codec or format."
msgstr ""
-#: transcode_video_dialog.cc:134
+#: transcode_video_dialog.cc:133
msgid "FPS:"
msgstr "К/с:"
-#: transcode_video_dialog.cc:136
+#: transcode_video_dialog.cc:135
msgid "Duration:"
msgstr "Длительность:"
-#: transcode_video_dialog.cc:138
+#: transcode_video_dialog.cc:137
msgid "Codec:"
msgstr "Кодек:"
-#: transcode_video_dialog.cc:140
+#: transcode_video_dialog.cc:139
msgid "Geometry:"
msgstr "Геометрия:"
-#: transcode_video_dialog.cc:155
+#: transcode_video_dialog.cc:154
msgid "??"
msgstr ""
-#: transcode_video_dialog.cc:176
+#: transcode_video_dialog.cc:175
msgid "<b>Import Settings</b>"
msgstr "<b>Параметры импорта</b>"
-#: transcode_video_dialog.cc:181
+#: transcode_video_dialog.cc:180
msgid "Do Not Import Video"
msgstr "Не импортировать видео"
-#: transcode_video_dialog.cc:182
+#: transcode_video_dialog.cc:181
msgid "Reference From Current Location"
msgstr "Использовать исходный видеофайл"
-#: transcode_video_dialog.cc:184
+#: transcode_video_dialog.cc:183
msgid "Import/Transcode Video to Session"
msgstr "Импортировать/перекодировать видео в сеанс"
-#: transcode_video_dialog.cc:198
+#: transcode_video_dialog.cc:197
msgid "Scale Video: Width = "
msgstr "Масштаб видео: Ширина = "
-#: transcode_video_dialog.cc:205
+#: transcode_video_dialog.cc:204
msgid "Original Width"
msgstr "Исходная ширина"
-#: transcode_video_dialog.cc:220
+#: transcode_video_dialog.cc:219
msgid "Bitrate (KBit/s):"
msgstr "Скорость потока (Кбит/с):"
-#: transcode_video_dialog.cc:225
+#: transcode_video_dialog.cc:224
msgid "Extract Audio:"
msgstr "Извлечь звук:"
-#: transcode_video_dialog.cc:345
+#: transcode_video_dialog.cc:344
msgid "Extracting Audio.."
msgstr "Извлекается звук..."
-#: transcode_video_dialog.cc:348
+#: transcode_video_dialog.cc:347
msgid "Audio Extraction Failed."
msgstr "Не удалось извлечь звуковую дорожку."
-#: transcode_video_dialog.cc:374
+#: transcode_video_dialog.cc:373
msgid "Transcoding Video.."
msgstr "Перекодирование видео..."
-#: transcode_video_dialog.cc:408
+#: transcode_video_dialog.cc:407
msgid "Transcoding Failed."
msgstr "Не удалось выполнить перекодирование."
-#: transcode_video_dialog.cc:491
+#: transcode_video_dialog.cc:490
msgid "Save Transcoded Video File"
msgstr "Сохранить перекодированный видеофайл"
@@ -12444,10 +12386,14 @@ msgstr "Размер кэша:"
#: video_server_dialog.cc:136
msgid ""
-"%1 relies on an external Video Server for the videotimeline.\n"
-"The server configured in Edit -> Prefereces -> Video is not reachable.\n"
-"Do you want ardour to launch 'harvid' on this machine?"
+"%1 relies on an external video server for the videotimeline.\n"
+"The server configured in Edit -> Preferences -> Video is not reachable.\n"
+"Do you want %1 to launch 'harvid' on this machine?"
msgstr ""
+"%1 использует внешний видеосервер для видеотаймлайна.\n"
+"Сервер, указанный в диалоге «Правка -> Параметры -> Видео»,\n"
+"сейчас недоступен.\n"
+"Вы хотите, чтобы %1 запустил 'harvid' на этом компьютере?"
#: video_server_dialog.cc:176
msgid "Set Video Server Executable"
@@ -12483,170 +12429,184 @@ msgstr "Снимок с таким названием уже есть. Пере
msgid "Cannot create video folder \"%1\" (%2)"
msgstr "Не удалось создать папку для видео: \"%1\" (%2)"
-#: export_video_dialog.cc:66
+#: export_video_dialog.cc:65
msgid "Export Video File "
msgstr "Экспортировать видеофайл"
-#: export_video_dialog.cc:70
+#: export_video_dialog.cc:69
msgid "Video:"
msgstr "Видео:"
-#: export_video_dialog.cc:74
+#: export_video_dialog.cc:73
msgid "Scale Video (W x H):"
msgstr "Масштабирование видео (В×Ш):"
-#: export_video_dialog.cc:79
+#: export_video_dialog.cc:78
msgid "Set Aspect Ratio:"
msgstr "Указать соотношение сторон:"
-#: export_video_dialog.cc:80
+#: export_video_dialog.cc:79
msgid "Normalize Audio"
msgstr "Нормировать звук"
-#: export_video_dialog.cc:81
+#: export_video_dialog.cc:80
msgid "2 Pass Encoding"
msgstr "Кодирование в два прохода"
-#: export_video_dialog.cc:82
+#: export_video_dialog.cc:81
msgid "Codec Optimizations:"
msgstr "Оптимизация кодека:"
-#: export_video_dialog.cc:84
+#: export_video_dialog.cc:83
msgid "Deinterlace"
msgstr ""
-#: export_video_dialog.cc:85
+#: export_video_dialog.cc:84
msgid "Use [2] B-frames (MPEG 2 or 4 only)"
msgstr "Использовать [2] B-кадры (только MPEG 2 или 4)"
-#: export_video_dialog.cc:86
+#: export_video_dialog.cc:85
msgid "Override FPS (Default is to retain FPS from the input video file):"
msgstr "Принудительно указать свою частоту кадров:"
-#: export_video_dialog.cc:87
+#: export_video_dialog.cc:86
msgid "Include Session Metadata"
msgstr "Включить метаданные сеанса"
-#: export_video_dialog.cc:107
+#: export_video_dialog.cc:106
msgid ""
"No ffprobe or ffmpeg executables could be found on this system. Video Export "
"is not possible until you install those tools. See the Log window for more "
"information."
msgstr ""
+"Исполняемые файлы ffprobe или ffmpeg в системе не обнаружены. Экспорт видео "
+"будет недоступен до тех пор, пока вы их не установите. См. подробнее в окне "
+"журнала."
-#: export_video_dialog.cc:117
+#: export_video_dialog.cc:116
msgid "<b>Output:</b>"
msgstr "<b>Выход:</b>"
-#: export_video_dialog.cc:127
+#: export_video_dialog.cc:126
msgid "<b>Input:</b>"
msgstr "<b>Вход:</b>"
-#: export_video_dialog.cc:138
+#: export_video_dialog.cc:137
msgid "Audio:"
msgstr "Звук:"
-#: export_video_dialog.cc:140
+#: export_video_dialog.cc:139
msgid "Master Bus"
msgstr "Мастер-шина"
-#: export_video_dialog.cc:145
+#: export_video_dialog.cc:144
msgid "from the %1 session's start to the session's end"
msgstr "от начала до конца сеанса %1"
-#: export_video_dialog.cc:149
+#: export_video_dialog.cc:148
msgid "from 00:00:00:00 to the video's end"
msgstr "от 00:00:00:00 до конца видео"
-#: export_video_dialog.cc:151
+#: export_video_dialog.cc:150
msgid "from the video's start to the video's end"
msgstr "от начала до конца видео"
-#: export_video_dialog.cc:184
+#: export_video_dialog.cc:153
+msgid "Selected range"
+msgstr "Выбранный диапазон"
+
+#: export_video_dialog.cc:193
msgid "<b>Settings:</b>"
msgstr "<b>Параметры:</b>"
-#: export_video_dialog.cc:192
+#: export_video_dialog.cc:201
msgid "Range:"
msgstr "Диапазон:"
-#: export_video_dialog.cc:195
+#: export_video_dialog.cc:204
msgid "Preset:"
msgstr "Профиль:"
-#: export_video_dialog.cc:198
+#: export_video_dialog.cc:207
msgid "Video Codec:"
msgstr "Видеокодек:"
-#: export_video_dialog.cc:201
+#: export_video_dialog.cc:210
msgid "Video KBit/s:"
msgstr "Скорость видеопотока (Кбит/с):"
-#: export_video_dialog.cc:204
+#: export_video_dialog.cc:213
msgid "Audio Codec:"
msgstr "Звуковой кодек:"
-#: export_video_dialog.cc:207
+#: export_video_dialog.cc:216
msgid "Audio KBit/s:"
msgstr "Скорость звукового потока (Кбит/с):"
-#: export_video_dialog.cc:210
+#: export_video_dialog.cc:219
msgid "Audio Samplerate:"
msgstr "Частота сэмплирования звука:"
-#: export_video_dialog.cc:387
+#: export_video_dialog.cc:395
msgid "Normalizing audio"
msgstr "Выполняется нормировка звука"
-#: export_video_dialog.cc:391
+#: export_video_dialog.cc:399
msgid "Exporting audio"
msgstr "Экспорт звука"
-#: export_video_dialog.cc:437
+#: export_video_dialog.cc:445
msgid "Exporting Audio..."
msgstr "Экспортируется звук..."
-#: export_video_dialog.cc:494
+#: export_video_dialog.cc:502
msgid ""
"Export Video: Cannot query duration of video-file, using duration from "
"timeline instead."
msgstr ""
+"Экспорт видео: невозможно запросить длительность видеофайла, вместо неё "
+"используется длительность проекта."
+
+#: export_video_dialog.cc:532
+msgid "Export Video: export-range does not include video."
+msgstr ""
-#: export_video_dialog.cc:523
+#: export_video_dialog.cc:544
msgid "Export Video: No Master Out Ports to Connect for Audio Export"
msgstr ""
+"Экспорт видео: нет соединяемых портов выхода мастер-шины для экспорта звука"
-#: export_video_dialog.cc:562
+#: export_video_dialog.cc:583
msgid "Encoding Video..."
msgstr "Кодируется видео..."
-#: export_video_dialog.cc:581
+#: export_video_dialog.cc:602
msgid "Export Video: Video input file cannot be read."
-msgstr ""
+msgstr "Экспорт видео: не удалось прочитать используемый видеофайл"
-#: export_video_dialog.cc:679
+#: export_video_dialog.cc:695
msgid "Encoding Video.. Pass 1/2"
msgstr "Выполняется кодирование видео. Проход 1/2."
-#: export_video_dialog.cc:691
+#: export_video_dialog.cc:707
msgid "Encoding Video.. Pass 2/2"
msgstr "Выполняется кодирование видео. Проход 2/2."
-#: export_video_dialog.cc:779
+#: export_video_dialog.cc:814
msgid "Transcoding failed."
msgstr "Не удалось выполнить перекодировку."
-#: export_video_dialog.cc:948 export_video_dialog.cc:968
+#: export_video_dialog.cc:983 export_video_dialog.cc:1003
msgid "Save Exported Video File"
msgstr "Сохранить экспортированный видеофайл"
#: export_video_infobox.cc:30
msgid "Video Export Info"
-msgstr ""
+msgstr "Информация об экспорте видео"
#: export_video_infobox.cc:31
msgid "Do Not Show This Dialog Again (Reset in Edit > Preferences > Video)."
-msgstr ""
+msgstr "Больше не показывать этот диалог (сбрасывается в диалоге настройки)"
#: export_video_infobox.cc:43
msgid "<b>Video Export Info</b>"
@@ -12660,6 +12620,210 @@ msgid ""
"\n"
"Open Manual in Browser? "
msgstr ""
+"Кодирование видео — нетривиальная задача с множеством нюансов.\n"
+"\n"
+"Рекомендуем прочитать руководство по адресу %1/video-timeline/operations/"
+"#export.\n"
+"\n"
+"Открыть руководство в браузере? "
+
+#~ msgid "Measure latency"
+#~ msgstr "Измерить задержку"
+
+#~ msgid "Cancel measurement"
+#~ msgstr "Отменить измерение"
+
+#~ msgid "Start MIDI ALSA/JACK bridge"
+#~ msgstr "Запустить соединитель ALSA MIDI и JACK MIDI"
+
+#~ msgid "Starting audio engine"
+#~ msgstr "Запускается звуковой движок"
+
+#~ msgid "disconnected"
+#~ msgstr "отсоединено"
+
+#~ msgid "Unable to start the session running"
+#~ msgstr "Невозможно запустить уже выполняемый сеанс"
+
+#~ msgid "Click the Refresh button to try again."
+#~ msgstr "Щёлкните кнопку «Обновить» для повторной попытки."
+
+#~ msgid "JACK"
+#~ msgstr "JACK"
+
+#~ msgid "Reconnect"
+#~ msgstr "Пересоединить"
+
+#~ msgid "JACK Sampling Rate and Latency"
+#~ msgstr "Частота сэмплирования и задержка JACK"
+
+#~ msgid "Do not lock memory"
+#~ msgstr "Не блокировать память"
+
+#~ msgid "Unlock memory"
+#~ msgstr "Разблокировать память"
+
+#~ msgid "No zombies"
+#~ msgstr "Без зомби"
+
+#~ msgid "Provide monitor ports"
+#~ msgstr "Предоставить порты мониторинга"
+
+#~ msgid "H/W monitoring"
+#~ msgstr "Аппаратный мониторинг"
+
+#~ msgid "H/W metering"
+#~ msgstr "Аппаратный замер"
+
+#~ msgid "Verbose output"
+#~ msgstr "Подробный вывод"
+
+#~ msgid "8000Hz"
+#~ msgstr "8000 Гц"
+
+#~ msgid "22050Hz"
+#~ msgstr "22,05 КГц"
+
+#~ msgid "44100Hz"
+#~ msgstr "44,1 КГц"
+
+#~ msgid "48000Hz"
+#~ msgstr "48 КГц"
+
+#~ msgid "88200Hz"
+#~ msgstr "88,2 КГц"
+
+#~ msgid "96000Hz"
+#~ msgstr "96 КГц"
+
+#~ msgid "192000Hz"
+#~ msgstr "192КГц"
+
+#~ msgid "Triangular"
+#~ msgstr "Треугольное"
+
+#~ msgid "Rectangular"
+#~ msgstr "Прямоугольное"
+
+#~ msgid "Shaped"
+#~ msgstr "По очертаниям"
+
+#~ msgid "Playback/recording on 1 device"
+#~ msgstr "Воспроизведение и запись на 1 устройстве"
+
+#~ msgid "Playback/recording on 2 devices"
+#~ msgstr "Воспроизведение и запись на 2 устройствах"
+
+#~ msgid "Playback only"
+#~ msgstr "Только воспроизведение"
+
+#~ msgid "Recording only"
+#~ msgstr "Только запись"
+
+#~ msgid "Audio Interface:"
+#~ msgstr "Звуковой интерфейс:"
+
+#~ msgid "Number of buffers:"
+#~ msgstr "Число буферов:"
+
+#~ msgid "Approximate latency:"
+#~ msgstr "Примерная задержка:"
+
+#~ msgid "Audio mode:"
+#~ msgstr "Звуковой режим:"
+
+#~ msgid "Ignore"
+#~ msgstr "Игнорировать"
+
+#~ msgid "Client timeout"
+#~ msgstr "Ошибка времени ожидания клиента"
+
+#~ msgid "Number of ports:"
+#~ msgstr "Число портов:"
+
+#~ msgid "MIDI driver:"
+#~ msgstr "Драйвер MIDI:"
+
+#~ msgid "Dither:"
+#~ msgstr "Подмешивание шума:"
+
+#~ msgid ""
+#~ "No JACK server found anywhere on this system. Please install JACK and "
+#~ "restart"
+#~ msgstr ""
+#~ "Сервер JACK в системе не обнаружен. Установить его и попробуйте снова."
+
+#~ msgid "Server:"
+#~ msgstr "Сервер:"
+
+#~ msgid "Input device:"
+#~ msgstr "Устройство входа:"
+
+#~ msgid "Output device:"
+#~ msgstr "Устройство выхода:"
+
+#~ msgid "Advanced"
+#~ msgstr "Дополнительно"
+
+#~ msgid "No suitable audio devices"
+#~ msgstr "Нет подходящих звуковых устройств"
+
+#~ msgid "JACK appears to be missing from the %1 bundle"
+#~ msgstr "JACK отсутствует в поставке %1"
+
+#~ msgid "You need to choose an audio device first."
+#~ msgstr "Для начала нужно выбрать звуковое устройство."
+
+#~ msgid "Audio device \"%1\" not known on this computer."
+#~ msgstr "Звуковое устройство \"%1\" в этом компьютере не обнаружено."
+
+#~ msgid "AudioSetup value for %1 is missing data"
+#~ msgstr "Значению AudioSetup для %1 не хватает данных"
+
+#~ msgid ""
+#~ "There are several possible reasons:\n"
+#~ "\n"
+#~ "1) JACK is not running.\n"
+#~ "2) JACK is running as another user, perhaps root.\n"
+#~ "3) There is already another client called \"%1\".\n"
+#~ "\n"
+#~ "Please consider the possibilities, and perhaps (re)start JACK."
+#~ msgstr ""
+#~ "Существует несколько возможных причин:\n"
+#~ "\n"
+#~ "1) Сервер JACK не запущен.\n"
+#~ "2) Сервер JACK запущен с правами другого пользователя — возможно, root.\n"
+#~ "3) Уже существует клиент сервера JACK с именем \"%1\".\n"
+#~ "\n"
+#~ "Пожалуйста, проверьте все варианты; возможно потребуется (пере)запуск "
+#~ "JACK."
+
+#~ msgid "JACK exited"
+#~ msgstr "JACk завершил работу"
+
+#~ msgid "Create a new session"
+#~ msgstr "Начать новый сеанс"
+
+#~ msgid "Open an existing session"
+#~ msgstr "Открыть существующий сеанс"
+
+#~ msgid "I'd like more options for this session"
+#~ msgstr "Указать дополнительные параметры для этого сеанса"
+
+#~ msgid "Use an existing session as a template:"
+#~ msgstr "Использовать существующий сеанс как шаблон:"
+
+#~ msgid "Select template"
+#~ msgstr "Выберите шаблон"
+
+#~ msgid "Browse:"
+#~ msgstr "Обзор:"
+
+#~ msgid "Select a session"
+#~ msgstr "Выберите сеанс"
+
+#~ msgid "Advanced Session Options"
+#~ msgstr "Дополнительные параметры сеанса"
#~ msgid "Change all in Group to RMS + Peak"
#~ msgstr "Поменять все в группе на среднеквадратичное + пиковое"
@@ -12902,9 +13066,6 @@ msgstr ""
#~ msgid "Realtime Priority"
#~ msgstr "Приоритет реального времени"
-#~ msgid "Advanced options"
-#~ msgstr "Расширенные параметры"
-
#~ msgid "MIDI Thru"
#~ msgstr "MIDI Thru"
@@ -13066,12 +13227,6 @@ msgstr ""
#~ msgid "time stretch"
#~ msgstr "ardour: эффект timestretch"
-#~ msgid "Input channels:"
-#~ msgstr "Каналов входа:"
-
-#~ msgid "Output channels:"
-#~ msgstr "Каналов выхода:"
-
#~ msgid "New From"
#~ msgstr "Создать из"
@@ -14141,9 +14296,6 @@ msgstr ""
#~ msgid "TimeFXProgress"
#~ msgstr "TimeStretchProgress"
-#~ msgid "Sample Rate"
-#~ msgstr "Частота сэмплирования"
-
#~ msgid "22.05kHz"
#~ msgstr "22,05 КГц"
@@ -14374,12 +14526,6 @@ msgstr ""
#~ msgid "ardour: plugins"
#~ msgstr "Эффекты"
-#~ msgid "# Inputs"
-#~ msgstr "# входов"
-
-#~ msgid "# Outputs"
-#~ msgstr "# выходов"
-
#~ msgid "add automation event to "
#~ msgstr "добавить автомат. событие к"
@@ -14564,9 +14710,6 @@ msgstr ""
#~ msgid "Add Port"
#~ msgstr "Добавить порт"
-#~ msgid "Connection \""
-#~ msgstr "Соединение \""
-
#~ msgid "\""
#~ msgstr "\""
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index d475e28605..a22e991752 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -1392,7 +1392,7 @@ ProcessorBox::redisplay_processors ()
_route->foreach_processor (sigc::mem_fun (*this, &ProcessorBox::add_processor_to_display));
- for (list<ProcessorWindowProxy*>::iterator i = _processor_window_info.begin(); i != _processor_window_info.end(); ++i) {
+ for (ProcessorWindowProxies::iterator i = _processor_window_info.begin(); i != _processor_window_info.end(); ++i) {
(*i)->marked = false;
}
@@ -1400,16 +1400,43 @@ ProcessorBox::redisplay_processors ()
/* trim dead wood from the processor window proxy list */
- list<ProcessorWindowProxy*>::iterator i = _processor_window_info.begin();
+ ProcessorWindowProxies::iterator i = _processor_window_info.begin();
while (i != _processor_window_info.end()) {
- list<ProcessorWindowProxy*>::iterator j = i;
+ ProcessorWindowProxies::iterator j = i;
++j;
- if (!(*i)->marked) {
+ if (!(*i)->valid()) {
+
WM::Manager::instance().remove (*i);
delete *i;
_processor_window_info.erase (i);
- }
+
+ } else if (!(*i)->marked) {
+
+ /* this processor is no longer part of this processor
+ * box.
+ *
+ * that could be because it was deleted or it could be
+ * because the route being displayed in the parent
+ * strip changed.
+ *
+ * The latter only happens with the editor mixer strip.
+ */
+
+ if (is_editor_mixer_strip()) {
+
+ /* editor mixer strip .. DO NOTHING
+ *
+ * note: the processor window stays visible if
+ * it is already visible
+ */
+ } else {
+ (*i)->hide ();
+ WM::Manager::instance().remove (*i);
+ delete *i;
+ _processor_window_info.erase (i);
+ }
+ }
i = j;
}
@@ -1428,7 +1455,7 @@ ProcessorBox::maybe_add_processor_to_ui_list (boost::weak_ptr<Processor> w)
return;
}
- list<ProcessorWindowProxy*>::iterator i = _processor_window_info.begin ();
+ ProcessorWindowProxies::iterator i = _processor_window_info.begin ();
while (i != _processor_window_info.end()) {
boost::shared_ptr<Processor> t = (*i)->processor().lock ();
@@ -2077,6 +2104,18 @@ ProcessorBox::get_editor_window (boost::shared_ptr<Processor> processor, bool us
boost::shared_ptr<PortInsert> port_insert;
Window* gidget = 0;
+ /* This method may or may not return a Window, but if it does not it
+ * will modify the parent mixer strip appearance layout to allow
+ * "editing" the @param processor that was passed in.
+ *
+ * So for example, if the processor is an Amp (gain), the parent strip
+ * will be forced back into a model where the fader controls the main gain.
+ * If the processor is a send, then we map the send controls onto the
+ * strip.
+ *
+ * Plugins and others will return a window for control.
+ */
+
if (boost::dynamic_pointer_cast<AudioTrack>(_route) != 0) {
if (boost::dynamic_pointer_cast<AudioTrack> (_route)->freeze_state() == AudioTrack::Frozen) {
@@ -2151,7 +2190,7 @@ ProcessorBox::get_editor_window (boost::shared_ptr<Processor> processor, bool us
} else if ((port_insert = boost::dynamic_pointer_cast<PortInsert> (processor)) != 0) {
if (!_session->engine().connected()) {
- MessageDialog msg ( _("Not connected to JACK - no I/O changes are possible"));
+ MessageDialog msg ( _("Not connected to audio engine - no I/O changes are possible"));
msg.run ();
return 0;
}
@@ -2554,7 +2593,13 @@ ProcessorBox::generate_processor_title (boost::shared_ptr<PluginInsert> pi)
maker += " ...";
}
- return string_compose(_("%1: %2 (by %3)"), _route->name(), pi->name(), maker);
+ SessionObject* owner = pi->owner();
+
+ if (owner) {
+ return string_compose(_("%1: %2 (by %3)"), owner->name(), pi->name(), maker);
+ } else {
+ return string_compose(_("%2 (by %3)"), pi->name(), maker);
+ }
}
/** @param p Processor.
@@ -2667,6 +2712,12 @@ ProcessorBox::update_gui_object_state (ProcessorEntry* entry)
entry->add_control_state (proc);
}
+bool
+ProcessorBox::is_editor_mixer_strip() const
+{
+ return _parent_strip && !_parent_strip->mixer_owned();
+}
+
ProcessorWindowProxy::ProcessorWindowProxy (string const & name, ProcessorBox* box, boost::weak_ptr<Processor> processor)
: WM::ProxyBase (name, string())
, marked (false)
@@ -2674,8 +2725,34 @@ ProcessorWindowProxy::ProcessorWindowProxy (string const & name, ProcessorBox* b
, _processor (processor)
, is_custom (false)
, want_custom (false)
+ , _valid (true)
{
+ boost::shared_ptr<Processor> p = _processor.lock ();
+ if (!p) {
+ return;
+ }
+ p->DropReferences.connect (going_away_connection, MISSING_INVALIDATOR, boost::bind (&ProcessorWindowProxy::processor_going_away, this), gui_context());
+}
+
+ProcessorWindowProxy::~ProcessorWindowProxy()
+{
+ /* processor window proxies do not own the windows they create with
+ * ::get(), so set _window to null before the normal WindowProxy method
+ * deletes it.
+ */
+ _window = 0;
+}
+void
+ProcessorWindowProxy::processor_going_away ()
+{
+ delete _window;
+ _window = 0;
+ _valid = false;
+ /* should be no real reason to do this, since the object that would
+ send DropReferences is about to be deleted, but lets do it anyway.
+ */
+ going_away_connection.disconnect();
}
ARDOUR::SessionHandlePtr*
@@ -2685,6 +2762,12 @@ ProcessorWindowProxy::session_handle()
return 0;
}
+bool
+ProcessorWindowProxy::valid() const
+{
+ return _valid;
+}
+
XMLNode&
ProcessorWindowProxy::get_state () const
{
diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h
index a72eb3223d..41bc68281f 100644
--- a/gtk2_ardour/processor_box.h
+++ b/gtk2_ardour/processor_box.h
@@ -79,6 +79,7 @@ class ProcessorWindowProxy : public WM::ProxyBase
{
public:
ProcessorWindowProxy (std::string const &, ProcessorBox *, boost::weak_ptr<ARDOUR::Processor>);
+ ~ProcessorWindowProxy();
Gtk::Window* get (bool create = false);
@@ -91,6 +92,7 @@ class ProcessorWindowProxy : public WM::ProxyBase
void set_custom_ui_mode(bool use_custom) { want_custom = use_custom; }
bool marked;
+ bool valid () const;
void set_state (const XMLNode&);
XMLNode& get_state () const;
@@ -100,6 +102,10 @@ class ProcessorWindowProxy : public WM::ProxyBase
boost::weak_ptr<ARDOUR::Processor> _processor;
bool is_custom;
bool want_custom;
+ bool _valid;
+
+ void processor_going_away ();
+ PBD::ScopedConnection going_away_connection;
};
class ProcessorEntry : public Gtkmm2ext::DnDVBoxChild, public sigc::trackable
@@ -303,6 +309,8 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD
void route_going_away ();
+ bool is_editor_mixer_strip() const;
+
Gtkmm2ext::DnDVBox<ProcessorEntry> processor_display;
Gtk::ScrolledWindow processor_scroller;
@@ -404,7 +412,9 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD
void route_property_changed (const PBD::PropertyChange&);
std::string generate_processor_title (boost::shared_ptr<ARDOUR::PluginInsert> pi);
- std::list<ProcessorWindowProxy*> _processor_window_info;
+ typedef std::list<ProcessorWindowProxy*> ProcessorWindowProxies;
+ ProcessorWindowProxies _processor_window_info;
+
ProcessorWindowProxy* find_window_proxy (boost::shared_ptr<ARDOUR::Processor>) const;
void set_processor_ui (boost::shared_ptr<ARDOUR::Processor>, Gtk::Window *);
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index 3fc2b878b0..a99dcdd253 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -296,7 +296,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
virtual int get_videotl_bar_height () const = 0;
virtual void set_video_timeline_height (const int h) = 0;
virtual void embed_audio_from_video (std::string, framepos_t n = 0) = 0;
- virtual void export_video () = 0;
+ virtual void export_video (bool range = false) = 0;
virtual RouteTimeAxisView* get_route_view_by_route_id (const PBD::ID& id) const = 0;
diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc
index 04b3b5a8c2..7b8eb2ea20 100644
--- a/gtk2_ardour/rc_option_editor.cc
+++ b/gtk2_ardour/rc_option_editor.cc
@@ -1146,7 +1146,7 @@ RCOptionEditor::RCOptionEditor ()
tsf = new BoolOption (
"seamless-loop",
- _("Do seamless looping (not possible when slaved to MTC, JACK etc)"),
+ _("Do seamless looping (not possible when slaved to MTC, LTC etc)"),
sigc::mem_fun (*_rc_config, &RCConfiguration::get_seamless_loop),
sigc::mem_fun (*_rc_config, &RCConfiguration::set_seamless_loop)
);
@@ -1456,12 +1456,10 @@ RCOptionEditor::RCOptionEditor ()
sigc::mem_fun (*_rc_config, &RCConfiguration::set_monitoring_model)
);
-#ifndef __APPLE__
- /* no JACK monitoring on CoreAudio */
if (AudioEngine::instance()->port_engine().can_monitor_input()) {
mm->add (HardwareMonitoring, _("via Audio Driver"));
}
-#endif
+
mm->add (SoftwareMonitoring, _("ardour"));
mm->add (ExternalMonitoring, _("audio hardware"));
diff --git a/gtk2_ardour/session_dialog.cc b/gtk2_ardour/session_dialog.cc
new file mode 100644
index 0000000000..996dab1cc4
--- /dev/null
+++ b/gtk2_ardour/session_dialog.cc
@@ -0,0 +1,1075 @@
+/*
+ Copyright (C) 2013 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifdef WAF_BUILD
+#include "gtk2ardour-config.h"
+#endif
+
+#include <fstream>
+#include <algorithm>
+
+#include <gtkmm/filechooser.h>
+
+#include "pbd/failed_constructor.h"
+#include "pbd/file_utils.h"
+#include "pbd/replace_all.h"
+#include "pbd/whitespace.h"
+#include "pbd/stacktrace.h"
+#include "pbd/openuri.h"
+
+#include "ardour/audioengine.h"
+#include "ardour/filesystem_paths.h"
+#include "ardour/recent_sessions.h"
+#include "ardour/session.h"
+#include "ardour/session_state_utils.h"
+#include "ardour/template_utils.h"
+#include "ardour/filename_extensions.h"
+
+#include "ardour_ui.h"
+#include "session_dialog.h"
+#include "opts.h"
+#include "engine_dialog.h"
+#include "i18n.h"
+#include "utils.h"
+
+using namespace std;
+using namespace Gtk;
+using namespace Gdk;
+using namespace Glib;
+using namespace PBD;
+using namespace ARDOUR;
+
+static string poor_mans_glob (string path)
+{
+ string copy = path;
+ replace_all (copy, "~", Glib::get_home_dir());
+ return copy;
+}
+
+SessionDialog::SessionDialog (bool require_new, const std::string& session_name, const std::string& session_path, const std::string& template_name, bool cancel_not_quit)
+ : ArdourDialog (_("Session Setup"), true, true)
+ , new_only (require_new)
+ , _provided_session_name (session_name)
+ , _provided_session_path (session_path)
+ , new_folder_chooser (FILE_CHOOSER_ACTION_SELECT_FOLDER)
+ , more_new_session_options_button (_("Advanced options ..."))
+ , _output_limit_count_adj (1, 0, 100, 1, 10, 0)
+ , _input_limit_count_adj (1, 0, 100, 1, 10, 0)
+ , _master_bus_channel_count_adj (2, 0, 100, 1, 10, 0)
+ , _existing_session_chooser_used (false)
+{
+ set_keep_above (true);
+ set_position (WIN_POS_CENTER);
+ get_vbox()->set_spacing (6);
+
+ cancel_button = add_button ((cancel_not_quit ? Stock::CANCEL : Stock::QUIT), RESPONSE_CANCEL);
+ back_button = add_button (Stock::GO_BACK, RESPONSE_NO);
+ open_button = add_button (Stock::OPEN, RESPONSE_ACCEPT);
+
+ back_button->signal_button_press_event().connect (sigc::mem_fun (*this, &SessionDialog::back_button_pressed), false);
+
+ open_button->set_sensitive (false);
+ back_button->set_sensitive (false);
+
+ /* this is where announcements will be displayed, but it may be empty
+ * and invisible most of the time.
+ */
+
+ info_frame.set_shadow_type(SHADOW_ETCHED_OUT);
+ info_frame.set_no_show_all (true);
+ info_frame.set_border_width (12);
+ get_vbox()->pack_start (info_frame, false, false);
+
+ setup_new_session_page ();
+
+ if (!new_only) {
+ setup_initial_choice_box ();
+ get_vbox()->pack_start (ic_vbox, true, true);
+ } else {
+ get_vbox()->pack_start (session_new_vbox, true, true);
+ }
+
+ if (!template_name.empty()) {
+ use_template_button.set_active (false);
+ load_template_override = template_name;
+ }
+
+ get_vbox()->show_all ();
+
+ /* fill data models and how/hide accordingly */
+
+ populate_session_templates ();
+
+ if (!template_model->children().empty()) {
+ use_template_button.show();
+ template_chooser.show ();
+ } else {
+ use_template_button.hide();
+ template_chooser.hide ();
+ }
+
+ if (recent_session_model) {
+ int cnt = redisplay_recent_sessions ();
+ if (cnt > 0) {
+ recent_scroller.show();
+ recent_label.show ();
+
+ if (cnt > 4) {
+ recent_scroller.set_size_request (-1, 300);
+ }
+ } else {
+ recent_scroller.hide();
+ recent_label.hide ();
+ }
+ }
+
+ /* possibly get out of here immediately if everything is ready to go.
+ We still need to set up the whole dialog because of the way
+ ARDOUR_UI::get_session_parameters() might skip it on a first
+ pass then require it for a second pass (e.g. when there
+ is an error with session loading and we have to ask the user
+ what to do next).
+ */
+
+ if (!session_name.empty() && !require_new) {
+ response (RESPONSE_OK);
+ return;
+ }
+}
+
+SessionDialog::~SessionDialog()
+{
+}
+
+void
+SessionDialog::clear_given ()
+{
+ _provided_session_path = "";
+ _provided_session_name = "";
+}
+
+bool
+SessionDialog::use_session_template ()
+{
+ if (!load_template_override.empty()) {
+ return true;
+ }
+
+ if (use_template_button.get_active()) {
+ return true;
+ }
+
+ return false;
+}
+
+std::string
+SessionDialog::session_template_name ()
+{
+ if (!load_template_override.empty()) {
+ string the_path (ARDOUR::user_template_directory());
+ return Glib::build_filename (the_path, load_template_override + ARDOUR::template_suffix);
+ }
+
+ if (use_template_button.get_active()) {
+ TreeModel::iterator iter = template_chooser.get_active ();
+ TreeModel::Row row = (*iter);
+ string s = row[session_template_columns.path];
+ return s;
+ }
+
+ return string();
+}
+
+std::string
+SessionDialog::session_name (bool& should_be_new)
+{
+ if (!_provided_session_name.empty() && !new_only) {
+ should_be_new = false;
+ return _provided_session_name;
+ }
+
+ /* Try recent session selection */
+
+ TreeIter iter = recent_session_display.get_selection()->get_selected();
+
+ if (iter) {
+ should_be_new = false;
+ return (*iter)[recent_session_columns.visible_name];
+ }
+
+ if (_existing_session_chooser_used) {
+ /* existing session chosen from file chooser */
+ should_be_new = false;
+ return existing_session_chooser.get_filename ();
+ } else {
+ should_be_new = true;
+ string val = new_name_entry.get_text ();
+ strip_whitespace_edges (val);
+ return val;
+ }
+}
+
+std::string
+SessionDialog::session_folder ()
+{
+ if (!_provided_session_path.empty() && !new_only) {
+ return _provided_session_path;
+ }
+
+ /* Try recent session selection */
+
+ TreeIter iter = recent_session_display.get_selection()->get_selected();
+
+ if (iter) {
+ string s = (*iter)[recent_session_columns.fullpath];
+ if (Glib::file_test (s, Glib::FILE_TEST_IS_REGULAR)) {
+ return Glib::path_get_dirname (s);
+ }
+ return s;
+ }
+
+ if (_existing_session_chooser_used) {
+ /* existing session chosen from file chooser */
+ return Glib::path_get_dirname (existing_session_chooser.get_current_folder ());
+ } else {
+ std::string legal_session_folder_name = legalize_for_path (new_name_entry.get_text());
+ return Glib::build_filename (new_folder_chooser.get_current_folder(), legal_session_folder_name);
+ }
+}
+
+void
+SessionDialog::setup_initial_choice_box ()
+{
+ ic_vbox.set_spacing (6);
+
+ HBox* centering_hbox = manage (new HBox);
+ VBox* centering_vbox = manage (new VBox);
+
+ centering_vbox->set_spacing (6);
+
+ Label* new_label = manage (new Label);
+ new_label->set_markup (string_compose ("<span weight=\"bold\" size=\"large\">%1</span>", _("New Session")));
+ new_label->set_justify (JUSTIFY_CENTER);
+
+ ic_new_session_button.add (*new_label);
+ ic_new_session_button.signal_clicked().connect (sigc::mem_fun (*this, &SessionDialog::new_session_button_clicked));
+
+ Gtk::HBox* hbox = manage (new HBox);
+ Gtk::VBox* vbox = manage (new VBox);
+ hbox->set_spacing (12);
+ vbox->set_spacing (12);
+
+ string image_path;
+
+ if (find_file_in_search_path (ardour_data_search_path(), "small-splash.png", image_path)) {
+ Gtk::Image* image;
+ if ((image = manage (new Gtk::Image (image_path))) != 0) {
+ hbox->pack_start (*image, false, false);
+ }
+ }
+
+ vbox->pack_start (ic_new_session_button, true, true, 20);
+ hbox->pack_start (*vbox, true, true, 20);
+
+ centering_vbox->pack_start (*hbox, false, false);
+
+ /* Possible update message */
+
+ if (ARDOUR_UI::instance()->announce_string() != "" ) {
+
+ Box *info_box = manage (new VBox);
+ info_box->set_border_width (12);
+ info_box->set_spacing (6);
+
+ info_box->pack_start (info_scroller_label, false, false);
+
+ info_scroller_count = 0;
+ info_scroller_connection = Glib::signal_timeout().connect (mem_fun(*this, &SessionDialog::info_scroller_update), 50);
+
+ Gtk::Button *updates_button = manage (new Gtk::Button (_("Check the website for more...")));
+
+ updates_button->signal_clicked().connect (mem_fun(*this, &SessionDialog::updates_button_clicked) );
+ ARDOUR_UI::instance()->tooltips().set_tip (*updates_button, _("Click to open the program website in your web browser"));
+
+ info_box->pack_start (*updates_button, false, false);
+
+ info_frame.add (*info_box);
+ info_box->show_all ();
+ info_frame.show ();
+ }
+
+ /* recent session scroller */
+
+ recent_label.set_no_show_all (true);
+ recent_scroller.set_no_show_all (true);
+
+ recent_label.set_markup (string_compose ("<span weight=\"bold\" size=\"large\">%1</span>", _("Recent Sessions")));
+
+ recent_session_model = TreeStore::create (recent_session_columns);
+
+ recent_session_display.set_model (recent_session_model);
+ recent_session_display.append_column (_("Recent Sessions"), recent_session_columns.visible_name);
+ recent_session_display.append_column (_("Sample Rate"), recent_session_columns.sample_rate);
+ recent_session_display.append_column (_("Disk Format"), recent_session_columns.disk_format);
+ recent_session_display.set_headers_visible (false);
+ recent_session_display.get_selection()->set_mode (SELECTION_SINGLE);
+
+ recent_session_display.get_selection()->signal_changed().connect (sigc::mem_fun (*this, &SessionDialog::recent_session_row_selected));
+
+ recent_scroller.add (recent_session_display);
+ recent_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
+ recent_scroller.set_shadow_type (Gtk::SHADOW_IN);
+
+ recent_session_display.show();
+ recent_session_display.signal_row_activated().connect (sigc::mem_fun (*this, &SessionDialog::recent_row_activated));
+
+ centering_vbox->pack_start (recent_label, false, false, 12);
+ centering_vbox->pack_start (recent_scroller, false, true);
+
+ /* Browse button */
+
+ existing_session_chooser.set_title (_("Select session file"));
+ existing_session_chooser.signal_file_set().connect (sigc::mem_fun (*this, &SessionDialog::existing_session_selected));
+ existing_session_chooser.set_current_folder(poor_mans_glob (Config->get_default_session_parent_dir()));
+
+ FileFilter session_filter;
+ session_filter.add_pattern ("*.ardour");
+ session_filter.set_name (string_compose (_("%1 sessions"), PROGRAM_NAME));
+ existing_session_chooser.add_filter (session_filter);
+ existing_session_chooser.set_filter (session_filter);
+
+#ifdef GTKOSX
+ existing_session_chooser.add_shortcut_folder ("/Volumes");
+#endif
+
+ Label* browse_label = manage (new Label);
+ browse_label->set_markup (string_compose ("<span weight=\"bold\" size=\"large\">%1</span>", _("Other Sessions")));
+
+ centering_vbox->pack_start (*browse_label, false, false, 12);
+ centering_vbox->pack_start (existing_session_chooser, false, false);
+
+ /* pack it all up */
+
+ centering_hbox->pack_start (*centering_vbox, true, true);
+ ic_vbox.pack_start (*centering_hbox, true, true);
+ ic_vbox.show_all ();
+}
+
+void
+SessionDialog::session_selected ()
+{
+ /* HACK HACK HACK ... change the "Apply" button label
+ to say "Open"
+ */
+
+ Gtk::Widget* tl = ic_vbox.get_toplevel();
+ Gtk::Window* win;
+ if ((win = dynamic_cast<Gtk::Window*>(tl)) != 0) {
+ /* ::get_default_widget() is not wrapped in gtkmm */
+ Gtk::Widget* def = wrap (gtk_window_get_default_widget (win->gobj()));
+ Gtk::Button* button;
+ if ((button = dynamic_cast<Gtk::Button*>(def)) != 0) {
+ button->set_label (_("Open"));
+ }
+ }
+}
+
+void
+SessionDialog::new_session_button_clicked ()
+{
+ _existing_session_chooser_used = false;
+ recent_session_display.get_selection()->unselect_all ();
+
+ get_vbox()->remove (ic_vbox);
+ get_vbox()->pack_start (session_new_vbox, true, true);
+ back_button->set_sensitive (true);
+ new_name_entry.grab_focus ();
+}
+
+bool
+SessionDialog::back_button_pressed (GdkEventButton*)
+{
+ get_vbox()->remove (session_new_vbox);
+ back_button->set_sensitive (false);
+ get_vbox()->pack_start (ic_vbox);
+
+ return true;
+}
+
+void
+SessionDialog::populate_session_templates ()
+{
+ vector<TemplateInfo> templates;
+
+ find_session_templates (templates);
+
+ template_model->clear ();
+
+ for (vector<TemplateInfo>::iterator x = templates.begin(); x != templates.end(); ++x) {
+ TreeModel::Row row;
+
+ row = *(template_model->append ());
+
+ row[session_template_columns.name] = (*x).name;
+ row[session_template_columns.path] = (*x).path;
+ }
+
+ if (!templates.empty()) {
+ /* select first row */
+ template_chooser.set_active (0);
+ }
+}
+
+void
+SessionDialog::setup_new_session_page ()
+{
+ session_new_vbox.set_border_width (12);
+ session_new_vbox.set_spacing (18);
+
+ VBox *vbox1 = manage (new VBox);
+ HBox* hbox1 = manage (new HBox);
+ Label* label1 = manage (new Label);
+
+ vbox1->set_spacing (6);
+
+ hbox1->set_spacing (6);
+ hbox1->pack_start (*label1, false, false);
+ hbox1->pack_start (new_name_entry, true, true);
+
+ label1->set_text (_("Session name:"));
+
+ if (!ARDOUR_COMMAND_LINE::session_name.empty()) {
+ new_name_entry.set_text (Glib::path_get_basename (ARDOUR_COMMAND_LINE::session_name));
+ /* name provided - they can move right along */
+ open_button->set_sensitive (true);
+ }
+
+ new_name_entry.signal_changed().connect (sigc::mem_fun (*this, &SessionDialog::new_name_changed));
+ new_name_entry.signal_activate().connect (sigc::mem_fun (*this, &SessionDialog::new_name_activated));
+
+ vbox1->pack_start (*hbox1, true, true);
+
+ /* --- */
+
+ HBox* hbox2 = manage (new HBox);
+ Label* label2 = manage (new Label);
+
+ hbox2->set_spacing (6);
+ hbox2->pack_start (*label2, false, false);
+ hbox2->pack_start (new_folder_chooser, true, true);
+
+ label2->set_text (_("Create session folder in:"));
+
+ if (!ARDOUR_COMMAND_LINE::session_name.empty()) {
+ new_folder_chooser.set_current_folder (poor_mans_glob (Glib::path_get_dirname (ARDOUR_COMMAND_LINE::session_name)));
+ } else if (ARDOUR_UI::instance()->session_loaded) {
+ // point the new session file chooser at the parent directory of the current session
+ string session_parent_dir = Glib::path_get_dirname(ARDOUR_UI::instance()->the_session()->path());
+ string::size_type last_dir_sep = session_parent_dir.rfind(G_DIR_SEPARATOR);
+ session_parent_dir = session_parent_dir.substr(0, last_dir_sep);
+ new_folder_chooser.set_current_folder (session_parent_dir);
+ string default_session_folder = poor_mans_glob (Config->get_default_session_parent_dir());
+
+ try {
+ /* add_shortcut_folder throws an exception if the folder being added already has a shortcut */
+ new_folder_chooser.add_shortcut_folder (default_session_folder);
+ }
+ catch (Glib::Error & e) {
+ std::cerr << "new_folder_chooser.add_shortcut_folder (" << default_session_folder << ") threw Glib::Error " << e.what() << std::endl;
+ }
+ } else {
+ new_folder_chooser.set_current_folder (poor_mans_glob (Config->get_default_session_parent_dir()));
+ }
+ new_folder_chooser.show ();
+ new_folder_chooser.set_title (_("Select folder for session"));
+
+#ifdef __APPLE__
+ new_folder_chooser.add_shortcut_folder ("/Volumes");
+#endif
+
+ vbox1->pack_start (*hbox2, false, false);
+
+ session_new_vbox.pack_start (*vbox1, false, false);
+
+ /* --- */
+
+ VBox *vbox2 = manage (new VBox);
+ HBox* hbox3 = manage (new HBox);
+ template_model = ListStore::create (session_template_columns);
+
+ vbox2->set_spacing (6);
+
+ VBox *vbox3 = manage (new VBox);
+
+ vbox3->set_spacing (6);
+
+ /* we may want to hide this and show it at various
+ times depending on the existence of templates.
+ */
+ template_chooser.set_no_show_all (true);
+ use_template_button.set_no_show_all (true);
+
+ HBox* hbox4a = manage (new HBox);
+ use_template_button.set_label (_("Use this template"));
+
+ TreeModel::Row row = *template_model->prepend ();
+ row[session_template_columns.name] = (_("no template"));
+ row[session_template_columns.path] = string();
+
+ hbox4a->set_spacing (6);
+ hbox4a->pack_start (use_template_button, false, false);
+ hbox4a->pack_start (template_chooser, true, true);
+
+ template_chooser.set_model (template_model);
+
+ Gtk::CellRendererText* text_renderer = Gtk::manage (new Gtk::CellRendererText);
+ text_renderer->property_editable() = false;
+
+ template_chooser.pack_start (*text_renderer);
+ template_chooser.add_attribute (text_renderer->property_text(), session_template_columns.name);
+ template_chooser.set_active (0);
+
+ vbox3->pack_start (*hbox4a, false, false);
+
+ /* --- */
+
+ HBox* hbox5 = manage (new HBox);
+
+ hbox5->set_spacing (6);
+ hbox5->pack_start (more_new_session_options_button, false, false);
+
+ setup_more_options_box ();
+ more_new_session_options_button.add (more_options_vbox);
+
+ vbox3->pack_start (*hbox5, false, false);
+ hbox3->pack_start (*vbox3, true, true, 8);
+ vbox2->pack_start (*hbox3, false, false);
+
+ /* --- */
+
+ session_new_vbox.pack_start (*vbox2, false, false);
+ session_new_vbox.show_all ();
+}
+
+void
+SessionDialog::new_name_changed ()
+{
+ if (!new_name_entry.get_text().empty()) {
+ session_selected ();
+ open_button->set_sensitive (true);
+ } else {
+ open_button->set_sensitive (false);
+ }
+}
+
+void
+SessionDialog::new_name_activated ()
+{
+ response (RESPONSE_ACCEPT);
+}
+
+int
+SessionDialog::redisplay_recent_sessions ()
+{
+ std::vector<std::string> session_directories;
+ RecentSessionsSorter cmp;
+
+ recent_session_display.set_model (Glib::RefPtr<TreeModel>(0));
+ recent_session_model->clear ();
+
+ ARDOUR::RecentSessions rs;
+ ARDOUR::read_recent_sessions (rs);
+
+ if (rs.empty()) {
+ recent_session_display.set_model (recent_session_model);
+ return 0;
+ }
+ //
+ // sort them alphabetically
+ sort (rs.begin(), rs.end(), cmp);
+
+ for (ARDOUR::RecentSessions::iterator i = rs.begin(); i != rs.end(); ++i) {
+ session_directories.push_back ((*i).second);
+ }
+
+ int session_snapshot_count = 0;
+
+ for (vector<std::string>::const_iterator i = session_directories.begin(); i != session_directories.end(); ++i)
+ {
+ std::vector<std::string> state_file_paths;
+
+ // now get available states for this session
+
+ get_state_files_in_directory (*i, state_file_paths);
+
+ vector<string*>* states;
+ vector<const gchar*> item;
+ string dirname = *i;
+
+ /* remove any trailing / */
+
+ if (dirname[dirname.length()-1] == '/') {
+ dirname = dirname.substr (0, dirname.length()-1);
+ }
+
+ /* check whether session still exists */
+ if (!Glib::file_test(dirname.c_str(), Glib::FILE_TEST_EXISTS)) {
+ /* session doesn't exist */
+ continue;
+ }
+
+ /* now get available states for this session */
+
+ if ((states = Session::possible_states (dirname)) == 0) {
+ /* no state file? */
+ continue;
+ }
+
+ std::vector<string> state_file_names(get_file_names_no_extension (state_file_paths));
+
+ if (state_file_names.empty()) {
+ continue;
+ }
+
+ Gtk::TreeModel::Row row = *(recent_session_model->append());
+
+ float sr;
+ SampleFormat sf;
+ std::string s = Glib::build_filename (dirname, state_file_names.front() + statefile_suffix);
+
+ row[recent_session_columns.visible_name] = Glib::path_get_basename (dirname);
+ row[recent_session_columns.fullpath] = dirname; /* just the dir, but this works too */
+ row[recent_session_columns.tip] = Glib::Markup::escape_text (dirname);
+
+ if (Session::get_info_from_path (s, sr, sf) == 0) {
+ row[recent_session_columns.sample_rate] = rate_as_string (sr);
+ switch (sf) {
+ case FormatFloat:
+ row[recent_session_columns.disk_format] = _("32 bit float");
+ break;
+ case FormatInt24:
+ row[recent_session_columns.disk_format] = _("24 bit");
+ break;
+ case FormatInt16:
+ row[recent_session_columns.disk_format] = _("16 bit");
+ break;
+ }
+ } else {
+ row[recent_session_columns.sample_rate] = "??";
+ row[recent_session_columns.disk_format] = "--";
+ }
+
+ ++session_snapshot_count;
+
+ if (state_file_names.size() > 1) {
+
+ // add the children
+
+ for (std::vector<std::string>::iterator i2 = state_file_names.begin(); i2 != state_file_names.end(); ++i2) {
+
+ Gtk::TreeModel::Row child_row = *(recent_session_model->append (row.children()));
+
+ child_row[recent_session_columns.visible_name] = *i2;
+ child_row[recent_session_columns.fullpath] = Glib::build_filename (dirname, *i2 + statefile_suffix);
+ child_row[recent_session_columns.tip] = Glib::Markup::escape_text (dirname);
+
+ if (Session::get_info_from_path (s, sr, sf) == 0) {
+ child_row[recent_session_columns.sample_rate] = rate_as_string (sr);
+ switch (sf) {
+ case FormatFloat:
+ child_row[recent_session_columns.disk_format] = _("32 bit float");
+ break;
+ case FormatInt24:
+ child_row[recent_session_columns.disk_format] = _("24 bit");
+ break;
+ case FormatInt16:
+ child_row[recent_session_columns.disk_format] = _("16 bit");
+ break;
+ }
+ } else {
+ child_row[recent_session_columns.sample_rate] = "??";
+ child_row[recent_session_columns.disk_format] = "--";
+ }
+
+
+ ++session_snapshot_count;
+ }
+ }
+ }
+
+ recent_session_display.set_tooltip_column(1); // recent_session_columns.tip
+ recent_session_display.set_model (recent_session_model);
+ return session_snapshot_count;
+}
+
+void
+SessionDialog::recent_session_row_selected ()
+{
+ if (recent_session_display.get_selection()->count_selected_rows() > 0) {
+ open_button->set_sensitive (true);
+ session_selected ();
+ } else {
+ open_button->set_sensitive (false);
+ }
+}
+
+void
+SessionDialog::setup_more_options_box ()
+{
+ more_options_vbox.set_border_width (24);
+
+ _output_limit_count.set_adjustment (_output_limit_count_adj);
+ _input_limit_count.set_adjustment (_input_limit_count_adj);
+ _master_bus_channel_count.set_adjustment (_master_bus_channel_count_adj);
+
+ chan_count_label_1.set_text (_("channels"));
+ chan_count_label_3.set_text (_("channels"));
+ chan_count_label_4.set_text (_("channels"));
+
+ chan_count_label_1.set_alignment(0,0.5);
+ chan_count_label_1.set_padding(0,0);
+ chan_count_label_1.set_line_wrap(false);
+
+ chan_count_label_3.set_alignment(0,0.5);
+ chan_count_label_3.set_padding(0,0);
+ chan_count_label_3.set_line_wrap(false);
+
+ chan_count_label_4.set_alignment(0,0.5);
+ chan_count_label_4.set_padding(0,0);
+ chan_count_label_4.set_line_wrap(false);
+
+ bus_label.set_markup (_("<b>Busses</b>"));
+ input_label.set_markup (_("<b>Inputs</b>"));
+ output_label.set_markup (_("<b>Outputs</b>"));
+
+ _master_bus_channel_count.set_flags(Gtk::CAN_FOCUS);
+ _master_bus_channel_count.set_update_policy(Gtk::UPDATE_ALWAYS);
+ _master_bus_channel_count.set_numeric(true);
+ _master_bus_channel_count.set_digits(0);
+ _master_bus_channel_count.set_wrap(false);
+
+ _create_master_bus.set_label (_("Create master bus"));
+ _create_master_bus.set_flags(Gtk::CAN_FOCUS);
+ _create_master_bus.set_relief(Gtk::RELIEF_NORMAL);
+ _create_master_bus.set_mode(true);
+ _create_master_bus.set_active(true);
+ _create_master_bus.set_border_width(0);
+
+ advanced_table.set_row_spacings(0);
+ advanced_table.set_col_spacings(0);
+
+ _connect_inputs.set_label (_("Automatically connect to physical inputs"));
+ _connect_inputs.set_flags(Gtk::CAN_FOCUS);
+ _connect_inputs.set_relief(Gtk::RELIEF_NORMAL);
+ _connect_inputs.set_mode(true);
+ _connect_inputs.set_active(Config->get_input_auto_connect() != ManualConnect);
+ _connect_inputs.set_border_width(0);
+
+ _limit_input_ports.set_label (_("Use only"));
+ _limit_input_ports.set_flags(Gtk::CAN_FOCUS);
+ _limit_input_ports.set_relief(Gtk::RELIEF_NORMAL);
+ _limit_input_ports.set_mode(true);
+ _limit_input_ports.set_sensitive(true);
+ _limit_input_ports.set_border_width(0);
+
+ _input_limit_count.set_flags(Gtk::CAN_FOCUS);
+ _input_limit_count.set_update_policy(Gtk::UPDATE_ALWAYS);
+ _input_limit_count.set_numeric(true);
+ _input_limit_count.set_digits(0);
+ _input_limit_count.set_wrap(false);
+ _input_limit_count.set_sensitive(false);
+
+ bus_hbox.pack_start (bus_table, Gtk::PACK_SHRINK, 18);
+
+ bus_label.set_alignment(0, 0.5);
+ bus_label.set_padding(0,0);
+ bus_label.set_line_wrap(false);
+ bus_label.set_selectable(false);
+ bus_label.set_use_markup(true);
+ bus_frame.set_shadow_type(Gtk::SHADOW_NONE);
+ bus_frame.set_label_align(0,0.5);
+ bus_frame.add(bus_hbox);
+ bus_frame.set_label_widget(bus_label);
+
+ bus_table.set_row_spacings (0);
+ bus_table.set_col_spacings (0);
+ bus_table.attach (_create_master_bus, 0, 1, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+ bus_table.attach (_master_bus_channel_count, 1, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+ bus_table.attach (chan_count_label_1, 2, 3, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 6, 0);
+
+ input_port_limit_hbox.pack_start(_limit_input_ports, Gtk::PACK_SHRINK, 6);
+ input_port_limit_hbox.pack_start(_input_limit_count, Gtk::PACK_SHRINK, 0);
+ input_port_limit_hbox.pack_start(chan_count_label_3, Gtk::PACK_SHRINK, 6);
+ input_port_vbox.pack_start(_connect_inputs, Gtk::PACK_SHRINK, 0);
+ input_port_vbox.pack_start(input_port_limit_hbox, Gtk::PACK_EXPAND_PADDING, 0);
+ input_table.set_row_spacings(0);
+ input_table.set_col_spacings(0);
+ input_table.attach(input_port_vbox, 0, 1, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 6, 6);
+
+ input_hbox.pack_start (input_table, Gtk::PACK_SHRINK, 18);
+
+ input_label.set_alignment(0, 0.5);
+ input_label.set_padding(0,0);
+ input_label.set_line_wrap(false);
+ input_label.set_selectable(false);
+ input_label.set_use_markup(true);
+ input_frame.set_shadow_type(Gtk::SHADOW_NONE);
+ input_frame.set_label_align(0,0.5);
+ input_frame.add(input_hbox);
+ input_frame.set_label_widget(input_label);
+
+ _connect_outputs.set_label (_("Automatically connect outputs"));
+ _connect_outputs.set_flags(Gtk::CAN_FOCUS);
+ _connect_outputs.set_relief(Gtk::RELIEF_NORMAL);
+ _connect_outputs.set_mode(true);
+ _connect_outputs.set_active(Config->get_output_auto_connect() != ManualConnect);
+ _connect_outputs.set_border_width(0);
+ _limit_output_ports.set_label (_("Use only"));
+ _limit_output_ports.set_flags(Gtk::CAN_FOCUS);
+ _limit_output_ports.set_relief(Gtk::RELIEF_NORMAL);
+ _limit_output_ports.set_mode(true);
+ _limit_output_ports.set_sensitive(true);
+ _limit_output_ports.set_border_width(0);
+ _output_limit_count.set_flags(Gtk::CAN_FOCUS);
+ _output_limit_count.set_update_policy(Gtk::UPDATE_ALWAYS);
+ _output_limit_count.set_numeric(false);
+ _output_limit_count.set_digits(0);
+ _output_limit_count.set_wrap(false);
+ _output_limit_count.set_sensitive(false);
+ output_port_limit_hbox.pack_start(_limit_output_ports, Gtk::PACK_SHRINK, 6);
+ output_port_limit_hbox.pack_start(_output_limit_count, Gtk::PACK_SHRINK, 0);
+ output_port_limit_hbox.pack_start(chan_count_label_4, Gtk::PACK_SHRINK, 6);
+
+ _connect_outputs_to_master.set_label (_("... to master bus"));
+ _connect_outputs_to_master.set_flags(Gtk::CAN_FOCUS);
+ _connect_outputs_to_master.set_relief(Gtk::RELIEF_NORMAL);
+ _connect_outputs_to_master.set_mode(true);
+ _connect_outputs_to_master.set_active(Config->get_output_auto_connect() == AutoConnectMaster);
+ _connect_outputs_to_master.set_border_width(0);
+
+ _connect_outputs_to_master.set_group (connect_outputs_group);
+ _connect_outputs_to_physical.set_group (connect_outputs_group);
+
+ _connect_outputs_to_physical.set_label (_("... to physical outputs"));
+ _connect_outputs_to_physical.set_flags(Gtk::CAN_FOCUS);
+ _connect_outputs_to_physical.set_relief(Gtk::RELIEF_NORMAL);
+ _connect_outputs_to_physical.set_mode(true);
+ _connect_outputs_to_physical.set_active(Config->get_output_auto_connect() == AutoConnectPhysical);
+ _connect_outputs_to_physical.set_border_width(0);
+
+ output_conn_vbox.pack_start(_connect_outputs, Gtk::PACK_SHRINK, 0);
+ output_conn_vbox.pack_start(_connect_outputs_to_master, Gtk::PACK_SHRINK, 0);
+ output_conn_vbox.pack_start(_connect_outputs_to_physical, Gtk::PACK_SHRINK, 0);
+ output_vbox.set_border_width(6);
+
+ output_port_vbox.pack_start(output_port_limit_hbox, Gtk::PACK_SHRINK, 0);
+
+ output_vbox.pack_start(output_conn_vbox);
+ output_vbox.pack_start(output_port_vbox);
+
+ output_label.set_alignment(0, 0.5);
+ output_label.set_padding(0,0);
+ output_label.set_line_wrap(false);
+ output_label.set_selectable(false);
+ output_label.set_use_markup(true);
+ output_frame.set_shadow_type(Gtk::SHADOW_NONE);
+ output_frame.set_label_align(0,0.5);
+
+ output_hbox.pack_start (output_vbox, Gtk::PACK_SHRINK, 18);
+
+ output_frame.add(output_hbox);
+ output_frame.set_label_widget(output_label);
+
+ more_options_vbox.pack_start(advanced_table, Gtk::PACK_SHRINK, 0);
+ more_options_vbox.pack_start(bus_frame, Gtk::PACK_SHRINK, 6);
+ more_options_vbox.pack_start(input_frame, Gtk::PACK_SHRINK, 6);
+ more_options_vbox.pack_start(output_frame, Gtk::PACK_SHRINK, 0);
+
+ /* signals */
+
+ _connect_inputs.signal_clicked().connect (sigc::mem_fun (*this, &SessionDialog::connect_inputs_clicked));
+ _connect_outputs.signal_clicked().connect (sigc::mem_fun (*this, &SessionDialog::connect_outputs_clicked));
+ _limit_input_ports.signal_clicked().connect (sigc::mem_fun (*this, &SessionDialog::limit_inputs_clicked));
+ _limit_output_ports.signal_clicked().connect (sigc::mem_fun (*this, &SessionDialog::limit_outputs_clicked));
+ _create_master_bus.signal_clicked().connect (sigc::mem_fun (*this, &SessionDialog::master_bus_button_clicked));
+
+ /* note that more_options_vbox is "visible" by default even
+ * though it may not be displayed to the user, this is so the dialog
+ * doesn't resize.
+ */
+ more_options_vbox.show_all ();
+}
+
+bool
+SessionDialog::create_master_bus() const
+{
+ return _create_master_bus.get_active();
+}
+
+int
+SessionDialog::master_channel_count() const
+{
+ return _master_bus_channel_count.get_value_as_int();
+}
+
+bool
+SessionDialog::connect_inputs() const
+{
+ return _connect_inputs.get_active();
+}
+
+bool
+SessionDialog::limit_inputs_used_for_connection() const
+{
+ return _limit_input_ports.get_active();
+}
+
+int
+SessionDialog::input_limit_count() const
+{
+ return _input_limit_count.get_value_as_int();
+}
+
+bool
+SessionDialog::connect_outputs() const
+{
+ return _connect_outputs.get_active();
+}
+
+bool
+SessionDialog::limit_outputs_used_for_connection() const
+{
+ return _limit_output_ports.get_active();
+}
+
+int
+SessionDialog::output_limit_count() const
+{
+ return _output_limit_count.get_value_as_int();
+}
+
+bool
+SessionDialog::connect_outs_to_master() const
+{
+ return _connect_outputs_to_master.get_active();
+}
+
+bool
+SessionDialog::connect_outs_to_physical() const
+{
+ return _connect_outputs_to_physical.get_active();
+}
+
+void
+SessionDialog::connect_inputs_clicked ()
+{
+ _limit_input_ports.set_sensitive(_connect_inputs.get_active());
+
+ if (_connect_inputs.get_active() && _limit_input_ports.get_active()) {
+ _input_limit_count.set_sensitive(true);
+ } else {
+ _input_limit_count.set_sensitive(false);
+ }
+}
+
+void
+SessionDialog::connect_outputs_clicked ()
+{
+ bool const co = _connect_outputs.get_active ();
+ _limit_output_ports.set_sensitive(co);
+ _connect_outputs_to_master.set_sensitive(co);
+ _connect_outputs_to_physical.set_sensitive(co);
+
+ if (co && _limit_output_ports.get_active()) {
+ _output_limit_count.set_sensitive(true);
+ } else {
+ _output_limit_count.set_sensitive(false);
+ }
+}
+
+void
+SessionDialog::limit_inputs_clicked ()
+{
+ _input_limit_count.set_sensitive(_limit_input_ports.get_active());
+}
+
+void
+SessionDialog::limit_outputs_clicked ()
+{
+ _output_limit_count.set_sensitive(_limit_output_ports.get_active());
+}
+
+void
+SessionDialog::master_bus_button_clicked ()
+{
+ bool const yn = _create_master_bus.get_active();
+
+ _master_bus_channel_count.set_sensitive(yn);
+ _connect_outputs_to_master.set_sensitive(yn);
+}
+
+void
+SessionDialog::recent_row_activated (const Gtk::TreePath&, Gtk::TreeViewColumn*)
+{
+ response (RESPONSE_ACCEPT);
+}
+
+void
+SessionDialog::existing_session_selected ()
+{
+ _existing_session_chooser_used = true;
+ /* mark this sensitive in case we come back here after a failed open
+ * attempt and the user has hacked up the fix. sigh.
+ */
+ open_button->set_sensitive (true);
+ response (RESPONSE_ACCEPT);
+}
+
+void
+SessionDialog::updates_button_clicked ()
+{
+ //now open a browser window so user can see more
+ PBD::open_uri (Config->get_updates_url());
+}
+
+bool
+SessionDialog::info_scroller_update()
+{
+ info_scroller_count++;
+
+ char buf[512];
+ snprintf (buf, std::min(info_scroller_count,sizeof(buf)-1), "%s", ARDOUR_UI::instance()->announce_string().c_str() );
+ buf[info_scroller_count] = 0;
+ info_scroller_label.set_text (buf);
+ info_scroller_label.show();
+
+ if (info_scroller_count > ARDOUR_UI::instance()->announce_string().length()) {
+ info_scroller_connection.disconnect();
+ }
+
+ return true;
+}
+
+bool
+SessionDialog::on_delete_event (GdkEventAny* ev)
+{
+ response (RESPONSE_CANCEL);
+ return ArdourDialog::on_delete_event (ev);
+}
+
diff --git a/gtk2_ardour/session_dialog.h b/gtk2_ardour/session_dialog.h
new file mode 100644
index 0000000000..2178cfbe73
--- /dev/null
+++ b/gtk2_ardour/session_dialog.h
@@ -0,0 +1,240 @@
+/*
+ Copyright (C) 2010 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __gtk2_ardour_session_dialog_h__
+#define __gtk2_ardour_session_dialog_h__
+
+#include <string>
+
+#include <gdkmm/pixbuf.h>
+#include <gtkmm/label.h>
+#include <gtkmm/drawingarea.h>
+#include <gtkmm/expander.h>
+#include <gtkmm/box.h>
+#include <gtkmm/radiobutton.h>
+#include <gtkmm/filechooserbutton.h>
+#include <gtkmm/scrolledwindow.h>
+#include <gtkmm/treeview.h>
+#include <gtkmm/treestore.h>
+#include <gtkmm/checkbutton.h>
+#include <gtkmm/table.h>
+#include <gtkmm/frame.h>
+#include <gtkmm/spinbutton.h>
+#include <gtkmm/liststore.h>
+#include <gtkmm/combobox.h>
+
+#include "ardour/utils.h"
+
+#include "ardour_dialog.h"
+
+class EngineControl;
+
+class SessionDialog : public ArdourDialog {
+ public:
+ SessionDialog (bool require_new, const std::string& session_name, const std::string& session_path,
+ const std::string& template_name, bool cancel_not_quit);
+ ~SessionDialog ();
+
+ void clear_given ();
+
+ std::string session_name (bool& should_be_new);
+ std::string session_folder ();
+
+ bool use_session_template();
+ std::string session_template_name();
+
+ // advanced session options
+
+ bool create_master_bus() const;
+ int master_channel_count() const;
+
+ bool connect_inputs() const;
+ bool limit_inputs_used_for_connection() const;
+ int input_limit_count() const;
+
+ bool connect_outputs() const;
+ bool limit_outputs_used_for_connection() const;
+ int output_limit_count() const;
+
+ bool connect_outs_to_master() const;
+ bool connect_outs_to_physical() const;
+
+ private:
+ bool new_only;
+ std::string _provided_session_name;
+ std::string _provided_session_path;
+
+ bool on_delete_event (GdkEventAny*);
+
+ Gtk::Button* cancel_button;
+ Gtk::Button* open_button;
+ Gtk::Button* back_button;
+ Gtk::Button* quit_button;
+
+ bool back_button_pressed (GdkEventButton*);
+
+ Gtk::Frame info_frame;
+
+ /* initial choice page */
+
+ void setup_initial_choice_box ();
+ Gtk::VBox ic_vbox;
+ Gtk::Button ic_new_session_button;
+ void new_session_button_clicked ();
+
+ /* recent sessions */
+
+ void setup_existing_session_page ();
+
+ struct RecentSessionsSorter {
+ bool operator() (std::pair<std::string,std::string> a, std::pair<std::string,std::string> b) const {
+ return cmp_nocase(a.first, b.first) == -1;
+ }
+ };
+
+ struct RecentSessionModelColumns : public Gtk::TreeModel::ColumnRecord {
+ RecentSessionModelColumns() {
+ add (visible_name);
+ add (tip);
+ add (fullpath);
+ add (sample_rate);
+ add (disk_format);
+ }
+ Gtk::TreeModelColumn<std::string> visible_name;
+ Gtk::TreeModelColumn<std::string> tip;
+ Gtk::TreeModelColumn<std::string> fullpath;
+ Gtk::TreeModelColumn<std::string> sample_rate;
+ Gtk::TreeModelColumn<std::string> disk_format;
+ };
+
+ RecentSessionModelColumns recent_session_columns;
+ Gtk::TreeView recent_session_display;
+ Glib::RefPtr<Gtk::TreeStore> recent_session_model;
+ Gtk::ScrolledWindow recent_scroller;
+ Gtk::Label recent_label;
+ Gtk::FileChooserButton existing_session_chooser;
+ int redisplay_recent_sessions ();
+ void recent_session_row_selected ();
+ void recent_row_activated (const Gtk::TreePath& path, Gtk::TreeViewColumn* col);
+
+ void existing_session_selected ();
+ void session_selected ();
+
+ /* new sessions */
+
+ void setup_new_session_page ();
+ Gtk::Entry new_name_entry;
+ Gtk::FileChooserButton new_folder_chooser;
+
+ struct SessionTemplateColumns : public Gtk::TreeModel::ColumnRecord {
+ SessionTemplateColumns () {
+ add (name);
+ add (path);
+ }
+
+ Gtk::TreeModelColumn<std::string> name;
+ Gtk::TreeModelColumn<std::string> path;
+ };
+
+ SessionTemplateColumns session_template_columns;
+ Glib::RefPtr<Gtk::ListStore> template_model;
+ Gtk::ComboBox template_chooser;
+
+ Gtk::VBox session_new_vbox;
+ Gtk::VBox session_existing_vbox;
+ Gtk::Expander more_new_session_options_button;
+ Gtk::CheckButton use_template_button;
+ std::string load_template_override;
+
+ void more_new_session_options_button_clicked();
+ void new_name_changed ();
+ void new_name_activated ();
+ void populate_session_templates ();
+
+ /* more options for new sessions */
+
+ Gtk::VBox more_options_vbox;
+
+ Gtk::Label chan_count_label_1;
+ Gtk::Label chan_count_label_3;
+ Gtk::Label chan_count_label_4;
+ Gtk::Table advanced_table;
+ Gtk::HBox input_port_limit_hbox;
+ Gtk::VBox input_port_vbox;
+ Gtk::Table input_table;
+ Gtk::HBox input_hbox;
+
+ Gtk::Label bus_label;
+ Gtk::Frame bus_frame;
+ Gtk::Table bus_table;
+ Gtk::HBox bus_hbox;
+
+ Gtk::Label input_label;
+ Gtk::Frame input_frame;
+ Gtk::HBox output_port_limit_hbox;
+ Gtk::VBox output_port_vbox;
+ Gtk::VBox output_conn_vbox;
+ Gtk::VBox output_vbox;
+ Gtk::HBox output_hbox;
+
+ Gtk::Label output_label;
+ Gtk::Frame output_frame;
+ Gtk::VBox advanced_vbox;
+ Gtk::Label advanced_label;
+
+ Gtk::CheckButton _create_master_bus;
+ Gtk::SpinButton _master_bus_channel_count;
+
+ Gtk::CheckButton _connect_inputs;
+ Gtk::CheckButton _limit_input_ports;
+ Gtk::SpinButton _input_limit_count;
+
+ Gtk::CheckButton _connect_outputs;
+ Gtk::CheckButton _limit_output_ports;
+ Gtk::SpinButton _output_limit_count;
+
+ Gtk::RadioButtonGroup connect_outputs_group;
+ Gtk::RadioButton _connect_outputs_to_master;
+ Gtk::RadioButton _connect_outputs_to_physical;
+
+ Gtk::Adjustment _output_limit_count_adj;
+ Gtk::Adjustment _input_limit_count_adj;
+ Gtk::Adjustment _master_bus_channel_count_adj;
+
+ void connect_inputs_clicked ();
+ void connect_outputs_clicked ();
+ void limit_inputs_clicked ();
+ void limit_outputs_clicked ();
+ void master_bus_button_clicked ();
+ void setup_more_options_box ();
+
+ /* always there */
+
+ Glib::RefPtr<Pango::Layout> layout;
+
+ bool _existing_session_chooser_used; ///< set to true when the existing session chooser has been used
+
+ Gtk::Label info_scroller_label;
+ std::string::size_type info_scroller_count;
+ bool info_scroller_update();
+ sigc::connection info_scroller_connection;
+ void updates_button_clicked ();
+};
+
+#endif /* __gtk2_ardour_session_dialog_h__ */
diff --git a/gtk2_ardour/session_option_editor.cc b/gtk2_ardour/session_option_editor.cc
index 1815db1056..60f575fb16 100644
--- a/gtk2_ardour/session_option_editor.cc
+++ b/gtk2_ardour/session_option_editor.cc
@@ -334,7 +334,7 @@ SessionOptionEditor::parameter_changed (std::string const & p)
{
OptionEditor::parameter_changed (p);
if (p == "external-sync") {
- if (Config->get_sync_source() == JACK) {
+ if (Config->get_sync_source() == Engine) {
_vpu->set_sensitive(!_session_config->get_external_sync());
} else {
_vpu->set_sensitive(true);
diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc
index 5f8564374e..4944ef41a0 100644
--- a/gtk2_ardour/sfdb_ui.cc
+++ b/gtk2_ardour/sfdb_ui.cc
@@ -26,8 +26,8 @@
#include <sstream>
#include <unistd.h>
+#include <limits.h>
#include <sys/stat.h>
-#include <sys/param.h>
#include <gtkmm/box.h>
#include <gtkmm/stock.h>
@@ -1468,7 +1468,7 @@ SoundFileOmega::check_link_status (const Session* s, const vector<string>& paths
for (vector<string>::const_iterator i = paths.begin(); i != paths.end(); ++i) {
- char tmpc[MAXPATHLEN+1];
+ char tmpc[PATH_MAX+1];
snprintf (tmpc, sizeof(tmpc), "%s/%s", tmpdir.c_str(), Glib::path_get_basename (*i).c_str());
diff --git a/gtk2_ardour/small-splash.png b/gtk2_ardour/small-splash.png
new file mode 100644
index 0000000000..045062036c
--- /dev/null
+++ b/gtk2_ardour/small-splash.png
Binary files differ
diff --git a/gtk2_ardour/startup.cc b/gtk2_ardour/startup.cc
index 266a7e2a27..8482a6cb22 100644
--- a/gtk2_ardour/startup.cc
+++ b/gtk2_ardour/startup.cc
@@ -65,104 +65,55 @@ static string poor_mans_glob (string path)
return copy;
}
-ArdourStartup::ArdourStartup (bool require_new, const std::string& session_name, const std::string& session_path, const std::string& template_name)
+ArdourStartup::ArdourStartup ()
: _response (RESPONSE_OK)
, config_modified (false)
- , new_only (require_new)
, default_dir_chooser (0)
- , ic_new_session_button (_("Create a new session"))
- , ic_existing_session_button (_("Open an existing session"))
, monitor_via_hardware_button (string_compose (_("Use an external mixer or the hardware mixer of your audio interface.\n"
"%1 will play NO role in monitoring"), PROGRAM_NAME))
, monitor_via_ardour_button (string_compose (_("Ask %1 to play back material as it is being recorded"), PROGRAM_NAME))
- , new_folder_chooser (FILE_CHOOSER_ACTION_SELECT_FOLDER)
- , more_new_session_options_button (_("I'd like more options for this session"))
- , _output_limit_count_adj (1, 0, 100, 1, 10, 0)
- , _input_limit_count_adj (1, 0, 100, 1, 10, 0)
- , _master_bus_channel_count_adj (2, 0, 100, 1, 10, 0)
, audio_page_index (-1)
, new_user_page_index (-1)
, default_folder_page_index (-1)
, monitoring_page_index (-1)
- , session_page_index (-1)
- , initial_choice_index (-1)
, final_page_index (-1)
- , session_options_page_index (-1)
- , _existing_session_chooser_used (false)
{
- new_user = !Glib::file_test (been_here_before_path(), Glib::FILE_TEST_EXISTS);
- need_session_info = (session_name.empty() || require_new);
-
- _provided_session_name = session_name;
- _provided_session_path = session_path;
+ set_keep_above (true);
+ set_position (WIN_POS_CENTER);
+ set_border_width (12);
+
+ if ((icon_pixbuf = ::get_icon ("ardour_icon_48px")) == 0) {
+ throw failed_constructor();
+ }
+
+ list<Glib::RefPtr<Gdk::Pixbuf> > window_icons;
+ Glib::RefPtr<Gdk::Pixbuf> icon;
+
+ if ((icon = ::get_icon ("ardour_icon_16px")) != 0) {
+ window_icons.push_back (icon);
+ }
+ if ((icon = ::get_icon ("ardour_icon_22px")) != 0) {
+ window_icons.push_back (icon);
+ }
+ if ((icon = ::get_icon ("ardour_icon_32px")) != 0) {
+ window_icons.push_back (icon);
+ }
+ if ((icon = ::get_icon ("ardour_icon_48px")) != 0) {
+ window_icons.push_back (icon);
+ }
+ if (!window_icons.empty ()) {
+ set_default_icon_list (window_icons);
+ }
- if (need_session_info || new_user) {
-
- use_template_button.set_group (session_template_group);
- use_session_as_template_button.set_group (session_template_group);
-
- set_keep_above (true);
- set_position (WIN_POS_CENTER);
- set_border_width (12);
-
- if ((icon_pixbuf = ::get_icon ("ardour_icon_48px")) == 0) {
- throw failed_constructor();
- }
-
- list<Glib::RefPtr<Gdk::Pixbuf> > window_icons;
- Glib::RefPtr<Gdk::Pixbuf> icon;
-
- if ((icon = ::get_icon ("ardour_icon_16px")) != 0) {
- window_icons.push_back (icon);
- }
- if ((icon = ::get_icon ("ardour_icon_22px")) != 0) {
- window_icons.push_back (icon);
- }
- if ((icon = ::get_icon ("ardour_icon_32px")) != 0) {
- window_icons.push_back (icon);
- }
- if ((icon = ::get_icon ("ardour_icon_48px")) != 0) {
- window_icons.push_back (icon);
- }
- if (!window_icons.empty ()) {
- set_default_icon_list (window_icons);
- }
-
#ifdef __APPLE__
- setup_prerelease_page ();
+ setup_prerelease_page ();
#endif
- if (new_user) {
-
- setup_new_user_page ();
- setup_first_time_config_page ();
- setup_monitoring_choice_page ();
- setup_monitor_section_choice_page ();
-
- ic_new_session_button.set_active (true); // always create new session on first run
-
- } else {
-
- setup_initial_choice_page ();
- }
-
- setup_session_page ();
- setup_more_options_page ();
-
- if (new_user) {
- setup_final_page ();
- }
-
- if (new_only) {
- ic_vbox.hide ();
- } else {
- ic_vbox.show ();
- }
-
- if (!template_name.empty()) {
- use_template_button.set_active (false);
- load_template_override = template_name;
- }
- }
+
+ setup_new_user_page ();
+ setup_first_time_config_page ();
+ setup_monitoring_choice_page ();
+ setup_monitor_section_choice_page ();
+ setup_final_page ();
the_startup = this;
}
@@ -172,9 +123,16 @@ ArdourStartup::~ArdourStartup ()
}
bool
-ArdourStartup::ready_without_display () const
+ArdourStartup::required ()
+{
+ return !Glib::file_test (been_here_before_path(), Glib::FILE_TEST_EXISTS);
+}
+
+std::string
+ArdourStartup::been_here_before_path ()
{
- return !new_user && !need_session_info;
+ // XXXX use more specific version so we can catch upgrades
+ return Glib::build_filename (user_config_directory (), ".a3");
}
void
@@ -210,97 +168,6 @@ Full information on all the above can be found on the support page at\n\
set_page_complete (*vbox, true);
}
-bool
-ArdourStartup::use_session_template ()
-{
- if (!load_template_override.empty()) {
- return true;
- }
-
- if (use_template_button.get_active()) {
- return template_chooser.get_active_row_number() > 0;
- } else {
- return !session_template_chooser.get_filename().empty();
- }
-}
-
-std::string
-ArdourStartup::session_template_name ()
-{
- if (!load_template_override.empty()) {
- string the_path (ARDOUR::user_template_directory());
- return Glib::build_filename (the_path, load_template_override + ARDOUR::template_suffix);
- }
-
- if (ic_existing_session_button.get_active()) {
- return string();
- }
-
- if (use_template_button.get_active()) {
- TreeModel::iterator iter = template_chooser.get_active ();
- TreeModel::Row row = (*iter);
- string s = row[session_template_columns.path];
- return s;
- } else {
- return session_template_chooser.get_filename();
-
- }
-}
-
-std::string
-ArdourStartup::session_name (bool& should_be_new)
-{
- if (ready_without_display()) {
- return _provided_session_name;
- }
-
- if (ic_new_session_button.get_active()) {
- should_be_new = true;
- string val = new_name_entry.get_text ();
- strip_whitespace_edges (val);
- return val;
- } else if (_existing_session_chooser_used) {
- /* existing session chosen from file chooser */
- should_be_new = false;
- return existing_session_chooser.get_filename ();
- } else {
- /* existing session chosen from recent list */
- should_be_new = false;
-
- TreeIter iter = recent_session_display.get_selection()->get_selected();
-
- if (iter) {
- return (*iter)[recent_session_columns.visible_name];
- }
-
- return "";
- }
-}
-
-std::string
-ArdourStartup::session_folder ()
-{
- if (ready_without_display()) {
- return _provided_session_path;
- }
-
- if (ic_new_session_button.get_active()) {
- std::string legal_session_folder_name = legalize_for_path (new_name_entry.get_text());
- return Glib::build_filename (new_folder_chooser.get_current_folder(), legal_session_folder_name);
- } else if (_existing_session_chooser_used) {
- /* existing session chosen from file chooser */
- return existing_session_chooser.get_current_folder ();
- } else {
- /* existing session chosen from recent list */
- TreeIter iter = recent_session_display.get_selection()->get_selected();
-
- if (iter) {
- return (*iter)[recent_session_columns.fullpath];
- }
- return "";
- }
-}
-
void
ArdourStartup::setup_new_user_page ()
{
@@ -376,6 +243,7 @@ Where would you like new %1 sessions to be stored by default?\n\n\
vbox->pack_start (*txt, false, false);
vbox->pack_start (*hbox, false, true);
+ cerr << "set default folder to " << poor_mans_glob (Config->get_default_session_parent_dir()) << endl;
default_dir_chooser->set_current_folder (poor_mans_glob (Config->get_default_session_parent_dir()));
default_dir_chooser->signal_current_folder_changed().connect (sigc::mem_fun (*this, &ArdourStartup::default_dir_changed));
default_dir_chooser->show ();
@@ -506,107 +374,11 @@ greater control in monitoring without affecting the mix."));
}
void
-ArdourStartup::setup_initial_choice_page ()
-{
- ic_vbox.set_spacing (6);
- ic_vbox.set_border_width (24);
-
- RadioButton::Group g (ic_new_session_button.get_group());
- ic_existing_session_button.set_group (g);
-
- HBox* centering_hbox = manage (new HBox);
- VBox* centering_vbox = manage (new VBox);
-
- centering_vbox->set_spacing (6);
-
- centering_vbox->pack_start (ic_new_session_button, false, true);
- centering_vbox->pack_start (ic_existing_session_button, false, true);
-
- if (ARDOUR_UI::instance()->announce_string() != "" ) {
-
- Gtk::Frame *info_frame = manage(new Gtk::Frame);
- info_frame->set_shadow_type(SHADOW_ETCHED_OUT);
- centering_vbox->pack_start (*info_frame, false, false, 20);
-
- Box *info_box = manage (new VBox);
- info_box->set_border_width (12);
- info_box->set_spacing (6);
- info_box->set_name("mixbus_info_box");
-
- info_box->pack_start (info_scroller_label, false, false);
-
- info_frame->add (*info_box);
- info_frame->show_all();
-
- info_scroller_count = 0;
- info_scroller_connection = Glib::signal_timeout().connect (mem_fun(*this, &ArdourStartup::info_scroller_update), 50);
-
- Gtk::Button *updates_button = manage (new Gtk::Button (_("Check the website for more...")));
-
- updates_button->signal_clicked().connect (mem_fun(*this, &ArdourStartup::updates_button_clicked) );
- ARDOUR_UI::instance()->tooltips().set_tip (*updates_button, _("Click to open the program website in your web browser"));
-
- info_box->pack_start (*updates_button, false, false);
- }
-
- ic_new_session_button.signal_button_press_event().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_clicked), false);
- ic_new_session_button.signal_activate().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_activated), false);
-
- ic_existing_session_button.signal_button_press_event().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_clicked), false);
- ic_existing_session_button.signal_activate().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_activated), false);
-
- centering_hbox->pack_start (*centering_vbox, true, true);
-
- ic_vbox.pack_start (*centering_hbox, true, true);
-
- ic_vbox.show_all ();
-
- initial_choice_index = append_page (ic_vbox);
- set_page_title (ic_vbox, string_compose("%1 %2", PROGRAM_NAME, VERSIONSTRING));
- set_page_header_image (ic_vbox, icon_pixbuf);
-
- /* user could just click on "Forward" if default
- * choice is correct.
- */
-
- set_page_complete (ic_vbox, true);
-}
-
-bool
-ArdourStartup::initial_button_clicked (GdkEventButton* ev)
-{
- if (ev->type == GDK_2BUTTON_PRESS && session_page_index != -1) {
- set_current_page(session_page_index);
- }
-
- return false;
-}
-
-void
-ArdourStartup::initial_button_activated ()
-{
- if (session_page_index != -1) {
- set_current_page(session_page_index);
- }
-}
-
-void
-ArdourStartup::setup_session_page ()
-{
- session_vbox.set_border_width (24);
-
- session_vbox.pack_start (session_hbox, true, true);
- session_vbox.show_all ();
-
- session_page_index = append_page (session_vbox);
- /* initial setting */
- set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM);
-}
-
-void
ArdourStartup::setup_final_page ()
{
- final_page.set_text (string_compose (_("%1 is ready for use"), PROGRAM_NAME));
+ string msg = string_compose (_("%1 is ready for use"), PROGRAM_NAME);
+
+ final_page.set_markup (string_compose ("<span weight=\"bold\" size=\"large\">%1</span>", msg));
final_page.show ();
final_page_index = append_page (final_page);
set_page_complete (final_page, true);
@@ -662,782 +434,12 @@ ArdourStartup::on_apply ()
gtk_main_quit ();
}
-void
-ArdourStartup::on_prepare (Gtk::Widget* page)
-{
- if (page == &session_vbox) {
-
- if (ic_new_session_button.get_active()) {
- /* new session requested */
- setup_new_session_page ();
- } else {
- /* existing session requested */
- setup_existing_session_page ();
-
- }
-
- /* HACK HACK HACK ... change the "Apply" button label
- to say "Open"
- */
-
- Gtk::Widget* tl = session_vbox.get_toplevel();
- Gtk::Window* win;
- if ((win = dynamic_cast<Gtk::Window*>(tl)) != 0) {
- /* ::get_default_widget() is not wrapped in gtkmm */
- Gtk::Widget* def = wrap (gtk_window_get_default_widget (win->gobj()));
- Gtk::Button* button;
- if ((button = dynamic_cast<Gtk::Button*>(def)) != 0) {
- if (more_new_session_options_button.get_active()) {
- button->set_label (_("Forward"));
- }else{
- button->set_label (_("Open"));
- }
- }
- }
- }
-}
-
-void
-ArdourStartup::populate_session_templates ()
-{
- vector<TemplateInfo> templates;
-
- find_session_templates (templates);
-
- template_model->clear ();
-
- for (vector<TemplateInfo>::iterator x = templates.begin(); x != templates.end(); ++x) {
- TreeModel::Row row;
-
- row = *(template_model->append ());
-
- row[session_template_columns.name] = (*x).name;
- row[session_template_columns.path] = (*x).path;
- }
-}
-
-void
-ArdourStartup::setup_new_session_page ()
-{
- if (!session_hbox.get_children().empty()) {
- session_hbox.remove (**session_hbox.get_children().begin());
- }
-
- session_new_vbox.set_spacing (18);
-
- if (session_new_vbox.get_children().empty()) {
- VBox *vbox1 = manage (new VBox);
- HBox* hbox1 = manage (new HBox);
- Label* label1 = manage (new Label);
-
- vbox1->set_spacing (6);
-
- hbox1->set_spacing (6);
- hbox1->pack_start (*label1, false, false);
- hbox1->pack_start (new_name_entry, true, true);
-
- label1->set_text (_("Session name:"));
-
-
- if (!ARDOUR_COMMAND_LINE::session_name.empty()) {
- new_name_entry.set_text (Glib::path_get_basename (ARDOUR_COMMAND_LINE::session_name));
- /* name provided - they can move right along */
- set_page_complete (session_vbox, true);
- }
-
- new_name_entry.signal_changed().connect (sigc::mem_fun (*this, &ArdourStartup::new_name_changed));
- new_name_entry.signal_activate().connect (sigc::mem_fun (*this, &ArdourStartup::move_along_now));
-
- vbox1->pack_start (*hbox1, true, true);
-
- /* --- */
-
- HBox* hbox2 = manage (new HBox);
- Label* label2 = manage (new Label);
-
- hbox2->set_spacing (6);
- hbox2->pack_start (*label2, false, false);
- hbox2->pack_start (new_folder_chooser, true, true);
-
- label2->set_text (_("Create session folder in:"));
-
- if (!ARDOUR_COMMAND_LINE::session_name.empty()) {
- new_folder_chooser.set_current_folder (poor_mans_glob (Glib::path_get_dirname (ARDOUR_COMMAND_LINE::session_name)));
- } else if (ARDOUR_UI::instance()->session_loaded) {
- // point the new session file chooser at the parent directory of the current session
- string session_parent_dir = Glib::path_get_dirname(ARDOUR_UI::instance()->the_session()->path());
- string::size_type last_dir_sep = session_parent_dir.rfind(G_DIR_SEPARATOR);
- session_parent_dir = session_parent_dir.substr(0, last_dir_sep);
- new_folder_chooser.set_current_folder (session_parent_dir);
- string default_session_folder = poor_mans_glob (Config->get_default_session_parent_dir());
-
- try {
- /* add_shortcut_folder throws an exception if the folder being added already has a shortcut */
- new_folder_chooser.add_shortcut_folder (default_session_folder);
- }
- catch (Glib::Error & e) {
- std::cerr << "new_folder_chooser.add_shortcut_folder (" << default_session_folder << ") threw Glib::Error " << e.what() << std::endl;
- }
- } else {
- new_folder_chooser.set_current_folder (poor_mans_glob (Config->get_default_session_parent_dir()));
- }
- new_folder_chooser.show ();
- new_folder_chooser.set_title (_("Select folder for session"));
-
-#ifdef __APPLE__
- new_folder_chooser.add_shortcut_folder ("/Volumes");
-#endif
-
- vbox1->pack_start (*hbox2, false, false);
-
- session_new_vbox.pack_start (*vbox1, false, false);
-
- /* --- */
-
- VBox *vbox2 = manage (new VBox);
- HBox* hbox3 = manage (new HBox);
- Label* label3 = manage (new Label);
- template_model = ListStore::create (session_template_columns);
- populate_session_templates ();
-
- vbox2->set_spacing (6);
-
- label3->set_markup (_("<b>Options</b>"));
- label3->set_alignment (0.0, 0.0);
-
- vbox2->pack_start (*label3, false, true);
-
- VBox *vbox3 = manage (new VBox);
-
- vbox3->set_spacing (6);
-
- if (!template_model->children().empty()) {
-
- HBox* hbox4a = manage (new HBox);
- use_template_button.set_label (_("Use this template"));
-
- TreeModel::Row row = *template_model->prepend ();
- row[session_template_columns.name] = (_("no template"));
- row[session_template_columns.path] = string();
-
- hbox4a->set_spacing (6);
- hbox4a->pack_start (use_template_button, false, false);
- hbox4a->pack_start (template_chooser, true, true);
-
- template_chooser.set_model (template_model);
-
- Gtk::CellRendererText* text_renderer = Gtk::manage (new Gtk::CellRendererText);
- text_renderer->property_editable() = false;
-
- template_chooser.pack_start (*text_renderer);
- template_chooser.add_attribute (text_renderer->property_text(), session_template_columns.name);
- template_chooser.set_active (0);
-
- use_template_button.show();
- template_chooser.show ();
-
- vbox3->pack_start (*hbox4a, false, false);
- }
-
- /* --- */
-
- if (!new_user) {
- session_template_chooser.set_current_folder (poor_mans_glob (Config->get_default_session_parent_dir()));
-
- HBox* hbox4b = manage (new HBox);
- use_session_as_template_button.set_label (_("Use an existing session as a template:"));
-
- hbox4b->set_spacing (6);
- hbox4b->pack_start (use_session_as_template_button, false, false);
- hbox4b->pack_start (session_template_chooser, true, true);
-
- use_session_as_template_button.show ();
- session_template_chooser.show ();
-
- Gtk::FileFilter* session_filter = manage (new (Gtk::FileFilter));
- session_filter->add_pattern (X_("*.ardour"));
- session_template_chooser.set_filter (*session_filter);
- session_template_chooser.set_title (_("Select template"));
-
- vbox3->pack_start (*hbox4b, false, false);
- }
-
- /* --- */
-
- HBox* hbox5 = manage (new HBox);
-
- hbox5->set_spacing (6);
- hbox5->pack_start (more_new_session_options_button, false, false);
-
- more_new_session_options_button.show ();
- more_new_session_options_button.signal_clicked().connect (sigc::mem_fun (*this, &ArdourStartup::more_new_session_options_button_clicked));
-
- vbox3->pack_start (*hbox5, false, false);
- hbox3->pack_start (*vbox3, true, true, 8);
- vbox2->pack_start (*hbox3, false, false);
-
- /* --- */
-
- session_new_vbox.pack_start (*vbox2, false, false);
- }
-
- session_new_vbox.show_all ();
- session_hbox.pack_start (session_new_vbox, true, true);
- set_page_title (session_vbox, _("New Session"));
- set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM);
-
- if (more_new_session_options_button.get_active()) {
- set_page_type (session_vbox, ASSISTANT_PAGE_CONTENT);
- }
- session_hbox.show_all();
-}
-
-void
-ArdourStartup::new_name_changed ()
-{
- if (!new_name_entry.get_text().empty()) {
- set_page_complete (session_vbox, true);
- } else {
- set_page_complete (session_vbox, false);
- }
-}
-
-int
-ArdourStartup::redisplay_recent_sessions ()
-{
- std::vector<std::string> session_directories;
- RecentSessionsSorter cmp;
-
- recent_session_display.set_model (Glib::RefPtr<TreeModel>(0));
- recent_session_model->clear ();
-
- ARDOUR::RecentSessions rs;
- ARDOUR::read_recent_sessions (rs);
-
- if (rs.empty()) {
- recent_session_display.set_model (recent_session_model);
- return 0;
- }
- //
- // sort them alphabetically
- sort (rs.begin(), rs.end(), cmp);
-
- for (ARDOUR::RecentSessions::iterator i = rs.begin(); i != rs.end(); ++i) {
- session_directories.push_back ((*i).second);
- }
-
- int session_snapshot_count = 0;
-
- for (vector<std::string>::const_iterator i = session_directories.begin(); i != session_directories.end(); ++i)
- {
- std::vector<std::string> state_file_paths;
-
- // now get available states for this session
-
- get_state_files_in_directory (*i, state_file_paths);
-
- vector<string*>* states;
- vector<const gchar*> item;
- string fullpath = *i;
-
- /* remove any trailing / */
-
- if (fullpath[fullpath.length()-1] == '/') {
- fullpath = fullpath.substr (0, fullpath.length()-1);
- }
-
- /* check whether session still exists */
- if (!Glib::file_test(fullpath.c_str(), Glib::FILE_TEST_EXISTS)) {
- /* session doesn't exist */
- continue;
- }
-
- /* now get available states for this session */
-
- if ((states = Session::possible_states (fullpath)) == 0) {
- /* no state file? */
- continue;
- }
-
- std::vector<string> state_file_names(get_file_names_no_extension (state_file_paths));
-
- Gtk::TreeModel::Row row = *(recent_session_model->append());
-
- row[recent_session_columns.visible_name] = Glib::path_get_basename (fullpath);
- row[recent_session_columns.fullpath] = fullpath;
- row[recent_session_columns.tip] = Glib::Markup::escape_text (fullpath);
-
- ++session_snapshot_count;
-
- if (state_file_names.size() > 1) {
-
- // add the children
-
- for (std::vector<std::string>::iterator i2 = state_file_names.begin();
- i2 != state_file_names.end(); ++i2) {
-
- Gtk::TreeModel::Row child_row = *(recent_session_model->append (row.children()));
-
- child_row[recent_session_columns.visible_name] = *i2;
- child_row[recent_session_columns.fullpath] = fullpath;
- child_row[recent_session_columns.tip] = Glib::Markup::escape_text (fullpath);
- ++session_snapshot_count;
- }
- }
- }
-
- recent_session_display.set_tooltip_column(1); // recent_session_columns.tip
- recent_session_display.set_model (recent_session_model);
- return session_snapshot_count;
- // return rs.size();
-}
-
-void
-ArdourStartup::recent_session_row_selected ()
-{
- if (recent_session_display.get_selection()->count_selected_rows() > 0) {
- set_page_complete (session_vbox, true);
- } else {
- set_page_complete (session_vbox, false);
- }
-}
-
-void
-ArdourStartup::setup_existing_session_page ()
-{
- recent_session_model = TreeStore::create (recent_session_columns);
- redisplay_recent_sessions ();
-
- if (!session_hbox.get_children().empty()) {
- session_hbox.remove (**session_hbox.get_children().begin());
- }
-
- if (session_existing_vbox.get_children().empty()) {
-
- recent_session_display.set_model (recent_session_model);
- recent_session_display.append_column (_("Recent Sessions"), recent_session_columns.visible_name);
- recent_session_display.set_headers_visible (false);
- recent_session_display.get_selection()->set_mode (SELECTION_BROWSE);
-
- recent_session_display.get_selection()->signal_changed().connect (sigc::mem_fun (*this, &ArdourStartup::recent_session_row_selected));
-
- recent_scroller.add (recent_session_display);
- recent_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
- recent_scroller.set_shadow_type (Gtk::SHADOW_IN);
-
- recent_session_display.show();
-
- recent_scroller.show();
- int cnt = redisplay_recent_sessions ();
- recent_session_display.signal_row_activated().connect (sigc::mem_fun (*this, &ArdourStartup::recent_row_activated));
-
- if (cnt > 4) {
- recent_scroller.set_size_request (-1, 300);
- }
-
- session_existing_vbox.set_spacing (8);
- session_existing_vbox.pack_start (recent_scroller, true, true);
-
- existing_session_chooser.set_title (_("Select session file"));
- existing_session_chooser.signal_file_set().connect (sigc::mem_fun (*this, &ArdourStartup::existing_session_selected));
- existing_session_chooser.set_current_folder(poor_mans_glob (Config->get_default_session_parent_dir()));
-
- FileFilter session_filter;
- session_filter.add_pattern ("*.ardour");
- session_filter.set_name (string_compose (_("%1 sessions"), PROGRAM_NAME));
- existing_session_chooser.add_filter (session_filter);
- existing_session_chooser.set_filter (session_filter);
-
-#ifdef GTKOSX
- existing_session_chooser.add_shortcut_folder ("/Volumes");
-#endif
-
- HBox* hbox = manage (new HBox);
- hbox->set_spacing (4);
- hbox->pack_start (*manage (new Label (_("Browse:"))), PACK_SHRINK);
- hbox->pack_start (existing_session_chooser);
- session_existing_vbox.pack_start (*hbox, false, false);
- hbox->show_all ();
- }
-
- session_existing_vbox.show_all ();
- session_hbox.pack_start (session_existing_vbox, true, true);
-
- set_page_title (session_vbox, _("Select a session"));
- set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM);
- session_hbox.show_all();
-}
-
-void
-ArdourStartup::more_new_session_options_button_clicked ()
-{
- if (more_new_session_options_button.get_active()) {
- more_options_vbox.show_all ();
- set_page_type (more_options_vbox, ASSISTANT_PAGE_CONFIRM);
- set_page_type (session_vbox, ASSISTANT_PAGE_CONTENT);
- } else {
- set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM);
- more_options_vbox.hide ();
- }
-}
-
-void
-ArdourStartup::setup_more_options_page ()
-{
- more_options_vbox.set_border_width (24);
-
- _output_limit_count.set_adjustment (_output_limit_count_adj);
- _input_limit_count.set_adjustment (_input_limit_count_adj);
- _master_bus_channel_count.set_adjustment (_master_bus_channel_count_adj);
-
- chan_count_label_1.set_text (_("channels"));
- chan_count_label_3.set_text (_("channels"));
- chan_count_label_4.set_text (_("channels"));
-
- chan_count_label_1.set_alignment(0,0.5);
- chan_count_label_1.set_padding(0,0);
- chan_count_label_1.set_line_wrap(false);
-
- chan_count_label_3.set_alignment(0,0.5);
- chan_count_label_3.set_padding(0,0);
- chan_count_label_3.set_line_wrap(false);
-
- chan_count_label_4.set_alignment(0,0.5);
- chan_count_label_4.set_padding(0,0);
- chan_count_label_4.set_line_wrap(false);
-
- bus_label.set_markup (_("<b>Busses</b>"));
- input_label.set_markup (_("<b>Inputs</b>"));
- output_label.set_markup (_("<b>Outputs</b>"));
-
- _master_bus_channel_count.set_flags(Gtk::CAN_FOCUS);
- _master_bus_channel_count.set_update_policy(Gtk::UPDATE_ALWAYS);
- _master_bus_channel_count.set_numeric(true);
- _master_bus_channel_count.set_digits(0);
- _master_bus_channel_count.set_wrap(false);
-
- _create_master_bus.set_label (_("Create master bus"));
- _create_master_bus.set_flags(Gtk::CAN_FOCUS);
- _create_master_bus.set_relief(Gtk::RELIEF_NORMAL);
- _create_master_bus.set_mode(true);
- _create_master_bus.set_active(true);
- _create_master_bus.set_border_width(0);
-
- advanced_table.set_row_spacings(0);
- advanced_table.set_col_spacings(0);
-
- _connect_inputs.set_label (_("Automatically connect to physical inputs"));
- _connect_inputs.set_flags(Gtk::CAN_FOCUS);
- _connect_inputs.set_relief(Gtk::RELIEF_NORMAL);
- _connect_inputs.set_mode(true);
- _connect_inputs.set_active(Config->get_input_auto_connect() != ManualConnect);
- _connect_inputs.set_border_width(0);
-
- _limit_input_ports.set_label (_("Use only"));
- _limit_input_ports.set_flags(Gtk::CAN_FOCUS);
- _limit_input_ports.set_relief(Gtk::RELIEF_NORMAL);
- _limit_input_ports.set_mode(true);
- _limit_input_ports.set_sensitive(true);
- _limit_input_ports.set_border_width(0);
-
- _input_limit_count.set_flags(Gtk::CAN_FOCUS);
- _input_limit_count.set_update_policy(Gtk::UPDATE_ALWAYS);
- _input_limit_count.set_numeric(true);
- _input_limit_count.set_digits(0);
- _input_limit_count.set_wrap(false);
- _input_limit_count.set_sensitive(false);
-
- bus_hbox.pack_start (bus_table, Gtk::PACK_SHRINK, 18);
-
- bus_label.set_alignment(0, 0.5);
- bus_label.set_padding(0,0);
- bus_label.set_line_wrap(false);
- bus_label.set_selectable(false);
- bus_label.set_use_markup(true);
- bus_frame.set_shadow_type(Gtk::SHADOW_NONE);
- bus_frame.set_label_align(0,0.5);
- bus_frame.add(bus_hbox);
- bus_frame.set_label_widget(bus_label);
-
- bus_table.set_row_spacings (0);
- bus_table.set_col_spacings (0);
- bus_table.attach (_create_master_bus, 0, 1, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
- bus_table.attach (_master_bus_channel_count, 1, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
- bus_table.attach (chan_count_label_1, 2, 3, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 6, 0);
-
- input_port_limit_hbox.pack_start(_limit_input_ports, Gtk::PACK_SHRINK, 6);
- input_port_limit_hbox.pack_start(_input_limit_count, Gtk::PACK_SHRINK, 0);
- input_port_limit_hbox.pack_start(chan_count_label_3, Gtk::PACK_SHRINK, 6);
- input_port_vbox.pack_start(_connect_inputs, Gtk::PACK_SHRINK, 0);
- input_port_vbox.pack_start(input_port_limit_hbox, Gtk::PACK_EXPAND_PADDING, 0);
- input_table.set_row_spacings(0);
- input_table.set_col_spacings(0);
- input_table.attach(input_port_vbox, 0, 1, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 6, 6);
-
- input_hbox.pack_start (input_table, Gtk::PACK_SHRINK, 18);
-
- input_label.set_alignment(0, 0.5);
- input_label.set_padding(0,0);
- input_label.set_line_wrap(false);
- input_label.set_selectable(false);
- input_label.set_use_markup(true);
- input_frame.set_shadow_type(Gtk::SHADOW_NONE);
- input_frame.set_label_align(0,0.5);
- input_frame.add(input_hbox);
- input_frame.set_label_widget(input_label);
-
- _connect_outputs.set_label (_("Automatically connect outputs"));
- _connect_outputs.set_flags(Gtk::CAN_FOCUS);
- _connect_outputs.set_relief(Gtk::RELIEF_NORMAL);
- _connect_outputs.set_mode(true);
- _connect_outputs.set_active(Config->get_output_auto_connect() != ManualConnect);
- _connect_outputs.set_border_width(0);
- _limit_output_ports.set_label (_("Use only"));
- _limit_output_ports.set_flags(Gtk::CAN_FOCUS);
- _limit_output_ports.set_relief(Gtk::RELIEF_NORMAL);
- _limit_output_ports.set_mode(true);
- _limit_output_ports.set_sensitive(true);
- _limit_output_ports.set_border_width(0);
- _output_limit_count.set_flags(Gtk::CAN_FOCUS);
- _output_limit_count.set_update_policy(Gtk::UPDATE_ALWAYS);
- _output_limit_count.set_numeric(false);
- _output_limit_count.set_digits(0);
- _output_limit_count.set_wrap(false);
- _output_limit_count.set_sensitive(false);
- output_port_limit_hbox.pack_start(_limit_output_ports, Gtk::PACK_SHRINK, 6);
- output_port_limit_hbox.pack_start(_output_limit_count, Gtk::PACK_SHRINK, 0);
- output_port_limit_hbox.pack_start(chan_count_label_4, Gtk::PACK_SHRINK, 6);
-
- _connect_outputs_to_master.set_label (_("... to master bus"));
- _connect_outputs_to_master.set_flags(Gtk::CAN_FOCUS);
- _connect_outputs_to_master.set_relief(Gtk::RELIEF_NORMAL);
- _connect_outputs_to_master.set_mode(true);
- _connect_outputs_to_master.set_active(Config->get_output_auto_connect() == AutoConnectMaster);
- _connect_outputs_to_master.set_border_width(0);
-
- _connect_outputs_to_master.set_group (connect_outputs_group);
- _connect_outputs_to_physical.set_group (connect_outputs_group);
-
- _connect_outputs_to_physical.set_label (_("... to physical outputs"));
- _connect_outputs_to_physical.set_flags(Gtk::CAN_FOCUS);
- _connect_outputs_to_physical.set_relief(Gtk::RELIEF_NORMAL);
- _connect_outputs_to_physical.set_mode(true);
- _connect_outputs_to_physical.set_active(Config->get_output_auto_connect() == AutoConnectPhysical);
- _connect_outputs_to_physical.set_border_width(0);
-
- output_conn_vbox.pack_start(_connect_outputs, Gtk::PACK_SHRINK, 0);
- output_conn_vbox.pack_start(_connect_outputs_to_master, Gtk::PACK_SHRINK, 0);
- output_conn_vbox.pack_start(_connect_outputs_to_physical, Gtk::PACK_SHRINK, 0);
- output_vbox.set_border_width(6);
-
- output_port_vbox.pack_start(output_port_limit_hbox, Gtk::PACK_SHRINK, 0);
-
- output_vbox.pack_start(output_conn_vbox);
- output_vbox.pack_start(output_port_vbox);
-
- output_label.set_alignment(0, 0.5);
- output_label.set_padding(0,0);
- output_label.set_line_wrap(false);
- output_label.set_selectable(false);
- output_label.set_use_markup(true);
- output_frame.set_shadow_type(Gtk::SHADOW_NONE);
- output_frame.set_label_align(0,0.5);
-
- output_hbox.pack_start (output_vbox, Gtk::PACK_SHRINK, 18);
-
- output_frame.add(output_hbox);
- output_frame.set_label_widget(output_label);
-
- more_options_vbox.pack_start(advanced_table, Gtk::PACK_SHRINK, 0);
- more_options_vbox.pack_start(bus_frame, Gtk::PACK_SHRINK, 6);
- more_options_vbox.pack_start(input_frame, Gtk::PACK_SHRINK, 6);
- more_options_vbox.pack_start(output_frame, Gtk::PACK_SHRINK, 0);
-
- /* signals */
-
- _connect_inputs.signal_clicked().connect (sigc::mem_fun (*this, &ArdourStartup::connect_inputs_clicked));
- _connect_outputs.signal_clicked().connect (sigc::mem_fun (*this, &ArdourStartup::connect_outputs_clicked));
- _limit_input_ports.signal_clicked().connect (sigc::mem_fun (*this, &ArdourStartup::limit_inputs_clicked));
- _limit_output_ports.signal_clicked().connect (sigc::mem_fun (*this, &ArdourStartup::limit_outputs_clicked));
- _create_master_bus.signal_clicked().connect (sigc::mem_fun (*this, &ArdourStartup::master_bus_button_clicked));
-
- /* note that more_options_vbox is "visible" by default even
- * though it may not be displayed to the user, this is so the dialog
- * doesn't resize.
- */
- more_options_vbox.show_all ();
-
- session_options_page_index = append_page (more_options_vbox);
- set_page_title (more_options_vbox, _("Advanced Session Options"));
- set_page_complete (more_options_vbox, true);
-}
-
-bool
-ArdourStartup::create_master_bus() const
-{
- return _create_master_bus.get_active();
-}
-
-int
-ArdourStartup::master_channel_count() const
-{
- return _master_bus_channel_count.get_value_as_int();
-}
-
-bool
-ArdourStartup::connect_inputs() const
-{
- return _connect_inputs.get_active();
-}
-
-bool
-ArdourStartup::limit_inputs_used_for_connection() const
-{
- return _limit_input_ports.get_active();
-}
-
-int
-ArdourStartup::input_limit_count() const
-{
- return _input_limit_count.get_value_as_int();
-}
-
-bool
-ArdourStartup::connect_outputs() const
-{
- return _connect_outputs.get_active();
-}
-
-bool
-ArdourStartup::limit_outputs_used_for_connection() const
-{
- return _limit_output_ports.get_active();
-}
-
-int
-ArdourStartup::output_limit_count() const
-{
- return _output_limit_count.get_value_as_int();
-}
-
-bool
-ArdourStartup::connect_outs_to_master() const
-{
- return _connect_outputs_to_master.get_active();
-}
-
-bool
-ArdourStartup::connect_outs_to_physical() const
-{
- return _connect_outputs_to_physical.get_active();
-}
-
-void
-ArdourStartup::connect_inputs_clicked ()
-{
- _limit_input_ports.set_sensitive(_connect_inputs.get_active());
-
- if (_connect_inputs.get_active() && _limit_input_ports.get_active()) {
- _input_limit_count.set_sensitive(true);
- } else {
- _input_limit_count.set_sensitive(false);
- }
-}
-
-void
-ArdourStartup::connect_outputs_clicked ()
-{
- bool const co = _connect_outputs.get_active ();
- _limit_output_ports.set_sensitive(co);
- _connect_outputs_to_master.set_sensitive(co);
- _connect_outputs_to_physical.set_sensitive(co);
-
- if (co && _limit_output_ports.get_active()) {
- _output_limit_count.set_sensitive(true);
- } else {
- _output_limit_count.set_sensitive(false);
- }
-}
-
-void
-ArdourStartup::limit_inputs_clicked ()
-{
- _input_limit_count.set_sensitive(_limit_input_ports.get_active());
-}
-
-void
-ArdourStartup::limit_outputs_clicked ()
-{
- _output_limit_count.set_sensitive(_limit_output_ports.get_active());
-}
-
-void
-ArdourStartup::master_bus_button_clicked ()
-{
- bool const yn = _create_master_bus.get_active();
-
- _master_bus_channel_count.set_sensitive(yn);
- _connect_outputs_to_master.set_sensitive(yn);
-}
void
ArdourStartup::move_along_now ()
{
- gint cur = get_current_page ();
-
- if (cur == session_page_index) {
- if (more_new_session_options_button.get_active()) {
- set_current_page (session_options_page_index);
- } else {
- on_apply ();
- }
- }
+ on_apply ();
}
-void
-ArdourStartup::recent_row_activated (const Gtk::TreePath&, Gtk::TreeViewColumn*)
-{
- set_page_complete (session_vbox, true);
- move_along_now ();
-}
-void
-ArdourStartup::existing_session_selected ()
-{
- _existing_session_chooser_used = true;
-
- set_page_complete (session_vbox, true);
- move_along_now ();
-}
-
-std::string
-ArdourStartup::been_here_before_path () const
-{
- // XXXX use more specific version so we can catch upgrades
- return Glib::build_filename (user_config_directory (), ".a3");
-}
-
-void
-ArdourStartup::updates_button_clicked ()
-{
- //now open a browser window so user can see more
- PBD::open_uri (Config->get_updates_url());
-}
-
-bool
-ArdourStartup::info_scroller_update()
-{
- info_scroller_count++;
-
- char buf[512];
- snprintf (buf, std::min(info_scroller_count,sizeof(buf)-1), "%s", ARDOUR_UI::instance()->announce_string().c_str() );
- buf[info_scroller_count] = 0;
- info_scroller_label.set_text (buf);
- info_scroller_label.show();
-
- if (info_scroller_count > ARDOUR_UI::instance()->announce_string().length()) {
- info_scroller_connection.disconnect();
- }
-
- return true;
-}
+
diff --git a/gtk2_ardour/startup.h b/gtk2_ardour/startup.h
index 4dcc3a9fb2..c5a9a30162 100644
--- a/gtk2_ardour/startup.h
+++ b/gtk2_ardour/startup.h
@@ -26,6 +26,7 @@
#include <gtkmm/assistant.h>
#include <gtkmm/label.h>
#include <gtkmm/drawingarea.h>
+#include <gtkmm/expander.h>
#include <gtkmm/box.h>
#include <gtkmm/radiobutton.h>
#include <gtkmm/filechooserbutton.h>
@@ -45,32 +46,10 @@ class EngineControl;
class ArdourStartup : public Gtk::Assistant {
public:
- ArdourStartup (bool require_new, const std::string& session_name, const std::string& session_path, const std::string& template_name);
+ ArdourStartup ();
~ArdourStartup ();
- bool ready_without_display () const;
-
- std::string session_name (bool& should_be_new);
- std::string session_folder ();
-
- bool use_session_template();
- std::string session_template_name();
-
- // advanced session options
-
- bool create_master_bus() const;
- int master_channel_count() const;
-
- bool connect_inputs() const;
- bool limit_inputs_used_for_connection() const;
- int input_limit_count() const;
-
- bool connect_outputs() const;
- bool limit_outputs_used_for_connection() const;
- int output_limit_count() const;
-
- bool connect_outs_to_master() const;
- bool connect_outs_to_physical() const;
+ static bool required ();
gint response () const {
return _response;
@@ -80,17 +59,12 @@ class ArdourStartup : public Gtk::Assistant {
gint _response;
bool config_modified;
bool new_user;
- bool need_session_info;
- bool new_only;
- std::string _provided_session_name;
- std::string _provided_session_path;
- std::string been_here_before_path () const;
+ static std::string been_here_before_path ();
void on_apply ();
void on_cancel ();
bool on_delete_event (GdkEventAny*);
- void on_prepare (Gtk::Widget*);
static ArdourStartup *the_startup;
@@ -108,15 +82,7 @@ class ArdourStartup : public Gtk::Assistant {
Gtk::FileChooserButton* default_dir_chooser;
void default_dir_changed();
void setup_first_page ();
-
- /* initial choice page */
-
- void setup_initial_choice_page ();
- Gtk::VBox ic_vbox;
- Gtk::RadioButton ic_new_session_button;
- Gtk::RadioButton ic_existing_session_button;
- bool initial_button_clicked(GdkEventButton*);
- void initial_button_activated();
+ Gtk::FileChooserButton new_folder_chooser;
/* monitoring choices */
@@ -134,134 +100,6 @@ class ArdourStartup : public Gtk::Assistant {
Gtk::RadioButton no_monitor_section_button;
void setup_monitor_section_choice_page ();
- /* session page (could be new or existing) */
-
- void setup_session_page ();
- Gtk::VBox session_vbox;
- Gtk::HBox session_hbox;
-
- /* recent sessions */
-
- void setup_existing_session_page ();
-
- struct RecentSessionsSorter {
- bool operator() (std::pair<std::string,std::string> a, std::pair<std::string,std::string> b) const {
- return cmp_nocase(a.first, b.first) == -1;
- }
- };
-
- struct RecentSessionModelColumns : public Gtk::TreeModel::ColumnRecord {
- RecentSessionModelColumns() {
- add (visible_name);
- add (tip);
- add (fullpath);
- }
- Gtk::TreeModelColumn<std::string> visible_name;
- Gtk::TreeModelColumn<std::string> tip;
- Gtk::TreeModelColumn<std::string> fullpath;
- };
-
- RecentSessionModelColumns recent_session_columns;
- Gtk::TreeView recent_session_display;
- Glib::RefPtr<Gtk::TreeStore> recent_session_model;
- Gtk::ScrolledWindow recent_scroller;
- Gtk::FileChooserButton existing_session_chooser;
- int redisplay_recent_sessions ();
- void recent_session_row_selected ();
- void recent_row_activated (const Gtk::TreePath& path, Gtk::TreeViewColumn* col);
-
- void existing_session_selected ();
-
- /* new sessions */
-
- void setup_new_session_page ();
- Gtk::Entry new_name_entry;
- Gtk::FileChooserButton new_folder_chooser;
- Gtk::FileChooserButton session_template_chooser;
-
- struct SessionTemplateColumns : public Gtk::TreeModel::ColumnRecord {
- SessionTemplateColumns () {
- add (name);
- add (path);
- }
-
- Gtk::TreeModelColumn<std::string> name;
- Gtk::TreeModelColumn<std::string> path;
- };
-
- SessionTemplateColumns session_template_columns;
- Glib::RefPtr<Gtk::ListStore> template_model;
- Gtk::ComboBox template_chooser;
-
- Gtk::VBox session_new_vbox;
- Gtk::VBox session_existing_vbox;
- Gtk::CheckButton more_new_session_options_button;
- Gtk::RadioButtonGroup session_template_group;
- Gtk::RadioButton use_session_as_template_button;
- Gtk::RadioButton use_template_button;
- std::string load_template_override;
-
- void more_new_session_options_button_clicked();
- void new_name_changed ();
- void populate_session_templates ();
-
- /* more options for new sessions */
-
- Gtk::VBox more_options_vbox;
-
- Gtk::Label chan_count_label_1;
- Gtk::Label chan_count_label_3;
- Gtk::Label chan_count_label_4;
- Gtk::Table advanced_table;
- Gtk::HBox input_port_limit_hbox;
- Gtk::VBox input_port_vbox;
- Gtk::Table input_table;
- Gtk::HBox input_hbox;
-
- Gtk::Label bus_label;
- Gtk::Frame bus_frame;
- Gtk::Table bus_table;
- Gtk::HBox bus_hbox;
-
- Gtk::Label input_label;
- Gtk::Frame input_frame;
- Gtk::HBox output_port_limit_hbox;
- Gtk::VBox output_port_vbox;
- Gtk::VBox output_conn_vbox;
- Gtk::VBox output_vbox;
- Gtk::HBox output_hbox;
-
- Gtk::Label output_label;
- Gtk::Frame output_frame;
- Gtk::VBox advanced_vbox;
- Gtk::Label advanced_label;
-
- Gtk::CheckButton _create_master_bus;
- Gtk::SpinButton _master_bus_channel_count;
-
- Gtk::CheckButton _connect_inputs;
- Gtk::CheckButton _limit_input_ports;
- Gtk::SpinButton _input_limit_count;
-
- Gtk::CheckButton _connect_outputs;
- Gtk::CheckButton _limit_output_ports;
- Gtk::SpinButton _output_limit_count;
-
- Gtk::RadioButtonGroup connect_outputs_group;
- Gtk::RadioButton _connect_outputs_to_master;
- Gtk::RadioButton _connect_outputs_to_physical;
-
- Gtk::Adjustment _output_limit_count_adj;
- Gtk::Adjustment _input_limit_count_adj;
- Gtk::Adjustment _master_bus_channel_count_adj;
-
- void connect_inputs_clicked ();
- void connect_outputs_clicked ();
- void limit_inputs_clicked ();
- void limit_outputs_clicked ();
- void master_bus_button_clicked ();
- void setup_more_options_page ();
-
/* final page */
void setup_final_page ();
@@ -278,21 +116,12 @@ class ArdourStartup : public Gtk::Assistant {
gint default_folder_page_index;
gint monitoring_page_index;
gint monitor_section_page_index;
- gint session_page_index;
- gint initial_choice_index;
gint final_page_index;
- gint session_options_page_index;
void move_along_now ();
- bool _existing_session_chooser_used; ///< set to true when the existing session chooser has been used
void setup_prerelease_page ();
- Gtk::Label info_scroller_label;
- std::string::size_type info_scroller_count;
- bool info_scroller_update();
- sigc::connection info_scroller_connection;
- void updates_button_clicked ();
};
#endif /* __gtk2_ardour_startup_h__ */
diff --git a/gtk2_ardour/transcode_video_dialog.cc b/gtk2_ardour/transcode_video_dialog.cc
index d4ad8a24ed..6e4a1a3298 100644
--- a/gtk2_ardour/transcode_video_dialog.cc
+++ b/gtk2_ardour/transcode_video_dialog.cc
@@ -28,7 +28,6 @@
#include <fcntl.h>
#include <sigc++/bind.h>
-#include <libgen.h>
#include "pbd/error.h"
#include "pbd/convert.h"
diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc
index 913d962831..e6dc2c5790 100644
--- a/gtk2_ardour/utils.cc
+++ b/gtk2_ardour/utils.cc
@@ -28,6 +28,7 @@
#include <clocale>
#include <cstring>
#include <cctype>
+#include <cmath>
#include <fstream>
#include <list>
#include <sys/stat.h>
@@ -841,3 +842,15 @@ unique_random_color (list<Gdk::Color>& used_colors)
/* XXX need throttle here to make sure we don't spin for ever */
}
}
+
+string
+rate_as_string (float r)
+{
+ char buf[32];
+ if (fmod (r, 1000.0f)) {
+ snprintf (buf, sizeof (buf), "%.1f kHz", r/1000.0);
+ } else {
+ snprintf (buf, sizeof (buf), "%.0f kHz", r/1000.0);
+ }
+ return buf;
+}
diff --git a/gtk2_ardour/utils.h b/gtk2_ardour/utils.h
index 54ef65acd0..30ccd9c43d 100644
--- a/gtk2_ardour/utils.h
+++ b/gtk2_ardour/utils.h
@@ -89,4 +89,6 @@ std::string escape_angled_brackets (std::string const &);
Gdk::Color unique_random_color (std::list<Gdk::Color> &);
+std::string rate_as_string (float r);
+
#endif /* __ardour_gtk_utils_h__ */
diff --git a/gtk2_ardour/video_monitor.cc b/gtk2_ardour/video_monitor.cc
index 3f69eea6e6..238845fb2f 100644
--- a/gtk2_ardour/video_monitor.cc
+++ b/gtk2_ardour/video_monitor.cc
@@ -554,7 +554,7 @@ VideoMonitor::xjadeo_sync_setup ()
bool my_manual_seek = true;
if (_session->config.get_external_sync()) {
- if (ARDOUR::Config->get_sync_source() == ARDOUR::JACK)
+ if (ARDOUR::Config->get_sync_source() == ARDOUR::Engine)
my_manual_seek = false;
}
diff --git a/gtk2_ardour/video_server_dialog.cc b/gtk2_ardour/video_server_dialog.cc
index 811c00f64f..18a4d21dc9 100644
--- a/gtk2_ardour/video_server_dialog.cc
+++ b/gtk2_ardour/video_server_dialog.cc
@@ -133,7 +133,7 @@ VideoServerDialog::VideoServerDialog (Session* s)
t->attach (cachesize_spinner, 1, 2, 2, 3);
l = manage (new Label (string_compose(
- _("%1 relies on an external Video Server for the videotimeline.\nThe server configured in Edit -> Prefereces -> Video is not reachable.\nDo you want ardour to launch 'harvid' on this machine?"), PROGRAM_NAME)
+ _("%1 relies on an external video server for the videotimeline.\nThe server configured in Edit -> Preferences -> Video is not reachable.\nDo you want %1 to launch 'harvid' on this machine?"), PROGRAM_NAME)
, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false));
l->set_max_width_chars(80);
l->set_line_wrap();
diff --git a/gtk2_ardour/window_manager.cc b/gtk2_ardour/window_manager.cc
index 3ab9e1adff..01baf3e1fd 100644
--- a/gtk2_ardour/window_manager.cc
+++ b/gtk2_ardour/window_manager.cc
@@ -194,6 +194,7 @@ ProxyBase::ProxyBase (const string& name, const std::string& menu_name, const XM
ProxyBase::~ProxyBase ()
{
delete vistracker;
+ delete _window;
}
void
@@ -348,7 +349,7 @@ ProxyBase::setup ()
assert (_window);
vistracker = new Gtkmm2ext::VisibilityTracker (*_window);
- _window->signal_delete_event().connect (sigc::mem_fun (*this, &ProxyBase::handle_win_event));
+ _window->signal_delete_event().connect (sigc::mem_fun (*this, &ProxyBase::delete_event_handler));
if (_width != -1 || _height != -1 || _x_off != -1 || _y_off != -1) {
/* cancel any mouse-based positioning */
@@ -368,8 +369,9 @@ ProxyBase::setup ()
void
ProxyBase::show ()
{
- Gtk::Window* win = get (true);
- win->show ();
+ get (true);
+ assert (_window);
+ _window->show ();
}
void
@@ -383,17 +385,19 @@ ProxyBase::maybe_show ()
void
ProxyBase::show_all ()
{
- Gtk::Window* win = get (true);
- win->show_all ();
+ get (true);
+ assert (_window);
+ _window->show_all ();
}
-
void
ProxyBase::present ()
{
- Gtk::Window* win = get (true);
- win->show_all ();
- win->present ();
+ get (true);
+ assert (_window);
+
+ _window->show_all ();
+ _window->present ();
/* turn off any mouse-based positioning */
_window->set_position (Gtk::WIN_POS_NONE);
@@ -402,15 +406,14 @@ ProxyBase::present ()
void
ProxyBase::hide ()
{
- Gtk::Window* win = get (false);
- if (win) {
+ if (_window) {
save_pos_and_size();
- win->hide ();
+ _window->hide ();
}
}
bool
-ProxyBase::handle_win_event (GdkEventAny* /*ev*/)
+ProxyBase::delete_event_handler (GdkEventAny* /*ev*/)
{
hide();
return true;
@@ -419,10 +422,9 @@ ProxyBase::handle_win_event (GdkEventAny* /*ev*/)
void
ProxyBase::save_pos_and_size ()
{
- Gtk::Window* win = get (false);
- if (win) {
- win->get_position (_x_off, _y_off);
- win->get_size (_width, _height);
+ if (_window) {
+ _window->get_position (_x_off, _y_off);
+ _window->get_size (_width, _height);
}
}
/*-----------------------*/
diff --git a/gtk2_ardour/window_manager.h b/gtk2_ardour/window_manager.h
index ca33b30234..0dbe66b1b1 100644
--- a/gtk2_ardour/window_manager.h
+++ b/gtk2_ardour/window_manager.h
@@ -122,7 +122,7 @@ class ProxyBase : public ARDOUR::SessionHandlePtr, public sigc::trackable {
Gtkmm2ext::VisibilityTracker* vistracker;
void save_pos_and_size ();
- bool handle_win_event (GdkEventAny *ev);
+ bool delete_event_handler (GdkEventAny *ev);
void setup ();
};
diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript
index 4e5c41b826..52fd7b18cb 100644
--- a/gtk2_ardour/wscript
+++ b/gtk2_ardour/wscript
@@ -196,6 +196,7 @@ gtk2_ardour_sources = [
'search_path_option.cc',
'selection.cc',
'send_ui.cc',
+ 'session_dialog.cc',
'session_import_dialog.cc',
'session_metadata_dialog.cc',
'session_option_editor.cc',
@@ -635,7 +636,7 @@ def build(bld):
# Menus
menus_argv = []
if bld.is_defined('GTKOSX'):
- menus_argv = [ '-E', '-P', '-DGTKOSX', '-DNOVIDEOTIMELINE' ]
+ menus_argv = [ '-E', '-P', '-DGTKOSX' ]
else:
menus_argv = [ '-E', '-P' ]
diff --git a/libs/ardour/ardour/ardour.h b/libs/ardour/ardour/ardour.h
index 311611997f..80bdf9d80e 100644
--- a/libs/ardour/ardour/ardour.h
+++ b/libs/ardour/ardour/ardour.h
@@ -60,7 +60,7 @@ namespace ARDOUR {
*/
bool init (bool with_vst, bool try_optimization, const char* localedir);
void init_post_engine ();
- int cleanup ();
+ void cleanup ();
bool no_auto_connect ();
void make_property_quarks ();
diff --git a/libs/ardour/ardour/audio_backend.h b/libs/ardour/ardour/audio_backend.h
index 9052acd530..cbe0bfce50 100644
--- a/libs/ardour/ardour/audio_backend.h
+++ b/libs/ardour/ardour/audio_backend.h
@@ -239,7 +239,38 @@ class AudioBackend : public PortEngine {
* app is undefined or cannot be launched.
*/
virtual void launch_control_app () = 0;
- /* Basic state control */
+
+ /* @return a vector of strings that describe the available
+ * MIDI options.
+ *
+ * These can be presented to the user to decide which
+ * MIDI drivers, options etc. can be used. The returned strings
+ * should be thought of as the key to a map of possible
+ * approaches to handling MIDI within the backend. Ensure that
+ * the strings will make sense to the user.
+ */
+ virtual std::vector<std::string> enumerate_midi_options () const = 0;
+
+ /* Request the use of the MIDI option named @param option, which
+ * should be one of the strings returned by enumerate_midi_options()
+ *
+ * @return zero if successful, non-zero otherwise
+ */
+ virtual int set_midi_option (const std::string& option) = 0;
+
+ virtual std::string midi_option () const = 0;
+
+ /* State Control */
+
+ /* non-virtual method to avoid possible overrides of default
+ * parameters. See Scott Meyers or other books on C++ to
+ * understand this pattern, or possibly just this:
+ *
+ * http://stackoverflow.com/questions/12139786/good-pratice-default-arguments-for-pure-virtual-method
+ */
+ int start (bool for_latency_measurement=false) {
+ return _start (for_latency_measurement);
+ }
/** Start using the device named in the most recent call
* to set_device(), with the parameters set by various
@@ -250,9 +281,14 @@ class AudioBackend : public PortEngine {
* the AudioEngine referenced by @param engine. These calls will
* occur in a thread created by and/or under the control of the backend.
*
+ * @param for_latency_measurement if true, the device is being started
+ * to carry out latency measurements and the backend should this
+ * take care to return latency numbers that do not reflect
+ * any existing systemic latency settings.
+ *
* Return zero if successful, negative values otherwise.
*/
- virtual int start () = 0;
+ virtual int _start (bool for_latency_measurement) = 0;
/** Stop using the device currently in use.
*
@@ -399,13 +435,25 @@ class AudioBackend : public PortEngine {
* stacksize. The thread will begin executing @param func, and will exit
* when that function returns.
*/
- virtual int create_process_thread (boost::function<void()> func, AudioBackendNativeThread*, size_t stacksize) = 0;
+ virtual int create_process_thread (boost::function<void()> func) = 0;
- /** Wait for the thread specified by @param thread to exit.
+ /** Wait for all processing threads to exit.
*
* Return zero on success, non-zero on failure.
*/
- virtual int wait_for_process_thread_exit (AudioBackendNativeThread thread) = 0;
+ virtual int join_process_threads () = 0;
+
+ /** Return true if execution context is in a backend thread
+ */
+ virtual bool in_process_thread () = 0;
+
+ /** Return the minimum stack size of audio threads in bytes
+ */
+ static size_t thread_stack_size () { return 100000; }
+
+ /** Return number of processing threads
+ */
+ virtual uint32_t process_thread_count () = 0;
virtual void update_latencies () = 0;
diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h
index 201d960479..d5dcbffe2b 100644
--- a/libs/ardour/ardour/audioengine.h
+++ b/libs/ardour/ardour/audioengine.h
@@ -70,6 +70,7 @@ public:
int discover_backends();
std::vector<const AudioBackendInfo*> available_backends() const;
std::string current_backend_name () const;
+ boost::shared_ptr<AudioBackend> set_default_backend ();
boost::shared_ptr<AudioBackend> set_backend (const std::string&, const std::string& arg1, const std::string& arg2);
boost::shared_ptr<AudioBackend> current_backend() const { return _backend; }
bool setup_required () const;
@@ -82,8 +83,8 @@ public:
* just forward to a backend implementation.
*/
- int start ();
- int stop ();
+ int start (bool for_latency_measurement=false);
+ int stop (bool for_latency_measurement=false);
int pause ();
int freewheel (bool start_stop);
float get_cpu_load() const ;
@@ -100,8 +101,12 @@ public:
pframes_t sample_time_at_cycle_start ();
pframes_t samples_since_cycle_start ();
bool get_sync_offset (pframes_t& offset) const;
- int create_process_thread (boost::function<void()> func, AudioBackendNativeThread*, size_t stacksize);
- int wait_for_process_thread_exit (AudioBackendNativeThread);
+
+ int create_process_thread (boost::function<void()> func);
+ int join_process_threads ();
+ bool in_process_thread ();
+ uint32_t process_thread_count ();
+
bool is_realtime() const;
bool connected() const;
@@ -189,7 +194,7 @@ public:
MTDM* mtdm();
int prepare_for_latency_measurement ();
- void start_latency_detection ();
+ int start_latency_detection ();
void stop_latency_detection ();
void set_latency_input_port (const std::string&);
void set_latency_output_port (const std::string&);
@@ -224,7 +229,9 @@ public:
std::string _latency_input_name;
std::string _latency_output_name;
framecnt_t _latency_signal_latency;
+ bool _stopped_for_latency;
bool _started_for_latency;
+ bool _in_destructor;
void meter_thread ();
void start_metering_thread ();
@@ -232,9 +239,6 @@ public:
static gint m_meter_exit;
- void parameter_changed (const std::string&);
- PBD::ScopedConnection config_connection;
-
typedef std::map<std::string,AudioBackendInfo*> BackendMap;
BackendMap _backends;
AudioBackendInfo* backend_discover (const std::string&);
diff --git a/libs/ardour/ardour/graph.h b/libs/ardour/ardour/graph.h
index 08af6fb721..763723c792 100644
--- a/libs/ardour/ardour/graph.h
+++ b/libs/ardour/ardour/graph.h
@@ -31,8 +31,6 @@
#include <glib.h>
#include <cassert>
-#include <pthread.h>
-
#include "pbd/semutils.h"
#include "ardour/types.h"
@@ -59,8 +57,6 @@ class Graph : public SessionHandleRef
public:
Graph (Session & session);
- uint32_t threads_in_use () const { return _thread_list.size(); }
-
void prep();
void trigger (GraphNode * n);
void rechain (boost::shared_ptr<RouteList>, GraphEdges const &);
@@ -93,7 +89,6 @@ protected:
virtual void session_going_away ();
private:
- std::list<AudioBackendNativeThread> _thread_list;
volatile bool _quit_threads;
void reset_thread_list ();
diff --git a/libs/ardour/ardour/processor.h b/libs/ardour/ardour/processor.h
index 772ae3520d..18f13dbc78 100644
--- a/libs/ardour/ardour/processor.h
+++ b/libs/ardour/ardour/processor.h
@@ -113,6 +113,9 @@ class Processor : public SessionObject, public Automatable, public Latent
void set_ui (void*);
void* get_ui () const { return _ui_pointer; }
+ void set_owner (SessionObject*);
+ SessionObject* owner() const;
+
protected:
virtual int set_state_2X (const XMLNode&, int version);
@@ -125,6 +128,7 @@ protected:
bool _display_to_user;
bool _pre_fader; ///< true if this processor is currently placed before the Amp, otherwise false
void* _ui_pointer;
+ SessionObject* _owner;
};
} // namespace ARDOUR
diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h
index 78be86eaea..7000dde3ca 100644
--- a/libs/ardour/ardour/rc_configuration_vars.h
+++ b/libs/ardour/ardour/rc_configuration_vars.h
@@ -51,7 +51,7 @@ CONFIG_VARIABLE (int, mtc_qf_speed_tolerance, "mtc-qf-speed-tolerance", 5)
CONFIG_VARIABLE (bool, timecode_sync_frame_rate, "timecode-sync-frame-rate", true)
CONFIG_VARIABLE (bool, timecode_source_is_synced, "timecode-source-is-synced", true)
CONFIG_VARIABLE (bool, timecode_source_2997, "timecode-source-2997", false)
-CONFIG_VARIABLE (SyncSource, sync_source, "sync-source", JACK)
+CONFIG_VARIABLE (SyncSource, sync_source, "sync-source", Engine)
CONFIG_VARIABLE (std::string, ltc_source_port, "ltc-source-port", "system:capture_1")
CONFIG_VARIABLE (bool, send_ltc, "send-ltc", false)
CONFIG_VARIABLE (bool, ltc_send_continuously, "ltc-send-continuously", true)
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index 7337e2d1ea..9c4edfa1a1 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -161,6 +161,8 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
virtual ~Session ();
+ static int get_info_from_path (const std::string& xmlpath, float& sample_rate, SampleFormat& data_format);
+
std::string path() const { return _path; }
std::string name() const { return _name; }
std::string snap_name() const { return _current_snapshot_name; }
@@ -509,7 +511,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
static PBD::Signal1<void, framepos_t> EndTimeChanged;
void request_sync_source (Slave*);
- bool synced_to_jack() const { return config.get_external_sync() && Config->get_sync_source() == JACK; }
+ bool synced_to_engine() const { return config.get_external_sync() && Config->get_sync_source() == Engine; }
double transport_speed() const { return _transport_speed; }
bool transport_stopped() const { return _transport_speed == 0.0f; }
@@ -879,15 +881,6 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
MIDI::MachineControl& mmc() { return *_mmc; }
- /* Callbacks specifically related to JACK, and called directly
- * from the JACK audio backend.
- */
-
-#ifdef HAVE_JACK_SESSION
- void jack_session_event (jack_session_event_t* event);
-#endif
- void jack_timebase_callback (jack_transport_state_t, pframes_t, jack_position_t*, int);
-
protected:
friend class AudioEngine;
void set_block_size (pframes_t nframes);
@@ -1617,7 +1610,10 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
void setup_ltc ();
void setup_click ();
+ void setup_click_state (const XMLNode&);
void setup_bundles ();
+
+ static int get_session_info_from_path (XMLTree& state_tree, const std::string& xmlpath);
};
} // namespace ARDOUR
diff --git a/libs/ardour/ardour/slave.h b/libs/ardour/ardour/slave.h
index c60acb1df7..a0b7b878e4 100644
--- a/libs/ardour/ardour/slave.h
+++ b/libs/ardour/ardour/slave.h
@@ -486,11 +486,11 @@ class MIDIClock_Slave : public Slave {
bool _starting;
};
-class JACK_Slave : public Slave
+class Engine_Slave : public Slave
{
public:
- JACK_Slave (AudioEngine&);
- ~JACK_Slave ();
+ Engine_Slave (AudioEngine&);
+ ~Engine_Slave ();
bool speed_and_position (double& speed, framepos_t& pos);
diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h
index f2319d7669..ee43d1f30f 100644
--- a/libs/ardour/ardour/types.h
+++ b/libs/ardour/ardour/types.h
@@ -489,7 +489,12 @@ namespace ARDOUR {
};
enum SyncSource {
- JACK,
+ /* These are "synonyms". It is important for JACK to be first
+ both here and in enums.cc, so that the string "JACK" is
+ correctly recognized in older session and preference files.
+ */
+ JACK = 0,
+ Engine = 0,
MTC,
MIDIClock,
LTC
@@ -610,16 +615,6 @@ namespace ARDOUR {
uint32_t max; //< samples
};
-/* PLATFORM SPECIFIC #ifdef's here */
-
- /** Define the native thread type used on the platform */
- typedef pthread_t AudioBackendNativeThread;
- static inline bool self_thread_equal (AudioBackendNativeThread thr) {
- return pthread_equal (thr, pthread_self());
- }
-
-/* PLATFORM SPECIFIC #endif's here */
-
} // namespace ARDOUR
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc
index 465f88de56..c2224a8b5e 100644
--- a/libs/ardour/audioengine.cc
+++ b/libs/ardour/audioengine.cc
@@ -80,7 +80,8 @@ AudioEngine::AudioEngine ()
, _latency_output_port (0)
, _latency_flush_frames (0)
, _latency_signal_latency (0)
- , _started_for_latency (false)
+ , _stopped_for_latency (false)
+ , _in_destructor (false)
{
g_atomic_int_set (&m_meter_exit, 0);
discover_backends ();
@@ -88,15 +89,9 @@ AudioEngine::AudioEngine ()
AudioEngine::~AudioEngine ()
{
+ _in_destructor = true;
+ stop_metering_thread ();
drop_backend ();
-
- config_connection.disconnect ();
-
- {
- Glib::Threads::Mutex::Lock tm (_process_lock);
- session_removed.signal ();
- stop_metering_thread ();
- }
}
AudioEngine*
@@ -479,6 +474,7 @@ AudioEngine::discover_backends ()
Glib::PatternSpec so_extension_pattern("*backend.so");
Glib::PatternSpec dylib_extension_pattern("*backend.dylib");
+ Glib::PatternSpec dll_extension_pattern("*backend.dll");
find_matching_files_in_search_path (backend_search_path (),
so_extension_pattern, backend_modules);
@@ -486,6 +482,9 @@ AudioEngine::discover_backends ()
find_matching_files_in_search_path (backend_search_path (),
dylib_extension_pattern, backend_modules);
+ find_matching_files_in_search_path (backend_search_path (),
+ dll_extension_pattern, backend_modules);
+
DEBUG_TRACE (DEBUG::Panning, string_compose (_("looking for backends in %1\n"), backend_search_path().to_string()));
for (vector<std::string>::iterator i = backend_modules.begin(); i != backend_modules.end(); ++i) {
@@ -559,6 +558,16 @@ AudioEngine::drop_backend ()
}
boost::shared_ptr<AudioBackend>
+AudioEngine::set_default_backend ()
+{
+ if (_backends.empty()) {
+ return boost::shared_ptr<AudioBackend>();
+ }
+
+ return set_backend (_backends.begin()->first, "", "");
+}
+
+boost::shared_ptr<AudioBackend>
AudioEngine::set_backend (const std::string& name, const std::string& arg1, const std::string& arg2)
{
BackendMap::iterator b = _backends.find (name);
@@ -587,7 +596,7 @@ AudioEngine::set_backend (const std::string& name, const std::string& arg1, cons
/* BACKEND PROXY WRAPPERS */
int
-AudioEngine::start ()
+AudioEngine::start (bool for_latency)
{
if (!_backend) {
return -1;
@@ -600,7 +609,7 @@ AudioEngine::start ()
_processed_frames = 0;
last_monitor_check = 0;
- if (_backend->start()) {
+ if (_backend->start (for_latency)) {
return -1;
}
@@ -616,7 +625,7 @@ AudioEngine::start ()
start_metering_thread ();
- if (!_started_for_latency) {
+ if (!for_latency) {
Running(); /* EMIT SIGNAL */
}
@@ -624,7 +633,7 @@ AudioEngine::start ()
}
int
-AudioEngine::stop ()
+AudioEngine::stop (bool for_latency)
{
if (!_backend) {
return 0;
@@ -645,7 +654,10 @@ AudioEngine::stop ()
stop_metering_thread ();
Port::PortDrop ();
- Stopped (); /* EMIT SIGNAL */
+
+ if (!for_latency) {
+ Stopped (); /* EMIT SIGNAL */
+ }
return 0;
}
@@ -826,21 +838,39 @@ AudioEngine::get_sync_offset (pframes_t& offset) const
}
int
-AudioEngine::create_process_thread (boost::function<void()> func, AudioBackendNativeThread* thr, size_t stacksize)
+AudioEngine::create_process_thread (boost::function<void()> func)
{
if (!_backend) {
return -1;
}
- return _backend->create_process_thread (func, thr, stacksize);
+ return _backend->create_process_thread (func);
}
int
-AudioEngine::wait_for_process_thread_exit (AudioBackendNativeThread thr)
+AudioEngine::join_process_threads ()
+{
+ if (!_backend) {
+ return -1;
+ }
+ return _backend->join_process_threads ();
+}
+
+bool
+AudioEngine::in_process_thread ()
+{
+ if (!_backend) {
+ return false;
+ }
+ return _backend->in_process_thread ();
+}
+
+uint32_t
+AudioEngine::process_thread_count ()
{
if (!_backend) {
return 0;
}
- return _backend->wait_for_process_thread_exit (thr);
+ return _backend->process_thread_count ();
}
int
@@ -982,11 +1012,19 @@ AudioEngine::update_latencies ()
void
AudioEngine::halted_callback (const char* why)
{
+ if (_in_destructor) {
+ /* everything is under control */
+ return;
+ }
+
stop_metering_thread ();
_running = false;
Port::PortDrop (); /* EMIT SIGNAL */
- Halted (why); /* EMIT SIGNAL */
+
+ if (!_started_for_latency) {
+ Halted (why); /* EMIT SIGNAL */
+ }
}
bool
@@ -1015,23 +1053,26 @@ AudioEngine::mtdm()
int
AudioEngine::prepare_for_latency_measurement ()
{
- if (!running()) {
- _started_for_latency = true;
+ if (running()) {
+ _stopped_for_latency = true;
+ stop (true);
+ }
- if (start()) {
- _started_for_latency = false;
- return -1;
- }
+ if (start (true)) {
+ _started_for_latency = true;
+ return -1;
}
return 0;
}
-void
+int
AudioEngine::start_latency_detection ()
{
- if (prepare_for_latency_measurement ()) {
- return;
+ if (!running()) {
+ if (prepare_for_latency_measurement ()) {
+ return -1;
+ }
}
PortEngine& pe (port_engine());
@@ -1045,27 +1086,32 @@ AudioEngine::start_latency_detection ()
PortEngine::PortHandle* in = pe.get_port_by_name (_latency_input_name);
if (!out || !in) {
- return;
+ stop (true);
+ return -1;
}
/* create the ports we will use to read/write data */
if ((_latency_output_port = pe.register_port ("latency_out", DataType::AUDIO, IsOutput)) == 0) {
- return;
+ stop (true);
+ return -1;
}
if (pe.connect (_latency_output_port, _latency_output_name)) {
pe.unregister_port (_latency_output_port);
- return;
+ stop (true);
+ return -1;
}
const string portname ("latency_in");
if ((_latency_input_port = pe.register_port (portname, DataType::AUDIO, IsInput)) == 0) {
pe.unregister_port (_latency_output_port);
- return;
+ stop (true);
+ return -1;
}
if (pe.connect (_latency_input_name, make_port_name_non_relative (portname))) {
pe.unregister_port (_latency_output_port);
- return;
+ stop (true);
+ return -1;
}
LatencyRange lr;
@@ -1081,6 +1127,7 @@ AudioEngine::start_latency_detection ()
_measuring_latency = true;
_latency_flush_frames = samples_per_cycle();
+ return 0;
}
void
@@ -1096,9 +1143,15 @@ AudioEngine::stop_latency_detection ()
port_engine().unregister_port (_latency_input_port);
_latency_input_port = 0;
}
- if (_started_for_latency) {
- stop ();
+
+ stop (true);
+
+ if (_stopped_for_latency) {
+ start ();
}
+
+ _stopped_for_latency = false;
+ _started_for_latency = false;
}
void
diff --git a/libs/ardour/jack_slave.cc b/libs/ardour/engine_slave.cc
index 4b2f3b1860..eb55c9ba54 100644
--- a/libs/ardour/jack_slave.cc
+++ b/libs/ardour/engine_slave.cc
@@ -26,7 +26,7 @@
using namespace std;
using namespace ARDOUR;
-JACK_Slave::JACK_Slave (AudioEngine& e)
+Engine_Slave::Engine_Slave (AudioEngine& e)
: engine (e)
{
double x;
@@ -35,24 +35,24 @@ JACK_Slave::JACK_Slave (AudioEngine& e)
speed_and_position (x, p);
}
-JACK_Slave::~JACK_Slave ()
+Engine_Slave::~Engine_Slave ()
{
}
bool
-JACK_Slave::locked() const
+Engine_Slave::locked() const
{
return true;
}
bool
-JACK_Slave::ok() const
+Engine_Slave::ok() const
{
return true;
}
bool
-JACK_Slave::speed_and_position (double& sp, framepos_t& position)
+Engine_Slave::speed_and_position (double& sp, framepos_t& position)
{
switch (engine.transport_state()) {
case TransportStopped:
diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc
index bab0e8ed15..2a38cd2c8a 100644
--- a/libs/ardour/enums.cc
+++ b/libs/ardour/enums.cc
@@ -336,6 +336,7 @@ setup_enum_writer ()
REGISTER_ENUM (MTC);
REGISTER_ENUM (JACK);
+ REGISTER_ENUM (Engine);
REGISTER_ENUM (MIDIClock);
REGISTER_ENUM (LTC);
REGISTER (_SyncSource);
diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc
index aac7709f90..9850d82d31 100644
--- a/libs/ardour/globals.cc
+++ b/libs/ardour/globals.cc
@@ -354,9 +354,15 @@ ARDOUR::init_post_engine ()
ARDOUR::PluginManager::instance().refresh ();
}
-int
-ARDOUR::cleanup ()
+void
+ARDOUR::cleanup ()
{
+ if (!libardour_initialized) {
+ return;
+ }
+
+ ARDOUR::AudioEngine::destroy ();
+
delete Library;
lrdf_cleanup ();
delete &ControlProtocolManager::instance();
@@ -368,7 +374,8 @@ ARDOUR::cleanup ()
vstfx_exit();
#endif
PBD::cleanup ();
- return 0;
+
+ return;
}
void
@@ -530,7 +537,11 @@ ARDOUR::get_available_sync_options ()
{
vector<SyncSource> ret;
- ret.push_back (JACK);
+ boost::shared_ptr<AudioBackend> backend = AudioEngine::instance()->current_backend();
+ if (backend && backend->name() == "JACK") {
+ ret.push_back (Engine);
+ }
+
ret.push_back (MTC);
ret.push_back (MIDIClock);
ret.push_back (LTC);
diff --git a/libs/ardour/graph.cc b/libs/ardour/graph.cc
index b37de547cd..d183bcd7d2 100644
--- a/libs/ardour/graph.cc
+++ b/libs/ardour/graph.cc
@@ -96,29 +96,24 @@ Graph::reset_thread_list ()
number of threads.
*/
- if (_thread_list.size() == num_threads) {
+ if (AudioEngine::instance()->process_thread_count() == num_threads) {
return;
}
Glib::Threads::Mutex::Lock lm (_session.engine().process_lock());
- AudioBackendNativeThread a_thread;
- if (!_thread_list.empty()) {
+ if (AudioEngine::instance()->process_thread_count() != 0) {
drop_threads ();
}
- if (AudioEngine::instance()->create_process_thread (boost::bind (&Graph::main_thread, this), &a_thread, 100000) != 0) {
+ if (AudioEngine::instance()->create_process_thread (boost::bind (&Graph::main_thread, this)) != 0) {
throw failed_constructor ();
}
- _thread_list.push_back (a_thread);
-
for (uint32_t i = 1; i < num_threads; ++i) {
- if (AudioEngine::instance()->create_process_thread (boost::bind (&Graph::helper_thread, this), &a_thread, 100000) != 0) {
+ if (AudioEngine::instance()->create_process_thread (boost::bind (&Graph::helper_thread, this))) {
throw failed_constructor ();
}
-
- _thread_list.push_back (a_thread);
}
}
@@ -140,17 +135,15 @@ Graph::drop_threads ()
{
_quit_threads = true;
- for (unsigned int i=0; i< _thread_list.size(); i++) {
+ uint32_t thread_count = AudioEngine::instance()->process_thread_count ();
+
+ for (unsigned int i=0; i < thread_count; i++) {
_execution_sem.signal ();
}
_callback_start_sem.signal ();
- for (list<AudioBackendNativeThread>::iterator i = _thread_list.begin(); i != _thread_list.end(); ++i) {
- AudioEngine::instance()->wait_for_process_thread_exit (*i);
- }
-
- _thread_list.clear ();
+ AudioEngine::instance()->join_process_threads ();
_execution_tokens = 0;
@@ -583,10 +576,5 @@ Graph::process_one_route (Route* route)
bool
Graph::in_process_thread () const
{
- for (list<AudioBackendNativeThread>::const_iterator i = _thread_list.begin (); i != _thread_list.end(); ++i) {
- if (self_thread_equal (*i)) {
- return true;
- }
- }
- return false;
+ return AudioEngine::instance()->in_process_thread ();
}
diff --git a/libs/ardour/po/de.po b/libs/ardour/po/de.po
index 87cd8be124..f92bf49d1e 100644
--- a/libs/ardour/po/de.po
+++ b/libs/ardour/po/de.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-03 07:59-0400\n"
-"PO-Revision-Date: 2013-07-23 15:04+0200\n"
+"POT-Creation-Date: 2013-09-26 16:09+0200\n"
+"PO-Revision-Date: 2013-09-26 16:32+0200\n"
"Last-Translator: Edgar Aichinger <edogawa@aon.at>\n"
"Language-Team: German <ardour-dev@lists.ardour.org>\n"
"Language: de\n"
@@ -137,7 +137,7 @@ msgstr "Audio-Wiedergabelisten (unbenutzt)"
#: audio_playlist_source.cc:171 audiosource.cc:913 file_source.cc:529
#: midi_playlist_source.cc:144 midi_playlist_source.cc:152
#: midi_playlist_source.cc:159 midi_source.cc:371 plugin_insert.cc:643
-#: rb_effect.cc:332 session.cc:2465 session.cc:2498 session.cc:3643
+#: rb_effect.cc:332 session.cc:2606 session.cc:2639 session.cc:3784
#: session_handle.cc:87 sndfilesource.cc:121
msgid "programming error: %1"
msgstr "Programmierfehler: %1"
@@ -206,65 +206,21 @@ msgstr "kann VAMP-Plugin \"%1\" nicht laden"
msgid "VAMP Plugin \"%1\" could not be loaded"
msgstr "VAMP-Plugin \"%1\" konnte nicht geladen werden"
-#: audioengine.cc:186
-msgid ""
-"This version of JACK is old - you should upgrade to a newer version that "
-"supports jack_port_type_get_buffer_size()"
-msgstr ""
-"Diese JACK-Version ist alt - Sie sollten auf eine Version upgraden, die "
-"jack_port_type_get_buffer_size() unterstützt"
+#: audioengine.cc:489
+msgid "looking for backends in %1\n"
+msgstr "Suche nach Backends in %1\n"
-#: audioengine.cc:190
-msgid "Connect session to engine"
-msgstr "Verbinde Projekt mit Engine"
+#: audioengine.cc:512
+msgid "AudioEngine: cannot load module \"%1\" (%2)"
+msgstr "AudioEngine: kann Modul \"%1\" nicht laden (%2)"
-#: audioengine.cc:843
-msgid ""
-"a port with the name \"%1\" already exists: check for duplicated track/bus "
-"names"
-msgstr ""
-"Ein Port mit Namen \"%1\" existiert bereits: Prüfen Sie auf doppelte Spur/"
-"Busnamen"
+#: audioengine.cc:518
+msgid "AudioEngine: backend at \"%1\" has no descriptor function."
+msgstr "AudioEngine: Backend an \"%1\" hat keine Beschreibungsfunktion."
-#: audioengine.cc:845 session.cc:1698
-msgid ""
-"No more JACK ports are available. You will need to stop %1 and restart JACK "
-"with more ports if you need this many tracks."
-msgstr ""
-"Keine JACK-Ports mehr verfügbar. Wenn Sie so viele Spuren benötigen, müssen "
-"Sie %1 stoppen und JACK mit mehr Ports neu starten."
-
-#: audioengine.cc:848
-msgid "AudioEngine: cannot register port \"%1\": %2"
-msgstr "AudioEngine: kann Port \"%1\": %2 nicht registrieren"
-
-#: audioengine.cc:878
-msgid "unable to create port: %1"
-msgstr "kann Port: %1 nicht erzeugen"
-
-#: audioengine.cc:932
-msgid "connect called before engine was started"
-msgstr "Aufruf von connect vor dem Start der Engine"
-
-#: audioengine.cc:958
-msgid "AudioEngine: cannot connect %1 (%2) to %3 (%4)"
-msgstr "AudioEngine: kann %1 (%2) nicht mit %3 (%4) verbinden"
-
-#: audioengine.cc:973 audioengine.cc:1004
-msgid "disconnect called before engine was started"
-msgstr "Aufruf von disconnect vor dem Start der Engine"
-
-#: audioengine.cc:1052
-msgid "get_port_by_name() called before engine was started"
-msgstr "Aufruf von get_port_by_name() vor dem Start der Engine"
-
-#: audioengine.cc:1104
-msgid "get_ports called before engine was started"
-msgstr "Aufruf von get_ports vor dem Start der Engine"
-
-#: audioengine.cc:1427
-msgid "failed to connect to JACK"
-msgstr "Verbindung zu JACK fehlgeschlagen"
+#: audioengine.cc:580
+msgid "Could not create backend for %1: %2"
+msgstr "Konnte Backend für %1 nicht erzeugen: %2"
#: audioregion.cc:1643
msgid ""
@@ -316,8 +272,8 @@ msgstr "AudioSource: kann Pfad für Peaks (b) \"%1\" nicht öffnen (%2)"
msgid ""
"AudioSource[%1]: peak read - cannot read %2 samples at offset %3 of %4 (%5)"
msgstr ""
-"AudioSource[%1]: peak read - kann %2 Samples bei Offset %3 von %4 nicht lesen"
-"(%5)"
+"AudioSource[%1]: peak read - kann %2 Samples bei Offset %3 von %4 nicht "
+"lesen(%5)"
#: audiosource.cc:667
msgid "%1: could not write read raw data for peak computation (%2)"
@@ -467,7 +423,7 @@ msgstr "kann CPU-Takt in /proc/cpuinfo nicht finden"
msgid "audio"
msgstr "Audio"
-#: data_type.cc:28 session.cc:1640 session.cc:1643
+#: data_type.cc:28 session.cc:1781 session.cc:1784
msgid "MIDI"
msgstr "MIDI"
@@ -582,7 +538,7 @@ msgstr "Dreieck"
msgid "Rectangular"
msgstr "Rechteck"
-#: export_formats.cc:52 session.cc:4861 session.cc:4877
+#: export_formats.cc:52 session.cc:5002 session.cc:5018
msgid "None"
msgstr "Kein"
@@ -696,7 +652,7 @@ msgstr ""
"% unterstützt nur %2 Kanäle, in Ihrer Kanalkonfiguration befinden sich "
"jedoch %3 Kanäle"
-#: file_source.cc:198 session_state.cc:2891
+#: file_source.cc:198 session_state.cc:2813
msgid ""
"there are already 1000 files with names like %1; versioning discontinued"
msgstr ""
@@ -800,24 +756,24 @@ msgstr "kann momentanes Arbeitsverzeichnis nicht bestimmen (%1)"
msgid "unknown file type for session %1"
msgstr "Unbekannter Dateityp für Projekt %1"
-#: globals.cc:205
+#: globals.cc:207
msgid "Could not set system open files limit to \"unlimited\""
msgstr ""
"Konnte die Systemgrenze für offene Dateien nicht auf \"unbeschränkt\" setzen"
-#: globals.cc:207
+#: globals.cc:209
msgid "Could not set system open files limit to %1"
msgstr "Konnte die Systemgrenze für offene Dateien nicht auf %1 setzen"
-#: globals.cc:211
+#: globals.cc:213
msgid "Your system is configured to limit %1 to only %2 open files"
msgstr "Ihre Systemkonfiguration beschränkt %1 auf nur %2 offene Dateien"
-#: globals.cc:215
+#: globals.cc:217
msgid "Could not get system open files limit (%1)"
msgstr "Konnte die Grenze für offene Dateien nicht erhalten (%1)"
-#: globals.cc:266
+#: globals.cc:268
msgid "Loading configuration"
msgstr "Lade Konfiguration"
@@ -939,47 +895,47 @@ msgstr "IO: schlecht geformte Zeichenkette in XML-Knoten für Ausgänge \"%1\""
msgid "IO: bad output string in XML node \"%1\""
msgstr "IO: schlechte Zeichenkette für Ausgang in XML-Knoten \"%1\""
-#: io.cc:1410
+#: io.cc:1411
#, c-format
msgid "%s %u"
msgstr "%s %u"
-#: io.cc:1457
+#: io.cc:1458
#, c-format
msgid "%s in"
msgstr "%s in"
-#: io.cc:1459
+#: io.cc:1460
#, c-format
msgid "%s out"
msgstr "%s out"
-#: io.cc:1534 session.cc:494 session.cc:523
+#: io.cc:1535 session.cc:676 session.cc:705
msgid "mono"
msgstr "Mono"
-#: io.cc:1536 session.cc:507 session.cc:537
+#: io.cc:1537 session.cc:689 session.cc:719
msgid "L"
msgstr "L"
-#: io.cc:1536 session.cc:509 session.cc:539
+#: io.cc:1537 session.cc:691 session.cc:721
msgid "R"
msgstr "R"
-#: io.cc:1538 io.cc:1544
+#: io.cc:1539 io.cc:1545
#, c-format
msgid "%d"
msgstr "%d"
-#: ladspa_plugin.cc:88
+#: ladspa_plugin.cc:86
msgid "LADSPA: module has no descriptor function."
msgstr "LADSPA: Modul hat keine Beschreibungsfunktion"
-#: ladspa_plugin.cc:93
+#: ladspa_plugin.cc:91
msgid "LADSPA: plugin has gone away since discovery!"
msgstr "LADSPA: Plugin ist nicht mehr auffindbar!"
-#: ladspa_plugin.cc:100
+#: ladspa_plugin.cc:98
msgid "LADSPA: \"%1\" cannot be used, since it cannot do inplace processing"
msgstr ""
"LADSPA: \"%1\" kann nicht verwendet werdeen, da es kein \"inplace processing"
@@ -1063,7 +1019,7 @@ msgstr ""
msgid "incorrect XML mode passed to Locations::set_state"
msgstr "unkorrekter XML-Modus an Locations::set_state weitergereicht"
-#: location.cc:842 session.cc:4362 session_state.cc:1114
+#: location.cc:842 session.cc:4503 session_state.cc:1031
msgid "session"
msgstr "Projekt"
@@ -1210,6 +1166,38 @@ msgstr "Fehlende Eigenschaft \"state\" bei AutomationState"
msgid "MIDI stretch created non-MIDI source"
msgstr "MIDI Streckung erzeugte Nicht-MIDI Quelle"
+#: midiport_manager.cc:71
+msgid "MIDI control in"
+msgstr "MIDI control in"
+
+#: midiport_manager.cc:72
+msgid "MIDI control out"
+msgstr "MIDI control out"
+
+#: midiport_manager.cc:74
+msgid "MMC in"
+msgstr "MMC in"
+
+#: midiport_manager.cc:75
+msgid "MMC out"
+msgstr "MMC out"
+
+#: midiport_manager.cc:96
+msgid "MTC in"
+msgstr "MTC in"
+
+#: midiport_manager.cc:98
+msgid "MTC out"
+msgstr "MTC out"
+
+#: midiport_manager.cc:101
+msgid "MIDI Clock in"
+msgstr "MIDI Clock in"
+
+#: midiport_manager.cc:103
+msgid "MIDI Clock out"
+msgstr "MIDI Clock out"
+
#: monitor_processor.cc:53
msgid "monitor dim"
msgstr "Monitor dämpfen"
@@ -1246,11 +1234,11 @@ msgstr "Polaritätsschalter"
msgid "solo control"
msgstr "Solo-Schalter"
-#: mtc_slave.cc:235
+#: mtc_slave.cc:238
msgid "MTC Slave: atomic read of current time failed, sleeping!"
msgstr "MTC Slave: Fehler beim atomisches Lesen der momentanen Zeit, schlafe!"
-#: mtc_slave.cc:359
+#: mtc_slave.cc:361
msgid ""
"Unknown rate/drop value %1 in incoming MTC stream, session values used "
"instead"
@@ -1258,11 +1246,11 @@ msgstr ""
"Unbekannter Wert %1 für Rate/Abfall in eingehendem MTC-Datenstrom, verwende "
"Projektwerte"
-#: mtc_slave.cc:379
+#: mtc_slave.cc:381
msgid "Session framerate adjusted from %1 TO: MTC's %2."
msgstr "Projekt-Framerate von %1 auf die von MTC: %2 geändert"
-#: mtc_slave.cc:393
+#: mtc_slave.cc:395
msgid "Session and MTC framerate mismatch: MTC:%1 %2:%3."
msgstr "Framerate von Projekt und MTC stimmen nicht überein: MTC: %1 %2: %3"
@@ -1326,19 +1314,19 @@ msgstr "Pannerziel bekam XML-Daten für %1 übergeben - ignoriert"
msgid "looking for panners in %1"
msgstr "Suche nach Pannern in %1"
-#: panner_manager.cc:99
+#: panner_manager.cc:100
msgid "Panner discovered: \"%1\" in %2"
msgstr "Panner gefunden: \"%1\" in %2"
-#: panner_manager.cc:116
+#: panner_manager.cc:117
msgid "PannerManager: cannot load module \"%1\" (%2)"
msgstr "PannerManager: kann Modul \"%1\" nicht laden (%2)"
-#: panner_manager.cc:123
+#: panner_manager.cc:124
msgid "PannerManager: module \"%1\" has no descriptor function."
msgstr "PannerManager: Modul \"%1\" hat keine Beschreibungsfunktion"
-#: panner_manager.cc:186
+#: panner_manager.cc:187
msgid "no panner discovered for in/out = %1/%2"
msgstr "keinen Panner für %1/%2 Ein/Ausgänge gefunden"
@@ -1461,11 +1449,7 @@ msgstr "unbekannter Plugin-Statustyp \"%1\" - alle Einträge ignoriert"
msgid "unknown plugin type \"%1\" - ignored"
msgstr "unbekannter Plugintyp \"%1\" - ignoriert"
-#: port.cc:367
-msgid "get_connected_latency_range() called while disconnected from JACK"
-msgstr "Aufruf von get_connected_latency_range(), während von JACK getrennt"
-
-#: port.cc:450
+#: port.cc:410
msgid "could not reregister %1"
msgstr "konnte %1 nicht erneut registrieren"
@@ -1482,6 +1466,38 @@ msgstr ""
msgid "non-port insert XML used for port plugin insert"
msgstr "Nicht-Port-Insert XML zum Einfügen eines Port-Plugin benutzt"
+#: port_manager.cc:270
+msgid ""
+"a port with the name \"%1\" already exists: check for duplicated track/bus "
+"names"
+msgstr ""
+"Ein Port mit Namen \"%1\" existiert bereits: Prüfen Sie auf doppelte Spur/"
+"Busnamen"
+
+#: port_manager.cc:272
+msgid ""
+"No more ports are available. You will need to stop %1 and restart with more "
+"ports if you need this many tracks."
+msgstr ""
+"Keine Ports mehr verfügbar. Wenn Sie so viele Spuren brauchen, müssen Sie %1 "
+"stoppen und mit mehr Ports neu starten."
+
+#: port_manager.cc:275
+msgid "AudioEngine: cannot register port \"%1\": %2"
+msgstr "AudioEngine: kann Port \"%1\": %2 nicht registrieren"
+
+#: port_manager.cc:314
+msgid "unable to create port: %1"
+msgstr "kann Port: %1 nicht erzeugen"
+
+#: port_manager.cc:401
+msgid "AudioEngine: cannot connect %1 (%2) to %3 (%4)"
+msgstr "AudioEngine: kann %1 (%2) nicht mit %3 (%4) verbinden"
+
+#: port_manager.cc:453 port_manager.cc:454
+msgid "Re-establising port %1 failed"
+msgstr "Portwiederherstellung fehlgeschlagen"
+
#: processor.cc:207
msgid "No %1 property flag in element %2"
msgstr "Kein Flag für Eigenschaft \"%1\" in Element %2"
@@ -1490,19 +1506,19 @@ msgstr "Kein Flag für Eigenschaft \"%1\" in Element %2"
msgid "No child node with active property"
msgstr "Kein Kindknoten mit der Eigenschaft \"aktiv\""
-#: rc_configuration.cc:93
+#: rc_configuration.cc:88
msgid "Loading system configuration file %1"
msgstr "Lade Systemkonfigurationsdatei %1"
-#: rc_configuration.cc:97
+#: rc_configuration.cc:92
msgid "%1: cannot read system configuration file \"%2\""
msgstr "%1: kann Systemkonfigurationsdatei \"%2\" nicht lesen"
-#: rc_configuration.cc:102
+#: rc_configuration.cc:97
msgid "%1: system configuration file \"%2\" not loaded successfully."
msgstr "%1: Systemkonfigurationsdatei \"%2\" konnte nicht geladen werden."
-#: rc_configuration.cc:106
+#: rc_configuration.cc:101
msgid ""
"Your system %1 configuration file is empty. This probably means that there "
"was an error installing %1"
@@ -1510,23 +1526,23 @@ msgstr ""
"Ihre %1-Systemkonfigurationsdatei ist leer. Das deutet möglicherweise darauf "
"hin, daß bei der Installation von %1 Fehler auftraten."
-#: rc_configuration.cc:121
+#: rc_configuration.cc:116
msgid "Loading user configuration file %1"
msgstr "Lade Benutzerkonfiguration %1"
-#: rc_configuration.cc:125
+#: rc_configuration.cc:120
msgid "%1: cannot read configuration file \"%2\""
msgstr "%1: kann Konfigurationsdatei \"%2\" nicht lesen"
-#: rc_configuration.cc:130
+#: rc_configuration.cc:125
msgid "%1: user configuration file \"%2\" not loaded successfully."
msgstr "%1: Benutzerkonfiguration \"%2\" konnte nicht geladen werden."
-#: rc_configuration.cc:134
+#: rc_configuration.cc:129
msgid "your %1 configuration file is empty. This is not normal."
msgstr "Ihre %1-Konfigurationsdatei ist leer. Das ist nicht normal."
-#: rc_configuration.cc:151
+#: rc_configuration.cc:146
msgid "Config file %1 not saved"
msgstr "Konfigurationsdatei %1 nicht gesichert"
@@ -1614,106 +1630,98 @@ msgstr "Send %1"
msgid "programming error: send created using role %1"
msgstr "Programmierfehler: Send erzeugt mittels Rolle %1"
-#: session.cc:347
-msgid "Set block size and sample rate"
-msgstr "Setze Blockgröße und Samplerate"
+#: session.cc:343
+msgid "Connect to engine"
+msgstr "Verbinde zur Engine"
-#: session.cc:352
-msgid "Using configuration"
-msgstr "Benutze Konfiguration"
+#: session.cc:348
+msgid "Session loading complete"
+msgstr "Laden des Projektes abgeschlossen"
+
+#: session.cc:420
+msgid "Set up LTC"
+msgstr "LTC einrichten"
-#: session.cc:377
+#: session.cc:422
+msgid "Set up Click"
+msgstr "Klick einrichten"
+
+#: session.cc:424
+msgid "Set up standard connections"
+msgstr "Richte Standard-Verbindungen ein"
+
+#: session.cc:561
msgid "LTC In"
msgstr "LTC In"
-#: session.cc:378
+#: session.cc:562
msgid "LTC Out"
msgstr "LTC Out"
-#: session.cc:404
+#: session.cc:588
msgid "LTC-in"
msgstr "LTC-in"
-#: session.cc:405
+#: session.cc:589
msgid "LTC-out"
msgstr "LTC-out"
-#: session.cc:434
+#: session.cc:625
msgid "could not setup Click I/O"
msgstr "konnte Metronom-E/A nicht einrichten"
-#: session.cc:461
-msgid "cannot setup Click I/O"
-msgstr "kann Metronom-E/A nicht einrichten"
-
-#: session.cc:464
-msgid "Compute I/O Latencies"
-msgstr "Berechne E/A-Latenzen"
-
-#: session.cc:470
-msgid "Set up standard connections"
-msgstr "Richte Standard-Verbindungen ein"
-
-#: session.cc:491
+#: session.cc:673
#, c-format
msgid "out %<PRIu32>"
msgstr "out %<PRIu32>"
-#: session.cc:505
+#: session.cc:687
#, c-format
msgid "out %<PRIu32>+%<PRIu32>"
msgstr "out %<PRIu32>+%<PRIu32>"
-#: session.cc:520
+#: session.cc:702
#, c-format
msgid "in %<PRIu32>"
msgstr "in %<PRIu32>"
-#: session.cc:534
+#: session.cc:716
#, c-format
msgid "in %<PRIu32>+%<PRIu32>"
msgstr "in %<PRIu32>+%<PRIu32>"
-#: session.cc:570
-msgid "Setup signal flow and plugins"
-msgstr "Richte Signalfluss and Plugins ein"
-
-#: session.cc:614
-msgid "Connect to engine"
-msgstr "Verbinde zur Engine"
-
-#: session.cc:645
+#: session.cc:780
msgid "cannot connect master output %1 to %2"
msgstr "kann Master-Ausgang %1 nicht mit %2 verbinden"
-#: session.cc:704
+#: session.cc:839
msgid "monitor"
msgstr "Monitor"
-#: session.cc:749
+#: session.cc:884
msgid "cannot connect control input %1 to %2"
msgstr "kann Kontrolleingang %1 nicht mit %2 verbinden"
-#: session.cc:769
+#: session.cc:904
msgid "The preferred I/O for the monitor bus (%1) cannot be found"
msgstr "Bevorzugte E/A für den Monitorbus (%1) kann nicht gefunden werden"
-#: session.cc:800
+#: session.cc:935
msgid "cannot connect control output %1 to %2"
msgstr "kann Kontrollausgang %1 nicht mit %2 verbinden"
-#: session.cc:864
+#: session.cc:999
msgid "cannot create Auditioner: no auditioning of regions possible"
msgstr ""
"Kann das Vorhör-System nicht einrichten: kein Vorhören von Regionen möglich"
-#: session.cc:1043
+#: session.cc:1183
msgid "Session: you can't use that location for auto punch (start <= end)"
msgstr ""
"Session: Sie können diese Position nicht für Auto-Punch verwenden (Start <= "
"Ende) "
-#: session.cc:1083
+#: session.cc:1223
msgid ""
"You cannot use this location for auto-loop because it has zero or negative "
"length"
@@ -1721,84 +1729,92 @@ msgstr ""
"Sie können diese Position nicht für \"automatische Schleife\" verwenden, da "
"sie keine oder eine negative Länge hat"
-#: session.cc:1396
+#: session.cc:1537
msgid "feedback loop setup between %1 and %2"
msgstr "Feedbackschleife zwischen %1 und %2 erkannt"
-#: session.cc:1692
+#: session.cc:1833
msgid "Session: could not create new midi track."
msgstr "Session: konnte keine neue MIDI-Spur erzeugen."
-#: session.cc:1875 session.cc:1878
+#: session.cc:1839
+msgid ""
+"No more JACK ports are available. You will need to stop %1 and restart JACK "
+"with more ports if you need this many tracks."
+msgstr ""
+"Keine JACK-Ports mehr verfügbar. Wenn Sie so viele Spuren benötigen, müssen "
+"Sie %1 stoppen und JACK mit mehr Ports neu starten."
+
+#: session.cc:2016 session.cc:2019
msgid "Audio"
msgstr "Audio"
-#: session.cc:1902 session.cc:1910 session.cc:1987 session.cc:1995
+#: session.cc:2043 session.cc:2051 session.cc:2128 session.cc:2136
msgid "cannot configure %1 in/%2 out configuration for new audio track"
msgstr "kann %1 ein/%2 aus für neue Audiospur nicht konfigurieren"
-#: session.cc:1933
+#: session.cc:2074
msgid "Session: could not create new audio track."
msgstr "Session: konnte keine neue Audios.pur erzeugen"
-#: session.cc:1965 session.cc:1968
+#: session.cc:2106 session.cc:2109
msgid "Bus"
msgstr "Bus"
-#: session.cc:2018
+#: session.cc:2159
msgid "Session: could not create new audio route."
msgstr "Session: konnte keine neueAudio-Route erzeugen"
-#: session.cc:2077 session.cc:2087
+#: session.cc:2218 session.cc:2228
msgid "Session: UINT_MAX routes? impossible!"
msgstr "Session: UINT_MAX Routen? unmöglich!"
-#: session.cc:2109
+#: session.cc:2250
msgid "Session: cannot create track/bus from template description"
msgstr "Session: Kann die Route aus der Vorlagenbeschreibung nicht erzeugen"
-#: session.cc:2135
+#: session.cc:2276
msgid "Session: could not create new route from template"
msgstr "Session: konnte keine neue Route aus der Vorlage erzeugen."
-#: session.cc:2164
+#: session.cc:2305
msgid "Adding new tracks/busses failed"
msgstr "Fehler beim Hinzufügen neuer Spuren/Busse"
-#: session.cc:3265
+#: session.cc:3406
msgid "FATAL ERROR! Could not find a suitable version of %1 for a rename"
msgstr ""
"FATALER FEHLER! Konnte keine passende Version von %1 zum Umbenennen finden"
-#: session.cc:3385 session.cc:3443
+#: session.cc:3526 session.cc:3584
msgid "There are already %1 recordings for %2, which I consider too many."
msgstr "Es gibt bereits %1 Aufnahmen für %2, was ich als zu viele erachte."
-#: session.cc:3833
+#: session.cc:3974
msgid "send ID %1 appears to be in use already"
msgstr "Send ID %1 ist offenbar schon in Gebrauch"
-#: session.cc:3845
+#: session.cc:3986
msgid "aux send ID %1 appears to be in use already"
msgstr "Aux-Send ID %1 ist offenbar schon in Gebrauch"
-#: session.cc:3857
+#: session.cc:3998
msgid "return ID %1 appears to be in use already"
msgstr "Return ID %1 ist offenbar schon in Gebrauch"
-#: session.cc:3869
+#: session.cc:4010
msgid "insert ID %1 appears to be in use already"
msgstr "Insert ID %1 ist offenbar schon in Gebrauch"
-#: session.cc:3996
+#: session.cc:4137
msgid "Cannot write a range where end <= start (e.g. %1 <= %2)"
msgstr "Kann einen Bereich mit Ende <= Start nicht schreiben (z.B. %1 <= %2)"
-#: session.cc:4025
+#: session.cc:4166
msgid "too many bounced versions of playlist \"%1\""
msgstr "zu viele gebouncete Versionen der Wiedergabeliste \"%1\""
-#: session.cc:4035
+#: session.cc:4176
msgid "cannot create new audio file \"%1\" for %2"
msgstr "kann keine neue Audiodatei \"%1\" für %2 erzeugen"
@@ -1845,11 +1861,11 @@ msgstr ""
"Session: zwei Ereignisse des Typs %1 können nicht im selben Frame existieren "
"(%2)."
-#: session_export.cc:126
+#: session_export.cc:125
msgid "%1: cannot seek to %2 for export"
msgstr "%1: kann für Export nicht Dateiposition %2 aufsuchen"
-#: session_export.cc:183
+#: session_export.cc:182
msgid "Export ended unexpectedly: %1"
msgstr "Export endet unerwartet: %1"
@@ -1861,10 +1877,6 @@ msgstr ""
"LTC-Kodierer: ungültige Framerate - das Kodieren von LTC wird für den "
"restlichen Teil dieses Projekts ausgesetzt."
-#: session_midi.cc:428
-msgid "Session: could not send full MIDI time code"
-msgstr "Session: konnte vollständigen MIDI-Timecode nicht senden"
-
#: session_midi.cc:520
msgid "Session: cannot send quarter-frame MTC message (%1)"
msgstr "Session: kann quarter-frame MTC-Nachricht nicht senden (%1)"
@@ -1873,97 +1885,101 @@ msgstr "Session: kann quarter-frame MTC-Nachricht nicht senden (%1)"
msgid "Session: cannot create Playlist from XML description."
msgstr "Session: kann Wiedergabeliste nicht aus der XML-Beschreibung erzeugen"
-#: session_process.cc:133
+#: session_process.cc:132
msgid "Session: error in no roll for %1"
msgstr "Session: Fehler in no_roll für %1"
-#: session_process.cc:1158
+#: session_process.cc:1157
msgid "Programming error: illegal event type in process_event (%1)"
msgstr "Programmierfehler: illegaler Ereignistyp in process_event (%1)"
-#: session_state.cc:139
+#: session_state.cc:140
msgid "Could not use path %1 (%2)"
msgstr "Konnte Pfad %1 nicht benutzen (%2)"
-#: session_state.cc:267
+#: session_state.cc:184
msgid "solo cut control (dB)"
msgstr "Solo Cut Einstellung (dB)"
-#: session_state.cc:360
+#: session_state.cc:208
+msgid "Set block size and sample rate"
+msgstr "Setze Blockgröße und Samplerate"
+
+#: session_state.cc:213
+msgid "Using configuration"
+msgstr "Benutze Konfiguration"
+
+#: session_state.cc:325
msgid "Reset Remote Controls"
msgstr "Fernbedienungen zurücksetzen"
-#: session_state.cc:385
-msgid "Session loading complete"
-msgstr "Laden des Projektes abgeschlossen"
-
-#: session_state.cc:452
+#: session_state.cc:417
msgid "Session: cannot create session peakfile folder \"%1\" (%2)"
msgstr "Session: kann den Peakfile Ordner \"%1\" nicht erzeugen (%2)"
-#: session_state.cc:459
+#: session_state.cc:424
msgid "Session: cannot create session sounds dir \"%1\" (%2)"
msgstr ""
"Session: kann das Projektverzeichnis für Sounddateien \"%1\" nicht erzeugen "
"(%2)"
-#: session_state.cc:466
+#: session_state.cc:431
msgid "Session: cannot create session midi dir \"%1\" (%2)"
msgstr ""
"Session: kann das Projektverzeichnis für MIDI \"%1\" nicht erzeugen (%2)"
-#: session_state.cc:473
+#: session_state.cc:438
msgid "Session: cannot create session dead sounds folder \"%1\" (%2)"
msgstr "Session: kann den Mülleimer des Projektes \"%1\" nicht erzeugen (%2)"
-#: session_state.cc:480
+#: session_state.cc:445
msgid "Session: cannot create session export folder \"%1\" (%2)"
msgstr ""
"Session: kann den Projektordner für Exportdateien \"%1\" nicht erzeugen (%2)"
-#: session_state.cc:487
+#: session_state.cc:452
msgid "Session: cannot create session analysis folder \"%1\" (%2)"
msgstr ""
"Session: kann den Projektordner für Analysedaten \"%1\" nicht erzeugen (%2)"
-#: session_state.cc:494
+#: session_state.cc:459
msgid "Session: cannot create session plugins folder \"%1\" (%2)"
msgstr "Session: kann den Projektordner für Plugins \"%1\" nicht erzeugen (%2)"
-#: session_state.cc:501
+#: session_state.cc:466
msgid "Session: cannot create session externals folder \"%1\" (%2)"
msgstr ""
"Session: kann den Projektordner für Externals \"%1\" nicht erzeugen (%2)"
-#: session_state.cc:515
+#: session_state.cc:480
msgid "Session: cannot create session folder \"%1\" (%2)"
msgstr "Session: kann den Projektordner \"%1\" nicht erzeugen (%2)"
-#: session_state.cc:548
+#: session_state.cc:514
msgid "Could not open %1 for writing session template"
msgstr "Konnte %1 nicht zum Schreiben der Projektvorlage öffnen"
-#: session_state.cc:554
+#: session_state.cc:520
msgid "Could not open session template %1 for reading"
msgstr "Konnte Projektvorlage %1 nicht zum Lesen öffnen"
-#: session_state.cc:573
+#: session_state.cc:539
msgid "master"
msgstr "Master"
-#: session_state.cc:636
+#: session_state.cc:600
msgid "Could not remove pending capture state at path \"%1\" (%2)"
msgstr "Konnte vorläufigen Aufnahmestatus im Pfad \"%1\" nicht entfernen (%2)"
-#: session_state.cc:660
+#: session_state.cc:624
msgid "could not rename snapshot %1 to %2 (%3)"
msgstr "Konnte Schnappschuss %1 nicht auf %2 umbenennen (%3)"
-#: session_state.cc:688
+#: session_state.cc:652
msgid "Could not remove session file at path \"%1\" (%2)"
msgstr "Konnte Projektdatei im Pfad \"%1\" nicht entfernen (%2)"
-#: session_state.cc:761
+#: session_state.cc:669
msgid ""
"the %1 audio engine is not connected and state saving would lose all I/O "
"connections. Session not saved"
@@ -1971,140 +1987,140 @@ msgstr ""
"die %1 Audio-Engine ist nicht verbunden, beim Sichern würden Sie daher alle "
"E/A-Verbindungen verlieren. Projekt nicht gesichert"
-#: session_state.cc:812
+#: session_state.cc:720
msgid "state could not be saved to %1"
msgstr "Status konnte nicht nach %1 gesichert werden"
-#: session_state.cc:814 session_state.cc:825
+#: session_state.cc:722 session_state.cc:733
msgid "Could not remove temporary session file at path \"%1\" (%2)"
msgstr "Konnte temporäre Projektdatei im Pfad \"%1\" nicht entfernen (%2)"
-#: session_state.cc:822
+#: session_state.cc:730
msgid "could not rename temporary session file %1 to %2"
msgstr "Konnte temporäre Projektdatei %1 nicht nach %2 umbenennen"
-#: session_state.cc:890
+#: session_state.cc:798
msgid "%1: session file \"%2\" doesn't exist!"
msgstr "%1: Projektdatei \"%2\" existiert nicht!"
-#: session_state.cc:902
+#: session_state.cc:810
msgid "Could not understand session file %1"
msgstr "Konnte Projektdatei \"%1\" nicht verstehen"
-#: session_state.cc:911
+#: session_state.cc:819
msgid "Session file %1 is not a session"
msgstr "Projektdatei %1 ist kein Projekt"
-#: session_state.cc:1208
+#: session_state.cc:1125
msgid "programming error: Session: incorrect XML node sent to set_state()"
msgstr ""
"Programmierfehler: Session: Inkorrekter XML-Knoten an send_state() gesendet"
-#: session_state.cc:1257
+#: session_state.cc:1179
msgid "Session: XML state has no options section"
msgstr "Session: XML hat keinen Abschnitt \"options\""
-#: session_state.cc:1262
+#: session_state.cc:1184
msgid "Session: XML state has no metadata section"
msgstr "Session: XML hat keinen Abschnitt \"metadata\""
-#: session_state.cc:1273
+#: session_state.cc:1195
msgid "Session: XML state has no sources section"
msgstr "Session: XML hat keinen Abschnitt \"sources\""
-#: session_state.cc:1280
+#: session_state.cc:1202
msgid "Session: XML state has no Tempo Map section"
msgstr "Session: XML hat keinen Abschnitt \"Tempo Map\""
-#: session_state.cc:1287
+#: session_state.cc:1209
msgid "Session: XML state has no locations section"
msgstr "Session: XML hat keinen Abschnitt \"locations\""
-#: session_state.cc:1313
+#: session_state.cc:1235
msgid "Session: XML state has no Regions section"
msgstr "Session: XML hat keinen Abschnitt \"Regions\""
-#: session_state.cc:1320
+#: session_state.cc:1242
msgid "Session: XML state has no playlists section"
msgstr "Session: XML hat keinen Abschnitt \"playlists\""
-#: session_state.cc:1340
+#: session_state.cc:1262
msgid "Session: XML state has no bundles section"
msgstr "Session: XML hat keinen Abschnitt \"bundles\""
-#: session_state.cc:1352
+#: session_state.cc:1274
msgid "Session: XML state has no diskstreams section"
msgstr "Session: XML hat keinen Abschnitt \"diskstreams\""
-#: session_state.cc:1360
+#: session_state.cc:1282
msgid "Session: XML state has no routes section"
msgstr "Session: XML hat keinen Abschnitt \"routes\""
-#: session_state.cc:1372
+#: session_state.cc:1294
msgid "Session: XML state has no route groups section"
msgstr "Session: XML hat keinen Abschnitt \"route groups\""
-#: session_state.cc:1381
+#: session_state.cc:1303
msgid "Session: XML state has no edit groups section"
msgstr "Session: XML hat keinen Abschnitt \"edit groups\""
-#: session_state.cc:1388
+#: session_state.cc:1310
msgid "Session: XML state has no mix groups section"
msgstr "Session: XML hat keinen Abschnitt \"mix groups\""
-#: session_state.cc:1396
+#: session_state.cc:1318
msgid "Session: XML state has no click section"
msgstr "Session: XML hat keinen Abschnitt \"click\""
-#: session_state.cc:1444
+#: session_state.cc:1366
msgid "Session: cannot create Route from XML description."
msgstr "Session: Kann die Route aus der XML-Beschreibung nicht erzeugen"
-#: session_state.cc:1448
+#: session_state.cc:1370
msgid "Loaded track/bus %1"
msgstr "Spur/Bus %1 wurde geladen"
-#: session_state.cc:1546
+#: session_state.cc:1468
msgid "Could not find diskstream for route"
msgstr "Konnte Diskstream für Route nicht finden"
-#: session_state.cc:1600
+#: session_state.cc:1522
msgid "Session: cannot create Region from XML description."
msgstr "Session: kann Region nicht aus XML-Beschreibung erzeugen"
-#: session_state.cc:1604
+#: session_state.cc:1526
msgid "Can not load state for region '%1'"
msgstr "Kann Status für Region '%1' nicht laden"
-#: session_state.cc:1640
+#: session_state.cc:1562
msgid "Regions in compound description not found (ID's %1 and %2): ignored"
msgstr ""
"Regionen der Verbindungsbeschreibung nicht gefunden (IDs %1 and %2): "
"ignoriert"
-#: session_state.cc:1668
+#: session_state.cc:1590
msgid "Nested source has no ID info in session file! (ignored)"
msgstr ""
"Verschachtelte Quelle hat keine ID-Information in Projektdatei! (ignoriert)"
-#: session_state.cc:1680
+#: session_state.cc:1602
msgid "Cannot reconstruct nested source for region %1"
msgstr "Kann verschachtelte Quelle für Region %1 nicht wiederherstellen"
-#: session_state.cc:1742
+#: session_state.cc:1664
msgid "Session: XMLNode describing a AudioRegion is incomplete (no source)"
msgstr ""
"Session: XML-Knoten zur Beschreibung einer Audioregion ist unvollständig "
"(Quelle fehlt)"
-#: session_state.cc:1750 session_state.cc:1771 session_state.cc:1791
+#: session_state.cc:1672 session_state.cc:1693 session_state.cc:1713
msgid ""
"Session: XMLNode describing a AudioRegion references an unknown source id =%1"
msgstr ""
"Session: XML-Knoten zur Beschreibung einer Audioregion referenziert eine "
"unbekannte Quell-ID =%1"
-#: session_state.cc:1756 session_state.cc:1777 session_state.cc:1797
+#: session_state.cc:1678 session_state.cc:1699 session_state.cc:1719
msgid ""
"Session: XMLNode describing a AudioRegion references a non-audio source id ="
"%1"
@@ -2112,7 +2128,7 @@ msgstr ""
"Session: XML-Knoten zur Beschreibung einer Audioregion referenziert eine "
"Nicht-Audio Quell-ID =%1"
-#: session_state.cc:1820
+#: session_state.cc:1742
msgid ""
"Session: XMLNode describing an AudioRegion is missing some master sources; "
"ignored"
@@ -2120,27 +2136,27 @@ msgstr ""
"Session: dem XML-Knoten zur Beschreibung einer Audioregion fehlen einige "
"Hauptquellen; ignoriert"
-#: session_state.cc:1854
+#: session_state.cc:1776
msgid "Session: XMLNode describing a MidiRegion is incomplete (no source)"
msgstr ""
"Session: XML-Knoten zur Beschreibung einer MIDI-Region ist unvollständig "
"(Quelle fehlt)"
-#: session_state.cc:1862
+#: session_state.cc:1784
msgid ""
"Session: XMLNode describing a MidiRegion references an unknown source id =%1"
msgstr ""
"Session: XML-Knoten zur Beschreibung einer MIDI-Region referenziert eine "
"unbekannte Quell-ID =%1"
-#: session_state.cc:1868
+#: session_state.cc:1790
msgid ""
"Session: XMLNode describing a MidiRegion references a non-midi source id =%1"
msgstr ""
"Session: XML-Knoten zur Beschreibung einer MIDI-Region referenziert eine "
"Nicht-MIDI Quell-ID =%1"
-#: session_state.cc:1936
+#: session_state.cc:1858
msgid ""
"cannot create new file from region name \"%1\" with ident = \"%2\": too many "
"existing files with similar names"
@@ -2148,121 +2164,121 @@ msgstr ""
"kann keine neue Datei aus dem Regionennamen \"%1\" mit ident = \"%2\" "
"erzeugen: zu viele Dateien mit ähnlichen Namen existieren"
-#: session_state.cc:1959
+#: session_state.cc:1881
msgid "Session: cannot create Source from XML description."
msgstr "Session: Kann Quelle aus der XML-Beschreibung nicht erzeugen"
-#: session_state.cc:1993
+#: session_state.cc:1915
msgid "A sound file is missing. It will be replaced by silence."
msgstr "Eine Audiodatei fehlt. Sie wird durch Stille ersetzt werden."
-#: session_state.cc:2016
+#: session_state.cc:1938
msgid "Found a sound file that cannot be used by %1. Talk to the progammers."
msgstr ""
"Eine nicht mit %1 benutzbare Audiodatei wurde gefunden. Sprechen Sie mit den "
"Programmierern."
-#: session_state.cc:2033
+#: session_state.cc:1955
msgid "Could not create templates directory \"%1\" (%2)"
msgstr "Konnte Vorlagenverzeichnis \"%1\" nicht erzeugen (%2)"
-#: session_state.cc:2046
+#: session_state.cc:1968
msgid "Template \"%1\" already exists - new version not created"
msgstr "Vorlage \"%1\" existiert bereits - neue Version wurde nicht erzeugt"
-#: session_state.cc:2052
+#: session_state.cc:1974
msgid "Could not create directory for Session template\"%1\" (%2)"
msgstr "Konnte kein Verzeichnis für Projektvorlage \"%1\" erzeugen (%2)"
-#: session_state.cc:2062
+#: session_state.cc:1984
msgid "template not saved"
msgstr "Vorlage nicht gesichert"
-#: session_state.cc:2072
+#: session_state.cc:1994
msgid "Could not create directory for Session template plugin state\"%1\" (%2)"
msgstr ""
"Konnte Verzeichnis für Projektvorlagen-Pluginstatus \"%1\" nicht erzeugen "
"(%2)"
-#: session_state.cc:2267
+#: session_state.cc:2189
msgid "Unknown node \"%1\" found in Bundles list from session file"
msgstr "Unbekannter Knoten \"%1\" in Bündelliste der Projektdatei gefunden"
-#: session_state.cc:2809 session_state.cc:2815
+#: session_state.cc:2731 session_state.cc:2737
msgid "Cannot expand path %1 (%2)"
msgstr "Kann Pfad %1 nicht expandieren (%2)"
-#: session_state.cc:2868
+#: session_state.cc:2790
msgid "Session: cannot create dead file folder \"%1\" (%2)"
msgstr "Session: kann den Mülleimer \"%1\" nicht erzeugen (%2)"
-#: session_state.cc:2907
+#: session_state.cc:2829
msgid "cannot rename unused file source from %1 to %2 (%3)"
msgstr "kann unbenutzte Dateiquelle nicht von %1 nach %2 umbenennen (%3)"
-#: session_state.cc:2925
+#: session_state.cc:2847
msgid "cannot remove peakfile %1 for %2 (%3)"
msgstr "kann Peakdatei %1 für %2 nicht entfernen (%3)"
-#: session_state.cc:3227
+#: session_state.cc:3149
msgid "could not backup old history file, current history not saved"
msgstr ""
"konnte kein Backup der alten Aktionsliste erstellen, momentane Aktionsliste "
"ungesichert"
-#: session_state.cc:3240
+#: session_state.cc:3162
msgid "history could not be saved to %1"
msgstr "Aktionsliste konnte nicht nach %1 gesichert werden"
-#: session_state.cc:3243
+#: session_state.cc:3165
msgid "Could not remove history file at path \"%1\" (%2)"
msgstr "Konnte Aktionslistendatei im Pfad \"%1\" nicht entfernen (%2)"
-#: session_state.cc:3247
+#: session_state.cc:3169
msgid "could not restore history file from backup %1 (%2)"
msgstr "konnte Aktionslistendatei nicht aus dem Backup %1 restaurieren (%2)"
-#: session_state.cc:3272
+#: session_state.cc:3194
msgid "%1: no history file \"%2\" for this session."
msgstr "%1: keine Aktionslistendatei \"%2\" für dieses Projekt."
-#: session_state.cc:3278
+#: session_state.cc:3200
msgid "Could not understand session history file \"%1\""
msgstr "Konnte Projekt-Aktionslistendatei \"%1\" nicht verstehen"
-#: session_state.cc:3320
+#: session_state.cc:3242
msgid "Failed to downcast MidiSource for NoteDiffCommand"
msgstr "MidiSource für NoteDiffCommand nicht auffindbar"
-#: session_state.cc:3331
+#: session_state.cc:3253
msgid "Failed to downcast MidiSource for SysExDiffCommand"
msgstr "MidiSource für SysExDiffCommand nicht auffindbar"
-#: session_state.cc:3342
+#: session_state.cc:3264
msgid "Failed to downcast MidiSource for PatchChangeDiffCommand"
msgstr "MidiSource für PatchChangeDiffCommand nicht auffindbar"
-#: session_state.cc:3350
+#: session_state.cc:3272
msgid "Couldn't figure out how to make a Command out of a %1 XMLNode."
msgstr "Konnte im XML-Knoten \"%1\" keinen Befehl erkennen."
-#: session_state.cc:3602
+#: session_state.cc:3524
msgid "Session: unknown diskstream type in XML"
msgstr "Session: Unbekannter Diskstream im XML"
-#: session_state.cc:3607
+#: session_state.cc:3529
msgid "Session: could not load diskstream via XML state"
msgstr "Session: konnte Diskstream nicht via XML-Status laden"
-#: session_time.cc:215
-msgid "Unknown JACK transport state %1 in sync callback"
-msgstr "Unbekannter JACK-Transportstatus im Sync-Callback"
+#: session_time.cc:214
+msgid "Unknown transport state %1 in sync callback"
+msgstr "Unbekannter Transportstatus %1 im Sync-Callback"
-#: session_transport.cc:168
+#: session_transport.cc:167
msgid "Cannot loop - no loop range defined"
msgstr "Kann nicht loopen - kein Schleifenbereich definieert"
-#: session_transport.cc:728
+#: session_transport.cc:739
msgid ""
"Seamless looping cannot be supported while %1 is using JACK transport.\n"
"Recommend changing the configured options"
@@ -2271,7 +2287,7 @@ msgstr ""
"benutzt.\n"
"Ändern Sie die Konfigurationsoption"
-#: session_transport.cc:1094
+#: session_transport.cc:1105
msgid ""
"Global varispeed cannot be supported while %1 is connected to JACK transport "
"control"
@@ -2421,7 +2437,7 @@ msgstr ""
msgid "attempt to write a non-writable audio file source (%1)"
msgstr "Versuch, in eine schreibgeschützte Audio-Dateiquelle zu schreiben (%1)"
-#: sndfilesource.cc:396 utils.cc:507 utils.cc:531 utils.cc:545 utils.cc:564
+#: sndfilesource.cc:396 utils.cc:510 utils.cc:534 utils.cc:548 utils.cc:567
msgid "programming error: %1 %2"
msgstr "Programmierfehler: %1 %2"
@@ -2659,19 +2675,19 @@ msgstr "Sperren"
msgid "programming error: unknown edit mode string \"%1\""
msgstr "Programmierfehler: unbekannte Zeichenkette für Editiermodus \"%1\""
-#: utils.cc:389 utils.cc:418
+#: utils.cc:389 utils.cc:421
msgid "MIDI Timecode"
msgstr "MIDI Timecode"
-#: utils.cc:389 utils.cc:416
+#: utils.cc:389 utils.cc:419
msgid "MTC"
msgstr "MTC"
-#: utils.cc:393 utils.cc:425
+#: utils.cc:393 utils.cc:428
msgid "MIDI Clock"
msgstr "MIDI Clock"
-#: utils.cc:397 utils.cc:412 utils.cc:432
+#: utils.cc:397 utils.cc:415 utils.cc:435
msgid "JACK"
msgstr "JACK"
@@ -2679,22 +2695,62 @@ msgstr "JACK"
msgid "programming error: unknown sync source string \"%1\""
msgstr "Programmierfehler: unbekannte Zeichenkette für Sync-Quelle \"%1\""
-#: utils.cc:423
+#: utils.cc:426
msgid "M-Clock"
msgstr "M-Clock"
-#: utils.cc:429
+#: utils.cc:432
msgid "LTC"
msgstr "LTC"
-#: utils.cc:599
+#: utils.cc:602
msgid "programming error: unknown native header format: %1"
msgstr "Programmierfehler: unbekanntes natives Dateikopfformat: %1"
-#: utils.cc:614
+#: utils.cc:617
msgid "cannot open directory %1 (%2)"
msgstr "kann Verzeichnis %1 nicht öffnen (%2)"
+#~ msgid "Setup signal flow and plugins"
+#~ msgstr "Richte Signalfluss and Plugins ein"
+
+#~ msgid "cannot setup Click I/O"
+#~ msgstr "kann Metronom-E/A nicht einrichten"
+
+#~ msgid "Compute I/O Latencies"
+#~ msgstr "Berechne E/A-Latenzen"
+
+#~ msgid ""
+#~ "This version of JACK is old - you should upgrade to a newer version that "
+#~ "supports jack_port_type_get_buffer_size()"
+#~ msgstr ""
+#~ "Diese JACK-Version ist alt - Sie sollten auf eine Version upgraden, die "
+#~ "jack_port_type_get_buffer_size() unterstützt"
+
+#~ msgid "Connect session to engine"
+#~ msgstr "Verbinde Projekt mit Engine"
+
+#~ msgid "connect called before engine was started"
+#~ msgstr "Aufruf von connect vor dem Start der Engine"
+
+#~ msgid "disconnect called before engine was started"
+#~ msgstr "Aufruf von disconnect vor dem Start der Engine"
+
+#~ msgid "get_port_by_name() called before engine was started"
+#~ msgstr "Aufruf von get_port_by_name() vor dem Start der Engine"
+
+#~ msgid "get_ports called before engine was started"
+#~ msgstr "Aufruf von get_ports vor dem Start der Engine"
+
+#~ msgid "failed to connect to JACK"
+#~ msgstr "Verbindung zu JACK fehlgeschlagen"
+
+#~ msgid "get_connected_latency_range() called while disconnected from JACK"
+#~ msgstr "Aufruf von get_connected_latency_range(), während von JACK getrennt"
+
+#~ msgid "Session: could not send full MIDI time code"
+#~ msgstr "Session: konnte vollständigen MIDI-Timecode nicht senden"
+
#~ msgid "Session"
#~ msgstr "Projekt"
diff --git a/libs/ardour/po/ru.po b/libs/ardour/po/ru.po
index 1dfd367b68..9d4f2d3bfa 100644
--- a/libs/ardour/po/ru.po
+++ b/libs/ardour/po/ru.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: libardour 3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-03 07:59-0400\n"
-"PO-Revision-Date: 2013-06-14 02:14+0300\n"
+"POT-Creation-Date: 2013-10-15 21:42+0400\n"
+"PO-Revision-Date: 2013-10-15 21:40+0300\n"
"Last-Translator: Александр Прокудин <alexandre.prokoudine@gmail.com>\n"
"Language-Team: русский <>\n"
"Language: \n"
@@ -124,7 +124,7 @@ msgstr ""
#: audio_playlist_source.cc:171 audiosource.cc:913 file_source.cc:529
#: midi_playlist_source.cc:144 midi_playlist_source.cc:152
#: midi_playlist_source.cc:159 midi_source.cc:371 plugin_insert.cc:643
-#: rb_effect.cc:332 session.cc:2465 session.cc:2498 session.cc:3643
+#: rb_effect.cc:332 session.cc:2613 session.cc:2646 session.cc:3791
#: session_handle.cc:87 sndfilesource.cc:121
msgid "programming error: %1"
msgstr "programming error: %1"
@@ -193,59 +193,21 @@ msgstr "Не удалось загрузить модуль VAMP под назв
msgid "VAMP Plugin \"%1\" could not be loaded"
msgstr "Не удалось загрузить модуль VAMP под названием \"%1\""
-#: audioengine.cc:186
-msgid ""
-"This version of JACK is old - you should upgrade to a newer version that "
-"supports jack_port_type_get_buffer_size()"
+#: audioengine.cc:488
+msgid "looking for backends in %1\n"
msgstr ""
-#: audioengine.cc:190
-msgid "Connect session to engine"
+#: audioengine.cc:511
+msgid "AudioEngine: cannot load module \"%1\" (%2)"
msgstr ""
-#: audioengine.cc:843
-msgid ""
-"a port with the name \"%1\" already exists: check for duplicated track/bus "
-"names"
+#: audioengine.cc:517
+msgid "AudioEngine: backend at \"%1\" has no descriptor function."
msgstr ""
-#: audioengine.cc:845 session.cc:1698
-msgid ""
-"No more JACK ports are available. You will need to stop %1 and restart JACK "
-"with more ports if you need this many tracks."
-msgstr ""
-
-#: audioengine.cc:848
-msgid "AudioEngine: cannot register port \"%1\": %2"
-msgstr "AudioEngine: cannot register port \"%1\": %2"
-
-#: audioengine.cc:878
-msgid "unable to create port: %1"
-msgstr ""
-
-#: audioengine.cc:932
-msgid "connect called before engine was started"
-msgstr ""
-
-#: audioengine.cc:958
-msgid "AudioEngine: cannot connect %1 (%2) to %3 (%4)"
-msgstr ""
-
-#: audioengine.cc:973 audioengine.cc:1004
-msgid "disconnect called before engine was started"
-msgstr ""
-
-#: audioengine.cc:1052
-msgid "get_port_by_name() called before engine was started"
-msgstr ""
-
-#: audioengine.cc:1104
-msgid "get_ports called before engine was started"
-msgstr ""
-
-#: audioengine.cc:1427
-msgid "failed to connect to JACK"
-msgstr ""
+#: audioengine.cc:589
+msgid "Could not create backend for %1: %2"
+msgstr "Не удалось создать движок для %1: %2"
#: audioregion.cc:1643
msgid ""
@@ -429,7 +391,7 @@ msgstr ""
msgid "audio"
msgstr ""
-#: data_type.cc:28 session.cc:1640 session.cc:1643
+#: data_type.cc:28 session.cc:1788 session.cc:1791
msgid "MIDI"
msgstr ""
@@ -541,7 +503,7 @@ msgstr "Треугольное"
msgid "Rectangular"
msgstr "Прямоугольное"
-#: export_formats.cc:52 session.cc:4861 session.cc:4877
+#: export_formats.cc:52 session.cc:5009 session.cc:5025
msgid "None"
msgstr "Нет"
@@ -651,7 +613,7 @@ msgid ""
"configuration"
msgstr ""
-#: file_source.cc:198 session_state.cc:2891
+#: file_source.cc:198 session_state.cc:2807
msgid ""
"there are already 1000 files with names like %1; versioning discontinued"
msgstr ""
@@ -746,23 +708,23 @@ msgstr ""
msgid "unknown file type for session %1"
msgstr ""
-#: globals.cc:205
+#: globals.cc:207
msgid "Could not set system open files limit to \"unlimited\""
msgstr ""
-#: globals.cc:207
+#: globals.cc:209
msgid "Could not set system open files limit to %1"
msgstr ""
-#: globals.cc:211
+#: globals.cc:213
msgid "Your system is configured to limit %1 to only %2 open files"
msgstr ""
-#: globals.cc:215
+#: globals.cc:217
msgid "Could not get system open files limit (%1)"
msgstr ""
-#: globals.cc:266
+#: globals.cc:268
msgid "Loading configuration"
msgstr ""
@@ -882,47 +844,47 @@ msgstr ""
msgid "IO: bad output string in XML node \"%1\""
msgstr ""
-#: io.cc:1410
+#: io.cc:1411
#, c-format
msgid "%s %u"
msgstr ""
-#: io.cc:1457
+#: io.cc:1458
#, c-format
msgid "%s in"
msgstr ""
-#: io.cc:1459
+#: io.cc:1460
#, c-format
msgid "%s out"
msgstr ""
-#: io.cc:1534 session.cc:494 session.cc:523
+#: io.cc:1535 session.cc:683 session.cc:712
msgid "mono"
msgstr ""
-#: io.cc:1536 session.cc:507 session.cc:537
+#: io.cc:1537 session.cc:696 session.cc:726
msgid "L"
msgstr ""
-#: io.cc:1536 session.cc:509 session.cc:539
+#: io.cc:1537 session.cc:698 session.cc:728
msgid "R"
msgstr ""
-#: io.cc:1538 io.cc:1544
+#: io.cc:1539 io.cc:1545
#, c-format
msgid "%d"
msgstr ""
-#: ladspa_plugin.cc:88
+#: ladspa_plugin.cc:86
msgid "LADSPA: module has no descriptor function."
msgstr ""
-#: ladspa_plugin.cc:93
+#: ladspa_plugin.cc:91
msgid "LADSPA: plugin has gone away since discovery!"
msgstr ""
-#: ladspa_plugin.cc:100
+#: ladspa_plugin.cc:98
msgid "LADSPA: \"%1\" cannot be used, since it cannot do inplace processing"
msgstr ""
@@ -1000,7 +962,7 @@ msgstr ""
msgid "incorrect XML mode passed to Locations::set_state"
msgstr ""
-#: location.cc:842 session.cc:4362 session_state.cc:1114
+#: location.cc:842 session.cc:4510 session_state.cc:1031
msgid "session"
msgstr ""
@@ -1132,6 +1094,38 @@ msgstr ""
msgid "MIDI stretch created non-MIDI source"
msgstr ""
+#: midiport_manager.cc:71
+msgid "MIDI control in"
+msgstr ""
+
+#: midiport_manager.cc:72
+msgid "MIDI control out"
+msgstr ""
+
+#: midiport_manager.cc:74
+msgid "MMC in"
+msgstr ""
+
+#: midiport_manager.cc:75
+msgid "MMC out"
+msgstr ""
+
+#: midiport_manager.cc:96
+msgid "MTC in"
+msgstr ""
+
+#: midiport_manager.cc:98
+msgid "MTC out"
+msgstr ""
+
+#: midiport_manager.cc:101
+msgid "MIDI Clock in"
+msgstr ""
+
+#: midiport_manager.cc:103
+msgid "MIDI Clock out"
+msgstr ""
+
#: monitor_processor.cc:53
msgid "monitor dim"
msgstr ""
@@ -1168,21 +1162,21 @@ msgstr ""
msgid "solo control"
msgstr ""
-#: mtc_slave.cc:235
+#: mtc_slave.cc:238
msgid "MTC Slave: atomic read of current time failed, sleeping!"
msgstr ""
-#: mtc_slave.cc:359
+#: mtc_slave.cc:361
msgid ""
"Unknown rate/drop value %1 in incoming MTC stream, session values used "
"instead"
msgstr ""
-#: mtc_slave.cc:379
+#: mtc_slave.cc:381
msgid "Session framerate adjusted from %1 TO: MTC's %2."
msgstr ""
-#: mtc_slave.cc:393
+#: mtc_slave.cc:395
msgid "Session and MTC framerate mismatch: MTC:%1 %2:%3."
msgstr ""
@@ -1246,19 +1240,19 @@ msgstr ""
msgid "looking for panners in %1"
msgstr ""
-#: panner_manager.cc:99
+#: panner_manager.cc:100
msgid "Panner discovered: \"%1\" in %2"
msgstr ""
-#: panner_manager.cc:116
+#: panner_manager.cc:117
msgid "PannerManager: cannot load module \"%1\" (%2)"
msgstr "PannerManager: cannot load module \"%1\" (%2)"
-#: panner_manager.cc:123
+#: panner_manager.cc:124
msgid "PannerManager: module \"%1\" has no descriptor function."
msgstr ""
-#: panner_manager.cc:186
+#: panner_manager.cc:187
msgid "no panner discovered for in/out = %1/%2"
msgstr ""
@@ -1368,11 +1362,7 @@ msgstr ""
msgid "unknown plugin type \"%1\" - ignored"
msgstr ""
-#: port.cc:367
-msgid "get_connected_latency_range() called while disconnected from JACK"
-msgstr ""
-
-#: port.cc:450
+#: port.cc:410
msgid "could not reregister %1"
msgstr ""
@@ -1388,6 +1378,34 @@ msgstr ""
msgid "non-port insert XML used for port plugin insert"
msgstr ""
+#: port_manager.cc:270
+msgid ""
+"a port with the name \"%1\" already exists: check for duplicated track/bus "
+"names"
+msgstr ""
+
+#: port_manager.cc:272
+msgid ""
+"No more ports are available. You will need to stop %1 and restart with more "
+"ports if you need this many tracks."
+msgstr ""
+
+#: port_manager.cc:275
+msgid "AudioEngine: cannot register port \"%1\": %2"
+msgstr "AudioEngine: cannot register port \"%1\": %2"
+
+#: port_manager.cc:314
+msgid "unable to create port: %1"
+msgstr ""
+
+#: port_manager.cc:401
+msgid "AudioEngine: cannot connect %1 (%2) to %3 (%4)"
+msgstr ""
+
+#: port_manager.cc:453 port_manager.cc:454
+msgid "Re-establising port %1 failed"
+msgstr ""
+
#: processor.cc:207
msgid "No %1 property flag in element %2"
msgstr ""
@@ -1396,44 +1414,41 @@ msgstr ""
msgid "No child node with active property"
msgstr ""
-#: rc_configuration.cc:93
+#: rc_configuration.cc:88
msgid "Loading system configuration file %1"
msgstr "Loading system configuration file %1"
-#: rc_configuration.cc:97
+#: rc_configuration.cc:92
msgid "%1: cannot read system configuration file \"%2\""
msgstr "%1: cannot read system configuration file \"%2\""
-#: rc_configuration.cc:102
+#: rc_configuration.cc:97
msgid "%1: system configuration file \"%2\" not loaded successfully."
msgstr "%1: system configuration file \"%2\" not loaded successfully."
-#: rc_configuration.cc:106
-#, fuzzy
+#: rc_configuration.cc:101
msgid ""
"Your system %1 configuration file is empty. This probably means that there "
"was an error installing %1"
msgstr ""
-"your system %1 configuration file is empty. This probably means that there "
-"as an error installing %1"
-#: rc_configuration.cc:121
+#: rc_configuration.cc:116
msgid "Loading user configuration file %1"
msgstr "Loading user configuration file %1"
-#: rc_configuration.cc:125
+#: rc_configuration.cc:120
msgid "%1: cannot read configuration file \"%2\""
msgstr "%1: cannot read configuration file \"%2\""
-#: rc_configuration.cc:130
+#: rc_configuration.cc:125
msgid "%1: user configuration file \"%2\" not loaded successfully."
msgstr "%1: user configuration file \"%2\" not loaded successfully."
-#: rc_configuration.cc:134
+#: rc_configuration.cc:129
msgid "your %1 configuration file is empty. This is not normal."
msgstr "your %1 configuration file is empty. This is not normal."
-#: rc_configuration.cc:151
+#: rc_configuration.cc:146
msgid "Config file %1 not saved"
msgstr "Config file %1 not saved"
@@ -1471,23 +1486,23 @@ msgstr ""
msgid "return %1"
msgstr ""
-#: route.cc:1105 route.cc:2581
+#: route.cc:1107 route.cc:2584
msgid "unknown Processor type \"%1\"; ignored"
msgstr ""
-#: route.cc:1117
+#: route.cc:1119
msgid "processor could not be created. Ignored."
msgstr ""
-#: route.cc:2007 route.cc:2234
+#: route.cc:2010 route.cc:2237
msgid "Bad node sent to Route::set_state() [%1]"
msgstr ""
-#: route.cc:2067
+#: route.cc:2070
msgid "Pannable state found for route (%1) without a panner!"
msgstr ""
-#: route.cc:2137 route.cc:2141 route.cc:2348 route.cc:2352
+#: route.cc:2140 route.cc:2144 route.cc:2351 route.cc:2355
msgid "badly formed order key string in state file! [%1] ... ignored."
msgstr ""
@@ -1515,185 +1530,183 @@ msgstr ""
msgid "programming error: send created using role %1"
msgstr "programming error: send created using role %1"
-#: session.cc:347
-msgid "Set block size and sample rate"
+#: session.cc:343
+msgid "Connect to engine"
+msgstr "Соединение со звуковым движком"
+
+#: session.cc:348
+msgid "Session loading complete"
+msgstr "Загрузка сеанса завершена"
+
+#: session.cc:420
+msgid "Set up LTC"
msgstr ""
-#: session.cc:352
-msgid "Using configuration"
+#: session.cc:422
+msgid "Set up Click"
msgstr ""
-#: session.cc:377
+#: session.cc:424
+msgid "Set up standard connections"
+msgstr "Настройка обычных соединений"
+
+#: session.cc:561
msgid "LTC In"
msgstr ""
-#: session.cc:378
+#: session.cc:562
msgid "LTC Out"
msgstr ""
-#: session.cc:404
+#: session.cc:588
msgid "LTC-in"
msgstr ""
-#: session.cc:405
+#: session.cc:589
msgid "LTC-out"
msgstr ""
-#: session.cc:434
+#: session.cc:632
msgid "could not setup Click I/O"
msgstr ""
-#: session.cc:461
-msgid "cannot setup Click I/O"
-msgstr ""
-
-#: session.cc:464
-msgid "Compute I/O Latencies"
-msgstr ""
-
-#: session.cc:470
-msgid "Set up standard connections"
-msgstr "Настройка обычных соединений"
-
-#: session.cc:491
+#: session.cc:680
#, c-format
msgid "out %<PRIu32>"
msgstr ""
-#: session.cc:505
+#: session.cc:694
#, c-format
msgid "out %<PRIu32>+%<PRIu32>"
msgstr ""
-#: session.cc:520
+#: session.cc:709
#, c-format
msgid "in %<PRIu32>"
msgstr ""
-#: session.cc:534
+#: session.cc:723
#, c-format
msgid "in %<PRIu32>+%<PRIu32>"
msgstr ""
-#: session.cc:570
-msgid "Setup signal flow and plugins"
-msgstr "Настройка модулей и звукового потока"
-
-#: session.cc:614
-msgid "Connect to engine"
-msgstr "Соединение со звуковым движком"
-
-#: session.cc:645
+#: session.cc:787
msgid "cannot connect master output %1 to %2"
msgstr ""
-#: session.cc:704
+#: session.cc:846
msgid "monitor"
msgstr ""
-#: session.cc:749
+#: session.cc:891
msgid "cannot connect control input %1 to %2"
msgstr ""
-#: session.cc:769
+#: session.cc:911
msgid "The preferred I/O for the monitor bus (%1) cannot be found"
msgstr ""
-#: session.cc:800
+#: session.cc:942
msgid "cannot connect control output %1 to %2"
msgstr ""
-#: session.cc:864
+#: session.cc:1006
msgid "cannot create Auditioner: no auditioning of regions possible"
msgstr ""
-#: session.cc:1043
+#: session.cc:1190
msgid "Session: you can't use that location for auto punch (start <= end)"
msgstr ""
-#: session.cc:1083
+#: session.cc:1230
msgid ""
"You cannot use this location for auto-loop because it has zero or negative "
"length"
msgstr ""
-#: session.cc:1396
+#: session.cc:1544
msgid "feedback loop setup between %1 and %2"
msgstr ""
-#: session.cc:1692
+#: session.cc:1840
msgid "Session: could not create new midi track."
msgstr ""
-#: session.cc:1875 session.cc:1878
+#: session.cc:1846
+msgid ""
+"No more JACK ports are available. You will need to stop %1 and restart JACK "
+"with more ports if you need this many tracks."
+msgstr ""
+
+#: session.cc:2023 session.cc:2026
msgid "Audio"
msgstr ""
-#: session.cc:1902 session.cc:1910 session.cc:1987 session.cc:1995
+#: session.cc:2050 session.cc:2058 session.cc:2135 session.cc:2143
msgid "cannot configure %1 in/%2 out configuration for new audio track"
msgstr ""
-#: session.cc:1933
+#: session.cc:2081
msgid "Session: could not create new audio track."
msgstr ""
-#: session.cc:1965 session.cc:1968
+#: session.cc:2113 session.cc:2116
msgid "Bus"
msgstr ""
-#: session.cc:2018
+#: session.cc:2166
msgid "Session: could not create new audio route."
msgstr ""
-#: session.cc:2077 session.cc:2087
+#: session.cc:2225 session.cc:2235
msgid "Session: UINT_MAX routes? impossible!"
msgstr ""
-#: session.cc:2109
+#: session.cc:2257
msgid "Session: cannot create track/bus from template description"
msgstr ""
-#: session.cc:2135
+#: session.cc:2283
msgid "Session: could not create new route from template"
msgstr ""
-#: session.cc:2164
+#: session.cc:2312
msgid "Adding new tracks/busses failed"
msgstr "Не удалось добавить новые дорожки/шины"
-#: session.cc:3265
+#: session.cc:3413
msgid "FATAL ERROR! Could not find a suitable version of %1 for a rename"
msgstr ""
-#: session.cc:3385 session.cc:3443
+#: session.cc:3533 session.cc:3591
msgid "There are already %1 recordings for %2, which I consider too many."
msgstr ""
-#: session.cc:3833
+#: session.cc:3981
msgid "send ID %1 appears to be in use already"
msgstr ""
-#: session.cc:3845
+#: session.cc:3993
msgid "aux send ID %1 appears to be in use already"
msgstr ""
-#: session.cc:3857
+#: session.cc:4005
msgid "return ID %1 appears to be in use already"
msgstr ""
-#: session.cc:3869
+#: session.cc:4017
msgid "insert ID %1 appears to be in use already"
msgstr ""
-#: session.cc:3996
+#: session.cc:4144
msgid "Cannot write a range where end <= start (e.g. %1 <= %2)"
msgstr ""
-#: session.cc:4025
+#: session.cc:4173
msgid "too many bounced versions of playlist \"%1\""
msgstr ""
-#: session.cc:4035
+#: session.cc:4183
msgid "cannot create new audio file \"%1\" for %2"
msgstr ""
@@ -1732,11 +1745,11 @@ msgstr ""
msgid "Session: cannot have two events of type %1 at the same frame (%2)."
msgstr ""
-#: session_export.cc:126
+#: session_export.cc:125
msgid "%1: cannot seek to %2 for export"
msgstr ""
-#: session_export.cc:183
+#: session_export.cc:182
msgid "Export ended unexpectedly: %1"
msgstr ""
@@ -1746,10 +1759,6 @@ msgid ""
"of this session."
msgstr ""
-#: session_midi.cc:428
-msgid "Session: could not send full MIDI time code"
-msgstr ""
-
#: session_midi.cc:520
msgid "Session: cannot send quarter-frame MTC message (%1)"
msgstr ""
@@ -1758,370 +1767,372 @@ msgstr ""
msgid "Session: cannot create Playlist from XML description."
msgstr ""
-#: session_process.cc:133
+#: session_process.cc:132
msgid "Session: error in no roll for %1"
msgstr ""
-#: session_process.cc:1158
+#: session_process.cc:1157
msgid "Programming error: illegal event type in process_event (%1)"
msgstr ""
-#: session_state.cc:139
+#: session_state.cc:140
msgid "Could not use path %1 (%2)"
msgstr "Не удалось использовать расположение %1 (%2)"
-#: session_state.cc:267
+#: session_state.cc:184
msgid "solo cut control (dB)"
msgstr ""
-#: session_state.cc:360
+#: session_state.cc:208
+msgid "Set block size and sample rate"
+msgstr "Установка размера блока и частоты сэмплирования"
+
+#: session_state.cc:213
+msgid "Using configuration"
+msgstr "Применяется конфигурация"
+
+#: session_state.cc:325
msgid "Reset Remote Controls"
msgstr "Сброс удалённого управления"
-#: session_state.cc:385
-msgid "Session loading complete"
-msgstr "Загрузка сеанса завершена"
-
-#: session_state.cc:452
+#: session_state.cc:417
msgid "Session: cannot create session peakfile folder \"%1\" (%2)"
msgstr ""
-#: session_state.cc:459
+#: session_state.cc:424
msgid "Session: cannot create session sounds dir \"%1\" (%2)"
msgstr ""
-#: session_state.cc:466
+#: session_state.cc:431
msgid "Session: cannot create session midi dir \"%1\" (%2)"
msgstr ""
-#: session_state.cc:473
+#: session_state.cc:438
msgid "Session: cannot create session dead sounds folder \"%1\" (%2)"
msgstr ""
-#: session_state.cc:480
+#: session_state.cc:445
msgid "Session: cannot create session export folder \"%1\" (%2)"
msgstr ""
-#: session_state.cc:487
+#: session_state.cc:452
msgid "Session: cannot create session analysis folder \"%1\" (%2)"
msgstr ""
-#: session_state.cc:494
+#: session_state.cc:459
msgid "Session: cannot create session plugins folder \"%1\" (%2)"
msgstr "Session: cannot create session plugins folder \"%1\" (%2)"
-#: session_state.cc:501
+#: session_state.cc:466
msgid "Session: cannot create session externals folder \"%1\" (%2)"
msgstr "Session: cannot create session externals folder \"%1\" (%2)"
-#: session_state.cc:515
+#: session_state.cc:480
msgid "Session: cannot create session folder \"%1\" (%2)"
msgstr "Session: cannot create session folder \"%1\" (%2)"
-#: session_state.cc:548
+#: session_state.cc:514
msgid "Could not open %1 for writing session template"
msgstr "Не удалось открыть %1 для записи шаблона сеанса"
-#: session_state.cc:554
+#: session_state.cc:520
msgid "Could not open session template %1 for reading"
msgstr ""
-#: session_state.cc:573
+#: session_state.cc:539
msgid "master"
msgstr "master"
-#: session_state.cc:636
+#: session_state.cc:600
msgid "Could not remove pending capture state at path \"%1\" (%2)"
msgstr ""
-#: session_state.cc:660
+#: session_state.cc:624
msgid "could not rename snapshot %1 to %2 (%3)"
msgstr ""
-#: session_state.cc:688
-#, fuzzy
+#: session_state.cc:652
msgid "Could not remove session file at path \"%1\" (%2)"
-msgstr "Could not create directory for Session template\"%1\" (%2)"
+msgstr ""
-#: session_state.cc:761
+#: session_state.cc:669
msgid ""
"the %1 audio engine is not connected and state saving would lose all I/O "
"connections. Session not saved"
msgstr ""
-#: session_state.cc:812
+#: session_state.cc:720
msgid "state could not be saved to %1"
msgstr ""
-#: session_state.cc:814 session_state.cc:825
-#, fuzzy
+#: session_state.cc:722 session_state.cc:733
msgid "Could not remove temporary session file at path \"%1\" (%2)"
-msgstr "Could not create directory for Session template\"%1\" (%2)"
+msgstr ""
-#: session_state.cc:822
+#: session_state.cc:730
msgid "could not rename temporary session file %1 to %2"
msgstr ""
-#: session_state.cc:890
+#: session_state.cc:798
msgid "%1: session file \"%2\" doesn't exist!"
msgstr "%1: файл сеанса «%2» не существует!"
-#: session_state.cc:902
+#: session_state.cc:810
msgid "Could not understand session file %1"
msgstr ""
-#: session_state.cc:911
+#: session_state.cc:819
msgid "Session file %1 is not a session"
msgstr "Файл сеанса %1 не является сеансом"
-#: session_state.cc:1208
+#: session_state.cc:1125
msgid "programming error: Session: incorrect XML node sent to set_state()"
msgstr ""
-#: session_state.cc:1257
+#: session_state.cc:1179
msgid "Session: XML state has no options section"
msgstr ""
-#: session_state.cc:1262
+#: session_state.cc:1184
msgid "Session: XML state has no metadata section"
msgstr ""
-#: session_state.cc:1273
+#: session_state.cc:1195
msgid "Session: XML state has no sources section"
msgstr ""
-#: session_state.cc:1280
+#: session_state.cc:1202
msgid "Session: XML state has no Tempo Map section"
msgstr ""
-#: session_state.cc:1287
+#: session_state.cc:1209
msgid "Session: XML state has no locations section"
msgstr ""
-#: session_state.cc:1313
+#: session_state.cc:1235
msgid "Session: XML state has no Regions section"
msgstr ""
-#: session_state.cc:1320
+#: session_state.cc:1242
msgid "Session: XML state has no playlists section"
msgstr ""
-#: session_state.cc:1340
+#: session_state.cc:1262
msgid "Session: XML state has no bundles section"
msgstr ""
-#: session_state.cc:1352
+#: session_state.cc:1274
msgid "Session: XML state has no diskstreams section"
msgstr ""
-#: session_state.cc:1360
+#: session_state.cc:1282
msgid "Session: XML state has no routes section"
msgstr ""
-#: session_state.cc:1372
+#: session_state.cc:1294
msgid "Session: XML state has no route groups section"
msgstr ""
-#: session_state.cc:1381
+#: session_state.cc:1303
msgid "Session: XML state has no edit groups section"
msgstr ""
-#: session_state.cc:1388
+#: session_state.cc:1310
msgid "Session: XML state has no mix groups section"
msgstr ""
-#: session_state.cc:1396
+#: session_state.cc:1318
msgid "Session: XML state has no click section"
msgstr ""
-#: session_state.cc:1444
+#: session_state.cc:1360
msgid "Session: cannot create Route from XML description."
msgstr ""
-#: session_state.cc:1448
+#: session_state.cc:1364
msgid "Loaded track/bus %1"
msgstr "Загружена дорожка/шина %1"
-#: session_state.cc:1546
+#: session_state.cc:1462
msgid "Could not find diskstream for route"
msgstr ""
-#: session_state.cc:1600
+#: session_state.cc:1516
msgid "Session: cannot create Region from XML description."
msgstr ""
-#: session_state.cc:1604
+#: session_state.cc:1520
msgid "Can not load state for region '%1'"
msgstr ""
-#: session_state.cc:1640
+#: session_state.cc:1556
msgid "Regions in compound description not found (ID's %1 and %2): ignored"
msgstr ""
-#: session_state.cc:1668
+#: session_state.cc:1584
msgid "Nested source has no ID info in session file! (ignored)"
msgstr ""
-#: session_state.cc:1680
+#: session_state.cc:1596
msgid "Cannot reconstruct nested source for region %1"
msgstr ""
-#: session_state.cc:1742
+#: session_state.cc:1658
msgid "Session: XMLNode describing a AudioRegion is incomplete (no source)"
msgstr ""
-#: session_state.cc:1750 session_state.cc:1771 session_state.cc:1791
+#: session_state.cc:1666 session_state.cc:1687 session_state.cc:1707
msgid ""
"Session: XMLNode describing a AudioRegion references an unknown source id =%1"
msgstr ""
-#: session_state.cc:1756 session_state.cc:1777 session_state.cc:1797
+#: session_state.cc:1672 session_state.cc:1693 session_state.cc:1713
msgid ""
"Session: XMLNode describing a AudioRegion references a non-audio source id ="
"%1"
msgstr ""
-#: session_state.cc:1820
+#: session_state.cc:1736
msgid ""
"Session: XMLNode describing an AudioRegion is missing some master sources; "
"ignored"
msgstr ""
-#: session_state.cc:1854
+#: session_state.cc:1770
msgid "Session: XMLNode describing a MidiRegion is incomplete (no source)"
msgstr ""
-#: session_state.cc:1862
+#: session_state.cc:1778
msgid ""
"Session: XMLNode describing a MidiRegion references an unknown source id =%1"
msgstr ""
-#: session_state.cc:1868
+#: session_state.cc:1784
msgid ""
"Session: XMLNode describing a MidiRegion references a non-midi source id =%1"
msgstr ""
-#: session_state.cc:1936
+#: session_state.cc:1852
msgid ""
"cannot create new file from region name \"%1\" with ident = \"%2\": too many "
"existing files with similar names"
msgstr ""
-#: session_state.cc:1959
+#: session_state.cc:1875
msgid "Session: cannot create Source from XML description."
msgstr ""
-#: session_state.cc:1993
+#: session_state.cc:1909
msgid "A sound file is missing. It will be replaced by silence."
msgstr ""
-#: session_state.cc:2016
+#: session_state.cc:1932
msgid "Found a sound file that cannot be used by %1. Talk to the progammers."
msgstr ""
-#: session_state.cc:2033
+#: session_state.cc:1949
msgid "Could not create templates directory \"%1\" (%2)"
msgstr "Could not create templates directory \"%1\" (%2)"
-#: session_state.cc:2046
+#: session_state.cc:1962
msgid "Template \"%1\" already exists - new version not created"
msgstr ""
-#: session_state.cc:2052
+#: session_state.cc:1968
msgid "Could not create directory for Session template\"%1\" (%2)"
msgstr "Could not create directory for Session template\"%1\" (%2)"
-#: session_state.cc:2062
+#: session_state.cc:1978
msgid "template not saved"
msgstr ""
-#: session_state.cc:2072
+#: session_state.cc:1988
msgid "Could not create directory for Session template plugin state\"%1\" (%2)"
msgstr ""
-#: session_state.cc:2267
+#: session_state.cc:2183
msgid "Unknown node \"%1\" found in Bundles list from session file"
msgstr ""
-#: session_state.cc:2809 session_state.cc:2815
+#: session_state.cc:2725 session_state.cc:2731
msgid "Cannot expand path %1 (%2)"
msgstr "Cannot expand path %1 (%2)"
-#: session_state.cc:2868
+#: session_state.cc:2784
msgid "Session: cannot create dead file folder \"%1\" (%2)"
msgstr "Session: cannot create dead file folder \"%1\" (%2)"
-#: session_state.cc:2907
+#: session_state.cc:2823
msgid "cannot rename unused file source from %1 to %2 (%3)"
msgstr ""
-#: session_state.cc:2925
+#: session_state.cc:2841
msgid "cannot remove peakfile %1 for %2 (%3)"
msgstr ""
-#: session_state.cc:3227
+#: session_state.cc:3143
msgid "could not backup old history file, current history not saved"
msgstr ""
-#: session_state.cc:3240
+#: session_state.cc:3156
msgid "history could not be saved to %1"
msgstr ""
-#: session_state.cc:3243
+#: session_state.cc:3159
msgid "Could not remove history file at path \"%1\" (%2)"
msgstr ""
-#: session_state.cc:3247
+#: session_state.cc:3163
msgid "could not restore history file from backup %1 (%2)"
msgstr ""
-#: session_state.cc:3272
+#: session_state.cc:3188
msgid "%1: no history file \"%2\" for this session."
msgstr ""
-#: session_state.cc:3278
+#: session_state.cc:3194
msgid "Could not understand session history file \"%1\""
msgstr ""
-#: session_state.cc:3320
+#: session_state.cc:3236
msgid "Failed to downcast MidiSource for NoteDiffCommand"
msgstr ""
-#: session_state.cc:3331
+#: session_state.cc:3247
msgid "Failed to downcast MidiSource for SysExDiffCommand"
msgstr ""
-#: session_state.cc:3342
+#: session_state.cc:3258
msgid "Failed to downcast MidiSource for PatchChangeDiffCommand"
msgstr ""
-#: session_state.cc:3350
+#: session_state.cc:3266
msgid "Couldn't figure out how to make a Command out of a %1 XMLNode."
msgstr ""
-#: session_state.cc:3602
+#: session_state.cc:3518
msgid "Session: unknown diskstream type in XML"
msgstr ""
-#: session_state.cc:3607
+#: session_state.cc:3523
msgid "Session: could not load diskstream via XML state"
msgstr ""
-#: session_time.cc:215
-msgid "Unknown JACK transport state %1 in sync callback"
+#: session_time.cc:214
+msgid "Unknown transport state %1 in sync callback"
msgstr ""
-#: session_transport.cc:168
+#: session_transport.cc:167
msgid "Cannot loop - no loop range defined"
msgstr ""
-#: session_transport.cc:728
+#: session_transport.cc:739
msgid ""
"Seamless looping cannot be supported while %1 is using JACK transport.\n"
"Recommend changing the configured options"
msgstr ""
-#: session_transport.cc:1094
+#: session_transport.cc:1105
msgid ""
"Global varispeed cannot be supported while %1 is connected to JACK transport "
"control"
@@ -2132,9 +2143,8 @@ msgid "Unable to read event prefix, corrupt MIDI ring"
msgstr ""
#: smf_source.cc:265
-#, fuzzy
msgid "Event has time and size but no body, corrupt MIDI ring"
-msgstr "Прямоугольное"
+msgstr ""
#: smf_source.cc:271
msgid "Event time is before MIDI source position"
@@ -2265,7 +2275,7 @@ msgstr ""
msgid "attempt to write a non-writable audio file source (%1)"
msgstr ""
-#: sndfilesource.cc:396 utils.cc:507 utils.cc:531 utils.cc:545 utils.cc:564
+#: sndfilesource.cc:396 utils.cc:510 utils.cc:534 utils.cc:548 utils.cc:567
msgid "programming error: %1 %2"
msgstr "programming error: %1 %2"
@@ -2483,19 +2493,19 @@ msgstr ""
msgid "programming error: unknown edit mode string \"%1\""
msgstr "programming error: unknown edit mode string \"%1\""
-#: utils.cc:389 utils.cc:418
+#: utils.cc:389 utils.cc:421
msgid "MIDI Timecode"
msgstr ""
-#: utils.cc:389 utils.cc:416
+#: utils.cc:389 utils.cc:419
msgid "MTC"
msgstr "MTC"
-#: utils.cc:393 utils.cc:425
+#: utils.cc:393 utils.cc:428
msgid "MIDI Clock"
msgstr ""
-#: utils.cc:397 utils.cc:412 utils.cc:432
+#: utils.cc:397 utils.cc:415 utils.cc:435
msgid "JACK"
msgstr "JACK"
@@ -2503,22 +2513,25 @@ msgstr "JACK"
msgid "programming error: unknown sync source string \"%1\""
msgstr "programming error: unknown sync source string \"%1\""
-#: utils.cc:423
+#: utils.cc:426
msgid "M-Clock"
msgstr ""
-#: utils.cc:429
+#: utils.cc:432
msgid "LTC"
msgstr "LTC"
-#: utils.cc:599
+#: utils.cc:602
msgid "programming error: unknown native header format: %1"
msgstr "programming error: unknown native header format: %1"
-#: utils.cc:614
+#: utils.cc:617
msgid "cannot open directory %1 (%2)"
msgstr "cannot open directory %1 (%2)"
+#~ msgid "Setup signal flow and plugins"
+#~ msgstr "Настройка модулей и звукового потока"
+
#~ msgid "Session"
#~ msgstr "Сеанс"
diff --git a/libs/ardour/processor.cc b/libs/ardour/processor.cc
index 3f8fdf509d..f9590bee11 100644
--- a/libs/ardour/processor.cc
+++ b/libs/ardour/processor.cc
@@ -269,3 +269,15 @@ Processor::set_ui (void* p)
{
_ui_pointer = p;
}
+
+void
+Processor::set_owner (SessionObject* o)
+{
+ _owner = o;
+}
+
+SessionObject*
+Processor::owner() const
+{
+ return _owner;
+}
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index d0b2260c3d..f6af17b1b8 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -149,6 +149,7 @@ Route::init ()
*/
_meter.reset (new PeakMeter (_session, _name));
+ _meter->set_owner (this);
_meter->set_display_to_user (false);
_meter->activate ();
@@ -1011,6 +1012,7 @@ Route::add_processor (boost::shared_ptr<Processor> processor, boost::shared_ptr<
}
_processors.insert (loc, processor);
+ processor->set_owner (this);
// Set up processor list channels. This will set processor->[input|output]_streams(),
// configure redirect ports properly, etc.
@@ -1161,6 +1163,7 @@ Route::add_processors (const ProcessorList& others, boost::shared_ptr<Processor>
}
_processors.insert (loc, *i);
+ (*i)->set_owner (this);
if ((*i)->active()) {
(*i)->activate ();
@@ -2616,6 +2619,7 @@ Route::set_processor_state (const XMLNode& node)
for (ProcessorList::const_iterator i = _processors.begin(); i != _processors.end(); ++i) {
+ (*i)->set_owner (this);
(*i)->ActiveChanged.connect_same_thread (*this, boost::bind (&Session::update_latency_compensation, &_session, false));
boost::shared_ptr<PluginInsert> pi;
diff --git a/libs/ardour/run-session-tests.sh b/libs/ardour/run-session-tests.sh
index 63218d8887..034f8b5a7f 100644..100755
--- a/libs/ardour/run-session-tests.sh
+++ b/libs/ardour/run-session-tests.sh
@@ -8,20 +8,7 @@ if [ ! -f './tempo.cc' ]; then
exit 1;
fi
-cd ../..
-top=`pwd`
-cd build
-
-libs='libs'
-
-export LD_LIBRARY_PATH=$libs/audiographer:$libs/vamp-sdk:$libs/surfaces:$libs/surfaces/control_protocol:$libs/ardour:$libs/midi++2:$libs/pbd:$libs/rubberband:$libs/soundtouch:$libs/gtkmm2ext:$libs/appleutility:$libs/taglib:$libs/evoral:$libs/evoral/src/libsmf:$libs/timecode:/usr/local/lib:/usr/local/lib64:$LD_LIBRARY_PATH
-
-export ARDOUR_CONFIG_PATH=$top:$top/gtk2_ardour:$libs/..:$libs/../gtk2_ardour
-export ARDOUR_PANNER_PATH=$libs/panners/2in2out:$libs/panners/1in2out:$libs/panners/vbap
-export ARDOUR_SURFACES_PATH=$libs/surfaces/osc:$libs/surfaces/generic_midi:$libs/surfaces/tranzport:$libs/surfaces/powermate:$libs/surfaces/mackie
-export ARDOUR_MCP_PATH="../mcp"
-export ARDOUR_DLL_PATH=$libs
-export ARDOUR_DATA_PATH=$top/gtk2_ardour:$top/build/gtk2_ardour:.
+. test-env.sh
f=""
if [ "$1" == "--debug" -o "$1" == "--valgrind" ]; then
diff --git a/libs/ardour/run-tests.sh b/libs/ardour/run-tests.sh
index fc7d68a8a5..e894fecb63 100755
--- a/libs/ardour/run-tests.sh
+++ b/libs/ardour/run-tests.sh
@@ -2,6 +2,7 @@
#
# Run libardour test suite.
#
+. test-env.sh
if [ "$1" == "--single" ] || [ "$2" == "--single" ]; then
if [ "$1" == "--single" ]; then
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 746732f76e..28849e2930 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -276,6 +276,21 @@ Session::Session (AudioEngine &eng,
throw failed_constructor ();
}
+ /* if a mix template was provided, then ::create() will
+ * have copied it into the session and we need to load it
+ * so that we have the state ready for ::set_state()
+ * after the engine is started.
+ *
+ * Note that we do NOT try to get the sample rate from
+ * the template at this time, though doing so would
+ * be easy if we decided this was an appropriate part
+ * of a template.
+ */
+
+ if (!mix_template.empty() && load_state (_current_snapshot_name)) {
+ throw failed_constructor ();
+ }
+
} else {
if (load_state (_current_snapshot_name)) {
@@ -393,7 +408,7 @@ Session::immediately_post_engine ()
_engine.Running.connect_same_thread (*this, boost::bind (&Session::initialize_latencies, this));
- if (synced_to_jack()) {
+ if (synced_to_engine()) {
_engine.transport_stop ();
}
@@ -577,14 +592,21 @@ Session::setup_ltc ()
void
Session::setup_click ()
{
- XMLNode* child = 0;
-
_clicking = false;
_click_io.reset (new ClickIO (*this, "click"));
_click_gain.reset (new Amp (*this));
_click_gain->activate ();
-
- if (state_tree && (child = find_named_node (*state_tree->root(), "Click")) != 0) {
+ if (state_tree) {
+ setup_click_state (*state_tree->root());
+ }
+}
+
+void
+Session::setup_click_state (const XMLNode& node)
+{
+ const XMLNode* child = 0;
+
+ if ((child = find_named_node (node, "Click")) != 0) {
/* existing state for Click */
int c = 0;
@@ -1406,7 +1428,7 @@ Session::audible_frame () const
offset = current_block_size;
}
- if (synced_to_jack()) {
+ if (synced_to_engine()) {
tf = _engine.transport_frame();
} else {
tf = _transport_frame;
diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc
index c33fd91b5d..94e9f00564 100644
--- a/libs/ardour/session_state.cc
+++ b/libs/ardour/session_state.cc
@@ -493,9 +493,10 @@ Session::create (const string& session_template, BusProfile* bus_profile)
ifstream in(in_path.c_str());
if (in) {
- string out_path = _path;
- out_path += _name;
- out_path += statefile_suffix;
+ /* no need to call legalize_for_path() since the string
+ * in session_template is already a legal path name
+ */
+ string out_path = Glib::build_filename (_session_dir->root_path(), _name + statefile_suffix);
ofstream out(out_path.c_str());
@@ -1316,13 +1317,7 @@ Session::set_state (const XMLNode& node, int version)
if ((child = find_named_node (node, "Click")) == 0) {
warning << _("Session: XML state has no click section") << endmsg;
} else if (_click_io) {
- const XMLNodeList& children (child->children());
- XMLNodeList::const_iterator i = children.begin();
- _click_io->set_state (**i, version);
- ++i;
- if (i != children.end()) {
- _click_gain->set_state (**i, version);
- }
+ setup_click_state (node);
}
if ((child = find_named_node (node, ControlProtocolManager::state_node_name)) != 0) {
@@ -3742,3 +3737,68 @@ Session::rename (const std::string& new_name)
#undef RENAME
}
+
+int
+Session::get_session_info_from_path (XMLTree& tree, const string& xmlpath)
+{
+ if (!Glib::file_test (xmlpath, Glib::FILE_TEST_EXISTS)) {
+ return -1;
+ }
+
+ if (!tree.read (xmlpath)) {
+ return -1;
+ }
+
+ return 0;
+}
+
+int
+Session::get_info_from_path (const string& xmlpath, float& sample_rate, SampleFormat& data_format)
+{
+ XMLTree tree;
+ bool found_sr = false;
+ bool found_data_format = false;
+
+ if (get_session_info_from_path (tree, xmlpath)) {
+ return -1;
+ }
+
+ /* sample rate */
+
+ const XMLProperty* prop;
+ if ((prop = tree.root()->property (X_("sample-rate"))) != 0) {
+ sample_rate = atoi (prop->value());
+ found_sr = true;
+ }
+
+ const XMLNodeList& children (tree.root()->children());
+ for (XMLNodeList::const_iterator c = children.begin(); c != children.end(); ++c) {
+ const XMLNode* child = *c;
+ if (child->name() == "Config") {
+ const XMLNodeList& options (child->children());
+ for (XMLNodeList::const_iterator oc = options.begin(); oc != options.end(); ++oc) {
+ const XMLNode* option = *oc;
+ const XMLProperty* name = option->property("name");
+
+ if (!name) {
+ continue;
+ }
+
+ if (name->value() == "native-file-data-format") {
+ const XMLProperty* value = option->property ("value");
+ if (value) {
+ SampleFormat fmt = (SampleFormat) string_2_enum (option->property ("value")->value(), fmt);
+ data_format = fmt;
+ found_data_format = true;
+ break;
+ }
+ }
+ }
+ }
+ if (found_data_format) {
+ break;
+ }
+ }
+
+ return !(found_sr && found_data_format); // zero if they are both found
+}
diff --git a/libs/ardour/session_time.cc b/libs/ardour/session_time.cc
index 0f2186c09b..e35910f2df 100644
--- a/libs/ardour/session_time.cc
+++ b/libs/ardour/session_time.cc
@@ -182,7 +182,7 @@ Session::timecode_time (Timecode::Time &t)
int
Session::backend_sync_callback (TransportState state, framepos_t pos)
{
- bool slave = synced_to_jack();
+ bool slave = synced_to_engine();
switch (state) {
case TransportStopped:
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index ab6d68fd67..38ad521235 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -86,7 +86,7 @@ Session::request_sync_source (Slave* new_slave)
seamless = Config->get_seamless_loop ();
- if (dynamic_cast<JACK_Slave*>(new_slave)) {
+ if (dynamic_cast<Engine_Slave*>(new_slave)) {
/* JACK cannot support seamless looping at present */
Config->set_seamless_loop (false);
} else {
@@ -514,13 +514,13 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished)
if (auto_return_enabled ||
(ptw & PostTransportLocate) ||
(_requested_return_frame >= 0) ||
- synced_to_jack()) {
+ synced_to_engine()) {
if (pending_locate_flush) {
flush_all_inserts ();
}
- if ((auto_return_enabled || synced_to_jack() || _requested_return_frame >= 0) &&
+ if ((auto_return_enabled || synced_to_engine() || _requested_return_frame >= 0) &&
!(ptw & PostTransportLocate)) {
/* no explicit locate queued */
@@ -543,7 +543,7 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished)
/* don't try to handle loop play when synced to JACK */
- if (!synced_to_jack()) {
+ if (!synced_to_engine()) {
Location *location = _locations->auto_loop_location();
@@ -734,7 +734,7 @@ Session::set_play_loop (bool yn)
return;
}
- if (yn && Config->get_seamless_loop() && synced_to_jack()) {
+ if (yn && Config->get_seamless_loop() && synced_to_engine()) {
warning << string_compose (
_("Seamless looping cannot be supported while %1 is using JACK transport.\n"
"Recommend changing the configured options"), PROGRAM_NAME)
@@ -811,7 +811,7 @@ Session::flush_all_inserts ()
void
Session::start_locate (framepos_t target_frame, bool with_roll, bool with_flush, bool with_loop, bool force)
{
- if (synced_to_jack()) {
+ if (synced_to_engine()) {
double sp;
framepos_t pos;
@@ -926,7 +926,7 @@ Session::locate (framepos_t target_frame, bool with_roll, bool with_flush, bool
bool transport_was_stopped = !transport_rolling();
- if (transport_was_stopped && (!auto_play_legal || !config.get_auto_play()) && !with_roll && !(synced_to_jack() && play_loop)) {
+ if (transport_was_stopped && (!auto_play_legal || !config.get_auto_play()) && !with_roll && !(synced_to_engine() && play_loop)) {
realtime_stop (false, true); // XXX paul - check if the 2nd arg is really correct
transport_was_stopped = true;
} else {
@@ -1067,7 +1067,7 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state, bool a
set_track_monitor_input_status (true);
}
- if (synced_to_jack ()) {
+ if (synced_to_engine ()) {
if (clear_state) {
/* do this here because our response to the slave won't
take care of it.
@@ -1090,7 +1090,7 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state, bool a
set_track_monitor_input_status (false);
}
- if (synced_to_jack()) {
+ if (synced_to_engine()) {
_engine.transport_start ();
} else {
start_transport ();
@@ -1100,7 +1100,7 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state, bool a
/* not zero, not 1.0 ... varispeed */
- if ((synced_to_jack()) && speed != 0.0 && speed != 1.0) {
+ if ((synced_to_engine()) && speed != 0.0 && speed != 1.0) {
warning << string_compose (
_("Global varispeed cannot be supported while %1 is connected to JACK transport control"),
PROGRAM_NAME)
@@ -1429,8 +1429,8 @@ Session::switch_to_sync_source (SyncSource src)
}
break;
- case JACK:
- if (_slave && dynamic_cast<JACK_Slave*>(_slave)) {
+ case Engine:
+ if (_slave && dynamic_cast<Engine_Slave*>(_slave)) {
return;
}
@@ -1438,7 +1438,7 @@ Session::switch_to_sync_source (SyncSource src)
return;
}
- new_slave = new JACK_Slave (*AudioEngine::instance());
+ new_slave = new Engine_Slave (*AudioEngine::instance());
break;
default:
@@ -1632,9 +1632,9 @@ bool
Session::maybe_stop (framepos_t limit)
{
if ((_transport_speed > 0.0f && _transport_frame >= limit) || (_transport_speed < 0.0f && _transport_frame == 0)) {
- if (synced_to_jack () && config.get_jack_time_master ()) {
+ if (synced_to_engine () && config.get_jack_time_master ()) {
_engine.transport_stop ();
- } else if (!synced_to_jack ()) {
+ } else if (!synced_to_engine ()) {
stop_transport ();
}
return true;
diff --git a/libs/ardour/test-env.sh b/libs/ardour/test-env.sh
index aa2cff9219..561f54d694 100644
--- a/libs/ardour/test-env.sh
+++ b/libs/ardour/test-env.sh
@@ -22,3 +22,4 @@ export ARDOUR_SURFACES_PATH=$libs/surfaces/osc:$libs/surfaces/generic_midi:$libs
export ARDOUR_MCP_PATH="../mcp"
export ARDOUR_DLL_PATH=$libs
export ARDOUR_DATA_PATH=$top/gtk2_ardour:$top/build/gtk2_ardour:.
+export ARDOUR_BACKEND_PATH=$libs/backends/jack
diff --git a/libs/ardour/test/audio_region_read_test.cc b/libs/ardour/test/audio_region_read_test.cc
index dc3127ea2e..6a8e3600f1 100644
--- a/libs/ardour/test/audio_region_read_test.cc
+++ b/libs/ardour/test/audio_region_read_test.cc
@@ -20,7 +20,6 @@
#include "ardour/region.h"
#include "ardour/audioregion.h"
#include "audio_region_read_test.h"
-#include "test_globals.h"
CPPUNIT_TEST_SUITE_REGISTRATION (AudioRegionReadTest);
diff --git a/libs/ardour/test/audio_region_test.cc b/libs/ardour/test/audio_region_test.cc
index df3fa72d10..a25a78a40b 100644
--- a/libs/ardour/test/audio_region_test.cc
+++ b/libs/ardour/test/audio_region_test.cc
@@ -27,7 +27,6 @@
#include "ardour/audioregion.h"
#include "ardour/audioplaylist.h"
#include "audio_region_test.h"
-#include "test_globals.h"
#include "test_common.h"
using namespace std;
@@ -42,7 +41,7 @@ AudioRegionTest::setUp ()
std::string const test_wav_path = Glib::build_filename (new_test_output_dir(), "test.wav");
_playlist = PlaylistFactory::create (DataType::AUDIO, *_session, "test");
_audio_playlist = boost::dynamic_pointer_cast<AudioPlaylist> (_playlist);
- _source = SourceFactory::createWritable (DataType::AUDIO, *_session, test_wav_path, "", false, Fs);
+ _source = SourceFactory::createWritable (DataType::AUDIO, *_session, test_wav_path, false, get_test_sample_rate ());
/* Write a staircase to the source */
diff --git a/libs/ardour/test/automation_list_property_test.cc b/libs/ardour/test/automation_list_property_test.cc
index 90e2e22989..e5a74cad2f 100644
--- a/libs/ardour/test/automation_list_property_test.cc
+++ b/libs/ardour/test/automation_list_property_test.cc
@@ -16,11 +16,15 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#include <glibmm/fileutils.h>
+#include <glibmm/miscutils.h>
+
#include "pbd/properties.h"
#include "pbd/stateful_diff_command.h"
#include "ardour/automation_list.h"
#include "automation_list_property_test.h"
#include "test_util.h"
+#include "test_common.h"
CPPUNIT_TEST_SUITE_REGISTRATION (AutomationListPropertyTest);
@@ -29,6 +33,16 @@ using namespace PBD;
using namespace ARDOUR;
void
+write_automation_list_xml (XMLNode* node, std::string filename)
+{
+ // use the same output dir for all of them
+ static std::string test_output_dir = new_test_output_dir ("automation_list_property");
+ std::string output_file = Glib::build_filename (test_output_dir, filename);
+
+ CPPUNIT_ASSERT (write_ref (node, output_file));
+}
+
+void
AutomationListPropertyTest::basicTest ()
{
list<string> ignore_properties;
@@ -52,9 +66,18 @@ AutomationListPropertyTest::basicTest ()
/* Now it has changed */
CPPUNIT_ASSERT_EQUAL (true, property.changed());
+ std::string test_data_filename = "automation_list_property_test1.ref";
+ std::string test_data_file1 = Glib::build_filename (test_search_path().front(), test_data_filename);
+ CPPUNIT_ASSERT (Glib::file_test (test_data_file1, Glib::FILE_TEST_EXISTS));
+
XMLNode* foo = new XMLNode ("test");
property.get_changes_as_xml (foo);
- check_xml (foo, "../libs/ardour/test/data/automation_list_property_test1.ref", ignore_properties);
+ write_automation_list_xml (foo, test_data_filename);
+ check_xml (foo, test_data_file1, ignore_properties);
+
+ test_data_filename = "automation_list_property_test2.ref";
+ std::string test_data_file2 = Glib::build_filename (test_search_path().front(), test_data_filename);
+ CPPUNIT_ASSERT (Glib::file_test (test_data_file2, Glib::FILE_TEST_EXISTS));
/* Do some more */
property.clear_changes ();
@@ -64,7 +87,8 @@ AutomationListPropertyTest::basicTest ()
CPPUNIT_ASSERT_EQUAL (true, property.changed());
foo = new XMLNode ("test");
property.get_changes_as_xml (foo);
- check_xml (foo, "../libs/ardour/test/data/automation_list_property_test2.ref", ignore_properties);
+ write_automation_list_xml (foo, test_data_filename);
+ check_xml (foo, test_data_file2, ignore_properties);
}
/** Here's a StatefulDestructible class that has a AutomationListProperty */
@@ -119,11 +143,21 @@ AutomationListPropertyTest::undoTest ()
sheila->_jim->add (7, 8);
StatefulDiffCommand sdc (sheila);
+ std::string test_data_filename = "automation_list_property_test3.ref";
+ std::string test_data_file3 = Glib::build_filename (test_search_path().front(), test_data_filename);
+ CPPUNIT_ASSERT (Glib::file_test (test_data_file3, Glib::FILE_TEST_EXISTS));
+
/* Undo */
sdc.undo ();
- check_xml (&sheila->get_state(), "../libs/ardour/test/data/automation_list_property_test3.ref", ignore_properties);
+ write_automation_list_xml (&sheila->get_state(), test_data_filename);
+ check_xml (&sheila->get_state(), test_data_file3, ignore_properties);
+
+ test_data_filename = "automation_list_property_test4.ref";
+ std::string test_data_file4 = Glib::build_filename (test_search_path().front(), test_data_filename);
+ CPPUNIT_ASSERT (Glib::file_test (test_data_file4, Glib::FILE_TEST_EXISTS));
/* Redo */
sdc.redo ();
- check_xml (&sheila->get_state(), "../libs/ardour/test/data/automation_list_property_test4.ref", ignore_properties);
+ write_automation_list_xml (&sheila->get_state(), test_data_filename);
+ check_xml (&sheila->get_state(), test_data_file4, ignore_properties);
}
diff --git a/libs/ardour/test/load_session.cc b/libs/ardour/test/load_session.cc
index 3f56e63577..f2a2a6922e 100644
--- a/libs/ardour/test/load_session.cc
+++ b/libs/ardour/test/load_session.cc
@@ -3,7 +3,6 @@
#include "ardour/ardour.h"
#include "ardour/audioengine.h"
#include "ardour/session.h"
-#include "midi++/manager.h"
#include <iostream>
#include <cstdlib>
@@ -41,9 +40,8 @@ int main (int argc, char* argv[])
AudioEngine::instance()->remove_session ();
delete s;
- AudioEngine::instance()->stop (true);
+ AudioEngine::instance()->stop ();
- MIDI::Manager::destroy ();
AudioEngine::destroy ();
return 0;
diff --git a/libs/ardour/test/playlist_read_test.cc b/libs/ardour/test/playlist_read_test.cc
index 54b0bc4fd5..78b2e4eadd 100644
--- a/libs/ardour/test/playlist_read_test.cc
+++ b/libs/ardour/test/playlist_read_test.cc
@@ -22,7 +22,6 @@
#include "ardour/audioregion.h"
#include "ardour/session.h"
#include "playlist_read_test.h"
-#include "test_globals.h"
CPPUNIT_TEST_SUITE_REGISTRATION (PlaylistReadTest);
diff --git a/libs/ardour/test/profiling/load_session.cc b/libs/ardour/test/profiling/load_session.cc
index 3f56e63577..f2a2a6922e 100644
--- a/libs/ardour/test/profiling/load_session.cc
+++ b/libs/ardour/test/profiling/load_session.cc
@@ -3,7 +3,6 @@
#include "ardour/ardour.h"
#include "ardour/audioengine.h"
#include "ardour/session.h"
-#include "midi++/manager.h"
#include <iostream>
#include <cstdlib>
@@ -41,9 +40,8 @@ int main (int argc, char* argv[])
AudioEngine::instance()->remove_session ();
delete s;
- AudioEngine::instance()->stop (true);
+ AudioEngine::instance()->stop ();
- MIDI::Manager::destroy ();
AudioEngine::destroy ();
return 0;
diff --git a/libs/ardour/test/profiling/runpc.cc b/libs/ardour/test/profiling/runpc.cc
index ddbd463234..6538fcf88a 100644
--- a/libs/ardour/test/profiling/runpc.cc
+++ b/libs/ardour/test/profiling/runpc.cc
@@ -1,5 +1,4 @@
#include <iostream>
-#include "midi++/manager.h"
#include "pbd/textreceiver.h"
#include "pbd/compose.h"
#include "pbd/enumwriter.h"
@@ -31,7 +30,7 @@ main (int argc, char* argv[])
cout << "INFO: " << session->get_routes()->size() << " routes.\n";
for (int i = 0; i < 32768; ++i) {
- session->process (session->engine().frames_per_cycle ());
+ session->process (session->engine().samples_per_cycle ());
}
return 0;
diff --git a/libs/ardour/test/session_test.cc b/libs/ardour/test/session_test.cc
index 83273b5a2e..ba57b4bd63 100644
--- a/libs/ardour/test/session_test.cc
+++ b/libs/ardour/test/session_test.cc
@@ -3,7 +3,7 @@
#include <glibmm/miscutils.h>
#include <stdexcept>
-#include "midi++/manager.h"
+
#include "pbd/textreceiver.h"
#include "pbd/file_utils.h"
#include "ardour/session.h"
@@ -33,17 +33,12 @@ SessionTest::setUp ()
text_receiver.listen_to (fatal);
text_receiver.listen_to (warning);
- // this is not a good singleton constructor pattern
- AudioEngine* engine = 0;
-
- try {
- engine = new AudioEngine ("session_test", "");
- } catch (const AudioEngine::NoBackendAvailable& engine_exception) {
- cerr << engine_exception.what ();
- }
+ AudioEngine* engine = AudioEngine::create ();
CPPUNIT_ASSERT (engine);
+ CPPUNIT_ASSERT (engine->set_default_backend());
+
init_post_engine ();
CPPUNIT_ASSERT (engine->start () == 0);
@@ -53,9 +48,8 @@ void
SessionTest::tearDown ()
{
// this is needed or there is a crash in MIDI::Manager::destroy
- AudioEngine::instance()->stop (true);
+ AudioEngine::instance()->stop ();
- MIDI::Manager::destroy ();
AudioEngine::destroy ();
}
diff --git a/libs/ardour/test/test_common.cc b/libs/ardour/test/test_common.cc
index 8364d91be1..61f92972d1 100644
--- a/libs/ardour/test/test_common.cc
+++ b/libs/ardour/test/test_common.cc
@@ -37,13 +37,14 @@ test_search_path ()
}
std::string
-new_test_output_dir ()
+new_test_output_dir (std::string prefix)
{
std::string tmp_dir = Glib::build_filename (g_get_tmp_dir(), "ardour_test");
std::string dir_name;
std::string new_test_dir;
do {
ostringstream oss;
+ oss << prefix;
oss << g_random_int ();
dir_name = oss.str();
new_test_dir = Glib::build_filename (tmp_dir, dir_name);
@@ -51,3 +52,9 @@ new_test_output_dir ()
} while (g_mkdir_with_parents (new_test_dir.c_str(), 0755) != 0);
return new_test_dir;
}
+
+int
+get_test_sample_rate ()
+{
+ return 44100;
+}
diff --git a/libs/ardour/test/test_common.h b/libs/ardour/test/test_common.h
index 9e15458781..91fd066ac2 100644
--- a/libs/ardour/test/test_common.h
+++ b/libs/ardour/test/test_common.h
@@ -23,6 +23,8 @@
PBD::SearchPath test_search_path ();
-std::string new_test_output_dir ();
+std::string new_test_output_dir (std::string prefix = "");
+
+int get_test_sample_rate ();
#endif
diff --git a/libs/ardour/test/test_globals.cc b/libs/ardour/test/test_globals.cc
deleted file mode 100644
index e40f951d75..0000000000
--- a/libs/ardour/test/test_globals.cc
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "test_globals.h"
-
-int const Fs = 44100;
diff --git a/libs/ardour/test/test_globals.h b/libs/ardour/test/test_globals.h
deleted file mode 100644
index ccd5c27384..0000000000
--- a/libs/ardour/test/test_globals.h
+++ /dev/null
@@ -1,2 +0,0 @@
-
-extern int const Fs;
diff --git a/libs/ardour/test/test_needing_session.cc b/libs/ardour/test/test_needing_session.cc
index 181d391e01..4525a758b3 100644
--- a/libs/ardour/test/test_needing_session.cc
+++ b/libs/ardour/test/test_needing_session.cc
@@ -1,6 +1,5 @@
#include <glibmm/miscutils.h>
-#include "midi++/manager.h"
#include "pbd/compose.h"
#include "pbd/enumwriter.h"
#include "ardour/session.h"
@@ -26,8 +25,7 @@ TestNeedingSession::tearDown ()
{
AudioEngine::instance()->remove_session ();
delete _session;
- AudioEngine::instance()->stop (true);
+ AudioEngine::instance()->stop ();
- MIDI::Manager::destroy ();
AudioEngine::destroy ();
}
diff --git a/libs/ardour/test/test_util.cc b/libs/ardour/test/test_util.cc
index 1514012d97..dfbf40d351 100644
--- a/libs/ardour/test/test_util.cc
+++ b/libs/ardour/test/test_util.cc
@@ -60,12 +60,12 @@ check_xml (XMLNode* node, string ref_file, list<string> const & ignore_propertie
check_nodes (p, q, ignore_properties);
}
-void
+bool
write_ref (XMLNode* node, string ref_file)
{
XMLTree ref;
ref.set_root (node);
- ref.write (ref_file);
+ return ref.write (ref_file);
}
class TestReceiver : public Receiver
@@ -124,7 +124,10 @@ load_session (string dir, string state)
*/
Config->set_use_lxvst (false);
- AudioEngine* engine = new AudioEngine ("test", "");
+ AudioEngine* engine = AudioEngine::create ();
+
+ CPPUNIT_ASSERT (engine->set_default_backend ());
+
init_post_engine ();
CPPUNIT_ASSERT (engine->start () == 0);
diff --git a/libs/ardour/test/test_util.h b/libs/ardour/test/test_util.h
index fea74a2ea8..dd4b078e9f 100644
--- a/libs/ardour/test/test_util.h
+++ b/libs/ardour/test/test_util.h
@@ -8,5 +8,5 @@ namespace ARDOUR {
}
extern void check_xml (XMLNode *, std::string, std::list<std::string> const &);
-extern void write_ref (XMLNode *, std::string);
+extern bool write_ref (XMLNode *, std::string);
extern ARDOUR::Session* load_session (std::string, std::string);
diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc
index e7b7648149..0c98461974 100644
--- a/libs/ardour/utils.cc
+++ b/libs/ardour/utils.cc
@@ -395,12 +395,12 @@ string_to_sync_source (string str)
}
if (str == _("JACK")) {
- return JACK;
+ return Engine;
}
fatal << string_compose (_("programming error: unknown sync source string \"%1\""), str) << endmsg;
/*NOTREACHED*/
- return JACK;
+ return Engine;
}
/** @param sh Return a short version of the string */
@@ -408,7 +408,10 @@ const char*
sync_source_to_string (SyncSource src, bool sh)
{
switch (src) {
- case JACK:
+ case Engine:
+ /* no other backends offer sync for now ... deal with this if we
+ * ever have to.
+ */
return _("JACK");
case MTC:
diff --git a/libs/ardour/wscript b/libs/ardour/wscript
index 733900e3f6..25741a77fe 100644
--- a/libs/ardour/wscript
+++ b/libs/ardour/wscript
@@ -69,6 +69,7 @@ libardour_sources = [
'diskstream.cc',
'element_import_handler.cc',
'element_importer.cc',
+ 'engine_slave.cc',
'enums.cc',
'event_type_map.cc',
'export_channel.cc',
@@ -103,7 +104,6 @@ libardour_sources = [
'interpolation.cc',
'io.cc',
'io_processor.cc',
- 'jack_slave.cc',
'kmeterdsp.cc',
'ladspa_plugin.cc',
'location.cc',
@@ -180,7 +180,6 @@ libardour_sources = [
'session_events.cc',
'session_export.cc',
'session_handle.cc',
- 'session_jack.cc',
'session_ltc.cc',
'session_metadata.cc',
'session_midi.cc',
@@ -246,8 +245,6 @@ def configure(conf):
autowaf.configure(conf)
autowaf.check_pkg(conf, 'aubio', uselib_store='AUBIO',
atleast_version='0.3.2')
- autowaf.check_pkg(conf, 'jack', uselib_store='JACK',
- atleast_version='0.118.2')
autowaf.check_pkg(conf, 'libxml-2.0', uselib_store='XML')
autowaf.check_pkg(conf, 'lrdf', uselib_store='LRDF',
atleast_version='0.4.0')
@@ -298,9 +295,6 @@ def configure(conf):
conf.check(header_name='sys/vfs.h', define_name='HAVE_SYS_VFS_H',mandatory=False)
conf.check(header_name='sys/statvfs.h', define_name='HAVE_SYS_STATVFS_H',mandatory=False)
- conf.check(header_name='jack/session.h', uselib = [ 'JACK' ],
- define_name='HAVE_JACK_SESSION')
-
conf.check(header_name='unistd.h', define_name='HAVE_UNISTD',mandatory=False)
if flac_supported():
@@ -337,11 +331,11 @@ def build(bld):
obj.name = 'libardour'
obj.target = 'ardour'
obj.uselib = ['GLIBMM','GTHREAD','AUBIO','SIGCPP','XML','UUID',
- 'JACK','SNDFILE','SAMPLERATE','LRDF','AUDIOUNITS',
+ 'SNDFILE','SAMPLERATE','LRDF','AUDIOUNITS',
'OSX','BOOST','CURL','DL']
obj.use = ['libpbd','libmidipp','libevoral','libvamphost',
'libvampplugin','libtaglib','librubberband',
- 'libaudiographer','libltc']
+ 'libaudiographer','libltc','libtimecode']
obj.vnum = LIBARDOUR_LIB_VERSION
obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
obj.defines = [
@@ -402,9 +396,9 @@ def build(bld):
# only build these common sources once
testcommon = bld(features = 'cxx')
testcommon.includes = obj.includes + ['test', '../pbd', '..']
- testcommon.source = ['test/test_globals.cc', 'test/testrunner.cc', 'test/test_needing_session.cc',
+ testcommon.source = ['test/testrunner.cc', 'test/test_needing_session.cc',
'test/test_common.cc', 'test/dummy_lxvst.cc', 'test/audio_region_test.cc', 'test/test_util.cc']
- testcommon.uselib = ['CPPUNIT','SIGCPP','JACK','GLIBMM','GTHREAD',
+ testcommon.uselib = ['CPPUNIT','SIGCPP','GLIBMM','GTHREAD',
'SAMPLERATE','XML','LRDF','COREAUDIO']
testcommon.use = ['libpbd','libmidipp','libevoral','libvamphost',
'libvampplugin','libtaglib','librubberband',
@@ -480,7 +474,7 @@ def build(bld):
session_load_tester.includes = obj.includes
session_load_tester.includes.append ('test')
- session_load_tester.uselib = ['CPPUNIT','SIGCPP','JACK','GLIBMM','GTHREAD',
+ session_load_tester.uselib = ['CPPUNIT','SIGCPP','GLIBMM','GTHREAD',
'SAMPLERATE','XML','LRDF','COREAUDIO']
session_load_tester.use = ['libpbd','libmidipp','ardour']
session_load_tester.name = 'libardour-session-load-tester'
@@ -515,7 +509,7 @@ def build(bld):
profilingobj.includes = obj.includes
profilingobj.includes.append ('test')
- profilingobj.uselib = ['CPPUNIT','SIGCPP','JACK','GLIBMM','GTHREAD',
+ profilingobj.uselib = ['CPPUNIT','SIGCPP','GLIBMM','GTHREAD',
'SAMPLERATE','XML','LRDF','COREAUDIO']
profilingobj.use = ['libpbd','libmidipp','ardour']
profilingobj.name = 'libardour-profiling'
@@ -542,7 +536,7 @@ def create_ardour_test_program(bld, includes, name, target, sources):
testobj = bld(features = 'cxx cxxprogram')
testobj.includes = includes + ['test', '../pbd', '..']
testobj.source = sources
- testobj.uselib = ['CPPUNIT','SIGCPP','JACK','GLIBMM','GTHREAD',
+ testobj.uselib = ['CPPUNIT','SIGCPP','GLIBMM','GTHREAD',
'SAMPLERATE','XML','LRDF','COREAUDIO']
testobj.use = ['libpbd','libmidipp','libevoral','libvamphost',
'libvampplugin','libtaglib','librubberband',
diff --git a/libs/backends/jack/jack_api.cc b/libs/backends/jack/jack_api.cc
index 836acfda11..c8859a1fc9 100644
--- a/libs/backends/jack/jack_api.cc
+++ b/libs/backends/jack/jack_api.cc
@@ -63,7 +63,7 @@ deinstantiate ()
static bool
already_configured ()
{
- return JackConnection::server_running ();
+ return !JackConnection::in_control ();
}
static ARDOUR::AudioBackendInfo _descriptor = {
diff --git a/libs/backends/jack/jack_audiobackend.cc b/libs/backends/jack/jack_audiobackend.cc
index 1e7cb9d8d5..ff76486bad 100644
--- a/libs/backends/jack/jack_audiobackend.cc
+++ b/libs/backends/jack/jack_audiobackend.cc
@@ -37,6 +37,7 @@
#include "jack_audiobackend.h"
#include "jack_connection.h"
#include "jack_utils.h"
+#include "jack_session.h"
#include "i18n.h"
@@ -45,6 +46,7 @@ using namespace PBD;
using std::string;
using std::vector;
+
#define GET_PRIVATE_JACK_POINTER(localvar) jack_client_t* localvar = _jack_connection->jack(); if (!(localvar)) { return; }
#define GET_PRIVATE_JACK_POINTER_RET(localvar,r) jack_client_t* localvar = _jack_connection->jack(); if (!(localvar)) { return r; }
@@ -63,6 +65,7 @@ JACKAudioBackend::JACKAudioBackend (AudioEngine& e, boost::shared_ptr<JackConnec
, _target_systemic_output_latency (0)
, _current_sample_rate (0)
, _current_buffer_size (0)
+ , _session (0)
{
_jack_connection->Connected.connect_same_thread (jack_connection_connection, boost::bind (&JACKAudioBackend::when_connected_to_jack, this));
_jack_connection->Disconnected.connect_same_thread (disconnect_connection, boost::bind (&JACKAudioBackend::disconnected, this, _1));
@@ -406,6 +409,12 @@ JACKAudioBackend::interleaved () const
return false;
}
+string
+JACKAudioBackend::midi_option () const
+{
+ return _target_midi_option;
+}
+
uint32_t
JACKAudioBackend::input_channels () const
{
@@ -462,7 +471,7 @@ JACKAudioBackend::raw_buffer_size(DataType t)
}
void
-JACKAudioBackend::setup_jack_startup_command ()
+JACKAudioBackend::setup_jack_startup_command (bool for_latency_measurement)
{
/* first we map the parameters that have been set onto a
* JackCommandLineOptions object.
@@ -487,6 +496,8 @@ JACKAudioBackend::setup_jack_startup_command ()
options.realtime = true;
options.ports_max = 2048;
+ ARDOUR::set_midi_option (options, _target_midi_option);
+
/* this must always be true for any server instance we start ourselves
*/
@@ -494,7 +505,7 @@ JACKAudioBackend::setup_jack_startup_command ()
string cmdline;
- if (!get_jack_command_line_string (options, cmdline)) {
+ if (!get_jack_command_line_string (options, cmdline, for_latency_measurement)) {
/* error, somehow - we will still try to start JACK
* automatically but it will be without our preferred options
*/
@@ -509,12 +520,15 @@ JACKAudioBackend::setup_jack_startup_command ()
/* ---- BASIC STATE CONTROL API: start/stop/pause/freewheel --- */
int
-JACKAudioBackend::start ()
+JACKAudioBackend::_start (bool for_latency_measurement)
{
if (!available()) {
- if (!_jack_connection->server_running()) {
- setup_jack_startup_command ();
+ if (_jack_connection->in_control()) {
+ /* we will be starting JACK, so set up the
+ command that JACK will use when it (auto-)starts
+ */
+ setup_jack_startup_command (for_latency_measurement);
}
if (_jack_connection->open ()) {
@@ -591,7 +605,7 @@ JACKAudioBackend::freewheel (bool onoff)
}
if (jack_set_freewheel (_priv_jack, onoff) == 0) {
- _freewheeling = true;
+ _freewheeling = onoff;
return 0;
}
@@ -744,7 +758,8 @@ JACKAudioBackend::jack_timebase_callback (jack_transport_state_t state, pframes_
ARDOUR::Session* session = engine.session();
if (session) {
- session->jack_timebase_callback (state, nframes, pos, new_position);
+ JACKSession jsession (session);
+ jsession.timebase_callback (state, nframes, pos, new_position);
}
}
@@ -789,7 +804,6 @@ JACKAudioBackend::_xrun_callback (void *arg)
return 0;
}
-#ifdef HAVE_JACK_SESSION
void
JACKAudioBackend::_session_callback (jack_session_event_t *event, void *arg)
{
@@ -797,10 +811,10 @@ JACKAudioBackend::_session_callback (jack_session_event_t *event, void *arg)
ARDOUR::Session* session = jab->engine.session();
if (session) {
- session->jack_session_event (event);
+ JACKSession jsession (session);
+ jsession.session_event (event);
}
}
-#endif
void
JACKAudioBackend::_freewheel_callback (int onoff, void *arg)
@@ -822,25 +836,72 @@ JACKAudioBackend::_latency_callback (jack_latency_callback_mode_t mode, void* ar
}
int
-JACKAudioBackend::create_process_thread (boost::function<void()> f, pthread_t* thread, size_t stacksize)
+JACKAudioBackend::create_process_thread (boost::function<void()> f)
{
GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
- ThreadData* td = new ThreadData (this, f, stacksize);
- if (jack_client_create_thread (_priv_jack, thread, jack_client_real_time_priority (_priv_jack),
+ jack_native_thread_t thread_id;
+ ThreadData* td = new ThreadData (this, f, thread_stack_size());
+
+ if (jack_client_create_thread (_priv_jack, &thread_id, jack_client_real_time_priority (_priv_jack),
jack_is_realtime (_priv_jack), _start_process_thread, td)) {
return -1;
}
- return 0;
+ _jack_threads.push_back(thread_id);
+ return 0;
}
int
-JACKAudioBackend::wait_for_process_thread_exit (AudioBackendNativeThread thr)
+JACKAudioBackend::join_process_threads ()
+{
+ GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
+
+ int ret = 0;
+
+ for (std::vector<jack_native_thread_t>::const_iterator i = _jack_threads.begin ();
+ i != _jack_threads.end(); i++) {
+
+#if defined(USING_JACK2_EXPANSION_OF_JACK_API) || defined(PLATFORM_WINDOWS)
+ if (jack_client_stop_thread (_priv_jack, *i) != 0) {
+#else
+ void* status;
+ if (pthread_join (*i, &status) != 0) {
+#endif
+ error << "AudioEngine: cannot stop process thread" << endmsg;
+ ret += -1;
+ }
+ }
+
+ _jack_threads.clear();
+
+ return ret;
+}
+
+bool
+JACKAudioBackend::in_process_thread ()
+{
+ for (std::vector<jack_native_thread_t>::const_iterator i = _jack_threads.begin ();
+ i != _jack_threads.end(); i++) {
+
+#ifdef COMPILER_MINGW
+ if (*i == GetCurrentThread()) {
+ return true;
+ }
+#else // pthreads
+ if (pthread_equal (*i, pthread_self()) != 0) {
+ return true;
+ }
+#endif
+ }
+
+ return false;
+}
+
+uint32_t
+JACKAudioBackend::process_thread_count ()
{
- void* status;
- /* this doesn't actively try to stop the thread, it just waits till it exits */
- return pthread_join (thr, &status);
+ return _jack_threads.size();
}
void*
@@ -960,6 +1021,7 @@ JACKAudioBackend::disconnected (const char* why)
engine.halted_callback (why); /* EMIT SIGNAL */
}
}
+
float
JACKAudioBackend::cpu_load() const
{
@@ -1056,3 +1118,16 @@ JACKAudioBackend::launch_control_app ()
args.push_back (appname);
Glib::spawn_async ("", args, Glib::SPAWN_SEARCH_PATH);
}
+
+vector<string>
+JACKAudioBackend::enumerate_midi_options () const
+{
+ return ARDOUR::enumerate_midi_options ();
+}
+
+int
+JACKAudioBackend::set_midi_option (const string& opt)
+{
+ _target_midi_option = opt;
+ return 0;
+}
diff --git a/libs/backends/jack/jack_audiobackend.h b/libs/backends/jack/jack_audiobackend.h
index 9ab545f3ee..3c48be5ead 100644
--- a/libs/backends/jack/jack_audiobackend.h
+++ b/libs/backends/jack/jack_audiobackend.h
@@ -30,15 +30,14 @@
#include <boost/shared_ptr.hpp>
#include <jack/jack.h>
-#ifdef HAVE_JACK_SESSION
#include <jack/session.h>
-#endif
#include "ardour/audio_backend.h"
namespace ARDOUR {
class JackConnection;
+class JACKSession;
class JACKAudioBackend : public AudioBackend {
public:
@@ -90,7 +89,7 @@ class JACKAudioBackend : public AudioBackend {
std::string control_app_name () const;
void launch_control_app ();
- int start ();
+ int _start (bool for_latency_measurement);
int stop ();
int pause ();
int freewheel (bool);
@@ -103,8 +102,10 @@ class JACKAudioBackend : public AudioBackend {
size_t raw_buffer_size (DataType t);
- int create_process_thread (boost::function<void()> func, AudioBackendNativeThread*, size_t stacksize);
- int wait_for_process_thread_exit (AudioBackendNativeThread);
+ int create_process_thread (boost::function<void()> func);
+ int join_process_threads ();
+ bool in_process_thread ();
+ uint32_t process_thread_count ();
void transport_start ();
void transport_stop ();
@@ -148,6 +149,10 @@ class JACKAudioBackend : public AudioBackend {
/* MIDI */
+ std::vector<std::string> enumerate_midi_options () const;
+ int set_midi_option (const std::string&);
+ std::string midi_option () const;
+
int midi_event_get (pframes_t& timestamp, size_t& size, uint8_t** buf, void* port_buffer, uint32_t event_index);
int midi_event_put (void* port_buffer, pframes_t timestamp, const uint8_t* buffer, size_t size);
uint32_t get_midi_event_count (void* port_buffer);
@@ -184,6 +189,8 @@ class JACKAudioBackend : public AudioBackend {
bool _freewheeling;
std::map<DataType,size_t> _raw_buffer_sizes;
+ std::vector<jack_native_thread_t> _jack_threads;
+
static int _xrun_callback (void *arg);
static void* _process_thread (void *arg);
static int _sample_rate_callback (pframes_t nframes, void *arg);
@@ -192,9 +199,7 @@ class JACKAudioBackend : public AudioBackend {
static int _jack_sync_callback (jack_transport_state_t, jack_position_t*, void *arg);
static void _freewheel_callback (int , void *arg);
static void _latency_callback (jack_latency_callback_mode_t, void*);
-#ifdef HAVE_JACK_SESSION
static void _session_callback (jack_session_event_t *event, void *arg);
-#endif
void jack_timebase_callback (jack_transport_state_t, pframes_t, jack_position_t*, int);
int jack_sync_callback (jack_transport_state_t, jack_position_t*);
@@ -220,7 +225,7 @@ class JACKAudioBackend : public AudioBackend {
void* process_thread ();
static void* _start_process_thread (void*);
- void setup_jack_startup_command ();
+ void setup_jack_startup_command (bool for_latency_measurement);
/* pffooo */
@@ -236,6 +241,7 @@ class JACKAudioBackend : public AudioBackend {
uint32_t _target_systemic_output_latency;
uint32_t _current_sample_rate;
uint32_t _current_buffer_size;
+ std::string _target_midi_option;
typedef std::set<std::string> DeviceList;
typedef std::map<std::string,DeviceList> DriverDeviceMap;
@@ -257,6 +263,12 @@ class JACKAudioBackend : public AudioBackend {
void when_connected_to_jack ();
PBD::ScopedConnection jack_connection_connection;
+
+ /* Object to manage interactions with Session in a way that
+ keeps JACK out of libardour directly
+ */
+
+ JACKSession* _session;
};
} // namespace
diff --git a/libs/backends/jack/jack_connection.cc b/libs/backends/jack/jack_connection.cc
index d5d25c747f..b3d7fcecc4 100644
--- a/libs/backends/jack/jack_connection.cc
+++ b/libs/backends/jack/jack_connection.cc
@@ -36,6 +36,8 @@ using std::vector;
using std::cerr;
using std::endl;
+bool JackConnection::_in_control = false;
+
static void jack_halted_callback (void* arg)
{
JackConnection* jc = static_cast<JackConnection*> (arg);
@@ -54,17 +56,9 @@ JackConnection::JackConnection (const std::string& arg1, const std::string& arg2
, _client_name (arg1)
, session_uuid (arg2)
{
- _in_control = !server_running();
-}
-
-JackConnection::~JackConnection ()
-{
- close ();
-}
+ /* See if the server is already up
+ */
-bool
-JackConnection::server_running ()
-{
EnvironmentalProtectionAgency* global_epa = EnvironmentalProtectionAgency::get_global_epa ();
boost::scoped_ptr<EnvironmentalProtectionAgency> current_epa;
@@ -83,10 +77,15 @@ JackConnection::server_running ()
if (status == 0) {
jack_client_close (c);
- return true;
+ _in_control = false;
+ } else {
+ _in_control = true;
}
+}
- return false;
+JackConnection::~JackConnection ()
+{
+ close ();
}
int
@@ -106,19 +105,6 @@ JackConnection::open ()
global_epa->restore ();
}
- /* check to see if the server is already running so that we know if we
- * are starting it.
- */
-
- jack_client_t* c = jack_client_open ("ardourprobe", JackNoStartServer, &status);
-
- if (status == 0) {
- _in_control = false;
- jack_client_close (c);
- } else {
- _in_control = true;
- }
-
/* ensure that PATH or equivalent includes likely locations of the JACK
* server, in case the user's default does not.
*/
diff --git a/libs/backends/jack/jack_connection.h b/libs/backends/jack/jack_connection.h
index 229d9697d9..8d15be6e3a 100644
--- a/libs/backends/jack/jack_connection.h
+++ b/libs/backends/jack/jack_connection.h
@@ -27,15 +27,13 @@ class JackConnection {
void halted_callback ();
void halted_info_callback (jack_status_t, const char*);
- bool in_control() const { return _in_control; }
+ static bool in_control() { return _in_control; }
- static bool server_running();
-
private:
jack_client_t* volatile _jack;
std::string _client_name;
std::string session_uuid;
- bool _in_control;
+ static bool _in_control;
};
} // namespace
diff --git a/libs/ardour/session_jack.cc b/libs/backends/jack/jack_session.cc
index af8a93fec3..ca51dafccc 100644
--- a/libs/ardour/session_jack.cc
+++ b/libs/backends/jack/jack_session.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1999-2013 Paul Davis
+ Copyright (C) 2013 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,16 +18,11 @@
*/
-#ifdef WAF_BUILD
-#include "libardour-config.h"
-#endif
-
#include <time.h>
#include <glibmm/miscutils.h>
-#include "jack/jack.h"
-#include "jack/session.h"
+#include <jack/jack.h>
#include "ardour/audioengine.h"
#include "ardour/filename_extensions.h"
@@ -35,12 +30,22 @@
#include "ardour/session_directory.h"
#include "ardour/tempo.h"
+#include "jack_session.h"
+
using namespace ARDOUR;
using std::string;
-#ifdef HAVE_JACK_SESSION
+JACKSession::JACKSession (Session* s)
+ : SessionHandlePtr (s)
+{
+}
+
+JACKSession::~JACKSession ()
+{
+}
+
void
-Session::jack_session_event (jack_session_event_t* event)
+JACKSession::session_event (jack_session_event_t* event)
{
char timebuf[128], *tmp;
time_t n;
@@ -54,7 +59,7 @@ Session::jack_session_event (jack_session_event_t* event)
if (event->type == JackSessionSaveTemplate)
{
- if (save_template( timebuf )) {
+ if (_session->save_template( timebuf )) {
event->flags = JackSessionSaveError;
} else {
string cmd ("ardour3 -P -U ");
@@ -67,10 +72,10 @@ Session::jack_session_event (jack_session_event_t* event)
}
else
{
- if (save_state (timebuf)) {
+ if (_session->save_state (timebuf)) {
event->flags = JackSessionSaveError;
} else {
- std::string xml_path (_session_dir->root_path());
+ std::string xml_path (_session->session_directory().root_path());
std::string legalized_filename = legalize_for_path (timebuf) + statefile_suffix;
xml_path = Glib::build_filename (xml_path, legalized_filename);
@@ -95,66 +100,69 @@ Session::jack_session_event (jack_session_event_t* event)
}
if (event->type == JackSessionSaveAndQuit) {
- Quit (); /* EMIT SIGNAL */
+ _session->Quit (); /* EMIT SIGNAL */
}
- jack_session_event_free( event );
+ jack_session_event_free (event);
}
-#endif
void
-Session::jack_timebase_callback (jack_transport_state_t /*state*/,
+JACKSession::timebase_callback (jack_transport_state_t /*state*/,
pframes_t /*nframes*/,
jack_position_t* pos,
int /*new_position*/)
{
Timecode::BBT_Time bbt;
+ TempoMap& tempo_map (_session->tempo_map());
+ framepos_t tf = _session->transport_frame ();
/* BBT info */
- if (_tempo_map) {
-
- TempoMetric metric (_tempo_map->metric_at (_transport_frame));
-
- try {
- _tempo_map->bbt_time_rt (_transport_frame, bbt);
-
- pos->bar = bbt.bars;
- pos->beat = bbt.beats;
- pos->tick = bbt.ticks;
-
- // XXX still need to set bar_start_tick
-
- pos->beats_per_bar = metric.meter().divisions_per_bar();
- pos->beat_type = metric.meter().note_divisor();
- pos->ticks_per_beat = Timecode::BBT_Time::ticks_per_beat;
- pos->beats_per_minute = metric.tempo().beats_per_minute();
-
- pos->valid = jack_position_bits_t (pos->valid | JackPositionBBT);
-
- } catch (...) {
- /* no message */
- }
+ TempoMetric metric (tempo_map.metric_at (tf));
+
+ try {
+ tempo_map.bbt_time_rt (tf, bbt);
+
+ pos->bar = bbt.bars;
+ pos->beat = bbt.beats;
+ pos->tick = bbt.ticks;
+
+ // XXX still need to set bar_start_tick
+
+ pos->beats_per_bar = metric.meter().divisions_per_bar();
+ pos->beat_type = metric.meter().note_divisor();
+ pos->ticks_per_beat = Timecode::BBT_Time::ticks_per_beat;
+ pos->beats_per_minute = metric.tempo().beats_per_minute();
+
+ pos->valid = jack_position_bits_t (pos->valid | JackPositionBBT);
+
+ } catch (...) {
+ /* no message */
}
#ifdef HAVE_JACK_VIDEO_SUPPORT
//poke audio video ratio so Ardour can track Video Sync
- pos->audio_frames_per_video_frame = frame_rate() / timecode_frames_per_second();
+ pos->audio_frames_per_video_frame = _session->frame_rate() / _session->timecode_frames_per_second();
pos->valid = jack_position_bits_t (pos->valid | JackAudioVideoRatio);
#endif
-#if 0
+#ifdef HAVE_JACK_TIMCODE_SUPPORT
+ /* This is not yet defined in JACK */
+
/* Timecode info */
- pos->timecode_offset = config.get_timecode_offset();
- t.timecode_frame_rate = timecode_frames_per_second();
- pos->valid = jack_position_bits_t (pos->valid | JackPositionTimecode;
+ pos->timecode_offset = _session->config.get_timecode_offset();
+ t.timecode_frame_rate = _session->timecode_frames_per_second();
+ pos->valid = jack_position_bits_t (pos->valid | JackPositionTimecode);
+#endif
+#ifdef HAVE_JACK_LOOPING_SUPPORT
+ /* This is not yet defined in JACK */
if (_transport_speed) {
if (play_loop) {
- Location* location = _locations.auto_loop_location();
+ Location* location = _session->locations()->auto_loop_location();
if (location) {
diff --git a/libs/backends/jack/jack_session.h b/libs/backends/jack/jack_session.h
new file mode 100644
index 0000000000..c912b5f170
--- /dev/null
+++ b/libs/backends/jack/jack_session.h
@@ -0,0 +1,47 @@
+/*
+ Copyright (C) 2013 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __ardour_jack_audiobackend_jack_session_h__
+#define __ardour_jack_audiobackend_jack_session_h__
+
+#include <jack/session.h>
+#include <jack/transport.h>
+
+#include "ardour/types.h"
+#include "ardour/session_handle.h"
+
+namespace ARDOUR {
+ class Session;
+
+class JACKSession : public ARDOUR::SessionHandlePtr
+{
+ public:
+ JACKSession (ARDOUR::Session* s);
+ ~JACKSession ();
+
+ void session_event (jack_session_event_t* event);
+ void timebase_callback (jack_transport_state_t /*state*/,
+ ARDOUR::pframes_t /*nframes*/,
+ jack_position_t* pos,
+ int /*new_position*/);
+};
+
+} /* namespace */
+
+#endif /* __ardour_jack_audiobackend_jack_session_h__ */
diff --git a/libs/backends/jack/jack_utils.cc b/libs/backends/jack/jack_utils.cc
index 93fc3d440a..92f175d9cb 100644
--- a/libs/backends/jack/jack_utils.cc
+++ b/libs/backends/jack/jack_utils.cc
@@ -83,6 +83,8 @@ namespace {
const char * const dummy_driver_command_line_name = X_("dummy");
// should we provide more "pretty" names like above?
+ const char * const alsa_seq_midi_driver_name = X_("alsa");
+ const char * const alsa_raw_midi_driver_name = X_("alsarawmidi");
const char * const alsaseq_midi_driver_name = X_("seq");
const char * const alsaraw_midi_driver_name = X_("raw");
const char * const winmme_midi_driver_name = X_("winmme");
@@ -92,6 +94,8 @@ namespace {
const char * const default_device_name = X_("Default");
}
+static ARDOUR::MidiOptions midi_options;
+
std::string
get_none_string ()
{
@@ -682,7 +686,7 @@ ARDOUR::JackCommandLineOptions::JackCommandLineOptions ()
}
bool
-ARDOUR::get_jack_command_line_string (JackCommandLineOptions& options, string& command_line)
+ARDOUR::get_jack_command_line_string (JackCommandLineOptions& options, string& command_line, bool for_latency_measurement)
{
vector<string> args;
@@ -740,6 +744,16 @@ ARDOUR::get_jack_command_line_string (JackCommandLineOptions& options, string& c
}
#endif
+ if (options.driver == alsa_driver_name) {
+ if (options.midi_driver == alsa_seq_midi_driver_name) {
+ args.push_back ("-X");
+ args.push_back ("alsa_midi");
+ } else if (options.midi_driver == alsa_raw_midi_driver_name) {
+ args.push_back ("-X");
+ args.push_back ("alsarawmidi");
+ }
+ }
+
string command_line_driver_name;
if (!get_jack_command_line_audio_driver_name (options.driver, command_line_driver_name)) {
@@ -811,7 +825,7 @@ ARDOUR::get_jack_command_line_string (JackCommandLineOptions& options, string& c
args.push_back ("-p");
args.push_back (to_string (options.period_size, std::dec));
- if (get_jack_audio_driver_supports_latency_adjustment (options.driver)) {
+ if (!for_latency_measurement && get_jack_audio_driver_supports_latency_adjustment (options.driver)) {
if (options.input_latency) {
args.push_back ("-I");
args.push_back (to_string (options.input_latency, std::dec));
@@ -846,10 +860,15 @@ ARDOUR::get_jack_command_line_string (JackCommandLineOptions& options, string& c
if (options.soft_mode) {
args.push_back ("-s");
}
+ }
- if (!options.midi_driver.empty() && options.midi_driver != get_none_string ()) {
- args.push_back ("-X");
- args.push_back (options.midi_driver);
+ if (options.driver == alsa_driver_name || options.driver == coreaudio_driver_name) {
+
+ if (options.midi_driver != alsa_seq_midi_driver_name) {
+ if (!options.midi_driver.empty() && options.midi_driver != get_none_string ()) {
+ args.push_back ("-X");
+ args.push_back (options.midi_driver);
+ }
}
}
@@ -900,3 +919,54 @@ ARDOUR::write_jack_config_file (const std::string& config_file_path, const strin
jackdrc.close ();
return true;
}
+
+vector<string>
+ARDOUR::enumerate_midi_options ()
+{
+ if (midi_options.empty()) {
+#ifdef HAVE_ALSA
+ midi_options.push_back (make_pair (_("(legacy) ALSA raw devices"), alsaraw_midi_driver_name));
+ midi_options.push_back (make_pair (_("(legacy) ALSA sequencer"), alsaseq_midi_driver_name));
+ midi_options.push_back (make_pair (_("ALSA (JACK1, 0.124 and later)"), alsa_seq_midi_driver_name));
+ midi_options.push_back (make_pair (_("ALSA (JACK2, 1.9.8 and later)"), alsa_raw_midi_driver_name));
+#endif
+#ifdef HAVE_PORTAUDIO
+ /* Windows folks: what name makes sense here? Are there other
+ choices as well ?
+ */
+ midi_options.push_back (make_pair (_("Multimedia Extension"), winmme_midi_driver_name));
+#endif
+#ifdef __APPLE__
+ midi_options.push_back (make_pair (_("CoreMIDI"), coremidi_midi_driver_name));
+#endif
+ }
+
+ vector<string> v;
+
+ v.push_back (get_none_string());
+
+ for (MidiOptions::const_iterator i = midi_options.begin(); i != midi_options.end(); ++i) {
+ v.push_back (i->first);
+ }
+
+ return v;
+}
+
+int
+ARDOUR::set_midi_option (ARDOUR::JackCommandLineOptions& options, const string& opt)
+{
+ if (opt.empty() || opt == get_none_string()) {
+ options.midi_driver = "";
+ return 0;
+ }
+
+ for (MidiOptions::const_iterator i = midi_options.begin(); i != midi_options.end(); ++i) {
+ if (i->first == opt) {
+ options.midi_driver = i->second;
+ return 0;
+ }
+ }
+
+ return -1;
+}
+
diff --git a/libs/backends/jack/jack_utils.h b/libs/backends/jack/jack_utils.h
index a7521ad1c4..ee8575c5c8 100644
--- a/libs/backends/jack/jack_utils.h
+++ b/libs/backends/jack/jack_utils.h
@@ -180,6 +180,8 @@ namespace ARDOUR {
*/
bool get_jack_default_server_path (std::string& server_path);
+ typedef std::vector<std::pair<std::string,std::string> > MidiOptions;
+
/**
* @return The name of the jack server config file
*/
@@ -228,8 +230,11 @@ namespace ARDOUR {
std::string midi_driver;
};
+ std::vector<std::string> enumerate_midi_options ();
+ int set_midi_option (ARDOUR::JackCommandLineOptions&, const std::string& opt);
+
/**
* @return true if able to build a valid command line based on options
*/
- bool get_jack_command_line_string (JackCommandLineOptions& options, std::string& command_line);
+ bool get_jack_command_line_string (JackCommandLineOptions& options, std::string& command_line, bool for_latency_measurement);
}
diff --git a/libs/backends/jack/wscript b/libs/backends/jack/wscript
index 2903abb641..111ecf3218 100644
--- a/libs/backends/jack/wscript
+++ b/libs/backends/jack/wscript
@@ -19,6 +19,7 @@ def options(opt):
autowaf.set_options(opt)
def configure(conf):
+ autowaf.check_pkg(conf, 'jack', uselib_store='JACK', atleast_version='0.121.0')
autowaf.configure(conf)
def build(bld):
@@ -28,10 +29,10 @@ def build(bld):
'jack_connection.cc',
'jack_audiobackend.cc',
'jack_portengine.cc',
- 'jack_utils.cc'
+ 'jack_utils.cc',
+ 'jack_session.cc',
]
obj.includes = ['.']
- obj.cxxflags = [ '-fPIC' ]
obj.name = 'jack_audiobackend'
obj.target = 'jack_audiobackend'
obj.uselib = [ 'JACK' ]
diff --git a/libs/gtkmm2ext/gtk_ui.cc b/libs/gtkmm2ext/gtk_ui.cc
index 6e466f5c9f..d9e4c871a6 100644
--- a/libs/gtkmm2ext/gtk_ui.cc
+++ b/libs/gtkmm2ext/gtk_ui.cc
@@ -120,9 +120,9 @@ UI::UI (string namestr, int *argc, char ***argv)
UI::~UI ()
{
+ _receiver.hangup ();
}
-
bool
UI::caller_is_ui_thread ()
{
@@ -265,12 +265,14 @@ UI::run (Receiver &old_receiver)
Glib::signal_idle().connect (bind_return (mem_fun (old_receiver, &Receiver::hangup), false));
- starting ();
+ if (starting ()) {
+ return;
+ }
+
_active = true;
theMain->run ();
_active = false;
- stopping ();
- _receiver.hangup ();
+
return;
}
diff --git a/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h b/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h
index 64176232f0..232e7682ed 100644
--- a/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h
+++ b/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h
@@ -152,8 +152,7 @@ class UI : public AbstractUI<UIRequest>
stopping just after we return from it (at the top level)
*/
- sigc::signal<void> starting;
- sigc::signal<void> stopping;
+ virtual int starting() = 0;
sigc::signal<void> theme_changed;
diff --git a/libs/gtkmm2ext/po/ru.po b/libs/gtkmm2ext/po/ru.po
index 6be73a3b88..0d1a8e4092 100644
--- a/libs/gtkmm2ext/po/ru.po
+++ b/libs/gtkmm2ext/po/ru.po
@@ -7,26 +7,25 @@ msgid ""
msgstr ""
"Project-Id-Version: gtkmm2ext\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-08-15 15:09-0400\n"
-"PO-Revision-Date: 2012-12-31 01:38+0300\n"
+"POT-Creation-Date: 2013-10-15 21:33+0400\n"
+"PO-Revision-Date: 2013-10-15 21:54+0300\n"
"Last-Translator: Александр Прокудин <alexandre.prokoudine@gmail.com>\n"
"Language-Team: русский <>\n"
-"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); 10<=4 && (n%100<10 || n"
"%100>=20) ? 1 : 2);\n"
+"X-Generator: Poedit 1.5.4\n"
#: actions.cc:386
msgid "Unknown action name: %1"
msgstr "Неизвестное название действия: %1"
#: binding_proxy.cc:84
-#, fuzzy
msgid "operate controller now"
-msgstr "включить MIDI-контроллер"
+msgstr ""
#: bindable_button.cc:48
msgid "button cannot watch state of non-existing Controllable\n"
@@ -36,7 +35,7 @@ msgstr ""
msgid "Log"
msgstr "Журнал"
-#: gtk_ui.cc:361
+#: gtk_ui.cc:363
msgid ""
"\n"
"\n"
@@ -46,11 +45,11 @@ msgstr ""
"\n"
"Комбинация клавиш: "
-#: gtk_ui.cc:633
+#: gtk_ui.cc:635
msgid "Press To Exit"
msgstr "Нажмите для выхода"
-#: gtk_ui.cc:669
+#: gtk_ui.cc:671
msgid "I'm sorry %1, I can't do that"
msgstr ""
@@ -78,21 +77,21 @@ msgstr "Alt"
msgid "Meta"
msgstr "Meta"
-#: keyboard.cc:139 keyboard.cc:531
+#: keyboard.cc:139 keyboard.cc:535
msgid "Unknown"
msgstr "Неизвестно"
-#: keyboard.cc:542
+#: keyboard.cc:546
msgid "key bindings file not found at \"%2\" or contains errors."
msgstr ""
#: tearoff.cc:57
msgid "Click to tear this into its own window"
-msgstr ""
+msgstr "Щелкните, чтобы превратить эту панель инструментов в плавающее окно"
#: tearoff.cc:63
msgid "Click to put this back in the main window"
-msgstr ""
+msgstr "Щелкните, чтобы превратить это плавающее окно в панель инструментов"
#: textviewer.cc:34
msgid "Close"
diff --git a/libs/pbd/controllable_descriptor.cc b/libs/pbd/controllable_descriptor.cc
index 9c930e4dbd..392b917ec8 100644
--- a/libs/pbd/controllable_descriptor.cc
+++ b/libs/pbd/controllable_descriptor.cc
@@ -104,11 +104,10 @@ ControllableDescriptor::set (const std::string& str)
}
} else if (path[1] == "send") {
- if (path.size() == 3 && rest.size() == 3) {
+ if (path.size() == 3 && rest.size() == 2) {
if (path[2] == "gain") {
_subtype = SendGain;
_target.push_back (atoi (rest[1]));
- _target.push_back (atoi (rest[2]));
} else {
return -1;
}
diff --git a/libs/pbd/stacktrace.cc b/libs/pbd/stacktrace.cc
index d203bef968..e45aec22bc 100644
--- a/libs/pbd/stacktrace.cc
+++ b/libs/pbd/stacktrace.cc
@@ -104,6 +104,12 @@ PBD::stacktrace (std::ostream& out, int levels)
#else
+std::string
+demangle (std::string const & l)
+{
+ return std::string();
+}
+
void
PBD::stacktrace (std::ostream& out, int /*levels*/)
{
diff --git a/libs/surfaces/mackie/gui.cc b/libs/surfaces/mackie/gui.cc
index 1a063b674e..ebb9fd584e 100644
--- a/libs/surfaces/mackie/gui.cc
+++ b/libs/surfaces/mackie/gui.cc
@@ -84,6 +84,7 @@ MackieControlProtocolGUI::MackieControlProtocolGUI (MackieControlProtocol& p)
Gtk::Table* table = Gtk::manage (new Gtk::Table (2, 9));
table->set_row_spacings (4);
table->set_col_spacings (6);
+ table->set_border_width (12);
l = manage (new Gtk::Label (_("Device Type:")));
l->set_alignment (1.0, 0.5);
table->attach (*l, 0, 1, 0, 1, AttachOptions(FILL|EXPAND), AttachOptions(0));
@@ -182,11 +183,10 @@ MackieControlProtocolGUI::MackieControlProtocolGUI (MackieControlProtocol& p)
fkey_packer->pack_start (function_key_scroller, true, true);
fkey_packer->pack_start (*observation_packer, false, false);
fkey_packer->set_spacing (12);
- function_key_scroller.set_size_request (700,700);
function_key_scroller.property_shadow_type() = Gtk::SHADOW_NONE;
function_key_scroller.add (function_key_editor);
append_page (*fkey_packer, _("Function Keys"));
-
+
build_available_action_menu ();
build_function_key_editor ();
refresh_function_key_editor ();
diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc
index 32be851247..b55ac74c35 100644
--- a/libs/surfaces/mackie/mackie_control_protocol.cc
+++ b/libs/surfaces/mackie/mackie_control_protocol.cc
@@ -1382,7 +1382,7 @@ MackieControlProtocol::add_down_select_button (int surface, int strip)
void
MackieControlProtocol::remove_down_select_button (int surface, int strip)
{
- DownButtonList::iterator x = find (_down_select_buttons.begin(), _down_select_buttons.end(), (surface<<8)|(strip&0xf));
+ DownButtonList::iterator x = find (_down_select_buttons.begin(), _down_select_buttons.end(), (uint32_t) (surface<<8)|(strip&0xf));
DEBUG_TRACE (DEBUG::MackieControl, string_compose ("removing surface %1 strip %2 from down select buttons\n", surface, strip));
if (x != _down_select_buttons.end()) {
_down_select_buttons.erase (x);
diff --git a/tools/linux_packaging/build b/tools/linux_packaging/build
index 72e60257f0..3bf793a637 100755
--- a/tools/linux_packaging/build
+++ b/tools/linux_packaging/build
@@ -150,6 +150,7 @@ Shared=$APPDIR/share
Plugins=$APPLIB/plugins
Surfaces=$APPLIB/surfaces
Panners=$APPLIB/panners
+Backends=$APPLIB/backends
Modules=$Libraries/modules
Loaders=$Libraries/loaders
@@ -197,6 +198,7 @@ mkdir -p $PatchFiles
mkdir -p $MackieControl
mkdir -p $ExportFormats
mkdir -p $Panners
+mkdir -p $Backends
mkdir -p $Templates
mkdir -p $Shared/doc
@@ -302,7 +304,7 @@ fi
cp -R $GTKSTACK_ROOT/etc/* $Etc
echo "Copying all Pango modules ..."
-cp -R $GTKSTACK_ROOT/lib/pango/1.6.0/modules/*.so $Modules
+cp -R $GTKSTACK_ROOT/lib/pango/1.8.0/modules/*.so $Modules
echo "Copying all GDK Pixbuf loaders ..."
cp -R $GTKSTACK_ROOT/lib/gdk-pixbuf-2.0/2.10.0/loaders/*.so $Loaders
@@ -310,9 +312,9 @@ cp -R $GTKSTACK_ROOT/lib/gdk-pixbuf-2.0/2.10.0/loaders/*.so $Loaders
cat > pangorc <<EOF
[Pango]
-ModulesPath=$GTKSTACK_ROOT/lib/pango/1.6.0/modules
+ModulesPath=$GTKSTACK_ROOT/lib/pango/1.8.0/modules
EOF
-env PANGO_RC_FILE=pangorc $GTKSTACK_ROOT/bin/pango-querymodules | sed "s?$GTKSTACK_ROOT/lib/pango/1.6.0/?@ROOTDIR@/?" > $Etc/pango.modules.in
+env PANGO_RC_FILE=pangorc $GTKSTACK_ROOT/bin/pango-querymodules | sed "s?$GTKSTACK_ROOT/lib/pango/1.8.0/?@ROOTDIR@/?" > $Etc/pango.modules.in
rm pangorc
# Ditto for gdk-pixbuf loaders
@@ -382,6 +384,9 @@ done
# Panners
cp $BUILD_ROOT/libs/panners/*/lib*.so* $Panners
+# Backends
+cp $BUILD_ROOT/libs/backends/*/lib*.so* $Backends
+
# VAMP plugins that we use
cp $BUILD_ROOT/libs/vamp-plugins/libardourvampplugins.so* $Libraries
@@ -526,6 +531,7 @@ fi
# share stuff
cp -R ../../gtk2_ardour/splash.png $Shared
+cp -R ../../gtk2_ardour/small-splash.png $Shared
cp -R ../../gtk2_ardour/ArdourMono.ttf $Shared
# go through and recursively remove any .svn dirs in the bundle
diff --git a/tools/osx_packaging/osx_build b/tools/osx_packaging/osx_build
index 96ed165832..276eb90fe5 100755
--- a/tools/osx_packaging/osx_build
+++ b/tools/osx_packaging/osx_build
@@ -13,7 +13,7 @@ fi
SAE=
MIXBUS=
-WITH_HARVID=
+WITH_HARVID=1
WITH_LADSPA=1
STRIP=1
PRINT_SYSDEPS=
@@ -61,7 +61,7 @@ while [ $# -gt 0 ] ; do
# specific build flags
#
- --harvid) WITH_HARVID=1 ; shift ;;
+ --noharvid) WITH_HARVID= ; shift ;;
--noladspa) WITH_LADSPA= ; shift ;;
--nostrip) STRIP= ; shift ;;
--sysdeps) PRINT_SYSDEPS=1; shift ;;
@@ -99,6 +99,7 @@ Locale=$Resources/locale
Plugins=$APPROOT/Plugins
Surfaces=$Frameworks/surfaces
Panners=$Frameworks/panners
+Backends=$Frameworks/backends
MidiMaps=$Shared/midi_maps
ExportFormats=$Shared/export
Templates=$Shared/templates
@@ -132,6 +133,7 @@ mkdir -p $APPROOT/Resources
mkdir -p $Plugins
mkdir -p $Surfaces
mkdir -p $Panners
+mkdir -p $Backends
mkdir -p $MidiMaps
mkdir -p $ExportFormats
mkdir -p $Templates
@@ -256,7 +258,7 @@ fi
cp -R $GTKSTACK_ROOT/etc/* $Etc
echo "Copying all Pango modules ..."
-cp -R $GTKSTACK_ROOT/lib/pango/1.6.0/modules/*.so $Frameworks/modules
+cp -R $GTKSTACK_ROOT/lib/pango/1.8.0/modules/*.so $Frameworks/modules
echo "Copying all GDK Pixbuf loaders ..."
cp -R $GTKSTACK_ROOT/lib/gdk-pixbuf-2.0/2.10.0/loaders/*.so $Frameworks/modules
# charset alias file
@@ -265,9 +267,9 @@ cp -R $GTKSTACK_ROOT/lib/charset.alias $Resources
# generate new Pango module file
cat > pangorc <<EOF
[Pango]
-ModulesPath=$GTKSTACK_ROOT/lib/pango/1.6.0/modules
+ModulesPath=$GTKSTACK_ROOT/lib/pango/1.8.0/modules
EOF
-env PANGO_RC_FILE=pangorc $GTKSTACK_ROOT/bin/pango-querymodules | sed "s?$GTKSTACK_ROOT/lib/pango/1.6.0/modules/?@executable_path/../lib/modules/?" > $Resources/pango.modules
+env PANGO_RC_FILE=pangorc $GTKSTACK_ROOT/bin/pango-querymodules | sed "s?$GTKSTACK_ROOT/lib/pango/1.8.0/modules/?@executable_path/../lib/modules/?" > $Resources/pango.modules
rm pangorc
# generate a new GDK pixbufs loaders file
@@ -308,6 +310,8 @@ cp $BUILD_ROOT/libs/surfaces/control_protocol/libardourcp*.dylib $Frameworks
# Panners
cp $BUILD_ROOT/libs/panners/*/lib*.dylib $Panners
+# Backends
+cp $BUILD_ROOT/libs/backends/*/lib*.dylib $Backends
# Export Formats/Presets
for f in $BUILD_ROOT/../export/*.preset $BUILD_ROOT/../export/*.format ; do
@@ -347,7 +351,7 @@ cp $ARDOURSTACK_ROOT/lib/suil-0/lib* $Frameworks
while [ true ] ; do
missing=false
- for file in $APPROOT/MacOS/* $Frameworks/* $Frameworks/modules/* $Panners/*.dylib $Surfaces/*.dylib $Plugins/*.so ; do
+ for file in $APPROOT/MacOS/* $Frameworks/* $Frameworks/modules/* $Panners/*.dylib $Backends/*.dylib $Surfaces/*.dylib $Plugins/*.so ; do
if ! file $file | grep -qs Mach-O ; then
continue
fi
@@ -405,6 +409,7 @@ cp -r ../../gtk2_ardour/pixmaps $Resources
# shared stuff
cp -R ../../gtk2_ardour/splash.png $Shared
+cp -R ../../gtk2_ardour/small-splash.png $Shared
cp -R ../../gtk2_ardour/ArdourMono.ttf $Shared
# go through and recursively remove any .svn dirs in the bundle
@@ -433,7 +438,7 @@ done
echo "Fixing up library names ..."
# now do the same for all the libraries we include
-for libdir in $Frameworks $Frameworks/modules $Surfaces $Panners ; do
+for libdir in $Frameworks $Frameworks/modules $Surfaces $Panners $Backends ; do
libbase=`basename $libdir`
diff --git a/wscript b/wscript
index 2c63cab19c..b786136f6f 100644
--- a/wscript
+++ b/wscript
@@ -8,7 +8,7 @@ import subprocess
import sys
MAJOR = '3'
-MINOR = '4'
+MINOR = '5'
VERSION = MAJOR + '.' + MINOR
APPNAME = 'Ardour' + MAJOR
@@ -68,7 +68,7 @@ def fetch_gcc_version (CC):
return version
def fetch_git_revision ():
- cmd = "LANG= git describe --tags HEAD"
+ cmd = "git describe --tags HEAD"
output = subprocess.Popen(cmd, shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE).communicate()[0].splitlines()
rev = output[0].decode('utf-8')
return rev
@@ -615,8 +615,6 @@ def configure(conf):
if Options.options.boost_sp_debug:
conf.env.append_value('CXXFLAGS', '-DBOOST_SP_ENABLE_DEBUG_HOOKS')
- autowaf.check_header(conf, 'cxx', 'jack/session.h', define="JACK_SESSION", mandatory = False)
-
conf.check_cxx(fragment = "#include <boost/version.hpp>\nint main(void) { return (BOOST_VERSION >= 103900 ? 0 : 1); }\n",
execute = "1",
mandatory = True,
@@ -664,8 +662,6 @@ def configure(conf):
if opts.lxvst:
conf.define('LXVST_SUPPORT', 1)
conf.env['LXVST_SUPPORT'] = True
- if bool(conf.env['JACK_SESSION']):
- conf.define('HAVE_JACK_SESSION', 1)
conf.define('WINDOWS_KEY', opts.windows_key)
conf.env['PROGRAM_NAME'] = opts.program_name
if opts.rt_alloc_debug:
@@ -719,7 +715,6 @@ const char* const ardour_config_info = "\\n\\
write_config_text('FLAC', conf.is_defined('HAVE_FLAC'))
write_config_text('FPU optimization', opts.fpu_optimization)
write_config_text('Freedesktop files', opts.freedesktop)
- write_config_text('JACK session support', conf.is_defined('JACK_SESSION'))
write_config_text('LV2 UI embedding', conf.is_defined('HAVE_SUIL'))
write_config_text('LV2 support', conf.is_defined('LV2_SUPPORT'))
write_config_text('LXVST support', conf.is_defined('LXVST_SUPPORT'))