diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-10-09 14:00:42 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-10-09 14:00:42 -0400 |
commit | 2a6a16f980ff9181b138f7a30aedfbde4426a591 (patch) | |
tree | d86752508bbd033be18301796e7d0c571a4fe1c0 /gtk2_ardour | |
parent | 66aa6dfc8ecdb7591768bc45866a8c2b0d77e767 (diff) | |
parent | 465b800d8b7dc0d9e0f92a16c6fcae29d2bbd544 (diff) |
merge with master, fixing conflicts in 3 wscript files
Diffstat (limited to 'gtk2_ardour')
32 files changed, 3392 insertions, 2991 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 5dde7f977e..8205290590 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -113,6 +113,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" @@ -160,7 +161,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) @@ -195,6 +195,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)) @@ -206,7 +207,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); @@ -217,7 +217,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) } ui_config = new UIConfiguration(); - _audio_midi_setup = new EngineControl; editor = 0; mixer = 0; @@ -352,6 +351,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); @@ -365,9 +365,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 (); @@ -406,58 +403,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 @@ -485,13 +436,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); @@ -586,6 +537,10 @@ ARDOUR_UI::post_engine () ARDOUR_UI::~ARDOUR_UI () { + if (ui_config->dirty()) { + ui_config->save_state(); + } + delete keyboard; delete editor; delete mixer; @@ -762,8 +717,8 @@ ARDOUR_UI::check_announcements () #endif } -void -ARDOUR_UI::startup () +int +ARDOUR_UI::starting () { Application* app = Application::instance (); char *nsm_url; @@ -825,10 +780,33 @@ 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 (ArdourStartup::required()) { + ArdourStartup s; + s.present (); + main().run(); + s.hide (); + switch (s.response ()) { + case Gtk::RESPONSE_REJECT: + return -1; + default: + break; + } + } + + /* we need to create this early because it may need to set the + * audio backend end up. + */ + + audio_midi_setup.get (true); + + /* go get a session */ + + if (get_session_parameters (false, ARDOUR_COMMAND_LINE::new_session, ARDOUR_COMMAND_LINE::load_template)) { + return -1; + } } use_config (); @@ -843,6 +821,7 @@ ARDOUR_UI::startup () _status_bar_visibility.update (); BootMessage (string_compose (_("%1 is ready for use"), PROGRAM_NAME)); + return 0; } void @@ -1156,7 +1135,6 @@ ARDOUR_UI::update_sample_rate (framecnt_t) } } } - sample_rate_label.set_markup (buf); } @@ -1860,7 +1838,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 */ @@ -1910,7 +1888,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 */ @@ -2482,7 +2460,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; @@ -2498,13 +2476,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); @@ -2512,16 +2490,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)) { @@ -2557,6 +2535,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 @@ -2567,6 +2546,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 */ @@ -2580,6 +2564,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()) { @@ -2602,34 +2600,35 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri } else { session_path = ""; session_name = ""; - } - - 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 (); + session_dialog.clear_given (); } - 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; } @@ -2646,8 +2645,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; } @@ -2664,12 +2663,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)); @@ -2681,6 +2680,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); @@ -2696,12 +2696,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 @@ -2709,10 +2704,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; @@ -2723,7 +2719,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 { @@ -2738,6 +2734,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 = ""; } } @@ -2830,22 +2832,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; @@ -3804,6 +3796,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 ()) { @@ -4136,41 +4129,12 @@ 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_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: @@ -4179,3 +4143,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 0ca8cde907..8f4432f8e2 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -83,7 +83,6 @@ class AddRouteDialog; class AddVideoDialog; class VideoTimeLine; class SystemExec; -class ArdourStartup; class ArdourKeyboard; class AudioClock; class BigClockWindow; @@ -98,6 +97,7 @@ class Mixer_UI; class PublicEditor; class RCOptionEditor; class RouteParams_UI; +class SessionDialog; class SessionOptionEditor; class ShuttleControl; class Splash; @@ -153,7 +153,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. @@ -312,11 +312,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 (); @@ -331,8 +330,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); @@ -603,6 +601,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 */ @@ -670,8 +669,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; @@ -749,8 +746,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..251fc8f6fc 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -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 6b2c9da6fa..0e28900450 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -29,10 +29,6 @@ #include "ardour/rc_configuration.h" #include "ardour/session.h" -#ifdef HAVE_LIBLO -#include "ardour/osc.h" -#endif - #include "audio_clock.h" #include "ardour_ui.h" #include "actions.h" @@ -60,7 +56,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 +338,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") { @@ -465,7 +451,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_ops.cc b/gtk2_ardour/editor_ops.cc index 93a53dd1d3..6ada12220a 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -2108,7 +2108,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/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index 65fa7227a7..dfd24af739 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -48,6 +48,7 @@ #include "ardour_ui.h" #include "engine_dialog.h" #include "gui_thread.h" +#include "utils.h" #include "i18n.h" using namespace std; @@ -78,20 +79,147 @@ EngineControl::EngineControl () , 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 (); + /* the backend combo is the one thing that is ALWAYS visible + */ + + 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); + + /* pack it in */ + + basic_hbox.pack_start (basic_packer, false, false); + + /* latency tab */ + + /* latency measurement tab */ + + lm_title.set_markup (string_compose ("<span size=\"large\" weight=\"bold\">%1</span>", _("Latency Measurement Tool"))); + + row = 0; + lm_table.set_row_spacings (12); + + lm_table.attach (lm_title, 0, 2, row, row+1, xopt, (AttachOptions) 0); + row++; + + Gtk::Label* preamble; + + 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>")); + + lm_table.attach (*preamble, 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 (_("Select two channels below and connect them using a cable or (less ideally) a speaker and microphone.")); + + lm_table.attach (*preamble, 0, 2, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0); + row++; + + label = manage (new Label (_("Output channel"))); + lm_table.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0); + + 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); + ++row; + + label = manage (new Label (_("Input channel"))); + lm_table.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0); + + 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); + ++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_use_button.signal_clicked().connect (sigc::mem_fun (*this, &EngineControl::use_latency_button_clicked)); + lm_use_button.set_sensitive (false); + + 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); + 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 (lm_use_button, 0, 2, row, row+1, xopt, (AttachOptions) 0); + ++row; + + lm_results.set_markup ("<i>No measurement results yet</i>"); + + lm_vbox.set_border_width (12); + lm_vbox.pack_start (lm_table, false, false); + + /* 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 (lm_vbox, _("Latency"))); + notebook.set_border_width (12); + + notebook.set_tab_pos (POS_RIGHT); + notebook.show_all (); + + notebook.set_name ("SettingsNotebook"); + + /* packup the notebook */ get_vbox()->set_border_width (12); get_vbox()->pack_start (notebook); + /* 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)); + control_app_button.signal_clicked().connect (mem_fun (*this, &EngineControl::control_app_button_clicked)); manage_control_app_sensitivity (); @@ -103,12 +231,31 @@ EngineControl::EngineControl () XMLNode* audio_setup = ARDOUR::Config->extra_xml ("AudioMIDISetup"); - /* push a change as if we altered the backend */ + 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()); + backend_changed (); if (audio_setup) { set_state (*audio_setup); - } + } + + /* Connect to signals */ + + 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)); + + 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)); + + notebook.signal_switch_page().connect (sigc::mem_fun (*this, &EngineControl::on_switch_page)); + + no_push = false; } void @@ -139,36 +286,58 @@ EngineControl::on_response (int response_id) void EngineControl::build_notebook () { - using namespace Notebook_Helpers; Label* label; - vector<string> strings; - int row = 0; + AttachOptions xopt = AttachOptions (FILL|EXPAND); - 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); + /* 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); + + if (_have_control) { + build_full_control_notebook (); + } else { + build_no_control_notebook (); } - set_popdown_strings (backend_combo, strings); - backend_combo.set_active_text (strings.front()); + basic_vbox.pack_start (basic_hbox, false, false); - basic_packer.set_spacings (6); - basic_packer.set_border_width (12); - basic_packer.set_homogeneous (true); + 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); + } - row = 0; + 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 - 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++; + /* start packing it up */ - 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++; + 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); @@ -236,126 +405,46 @@ EngineControl::build_notebook () basic_packer.attach (*label, 2, 3, row, row+1, xopt, (AttachOptions) 0); ++row; - 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 measurement tab */ - - lm_title.set_markup (string_compose ("<span size=\"large\" weight=\"bold\">%1</span>", _("Latency Measurement Tool"))); - - row = 0; - lm_table.set_row_spacings (12); - - lm_table.attach (lm_title, 0, 2, row, row+1, xopt, (AttachOptions) 0); - row++; - - Gtk::Label* preamble; - - 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>")); +} - lm_table.attach (*preamble, 0, 2, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0); - row++; +void +EngineControl::build_no_control_notebook () +{ + boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend(); + assert (backend); - 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.")); + 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()); - lm_table.attach (*preamble, 0, 2, row, row+1, AttachOptions(FILL|EXPAND), (AttachOptions) 0); + 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++; - label = manage (new Label (_("Output channel"))); - lm_table.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0); - - 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); - ++row; - - label = manage (new Label (_("Input channel"))); - lm_table.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0); - - 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); - ++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_use_button.signal_clicked().connect (sigc::mem_fun (*this, &EngineControl::use_latency_button_clicked)); - lm_use_button.set_sensitive (false); - - - 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); - 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++; + } - 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; + 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)); - 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); + basic_packer.attach (connect_disconnect_button, 0, 2, row, row+1, FILL, AttachOptions (0)); row++; - - lm_table.attach (lm_use_button, 0, 2, row, row+1, xopt, (AttachOptions) 0); - ++row; - - lm_results.set_markup ("<i>No measurement results yet</i>"); - - lm_vbox.set_border_width (12); - lm_vbox.pack_start (lm_table, false, false); - - /* 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 (lm_vbox, _("Latency"))); - notebook.set_border_width (12); - - notebook.set_tab_pos (POS_RIGHT); - notebook.show_all (); - - notebook.set_name ("SettingsNotebook"); - - /* Connect to signals */ - - 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)); - - 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)); - - 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 () @@ -471,6 +560,11 @@ EngineControl::refresh_midi_display () } void +EngineControl::update_sensitivity () +{ +} + +void EngineControl::backend_changed () { if (ignore_changes) { @@ -485,16 +579,29 @@ EngineControl::backend_changed () 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(); - driver_combo.set_sensitive (true); - set_popdown_strings (driver_combo, drivers); - driver_combo.set_active_text (drivers.front()); - driver_changed (); + + 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 (); } @@ -540,33 +647,33 @@ EngineControl::list_devices () 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); + + update_sensitivity (); - /* changing the text in the combo will trigger device_changed() - which should populate the parameter controls - */ - - device_combo.set_active_text (available_devices.front()); + { + 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 (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); + 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 () { @@ -595,59 +702,95 @@ EngineControl::device_changed () 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++; + { + PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1); - /* sample rates */ - - string desired; + /* don't allow programmatic change to combos to cause a + recursive call to this method. + */ + + /* sample rates */ + + string desired; + + vector<float> sr; - 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 (_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); } - } - if (!s.empty()) { - set_popdown_strings (sample_rate_combo, s); - - if (desired.empty()) { - sample_rate_combo.set_active_text (s.front()); + 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_active_text (desired); + sample_rate_combo.set_sensitive (false); } - } 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)); - } + /* 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); + } - 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. + /* XXX theoretically need to set min + max channel counts here */ + + manage_control_app_sensitivity (); } - manage_control_app_sensitivity (); - - ignore_changes--; - /* pick up any saved state for this device */ maybe_display_saved_state (); @@ -658,18 +801,6 @@ EngineControl::device_changed () } 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 @@ -774,6 +905,10 @@ EngineControl::get_saved_state_for_currently_displayed_backend_and_device () EngineControl::State* EngineControl::save_state () { + if (!_have_control) { + return 0; + } + bool existing = true; State* state = get_saved_state_for_currently_displayed_backend_and_device (); @@ -808,10 +943,15 @@ EngineControl::store_state (State& state) void EngineControl::maybe_display_saved_state () { + if (!_have_control) { + return; + } + State* state = get_saved_state_for_currently_displayed_backend_and_device (); if (state) { - ignore_changes++; + 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)); } @@ -822,7 +962,6 @@ EngineControl::maybe_display_saved_state () show_buffer_duration (); input_latency.set_value (state->input_latency); output_latency.set_value (state->output_latency); - ignore_changes--; } } @@ -952,6 +1091,7 @@ EngineControl::set_state (const XMLNode& root) /* 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); @@ -971,6 +1111,10 @@ EngineControl::set_state (const XMLNode& root) 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) { @@ -992,47 +1136,60 @@ EngineControl::push_state_to_backend (bool start) 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 (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; + } + + /* zero-requested channels means "all available" */ - if (get_device_name() != backend->device_name()) { - change_device = true; - } + 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_rate() != backend->sample_rate()) { + 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_driver = true; + change_device = true; 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; } @@ -1175,26 +1332,28 @@ EngineControl::post_push () * 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; + 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 (); } - - /* 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 */ @@ -1482,3 +1641,42 @@ 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 (); + } +} diff --git a/gtk2_ardour/engine_dialog.h b/gtk2_ardour/engine_dialog.h index fcbdfe4cb8..ac17814a5f 100644 --- a/gtk2_ardour/engine_dialog.h +++ b/gtk2_ardour/engine_dialog.h @@ -75,8 +75,11 @@ 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; @@ -106,9 +109,9 @@ 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 (); @@ -119,7 +122,6 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList { 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; @@ -174,6 +176,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,6 +185,7 @@ 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 (); @@ -190,9 +195,16 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList { 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 (); }; #endif /* __gtk2_ardour_engine_dialog_h__ */ diff --git a/gtk2_ardour/export_video_dialog.cc b/gtk2_ardour/export_video_dialog.cc index 7f6fcc2a8a..b3a97f20b9 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 <glib/gstdio.h> diff --git a/gtk2_ardour/gtk_pianokeyboard.c b/gtk2_ardour/gtk_pianokeyboard.c index 1e5768040e..f3897e3d44 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> @@ -732,13 +732,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 f55405a84d..da2677b296 100644 --- a/gtk2_ardour/main.cc +++ b/gtk2_ardour/main.cc @@ -37,8 +37,6 @@ #include "pbd/boost_debug.h" #endif -#include <jack/jack.h> - #include "ardour/revision.h" #include "ardour/version.h" #include "ardour/ardour.h" @@ -81,17 +79,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); @@ -530,6 +521,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 9e2140fd10..a8ec7d5c79 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 2a031318ff..9c03bd5c48 100644 --- a/gtk2_ardour/plugin_selector.cc +++ b/gtk2_ardour/plugin_selector.cc @@ -537,13 +537,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; } } @@ -555,7 +555,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; @@ -573,13 +573,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/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\">>24 hrs</span>" msgstr "Disk: <span foreground=\"green\">>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 & 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 & 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/processor_box.cc b/gtk2_ardour/processor_box.cc index 07781fe7ee..1ed7c39312 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -2151,7 +2151,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; } diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc index ed9ffda4ef..f9336cee31 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) ); @@ -1464,12 +1464,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 2640af8379..98df970e39 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> @@ -1473,7 +1473,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 Binary files differnew file mode 100644 index 0000000000..045062036c --- /dev/null +++ b/gtk2_ardour/small-splash.png diff --git a/gtk2_ardour/startup.cc b/gtk2_ardour/startup.cc index 266a7e2a27..7bb9b2e295 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 () { @@ -506,107 +373,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 +433,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 9f18e85b64..3963bb6cd3 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 <glib/gstdio.h> diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc index bbce202ad1..1772c7a7c7 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> @@ -401,7 +402,7 @@ emulate_key_event (Gtk::Widget* w, unsigned int keyval) ev.state = 0; ev.keyval = keyval; ev.length = 0; - ev.string = (const gchar*) ""; + ev.string = const_cast<gchar*> (""); ev.hardware_keycode = keymapkey[0].keycode; ev.group = keymapkey[0].group; g_free(keymapkey); @@ -862,3 +863,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 5d7bf000ea..a1a54898b5 100644 --- a/gtk2_ardour/utils.h +++ b/gtk2_ardour/utils.h @@ -86,4 +86,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 ae4d5faacc..6b06f91744 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/window_manager.cc b/gtk2_ardour/window_manager.cc index 3ab9e1adff..4a44dc4691 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 diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index a02e27f83d..79631e584e 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -203,6 +203,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', |