diff options
272 files changed, 23070 insertions, 3666 deletions
diff --git a/MSVCardour3/Ardour3.vcproj b/MSVCardour3/Ardour3.vcproj index 0436477d18..10ae1a085a 100644 --- a/MSVCardour3/Ardour3.vcproj +++ b/MSVCardour3/Ardour3.vcproj @@ -656,7 +656,7 @@ > </File> <File - RelativePath="..\gtk2_ardour\insert_time_dialog.cc" + RelativePath="..\gtk2_ardour\insert_remove_time_dialog.cc" > </File> <File @@ -1614,7 +1614,7 @@ > </File> <File - RelativePath="..\gtk2_ardour\insert_time_dialog.h" + RelativePath="..\gtk2_ardour\insert_remove_time_dialog.h" > </File> <File diff --git a/cfgtool/cfgtool.cc b/cfgtool/cfgtool.cc index 23f7369f52..3492f8b035 100644 --- a/cfgtool/cfgtool.cc +++ b/cfgtool/cfgtool.cc @@ -37,6 +37,9 @@ int main (int argc, char **argv) { cfg->remove_nodes_and_delete ("name", "updates-url"); cfg->remove_nodes_and_delete ("name", "freesound-download-dir"); // user specific + XMLNode* meta = state.child ("Metadata"); + meta->remove_nodes ("user_name"); + XMLTree tree; tree.set_root (&state); diff --git a/cfgtool/wscript b/cfgtool/wscript index e5166eb5dc..04dda4f183 100644 --- a/cfgtool/wscript +++ b/cfgtool/wscript @@ -14,7 +14,7 @@ def configure(conf): def build(bld): if bld.env['build_target'] == 'mingw': - return; + return; obj = bld (features = 'cxx c cxxprogram') obj.source = 'cfgtool.cc' diff --git a/gtk2_ardour/add_video_dialog.cc b/gtk2_ardour/add_video_dialog.cc index 44f61ec533..4cb7f7668b 100644 --- a/gtk2_ardour/add_video_dialog.cc +++ b/gtk2_ardour/add_video_dialog.cc @@ -288,6 +288,7 @@ static bool check_video_file_extension(std::string file) ".webm" , ".WEBM" , ".wmv" , ".WMV" , ".ts" , ".TS" , + ".mxf" , ".MXF" , }; for (size_t n = 0; n < sizeof(suffixes)/sizeof(suffixes[0]); ++n) { @@ -396,8 +397,7 @@ AddVideoDialog::file_selection_changed () if (chooser.get_filename().size() > 0) { std::string path = chooser.get_filename(); bool ok = - check_video_file_extension(path) - && Glib::file_test(path.c_str(), Glib::FILE_TEST_IS_REGULAR | Glib::FILE_TEST_IS_SYMLINK) + Glib::file_test(path.c_str(), Glib::FILE_TEST_IS_REGULAR | Glib::FILE_TEST_IS_SYMLINK) && !Glib::file_test(path.c_str(), Glib::FILE_TEST_IS_DIR); set_action_ok(ok); if (ok) { @@ -416,8 +416,7 @@ AddVideoDialog::file_activated () std::string path = chooser.get_filename(); // TODO check docroot -> set import options bool ok = - check_video_file_extension(path) - && Glib::file_test(path.c_str(), Glib::FILE_TEST_IS_REGULAR | Glib::FILE_TEST_IS_SYMLINK) + Glib::file_test(path.c_str(), Glib::FILE_TEST_IS_REGULAR | Glib::FILE_TEST_IS_SYMLINK) && !Glib::file_test(path.c_str(), Glib::FILE_TEST_IS_DIR); if (ok) { Gtk::Dialog::response(RESPONSE_ACCEPT); diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index 3fe9bb9ea5..086d2b88d7 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -375,7 +375,7 @@ <menuitem action='track-mute-toggle'/> <separator/> <menuitem action='insert-time'/> - <menuitem action='cut-time'/> + <menuitem action='remove-time'/> <menuitem action="move-selected-tracks-up"/> <menuitem action="move-selected-tracks-down"/> <menu action='TrackHeightMenu'> diff --git a/gtk2_ardour/ardour_dropdown.cc b/gtk2_ardour/ardour_dropdown.cc index 6ad1f7c11e..29efe34da3 100644 --- a/gtk2_ardour/ardour_dropdown.cc +++ b/gtk2_ardour/ardour_dropdown.cc @@ -135,7 +135,7 @@ ArdourDropdown::clear_items () } void -ArdourDropdown::AddMenuElem (Menu_Helpers::MenuElem e) +ArdourDropdown::AddMenuElem (Menu_Helpers::Element e) { using namespace Menu_Helpers; diff --git a/gtk2_ardour/ardour_dropdown.h b/gtk2_ardour/ardour_dropdown.h index c1cf11917e..7069768610 100644 --- a/gtk2_ardour/ardour_dropdown.h +++ b/gtk2_ardour/ardour_dropdown.h @@ -40,7 +40,7 @@ class ArdourDropdown : public ArdourButton bool on_scroll_event (GdkEventScroll*); void clear_items (); - void AddMenuElem (Gtk::Menu_Helpers::MenuElem e); + void AddMenuElem (Gtk::Menu_Helpers::Element e); private: Gtk::Menu _menu; diff --git a/gtk2_ardour/ardour_knob.cc b/gtk2_ardour/ardour_knob.cc index 0397b85c7b..17fbff2f7e 100644 --- a/gtk2_ardour/ardour_knob.cc +++ b/gtk2_ardour/ardour_knob.cc @@ -563,7 +563,7 @@ ArdourKnob::add_elements (Element e) KnobPersistentTooltip::KnobPersistentTooltip (Gtk::Widget* w) - : PersistentTooltip (w, 3) + : PersistentTooltip (w, true, 3) , _dragging (false) { } diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index e371d58b7f..2f4d19c2a6 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -28,6 +28,8 @@ #include <cerrno> #include <fstream> +#include <stdarg.h> + #ifndef PLATFORM_WINDOWS #include <sys/resource.h> #endif @@ -55,6 +57,8 @@ #include "pbd/file_utils.h" #include "pbd/localtime_r.h" #include "pbd/pthread_utils.h" +#include "pbd/replace_all.h" +#include "pbd/xml++.h" #include "gtkmm2ext/application.h" #include "gtkmm2ext/bindings.h" @@ -181,6 +185,36 @@ ask_about_configuration_copy (string const & old_dir, string const & new_dir, in return (msg.run() == Gtk::RESPONSE_YES); } +static void +libxml_generic_error_func (void* /* parsing_context*/, + const char* msg, + ...) +{ + va_list ap; + char buf[2048]; + + va_start (ap, msg); + vsnprintf (buf, sizeof (buf), msg, ap); + error << buf << endmsg; + va_end (ap); +} + +static void +libxml_structured_error_func (void* /* parsing_context*/, + xmlErrorPtr err) +{ + string msg = err->message; + + replace_all (msg, "\n", ""); + + error << X_("XML error: ") << msg << " in " << err->file << " at line " << err->line; + if (err->int2) { + error << ':' << err->int2; + } + error << endmsg; +} + + ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir, UIConfiguration* uic) : Gtkmm2ext::UI (PROGRAM_NAME, argcp, argvp) @@ -197,6 +231,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir, UIConfi , nsm (0) , _was_dirty (false) , _mixer_on_top (false) + , _initial_verbose_plugin_scan (false) , first_time_engine_run (true) , roll_controllable (new TransportControllable ("transport roll", *this, TransportControllable::Roll)) , stop_controllable (new TransportControllable ("transport stop", *this, TransportControllable::Stop)) @@ -214,6 +249,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir, UIConfi , error_alert_button ( ArdourButton::just_led_default_elements ) , editor_meter(0) , editor_meter_peak_display() + , session_selector_window (0) , open_session_selector (0) , _numpad_locate_happening (false) , _session_is_new (false) @@ -258,6 +294,11 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir, UIConfi theArdourUI = this; } + /* stop libxml from spewing to stdout/stderr */ + + xmlSetGenericErrorFunc (this, libxml_generic_error_func); + xmlSetStructuredErrorFunc (this, libxml_structured_error_func); + ui_config->ParameterChanged.connect (sigc::mem_fun (*this, &ARDOUR_UI::parameter_changed)); boost::function<void (string)> pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1)); ui_config->map_parameters (pc); @@ -754,6 +795,8 @@ ARDOUR_UI::check_announcements () #ifdef __APPLE__ _annc_filename = PROGRAM_NAME "_announcements_osx_"; +#elif defined PLATFORM_WINDOWS + _annc_filename = PROGRAM_NAME "_announcements_windows_"; #else _annc_filename = PROGRAM_NAME "_announcements_linux_"; #endif @@ -875,10 +918,12 @@ ARDOUR_UI::starting () } else { if (brand_new_user) { + _initial_verbose_plugin_scan = true; ArdourStartup s; s.present (); main().run(); s.hide (); + _initial_verbose_plugin_scan = false; switch (s.response ()) { case Gtk::RESPONSE_OK: break; @@ -3169,6 +3214,9 @@ ARDOUR_UI::load_session (const std::string& path, const std::string& snap_name, msg.set_position (Gtk::WIN_POS_CENTER); pop_back_splash (msg); msg.present (); + + dump_errors (cerr); + (void) msg.run (); msg.hide (); @@ -4208,7 +4256,7 @@ ARDOUR_UI::plugin_scan_dialog (std::string type, std::string plugin, bool can_ca } const bool cancelled = PluginManager::instance().cancelled(); - if (type != X_("closeme") && !ui_config->get_show_plugin_scan_window()) { + if (type != X_("closeme") && (!ui_config->get_show_plugin_scan_window()) && !_initial_verbose_plugin_scan) { if (cancelled && scan_dlg->is_mapped()) { scan_dlg->hide(); gui_idle_handler(); @@ -4864,3 +4912,9 @@ ARDOUR_UI::audioengine_became_silent () break; } } + +void +ARDOUR_UI::hide_application () +{ + Application::instance ()-> hide (); +} diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index ed8da6d6be..722a0bf596 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -198,8 +198,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr Gtk::Tooltips& tooltips() { return _tooltips; } - Gtk::HBox& editor_transport_box() { return _editor_transport_box; } - static PublicEditor* _instance; /** Emitted frequently with the audible frame, false, and the edit point as @@ -310,6 +308,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr int disconnect_from_engine (); int reconnect_to_engine (); + void hide_application (); protected: friend class PublicEditor; @@ -337,6 +336,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr NSM_Client* nsm; bool _was_dirty; bool _mixer_on_top; + bool _initial_verbose_plugin_scan; bool first_time_engine_run; void goto_editor_window (); @@ -395,7 +395,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr Gtkmm2ext::TearOff* transport_tearoff; Gtk::Frame transport_frame; Gtk::HBox transport_tearoff_hbox; - Gtk::HBox _editor_transport_box; Gtk::HBox transport_hbox; Gtk::Fixed transport_base; Gtk::Fixed transport_button_base; diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index e813691829..c7fb167b7c 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -454,10 +454,6 @@ ARDOUR_UI::setup_transport () transport_tearoff_hbox.pack_start (*time_info_box, false, false); } - if (ARDOUR::Profile->get_small_screen()) { - transport_tearoff_hbox.pack_start (_editor_transport_box, false, false); - } - if (!ARDOUR::Profile->get_trx()) { transport_tearoff_hbox.pack_start (alert_box, false, false); transport_tearoff_hbox.pack_start (meter_box, false, false); diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index 0fbb33a7a8..7d7ee7d60b 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -376,14 +376,28 @@ ARDOUR_UI::goto_mixer_window () void ARDOUR_UI::toggle_mixer_window () { - Glib::RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("toggle-mixer")); - if (!act) { - return; + /* thse windows are created in ARDOUR_UI::setup_windows() + * it should be impossible to get here with any of them being NULL + */ + assert (editor && mixer && meterbridge); + + bool show = false; + bool obscuring = false; + + if (mixer->not_visible ()) { + show = true; + } + else if ( (!editor->not_visible () && ARDOUR_UI_UTILS::windows_overlap (editor, mixer)) + || (!meterbridge->not_visible () && ARDOUR_UI_UTILS::windows_overlap (meterbridge, mixer)) + ) { + obscuring = true; } - Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act); + if (obscuring && (editor->property_has_toplevel_focus() || meterbridge->property_has_toplevel_focus())) { + show = true; + } - if (tact->get_active()) { + if (show) { goto_mixer_window (); } else { mixer->hide (); @@ -393,15 +407,28 @@ ARDOUR_UI::toggle_mixer_window () void ARDOUR_UI::toggle_meterbridge () { - Glib::RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("toggle-meterbridge")); - if (!act) { - return; + assert (editor && mixer && meterbridge); + + bool show = false; + bool obscuring = false; + + if (meterbridge->not_visible ()) { + show = true; + } + else if ( (!editor->not_visible() && ARDOUR_UI_UTILS::windows_overlap (editor, meterbridge)) + || (!mixer->not_visible () && ARDOUR_UI_UTILS::windows_overlap (meterbridge, mixer)) + ) { + obscuring = true; } - Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act); + if (obscuring && (editor->property_has_toplevel_focus() || mixer->property_has_toplevel_focus())) { + show = true; + } - if (tact->get_active()) { + if (show) { meterbridge->show_window (); + meterbridge->present (); + meterbridge->raise (); } else { meterbridge->hide_window (NULL); } @@ -411,79 +438,37 @@ void ARDOUR_UI::toggle_editor_mixer () { bool obscuring = false; - /* currently, if windows are on different - screens then we do nothing; but in the - future we may want to bring the window - to the front or something, so I'm leaving this - variable for future use - */ - bool same_screen = true; - - if (editor && mixer) { - - /* remeber: Screen != Monitor (Screen is a separately rendered - * continuous geometry that make include 1 or more monitors. - */ - - if (editor->get_screen() != mixer->get_screen() && (mixer->get_screen() != 0) && (editor->get_screen() != 0)) { - // different screens, so don't do anything - same_screen = false; - } else { - // they are on the same screen, see if they are obscuring each other - - gint ex, ey, ew, eh; - gint mx, my, mw, mh; - - editor->get_position (ex, ey); - editor->get_size (ew, eh); - - mixer->get_position (mx, my); - mixer->get_size (mw, mh); - - GdkRectangle e; - GdkRectangle m; - GdkRectangle r; - - e.x = ex; - e.y = ey; - e.width = ew; - e.height = eh; - - m.x = mx; - m.y = my; - m.width = mw; - m.height = mh; - - if (gdk_rectangle_intersect (&e, &m, &r)) { - obscuring = true; - } - } - } - - if (mixer && !mixer->not_visible() && mixer->property_has_toplevel_focus()) { - if (obscuring && same_screen) { - goto_editor_window(); - } - } else if (editor && !editor->not_visible() && editor->property_has_toplevel_focus()) { - if (obscuring && same_screen) { - goto_mixer_window(); - } - } else if (mixer && mixer->not_visible()) { - if (obscuring && same_screen) { - goto_mixer_window (); - } - } else if (editor && editor->not_visible()) { - if (obscuring && same_screen) { - goto_editor_window (); - } - } else if (obscuring && same_screen) { - //it's unclear what to do here, so just do the opposite of what we did last time (old behavior) - if (_mixer_on_top) { + + if (editor && mixer) { + if (ARDOUR_UI_UTILS::windows_overlap (editor, mixer)) { + obscuring = true; + } + } + + if (mixer && !mixer->not_visible() && mixer->property_has_toplevel_focus()) { + if (obscuring) { + goto_editor_window(); + } + } else if (editor && !editor->not_visible() && editor->property_has_toplevel_focus()) { + if (obscuring) { + goto_mixer_window(); + } + } else if (mixer && mixer->not_visible()) { + if (obscuring) { + goto_mixer_window (); + } + } else if (editor && editor->not_visible()) { + if (obscuring) { + goto_editor_window (); + } + } else if (obscuring) { + //it's unclear what to do here, so just do the opposite of what we did last time (old behavior) + if (_mixer_on_top) { goto_editor_window (); } else { goto_mixer_window (); } - } + } } void diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 3f0bb44336..4455e72832 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -190,6 +190,7 @@ ARDOUR_UI::install_actions () common_actions = ActionGroup::create (X_("Common")); ActionManager::register_action (common_actions, X_("Quit"), _("Quit"), (hide_return (sigc::mem_fun(*this, &ARDOUR_UI::finish)))); + ActionManager::register_action (common_actions, X_("Hide"), _("Hide"), sigc::mem_fun (*this, &ARDOUR_UI::hide_application)); /* windows visibility actions */ @@ -201,9 +202,9 @@ ARDOUR_UI::install_actions () if (Profile->get_mixbus()) ActionManager::register_action (common_actions, X_("show-ui-prefs"), _("Show more UI preferences"), sigc::mem_fun (*this, &ARDOUR_UI::show_ui_prefs)); - 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-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_action (common_actions, X_("toggle-meterbridge"), S_("Window|Meterbridge"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_meterbridge)); ActionManager::register_action (common_actions, X_("reattach-all-tearoffs"), _("Reattach All Tearoffs"), sigc::mem_fun (*this, &ARDOUR_UI::reattach_all_tearoffs)); @@ -220,7 +221,7 @@ if (Profile->get_mixbus()) ActionManager::register_action (common_actions, X_("Forums"), _("User Forums"), mem_fun(*this, &ARDOUR_UI::launch_forums)); ActionManager::register_action (common_actions, X_("Howto_Report"), _("How to report a bug"), mem_fun(*this, &ARDOUR_UI::launch_howto_report)); - act = ActionManager::register_action (common_actions, X_("Save"), _("Save"), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::save_state), string(""), false)); + act = ActionManager::register_action (common_actions, X_("Save"), _("Save"), sigc::hide_return (sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::save_state), string(""), false))); ActionManager::session_sensitive_actions.push_back (act); ActionManager::write_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/ardour_ui_mixer.cc b/gtk2_ardour/ardour_ui_mixer.cc index a2669f968d..56ecc057f0 100644 --- a/gtk2_ardour/ardour_ui_mixer.cc +++ b/gtk2_ardour/ardour_ui_mixer.cc @@ -46,7 +46,6 @@ ARDOUR_UI::create_mixer () } mixer->signal_window_state_event().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::main_window_state_event_handler), false)); - mixer->signal_unmap().connect (sigc::bind (sigc::ptr_fun (&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/toggle-mixer"))); return 0; } @@ -65,7 +64,6 @@ ARDOUR_UI::create_meterbridge () } meterbridge->signal_window_state_event().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::main_window_state_event_handler), false)); - meterbridge->signal_unmap().connect (sigc::bind (sigc::ptr_fun (&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/toggle-meterbridge"))); return 0; } diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index f63dd46401..0c59a66213 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -425,6 +425,9 @@ ARDOUR_UI::parameter_changed (std::string p) ArdourCanvas::WaveView::set_global_show_waveform_clipping (ARDOUR_UI::config()->get_show_waveform_clipping()); } else if (p == "font-scale") { ui_scale = config()->get_font_scale () / 102400.; + } else if (p == "waveform-cache-size") { + /* GUI option has units of megabytes; image cache uses units of bytes */ + ArdourCanvas::WaveView::set_image_cache_size (ARDOUR_UI::config()->get_waveform_cache_size() * 1048576); } } diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc index 345f4f79c3..b64e54e95e 100644 --- a/gtk2_ardour/audio_clock.cc +++ b/gtk2_ardour/audio_clock.cc @@ -65,13 +65,15 @@ const double AudioClock::x_leading_padding = 6.0; #define TXTSPAN "<span font-family=\"Sans\" foreground=\"white\">" AudioClock::AudioClock (const string& clock_name, bool transient, const string& widget_name, - bool allow_edit, bool follows_playhead, bool duration, bool with_info) + bool allow_edit, bool follows_playhead, bool duration, bool with_info, + bool accept_on_focus_out) : ops_menu (0) , _name (clock_name) , is_transient (transient) , is_duration (duration) , editable (allow_edit) , _follows_playhead (follows_playhead) + , _accept_on_focus_out (accept_on_focus_out) , _off (false) , em_width (0) , _edit_by_click_field (false) @@ -1688,7 +1690,7 @@ AudioClock::on_focus_out_event (GdkEventFocus* ev) bool ret = CairoWidget::on_focus_out_event (ev); if (editing) { - end_edit (false); + end_edit (_accept_on_focus_out); } return ret; diff --git a/gtk2_ardour/audio_clock.h b/gtk2_ardour/audio_clock.h index 10a24cd3ac..2a49d3a1ec 100644 --- a/gtk2_ardour/audio_clock.h +++ b/gtk2_ardour/audio_clock.h @@ -50,7 +50,8 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr }; AudioClock (const std::string& clock_name, bool is_transient, const std::string& widget_name, - bool editable, bool follows_playhead, bool duration = false, bool with_info = false); + bool editable, bool follows_playhead, bool duration = false, bool with_info = false, + bool accept_on_focus_out = false); ~AudioClock (); Mode mode() const { return _mode; } @@ -122,6 +123,7 @@ class AudioClock : public CairoWidget, public ARDOUR::SessionHandlePtr bool editable; /** true if this clock follows the playhead, meaning that certain operations are redundant */ bool _follows_playhead; + bool _accept_on_focus_out; bool _off; int em_width; bool _edit_by_click_field; diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc index eae66dbdc5..4f963a290d 100644 --- a/gtk2_ardour/audio_region_view.cc +++ b/gtk2_ardour/audio_region_view.cc @@ -92,7 +92,7 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Container *parent, RouteTimeAxis , trim_fade_in_drag_active(false) , trim_fade_out_drag_active(false) { - Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context()); + ARDOUR_UI::config()->ParameterChanged.connect (sigc::mem_fun (*this, &AudioRegionView::parameter_changed)); } AudioRegionView::AudioRegionView (ArdourCanvas::Container *parent, RouteTimeAxisView &tv, boost::shared_ptr<AudioRegion> r, double spu, @@ -113,7 +113,7 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Container *parent, RouteTimeAxis , trim_fade_in_drag_active(false) , trim_fade_out_drag_active(false) { - Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context()); + ARDOUR_UI::config()->ParameterChanged.connect (sigc::mem_fun (*this, &AudioRegionView::parameter_changed)); } AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_ptr<AudioRegion> other_region) @@ -134,7 +134,7 @@ AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_pt { init (true); - Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context()); + ARDOUR_UI::config()->ParameterChanged.connect (sigc::mem_fun (*this, &AudioRegionView::parameter_changed)); } void @@ -477,19 +477,23 @@ AudioRegionView::set_height (gdouble height) uint32_t wcnt = waves.size(); - for (uint32_t n = 0; n < wcnt; ++n) { - gdouble ht; + if (wcnt > 0) { - if (height < NAME_HIGHLIGHT_THRESH) { - ht = ((height - 2 * wcnt) / (double) wcnt); + gdouble ht; + + if (!ARDOUR_UI::config()->get_show_name_highlight() || (height < NAME_HIGHLIGHT_THRESH)) { + ht = height / (double) wcnt; } else { - ht = (((height - 2 * wcnt) - NAME_HIGHLIGHT_SIZE) / (double) wcnt); + ht = (height - NAME_HIGHLIGHT_SIZE) / (double) wcnt; + } + + for (uint32_t n = 0; n < wcnt; ++n) { + + gdouble yoff = floor (ht * n); + + waves[n]->set_height (ht); + waves[n]->set_y_position (yoff); } - - gdouble yoff = n * (ht + 1); - - waves[n]->set_height (ht); - waves[n]->set_y_position (yoff + 2); } if (gain_line) { @@ -1126,12 +1130,18 @@ AudioRegionView::create_one_wave (uint32_t which, bool /*direct*/) uint32_t nwaves = std::min (nchans, audio_region()->n_channels()); gdouble ht; + /* reduce waveview height by 2.0 to account for our frame */ + if (trackview.current_height() < NAME_HIGHLIGHT_THRESH) { - ht = ((trackview.current_height()) / (double) nchans); + ht = ((trackview.current_height() - 2.0) / (double) nchans); } else { - ht = ((trackview.current_height() - NAME_HIGHLIGHT_SIZE) / (double) nchans); + ht = ((trackview.current_height() - NAME_HIGHLIGHT_SIZE - 2.0) / (double) nchans); } + /* first waveview starts at 1.0, not 0.0 since that will overlap the + * frame + */ + gdouble yoff = which * ht; WaveView *wave = new WaveView (group, audio_region ()); diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index e5aa60d9ab..42b3dfa613 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -115,6 +115,7 @@ #include "note_base.h" #include "playlist_selector.h" #include "public_editor.h" +#include "quantize_dialog.h" #include "region_layering_order_editor.h" #include "rgb_macros.h" #include "rhythm_ferret.h" @@ -300,6 +301,8 @@ Editor::Editor () , _following_mixer_selection (false) , _control_point_toggled_on_press (false) , _stepping_axis_view (0) + , quantize_dialog (0) + , _main_menu_disabler (0) { constructed = false; @@ -809,6 +812,7 @@ Editor::~Editor() delete _track_canvas_viewport; delete _drags; delete nudge_clock; + delete quantize_dialog; } XMLNode* @@ -3121,11 +3125,7 @@ Editor::setup_toolbar () if (!ARDOUR::Profile->get_trx()) { hbox->pack_start (snap_box, false, false); - if ( !Profile->get_small_screen() || Profile->get_mixbus() ) { - hbox->pack_start (*nudge_box, false, false); - } else { - ARDOUR_UI::instance()->editor_transport_box().pack_start (*nudge_box, false, false); - } + hbox->pack_start (*nudge_box, false, false); } hbox->pack_start (panic_box, false, false); @@ -5688,13 +5688,18 @@ Editor::super_rapid_screen_update () } else { - if (!_dragging_playhead && _follow_playhead && _session->requested_return_frame() < 0 && !pending_visual_change.being_handled) { + if (!_dragging_playhead && _session->requested_return_frame() < 0 && !pending_visual_change.being_handled) { framepos_t const frame = playhead_cursor->current_frame (); double target = ((double)frame - (double)current_page_samples()/3.0); if (target <= 0.0) { target = 0.0; } - reset_x_origin (target); + // compare to EditorCursor::set_position() + double const old_pos = sample_to_pixel_unrounded (leftmost_frame); + double const new_pos = sample_to_pixel_unrounded (target); + if (rint (new_pos) != rint (old_pos)) { + reset_x_origin (pixel_to_sample (floor (new_pos))); + } } } diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 603103532f..9d0f83d040 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -119,6 +119,7 @@ class NoteBase; class PlaylistSelector; class PluginSelector; class ProgressReporter; +class QuantizeDialog; class RhythmFerret; class RulerDialog; class Selection; @@ -1262,8 +1263,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void do_insert_time (); void insert_time (framepos_t, framecnt_t, Editing::InsertTimeOption, bool, bool, bool, bool, bool, bool); - void do_cut_time (); - void cut_time (framepos_t pos, framecnt_t distance, Editing::InsertTimeOption opt, bool ignore_music_glue, bool markers_too, bool tempo_too); + void do_remove_time (); + void remove_time (framepos_t pos, framecnt_t distance, Editing::InsertTimeOption opt, bool ignore_music_glue, bool markers_too, + bool glued_markers_too, bool locked_markers_too, bool tempo_too); void tab_to_transient (bool forward); @@ -2236,6 +2238,9 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void update_bring_in_message (Gtk::Label* label, uint32_t n, uint32_t total, std::string name); void bring_all_sources_into_session (); + QuantizeDialog* quantize_dialog; + MainMenuDisabler* _main_menu_disabler; + friend class Drag; friend class RegionDrag; friend class RegionMoveDrag; diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 52e2210481..71ce59406a 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -405,7 +405,7 @@ Editor::register_actions () act = reg_sens (editor_actions, "insert-time", _("Insert Time"), (sigc::mem_fun(*this, &Editor::do_insert_time))); ActionManager::track_selection_sensitive_actions.push_back (act); - act = ActionManager::register_action (editor_actions, "cut-time", _("Cut Time"), (mem_fun(*this, &Editor::do_cut_time))); + act = ActionManager::register_action (editor_actions, "remove-time", _("Remove Time"), (mem_fun(*this, &Editor::do_remove_time))); ActionManager::session_sensitive_actions.push_back (act); ActionManager::track_selection_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index 46167bb2f4..6413b6d691 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -1188,6 +1188,19 @@ Editor::which_canvas_cursor(ItemType type) const { Gdk::Cursor* cursor = which_mode_cursor (); + if (mouse_mode == MouseRange) { + switch (type) { + case StartSelectionTrimItem: + cursor = _cursors->left_side_trim; + break; + case EndSelectionTrimItem: + cursor = _cursors->right_side_trim; + break; + default: + break; + } + } + if ((mouse_mode == MouseObject || get_smart_mode ()) || mouse_mode == MouseContent) { diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 305e72e2aa..0877a8b4be 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -96,8 +96,6 @@ DragManager::abort () { _ending = true; - cerr << "Aborting drag\n"; - for (list<Drag*>::const_iterator i = _drags.begin(); i != _drags.end(); ++i) { (*i)->abort (); delete *i; @@ -4917,7 +4915,7 @@ SelectionDrag::finished (GdkEvent* event, bool movement_occurred) /* XXX what if its a music time selection? */ if (s) { - if ( s->get_play_range() && s->transport_rolling() ) { + if (s->get_play_range() && s->transport_rolling()) { s->request_play_range (&_editor->selection->time, true); } else { if (ARDOUR_UI::config()->get_follow_edits() && !s->transport_rolling()) { @@ -4927,8 +4925,14 @@ SelectionDrag::finished (GdkEvent* event, bool movement_occurred) s->request_locate (_editor->get_selection().time.start()); } } - } + if (_editor->get_selection().time.length() != 0) { + s->set_range_selection (_editor->get_selection().time.start(), _editor->get_selection().time.end_frame()); + } else { + s->clear_range_selection (); + } + } + } else { /* just a click, no pointer movement. */ diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index ec0fed1312..e5acbaad44 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -27,14 +27,23 @@ #include "ardour/types.h" +#include "canvas/types.h" + #include "cursor_context.h" #include "editor_items.h" #include "mouse_cursors.h" +#include "editing.h" namespace ARDOUR { class Location; } +namespace ArdourCanvas { + class Item; + class Line; + class Rectangle; +} + namespace PBD { class StatefulDiffCommand; } @@ -46,6 +55,18 @@ class TimeAxisView; class MidiTimeAxisView; class Drag; class NoteBase; +class RegionView; +class TimeAxisView; +class RouteTimeAxisView; +class RegionSelection; +class MidiRegionView; +class MeterMarker; +class Marker; +class TempoMarker; +class ControlPoint; +class AudioRegionView; +class AutomationLine; +class AutomationTimeAxisView; /** Class to manage current drags */ class DragManager @@ -456,13 +477,13 @@ protected: private: TimeAxisView *prev_tav; // where regions were most recently dragged from TimeAxisView *orig_tav; // where drag started - framecnt_t prev_amount; - framepos_t prev_position; - framecnt_t selection_length; + ARDOUR::framecnt_t prev_amount; + ARDOUR::framepos_t prev_position; + ARDOUR::framecnt_t selection_length; bool allow_moves_across_tracks; // only if all selected regions are on one track ARDOUR::RegionList *exclude; - void add_all_after_to_views (TimeAxisView *tav, framepos_t where, const RegionSelection &exclude, bool drag_in_progress); - void remove_unselected_from_views (framecnt_t amount, bool move_regions); + void add_all_after_to_views (TimeAxisView *tav, ARDOUR::framepos_t where, const RegionSelection &exclude, bool drag_in_progress); + void remove_unselected_from_views (ARDOUR::framecnt_t amount, bool move_regions); }; @@ -559,7 +580,7 @@ public: private: double y_to_region (double) const; - framecnt_t grid_frames (framepos_t) const; + ARDOUR::framecnt_t grid_frames (framepos_t) const; MidiRegionView* _region_view; ArdourCanvas::Rectangle* _drag_rect; diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 14c6f91237..50b7c81b44 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -76,7 +76,7 @@ #include "editor_regions.h" #include "editor_routes.h" #include "gui_thread.h" -#include "insert_time_dialog.h" +#include "insert_remove_time_dialog.h" #include "interthread_progress_window.h" #include "item_counts.h" #include "keyboard.h" @@ -5301,16 +5301,22 @@ Editor::quantize_regions (const RegionSelection& rs) return; } - QuantizeDialog* qd = new QuantizeDialog (*this); + if (!quantize_dialog) { + quantize_dialog = new QuantizeDialog (*this); + } - qd->present (); - const int r = qd->run (); - qd->hide (); + quantize_dialog->present (); + const int r = quantize_dialog->run (); + quantize_dialog->hide (); if (r == Gtk::RESPONSE_OK) { - Quantize quant (qd->snap_start(), qd->snap_end(), - qd->start_grid_size(), qd->end_grid_size(), - qd->strength(), qd->swing(), qd->threshold()); + Quantize quant (quantize_dialog->snap_start(), + quantize_dialog->snap_end(), + quantize_dialog->start_grid_size(), + quantize_dialog->end_grid_size(), + quantize_dialog->strength(), + quantize_dialog->swing(), + quantize_dialog->threshold()); apply_midi_note_edit_op (quant, rs); } @@ -7105,7 +7111,7 @@ Editor::do_insert_time () return; } - InsertTimeDialog d (*this); + InsertRemoveTimeDialog d (*this); int response = d.run (); if (response != RESPONSE_OK) { @@ -7213,25 +7219,24 @@ Editor::insert_time ( Locations::LocationList::const_iterator tmp; - bool const was_locked = (*i)->locked (); - if (locked_markers_too) { - (*i)->unlock (); - } - if ((*i)->position_lock_style() == AudioTime || glued_markers_too) { + bool const was_locked = (*i)->locked (); + if (locked_markers_too) { + (*i)->unlock (); + } if ((*i)->start() >= pos) { - (*i)->set_start ((*i)->start() + frames); + // move end first, in case we're moving by more than the length of the range if (!(*i)->is_mark()) { (*i)->set_end ((*i)->end() + frames); } + (*i)->set_start ((*i)->start() + frames); moved = true; } - } - - if (was_locked) { - (*i)->lock (); + if (was_locked) { + (*i)->lock (); + } } } @@ -7260,51 +7265,16 @@ Editor::insert_time ( commit_reversible_command (); } } + void -Editor::do_cut_time () +Editor::do_remove_time () { if (selection->tracks.empty()) { return; } framepos_t pos = get_preferred_edit_position (EDIT_IGNORE_MOUSE); - ArdourDialog d (*this, _("Cut Time")); - VButtonBox button_box; - VBox option_box; - - CheckButton glue_button (_("Move Glued Regions")); glue_button.set_active(); - CheckButton marker_button (_("Move Markers")); marker_button.set_active(); - CheckButton tempo_button (_("Move Tempo & Meters")); tempo_button.set_active(); - AudioClock clock ("cutTimeClock", true, "", true, false, true, false); - HBox clock_box; - - clock.set (0); - clock.set_session (_session); - clock.set_bbt_reference (pos); - - clock_box.pack_start (clock, false, true); - - option_box.set_spacing (6); - option_box.pack_start (button_box, false, false); - option_box.pack_start (glue_button, false, false); - option_box.pack_start (marker_button, false, false); - option_box.pack_start (tempo_button, false, false); - - d.get_vbox()->set_border_width (12); - d.get_vbox()->pack_start (clock_box, false, false); - d.get_vbox()->pack_start (option_box, false, false); - - option_box.show (); - button_box.show (); - glue_button.show (); - clock.show_all(); - clock_box.show (); - marker_button.show (); - tempo_button.show (); - - d.add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); - d.add_button (Gtk::Stock::OK, Gtk::RESPONSE_OK); - d.show (); + InsertRemoveTimeDialog d (*this, true); int response = d.run (); @@ -7312,18 +7282,27 @@ Editor::do_cut_time () return; } - framecnt_t distance = clock.current_duration (pos); + framecnt_t distance = d.distance(); if (distance == 0) { return; } - cut_time (pos, distance, SplitIntersected, glue_button.get_active(), marker_button.get_active(), tempo_button.get_active()); + remove_time ( + pos, + distance, + SplitIntersected, + d.move_glued(), + d.move_markers(), + d.move_glued_markers(), + d.move_locked_markers(), + d.move_tempos() + ); } void -Editor::cut_time (framepos_t pos, framecnt_t frames, InsertTimeOption opt, - bool ignore_music_glue, bool markers_too, bool tempo_too) +Editor::remove_time (framepos_t pos, framecnt_t frames, InsertTimeOption opt, + bool ignore_music_glue, bool markers_too, bool glued_markers_too, bool locked_markers_too, bool tempo_too) { if (Config->get_edit_mode() == Lock) { error << (_("Cannot insert or delete time when in Lock edit.")) << endmsg; @@ -7374,36 +7353,54 @@ Editor::cut_time (framepos_t pos, framecnt_t frames, InsertTimeOption opt, Locations::LocationList copy (_session->locations()->list()); for (Locations::LocationList::iterator i = copy.begin(); i != copy.end(); ++i) { - - if (!(*i)->is_mark()) { //range; have to handle both start and end + if ((*i)->position_lock_style() == AudioTime || glued_markers_too) { + + bool const was_locked = (*i)->locked (); + if (locked_markers_too) { + (*i)->unlock (); + } + + if (!(*i)->is_mark()) { // it's a range; have to handle both start and end if ((*i)->end() >= pos && (*i)->end() < pos+frames && (*i)->start() >= pos - && (*i)->end() < pos+frames) { //range is completely enclosed; kill it + && (*i)->end() < pos+frames) { // range is completely enclosed; kill it moved = true; loc_kill_list.push_back(*i); - } else { //ony start or end is included, try to do the right thing - if ((*i)->end() >= pos && (*i)->end() < pos+frames) { - (*i)->set_end (pos); //bring the end to the cut + } else { // only start or end is included, try to do the right thing + // move start before moving end, to avoid trying to move the end to before the start + // if we're removing more time than the length of the range + if ((*i)->start() >= pos && (*i)->start() < pos+frames) { + // start is within cut + (*i)->set_start (pos); // bring the start marker to the beginning of the cut moved = true; - } else if ((*i)->end() >= pos) { - (*i)->set_end ((*i)->end()-frames); //slip the end marker back + } else if ((*i)->start() >= pos+frames) { + // start (and thus entire range) lies beyond end of cut + (*i)->set_start ((*i)->start() - frames); // slip the start marker back moved = true; } - if ((*i)->start() >= pos && (*i)->start() < pos+frames) { - (*i)->set_start (pos); //bring the start marker to the beginning of the cut + if ((*i)->end() >= pos && (*i)->end() < pos+frames) { + // end is inside cut + (*i)->set_end (pos); // bring the end to the cut moved = true; - } else if ((*i)->start() >= pos) { - (*i)->set_start ((*i)->start() -frames); //slip the end marker back + } else if ((*i)->end() >= pos+frames) { + // end is beyond end of cut + (*i)->set_end ((*i)->end() - frames); // slip the end marker back moved = true; } + } - } else if ((*i)->start() >= pos && (*i)->start() < pos+frames ) { - loc_kill_list.push_back(*i); - moved = true; - } else if ((*i)->start() >= pos) { - (*i)->set_start ((*i)->start() -frames); - moved = true; + } else if ((*i)->start() >= pos && (*i)->start() < pos+frames ) { + loc_kill_list.push_back(*i); + moved = true; + } else if ((*i)->start() >= pos) { + (*i)->set_start ((*i)->start() -frames); + moved = true; + } + + if (was_locked) { + (*i)->lock (); + } } } @@ -7753,15 +7750,10 @@ Editor::lock () lock_dialog->get_vbox()->show_all (); lock_dialog->set_size_request (200, 200); } + + delete _main_menu_disabler; + _main_menu_disabler = new MainMenuDisabler; -#ifdef __APPLE__ - /* The global menu bar continues to be accessible to applications - with modal dialogs, which means that we need to desensitize - all items in the menu bar. Since those items are really just - proxies for actions, that means disabling all actions. - */ - ActionManager::disable_all_actions (); -#endif lock_dialog->present (); } @@ -7770,9 +7762,7 @@ Editor::unlock () { lock_dialog->hide (); -#ifdef __APPLE__ - ActionManager::pop_action_state (); -#endif + delete _main_menu_disabler; if (ARDOUR_UI::config()->get_lock_gui_after_seconds()) { start_lock_event_timing (); diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index a04ea77f06..44794313a0 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -30,6 +30,7 @@ #include "control_protocol/control_protocol.h" +#include "editor_drag.h" #include "editor.h" #include "actions.h" #include "audio_time_axis.h" @@ -658,9 +659,12 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) if (press) goto out; else { - get_equivalent_regions(clicked_regionview, all_equivalent_regions, ARDOUR::Properties::select.property_id); - selection->set(all_equivalent_regions); - commit = true; + if (selection->regions.size() > 1) { + /* collapse region selection down to just this one region (and its equivalents) */ + get_equivalent_regions(clicked_regionview, all_equivalent_regions, ARDOUR::Properties::select.property_id); + selection->set(all_equivalent_regions); + commit = true; + } } } break; @@ -1033,6 +1037,19 @@ Editor::time_selection_changed () } else { ActionManager::set_sensitive (ActionManager::time_selection_sensitive_actions, true); } + + /* propagate into backend, but only when there is no drag or we are at + * the end of a drag, otherwise this is too expensive (could case a + * locate per mouse motion event. + */ + + if (_session && !_drags->active()) { + if (selection->time.length() != 0) { + _session->set_range_selection (selection->time.start(), selection->time.end_frame()); + } else { + _session->clear_range_selection (); + } + } } /** Set all region actions to have a given sensitivity */ @@ -1343,6 +1360,17 @@ Editor::region_selection_changed () if (_session && !_session->transport_rolling() && !selection->regions.empty()) { maybe_locate_with_edit_preroll (selection->regions.start()); } + + /* propagate into backend */ + + if (_session) { + if (!selection->regions.empty()) { + _session->set_object_selection (selection->regions.start(), selection->regions.end_frame()); + } else { + _session->clear_object_selection (); + } + } + } void diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index 78a082c238..3e9b123485 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -1537,6 +1537,8 @@ EngineControl::maybe_display_saved_state () XMLNode& EngineControl::get_state () { + LocaleGuard lg (X_("C")); + XMLNode* root = new XMLNode ("AudioMIDISetup"); std::string path; diff --git a/gtk2_ardour/insert_time_dialog.cc b/gtk2_ardour/insert_remove_time_dialog.cc index 10b187578f..851f57d1ba 100644 --- a/gtk2_ardour/insert_time_dialog.cc +++ b/gtk2_ardour/insert_remove_time_dialog.cc @@ -21,17 +21,23 @@ #include <gtkmm/comboboxtext.h> #include <gtkmm/stock.h> #include <gtkmm/alignment.h> -#include "insert_time_dialog.h" +#include "insert_remove_time_dialog.h" #include "audio_clock.h" #include "i18n.h" using namespace Gtk; using namespace Editing; -InsertTimeDialog::InsertTimeDialog (PublicEditor& e) - : ArdourDialog (_("Insert Time")) +InsertRemoveTimeDialog::InsertRemoveTimeDialog (PublicEditor& e, bool remove) + : ArdourDialog (remove ? _("Remove Time") : _("Insert Time")) , _editor (e) - , _clock ("insertTimeClock", true, "", true, false, true, false) + , _clock ("insertTimeClock", true, "", + true, // editable + false, // follows_playhead + true, // duration + false, // with_info + true // accept_on_focus_out + ) { set_session (_editor.session ()); @@ -43,7 +49,7 @@ InsertTimeDialog::InsertTimeDialog (PublicEditor& e) Table* table = manage (new Table (2, 2)); table->set_spacings (4); - Label* time_label = manage (new Label (_("Time to insert:"))); + Label* time_label = manage (new Label (remove ? _("Time to remove") : _("Time to insert:"))); time_label->set_alignment (1, 0.5); table->attach (*time_label, 0, 1, 0, 1, FILL | EXPAND); _clock.set (0); @@ -51,25 +57,27 @@ InsertTimeDialog::InsertTimeDialog (PublicEditor& e) _clock.set_bbt_reference (pos); table->attach (_clock, 1, 2, 0, 1); - Label* intersected_label = manage (new Label (_("Intersected regions should:"))); - intersected_label->set_alignment (1, 0.5); - table->attach (*intersected_label, 0, 1, 1, 2, FILL | EXPAND); - _intersected_combo.append_text (_("stay in position")); - _intersected_combo.append_text (_("move")); - _intersected_combo.append_text (_("be split")); - _intersected_combo.set_active (0); - table->attach (_intersected_combo, 1, 2, 1, 2); + if (!remove) { + Label* intersected_label = manage (new Label (_("Intersected regions should:"))); + intersected_label->set_alignment (1, 0.5); + table->attach (*intersected_label, 0, 1, 1, 2, FILL | EXPAND); + _intersected_combo.append_text (_("stay in position")); + _intersected_combo.append_text (_("move")); + _intersected_combo.append_text (_("be split")); + _intersected_combo.set_active (0); + table->attach (_intersected_combo, 1, 2, 1, 2); + } get_vbox()->pack_start (*table); - _all_playlists.set_label (_("Insert time on all the track's playlists")); + _all_playlists.set_label (_("Apply to all the track's playlists")); get_vbox()->pack_start (_all_playlists); _move_glued.set_label (_("Move glued regions")); get_vbox()->pack_start (_move_glued); _move_markers.set_label (_("Move markers")); get_vbox()->pack_start (_move_markers); - _move_markers.signal_toggled().connect (sigc::mem_fun (*this, &InsertTimeDialog::move_markers_toggled)); + _move_markers.signal_toggled().connect (sigc::mem_fun (*this, &InsertRemoveTimeDialog::move_markers_toggled)); _move_glued_markers.set_label (_("Move glued markers")); Alignment* indent = manage (new Alignment); indent->set_padding (0, 0, 12, 0); @@ -88,14 +96,14 @@ InsertTimeDialog::InsertTimeDialog (PublicEditor& e) get_vbox()->pack_start (*tempo_box); add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); - add_button (_("Insert time"), Gtk::RESPONSE_OK); + add_button (remove ? _("Remove time") : _("Insert time"), Gtk::RESPONSE_OK); show_all (); move_markers_toggled (); } InsertTimeOption -InsertTimeDialog::intersected_region_action () +InsertRemoveTimeDialog::intersected_region_action () { /* only setting this to keep GCC quiet */ InsertTimeOption opt = LeaveIntersected; @@ -116,49 +124,49 @@ InsertTimeDialog::intersected_region_action () } bool -InsertTimeDialog::all_playlists () const +InsertRemoveTimeDialog::all_playlists () const { return _all_playlists.get_active (); } bool -InsertTimeDialog::move_glued () const +InsertRemoveTimeDialog::move_glued () const { return _move_glued.get_active (); } bool -InsertTimeDialog::move_tempos () const +InsertRemoveTimeDialog::move_tempos () const { return _move_tempos.get_active (); } bool -InsertTimeDialog::move_markers () const +InsertRemoveTimeDialog::move_markers () const { return _move_markers.get_active (); } bool -InsertTimeDialog::move_glued_markers () const +InsertRemoveTimeDialog::move_glued_markers () const { return _move_glued_markers.get_active (); } bool -InsertTimeDialog::move_locked_markers () const +InsertRemoveTimeDialog::move_locked_markers () const { return _move_locked_markers.get_active (); } framepos_t -InsertTimeDialog::distance () const +InsertRemoveTimeDialog::distance () const { return _clock.current_duration (_editor.get_preferred_edit_position ()); } void -InsertTimeDialog::move_markers_toggled () +InsertRemoveTimeDialog::move_markers_toggled () { _move_glued_markers.set_sensitive (_move_markers.get_active ()); _move_locked_markers.set_sensitive (_move_markers.get_active ()); diff --git a/gtk2_ardour/insert_time_dialog.h b/gtk2_ardour/insert_remove_time_dialog.h index 3c365c1f6b..6fbb575513 100644 --- a/gtk2_ardour/insert_time_dialog.h +++ b/gtk2_ardour/insert_remove_time_dialog.h @@ -22,10 +22,10 @@ #include "editing.h" #include "audio_clock.h" -class InsertTimeDialog : public ArdourDialog +class InsertRemoveTimeDialog : public ArdourDialog { public: - InsertTimeDialog (PublicEditor &); + InsertRemoveTimeDialog (PublicEditor &, bool remove = false); Editing::InsertTimeOption intersected_region_action (); bool all_playlists () const; diff --git a/gtk2_ardour/macosx/tracks.xcodeproj/project.pbxproj b/gtk2_ardour/macosx/tracks.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..2d5ae13e6d --- /dev/null +++ b/gtk2_ardour/macosx/tracks.xcodeproj/project.pbxproj @@ -0,0 +1,2987 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 43279248194EFFF1003C9FEA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43279247194EFFF1003C9FEA /* Cocoa.framework */; }; + 43279252194EFFF1003C9FEA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 43279250194EFFF1003C9FEA /* InfoPlist.strings */; }; + 43279254194EFFF1003C9FEA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 43279253194EFFF1003C9FEA /* main.m */; }; + 43279258194EFFF1003C9FEA /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 43279256194EFFF1003C9FEA /* Credits.rtf */; }; + 4327925B194EFFF1003C9FEA /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4327925A194EFFF1003C9FEA /* AppDelegate.m */; }; + 4327925E194EFFF1003C9FEA /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4327925C194EFFF1003C9FEA /* MainMenu.xib */; }; + 43279331194F003A003C9FEA /* act-disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279263194F0039003C9FEA /* act-disabled.png */; }; + 43279332194F003A003C9FEA /* add.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279264194F0039003C9FEA /* add.png */; }; + 43279333194F003A003C9FEA /* application-x-ardour_16px.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279265194F0039003C9FEA /* application-x-ardour_16px.png */; }; + 43279334194F003A003C9FEA /* application-x-ardour_22px.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279266194F0039003C9FEA /* application-x-ardour_22px.png */; }; + 43279335194F003A003C9FEA /* application-x-ardour_32px.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279267194F0039003C9FEA /* application-x-ardour_32px.png */; }; + 43279336194F003A003C9FEA /* application-x-ardour_48px.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279268194F0039003C9FEA /* application-x-ardour_48px.png */; }; + 43279337194F003A003C9FEA /* ardour-app-icon_osx.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279269194F0039003C9FEA /* ardour-app-icon_osx.png */; }; + 43279338194F003A003C9FEA /* ardour-app-icon_osx_mask.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327926A194F0039003C9FEA /* ardour-app-icon_osx_mask.png */; }; + 43279339194F003A003C9FEA /* ardour_icon_16px.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327926B194F0039003C9FEA /* ardour_icon_16px.png */; }; + 4327933A194F003A003C9FEA /* ardour_icon_22px.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327926C194F0039003C9FEA /* ardour_icon_22px.png */; }; + 4327933B194F003A003C9FEA /* ardour_icon_256px.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327926D194F0039003C9FEA /* ardour_icon_256px.png */; }; + 4327933C194F003A003C9FEA /* ardour_icon_32px.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327926E194F0039003C9FEA /* ardour_icon_32px.png */; }; + 4327933D194F003A003C9FEA /* ardour_icon_48px.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327926F194F0039003C9FEA /* ardour_icon_48px.png */; }; + 4327933E194F003A003C9FEA /* chord.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279270194F0039003C9FEA /* chord.png */; }; + 4327933F194F003A003C9FEA /* close.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279271194F0039003C9FEA /* close.png */; }; + 43279340194F003A003C9FEA /* computer_keyboard.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279272194F0039003C9FEA /* computer_keyboard.png */; }; + 43279341194F003A003C9FEA /* computer_keyboard_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279273194F0039003C9FEA /* computer_keyboard_active.png */; }; + 43279342194F003A003C9FEA /* display_clock_mockup.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279274194F0039003C9FEA /* display_clock_mockup.png */; }; + 43279343194F003A003C9FEA /* display_metrics_mockup.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279275194F0039003C9FEA /* display_metrics_mockup.png */; }; + 43279344194F003A003C9FEA /* eighthnote.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279276194F0039003C9FEA /* eighthnote.png */; }; + 43279345194F003A003C9FEA /* expand_left_right_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279277194F0039003C9FEA /* expand_left_right_cursor.png */; }; + 43279346194F003A003C9FEA /* expand_up_down_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279278194F0039003C9FEA /* expand_up_down_cursor.png */; }; + 43279347194F003A003C9FEA /* export_icons.sh in Resources */ = {isa = PBXBuildFile; fileRef = 43279279194F0039003C9FEA /* export_icons.sh */; }; + 43279348194F003A003C9FEA /* fade_in_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327927A194F0039003C9FEA /* fade_in_cursor.png */; }; + 43279349194F003A003C9FEA /* fade_out_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327927B194F0039003C9FEA /* fade_out_cursor.png */; }; + 4327934A194F003A003C9FEA /* fadein-constant-power.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327927C194F0039003C9FEA /* fadein-constant-power.png */; }; + 4327934B194F003A003C9FEA /* fadein-fast-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327927D194F0039003C9FEA /* fadein-fast-cut.png */; }; + 4327934C194F003A003C9FEA /* fadein-linear.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327927E194F0039003C9FEA /* fadein-linear.png */; }; + 4327934D194F003A003C9FEA /* fadein-long-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327927F194F0039003C9FEA /* fadein-long-cut.png */; }; + 4327934E194F003A003C9FEA /* fadein-S1.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279280194F0039003C9FEA /* fadein-S1.png */; }; + 4327934F194F003A003C9FEA /* fadein-S2.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279281194F0039003C9FEA /* fadein-S2.png */; }; + 43279350194F003A003C9FEA /* fadein-short-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279282194F0039003C9FEA /* fadein-short-cut.png */; }; + 43279351194F003A003C9FEA /* fadein-slow-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279283194F0039003C9FEA /* fadein-slow-cut.png */; }; + 43279352194F003A003C9FEA /* fadeout-constant-power.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279284194F0039003C9FEA /* fadeout-constant-power.png */; }; + 43279353194F003A003C9FEA /* fadeout-fast-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279285194F0039003C9FEA /* fadeout-fast-cut.png */; }; + 43279354194F003A003C9FEA /* fadeout-linear.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279286194F0039003C9FEA /* fadeout-linear.png */; }; + 43279355194F003A003C9FEA /* fadeout-long-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279287194F0039003C9FEA /* fadeout-long-cut.png */; }; + 43279356194F003A003C9FEA /* fadeout-S1.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279288194F0039003C9FEA /* fadeout-S1.png */; }; + 43279357194F003A003C9FEA /* fadeout-S2.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279289194F0039003C9FEA /* fadeout-S2.png */; }; + 43279358194F003A003C9FEA /* fadeout-short-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327928A194F0039003C9FEA /* fadeout-short-cut.png */; }; + 43279359194F003A003C9FEA /* fadeout-slow-cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327928B194F0039003C9FEA /* fadeout-slow-cut.png */; }; + 4327935A194F003A003C9FEA /* fader_belt.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327928C194F0039003C9FEA /* fader_belt.png */; }; + 4327935B194F003A003C9FEA /* fader_belt_desensitised.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327928D194F0039003C9FEA /* fader_belt_desensitised.png */; }; + 4327935C194F003A003C9FEA /* fader_belt_h.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327928E194F0039003C9FEA /* fader_belt_h.png */; }; + 4327935D194F003A003C9FEA /* fader_belt_h_desensitised.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327928F194F0039003C9FEA /* fader_belt_h_desensitised.png */; }; + 4327935E194F003A003C9FEA /* fader_belt_h_medium.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279290194F0039003C9FEA /* fader_belt_h_medium.png */; }; + 4327935F194F003A003C9FEA /* fader_belt_h_medium_desensitised.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279291194F0039003C9FEA /* fader_belt_h_medium_desensitised.png */; }; + 43279360194F003A003C9FEA /* fader_belt_h_thin.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279292194F0039003C9FEA /* fader_belt_h_thin.png */; }; + 43279361194F003A003C9FEA /* fader_belt_h_thin_desensitised.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279293194F0039003C9FEA /* fader_belt_h_thin_desensitised.png */; }; + 43279362194F003A003C9FEA /* fader_handle.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279294194F0039003C9FEA /* fader_handle.png */; }; + 43279363194F003A003C9FEA /* ferret_02.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279295194F0039003C9FEA /* ferret_02.png */; }; + 43279364194F003A003C9FEA /* forte.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279296194F0039003C9FEA /* forte.png */; }; + 43279365194F003A003C9FEA /* fortissimo.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279297194F0039003C9FEA /* fortissimo.png */; }; + 43279366194F003A003C9FEA /* fortississimo.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279298194F0039003C9FEA /* fortississimo.png */; }; + 43279367194F003A003C9FEA /* grabber.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279299194F0039003C9FEA /* grabber.png */; }; + 43279368194F003A003C9FEA /* grabber_edit_point.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327929A194F0039003C9FEA /* grabber_edit_point.png */; }; + 43279369194F003A003C9FEA /* grabber_note.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327929B194F0039003C9FEA /* grabber_note.png */; }; + 4327936A194F003A003C9FEA /* halfnote.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327929C194F0039003C9FEA /* halfnote.png */; }; + 4327936B194F003A003C9FEA /* hide.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327929D194F0039003C9FEA /* hide.png */; }; + 4327936C194F003A003C9FEA /* horizontal_zoom_fader_face.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327929E194F0039003C9FEA /* horizontal_zoom_fader_face.png */; }; + 4327936D194F003A003C9FEA /* i_beam_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327929F194F0039003C9FEA /* i_beam_cursor.png */; }; + 4327936E194F003A003C9FEA /* inspector_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A0194F0039003C9FEA /* inspector_on.png */; }; + 4327936F194F003A003C9FEA /* inspector_on_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A1194F0039003C9FEA /* inspector_on_active.png */; }; + 43279370194F003A003C9FEA /* inspector_on_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A2194F0039003C9FEA /* inspector_on_prelight.png */; }; + 43279371194F003A003C9FEA /* join_tools.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A3194F0039003C9FEA /* join_tools.png */; }; + 43279372194F003A003C9FEA /* knob.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A4194F0039003C9FEA /* knob.png */; }; + 43279373194F003A003C9FEA /* lock_session.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A5194F0039003C9FEA /* lock_session.png */; }; + 43279374194F003A003C9FEA /* lock_session_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A6194F0039003C9FEA /* lock_session_active.png */; }; + 43279375194F003A003C9FEA /* lock_session_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A7194F0039003C9FEA /* lock_session_prelight.png */; }; + 43279376194F003A003C9FEA /* media_button.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A8194F0039003C9FEA /* media_button.png */; }; + 43279377194F003A003C9FEA /* media_button_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792A9194F0039003C9FEA /* media_button_active.png */; }; + 43279378194F003A003C9FEA /* media_button_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792AA194F0039003C9FEA /* media_button_prelight.png */; }; + 43279379194F003A003C9FEA /* meter_bridge_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792AB194F0039003C9FEA /* meter_bridge_on.png */; }; + 4327937A194F003A003C9FEA /* meter_bridge_on_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792AC194F0039003C9FEA /* meter_bridge_on_active.png */; }; + 4327937B194F003A003C9FEA /* meter_bridge_on_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792AD194F0039003C9FEA /* meter_bridge_on_prelight.png */; }; + 4327937C194F003A003C9FEA /* metronome.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792AE194F0039003C9FEA /* metronome.png */; }; + 4327937D194F003A003C9FEA /* mezzforte.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792AF194F0039003C9FEA /* mezzforte.png */; }; + 4327937E194F003A003C9FEA /* mezzoforte.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B0194F0039003C9FEA /* mezzoforte.png */; }; + 4327937F194F003A003C9FEA /* mezzopiano.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B1194F0039003C9FEA /* mezzopiano.png */; }; + 43279380194F003A003C9FEA /* midi-input-active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B2194F0039003C9FEA /* midi-input-active.png */; }; + 43279381194F003A003C9FEA /* midi-input-inactive.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B3194F0039003C9FEA /* midi-input-inactive.png */; }; + 43279382194F003A003C9FEA /* midi_panic.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B4194F0039003C9FEA /* midi_panic.png */; }; + 43279383194F003A003C9FEA /* midi_socket_small.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B5194F0039003C9FEA /* midi_socket_small.png */; }; + 43279384194F003A003C9FEA /* midi_sound_notes.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B6194F0039003C9FEA /* midi_sound_notes.png */; }; + 43279385194F003A003C9FEA /* midi_tool_erase.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B7194F0039003C9FEA /* midi_tool_erase.png */; }; + 43279386194F003A003C9FEA /* midi_tool_pencil.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B8194F0039003C9FEA /* midi_tool_pencil.png */; }; + 43279387194F003A003C9FEA /* midi_tool_select.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792B9194F0039003C9FEA /* midi_tool_select.png */; }; + 43279388194F003A003C9FEA /* mixer_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792BA194F0039003C9FEA /* mixer_on.png */; }; + 43279389194F003A003C9FEA /* mixer_on_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792BB194F0039003C9FEA /* mixer_on_active.png */; }; + 4327938A194F003A003C9FEA /* mixer_on_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792BC194F0039003C9FEA /* mixer_on_prelight.png */; }; + 4327938B194F003A003C9FEA /* mode_multi_out.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792BD194F0039003C9FEA /* mode_multi_out.png */; }; + 4327938C194F003A003C9FEA /* mode_multi_out_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792BE194F0039003C9FEA /* mode_multi_out_active.png */; }; + 4327938D194F003A003C9FEA /* mode_multi_out_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792BF194F0039003C9FEA /* mode_multi_out_prelight.png */; }; + 4327938E194F003A003C9FEA /* mode_stereo_out.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C0194F0039003C9FEA /* mode_stereo_out.png */; }; + 4327938F194F003A003C9FEA /* mode_stereo_out_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C1194F0039003C9FEA /* mode_stereo_out_active.png */; }; + 43279390194F003A003C9FEA /* mode_stereo_out_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C2194F0039003C9FEA /* mode_stereo_out_prelight.png */; }; + 43279391194F003A003C9FEA /* move_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C3194F0039003C9FEA /* move_cursor.png */; }; + 43279392194F003A003C9FEA /* mute-disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C4194F0039003C9FEA /* mute-disabled.png */; }; + 43279393194F003A003C9FEA /* mute-enabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C5194F0039003C9FEA /* mute-enabled.png */; }; + 43279394194F003A003C9FEA /* muted-by-others.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C6194F0039003C9FEA /* muted-by-others.png */; }; + 43279395194F003A003C9FEA /* nudge_left.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C7194F0039003C9FEA /* nudge_left.png */; }; + 43279396194F003A003C9FEA /* nudge_right.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C8194F0039003C9FEA /* nudge_right.png */; }; + 43279397194F003A003C9FEA /* pianissimo.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792C9194F0039003C9FEA /* pianissimo.png */; }; + 43279398194F003A003C9FEA /* pianississimo.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792CA194F0039003C9FEA /* pianississimo.png */; }; + 43279399194F003A003C9FEA /* piano.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792CB194F0039003C9FEA /* piano.png */; }; + 4327939A194F003A003C9FEA /* quarternote.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792CC194F0039003C9FEA /* quarternote.png */; }; + 4327939B194F003A003C9FEA /* rec-enabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792CD194F0039003C9FEA /* rec-enabled.png */; }; + 4327939C194F003A003C9FEA /* rec-in-progress.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792CE194F0039003C9FEA /* rec-in-progress.png */; }; + 4327939D194F003A003C9FEA /* record-normal-disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792CF194F0039003C9FEA /* record-normal-disabled.png */; }; + 4327939E194F003A003C9FEA /* record-normal-enabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D0194F0039003C9FEA /* record-normal-enabled.png */; }; + 4327939F194F003A003C9FEA /* record-normal-in-progress.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D1194F0039003C9FEA /* record-normal-in-progress.png */; }; + 432793A0194F003A003C9FEA /* record-step.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D2194F0039003C9FEA /* record-step.png */; }; + 432793A1194F003A003C9FEA /* record_disabled_grey.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D3194F0039003C9FEA /* record_disabled_grey.png */; }; + 432793A2194F003A003C9FEA /* record_normal_red.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D4194F0039003C9FEA /* record_normal_red.png */; }; + 432793A3194F003A003C9FEA /* record_tape_red.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D5194F0039003C9FEA /* record_tape_red.png */; }; + 432793A4194F003A003C9FEA /* resize_bottom_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D6194F0039003C9FEA /* resize_bottom_cursor.png */; }; + 432793A5194F003A003C9FEA /* resize_bottom_left_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D7194F0039003C9FEA /* resize_bottom_left_cursor.png */; }; + 432793A6194F003A003C9FEA /* resize_bottom_right_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D8194F0039003C9FEA /* resize_bottom_right_cursor.png */; }; + 432793A7194F003A003C9FEA /* resize_left_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792D9194F0039003C9FEA /* resize_left_cursor.png */; }; + 432793A8194F003A003C9FEA /* resize_right_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792DA194F0039003C9FEA /* resize_right_cursor.png */; }; + 432793A9194F003A003C9FEA /* resize_top_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792DB194F0039003C9FEA /* resize_top_cursor.png */; }; + 432793AA194F003A003C9FEA /* resize_top_left_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792DC194F0039003C9FEA /* resize_top_left_cursor.png */; }; + 432793AB194F003A003C9FEA /* resize_top_right_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792DD194F0039003C9FEA /* resize_top_right_cursor.png */; }; + 432793AC194F003A003C9FEA /* sae.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792DE194F0039003C9FEA /* sae.png */; }; + 432793AD194F003A003C9FEA /* sessionlock.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792DF194F0039003C9FEA /* sessionlock.png */; }; + 432793AE194F003A003C9FEA /* sixteenthnote.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E0194F0039003C9FEA /* sixteenthnote.png */; }; + 432793AF194F003A003C9FEA /* sixtyfourthnote.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E1194F0039003C9FEA /* sixtyfourthnote.png */; }; + 432793B0194F003A003C9FEA /* slider_controller_fader.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E2194F0039003C9FEA /* slider_controller_fader.png */; }; + 432793B1194F003A003C9FEA /* slider_controller_fader_handle.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E3194F0039003C9FEA /* slider_controller_fader_handle.png */; }; + 432793B2194F003A003C9FEA /* solo-disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E4194F0039003C9FEA /* solo-disabled.png */; }; + 432793B3194F003A003C9FEA /* solo-enabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E5194F0039003C9FEA /* solo-enabled.png */; }; + 432793B4194F003A003C9FEA /* solo-isolate-disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E6194F0039003C9FEA /* solo-isolate-disabled.png */; }; + 432793B5194F003A003C9FEA /* solo-isolate-enabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E7194F0039003C9FEA /* solo-isolate-enabled.png */; }; + 432793B6194F003A003C9FEA /* solo-isolated.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E8194F0039003C9FEA /* solo-isolated.png */; }; + 432793B7194F003A003C9FEA /* solo-safe-disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792E9194F0039003C9FEA /* solo-safe-disabled.png */; }; + 432793B8194F003A003C9FEA /* solo-safe-enabled.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792EA194F0039003C9FEA /* solo-safe-enabled.png */; }; + 432793B9194F003A003C9FEA /* solo-safe-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792EB194F0039003C9FEA /* solo-safe-icon.png */; }; + 432793BA194F003A003C9FEA /* soloed-by-others.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792EC194F0039003C9FEA /* soloed-by-others.png */; }; + 432793BB194F003A003C9FEA /* step-editing.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792ED194F0039003C9FEA /* step-editing.png */; }; + 432793BC194F003A003C9FEA /* strip_width.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792EE194F0039003C9FEA /* strip_width.png */; }; + 432793BD194F003A003C9FEA /* systemlock.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792EF194F0039003C9FEA /* systemlock.png */; }; + 432793BE194F003A003C9FEA /* tav_exp.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F0194F0039003C9FEA /* tav_exp.png */; }; + 432793BF194F003A003C9FEA /* tav_shrink.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F1194F0039003C9FEA /* tav_shrink.png */; }; + 432793C0194F003A003C9FEA /* thirtysecondnote.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F2194F0039003C9FEA /* thirtysecondnote.png */; }; + 432793C1194F003A003C9FEA /* tool_arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F3194F0039003C9FEA /* tool_arrow.png */; }; + 432793C2194F003A003C9FEA /* tool_arrow_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F4194F0039003C9FEA /* tool_arrow_active.png */; }; + 432793C3194F003A003C9FEA /* tool_arrow_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F5194F0039003C9FEA /* tool_arrow_prelight.png */; }; + 432793C4194F003A003C9FEA /* tool_audition.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F6194F0039003C9FEA /* tool_audition.png */; }; + 432793C5194F003A003C9FEA /* tool_cut.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F7194F0039003C9FEA /* tool_cut.png */; }; + 432793C6194F003A003C9FEA /* tool_cut_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F8194F0039003C9FEA /* tool_cut_active.png */; }; + 432793C7194F003A003C9FEA /* tool_cut_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792F9194F0039003C9FEA /* tool_cut_prelight.png */; }; + 432793C8194F003A003C9FEA /* tool_gain.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792FA194F0039003C9FEA /* tool_gain.png */; }; + 432793C9194F003A003C9FEA /* tool_marker.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792FB194F0039003C9FEA /* tool_marker.png */; }; + 432793CA194F003A003C9FEA /* tool_marker_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792FC194F0039003C9FEA /* tool_marker_active.png */; }; + 432793CB194F003A003C9FEA /* tool_marker_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792FD194F0039003C9FEA /* tool_marker_prelight.png */; }; + 432793CC194F003A003C9FEA /* tool_note.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792FE194F0039003C9FEA /* tool_note.png */; }; + 432793CD194F003A003C9FEA /* tool_object.png in Resources */ = {isa = PBXBuildFile; fileRef = 432792FF194F0039003C9FEA /* tool_object.png */; }; + 432793CE194F003A003C9FEA /* tool_object_range.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279300194F0039003C9FEA /* tool_object_range.png */; }; + 432793CF194F003A003C9FEA /* tool_range.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279301194F0039003C9FEA /* tool_range.png */; }; + 432793D0194F003A003C9FEA /* tool_stretch.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279302194F0039003C9FEA /* tool_stretch.png */; }; + 432793D1194F003A003C9FEA /* tool_waveform_zoom.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279303194F0039003C9FEA /* tool_waveform_zoom.png */; }; + 432793D2194F003A003C9FEA /* tool_waveform_zoom_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279304194F0039003C9FEA /* tool_waveform_zoom_active.png */; }; + 432793D3194F003A003C9FEA /* tool_waveform_zoom_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279305194F0039003C9FEA /* tool_waveform_zoom_prelight.png */; }; + 432793D4194F003A003C9FEA /* tool_zoom.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279306194F0039003C9FEA /* tool_zoom.png */; }; + 432793D5194F003A003C9FEA /* tool_zoom_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279307194F0039003C9FEA /* tool_zoom_active.png */; }; + 432793D6194F003A003C9FEA /* tool_zoom_ardour.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279308194F0039003C9FEA /* tool_zoom_ardour.png */; }; + 432793D7194F003A003C9FEA /* tool_zoom_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279309194F0039003C9FEA /* tool_zoom_prelight.png */; }; + 432793D8194F003A003C9FEA /* tracks.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327930A194F003A003C9FEA /* tracks.png */; }; + 432793D9194F003A003C9FEA /* tracks_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327930B194F003A003C9FEA /* tracks_active.png */; }; + 432793DA194F003A003C9FEA /* tracks_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327930C194F003A003C9FEA /* tracks_prelight.png */; }; + 432793DB194F003A003C9FEA /* transport_end.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327930D194F003A003C9FEA /* transport_end.png */; }; + 432793DC194F003A003C9FEA /* transport_end_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327930E194F003A003C9FEA /* transport_end_active.png */; }; + 432793DD194F003A003C9FEA /* transport_end_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327930F194F003A003C9FEA /* transport_end_prelight.png */; }; + 432793DE194F003A003C9FEA /* transport_loop.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279310194F003A003C9FEA /* transport_loop.png */; }; + 432793DF194F003A003C9FEA /* transport_loop_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279311194F003A003C9FEA /* transport_loop_active.png */; }; + 432793E0194F003A003C9FEA /* transport_loop_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279312194F003A003C9FEA /* transport_loop_prelight.png */; }; + 432793E1194F003A003C9FEA /* transport_play.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279313194F003A003C9FEA /* transport_play.png */; }; + 432793E2194F003A003C9FEA /* transport_play_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279314194F003A003C9FEA /* transport_play_active.png */; }; + 432793E3194F003A003C9FEA /* transport_play_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279315194F003A003C9FEA /* transport_play_prelight.png */; }; + 432793E4194F003A003C9FEA /* transport_range.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279316194F003A003C9FEA /* transport_range.png */; }; + 432793E5194F003A003C9FEA /* transport_record.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279317194F003A003C9FEA /* transport_record.png */; }; + 432793E6194F003A003C9FEA /* transport_record_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279318194F003A003C9FEA /* transport_record_active.png */; }; + 432793E7194F003A003C9FEA /* transport_record_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279319194F003A003C9FEA /* transport_record_prelight.png */; }; + 432793E8194F003A003C9FEA /* transport_start.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327931A194F003A003C9FEA /* transport_start.png */; }; + 432793E9194F003A003C9FEA /* transport_start_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327931B194F003A003C9FEA /* transport_start_active.png */; }; + 432793EA194F003A003C9FEA /* transport_start_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327931C194F003A003C9FEA /* transport_start_prelight.png */; }; + 432793EB194F003A003C9FEA /* transport_stop.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327931D194F003A003C9FEA /* transport_stop.png */; }; + 432793EC194F003A003C9FEA /* transport_stop_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327931E194F003A003C9FEA /* transport_stop_active.png */; }; + 432793ED194F003A003C9FEA /* transport_stop_prelight.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327931F194F003A003C9FEA /* transport_stop_prelight.png */; }; + 432793EE194F003A003C9FEA /* trim_bottom_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279320194F003A003C9FEA /* trim_bottom_cursor.png */; }; + 432793EF194F003A003C9FEA /* trim_left_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279321194F003A003C9FEA /* trim_left_cursor.png */; }; + 432793F0194F003A003C9FEA /* trim_left_cursor_5.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279322194F003A003C9FEA /* trim_left_cursor_5.png */; }; + 432793F1194F003A003C9FEA /* trim_left_cursor_right_only.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279323194F003A003C9FEA /* trim_left_cursor_right_only.png */; }; + 432793F2194F003A003C9FEA /* trim_right_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279324194F003A003C9FEA /* trim_right_cursor.png */; }; + 432793F3194F003A003C9FEA /* trim_right_cursor_5.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279325194F003A003C9FEA /* trim_right_cursor_5.png */; }; + 432793F4194F003A003C9FEA /* trim_right_cursor_left_only.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279326194F003A003C9FEA /* trim_right_cursor_left_only.png */; }; + 432793F5194F003A003C9FEA /* trim_top_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279327194F003A003C9FEA /* trim_top_cursor.png */; }; + 432793F6194F003A003C9FEA /* vertical_zoom_fader_face.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279328194F003A003C9FEA /* vertical_zoom_fader_face.png */; }; + 432793F7194F003A003C9FEA /* wholenote.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279329194F003A003C9FEA /* wholenote.png */; }; + 432793F8194F003A003C9FEA /* zoom_fader_handle.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327932A194F003A003C9FEA /* zoom_fader_handle.png */; }; + 432793F9194F003A003C9FEA /* zoom_fader_handle_active.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327932B194F003A003C9FEA /* zoom_fader_handle_active.png */; }; + 432793FA194F003A003C9FEA /* zoom_full.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327932C194F003A003C9FEA /* zoom_full.png */; }; + 432793FB194F003A003C9FEA /* zoom_in.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327932D194F003A003C9FEA /* zoom_in.png */; }; + 432793FC194F003A003C9FEA /* zoom_in_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327932E194F003A003C9FEA /* zoom_in_cursor.png */; }; + 432793FD194F003A003C9FEA /* zoom_out.png in Resources */ = {isa = PBXBuildFile; fileRef = 4327932F194F003A003C9FEA /* zoom_out.png */; }; + 432793FE194F003A003C9FEA /* zoom_out_cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279330194F003A003C9FEA /* zoom_out_cursor.png */; }; + 43279431194F0062003C9FEA /* forwardblarrow.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279400194F0062003C9FEA /* forwardblarrow.xpm */; }; + 43279432194F0062003C9FEA /* h_meter_strip.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279401194F0062003C9FEA /* h_meter_strip.xpm */; }; + 43279433194F0062003C9FEA /* hiin.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279402194F0062003C9FEA /* hiin.xpm */; }; + 43279434194F0062003C9FEA /* hiout.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279403194F0062003C9FEA /* hiout.xpm */; }; + 43279435194F0062003C9FEA /* hslider00.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279404194F0062003C9FEA /* hslider00.xpm */; }; + 43279436194F0062003C9FEA /* hslider01.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279405194F0062003C9FEA /* hslider01.xpm */; }; + 43279437194F0062003C9FEA /* left_arrow.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279406194F0062003C9FEA /* left_arrow.xpm */; }; + 43279438194F0062003C9FEA /* linin.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279407194F0062003C9FEA /* linin.xpm */; }; + 43279439194F0062003C9FEA /* linout.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279408194F0062003C9FEA /* linout.xpm */; }; + 4327943A194F0062003C9FEA /* loin.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279409194F0062003C9FEA /* loin.xpm */; }; + 4327943B194F0062003C9FEA /* loop.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327940A194F0062003C9FEA /* loop.xpm */; }; + 4327943C194F0062003C9FEA /* loout.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327940B194F0062003C9FEA /* loout.xpm */; }; + 4327943D194F0062003C9FEA /* lr.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327940C194F0062003C9FEA /* lr.xpm */; }; + 4327943E194F0062003C9FEA /* regin.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327940D194F0062003C9FEA /* regin.xpm */; }; + 4327943F194F0062003C9FEA /* regin2.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327940E194F0062003C9FEA /* regin2.xpm */; }; + 43279440194F0062003C9FEA /* regout.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327940F194F0062003C9FEA /* regout.xpm */; }; + 43279441194F0062003C9FEA /* regout2.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279410194F0062003C9FEA /* regout2.xpm */; }; + 43279442194F0062003C9FEA /* revdblarrow.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279411194F0062003C9FEA /* revdblarrow.xpm */; }; + 43279443194F0062003C9FEA /* right_arrow.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279412194F0062003C9FEA /* right_arrow.xpm */; }; + 43279444194F0062003C9FEA /* set-next-button.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279413194F0062003C9FEA /* set-next-button.xpm */; }; + 43279445194F0062003C9FEA /* small-round-button-01.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279414194F0062003C9FEA /* small-round-button-01.xpm */; }; + 43279446194F0062003C9FEA /* small_x.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279415194F0062003C9FEA /* small_x.xpm */; }; + 43279447194F0062003C9FEA /* toggle-button-00.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279416194F0062003C9FEA /* toggle-button-00.xpm */; }; + 43279448194F0062003C9FEA /* toggle-button-01.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279417194F0062003C9FEA /* toggle-button-01.xpm */; }; + 43279449194F0062003C9FEA /* tool_audition.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279418194F0062003C9FEA /* tool_audition.xpm */; }; + 4327944A194F0062003C9FEA /* tool_gain.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279419194F0062003C9FEA /* tool_gain.xpm */; }; + 4327944B194F0062003C9FEA /* tool_object.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327941A194F0062003C9FEA /* tool_object.xpm */; }; + 4327944C194F0062003C9FEA /* tool_range.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327941B194F0062003C9FEA /* tool_range.xpm */; }; + 4327944D194F0062003C9FEA /* tool_stretch.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327941C194F0062003C9FEA /* tool_stretch.xpm */; }; + 4327944E194F0062003C9FEA /* tool_zoom.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327941D194F0062003C9FEA /* tool_zoom.xpm */; }; + 4327944F194F0062003C9FEA /* v_meter_strip.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327941E194F0062003C9FEA /* v_meter_strip.xpm */; }; + 43279450194F0062003C9FEA /* vslider00.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 4327941F194F0062003C9FEA /* vslider00.xpm */; }; + 43279451194F0062003C9FEA /* vslider01.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279420194F0062003C9FEA /* vslider01.xpm */; }; + 43279452194F0062003C9FEA /* vslider02_rail.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279421194F0062003C9FEA /* vslider02_rail.xpm */; }; + 43279453194F0062003C9FEA /* vslider02_slider.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279422194F0062003C9FEA /* vslider02_slider.xpm */; }; + 43279454194F0062003C9FEA /* vslider_slider_16wide.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279423194F0062003C9FEA /* vslider_slider_16wide.xpm */; }; + 43279455194F0062003C9FEA /* zoom_full.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279424194F0062003C9FEA /* zoom_full.xpm */; }; + 43279456194F0062003C9FEA /* zoom_in.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279425194F0062003C9FEA /* zoom_in.xpm */; }; + 43279457194F0062003C9FEA /* zoom_out.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 43279426194F0062003C9FEA /* zoom_out.xpm */; }; + 43279458194F0062003C9FEA /* small-splash.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279427194F0062003C9FEA /* small-splash.png */; }; + 43279459194F0062003C9FEA /* splash.png in Resources */ = {isa = PBXBuildFile; fileRef = 43279428194F0062003C9FEA /* splash.png */; }; + 4327945A194F0062003C9FEA /* device_capture_control.xml in Resources */ = {isa = PBXBuildFile; fileRef = 4327942A194F0062003C9FEA /* device_capture_control.xml */; }; + 4327945B194F0062003C9FEA /* device_playback_control.xml in Resources */ = {isa = PBXBuildFile; fileRef = 4327942B194F0062003C9FEA /* device_playback_control.xml */; }; + 4327945C194F0062003C9FEA /* editor_window.xml in Resources */ = {isa = PBXBuildFile; fileRef = 4327942C194F0062003C9FEA /* editor_window.xml */; }; + 4327945D194F0062003C9FEA /* midi_device_control.xml in Resources */ = {isa = PBXBuildFile; fileRef = 4327942D194F0062003C9FEA /* midi_device_control.xml */; }; + 4327945E194F0062003C9FEA /* session_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 4327942E194F0062003C9FEA /* session_dialog.xml */; }; + 4327945F194F0062003C9FEA /* session_lock_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 4327942F194F0062003C9FEA /* session_lock_dialog.xml */; }; + 43279460194F0062003C9FEA /* tracks_preferences.xml in Resources */ = {isa = PBXBuildFile; fileRef = 43279430194F0062003C9FEA /* tracks_preferences.xml */; }; + 4327947F194F009E003C9FEA /* tracks.menus.in in Resources */ = {isa = PBXBuildFile; fileRef = 43279475194F009E003C9FEA /* tracks.menus.in */; }; + 43B351ED194F04E00038C140 /* step_editing.bindings in Resources */ = {isa = PBXBuildFile; fileRef = 43B351C0194F04E00038C140 /* step_editing.bindings */; }; + 5BC24BAA1A64328D006A2400 /* trackslive.menus.in in Resources */ = {isa = PBXBuildFile; fileRef = 5BC24BA91A64328D006A2400 /* trackslive.menus.in */; }; + 5BC67E591A408FCE00F29ABA /* progress_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 5BC67E581A408FCE00F29ABA /* progress_dialog.xml */; }; + 5BC67E5F1A4090BD00F29ABA /* progress_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5BC67E5E1A4090BD00F29ABA /* progress_dialog.cc */; }; + 95176F7A1A08E6E800E32046 /* file_sample_rate_mismatch_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95176F791A08E6E800E32046 /* file_sample_rate_mismatch_dialog.cc */; }; + 95176F7E1A08E76F00E32046 /* file_sample_rate_mismatch_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95176F7D1A08E76F00E32046 /* file_sample_rate_mismatch_dialog.xml */; }; + 952E0B3C1A0A1D7000F375D0 /* buildlog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 952E0B3B1A0A1D7000F375D0 /* buildlog.txt */; }; + 954DCFBD1A0239DA00B7160E /* about_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 954DCFBC1A0239DA00B7160E /* about_dialog.cc */; }; + 954DCFC11A023AAB00B7160E /* about_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 954DCFBF1A023AAB00B7160E /* about_dialog.xml */; }; + 954DCFC21A023AAB00B7160E /* license_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 954DCFC01A023AAB00B7160E /* license_dialog.xml */; }; + 954DCFDE1A07A14E00B7160E /* read_only_session_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 954DCFDD1A07A14E00B7160E /* read_only_session_dialog.xml */; }; + 956D3F8A1A851805004F328C /* waves_import_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 956D3F891A851805004F328C /* waves_import_dialog.xml */; }; + 957EF44B1A30BFB300F1500E /* waves_message_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 957EF44A1A30BFB300F1500E /* waves_message_dialog.cc */; }; + 95A134DE1A0239080008E3D6 /* license_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95A134DD1A0239080008E3D6 /* license_dialog.cc */; }; + 95D1C51F1A78ED2100BE28DB /* waves_edit_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D1C51E1A78ED2100BE28DB /* waves_edit_dialog.cc */; }; + 95D1C5211A78ED3A00BE28DB /* waves_edit_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D1C5201A78ED3A00BE28DB /* waves_edit_dialog.xml */; }; + 95D4986E1AEA363E006E065D /* audio_engine_reset_info_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D4986B1AEA363E006E065D /* audio_engine_reset_info_dialog.xml */; }; + 95D4986F1AEA363E006E065D /* crash_recovery_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D4986C1AEA363E006E065D /* crash_recovery_dialog.xml */; }; + 95D498701AEA363E006E065D /* waves_save_template_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D4986D1AEA363E006E065D /* waves_save_template_dialog.xml */; }; + 95D5D1371A8A514300407F98 /* waves_numeric_edit_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D5D1361A8A514300407F98 /* waves_numeric_edit_dialog.cc */; }; + 95D5D1391A8A514300407F98 /* waves_numeric_edit_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D5D1381A8A514300407F98 /* waves_numeric_edit_dialog.xml */; }; + 95D6A67C1A8E22E80030CDD0 /* waves_keyeditor.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D6A67A1A8E22E80030CDD0 /* waves_keyeditor.xml */; }; + 95D71D551A4C66F600DE5B3B /* waves_track_color_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D71D541A4C66F600DE5B3B /* waves_track_color_dialog.cc */; }; + 95D71D581A4C69AE00DE5B3B /* waves_track_color_dialog.logic.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D71D571A4C69AE00DE5B3B /* waves_track_color_dialog.logic.cc */; }; + 95D795E81A7BB40C00120A4F /* marker_inspector_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795DB1A7BB40C00120A4F /* marker_inspector_dialog.xml */; }; + 95D795EA1A7BB40C00120A4F /* waves_export_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795DD1A7BB40C00120A4F /* waves_export_dialog.xml */; }; + 95D795EB1A7BB40C00120A4F /* waves_export_file_notebook_page.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795DE1A7BB40C00120A4F /* waves_export_file_notebook_page.xml */; }; + 95D795EC1A7BB40C00120A4F /* waves_export_file_notebook.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795DF1A7BB40C00120A4F /* waves_export_file_notebook.xml */; }; + 95D795ED1A7BB40C00120A4F /* waves_export_filename_selector.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E01A7BB40C00120A4F /* waves_export_filename_selector.xml */; }; + 95D795EE1A7BB40C00120A4F /* waves_export_format_selector.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E11A7BB40C00120A4F /* waves_export_format_selector.xml */; }; + 95D795EF1A7BB40C00120A4F /* waves_export_preset_selector.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E21A7BB40C00120A4F /* waves_export_preset_selector.xml */; }; + 95D795F01A7BB40C00120A4F /* waves_export_timespan_selector.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E31A7BB40C00120A4F /* waves_export_timespan_selector.xml */; }; + 95D795F11A7BB40C00120A4F /* waves_port_export_channel_selector.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E41A7BB40C00120A4F /* waves_port_export_channel_selector.xml */; }; + 95D795F21A7BB40C00120A4F /* waves_region_export_channel_selector.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E51A7BB40C00120A4F /* waves_region_export_channel_selector.xml */; }; + 95D795F31A7BB40C00120A4F /* waves_track_color_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E61A7BB40C00120A4F /* waves_track_color_dialog.xml */; }; + 95D795F41A7BB40C00120A4F /* waves_track_export_channel_selector.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D795E71A7BB40C00120A4F /* waves_track_export_channel_selector.xml */; }; + 95D7960B1A7BB9E000120A4F /* floating_text_entry.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D795FF1A7BB9E000120A4F /* floating_text_entry.cc */; }; + 95D7960C1A7BB9E000120A4F /* marker_inspector_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796001A7BB9E000120A4F /* marker_inspector_dialog.cc */; }; + 95D7960D1A7BB9E000120A4F /* marker_inspector_dialog.logic.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796011A7BB9E000120A4F /* marker_inspector_dialog.logic.cc */; }; + 95D7960E1A7BB9E000120A4F /* route_inspector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796021A7BB9E000120A4F /* route_inspector.cc */; }; + 95D7960F1A7BB9E000120A4F /* waves_export_channel_selector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796031A7BB9E000120A4F /* waves_export_channel_selector.cc */; }; + 95D796101A7BB9E000120A4F /* waves_export_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796041A7BB9E000120A4F /* waves_export_dialog.cc */; }; + 95D796111A7BB9E000120A4F /* waves_export_file_notebook.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796051A7BB9E000120A4F /* waves_export_file_notebook.cc */; }; + 95D796121A7BB9E000120A4F /* waves_export_filename_selector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796061A7BB9E000120A4F /* waves_export_filename_selector.cc */; }; + 95D796131A7BB9E000120A4F /* waves_export_format_selector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796071A7BB9E000120A4F /* waves_export_format_selector.cc */; }; + 95D796141A7BB9E000120A4F /* waves_export_preset_selector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796081A7BB9E000120A4F /* waves_export_preset_selector.cc */; }; + 95D796151A7BB9E000120A4F /* waves_export_timespan_selector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D796091A7BB9E000120A4F /* waves_export_timespan_selector.cc */; }; + 95D796161A7BB9E000120A4F /* waves_import_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D7960A1A7BB9E000120A4F /* waves_import_dialog.cc */; }; + 95D9E3791A8D1B3B00A0DA46 /* waves_ambiguous_file_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D9E3771A8D1B3B00A0DA46 /* waves_ambiguous_file_dialog.xml */; }; + 95D9E37A1A8D1B3B00A0DA46 /* waves_missing_file_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95D9E3781A8D1B3B00A0DA46 /* waves_missing_file_dialog.xml */; }; + 95D9E37F1A8D1B6600A0DA46 /* waves_ambiguous_file_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D9E37D1A8D1B6600A0DA46 /* waves_ambiguous_file_dialog.cc */; }; + 95D9E3801A8D1B6600A0DA46 /* waves_missing_file_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95D9E37E1A8D1B6600A0DA46 /* waves_missing_file_dialog.cc */; }; + 95E2A7AB1A8F652F0080BD79 /* waves_radio_item.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95E2A7AA1A8F652F0080BD79 /* waves_radio_item.xml */; }; + 95E5E9461AE946510000E2CE /* waves_tooltip.cc in Sources */ = {isa = PBXBuildFile; fileRef = 95E5E9451AE946510000E2CE /* waves_tooltip.cc */; }; + 95F9DFD71A35A8BD0007E953 /* waves_message_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFD61A35A8BD0007E953 /* waves_message_dialog.xml */; }; + 95F9DFE01A35F3310007E953 /* waves_clean_up_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFD81A35F3310007E953 /* waves_clean_up_dialog.xml */; }; + 95F9DFE11A35F3310007E953 /* waves_connect_to_backend_error_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFD91A35F3310007E953 /* waves_connect_to_backend_error_dialog.xml */; }; + 95F9DFE21A35F3310007E953 /* waves_excessive_split_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFDA1A35F3310007E953 /* waves_excessive_split_dialog.xml */; }; + 95F9DFE41A35F3310007E953 /* waves_file_exists_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFDC1A35F3310007E953 /* waves_file_exists_dialog.xml */; }; + 95F9DFE51A35F3310007E953 /* waves_how_to_import_dialog_1.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFDD1A35F3310007E953 /* waves_how_to_import_dialog_1.xml */; }; + 95F9DFE61A35F3310007E953 /* waves_how_to_import_dialog_2.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFDE1A35F3310007E953 /* waves_how_to_import_dialog_2.xml */; }; + 95F9DFE71A35F3310007E953 /* waves_route_rename_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = 95F9DFDF1A35F3310007E953 /* waves_route_rename_dialog.xml */; }; + CE1A907A199A37AE00ECA62B /* add_tracks_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE1A9079199A37AE00ECA62B /* add_tracks_dialog.cc */; }; + CE1C6DCE19879F04006BDB03 /* compact_meter_bridge.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE1C6DCC19879F04006BDB03 /* compact_meter_bridge.cc */; }; + CE1C6DCF19879F04006BDB03 /* compact_meter_strip.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE1C6DCD19879F04006BDB03 /* compact_meter_strip.cc */; }; + CE1C6DE01987A924006BDB03 /* master_bus_ui.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE1C6DDF1987A924006BDB03 /* master_bus_ui.cc */; }; + CE294C5F19CAD4E300D12768 /* add_tracks_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5719CAD4E300D12768 /* add_tracks_dialog.xml */; }; + CE294C6019CAD4E300D12768 /* compact_meter_bridge.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5819CAD4E300D12768 /* compact_meter_bridge.xml */; }; + CE294C6119CAD4E300D12768 /* compact_meter_strip.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5919CAD4E300D12768 /* compact_meter_strip.xml */; }; + CE294C6219CAD4E300D12768 /* marker_io_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5A19CAD4E300D12768 /* marker_io_dialog.xml */; }; + CE294C6319CAD4E300D12768 /* meter_bridge_view.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5B19CAD4E300D12768 /* meter_bridge_view.xml */; }; + CE294C6419CAD4E300D12768 /* meter_strip_gain_meter.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5C19CAD4E300D12768 /* meter_strip_gain_meter.xml */; }; + CE294C6519CAD4E300D12768 /* mixer_bridge_view.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5D19CAD4E300D12768 /* mixer_bridge_view.xml */; }; + CE294C6619CAD4E300D12768 /* time_info_box.xml in Resources */ = {isa = PBXBuildFile; fileRef = CE294C5E19CAD4E300D12768 /* time_info_box.xml */; }; + CE294C7519CAD54500D12768 /* marker_io_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C6B19CAD54500D12768 /* marker_io_dialog.cc */; }; + CE294C7619CAD54500D12768 /* mixer_bridge_view.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C6C19CAD54500D12768 /* mixer_bridge_view.cc */; }; + CE294C7719CAD54500D12768 /* open_file_dialog_nix.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C6D19CAD54500D12768 /* open_file_dialog_nix.cc */; }; + CE294C7819CAD54500D12768 /* open_file_dialog_windows.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C6E19CAD54500D12768 /* open_file_dialog_windows.cc */; }; + CE294C7919CAD54500D12768 /* ruler_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C6F19CAD54500D12768 /* ruler_dialog.cc */; }; + CE294C7A19CAD54500D12768 /* soundcloud_export_selector.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C7019CAD54500D12768 /* soundcloud_export_selector.cc */; }; + CE294C7B19CAD54500D12768 /* waves_dropdown.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C7119CAD54500D12768 /* waves_dropdown.cc */; }; + CE294C7C19CAD54500D12768 /* waves_grid.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C7219CAD54500D12768 /* waves_grid.cc */; }; + CE294C7D19CAD54500D12768 /* waves_zoom_control.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE294C7319CAD54500D12768 /* waves_zoom_control.cc */; }; + CEAFC770195445560016ACF0 /* bbt_time.cc in Sources */ = {isa = PBXBuildFile; fileRef = CEAFC76E195445560016ACF0 /* bbt_time.cc */; }; + CEAFC771195445560016ACF0 /* time.cc in Sources */ = {isa = PBXBuildFile; fileRef = CEAFC76F195445560016ACF0 /* time.cc */; }; + CEB0A9F219583F96006D269A /* session_close_dialog.cc in Sources */ = {isa = PBXBuildFile; fileRef = CEB0A9F119583F96006D269A /* session_close_dialog.cc */; }; + CEB0A9F41958447C006D269A /* session_close_dialog.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB0A9F31958447C006D269A /* session_close_dialog.xml */; }; + CEB9D791197516BE00B21780 /* audio_time_axis.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D787197516BE00B21780 /* audio_time_axis.xml */; }; + CEB9D792197516BE00B21780 /* automation_time_axis.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D788197516BE00B21780 /* automation_time_axis.xml */; }; + CEB9D793197516BE00B21780 /* editor_mixer.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D789197516BE00B21780 /* editor_mixer.xml */; }; + CEB9D794197516BE00B21780 /* inspector_gain_meter.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D78A197516BE00B21780 /* inspector_gain_meter.xml */; }; + CEB9D796197516BE00B21780 /* master_ui.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D78C197516BE00B21780 /* master_ui.xml */; }; + CEB9D797197516BE00B21780 /* meter_strip.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D78D197516BE00B21780 /* meter_strip.xml */; }; + CEB9D798197516BE00B21780 /* mixer_gain_meter.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D78E197516BE00B21780 /* mixer_gain_meter.xml */; }; + CEB9D799197516BE00B21780 /* mixer_strip.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D78F197516BE00B21780 /* mixer_strip.xml */; }; + CEB9D79A197516BE00B21780 /* track_header_gain_meter.xml in Resources */ = {isa = PBXBuildFile; fileRef = CEB9D790197516BE00B21780 /* track_header_gain_meter.xml */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 43B351F2194F12FB0038C140 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 43B351EE194F12FB0038C140 /* waves_audiobackend.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 43AA86DC194EECE000A67B56; + remoteInfo = waves_audiobackend; + }; + 43B351F8194F130D0038C140 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 43B351F4194F130C0038C140 /* libardour.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 43AA82A9194EEAAF00A67B56; + remoteInfo = libardour; + }; + 43B351FE194F131E0038C140 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 43B351FA194F131D0038C140 /* pbd.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8D07F2C80486CC7A007CD1D0; + remoteInfo = pbd; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 43279043194EFFB9003C9FEA /* actions.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = actions.cc; path = ../actions.cc; sourceTree = SOURCE_ROOT; }; + 43279045194EFFB9003C9FEA /* add_route_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = add_route_dialog.cc; path = ../add_route_dialog.cc; sourceTree = SOURCE_ROOT; }; + 43279047194EFFB9003C9FEA /* add_video_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = add_video_dialog.cc; path = ../add_video_dialog.cc; sourceTree = SOURCE_ROOT; }; + 43279049194EFFB9003C9FEA /* ambiguous_file_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ambiguous_file_dialog.cc; path = ../ambiguous_file_dialog.cc; sourceTree = SOURCE_ROOT; }; + 4327904B194EFFB9003C9FEA /* analysis_window.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = analysis_window.cc; path = ../analysis_window.cc; sourceTree = SOURCE_ROOT; }; + 4327904D194EFFB9003C9FEA /* ardour_button.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_button.cc; path = ../ardour_button.cc; sourceTree = SOURCE_ROOT; }; + 4327904F194EFFB9003C9FEA /* ardour_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_dialog.cc; path = ../ardour_dialog.cc; sourceTree = SOURCE_ROOT; }; + 43279051194EFFB9003C9FEA /* ardour_ui_dependents.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_ui_dependents.cc; path = ../ardour_ui_dependents.cc; sourceTree = SOURCE_ROOT; }; + 43279052194EFFB9003C9FEA /* ardour_ui_dialogs.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_ui_dialogs.cc; path = ../ardour_ui_dialogs.cc; sourceTree = SOURCE_ROOT; }; + 43279053194EFFB9003C9FEA /* ardour_ui_ed.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_ui_ed.cc; path = ../ardour_ui_ed.cc; sourceTree = SOURCE_ROOT; }; + 43279054194EFFB9003C9FEA /* ardour_ui_mixer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_ui_mixer.cc; path = ../ardour_ui_mixer.cc; sourceTree = SOURCE_ROOT; }; + 43279055194EFFB9003C9FEA /* ardour_ui_options.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_ui_options.cc; path = ../ardour_ui_options.cc; sourceTree = SOURCE_ROOT; }; + 43279056194EFFB9003C9FEA /* ardour_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_ui.cc; path = ../ardour_ui.cc; sourceTree = SOURCE_ROOT; }; + 43279058194EFFB9003C9FEA /* ardour_ui2.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_ui2.cc; path = ../ardour_ui2.cc; sourceTree = SOURCE_ROOT; }; + 43279059194EFFB9003C9FEA /* ardour_window.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ardour_window.cc; path = ../ardour_window.cc; sourceTree = SOURCE_ROOT; }; + 4327905C194EFFB9003C9FEA /* au_pluginui.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = au_pluginui.mm; path = ../au_pluginui.mm; sourceTree = SOURCE_ROOT; }; + 4327905D194EFFB9003C9FEA /* audio_clock.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = audio_clock.cc; path = ../audio_clock.cc; sourceTree = SOURCE_ROOT; }; + 4327905F194EFFB9003C9FEA /* audio_region_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = audio_region_editor.cc; path = ../audio_region_editor.cc; sourceTree = SOURCE_ROOT; }; + 43279061194EFFB9003C9FEA /* audio_region_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = audio_region_view.cc; path = ../audio_region_view.cc; sourceTree = SOURCE_ROOT; }; + 43279063194EFFB9003C9FEA /* audio_streamview.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = audio_streamview.cc; path = ../audio_streamview.cc; sourceTree = SOURCE_ROOT; }; + 43279065194EFFB9003C9FEA /* audio_time_axis.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = audio_time_axis.cc; path = ../audio_time_axis.cc; sourceTree = SOURCE_ROOT; }; + 43279067194EFFB9003C9FEA /* automation_controller.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = automation_controller.cc; path = ../automation_controller.cc; sourceTree = SOURCE_ROOT; }; + 43279069194EFFB9003C9FEA /* automation_line.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = automation_line.cc; path = ../automation_line.cc; sourceTree = SOURCE_ROOT; }; + 4327906B194EFFB9003C9FEA /* automation_region_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = automation_region_view.cc; path = ../automation_region_view.cc; sourceTree = SOURCE_ROOT; }; + 4327906E194EFFB9003C9FEA /* automation_streamview.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = automation_streamview.cc; path = ../automation_streamview.cc; sourceTree = SOURCE_ROOT; }; + 43279070194EFFB9003C9FEA /* automation_time_axis.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = automation_time_axis.cc; path = ../automation_time_axis.cc; sourceTree = SOURCE_ROOT; }; + 43279072194EFFB9003C9FEA /* axis_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = axis_view.cc; path = ../axis_view.cc; sourceTree = SOURCE_ROOT; }; + 43279074194EFFB9003C9FEA /* big_clock_window.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = big_clock_window.cc; path = ../big_clock_window.cc; sourceTree = SOURCE_ROOT; }; + 43279076194EFFB9003C9FEA /* bundle_env_cocoa.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = bundle_env_cocoa.cc; path = ../bundle_env_cocoa.cc; sourceTree = SOURCE_ROOT; }; + 43279077194EFFB9003C9FEA /* bundle_env_linux.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = bundle_env_linux.cc; path = ../bundle_env_linux.cc; sourceTree = SOURCE_ROOT; }; + 43279078194EFFB9003C9FEA /* bundle_env_mingw.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = bundle_env_mingw.cc; path = ../bundle_env_mingw.cc; sourceTree = SOURCE_ROOT; }; + 43279079194EFFB9003C9FEA /* bundle_env_msvc.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = bundle_env_msvc.cc; path = ../bundle_env_msvc.cc; sourceTree = SOURCE_ROOT; }; + 4327907B194EFFB9003C9FEA /* bundle_manager.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = bundle_manager.cc; path = ../bundle_manager.cc; sourceTree = SOURCE_ROOT; }; + 4327907D194EFFB9003C9FEA /* button_joiner.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = button_joiner.cc; path = ../button_joiner.cc; sourceTree = SOURCE_ROOT; }; + 4327907F194EFFB9003C9FEA /* canvas_patch_change.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = canvas_patch_change.cc; path = ../canvas_patch_change.cc; sourceTree = SOURCE_ROOT; }; + 43279081194EFFB9003C9FEA /* canvas-simpleline.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "canvas-simpleline.c"; path = "../canvas-simpleline.c"; sourceTree = SOURCE_ROOT; }; + 43279082194EFFB9003C9FEA /* canvas-simplerect.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "canvas-simplerect.c"; path = "../canvas-simplerect.c"; sourceTree = SOURCE_ROOT; }; + 43279083194EFFB9003C9FEA /* canvas-waveview.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "canvas-waveview.c"; path = "../canvas-waveview.c"; sourceTree = SOURCE_ROOT; }; + 43279085194EFFB9003C9FEA /* clock_group.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = clock_group.cc; path = ../clock_group.cc; sourceTree = SOURCE_ROOT; }; + 43279087194EFFB9003C9FEA /* cocoacarbon.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = cocoacarbon.mm; path = ../cocoacarbon.mm; sourceTree = SOURCE_ROOT; }; + 43279088194EFFB9003C9FEA /* configinfo.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = configinfo.cc; path = ../configinfo.cc; sourceTree = SOURCE_ROOT; }; + 4327908A194EFFB9003C9FEA /* control_point_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = control_point_dialog.cc; path = ../control_point_dialog.cc; sourceTree = SOURCE_ROOT; }; + 4327908C194EFFB9003C9FEA /* control_point.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = control_point.cc; path = ../control_point.cc; sourceTree = SOURCE_ROOT; }; + 4327908E194EFFB9003C9FEA /* crossfade_edit.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = crossfade_edit.cc; path = ../crossfade_edit.cc; sourceTree = SOURCE_ROOT; }; + 43279092194EFFB9003C9FEA /* curvetest.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = curvetest.cc; path = ../curvetest.cc; sourceTree = SOURCE_ROOT; }; + 43279094194EFFB9003C9FEA /* debug.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = debug.cc; path = ../debug.cc; sourceTree = SOURCE_ROOT; }; + 43279096194EFFB9003C9FEA /* device_connection_control.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = device_connection_control.cc; path = ../device_connection_control.cc; sourceTree = SOURCE_ROOT; }; + 43279098194EFFB9003C9FEA /* edit_note_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = edit_note_dialog.cc; path = ../edit_note_dialog.cc; sourceTree = SOURCE_ROOT; }; + 4327909B194EFFB9003C9FEA /* editing.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editing.cc; path = ../editing.cc; sourceTree = SOURCE_ROOT; }; + 4327909D194EFFB9003C9FEA /* editor_actions.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_actions.cc; path = ../editor_actions.cc; sourceTree = SOURCE_ROOT; }; + 4327909E194EFFB9003C9FEA /* editor_audio_import.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_audio_import.cc; path = ../editor_audio_import.cc; sourceTree = SOURCE_ROOT; }; + 4327909F194EFFB9003C9FEA /* editor_audiotrack.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_audiotrack.cc; path = ../editor_audiotrack.cc; sourceTree = SOURCE_ROOT; }; + 432790A0194EFFB9003C9FEA /* editor_canvas_events.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_canvas_events.cc; path = ../editor_canvas_events.cc; sourceTree = SOURCE_ROOT; }; + 432790A1194EFFB9003C9FEA /* editor_canvas.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_canvas.cc; path = ../editor_canvas.cc; sourceTree = SOURCE_ROOT; }; + 432790A2194EFFB9003C9FEA /* editor_component.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_component.cc; path = ../editor_component.cc; sourceTree = SOURCE_ROOT; }; + 432790A4194EFFB9003C9FEA /* editor_cursors.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_cursors.cc; path = ../editor_cursors.cc; sourceTree = SOURCE_ROOT; }; + 432790A6194EFFB9003C9FEA /* editor_drag.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_drag.cc; path = ../editor_drag.cc; sourceTree = SOURCE_ROOT; }; + 432790A9194EFFB9003C9FEA /* editor_export_audio.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_export_audio.cc; path = ../editor_export_audio.cc; sourceTree = SOURCE_ROOT; }; + 432790AA194EFFB9003C9FEA /* editor_group_tabs.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_group_tabs.cc; path = ../editor_group_tabs.cc; sourceTree = SOURCE_ROOT; }; + 432790AD194EFFB9003C9FEA /* editor_keys.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_keys.cc; path = ../editor_keys.cc; sourceTree = SOURCE_ROOT; }; + 432790AE194EFFB9003C9FEA /* editor_locations.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_locations.cc; path = ../editor_locations.cc; sourceTree = SOURCE_ROOT; }; + 432790B0194EFFB9003C9FEA /* editor_markers.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_markers.cc; path = ../editor_markers.cc; sourceTree = SOURCE_ROOT; }; + 432790B1194EFFB9003C9FEA /* editor_mixer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_mixer.cc; path = ../editor_mixer.cc; sourceTree = SOURCE_ROOT; }; + 432790B2194EFFB9003C9FEA /* editor_mouse.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_mouse.cc; path = ../editor_mouse.cc; sourceTree = SOURCE_ROOT; }; + 432790B3194EFFB9003C9FEA /* editor_ops.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_ops.cc; path = ../editor_ops.cc; sourceTree = SOURCE_ROOT; }; + 432790B4194EFFB9003C9FEA /* editor_regions.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_regions.cc; path = ../editor_regions.cc; sourceTree = SOURCE_ROOT; }; + 432790B6194EFFB9003C9FEA /* editor_route_groups.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_route_groups.cc; path = ../editor_route_groups.cc; sourceTree = SOURCE_ROOT; }; + 432790B8194EFFB9003C9FEA /* editor_routes.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_routes.cc; path = ../editor_routes.cc; sourceTree = SOURCE_ROOT; }; + 432790BA194EFFB9003C9FEA /* editor_rulers.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_rulers.cc; path = ../editor_rulers.cc; sourceTree = SOURCE_ROOT; }; + 432790BB194EFFB9003C9FEA /* editor_selection.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_selection.cc; path = ../editor_selection.cc; sourceTree = SOURCE_ROOT; }; + 432790BC194EFFB9003C9FEA /* editor_snapshots.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_snapshots.cc; path = ../editor_snapshots.cc; sourceTree = SOURCE_ROOT; }; + 432790BE194EFFB9003C9FEA /* editor_summary.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_summary.cc; path = ../editor_summary.cc; sourceTree = SOURCE_ROOT; }; + 432790C0194EFFB9003C9FEA /* editor_tempodisplay.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_tempodisplay.cc; path = ../editor_tempodisplay.cc; sourceTree = SOURCE_ROOT; }; + 432790C1194EFFB9003C9FEA /* editor_timefx.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_timefx.cc; path = ../editor_timefx.cc; sourceTree = SOURCE_ROOT; }; + 432790C2194EFFB9003C9FEA /* editor_videotimeline.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor_videotimeline.cc; path = ../editor_videotimeline.cc; sourceTree = SOURCE_ROOT; }; + 432790C5194EFFB9003C9FEA /* editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = editor.cc; path = ../editor.cc; sourceTree = SOURCE_ROOT; }; + 432790C7194EFFB9003C9FEA /* engine_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = engine_dialog.cc; path = ../engine_dialog.cc; sourceTree = SOURCE_ROOT; }; + 432790C9194EFFB9003C9FEA /* enums.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = enums.cc; path = ../enums.cc; sourceTree = SOURCE_ROOT; }; + 432790CB194EFFB9003C9FEA /* evtest.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = evtest.cc; path = ../evtest.cc; sourceTree = SOURCE_ROOT; }; + 432790CC194EFFB9003C9FEA /* export_channel_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_channel_selector.cc; path = ../export_channel_selector.cc; sourceTree = SOURCE_ROOT; }; + 432790CE194EFFB9003C9FEA /* export_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_dialog.cc; path = ../export_dialog.cc; sourceTree = SOURCE_ROOT; }; + 432790D0194EFFB9003C9FEA /* export_file_notebook.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_file_notebook.cc; path = ../export_file_notebook.cc; sourceTree = SOURCE_ROOT; }; + 432790D2194EFFB9003C9FEA /* export_filename_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_filename_selector.cc; path = ../export_filename_selector.cc; sourceTree = SOURCE_ROOT; }; + 432790D4194EFFB9003C9FEA /* export_format_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_format_dialog.cc; path = ../export_format_dialog.cc; sourceTree = SOURCE_ROOT; }; + 432790D6194EFFB9003C9FEA /* export_format_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_format_selector.cc; path = ../export_format_selector.cc; sourceTree = SOURCE_ROOT; }; + 432790D8194EFFB9003C9FEA /* export_preset_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_preset_selector.cc; path = ../export_preset_selector.cc; sourceTree = SOURCE_ROOT; }; + 432790DA194EFFB9003C9FEA /* export_range_markers_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_range_markers_dialog.cc; path = ../export_range_markers_dialog.cc; sourceTree = SOURCE_ROOT; }; + 432790DC194EFFB9003C9FEA /* export_timespan_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_timespan_selector.cc; path = ../export_timespan_selector.cc; sourceTree = SOURCE_ROOT; }; + 432790DE194EFFB9003C9FEA /* export_video_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_video_dialog.cc; path = ../export_video_dialog.cc; sourceTree = SOURCE_ROOT; }; + 432790E0194EFFB9003C9FEA /* export_video_infobox.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = export_video_infobox.cc; path = ../export_video_infobox.cc; sourceTree = SOURCE_ROOT; }; + 432790E2194EFFB9003C9FEA /* fft_graph.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fft_graph.cc; path = ../fft_graph.cc; sourceTree = SOURCE_ROOT; }; + 432790E4194EFFB9003C9FEA /* fft_result.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fft_result.cc; path = ../fft_result.cc; sourceTree = SOURCE_ROOT; }; + 432790E6194EFFB9003C9FEA /* fft.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fft.cc; path = ../fft.cc; sourceTree = SOURCE_ROOT; }; + 432790E9194EFFB9003C9FEA /* gain_meter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = gain_meter.cc; path = ../gain_meter.cc; sourceTree = SOURCE_ROOT; }; + 432790EB194EFFB9003C9FEA /* generic_pluginui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = generic_pluginui.cc; path = ../generic_pluginui.cc; sourceTree = SOURCE_ROOT; }; + 432790ED194EFFB9003C9FEA /* ghostregion.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ghostregion.cc; path = ../ghostregion.cc; sourceTree = SOURCE_ROOT; }; + 432790EF194EFFB9003C9FEA /* global_port_matrix.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = global_port_matrix.cc; path = ../global_port_matrix.cc; sourceTree = SOURCE_ROOT; }; + 432790F2194EFFB9003C9FEA /* gprofhelper.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = gprofhelper.c; path = ../gprofhelper.c; sourceTree = SOURCE_ROOT; }; + 432790F3194EFFB9003C9FEA /* group_tabs.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = group_tabs.cc; path = ../group_tabs.cc; sourceTree = SOURCE_ROOT; }; + 432790F5194EFFB9003C9FEA /* gtk_pianokeyboard.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = gtk_pianokeyboard.c; path = ../gtk_pianokeyboard.c; sourceTree = SOURCE_ROOT; }; + 432790FB194EFFB9003C9FEA /* gui_object.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = gui_object.cc; path = ../gui_object.cc; sourceTree = SOURCE_ROOT; }; + 432790FE194EFFB9003C9FEA /* hit.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = hit.cc; path = ../hit.cc; sourceTree = SOURCE_ROOT; }; + 43279101194EFFB9003C9FEA /* insert_time_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = insert_time_dialog.cc; path = ../insert_time_dialog.cc; sourceTree = SOURCE_ROOT; }; + 43279103194EFFB9003C9FEA /* interthread_progress_window.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = interthread_progress_window.cc; path = ../interthread_progress_window.cc; sourceTree = SOURCE_ROOT; }; + 43279105194EFFB9003C9FEA /* io_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = io_selector.cc; path = ../io_selector.cc; sourceTree = SOURCE_ROOT; }; + 43279107194EFFB9003C9FEA /* keyboard.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = keyboard.cc; path = ../keyboard.cc; sourceTree = SOURCE_ROOT; }; + 43279109194EFFB9003C9FEA /* keyeditor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = keyeditor.cc; path = ../keyeditor.cc; sourceTree = SOURCE_ROOT; }; + 4327910B194EFFB9003C9FEA /* latency_gui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = latency_gui.cc; path = ../latency_gui.cc; sourceTree = SOURCE_ROOT; }; + 4327910D194EFFB9003C9FEA /* led.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = led.cc; path = ../led.cc; sourceTree = SOURCE_ROOT; }; + 4327910F194EFFB9003C9FEA /* level_meter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = level_meter.cc; path = ../level_meter.cc; sourceTree = SOURCE_ROOT; }; + 43279111194EFFB9003C9FEA /* linux_vst_gui_support.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = linux_vst_gui_support.cc; path = ../linux_vst_gui_support.cc; sourceTree = SOURCE_ROOT; }; + 43279112194EFFB9003C9FEA /* location_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = location_ui.cc; path = ../location_ui.cc; sourceTree = SOURCE_ROOT; }; + 43279116194EFFB9003C9FEA /* lv2_plugin_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = lv2_plugin_ui.cc; path = ../lv2_plugin_ui.cc; sourceTree = SOURCE_ROOT; }; + 43279118194EFFB9003C9FEA /* lxvst_plugin_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = lxvst_plugin_ui.cc; path = ../lxvst_plugin_ui.cc; sourceTree = SOURCE_ROOT; }; + 4327911A194EFFB9003C9FEA /* main_clock.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = main_clock.cc; path = ../main_clock.cc; sourceTree = SOURCE_ROOT; }; + 4327911C194EFFB9003C9FEA /* main.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = main.cc; path = ../main.cc; sourceTree = SOURCE_ROOT; }; + 4327911E194EFFB9003C9FEA /* marker.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = marker.cc; path = ../marker.cc; sourceTree = SOURCE_ROOT; }; + 43279120194EFFB9003C9FEA /* meter_patterns.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = meter_patterns.cc; path = ../meter_patterns.cc; sourceTree = SOURCE_ROOT; }; + 43279122194EFFB9003C9FEA /* meter_strip.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = meter_strip.cc; path = ../meter_strip.cc; sourceTree = SOURCE_ROOT; }; + 43279124194EFFB9003C9FEA /* meterbridge.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = meterbridge.cc; path = ../meterbridge.cc; sourceTree = SOURCE_ROOT; }; + 43279126194EFFB9003C9FEA /* midi_automation_line.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_automation_line.cc; path = ../midi_automation_line.cc; sourceTree = SOURCE_ROOT; }; + 43279128194EFFB9003C9FEA /* midi_channel_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_channel_dialog.cc; path = ../midi_channel_dialog.cc; sourceTree = SOURCE_ROOT; }; + 4327912A194EFFB9003C9FEA /* midi_channel_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_channel_selector.cc; path = ../midi_channel_selector.cc; sourceTree = SOURCE_ROOT; }; + 4327912C194EFFB9003C9FEA /* midi_cut_buffer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_cut_buffer.cc; path = ../midi_cut_buffer.cc; sourceTree = SOURCE_ROOT; }; + 4327912E194EFFB9003C9FEA /* midi_device_connection_control.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_device_connection_control.cc; path = ../midi_device_connection_control.cc; sourceTree = SOURCE_ROOT; }; + 43279130194EFFB9003C9FEA /* midi_export_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_export_dialog.cc; path = ../midi_export_dialog.cc; sourceTree = SOURCE_ROOT; }; + 43279132194EFFB9003C9FEA /* midi_list_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_list_editor.cc; path = ../midi_list_editor.cc; sourceTree = SOURCE_ROOT; }; + 43279134194EFFB9003C9FEA /* midi_port_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_port_dialog.cc; path = ../midi_port_dialog.cc; sourceTree = SOURCE_ROOT; }; + 43279136194EFFB9003C9FEA /* midi_region_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_region_view.cc; path = ../midi_region_view.cc; sourceTree = SOURCE_ROOT; }; + 43279138194EFFB9003C9FEA /* midi_scroomer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_scroomer.cc; path = ../midi_scroomer.cc; sourceTree = SOURCE_ROOT; }; + 4327913A194EFFB9003C9FEA /* midi_selection.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_selection.cc; path = ../midi_selection.cc; sourceTree = SOURCE_ROOT; }; + 4327913C194EFFB9003C9FEA /* midi_streamview.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_streamview.cc; path = ../midi_streamview.cc; sourceTree = SOURCE_ROOT; }; + 4327913E194EFFB9003C9FEA /* midi_time_axis.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_time_axis.cc; path = ../midi_time_axis.cc; sourceTree = SOURCE_ROOT; }; + 43279140194EFFB9003C9FEA /* midi_tracer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_tracer.cc; path = ../midi_tracer.cc; sourceTree = SOURCE_ROOT; }; + 43279143194EFFB9003C9FEA /* midi_velocity_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = midi_velocity_dialog.cc; path = ../midi_velocity_dialog.cc; sourceTree = SOURCE_ROOT; }; + 43279145194EFFB9003C9FEA /* missing_file_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = missing_file_dialog.cc; path = ../missing_file_dialog.cc; sourceTree = SOURCE_ROOT; }; + 43279147194EFFB9003C9FEA /* missing_plugin_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = missing_plugin_dialog.cc; path = ../missing_plugin_dialog.cc; sourceTree = SOURCE_ROOT; }; + 43279149194EFFB9003C9FEA /* mixer_actor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mixer_actor.cc; path = ../mixer_actor.cc; sourceTree = SOURCE_ROOT; }; + 4327914B194EFFB9003C9FEA /* mixer_group_tabs.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mixer_group_tabs.cc; path = ../mixer_group_tabs.cc; sourceTree = SOURCE_ROOT; }; + 4327914D194EFFB9003C9FEA /* mixer_strip.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mixer_strip.cc; path = ../mixer_strip.cc; sourceTree = SOURCE_ROOT; }; + 4327914F194EFFB9003C9FEA /* mixer_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mixer_ui.cc; path = ../mixer_ui.cc; sourceTree = SOURCE_ROOT; }; + 43279151194EFFB9003C9FEA /* monitor_section.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = monitor_section.cc; path = ../monitor_section.cc; sourceTree = SOURCE_ROOT; }; + 43279153194EFFB9003C9FEA /* mono_panner_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mono_panner_editor.cc; path = ../mono_panner_editor.cc; sourceTree = SOURCE_ROOT; }; + 43279155194EFFB9003C9FEA /* mono_panner.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mono_panner.cc; path = ../mono_panner.cc; sourceTree = SOURCE_ROOT; }; + 43279157194EFFB9003C9FEA /* mouse_cursors.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mouse_cursors.cc; path = ../mouse_cursors.cc; sourceTree = SOURCE_ROOT; }; + 43279159194EFFB9003C9FEA /* mtest.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = mtest.cc; path = ../mtest.cc; sourceTree = SOURCE_ROOT; }; + 4327915A194EFFB9003C9FEA /* nag.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = nag.cc; path = ../nag.cc; sourceTree = SOURCE_ROOT; }; + 4327915C194EFFB9003C9FEA /* new_plugin_preset_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = new_plugin_preset_dialog.cc; path = ../new_plugin_preset_dialog.cc; sourceTree = SOURCE_ROOT; }; + 4327915E194EFFB9003C9FEA /* normalize_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = normalize_dialog.cc; path = ../normalize_dialog.cc; sourceTree = SOURCE_ROOT; }; + 43279160194EFFB9003C9FEA /* note_base.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = note_base.cc; path = ../note_base.cc; sourceTree = SOURCE_ROOT; }; + 43279162194EFFB9003C9FEA /* note_player.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = note_player.cc; path = ../note_player.cc; sourceTree = SOURCE_ROOT; }; + 43279164194EFFB9003C9FEA /* note.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = note.cc; path = ../note.cc; sourceTree = SOURCE_ROOT; }; + 43279166194EFFB9003C9FEA /* nsm.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = nsm.cc; path = ../nsm.cc; sourceTree = SOURCE_ROOT; }; + 43279168194EFFB9003C9FEA /* nsmclient.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = nsmclient.cc; path = ../nsmclient.cc; sourceTree = SOURCE_ROOT; }; + 4327916D194EFFB9003C9FEA /* open_file_dialog.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = open_file_dialog.mm; path = ../open_file_dialog.mm; sourceTree = SOURCE_ROOT; }; + 4327916E194EFFB9003C9FEA /* option_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = option_editor.cc; path = ../option_editor.cc; sourceTree = SOURCE_ROOT; }; + 43279170194EFFB9003C9FEA /* opts.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = opts.cc; path = ../opts.cc; sourceTree = SOURCE_ROOT; }; + 43279172194EFFB9003C9FEA /* panner_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = panner_editor.cc; path = ../panner_editor.cc; sourceTree = SOURCE_ROOT; }; + 43279174194EFFB9003C9FEA /* panner_interface.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = panner_interface.cc; path = ../panner_interface.cc; sourceTree = SOURCE_ROOT; }; + 43279176194EFFB9003C9FEA /* panner_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = panner_ui.cc; path = ../panner_ui.cc; sourceTree = SOURCE_ROOT; }; + 43279178194EFFB9003C9FEA /* panner2d.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = panner2d.cc; path = ../panner2d.cc; sourceTree = SOURCE_ROOT; }; + 4327917A194EFFB9003C9FEA /* patch_change_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = patch_change_dialog.cc; path = ../patch_change_dialog.cc; sourceTree = SOURCE_ROOT; }; + 4327917C194EFFB9003C9FEA /* patch_change.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = patch_change.cc; path = ../patch_change.cc; sourceTree = SOURCE_ROOT; }; + 4327917E194EFFB9003C9FEA /* piano_roll_header.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = piano_roll_header.cc; path = ../piano_roll_header.cc; sourceTree = SOURCE_ROOT; }; + 43279180194EFFB9003C9FEA /* pingback.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = pingback.cc; path = ../pingback.cc; sourceTree = SOURCE_ROOT; }; + 43279183194EFFB9003C9FEA /* playlist_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = playlist_selector.cc; path = ../playlist_selector.cc; sourceTree = SOURCE_ROOT; }; + 43279185194EFFB9003C9FEA /* plugin_eq_gui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = plugin_eq_gui.cc; path = ../plugin_eq_gui.cc; sourceTree = SOURCE_ROOT; }; + 43279188194EFFBA003C9FEA /* plugin_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = plugin_selector.cc; path = ../plugin_selector.cc; sourceTree = SOURCE_ROOT; }; + 4327918A194EFFBA003C9FEA /* plugin_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = plugin_ui.cc; path = ../plugin_ui.cc; sourceTree = SOURCE_ROOT; }; + 4327918D194EFFBA003C9FEA /* port_group.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_group.cc; path = ../port_group.cc; sourceTree = SOURCE_ROOT; }; + 4327918F194EFFBA003C9FEA /* port_insert_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_insert_ui.cc; path = ../port_insert_ui.cc; sourceTree = SOURCE_ROOT; }; + 43279191194EFFBA003C9FEA /* port_matrix_body.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_matrix_body.cc; path = ../port_matrix_body.cc; sourceTree = SOURCE_ROOT; }; + 43279193194EFFBA003C9FEA /* port_matrix_column_labels.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_matrix_column_labels.cc; path = ../port_matrix_column_labels.cc; sourceTree = SOURCE_ROOT; }; + 43279195194EFFBA003C9FEA /* port_matrix_component.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_matrix_component.cc; path = ../port_matrix_component.cc; sourceTree = SOURCE_ROOT; }; + 43279197194EFFBA003C9FEA /* port_matrix_grid.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_matrix_grid.cc; path = ../port_matrix_grid.cc; sourceTree = SOURCE_ROOT; }; + 43279199194EFFBA003C9FEA /* port_matrix_labels.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_matrix_labels.cc; path = ../port_matrix_labels.cc; sourceTree = SOURCE_ROOT; }; + 4327919B194EFFBA003C9FEA /* port_matrix_row_labels.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_matrix_row_labels.cc; path = ../port_matrix_row_labels.cc; sourceTree = SOURCE_ROOT; }; + 4327919E194EFFBA003C9FEA /* port_matrix.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = port_matrix.cc; path = ../port_matrix.cc; sourceTree = SOURCE_ROOT; }; + 432791A0194EFFBA003C9FEA /* processor_box.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = processor_box.cc; path = ../processor_box.cc; sourceTree = SOURCE_ROOT; }; + 432791A3194EFFBA003C9FEA /* progress_reporter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = progress_reporter.cc; path = ../progress_reporter.cc; sourceTree = SOURCE_ROOT; }; + 432791A5194EFFBA003C9FEA /* prompter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = prompter.cc; path = ../prompter.cc; sourceTree = SOURCE_ROOT; }; + 432791A7194EFFBA003C9FEA /* public_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = public_editor.cc; path = ../public_editor.cc; sourceTree = SOURCE_ROOT; }; + 432791A9194EFFBA003C9FEA /* quantize_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = quantize_dialog.cc; path = ../quantize_dialog.cc; sourceTree = SOURCE_ROOT; }; + 432791AB194EFFBA003C9FEA /* rc_option_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = rc_option_editor.cc; path = ../rc_option_editor.cc; sourceTree = SOURCE_ROOT; }; + 432791AD194EFFBA003C9FEA /* region_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = region_editor.cc; path = ../region_editor.cc; sourceTree = SOURCE_ROOT; }; + 432791AF194EFFBA003C9FEA /* region_gain_line.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = region_gain_line.cc; path = ../region_gain_line.cc; sourceTree = SOURCE_ROOT; }; + 432791B1194EFFBA003C9FEA /* region_layering_order_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = region_layering_order_editor.cc; path = ../region_layering_order_editor.cc; sourceTree = SOURCE_ROOT; }; + 432791B3194EFFBA003C9FEA /* region_selection.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = region_selection.cc; path = ../region_selection.cc; sourceTree = SOURCE_ROOT; }; + 432791B5194EFFBA003C9FEA /* region_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = region_view.cc; path = ../region_view.cc; sourceTree = SOURCE_ROOT; }; + 432791B7194EFFBA003C9FEA /* return_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = return_ui.cc; path = ../return_ui.cc; sourceTree = SOURCE_ROOT; }; + 432791BA194EFFBA003C9FEA /* rhythm_ferret.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = rhythm_ferret.cc; path = ../rhythm_ferret.cc; sourceTree = SOURCE_ROOT; }; + 432791BC194EFFBA003C9FEA /* route_group_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = route_group_dialog.cc; path = ../route_group_dialog.cc; sourceTree = SOURCE_ROOT; }; + 432791BE194EFFBA003C9FEA /* route_group_menu.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = route_group_menu.cc; path = ../route_group_menu.cc; sourceTree = SOURCE_ROOT; }; + 432791C0194EFFBA003C9FEA /* route_params_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = route_params_ui.cc; path = ../route_params_ui.cc; sourceTree = SOURCE_ROOT; }; + 432791C2194EFFBA003C9FEA /* route_processor_selection.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = route_processor_selection.cc; path = ../route_processor_selection.cc; sourceTree = SOURCE_ROOT; }; + 432791C5194EFFBA003C9FEA /* route_time_axis.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = route_time_axis.cc; path = ../route_time_axis.cc; sourceTree = SOURCE_ROOT; }; + 432791C8194EFFBA003C9FEA /* route_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = route_ui.cc; path = ../route_ui.cc; sourceTree = SOURCE_ROOT; }; + 432791CA194EFFBA003C9FEA /* search_path_option.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = search_path_option.cc; path = ../search_path_option.cc; sourceTree = SOURCE_ROOT; }; + 432791CE194EFFBA003C9FEA /* selection.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = selection.cc; path = ../selection.cc; sourceTree = SOURCE_ROOT; }; + 432791D0194EFFBA003C9FEA /* send_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = send_ui.cc; path = ../send_ui.cc; sourceTree = SOURCE_ROOT; }; + 432791D2194EFFBA003C9FEA /* session_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = session_dialog.cc; path = ../session_dialog.cc; sourceTree = SOURCE_ROOT; }; + 432791D4194EFFBA003C9FEA /* session_dialog.logic.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = session_dialog.logic.cc; path = ../session_dialog.logic.cc; sourceTree = SOURCE_ROOT; }; + 432791D6194EFFBA003C9FEA /* session_import_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = session_import_dialog.cc; path = ../session_import_dialog.cc; sourceTree = SOURCE_ROOT; }; + 432791D8194EFFBA003C9FEA /* session_lock_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = session_lock_dialog.cc; path = ../session_lock_dialog.cc; sourceTree = SOURCE_ROOT; }; + 432791DA194EFFBA003C9FEA /* session_metadata_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = session_metadata_dialog.cc; path = ../session_metadata_dialog.cc; sourceTree = SOURCE_ROOT; }; + 432791DC194EFFBA003C9FEA /* session_option_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = session_option_editor.cc; path = ../session_option_editor.cc; sourceTree = SOURCE_ROOT; }; + 432791DE194EFFBA003C9FEA /* sfdb_freesound_mootcher.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sfdb_freesound_mootcher.cc; path = ../sfdb_freesound_mootcher.cc; sourceTree = SOURCE_ROOT; }; + 432791E0194EFFBA003C9FEA /* sfdb_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sfdb_ui.cc; path = ../sfdb_ui.cc; sourceTree = SOURCE_ROOT; }; + 432791E2194EFFBA003C9FEA /* shuttle_control.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = shuttle_control.cc; path = ../shuttle_control.cc; sourceTree = SOURCE_ROOT; }; + 432791E4194EFFBA003C9FEA /* speaker_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = speaker_dialog.cc; path = ../speaker_dialog.cc; sourceTree = SOURCE_ROOT; }; + 432791E6194EFFBA003C9FEA /* splash.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = splash.cc; path = ../splash.cc; sourceTree = SOURCE_ROOT; }; + 432791EA194EFFBA003C9FEA /* step_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = step_editor.cc; path = ../step_editor.cc; sourceTree = SOURCE_ROOT; }; + 432791EC194EFFBA003C9FEA /* step_entry.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = step_entry.cc; path = ../step_entry.cc; sourceTree = SOURCE_ROOT; }; + 432791EE194EFFBA003C9FEA /* stereo_panner_editor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = stereo_panner_editor.cc; path = ../stereo_panner_editor.cc; sourceTree = SOURCE_ROOT; }; + 432791F0194EFFBA003C9FEA /* stereo_panner.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = stereo_panner.cc; path = ../stereo_panner.cc; sourceTree = SOURCE_ROOT; }; + 432791F2194EFFBA003C9FEA /* streamview.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = streamview.cc; path = ../streamview.cc; sourceTree = SOURCE_ROOT; }; + 432791F5194EFFBA003C9FEA /* strip_silence_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = strip_silence_dialog.cc; path = ../strip_silence_dialog.cc; sourceTree = SOURCE_ROOT; }; + 432791F7194EFFBA003C9FEA /* sys_ex.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sys_ex.cc; path = ../sys_ex.cc; sourceTree = SOURCE_ROOT; }; + 432791F9194EFFBA003C9FEA /* tape_region_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tape_region_view.cc; path = ../tape_region_view.cc; sourceTree = SOURCE_ROOT; }; + 432791FB194EFFBA003C9FEA /* tempo_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tempo_dialog.cc; path = ../tempo_dialog.cc; sourceTree = SOURCE_ROOT; }; + 432791FD194EFFBA003C9FEA /* tempo_lines.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tempo_lines.cc; path = ../tempo_lines.cc; sourceTree = SOURCE_ROOT; }; + 432791FF194EFFBA003C9FEA /* theme_manager.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = theme_manager.cc; path = ../theme_manager.cc; sourceTree = SOURCE_ROOT; }; + 43279201194EFFBA003C9FEA /* time_axis_view_item.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = time_axis_view_item.cc; path = ../time_axis_view_item.cc; sourceTree = SOURCE_ROOT; }; + 43279203194EFFBA003C9FEA /* time_axis_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = time_axis_view.cc; path = ../time_axis_view.cc; sourceTree = SOURCE_ROOT; }; + 43279205194EFFBA003C9FEA /* time_fx_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = time_fx_dialog.cc; path = ../time_fx_dialog.cc; sourceTree = SOURCE_ROOT; }; + 43279207194EFFBA003C9FEA /* time_info_box.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = time_info_box.cc; path = ../time_info_box.cc; sourceTree = SOURCE_ROOT; }; + 43279209194EFFBA003C9FEA /* time_selection.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = time_selection.cc; path = ../time_selection.cc; sourceTree = SOURCE_ROOT; }; + 4327920B194EFFBA003C9FEA /* timecode_tester.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = timecode_tester.cc; path = ../timecode_tester.cc; sourceTree = SOURCE_ROOT; }; + 4327920C194EFFBA003C9FEA /* track_selection.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = track_selection.cc; path = ../track_selection.cc; sourceTree = SOURCE_ROOT; }; + 4327920E194EFFBA003C9FEA /* track_view_list.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = track_view_list.cc; path = ../track_view_list.cc; sourceTree = SOURCE_ROOT; }; + 43279210194EFFBA003C9FEA /* tracks_control_panel.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tracks_control_panel.cc; path = ../tracks_control_panel.cc; sourceTree = SOURCE_ROOT; }; + 43279212194EFFBA003C9FEA /* tracks_control_panel.logic.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tracks_control_panel.logic.cc; path = ../tracks_control_panel.logic.cc; sourceTree = SOURCE_ROOT; }; + 43279214194EFFBA003C9FEA /* transcode_ffmpeg.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = transcode_ffmpeg.cc; path = ../transcode_ffmpeg.cc; sourceTree = SOURCE_ROOT; }; + 43279216194EFFBA003C9FEA /* transcode_video_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = transcode_video_dialog.cc; path = ../transcode_video_dialog.cc; sourceTree = SOURCE_ROOT; }; + 43279218194EFFBA003C9FEA /* transpose_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = transpose_dialog.cc; path = ../transpose_dialog.cc; sourceTree = SOURCE_ROOT; }; + 4327921B194EFFBA003C9FEA /* ui_config.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ui_config.cc; path = ../ui_config.cc; sourceTree = SOURCE_ROOT; }; + 4327921D194EFFBA003C9FEA /* utils_videotl.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = utils_videotl.cc; path = ../utils_videotl.cc; sourceTree = SOURCE_ROOT; }; + 4327921F194EFFBA003C9FEA /* utils.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = utils.cc; path = ../utils.cc; sourceTree = SOURCE_ROOT; }; + 43279221194EFFBA003C9FEA /* verbose_cursor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = verbose_cursor.cc; path = ../verbose_cursor.cc; sourceTree = SOURCE_ROOT; }; + 43279223194EFFBA003C9FEA /* version.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = version.cc; path = ../version.cc; sourceTree = SOURCE_ROOT; }; + 43279225194EFFBA003C9FEA /* video_image_frame.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = video_image_frame.cc; path = ../video_image_frame.cc; sourceTree = SOURCE_ROOT; }; + 43279227194EFFBA003C9FEA /* video_monitor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = video_monitor.cc; path = ../video_monitor.cc; sourceTree = SOURCE_ROOT; }; + 43279229194EFFBA003C9FEA /* video_server_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = video_server_dialog.cc; path = ../video_server_dialog.cc; sourceTree = SOURCE_ROOT; }; + 4327922B194EFFBA003C9FEA /* video_timeline.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = video_timeline.cc; path = ../video_timeline.cc; sourceTree = SOURCE_ROOT; }; + 4327922D194EFFBA003C9FEA /* visibility_group.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = visibility_group.cc; path = ../visibility_group.cc; sourceTree = SOURCE_ROOT; }; + 4327922F194EFFBA003C9FEA /* volume_controller.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = volume_controller.cc; path = ../volume_controller.cc; sourceTree = SOURCE_ROOT; }; + 43279231194EFFBA003C9FEA /* vst_plugin_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = vst_plugin_ui.cc; path = ../vst_plugin_ui.cc; sourceTree = SOURCE_ROOT; }; + 43279233194EFFBA003C9FEA /* waves_button.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = waves_button.cc; path = ../waves_button.cc; sourceTree = SOURCE_ROOT; }; + 43279235194EFFBA003C9FEA /* waves_dialog.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = waves_dialog.cc; path = ../waves_dialog.cc; sourceTree = SOURCE_ROOT; }; + 43279237194EFFBA003C9FEA /* waves_icon_button.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = waves_icon_button.cc; path = ../waves_icon_button.cc; sourceTree = SOURCE_ROOT; }; + 43279239194EFFBA003C9FEA /* waves_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = waves_ui.cc; path = ../waves_ui.cc; sourceTree = SOURCE_ROOT; }; + 4327923B194EFFBA003C9FEA /* window_manager.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = window_manager.cc; path = ../window_manager.cc; sourceTree = SOURCE_ROOT; }; + 4327923D194EFFBA003C9FEA /* windows_vst_plugin_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = windows_vst_plugin_ui.cc; path = ../windows_vst_plugin_ui.cc; sourceTree = SOURCE_ROOT; }; + 43279244194EFFF1003C9FEA /* Tracks.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Tracks.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 43279247194EFFF1003C9FEA /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 4327924A194EFFF1003C9FEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + 4327924B194EFFF1003C9FEA /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 4327924C194EFFF1003C9FEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 4327924F194EFFF1003C9FEA /* Tracks-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Tracks-Info.plist"; path = "Tracks/Tracks-Info.plist"; sourceTree = SOURCE_ROOT; }; + 43279251194EFFF1003C9FEA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; }; + 43279253194EFFF1003C9FEA /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Tracks/main.m; sourceTree = SOURCE_ROOT; }; + 43279255194EFFF1003C9FEA /* Tracks-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "Tracks-Prefix.pch"; path = "Tracks/Tracks-Prefix.pch"; sourceTree = SOURCE_ROOT; }; + 43279257194EFFF1003C9FEA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = "<group>"; }; + 43279259194EFFF1003C9FEA /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Tracks/AppDelegate.h; sourceTree = SOURCE_ROOT; }; + 4327925A194EFFF1003C9FEA /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Tracks/AppDelegate.m; sourceTree = SOURCE_ROOT; }; + 4327925D194EFFF1003C9FEA /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = "<group>"; }; + 43279263194F0039003C9FEA /* act-disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "act-disabled.png"; path = "../icons/act-disabled.png"; sourceTree = SOURCE_ROOT; }; + 43279264194F0039003C9FEA /* add.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = add.png; path = ../icons/add.png; sourceTree = SOURCE_ROOT; }; + 43279265194F0039003C9FEA /* application-x-ardour_16px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "application-x-ardour_16px.png"; path = "../icons/application-x-ardour_16px.png"; sourceTree = SOURCE_ROOT; }; + 43279266194F0039003C9FEA /* application-x-ardour_22px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "application-x-ardour_22px.png"; path = "../icons/application-x-ardour_22px.png"; sourceTree = SOURCE_ROOT; }; + 43279267194F0039003C9FEA /* application-x-ardour_32px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "application-x-ardour_32px.png"; path = "../icons/application-x-ardour_32px.png"; sourceTree = SOURCE_ROOT; }; + 43279268194F0039003C9FEA /* application-x-ardour_48px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "application-x-ardour_48px.png"; path = "../icons/application-x-ardour_48px.png"; sourceTree = SOURCE_ROOT; }; + 43279269194F0039003C9FEA /* ardour-app-icon_osx.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "ardour-app-icon_osx.png"; path = "../icons/ardour-app-icon_osx.png"; sourceTree = SOURCE_ROOT; }; + 4327926A194F0039003C9FEA /* ardour-app-icon_osx_mask.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "ardour-app-icon_osx_mask.png"; path = "../icons/ardour-app-icon_osx_mask.png"; sourceTree = SOURCE_ROOT; }; + 4327926B194F0039003C9FEA /* ardour_icon_16px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ardour_icon_16px.png; path = ../icons/ardour_icon_16px.png; sourceTree = SOURCE_ROOT; }; + 4327926C194F0039003C9FEA /* ardour_icon_22px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ardour_icon_22px.png; path = ../icons/ardour_icon_22px.png; sourceTree = SOURCE_ROOT; }; + 4327926D194F0039003C9FEA /* ardour_icon_256px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ardour_icon_256px.png; path = ../icons/ardour_icon_256px.png; sourceTree = SOURCE_ROOT; }; + 4327926E194F0039003C9FEA /* ardour_icon_32px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ardour_icon_32px.png; path = ../icons/ardour_icon_32px.png; sourceTree = SOURCE_ROOT; }; + 4327926F194F0039003C9FEA /* ardour_icon_48px.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ardour_icon_48px.png; path = ../icons/ardour_icon_48px.png; sourceTree = SOURCE_ROOT; }; + 43279270194F0039003C9FEA /* chord.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = chord.png; path = ../icons/chord.png; sourceTree = SOURCE_ROOT; }; + 43279271194F0039003C9FEA /* close.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = close.png; path = ../icons/close.png; sourceTree = SOURCE_ROOT; }; + 43279272194F0039003C9FEA /* computer_keyboard.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = computer_keyboard.png; path = ../icons/computer_keyboard.png; sourceTree = SOURCE_ROOT; }; + 43279273194F0039003C9FEA /* computer_keyboard_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = computer_keyboard_active.png; path = ../icons/computer_keyboard_active.png; sourceTree = SOURCE_ROOT; }; + 43279274194F0039003C9FEA /* display_clock_mockup.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = display_clock_mockup.png; path = ../icons/display_clock_mockup.png; sourceTree = SOURCE_ROOT; }; + 43279275194F0039003C9FEA /* display_metrics_mockup.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = display_metrics_mockup.png; path = ../icons/display_metrics_mockup.png; sourceTree = SOURCE_ROOT; }; + 43279276194F0039003C9FEA /* eighthnote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = eighthnote.png; path = ../icons/eighthnote.png; sourceTree = SOURCE_ROOT; }; + 43279277194F0039003C9FEA /* expand_left_right_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = expand_left_right_cursor.png; path = ../icons/expand_left_right_cursor.png; sourceTree = SOURCE_ROOT; }; + 43279278194F0039003C9FEA /* expand_up_down_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = expand_up_down_cursor.png; path = ../icons/expand_up_down_cursor.png; sourceTree = SOURCE_ROOT; }; + 43279279194F0039003C9FEA /* export_icons.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = export_icons.sh; path = ../icons/export_icons.sh; sourceTree = SOURCE_ROOT; }; + 4327927A194F0039003C9FEA /* fade_in_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fade_in_cursor.png; path = ../icons/fade_in_cursor.png; sourceTree = SOURCE_ROOT; }; + 4327927B194F0039003C9FEA /* fade_out_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fade_out_cursor.png; path = ../icons/fade_out_cursor.png; sourceTree = SOURCE_ROOT; }; + 4327927C194F0039003C9FEA /* fadein-constant-power.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-constant-power.png"; path = "../icons/fadein-constant-power.png"; sourceTree = SOURCE_ROOT; }; + 4327927D194F0039003C9FEA /* fadein-fast-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-fast-cut.png"; path = "../icons/fadein-fast-cut.png"; sourceTree = SOURCE_ROOT; }; + 4327927E194F0039003C9FEA /* fadein-linear.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-linear.png"; path = "../icons/fadein-linear.png"; sourceTree = SOURCE_ROOT; }; + 4327927F194F0039003C9FEA /* fadein-long-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-long-cut.png"; path = "../icons/fadein-long-cut.png"; sourceTree = SOURCE_ROOT; }; + 43279280194F0039003C9FEA /* fadein-S1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-S1.png"; path = "../icons/fadein-S1.png"; sourceTree = SOURCE_ROOT; }; + 43279281194F0039003C9FEA /* fadein-S2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-S2.png"; path = "../icons/fadein-S2.png"; sourceTree = SOURCE_ROOT; }; + 43279282194F0039003C9FEA /* fadein-short-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-short-cut.png"; path = "../icons/fadein-short-cut.png"; sourceTree = SOURCE_ROOT; }; + 43279283194F0039003C9FEA /* fadein-slow-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadein-slow-cut.png"; path = "../icons/fadein-slow-cut.png"; sourceTree = SOURCE_ROOT; }; + 43279284194F0039003C9FEA /* fadeout-constant-power.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-constant-power.png"; path = "../icons/fadeout-constant-power.png"; sourceTree = SOURCE_ROOT; }; + 43279285194F0039003C9FEA /* fadeout-fast-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-fast-cut.png"; path = "../icons/fadeout-fast-cut.png"; sourceTree = SOURCE_ROOT; }; + 43279286194F0039003C9FEA /* fadeout-linear.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-linear.png"; path = "../icons/fadeout-linear.png"; sourceTree = SOURCE_ROOT; }; + 43279287194F0039003C9FEA /* fadeout-long-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-long-cut.png"; path = "../icons/fadeout-long-cut.png"; sourceTree = SOURCE_ROOT; }; + 43279288194F0039003C9FEA /* fadeout-S1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-S1.png"; path = "../icons/fadeout-S1.png"; sourceTree = SOURCE_ROOT; }; + 43279289194F0039003C9FEA /* fadeout-S2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-S2.png"; path = "../icons/fadeout-S2.png"; sourceTree = SOURCE_ROOT; }; + 4327928A194F0039003C9FEA /* fadeout-short-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-short-cut.png"; path = "../icons/fadeout-short-cut.png"; sourceTree = SOURCE_ROOT; }; + 4327928B194F0039003C9FEA /* fadeout-slow-cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "fadeout-slow-cut.png"; path = "../icons/fadeout-slow-cut.png"; sourceTree = SOURCE_ROOT; }; + 4327928C194F0039003C9FEA /* fader_belt.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt.png; path = ../icons/fader_belt.png; sourceTree = SOURCE_ROOT; }; + 4327928D194F0039003C9FEA /* fader_belt_desensitised.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt_desensitised.png; path = ../icons/fader_belt_desensitised.png; sourceTree = SOURCE_ROOT; }; + 4327928E194F0039003C9FEA /* fader_belt_h.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt_h.png; path = ../icons/fader_belt_h.png; sourceTree = SOURCE_ROOT; }; + 4327928F194F0039003C9FEA /* fader_belt_h_desensitised.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt_h_desensitised.png; path = ../icons/fader_belt_h_desensitised.png; sourceTree = SOURCE_ROOT; }; + 43279290194F0039003C9FEA /* fader_belt_h_medium.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt_h_medium.png; path = ../icons/fader_belt_h_medium.png; sourceTree = SOURCE_ROOT; }; + 43279291194F0039003C9FEA /* fader_belt_h_medium_desensitised.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt_h_medium_desensitised.png; path = ../icons/fader_belt_h_medium_desensitised.png; sourceTree = SOURCE_ROOT; }; + 43279292194F0039003C9FEA /* fader_belt_h_thin.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt_h_thin.png; path = ../icons/fader_belt_h_thin.png; sourceTree = SOURCE_ROOT; }; + 43279293194F0039003C9FEA /* fader_belt_h_thin_desensitised.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_belt_h_thin_desensitised.png; path = ../icons/fader_belt_h_thin_desensitised.png; sourceTree = SOURCE_ROOT; }; + 43279294194F0039003C9FEA /* fader_handle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fader_handle.png; path = ../icons/fader_handle.png; sourceTree = SOURCE_ROOT; }; + 43279295194F0039003C9FEA /* ferret_02.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ferret_02.png; path = ../icons/ferret_02.png; sourceTree = SOURCE_ROOT; }; + 43279296194F0039003C9FEA /* forte.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = forte.png; path = ../icons/forte.png; sourceTree = SOURCE_ROOT; }; + 43279297194F0039003C9FEA /* fortissimo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fortissimo.png; path = ../icons/fortissimo.png; sourceTree = SOURCE_ROOT; }; + 43279298194F0039003C9FEA /* fortississimo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = fortississimo.png; path = ../icons/fortississimo.png; sourceTree = SOURCE_ROOT; }; + 43279299194F0039003C9FEA /* grabber.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = grabber.png; path = ../icons/grabber.png; sourceTree = SOURCE_ROOT; }; + 4327929A194F0039003C9FEA /* grabber_edit_point.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = grabber_edit_point.png; path = ../icons/grabber_edit_point.png; sourceTree = SOURCE_ROOT; }; + 4327929B194F0039003C9FEA /* grabber_note.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = grabber_note.png; path = ../icons/grabber_note.png; sourceTree = SOURCE_ROOT; }; + 4327929C194F0039003C9FEA /* halfnote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = halfnote.png; path = ../icons/halfnote.png; sourceTree = SOURCE_ROOT; }; + 4327929D194F0039003C9FEA /* hide.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = hide.png; path = ../icons/hide.png; sourceTree = SOURCE_ROOT; }; + 4327929E194F0039003C9FEA /* horizontal_zoom_fader_face.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = horizontal_zoom_fader_face.png; path = ../icons/horizontal_zoom_fader_face.png; sourceTree = SOURCE_ROOT; }; + 4327929F194F0039003C9FEA /* i_beam_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = i_beam_cursor.png; path = ../icons/i_beam_cursor.png; sourceTree = SOURCE_ROOT; }; + 432792A0194F0039003C9FEA /* inspector_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = inspector_on.png; path = ../icons/inspector_on.png; sourceTree = SOURCE_ROOT; }; + 432792A1194F0039003C9FEA /* inspector_on_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = inspector_on_active.png; path = ../icons/inspector_on_active.png; sourceTree = SOURCE_ROOT; }; + 432792A2194F0039003C9FEA /* inspector_on_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = inspector_on_prelight.png; path = ../icons/inspector_on_prelight.png; sourceTree = SOURCE_ROOT; }; + 432792A3194F0039003C9FEA /* join_tools.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = join_tools.png; path = ../icons/join_tools.png; sourceTree = SOURCE_ROOT; }; + 432792A4194F0039003C9FEA /* knob.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = knob.png; path = ../icons/knob.png; sourceTree = SOURCE_ROOT; }; + 432792A5194F0039003C9FEA /* lock_session.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = lock_session.png; path = ../icons/lock_session.png; sourceTree = SOURCE_ROOT; }; + 432792A6194F0039003C9FEA /* lock_session_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = lock_session_active.png; path = ../icons/lock_session_active.png; sourceTree = SOURCE_ROOT; }; + 432792A7194F0039003C9FEA /* lock_session_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = lock_session_prelight.png; path = ../icons/lock_session_prelight.png; sourceTree = SOURCE_ROOT; }; + 432792A8194F0039003C9FEA /* media_button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = media_button.png; path = ../icons/media_button.png; sourceTree = SOURCE_ROOT; }; + 432792A9194F0039003C9FEA /* media_button_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = media_button_active.png; path = ../icons/media_button_active.png; sourceTree = SOURCE_ROOT; }; + 432792AA194F0039003C9FEA /* media_button_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = media_button_prelight.png; path = ../icons/media_button_prelight.png; sourceTree = SOURCE_ROOT; }; + 432792AB194F0039003C9FEA /* meter_bridge_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = meter_bridge_on.png; path = ../icons/meter_bridge_on.png; sourceTree = SOURCE_ROOT; }; + 432792AC194F0039003C9FEA /* meter_bridge_on_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = meter_bridge_on_active.png; path = ../icons/meter_bridge_on_active.png; sourceTree = SOURCE_ROOT; }; + 432792AD194F0039003C9FEA /* meter_bridge_on_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = meter_bridge_on_prelight.png; path = ../icons/meter_bridge_on_prelight.png; sourceTree = SOURCE_ROOT; }; + 432792AE194F0039003C9FEA /* metronome.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = metronome.png; path = ../icons/metronome.png; sourceTree = SOURCE_ROOT; }; + 432792AF194F0039003C9FEA /* mezzforte.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mezzforte.png; path = ../icons/mezzforte.png; sourceTree = SOURCE_ROOT; }; + 432792B0194F0039003C9FEA /* mezzoforte.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mezzoforte.png; path = ../icons/mezzoforte.png; sourceTree = SOURCE_ROOT; }; + 432792B1194F0039003C9FEA /* mezzopiano.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mezzopiano.png; path = ../icons/mezzopiano.png; sourceTree = SOURCE_ROOT; }; + 432792B2194F0039003C9FEA /* midi-input-active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "midi-input-active.png"; path = "../icons/midi-input-active.png"; sourceTree = SOURCE_ROOT; }; + 432792B3194F0039003C9FEA /* midi-input-inactive.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "midi-input-inactive.png"; path = "../icons/midi-input-inactive.png"; sourceTree = SOURCE_ROOT; }; + 432792B4194F0039003C9FEA /* midi_panic.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = midi_panic.png; path = ../icons/midi_panic.png; sourceTree = SOURCE_ROOT; }; + 432792B5194F0039003C9FEA /* midi_socket_small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = midi_socket_small.png; path = ../icons/midi_socket_small.png; sourceTree = SOURCE_ROOT; }; + 432792B6194F0039003C9FEA /* midi_sound_notes.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = midi_sound_notes.png; path = ../icons/midi_sound_notes.png; sourceTree = SOURCE_ROOT; }; + 432792B7194F0039003C9FEA /* midi_tool_erase.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = midi_tool_erase.png; path = ../icons/midi_tool_erase.png; sourceTree = SOURCE_ROOT; }; + 432792B8194F0039003C9FEA /* midi_tool_pencil.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = midi_tool_pencil.png; path = ../icons/midi_tool_pencil.png; sourceTree = SOURCE_ROOT; }; + 432792B9194F0039003C9FEA /* midi_tool_select.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = midi_tool_select.png; path = ../icons/midi_tool_select.png; sourceTree = SOURCE_ROOT; }; + 432792BA194F0039003C9FEA /* mixer_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mixer_on.png; path = ../icons/mixer_on.png; sourceTree = SOURCE_ROOT; }; + 432792BB194F0039003C9FEA /* mixer_on_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mixer_on_active.png; path = ../icons/mixer_on_active.png; sourceTree = SOURCE_ROOT; }; + 432792BC194F0039003C9FEA /* mixer_on_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mixer_on_prelight.png; path = ../icons/mixer_on_prelight.png; sourceTree = SOURCE_ROOT; }; + 432792BD194F0039003C9FEA /* mode_multi_out.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mode_multi_out.png; path = ../icons/mode_multi_out.png; sourceTree = SOURCE_ROOT; }; + 432792BE194F0039003C9FEA /* mode_multi_out_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mode_multi_out_active.png; path = ../icons/mode_multi_out_active.png; sourceTree = SOURCE_ROOT; }; + 432792BF194F0039003C9FEA /* mode_multi_out_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mode_multi_out_prelight.png; path = ../icons/mode_multi_out_prelight.png; sourceTree = SOURCE_ROOT; }; + 432792C0194F0039003C9FEA /* mode_stereo_out.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mode_stereo_out.png; path = ../icons/mode_stereo_out.png; sourceTree = SOURCE_ROOT; }; + 432792C1194F0039003C9FEA /* mode_stereo_out_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mode_stereo_out_active.png; path = ../icons/mode_stereo_out_active.png; sourceTree = SOURCE_ROOT; }; + 432792C2194F0039003C9FEA /* mode_stereo_out_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mode_stereo_out_prelight.png; path = ../icons/mode_stereo_out_prelight.png; sourceTree = SOURCE_ROOT; }; + 432792C3194F0039003C9FEA /* move_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = move_cursor.png; path = ../icons/move_cursor.png; sourceTree = SOURCE_ROOT; }; + 432792C4194F0039003C9FEA /* mute-disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "mute-disabled.png"; path = "../icons/mute-disabled.png"; sourceTree = SOURCE_ROOT; }; + 432792C5194F0039003C9FEA /* mute-enabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "mute-enabled.png"; path = "../icons/mute-enabled.png"; sourceTree = SOURCE_ROOT; }; + 432792C6194F0039003C9FEA /* muted-by-others.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "muted-by-others.png"; path = "../icons/muted-by-others.png"; sourceTree = SOURCE_ROOT; }; + 432792C7194F0039003C9FEA /* nudge_left.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = nudge_left.png; path = ../icons/nudge_left.png; sourceTree = SOURCE_ROOT; }; + 432792C8194F0039003C9FEA /* nudge_right.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = nudge_right.png; path = ../icons/nudge_right.png; sourceTree = SOURCE_ROOT; }; + 432792C9194F0039003C9FEA /* pianissimo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = pianissimo.png; path = ../icons/pianissimo.png; sourceTree = SOURCE_ROOT; }; + 432792CA194F0039003C9FEA /* pianississimo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = pianississimo.png; path = ../icons/pianississimo.png; sourceTree = SOURCE_ROOT; }; + 432792CB194F0039003C9FEA /* piano.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = piano.png; path = ../icons/piano.png; sourceTree = SOURCE_ROOT; }; + 432792CC194F0039003C9FEA /* quarternote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = quarternote.png; path = ../icons/quarternote.png; sourceTree = SOURCE_ROOT; }; + 432792CD194F0039003C9FEA /* rec-enabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "rec-enabled.png"; path = "../icons/rec-enabled.png"; sourceTree = SOURCE_ROOT; }; + 432792CE194F0039003C9FEA /* rec-in-progress.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "rec-in-progress.png"; path = "../icons/rec-in-progress.png"; sourceTree = SOURCE_ROOT; }; + 432792CF194F0039003C9FEA /* record-normal-disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "record-normal-disabled.png"; path = "../icons/record-normal-disabled.png"; sourceTree = SOURCE_ROOT; }; + 432792D0194F0039003C9FEA /* record-normal-enabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "record-normal-enabled.png"; path = "../icons/record-normal-enabled.png"; sourceTree = SOURCE_ROOT; }; + 432792D1194F0039003C9FEA /* record-normal-in-progress.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "record-normal-in-progress.png"; path = "../icons/record-normal-in-progress.png"; sourceTree = SOURCE_ROOT; }; + 432792D2194F0039003C9FEA /* record-step.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "record-step.png"; path = "../icons/record-step.png"; sourceTree = SOURCE_ROOT; }; + 432792D3194F0039003C9FEA /* record_disabled_grey.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = record_disabled_grey.png; path = ../icons/record_disabled_grey.png; sourceTree = SOURCE_ROOT; }; + 432792D4194F0039003C9FEA /* record_normal_red.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = record_normal_red.png; path = ../icons/record_normal_red.png; sourceTree = SOURCE_ROOT; }; + 432792D5194F0039003C9FEA /* record_tape_red.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = record_tape_red.png; path = ../icons/record_tape_red.png; sourceTree = SOURCE_ROOT; }; + 432792D6194F0039003C9FEA /* resize_bottom_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_bottom_cursor.png; path = ../icons/resize_bottom_cursor.png; sourceTree = SOURCE_ROOT; }; + 432792D7194F0039003C9FEA /* resize_bottom_left_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_bottom_left_cursor.png; path = ../icons/resize_bottom_left_cursor.png; sourceTree = SOURCE_ROOT; }; + 432792D8194F0039003C9FEA /* resize_bottom_right_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_bottom_right_cursor.png; path = ../icons/resize_bottom_right_cursor.png; sourceTree = SOURCE_ROOT; }; + 432792D9194F0039003C9FEA /* resize_left_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_left_cursor.png; path = ../icons/resize_left_cursor.png; sourceTree = SOURCE_ROOT; }; + 432792DA194F0039003C9FEA /* resize_right_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_right_cursor.png; path = ../icons/resize_right_cursor.png; sourceTree = SOURCE_ROOT; }; + 432792DB194F0039003C9FEA /* resize_top_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_top_cursor.png; path = ../icons/resize_top_cursor.png; sourceTree = SOURCE_ROOT; }; + 432792DC194F0039003C9FEA /* resize_top_left_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_top_left_cursor.png; path = ../icons/resize_top_left_cursor.png; sourceTree = SOURCE_ROOT; }; + 432792DD194F0039003C9FEA /* resize_top_right_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = resize_top_right_cursor.png; path = ../icons/resize_top_right_cursor.png; sourceTree = SOURCE_ROOT; }; + 432792DE194F0039003C9FEA /* sae.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = sae.png; path = ../icons/sae.png; sourceTree = SOURCE_ROOT; }; + 432792DF194F0039003C9FEA /* sessionlock.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = sessionlock.png; path = ../icons/sessionlock.png; sourceTree = SOURCE_ROOT; }; + 432792E0194F0039003C9FEA /* sixteenthnote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = sixteenthnote.png; path = ../icons/sixteenthnote.png; sourceTree = SOURCE_ROOT; }; + 432792E1194F0039003C9FEA /* sixtyfourthnote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = sixtyfourthnote.png; path = ../icons/sixtyfourthnote.png; sourceTree = SOURCE_ROOT; }; + 432792E2194F0039003C9FEA /* slider_controller_fader.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = slider_controller_fader.png; path = ../icons/slider_controller_fader.png; sourceTree = SOURCE_ROOT; }; + 432792E3194F0039003C9FEA /* slider_controller_fader_handle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = slider_controller_fader_handle.png; path = ../icons/slider_controller_fader_handle.png; sourceTree = SOURCE_ROOT; }; + 432792E4194F0039003C9FEA /* solo-disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-disabled.png"; path = "../icons/solo-disabled.png"; sourceTree = SOURCE_ROOT; }; + 432792E5194F0039003C9FEA /* solo-enabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-enabled.png"; path = "../icons/solo-enabled.png"; sourceTree = SOURCE_ROOT; }; + 432792E6194F0039003C9FEA /* solo-isolate-disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-isolate-disabled.png"; path = "../icons/solo-isolate-disabled.png"; sourceTree = SOURCE_ROOT; }; + 432792E7194F0039003C9FEA /* solo-isolate-enabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-isolate-enabled.png"; path = "../icons/solo-isolate-enabled.png"; sourceTree = SOURCE_ROOT; }; + 432792E8194F0039003C9FEA /* solo-isolated.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-isolated.png"; path = "../icons/solo-isolated.png"; sourceTree = SOURCE_ROOT; }; + 432792E9194F0039003C9FEA /* solo-safe-disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-safe-disabled.png"; path = "../icons/solo-safe-disabled.png"; sourceTree = SOURCE_ROOT; }; + 432792EA194F0039003C9FEA /* solo-safe-enabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-safe-enabled.png"; path = "../icons/solo-safe-enabled.png"; sourceTree = SOURCE_ROOT; }; + 432792EB194F0039003C9FEA /* solo-safe-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "solo-safe-icon.png"; path = "../icons/solo-safe-icon.png"; sourceTree = SOURCE_ROOT; }; + 432792EC194F0039003C9FEA /* soloed-by-others.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "soloed-by-others.png"; path = "../icons/soloed-by-others.png"; sourceTree = SOURCE_ROOT; }; + 432792ED194F0039003C9FEA /* step-editing.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "step-editing.png"; path = "../icons/step-editing.png"; sourceTree = SOURCE_ROOT; }; + 432792EE194F0039003C9FEA /* strip_width.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = strip_width.png; path = ../icons/strip_width.png; sourceTree = SOURCE_ROOT; }; + 432792EF194F0039003C9FEA /* systemlock.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = systemlock.png; path = ../icons/systemlock.png; sourceTree = SOURCE_ROOT; }; + 432792F0194F0039003C9FEA /* tav_exp.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tav_exp.png; path = ../icons/tav_exp.png; sourceTree = SOURCE_ROOT; }; + 432792F1194F0039003C9FEA /* tav_shrink.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tav_shrink.png; path = ../icons/tav_shrink.png; sourceTree = SOURCE_ROOT; }; + 432792F2194F0039003C9FEA /* thirtysecondnote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = thirtysecondnote.png; path = ../icons/thirtysecondnote.png; sourceTree = SOURCE_ROOT; }; + 432792F3194F0039003C9FEA /* tool_arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_arrow.png; path = ../icons/tool_arrow.png; sourceTree = SOURCE_ROOT; }; + 432792F4194F0039003C9FEA /* tool_arrow_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_arrow_active.png; path = ../icons/tool_arrow_active.png; sourceTree = SOURCE_ROOT; }; + 432792F5194F0039003C9FEA /* tool_arrow_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_arrow_prelight.png; path = ../icons/tool_arrow_prelight.png; sourceTree = SOURCE_ROOT; }; + 432792F6194F0039003C9FEA /* tool_audition.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_audition.png; path = ../icons/tool_audition.png; sourceTree = SOURCE_ROOT; }; + 432792F7194F0039003C9FEA /* tool_cut.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_cut.png; path = ../icons/tool_cut.png; sourceTree = SOURCE_ROOT; }; + 432792F8194F0039003C9FEA /* tool_cut_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_cut_active.png; path = ../icons/tool_cut_active.png; sourceTree = SOURCE_ROOT; }; + 432792F9194F0039003C9FEA /* tool_cut_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_cut_prelight.png; path = ../icons/tool_cut_prelight.png; sourceTree = SOURCE_ROOT; }; + 432792FA194F0039003C9FEA /* tool_gain.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_gain.png; path = ../icons/tool_gain.png; sourceTree = SOURCE_ROOT; }; + 432792FB194F0039003C9FEA /* tool_marker.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_marker.png; path = ../icons/tool_marker.png; sourceTree = SOURCE_ROOT; }; + 432792FC194F0039003C9FEA /* tool_marker_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_marker_active.png; path = ../icons/tool_marker_active.png; sourceTree = SOURCE_ROOT; }; + 432792FD194F0039003C9FEA /* tool_marker_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_marker_prelight.png; path = ../icons/tool_marker_prelight.png; sourceTree = SOURCE_ROOT; }; + 432792FE194F0039003C9FEA /* tool_note.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_note.png; path = ../icons/tool_note.png; sourceTree = SOURCE_ROOT; }; + 432792FF194F0039003C9FEA /* tool_object.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_object.png; path = ../icons/tool_object.png; sourceTree = SOURCE_ROOT; }; + 43279300194F0039003C9FEA /* tool_object_range.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_object_range.png; path = ../icons/tool_object_range.png; sourceTree = SOURCE_ROOT; }; + 43279301194F0039003C9FEA /* tool_range.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_range.png; path = ../icons/tool_range.png; sourceTree = SOURCE_ROOT; }; + 43279302194F0039003C9FEA /* tool_stretch.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_stretch.png; path = ../icons/tool_stretch.png; sourceTree = SOURCE_ROOT; }; + 43279303194F0039003C9FEA /* tool_waveform_zoom.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_waveform_zoom.png; path = ../icons/tool_waveform_zoom.png; sourceTree = SOURCE_ROOT; }; + 43279304194F0039003C9FEA /* tool_waveform_zoom_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_waveform_zoom_active.png; path = ../icons/tool_waveform_zoom_active.png; sourceTree = SOURCE_ROOT; }; + 43279305194F0039003C9FEA /* tool_waveform_zoom_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_waveform_zoom_prelight.png; path = ../icons/tool_waveform_zoom_prelight.png; sourceTree = SOURCE_ROOT; }; + 43279306194F0039003C9FEA /* tool_zoom.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_zoom.png; path = ../icons/tool_zoom.png; sourceTree = SOURCE_ROOT; }; + 43279307194F0039003C9FEA /* tool_zoom_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_zoom_active.png; path = ../icons/tool_zoom_active.png; sourceTree = SOURCE_ROOT; }; + 43279308194F0039003C9FEA /* tool_zoom_ardour.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_zoom_ardour.png; path = ../icons/tool_zoom_ardour.png; sourceTree = SOURCE_ROOT; }; + 43279309194F0039003C9FEA /* tool_zoom_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tool_zoom_prelight.png; path = ../icons/tool_zoom_prelight.png; sourceTree = SOURCE_ROOT; }; + 4327930A194F003A003C9FEA /* tracks.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tracks.png; path = ../icons/tracks.png; sourceTree = SOURCE_ROOT; }; + 4327930B194F003A003C9FEA /* tracks_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tracks_active.png; path = ../icons/tracks_active.png; sourceTree = SOURCE_ROOT; }; + 4327930C194F003A003C9FEA /* tracks_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tracks_prelight.png; path = ../icons/tracks_prelight.png; sourceTree = SOURCE_ROOT; }; + 4327930D194F003A003C9FEA /* transport_end.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_end.png; path = ../icons/transport_end.png; sourceTree = SOURCE_ROOT; }; + 4327930E194F003A003C9FEA /* transport_end_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_end_active.png; path = ../icons/transport_end_active.png; sourceTree = SOURCE_ROOT; }; + 4327930F194F003A003C9FEA /* transport_end_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_end_prelight.png; path = ../icons/transport_end_prelight.png; sourceTree = SOURCE_ROOT; }; + 43279310194F003A003C9FEA /* transport_loop.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_loop.png; path = ../icons/transport_loop.png; sourceTree = SOURCE_ROOT; }; + 43279311194F003A003C9FEA /* transport_loop_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_loop_active.png; path = ../icons/transport_loop_active.png; sourceTree = SOURCE_ROOT; }; + 43279312194F003A003C9FEA /* transport_loop_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_loop_prelight.png; path = ../icons/transport_loop_prelight.png; sourceTree = SOURCE_ROOT; }; + 43279313194F003A003C9FEA /* transport_play.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_play.png; path = ../icons/transport_play.png; sourceTree = SOURCE_ROOT; }; + 43279314194F003A003C9FEA /* transport_play_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_play_active.png; path = ../icons/transport_play_active.png; sourceTree = SOURCE_ROOT; }; + 43279315194F003A003C9FEA /* transport_play_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_play_prelight.png; path = ../icons/transport_play_prelight.png; sourceTree = SOURCE_ROOT; }; + 43279316194F003A003C9FEA /* transport_range.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_range.png; path = ../icons/transport_range.png; sourceTree = SOURCE_ROOT; }; + 43279317194F003A003C9FEA /* transport_record.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_record.png; path = ../icons/transport_record.png; sourceTree = SOURCE_ROOT; }; + 43279318194F003A003C9FEA /* transport_record_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_record_active.png; path = ../icons/transport_record_active.png; sourceTree = SOURCE_ROOT; }; + 43279319194F003A003C9FEA /* transport_record_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_record_prelight.png; path = ../icons/transport_record_prelight.png; sourceTree = SOURCE_ROOT; }; + 4327931A194F003A003C9FEA /* transport_start.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_start.png; path = ../icons/transport_start.png; sourceTree = SOURCE_ROOT; }; + 4327931B194F003A003C9FEA /* transport_start_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_start_active.png; path = ../icons/transport_start_active.png; sourceTree = SOURCE_ROOT; }; + 4327931C194F003A003C9FEA /* transport_start_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_start_prelight.png; path = ../icons/transport_start_prelight.png; sourceTree = SOURCE_ROOT; }; + 4327931D194F003A003C9FEA /* transport_stop.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_stop.png; path = ../icons/transport_stop.png; sourceTree = SOURCE_ROOT; }; + 4327931E194F003A003C9FEA /* transport_stop_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_stop_active.png; path = ../icons/transport_stop_active.png; sourceTree = SOURCE_ROOT; }; + 4327931F194F003A003C9FEA /* transport_stop_prelight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = transport_stop_prelight.png; path = ../icons/transport_stop_prelight.png; sourceTree = SOURCE_ROOT; }; + 43279320194F003A003C9FEA /* trim_bottom_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_bottom_cursor.png; path = ../icons/trim_bottom_cursor.png; sourceTree = SOURCE_ROOT; }; + 43279321194F003A003C9FEA /* trim_left_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_left_cursor.png; path = ../icons/trim_left_cursor.png; sourceTree = SOURCE_ROOT; }; + 43279322194F003A003C9FEA /* trim_left_cursor_5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_left_cursor_5.png; path = ../icons/trim_left_cursor_5.png; sourceTree = SOURCE_ROOT; }; + 43279323194F003A003C9FEA /* trim_left_cursor_right_only.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_left_cursor_right_only.png; path = ../icons/trim_left_cursor_right_only.png; sourceTree = SOURCE_ROOT; }; + 43279324194F003A003C9FEA /* trim_right_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_right_cursor.png; path = ../icons/trim_right_cursor.png; sourceTree = SOURCE_ROOT; }; + 43279325194F003A003C9FEA /* trim_right_cursor_5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_right_cursor_5.png; path = ../icons/trim_right_cursor_5.png; sourceTree = SOURCE_ROOT; }; + 43279326194F003A003C9FEA /* trim_right_cursor_left_only.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_right_cursor_left_only.png; path = ../icons/trim_right_cursor_left_only.png; sourceTree = SOURCE_ROOT; }; + 43279327194F003A003C9FEA /* trim_top_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = trim_top_cursor.png; path = ../icons/trim_top_cursor.png; sourceTree = SOURCE_ROOT; }; + 43279328194F003A003C9FEA /* vertical_zoom_fader_face.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = vertical_zoom_fader_face.png; path = ../icons/vertical_zoom_fader_face.png; sourceTree = SOURCE_ROOT; }; + 43279329194F003A003C9FEA /* wholenote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = wholenote.png; path = ../icons/wholenote.png; sourceTree = SOURCE_ROOT; }; + 4327932A194F003A003C9FEA /* zoom_fader_handle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = zoom_fader_handle.png; path = ../icons/zoom_fader_handle.png; sourceTree = SOURCE_ROOT; }; + 4327932B194F003A003C9FEA /* zoom_fader_handle_active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = zoom_fader_handle_active.png; path = ../icons/zoom_fader_handle_active.png; sourceTree = SOURCE_ROOT; }; + 4327932C194F003A003C9FEA /* zoom_full.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = zoom_full.png; path = ../icons/zoom_full.png; sourceTree = SOURCE_ROOT; }; + 4327932D194F003A003C9FEA /* zoom_in.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = zoom_in.png; path = ../icons/zoom_in.png; sourceTree = SOURCE_ROOT; }; + 4327932E194F003A003C9FEA /* zoom_in_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = zoom_in_cursor.png; path = ../icons/zoom_in_cursor.png; sourceTree = SOURCE_ROOT; }; + 4327932F194F003A003C9FEA /* zoom_out.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = zoom_out.png; path = ../icons/zoom_out.png; sourceTree = SOURCE_ROOT; }; + 43279330194F003A003C9FEA /* zoom_out_cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = zoom_out_cursor.png; path = ../icons/zoom_out_cursor.png; sourceTree = SOURCE_ROOT; }; + 43279400194F0062003C9FEA /* forwardblarrow.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = forwardblarrow.xpm; path = ../pixmaps/forwardblarrow.xpm; sourceTree = SOURCE_ROOT; }; + 43279401194F0062003C9FEA /* h_meter_strip.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = h_meter_strip.xpm; path = ../pixmaps/h_meter_strip.xpm; sourceTree = SOURCE_ROOT; }; + 43279402194F0062003C9FEA /* hiin.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = hiin.xpm; path = ../pixmaps/hiin.xpm; sourceTree = SOURCE_ROOT; }; + 43279403194F0062003C9FEA /* hiout.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = hiout.xpm; path = ../pixmaps/hiout.xpm; sourceTree = SOURCE_ROOT; }; + 43279404194F0062003C9FEA /* hslider00.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = hslider00.xpm; path = ../pixmaps/hslider00.xpm; sourceTree = SOURCE_ROOT; }; + 43279405194F0062003C9FEA /* hslider01.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = hslider01.xpm; path = ../pixmaps/hslider01.xpm; sourceTree = SOURCE_ROOT; }; + 43279406194F0062003C9FEA /* left_arrow.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = left_arrow.xpm; path = ../pixmaps/left_arrow.xpm; sourceTree = SOURCE_ROOT; }; + 43279407194F0062003C9FEA /* linin.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = linin.xpm; path = ../pixmaps/linin.xpm; sourceTree = SOURCE_ROOT; }; + 43279408194F0062003C9FEA /* linout.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = linout.xpm; path = ../pixmaps/linout.xpm; sourceTree = SOURCE_ROOT; }; + 43279409194F0062003C9FEA /* loin.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = loin.xpm; path = ../pixmaps/loin.xpm; sourceTree = SOURCE_ROOT; }; + 4327940A194F0062003C9FEA /* loop.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = loop.xpm; path = ../pixmaps/loop.xpm; sourceTree = SOURCE_ROOT; }; + 4327940B194F0062003C9FEA /* loout.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = loout.xpm; path = ../pixmaps/loout.xpm; sourceTree = SOURCE_ROOT; }; + 4327940C194F0062003C9FEA /* lr.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = lr.xpm; path = ../pixmaps/lr.xpm; sourceTree = SOURCE_ROOT; }; + 4327940D194F0062003C9FEA /* regin.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = regin.xpm; path = ../pixmaps/regin.xpm; sourceTree = SOURCE_ROOT; }; + 4327940E194F0062003C9FEA /* regin2.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = regin2.xpm; path = ../pixmaps/regin2.xpm; sourceTree = SOURCE_ROOT; }; + 4327940F194F0062003C9FEA /* regout.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = regout.xpm; path = ../pixmaps/regout.xpm; sourceTree = SOURCE_ROOT; }; + 43279410194F0062003C9FEA /* regout2.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = regout2.xpm; path = ../pixmaps/regout2.xpm; sourceTree = SOURCE_ROOT; }; + 43279411194F0062003C9FEA /* revdblarrow.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = revdblarrow.xpm; path = ../pixmaps/revdblarrow.xpm; sourceTree = SOURCE_ROOT; }; + 43279412194F0062003C9FEA /* right_arrow.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = right_arrow.xpm; path = ../pixmaps/right_arrow.xpm; sourceTree = SOURCE_ROOT; }; + 43279413194F0062003C9FEA /* set-next-button.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "set-next-button.xpm"; path = "../pixmaps/set-next-button.xpm"; sourceTree = SOURCE_ROOT; }; + 43279414194F0062003C9FEA /* small-round-button-01.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "small-round-button-01.xpm"; path = "../pixmaps/small-round-button-01.xpm"; sourceTree = SOURCE_ROOT; }; + 43279415194F0062003C9FEA /* small_x.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = small_x.xpm; path = ../pixmaps/small_x.xpm; sourceTree = SOURCE_ROOT; }; + 43279416194F0062003C9FEA /* toggle-button-00.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "toggle-button-00.xpm"; path = "../pixmaps/toggle-button-00.xpm"; sourceTree = SOURCE_ROOT; }; + 43279417194F0062003C9FEA /* toggle-button-01.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "toggle-button-01.xpm"; path = "../pixmaps/toggle-button-01.xpm"; sourceTree = SOURCE_ROOT; }; + 43279418194F0062003C9FEA /* tool_audition.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tool_audition.xpm; path = ../pixmaps/tool_audition.xpm; sourceTree = SOURCE_ROOT; }; + 43279419194F0062003C9FEA /* tool_gain.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tool_gain.xpm; path = ../pixmaps/tool_gain.xpm; sourceTree = SOURCE_ROOT; }; + 4327941A194F0062003C9FEA /* tool_object.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tool_object.xpm; path = ../pixmaps/tool_object.xpm; sourceTree = SOURCE_ROOT; }; + 4327941B194F0062003C9FEA /* tool_range.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tool_range.xpm; path = ../pixmaps/tool_range.xpm; sourceTree = SOURCE_ROOT; }; + 4327941C194F0062003C9FEA /* tool_stretch.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tool_stretch.xpm; path = ../pixmaps/tool_stretch.xpm; sourceTree = SOURCE_ROOT; }; + 4327941D194F0062003C9FEA /* tool_zoom.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tool_zoom.xpm; path = ../pixmaps/tool_zoom.xpm; sourceTree = SOURCE_ROOT; }; + 4327941E194F0062003C9FEA /* v_meter_strip.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = v_meter_strip.xpm; path = ../pixmaps/v_meter_strip.xpm; sourceTree = SOURCE_ROOT; }; + 4327941F194F0062003C9FEA /* vslider00.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = vslider00.xpm; path = ../pixmaps/vslider00.xpm; sourceTree = SOURCE_ROOT; }; + 43279420194F0062003C9FEA /* vslider01.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = vslider01.xpm; path = ../pixmaps/vslider01.xpm; sourceTree = SOURCE_ROOT; }; + 43279421194F0062003C9FEA /* vslider02_rail.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = vslider02_rail.xpm; path = ../pixmaps/vslider02_rail.xpm; sourceTree = SOURCE_ROOT; }; + 43279422194F0062003C9FEA /* vslider02_slider.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = vslider02_slider.xpm; path = ../pixmaps/vslider02_slider.xpm; sourceTree = SOURCE_ROOT; }; + 43279423194F0062003C9FEA /* vslider_slider_16wide.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = vslider_slider_16wide.xpm; path = ../pixmaps/vslider_slider_16wide.xpm; sourceTree = SOURCE_ROOT; }; + 43279424194F0062003C9FEA /* zoom_full.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = zoom_full.xpm; path = ../pixmaps/zoom_full.xpm; sourceTree = SOURCE_ROOT; }; + 43279425194F0062003C9FEA /* zoom_in.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = zoom_in.xpm; path = ../pixmaps/zoom_in.xpm; sourceTree = SOURCE_ROOT; }; + 43279426194F0062003C9FEA /* zoom_out.xpm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = zoom_out.xpm; path = ../pixmaps/zoom_out.xpm; sourceTree = SOURCE_ROOT; }; + 43279427194F0062003C9FEA /* small-splash.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "small-splash.png"; path = "../small-splash.png"; sourceTree = SOURCE_ROOT; }; + 43279428194F0062003C9FEA /* splash.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = splash.png; path = ../splash.png; sourceTree = SOURCE_ROOT; }; + 4327942A194F0062003C9FEA /* device_capture_control.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = device_capture_control.xml; path = ../ui/device_capture_control.xml; sourceTree = SOURCE_ROOT; }; + 4327942B194F0062003C9FEA /* device_playback_control.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = device_playback_control.xml; path = ../ui/device_playback_control.xml; sourceTree = SOURCE_ROOT; }; + 4327942C194F0062003C9FEA /* editor_window.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = editor_window.xml; path = ../ui/editor_window.xml; sourceTree = SOURCE_ROOT; }; + 4327942D194F0062003C9FEA /* midi_device_control.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = midi_device_control.xml; path = ../ui/midi_device_control.xml; sourceTree = SOURCE_ROOT; }; + 4327942E194F0062003C9FEA /* session_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = session_dialog.xml; path = ../ui/session_dialog.xml; sourceTree = SOURCE_ROOT; }; + 4327942F194F0062003C9FEA /* session_lock_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = session_lock_dialog.xml; path = ../ui/session_lock_dialog.xml; sourceTree = SOURCE_ROOT; }; + 43279430194F0062003C9FEA /* tracks_preferences.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = tracks_preferences.xml; path = ../ui/tracks_preferences.xml; sourceTree = SOURCE_ROOT; }; + 43279475194F009E003C9FEA /* tracks.menus.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tracks.menus.in; path = ../tracks.menus.in; sourceTree = SOURCE_ROOT; }; + 435E66781A4AB60C00472D50 /* audiographer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = audiographer.xcodeproj; path = ../../libs/audiographer/macos/audiographer/audiographer.xcodeproj; sourceTree = "<group>"; }; + 4397595019CADAFC00740098 /* canvas.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = canvas.xcodeproj; path = ../../libs/canvas/macosx/canvas/canvas.xcodeproj; sourceTree = "<group>"; }; + 4397599619CB06AC00740098 /* gtkmm2ext.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = gtkmm2ext.xcodeproj; path = ../../libs/gtkmm2ext/macosx/gtkmm2ext/gtkmm2ext.xcodeproj; sourceTree = "<group>"; }; + 43B350F1194F04E00038C140 /* actions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = actions.h; path = ../actions.h; sourceTree = SOURCE_ROOT; }; + 43B350F2194F04E00038C140 /* add_route_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = add_route_dialog.h; path = ../add_route_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B350F3194F04E00038C140 /* add_video_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = add_video_dialog.h; path = ../add_video_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B350F4194F04E00038C140 /* ambiguous_file_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ambiguous_file_dialog.h; path = ../ambiguous_file_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B350F5194F04E00038C140 /* analysis_window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = analysis_window.h; path = ../analysis_window.h; sourceTree = SOURCE_ROOT; }; + 43B350F6194F04E00038C140 /* ardour_button.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ardour_button.h; path = ../ardour_button.h; sourceTree = SOURCE_ROOT; }; + 43B350F7194F04E00038C140 /* ardour_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ardour_dialog.h; path = ../ardour_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B350F8194F04E00038C140 /* ardour_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ardour_ui.h; path = ../ardour_ui.h; sourceTree = SOURCE_ROOT; }; + 43B350F9194F04E00038C140 /* ardour_window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ardour_window.h; path = ../ardour_window.h; sourceTree = SOURCE_ROOT; }; + 43B350FA194F04E00038C140 /* au_pluginui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = au_pluginui.h; path = ../au_pluginui.h; sourceTree = SOURCE_ROOT; }; + 43B350FB194F04E00038C140 /* audio_clock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_clock.h; path = ../audio_clock.h; sourceTree = SOURCE_ROOT; }; + 43B350FC194F04E00038C140 /* audio_region_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_region_editor.h; path = ../audio_region_editor.h; sourceTree = SOURCE_ROOT; }; + 43B350FD194F04E00038C140 /* audio_region_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_region_view.h; path = ../audio_region_view.h; sourceTree = SOURCE_ROOT; }; + 43B350FE194F04E00038C140 /* audio_streamview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_streamview.h; path = ../audio_streamview.h; sourceTree = SOURCE_ROOT; }; + 43B350FF194F04E00038C140 /* audio_time_axis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_time_axis.h; path = ../audio_time_axis.h; sourceTree = SOURCE_ROOT; }; + 43B35100194F04E00038C140 /* automation_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_controller.h; path = ../automation_controller.h; sourceTree = SOURCE_ROOT; }; + 43B35101194F04E00038C140 /* automation_line.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_line.h; path = ../automation_line.h; sourceTree = SOURCE_ROOT; }; + 43B35102194F04E00038C140 /* automation_region_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_region_view.h; path = ../automation_region_view.h; sourceTree = SOURCE_ROOT; }; + 43B35103194F04E00038C140 /* automation_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_selection.h; path = ../automation_selection.h; sourceTree = SOURCE_ROOT; }; + 43B35104194F04E00038C140 /* automation_streamview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_streamview.h; path = ../automation_streamview.h; sourceTree = SOURCE_ROOT; }; + 43B35105194F04E00038C140 /* automation_time_axis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_time_axis.h; path = ../automation_time_axis.h; sourceTree = SOURCE_ROOT; }; + 43B35106194F04E00038C140 /* axis_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = axis_view.h; path = ../axis_view.h; sourceTree = SOURCE_ROOT; }; + 43B35107194F04E00038C140 /* big_clock_window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = big_clock_window.h; path = ../big_clock_window.h; sourceTree = SOURCE_ROOT; }; + 43B35108194F04E00038C140 /* bundle_env.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bundle_env.h; path = ../bundle_env.h; sourceTree = SOURCE_ROOT; }; + 43B35109194F04E00038C140 /* bundle_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bundle_manager.h; path = ../bundle_manager.h; sourceTree = SOURCE_ROOT; }; + 43B3510A194F04E00038C140 /* button_joiner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = button_joiner.h; path = ../button_joiner.h; sourceTree = SOURCE_ROOT; }; + 43B3510B194F04E00038C140 /* canvas_vars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = canvas_vars.h; path = ../canvas_vars.h; sourceTree = SOURCE_ROOT; }; + 43B3510C194F04E00038C140 /* canvas-waveview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "canvas-waveview.h"; path = "../canvas-waveview.h"; sourceTree = SOURCE_ROOT; }; + 43B3510D194F04E00038C140 /* clock_group.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = clock_group.h; path = ../clock_group.h; sourceTree = SOURCE_ROOT; }; + 43B3510E194F04E00038C140 /* configinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = configinfo.h; path = ../configinfo.h; sourceTree = SOURCE_ROOT; }; + 43B3510F194F04E00038C140 /* control_point_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = control_point_dialog.h; path = ../control_point_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B35110194F04E00038C140 /* control_point.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = control_point.h; path = ../control_point.h; sourceTree = SOURCE_ROOT; }; + 43B35111194F04E00038C140 /* crossfade_edit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = crossfade_edit.h; path = ../crossfade_edit.h; sourceTree = SOURCE_ROOT; }; + 43B35112194F04E00038C140 /* crossfade_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = crossfade_view.h; path = ../crossfade_view.h; sourceTree = SOURCE_ROOT; }; + 43B35113194F04E00038C140 /* crossfade_xpms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = crossfade_xpms.h; path = ../crossfade_xpms.h; sourceTree = SOURCE_ROOT; }; + 43B35114194F04E00038C140 /* dbg_msg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dbg_msg.h; path = ../dbg_msg.h; sourceTree = SOURCE_ROOT; }; + 43B35115194F04E00038C140 /* debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = debug.h; path = ../debug.h; sourceTree = SOURCE_ROOT; }; + 43B35116194F04E00038C140 /* device_connection_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = device_connection_control.h; path = ../device_connection_control.h; sourceTree = SOURCE_ROOT; }; + 43B35117194F04E00038C140 /* edit_note_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = edit_note_dialog.h; path = ../edit_note_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B35118194F04E00038C140 /* editing_syms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editing_syms.h; path = ../editing_syms.h; sourceTree = SOURCE_ROOT; }; + 43B35119194F04E00038C140 /* editing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editing.h; path = ../editing.h; sourceTree = SOURCE_ROOT; }; + 43B3511A194F04E00038C140 /* editor_component.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_component.h; path = ../editor_component.h; sourceTree = SOURCE_ROOT; }; + 43B3511B194F04E00038C140 /* editor_cursors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_cursors.h; path = ../editor_cursors.h; sourceTree = SOURCE_ROOT; }; + 43B3511C194F04E00038C140 /* editor_drag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_drag.h; path = ../editor_drag.h; sourceTree = SOURCE_ROOT; }; + 43B3511D194F04E00038C140 /* editor_enums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_enums.h; path = ../editor_enums.h; sourceTree = SOURCE_ROOT; }; + 43B3511E194F04E00038C140 /* editor_group_tabs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_group_tabs.h; path = ../editor_group_tabs.h; sourceTree = SOURCE_ROOT; }; + 43B3511F194F04E00038C140 /* editor_items.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_items.h; path = ../editor_items.h; sourceTree = SOURCE_ROOT; }; + 43B35120194F04E00038C140 /* editor_locations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_locations.h; path = ../editor_locations.h; sourceTree = SOURCE_ROOT; }; + 43B35121194F04E00038C140 /* editor_regions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_regions.h; path = ../editor_regions.h; sourceTree = SOURCE_ROOT; }; + 43B35122194F04E00038C140 /* editor_route_groups.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_route_groups.h; path = ../editor_route_groups.h; sourceTree = SOURCE_ROOT; }; + 43B35123194F04E00038C140 /* editor_routes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_routes.h; path = ../editor_routes.h; sourceTree = SOURCE_ROOT; }; + 43B35124194F04E00038C140 /* editor_snapshots.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_snapshots.h; path = ../editor_snapshots.h; sourceTree = SOURCE_ROOT; }; + 43B35125194F04E00038C140 /* editor_summary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor_summary.h; path = ../editor_summary.h; sourceTree = SOURCE_ROOT; }; + 43B35126194F04E00038C140 /* editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = editor.h; path = ../editor.h; sourceTree = SOURCE_ROOT; }; + 43B35127194F04E00038C140 /* engine_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = engine_dialog.h; path = ../engine_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B35128194F04E00038C140 /* enums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = enums.h; path = ../enums.h; sourceTree = SOURCE_ROOT; }; + 43B3512A194F04E00038C140 /* export_channel_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_channel_selector.h; path = ../export_channel_selector.h; sourceTree = SOURCE_ROOT; }; + 43B3512B194F04E00038C140 /* export_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_dialog.h; path = ../export_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B3512C194F04E00038C140 /* export_file_notebook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_file_notebook.h; path = ../export_file_notebook.h; sourceTree = SOURCE_ROOT; }; + 43B3512D194F04E00038C140 /* export_filename_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_filename_selector.h; path = ../export_filename_selector.h; sourceTree = SOURCE_ROOT; }; + 43B3512E194F04E00038C140 /* export_format_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_format_dialog.h; path = ../export_format_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B3512F194F04E00038C140 /* export_format_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_format_selector.h; path = ../export_format_selector.h; sourceTree = SOURCE_ROOT; }; + 43B35130194F04E00038C140 /* export_preset_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_preset_selector.h; path = ../export_preset_selector.h; sourceTree = SOURCE_ROOT; }; + 43B35131194F04E00038C140 /* export_range_markers_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_range_markers_dialog.h; path = ../export_range_markers_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B35132194F04E00038C140 /* export_timespan_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_timespan_selector.h; path = ../export_timespan_selector.h; sourceTree = SOURCE_ROOT; }; + 43B35133194F04E00038C140 /* export_video_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_video_dialog.h; path = ../export_video_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B35134194F04E00038C140 /* export_video_infobox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_video_infobox.h; path = ../export_video_infobox.h; sourceTree = SOURCE_ROOT; }; + 43B35135194F04E00038C140 /* fft_graph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fft_graph.h; path = ../fft_graph.h; sourceTree = SOURCE_ROOT; }; + 43B35136194F04E00038C140 /* fft_result.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fft_result.h; path = ../fft_result.h; sourceTree = SOURCE_ROOT; }; + 43B35137194F04E00038C140 /* fft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fft.h; path = ../fft.h; sourceTree = SOURCE_ROOT; }; + 43B35138194F04E00038C140 /* fix_carbon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fix_carbon.h; path = ../fix_carbon.h; sourceTree = SOURCE_ROOT; }; + 43B35139194F04E00038C140 /* gain_meter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gain_meter.h; path = ../gain_meter.h; sourceTree = SOURCE_ROOT; }; + 43B3513A194F04E00038C140 /* gettext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gettext.h; path = ../gettext.h; sourceTree = SOURCE_ROOT; }; + 43B3513B194F04E00038C140 /* ghostregion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ghostregion.h; path = ../ghostregion.h; sourceTree = SOURCE_ROOT; }; + 43B3513C194F04E00038C140 /* global_port_matrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = global_port_matrix.h; path = ../global_port_matrix.h; sourceTree = SOURCE_ROOT; }; + 43B3513D194F04E00038C140 /* global_signals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = global_signals.h; path = ../global_signals.h; sourceTree = SOURCE_ROOT; }; + 43B3513E194F04E00038C140 /* group_tabs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = group_tabs.h; path = ../group_tabs.h; sourceTree = SOURCE_ROOT; }; + 43B3513F194F04E00038C140 /* gtk_pianokeyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gtk_pianokeyboard.h; path = ../gtk_pianokeyboard.h; sourceTree = SOURCE_ROOT; }; + 43B35142194F04E00038C140 /* gui_object.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gui_object.h; path = ../gui_object.h; sourceTree = SOURCE_ROOT; }; + 43B35143194F04E00038C140 /* gui_thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gui_thread.h; path = ../gui_thread.h; sourceTree = SOURCE_ROOT; }; + 43B35144194F04E00038C140 /* hit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hit.h; path = ../hit.h; sourceTree = SOURCE_ROOT; }; + 43B35145194F04E00038C140 /* i18n.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = i18n.h; path = ../i18n.h; sourceTree = SOURCE_ROOT; }; + 43B35146194F04E00038C140 /* insert_time_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = insert_time_dialog.h; path = ../insert_time_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B35147194F04E00038C140 /* interthread_progress_window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = interthread_progress_window.h; path = ../interthread_progress_window.h; sourceTree = SOURCE_ROOT; }; + 43B35148194F04E00038C140 /* io_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = io_selector.h; path = ../io_selector.h; sourceTree = SOURCE_ROOT; }; + 43B35149194F04E00038C140 /* keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = keyboard.h; path = ../keyboard.h; sourceTree = SOURCE_ROOT; }; + 43B3514A194F04E00038C140 /* keyeditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = keyeditor.h; path = ../keyeditor.h; sourceTree = SOURCE_ROOT; }; + 43B3514B194F04E00038C140 /* latency_gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = latency_gui.h; path = ../latency_gui.h; sourceTree = SOURCE_ROOT; }; + 43B3514C194F04E00038C140 /* led.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = led.h; path = ../led.h; sourceTree = SOURCE_ROOT; }; + 43B3514D194F04E00038C140 /* level_meter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = level_meter.h; path = ../level_meter.h; sourceTree = SOURCE_ROOT; }; + 43B3514E194F04E00038C140 /* location_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = location_ui.h; path = ../location_ui.h; sourceTree = SOURCE_ROOT; }; + 43B3514F194F04E00038C140 /* logmeter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = logmeter.h; path = ../logmeter.h; sourceTree = SOURCE_ROOT; }; + 43B35150194F04E00038C140 /* lv2_external_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lv2_external_ui.h; path = ../lv2_external_ui.h; sourceTree = SOURCE_ROOT; }; + 43B35151194F04E00038C140 /* lv2_plugin_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lv2_plugin_ui.h; path = ../lv2_plugin_ui.h; sourceTree = SOURCE_ROOT; }; + 43B35152194F04E00038C140 /* lxvst_plugin_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lxvst_plugin_ui.h; path = ../lxvst_plugin_ui.h; sourceTree = SOURCE_ROOT; }; + 43B35153194F04E00038C140 /* main_clock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = main_clock.h; path = ../main_clock.h; sourceTree = SOURCE_ROOT; }; + 43B35154194F04E00038C140 /* marker_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = marker_selection.h; path = ../marker_selection.h; sourceTree = SOURCE_ROOT; }; + 43B35155194F04E00038C140 /* marker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = marker.h; path = ../marker.h; sourceTree = SOURCE_ROOT; }; + 43B35156194F04E00038C140 /* meter_patterns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = meter_patterns.h; path = ../meter_patterns.h; sourceTree = SOURCE_ROOT; }; + 43B35157194F04E00038C140 /* meter_strip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = meter_strip.h; path = ../meter_strip.h; sourceTree = SOURCE_ROOT; }; + 43B35158194F04E00038C140 /* meterbridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = meterbridge.h; path = ../meterbridge.h; sourceTree = SOURCE_ROOT; }; + 43B35159194F04E00038C140 /* midi_automation_line.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_automation_line.h; path = ../midi_automation_line.h; sourceTree = SOURCE_ROOT; }; + 43B3515A194F04E00038C140 /* midi_channel_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_channel_dialog.h; path = ../midi_channel_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B3515B194F04E00038C140 /* midi_channel_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_channel_selector.h; path = ../midi_channel_selector.h; sourceTree = SOURCE_ROOT; }; + 43B3515C194F04E00038C140 /* midi_cut_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_cut_buffer.h; path = ../midi_cut_buffer.h; sourceTree = SOURCE_ROOT; }; + 43B3515D194F04E00038C140 /* midi_device_connection_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_device_connection_control.h; path = ../midi_device_connection_control.h; sourceTree = SOURCE_ROOT; }; + 43B3515E194F04E00038C140 /* midi_export_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_export_dialog.h; path = ../midi_export_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B3515F194F04E00038C140 /* midi_list_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_list_editor.h; path = ../midi_list_editor.h; sourceTree = SOURCE_ROOT; }; + 43B35160194F04E00038C140 /* midi_port_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_port_dialog.h; path = ../midi_port_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B35161194F04E00038C140 /* midi_region_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_region_view.h; path = ../midi_region_view.h; sourceTree = SOURCE_ROOT; }; + 43B35162194F04E00038C140 /* midi_scroomer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_scroomer.h; path = ../midi_scroomer.h; sourceTree = SOURCE_ROOT; }; + 43B35163194F04E00038C140 /* midi_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_selection.h; path = ../midi_selection.h; sourceTree = SOURCE_ROOT; }; + 43B35164194F04E00038C140 /* midi_streamview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_streamview.h; path = ../midi_streamview.h; sourceTree = SOURCE_ROOT; }; + 43B35165194F04E00038C140 /* midi_time_axis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_time_axis.h; path = ../midi_time_axis.h; sourceTree = SOURCE_ROOT; }; + 43B35166194F04E00038C140 /* midi_tracer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_tracer.h; path = ../midi_tracer.h; sourceTree = SOURCE_ROOT; }; + 43B35167194F04E00038C140 /* midi_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_util.h; path = ../midi_util.h; sourceTree = SOURCE_ROOT; }; + 43B35168194F04E00038C140 /* midi_velocity_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_velocity_dialog.h; path = ../midi_velocity_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B35169194F04E00038C140 /* missing_file_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = missing_file_dialog.h; path = ../missing_file_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B3516A194F04E00038C140 /* missing_plugin_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = missing_plugin_dialog.h; path = ../missing_plugin_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B3516B194F04E00038C140 /* mixer_actor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mixer_actor.h; path = ../mixer_actor.h; sourceTree = SOURCE_ROOT; }; + 43B3516C194F04E00038C140 /* mixer_group_tabs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mixer_group_tabs.h; path = ../mixer_group_tabs.h; sourceTree = SOURCE_ROOT; }; + 43B3516D194F04E00038C140 /* mixer_strip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mixer_strip.h; path = ../mixer_strip.h; sourceTree = SOURCE_ROOT; }; + 43B3516E194F04E00038C140 /* mixer_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mixer_ui.h; path = ../mixer_ui.h; sourceTree = SOURCE_ROOT; }; + 43B3516F194F04E00038C140 /* monitor_section.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = monitor_section.h; path = ../monitor_section.h; sourceTree = SOURCE_ROOT; }; + 43B35170194F04E00038C140 /* mono_panner_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mono_panner_editor.h; path = ../mono_panner_editor.h; sourceTree = SOURCE_ROOT; }; + 43B35171194F04E00038C140 /* mono_panner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mono_panner.h; path = ../mono_panner.h; sourceTree = SOURCE_ROOT; }; + 43B35172194F04E00038C140 /* mouse_cursors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mouse_cursors.h; path = ../mouse_cursors.h; sourceTree = SOURCE_ROOT; }; + 43B35173194F04E00038C140 /* nag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = nag.h; path = ../nag.h; sourceTree = SOURCE_ROOT; }; + 43B35174194F04E00038C140 /* new_plugin_preset_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = new_plugin_preset_dialog.h; path = ../new_plugin_preset_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B35175194F04E00038C140 /* normalize_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = normalize_dialog.h; path = ../normalize_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B35176194F04E00038C140 /* note_base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = note_base.h; path = ../note_base.h; sourceTree = SOURCE_ROOT; }; + 43B35177194F04E00038C140 /* note_player.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = note_player.h; path = ../note_player.h; sourceTree = SOURCE_ROOT; }; + 43B35178194F04E00038C140 /* note.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = note.h; path = ../note.h; sourceTree = SOURCE_ROOT; }; + 43B35179194F04E00038C140 /* nsm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = nsm.h; path = ../nsm.h; sourceTree = SOURCE_ROOT; }; + 43B3517A194F04E00038C140 /* nsmclient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = nsmclient.h; path = ../nsmclient.h; sourceTree = SOURCE_ROOT; }; + 43B3517B194F04E00038C140 /* open_file_dialog_proxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = open_file_dialog_proxy.h; path = ../open_file_dialog_proxy.h; sourceTree = SOURCE_ROOT; }; + 43B3517C194F04E00038C140 /* open_file_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = open_file_dialog.h; path = ../open_file_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B3517D194F04E00038C140 /* option_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = option_editor.h; path = ../option_editor.h; sourceTree = SOURCE_ROOT; }; + 43B3517E194F04E00038C140 /* opts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = opts.h; path = ../opts.h; sourceTree = SOURCE_ROOT; }; + 43B3517F194F04E00038C140 /* panner_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = panner_editor.h; path = ../panner_editor.h; sourceTree = SOURCE_ROOT; }; + 43B35180194F04E00038C140 /* panner_interface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = panner_interface.h; path = ../panner_interface.h; sourceTree = SOURCE_ROOT; }; + 43B35181194F04E00038C140 /* panner_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = panner_ui.h; path = ../panner_ui.h; sourceTree = SOURCE_ROOT; }; + 43B35182194F04E00038C140 /* panner2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = panner2d.h; path = ../panner2d.h; sourceTree = SOURCE_ROOT; }; + 43B35183194F04E00038C140 /* patch_change_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = patch_change_dialog.h; path = ../patch_change_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B35184194F04E00038C140 /* patch_change.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = patch_change.h; path = ../patch_change.h; sourceTree = SOURCE_ROOT; }; + 43B35185194F04E00038C140 /* piano_roll_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = piano_roll_header.h; path = ../piano_roll_header.h; sourceTree = SOURCE_ROOT; }; + 43B35186194F04E00038C140 /* pingback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pingback.h; path = ../pingback.h; sourceTree = SOURCE_ROOT; }; + 43B35187194F04E00038C140 /* playlist_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist_selection.h; path = ../playlist_selection.h; sourceTree = SOURCE_ROOT; }; + 43B35188194F04E00038C140 /* playlist_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist_selector.h; path = ../playlist_selector.h; sourceTree = SOURCE_ROOT; }; + 43B35189194F04E00038C140 /* plugin_eq_gui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin_eq_gui.h; path = ../plugin_eq_gui.h; sourceTree = SOURCE_ROOT; }; + 43B3518A194F04E00038C140 /* plugin_interest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin_interest.h; path = ../plugin_interest.h; sourceTree = SOURCE_ROOT; }; + 43B3518B194F04E00038C140 /* plugin_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin_selector.h; path = ../plugin_selector.h; sourceTree = SOURCE_ROOT; }; + 43B3518C194F04E00038C140 /* plugin_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin_ui.h; path = ../plugin_ui.h; sourceTree = SOURCE_ROOT; }; + 43B3518D194F04E00038C140 /* point_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = point_selection.h; path = ../point_selection.h; sourceTree = SOURCE_ROOT; }; + 43B3518E194F04E00038C140 /* port_group.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_group.h; path = ../port_group.h; sourceTree = SOURCE_ROOT; }; + 43B3518F194F04E00038C140 /* port_insert_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_insert_ui.h; path = ../port_insert_ui.h; sourceTree = SOURCE_ROOT; }; + 43B35190194F04E00038C140 /* port_matrix_body.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix_body.h; path = ../port_matrix_body.h; sourceTree = SOURCE_ROOT; }; + 43B35191194F04E00038C140 /* port_matrix_column_labels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix_column_labels.h; path = ../port_matrix_column_labels.h; sourceTree = SOURCE_ROOT; }; + 43B35192194F04E00038C140 /* port_matrix_component.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix_component.h; path = ../port_matrix_component.h; sourceTree = SOURCE_ROOT; }; + 43B35193194F04E00038C140 /* port_matrix_grid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix_grid.h; path = ../port_matrix_grid.h; sourceTree = SOURCE_ROOT; }; + 43B35194194F04E00038C140 /* port_matrix_labels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix_labels.h; path = ../port_matrix_labels.h; sourceTree = SOURCE_ROOT; }; + 43B35195194F04E00038C140 /* port_matrix_row_labels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix_row_labels.h; path = ../port_matrix_row_labels.h; sourceTree = SOURCE_ROOT; }; + 43B35196194F04E00038C140 /* port_matrix_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix_types.h; path = ../port_matrix_types.h; sourceTree = SOURCE_ROOT; }; + 43B35197194F04E00038C140 /* port_matrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_matrix.h; path = ../port_matrix.h; sourceTree = SOURCE_ROOT; }; + 43B35198194F04E00038C140 /* processor_box.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = processor_box.h; path = ../processor_box.h; sourceTree = SOURCE_ROOT; }; + 43B35199194F04E00038C140 /* processor_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = processor_selection.h; path = ../processor_selection.h; sourceTree = SOURCE_ROOT; }; + 43B3519A194F04E00038C140 /* progress_reporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = progress_reporter.h; path = ../progress_reporter.h; sourceTree = SOURCE_ROOT; }; + 43B3519B194F04E00038C140 /* prompter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prompter.h; path = ../prompter.h; sourceTree = SOURCE_ROOT; }; + 43B3519C194F04E00038C140 /* public_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = public_editor.h; path = ../public_editor.h; sourceTree = SOURCE_ROOT; }; + 43B3519D194F04E00038C140 /* quantize_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = quantize_dialog.h; path = ../quantize_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B3519E194F04E00038C140 /* rc_option_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rc_option_editor.h; path = ../rc_option_editor.h; sourceTree = SOURCE_ROOT; }; + 43B3519F194F04E00038C140 /* region_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_editor.h; path = ../region_editor.h; sourceTree = SOURCE_ROOT; }; + 43B351A0194F04E00038C140 /* region_gain_line.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_gain_line.h; path = ../region_gain_line.h; sourceTree = SOURCE_ROOT; }; + 43B351A1194F04E00038C140 /* region_layering_order_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_layering_order_editor.h; path = ../region_layering_order_editor.h; sourceTree = SOURCE_ROOT; }; + 43B351A2194F04E00038C140 /* region_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_selection.h; path = ../region_selection.h; sourceTree = SOURCE_ROOT; }; + 43B351A3194F04E00038C140 /* region_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_view.h; path = ../region_view.h; sourceTree = SOURCE_ROOT; }; + 43B351A4194F04E00038C140 /* return_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = return_ui.h; path = ../return_ui.h; sourceTree = SOURCE_ROOT; }; + 43B351A5194F04E00038C140 /* rgb_macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rgb_macros.h; path = ../rgb_macros.h; sourceTree = SOURCE_ROOT; }; + 43B351A6194F04E00038C140 /* rhythm_ferret.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rhythm_ferret.h; path = ../rhythm_ferret.h; sourceTree = SOURCE_ROOT; }; + 43B351A7194F04E00038C140 /* route_group_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_group_dialog.h; path = ../route_group_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B351A8194F04E00038C140 /* route_group_menu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_group_menu.h; path = ../route_group_menu.h; sourceTree = SOURCE_ROOT; }; + 43B351A9194F04E00038C140 /* route_params_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_params_ui.h; path = ../route_params_ui.h; sourceTree = SOURCE_ROOT; }; + 43B351AA194F04E00038C140 /* route_processor_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_processor_selection.h; path = ../route_processor_selection.h; sourceTree = SOURCE_ROOT; }; + 43B351AB194F04E00038C140 /* route_sorter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_sorter.h; path = ../route_sorter.h; sourceTree = SOURCE_ROOT; }; + 43B351AC194F04E00038C140 /* route_time_axis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_time_axis.h; path = ../route_time_axis.h; sourceTree = SOURCE_ROOT; }; + 43B351AD194F04E00038C140 /* route_ui_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_ui_selection.h; path = ../route_ui_selection.h; sourceTree = SOURCE_ROOT; }; + 43B351AE194F04E00038C140 /* route_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_ui.h; path = ../route_ui.h; sourceTree = SOURCE_ROOT; }; + 43B351AF194F04E00038C140 /* search_path_option.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = search_path_option.h; path = ../search_path_option.h; sourceTree = SOURCE_ROOT; }; + 43B351B0194F04E00038C140 /* selectable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = selectable.h; path = ../selectable.h; sourceTree = SOURCE_ROOT; }; + 43B351B1194F04E00038C140 /* selection_templates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = selection_templates.h; path = ../selection_templates.h; sourceTree = SOURCE_ROOT; }; + 43B351B2194F04E00038C140 /* selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = selection.h; path = ../selection.h; sourceTree = SOURCE_ROOT; }; + 43B351B3194F04E00038C140 /* send_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = send_ui.h; path = ../send_ui.h; sourceTree = SOURCE_ROOT; }; + 43B351B4194F04E00038C140 /* session_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_dialog.h; path = ../session_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B351B5194F04E00038C140 /* session_dialog.logic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_dialog.logic.h; path = ../session_dialog.logic.h; sourceTree = SOURCE_ROOT; }; + 43B351B6194F04E00038C140 /* session_import_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_import_dialog.h; path = ../session_import_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B351B7194F04E00038C140 /* session_lock_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_lock_dialog.h; path = ../session_lock_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B351B8194F04E00038C140 /* session_metadata_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_metadata_dialog.h; path = ../session_metadata_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B351B9194F04E00038C140 /* session_option_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_option_editor.h; path = ../session_option_editor.h; sourceTree = SOURCE_ROOT; }; + 43B351BA194F04E00038C140 /* sfdb_freesound_mootcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sfdb_freesound_mootcher.h; path = ../sfdb_freesound_mootcher.h; sourceTree = SOURCE_ROOT; }; + 43B351BB194F04E00038C140 /* sfdb_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sfdb_ui.h; path = ../sfdb_ui.h; sourceTree = SOURCE_ROOT; }; + 43B351BC194F04E00038C140 /* shuttle_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = shuttle_control.h; path = ../shuttle_control.h; sourceTree = SOURCE_ROOT; }; + 43B351BD194F04E00038C140 /* speaker_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = speaker_dialog.h; path = ../speaker_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B351BE194F04E00038C140 /* splash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = splash.h; path = ../splash.h; sourceTree = SOURCE_ROOT; }; + 43B351BF194F04E00038C140 /* startup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = startup.h; path = ../startup.h; sourceTree = SOURCE_ROOT; }; + 43B351C0194F04E00038C140 /* step_editing.bindings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = step_editing.bindings; path = ../step_editing.bindings; sourceTree = SOURCE_ROOT; }; + 43B351C1194F04E00038C140 /* step_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = step_editor.h; path = ../step_editor.h; sourceTree = SOURCE_ROOT; }; + 43B351C2194F04E00038C140 /* step_entry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = step_entry.h; path = ../step_entry.h; sourceTree = SOURCE_ROOT; }; + 43B351C3194F04E00038C140 /* stereo_panner_editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stereo_panner_editor.h; path = ../stereo_panner_editor.h; sourceTree = SOURCE_ROOT; }; + 43B351C4194F04E00038C140 /* stereo_panner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stereo_panner.h; path = ../stereo_panner.h; sourceTree = SOURCE_ROOT; }; + 43B351C5194F04E00038C140 /* streamview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = streamview.h; path = ../streamview.h; sourceTree = SOURCE_ROOT; }; + 43B351C6194F04E00038C140 /* strip_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = strip_selection.h; path = ../strip_selection.h; sourceTree = SOURCE_ROOT; }; + 43B351C7194F04E00038C140 /* strip_silence_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = strip_silence_dialog.h; path = ../strip_silence_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B351C8194F04E00038C140 /* sys_ex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sys_ex.h; path = ../sys_ex.h; sourceTree = SOURCE_ROOT; }; + 43B351C9194F04E00038C140 /* tape_region_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tape_region_view.h; path = ../tape_region_view.h; sourceTree = SOURCE_ROOT; }; + 43B351CA194F04E00038C140 /* tempo_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tempo_dialog.h; path = ../tempo_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B351CB194F04E00038C140 /* tempo_lines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tempo_lines.h; path = ../tempo_lines.h; sourceTree = SOURCE_ROOT; }; + 43B351CC194F04E00038C140 /* theme_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = theme_manager.h; path = ../theme_manager.h; sourceTree = SOURCE_ROOT; }; + 43B351CD194F04E00038C140 /* time_axis_view_item.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = time_axis_view_item.h; path = ../time_axis_view_item.h; sourceTree = SOURCE_ROOT; }; + 43B351CE194F04E00038C140 /* time_axis_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = time_axis_view.h; path = ../time_axis_view.h; sourceTree = SOURCE_ROOT; }; + 43B351CF194F04E00038C140 /* time_fx_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = time_fx_dialog.h; path = ../time_fx_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B351D0194F04E00038C140 /* time_info_box.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = time_info_box.h; path = ../time_info_box.h; sourceTree = SOURCE_ROOT; }; + 43B351D1194F04E00038C140 /* time_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = time_selection.h; path = ../time_selection.h; sourceTree = SOURCE_ROOT; }; + 43B351D2194F04E00038C140 /* track_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = track_selection.h; path = ../track_selection.h; sourceTree = SOURCE_ROOT; }; + 43B351D3194F04E00038C140 /* track_view_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = track_view_list.h; path = ../track_view_list.h; sourceTree = SOURCE_ROOT; }; + 43B351D4194F04E00038C140 /* tracks_control_panel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tracks_control_panel.h; path = ../tracks_control_panel.h; sourceTree = SOURCE_ROOT; }; + 43B351D5194F04E00038C140 /* tracks_control_panel.logic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tracks_control_panel.logic.h; path = ../tracks_control_panel.logic.h; sourceTree = SOURCE_ROOT; }; + 43B351D6194F04E00038C140 /* transcode_ffmpeg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = transcode_ffmpeg.h; path = ../transcode_ffmpeg.h; sourceTree = SOURCE_ROOT; }; + 43B351D7194F04E00038C140 /* transcode_video_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = transcode_video_dialog.h; path = ../transcode_video_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B351D8194F04E00038C140 /* transpose_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = transpose_dialog.h; path = ../transpose_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B351D9194F04E00038C140 /* ui_config_vars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ui_config_vars.h; path = ../ui_config_vars.h; sourceTree = SOURCE_ROOT; }; + 43B351DA194F04E00038C140 /* ui_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ui_config.h; path = ../ui_config.h; sourceTree = SOURCE_ROOT; }; + 43B351DB194F04E00038C140 /* utils_videotl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utils_videotl.h; path = ../utils_videotl.h; sourceTree = SOURCE_ROOT; }; + 43B351DC194F04E00038C140 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utils.h; path = ../utils.h; sourceTree = SOURCE_ROOT; }; + 43B351DD194F04E00038C140 /* verbose_cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = verbose_cursor.h; path = ../verbose_cursor.h; sourceTree = SOURCE_ROOT; }; + 43B351DE194F04E00038C140 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = version.h; path = ../version.h; sourceTree = SOURCE_ROOT; }; + 43B351DF194F04E00038C140 /* video_image_frame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = video_image_frame.h; path = ../video_image_frame.h; sourceTree = SOURCE_ROOT; }; + 43B351E0194F04E00038C140 /* video_monitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = video_monitor.h; path = ../video_monitor.h; sourceTree = SOURCE_ROOT; }; + 43B351E1194F04E00038C140 /* video_server_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = video_server_dialog.h; path = ../video_server_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B351E2194F04E00038C140 /* video_timeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = video_timeline.h; path = ../video_timeline.h; sourceTree = SOURCE_ROOT; }; + 43B351E3194F04E00038C140 /* visibility_group.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = visibility_group.h; path = ../visibility_group.h; sourceTree = SOURCE_ROOT; }; + 43B351E4194F04E00038C140 /* volume_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = volume_controller.h; path = ../volume_controller.h; sourceTree = SOURCE_ROOT; }; + 43B351E5194F04E00038C140 /* vst_plugin_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vst_plugin_ui.h; path = ../vst_plugin_ui.h; sourceTree = SOURCE_ROOT; }; + 43B351E6194F04E00038C140 /* waves_button.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_button.h; path = ../waves_button.h; sourceTree = SOURCE_ROOT; }; + 43B351E7194F04E00038C140 /* waves_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_dialog.h; path = ../waves_dialog.h; sourceTree = SOURCE_ROOT; }; + 43B351E8194F04E00038C140 /* waves_icon_button.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_icon_button.h; path = ../waves_icon_button.h; sourceTree = SOURCE_ROOT; }; + 43B351E9194F04E00038C140 /* waves_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_ui.h; path = ../waves_ui.h; sourceTree = SOURCE_ROOT; }; + 43B351EA194F04E00038C140 /* window_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = window_manager.h; path = ../window_manager.h; sourceTree = SOURCE_ROOT; }; + 43B351EB194F04E00038C140 /* windows_vst_plugin_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = windows_vst_plugin_ui.h; path = ../windows_vst_plugin_ui.h; sourceTree = SOURCE_ROOT; }; + 43B351EE194F12FB0038C140 /* waves_audiobackend.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = waves_audiobackend.xcodeproj; path = ../../libs/backends/wavesaudio/macosx/waves_audiobackend.xcodeproj; sourceTree = "<group>"; }; + 43B351F4194F130C0038C140 /* libardour.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = libardour.xcodeproj; path = ../../libs/ardour/macosx/libardour.xcodeproj; sourceTree = "<group>"; }; + 43B351FA194F131D0038C140 /* pbd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = pbd.xcodeproj; path = ../../libs/pbd/macosx/pbd.xcodeproj; sourceTree = "<group>"; }; + 5BC24BA91A64328D006A2400 /* trackslive.menus.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = trackslive.menus.in; path = ../trackslive.menus.in; sourceTree = "<group>"; }; + 5BC67E581A408FCE00F29ABA /* progress_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = progress_dialog.xml; sourceTree = "<group>"; }; + 5BC67E5D1A4090AA00F29ABA /* progress_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = progress_dialog.h; path = ../progress_dialog.h; sourceTree = "<group>"; }; + 5BC67E5E1A4090BD00F29ABA /* progress_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = progress_dialog.cc; path = ../progress_dialog.cc; sourceTree = "<group>"; }; + 95176F781A08E6D800E32046 /* file_sample_rate_mismatch_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = file_sample_rate_mismatch_dialog.h; path = ../file_sample_rate_mismatch_dialog.h; sourceTree = "<group>"; }; + 95176F791A08E6E800E32046 /* file_sample_rate_mismatch_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = file_sample_rate_mismatch_dialog.cc; path = ../file_sample_rate_mismatch_dialog.cc; sourceTree = "<group>"; }; + 95176F7D1A08E76F00E32046 /* file_sample_rate_mismatch_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = file_sample_rate_mismatch_dialog.xml; sourceTree = "<group>"; }; + 952E0B3B1A0A1D7000F375D0 /* buildlog.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = buildlog.txt; path = ../../../buildlog.txt; sourceTree = "<group>"; }; + 954DCFBC1A0239DA00B7160E /* about_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = about_dialog.cc; path = ../about_dialog.cc; sourceTree = "<group>"; }; + 954DCFBE1A0239EC00B7160E /* about_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = about_dialog.h; path = ../about_dialog.h; sourceTree = "<group>"; }; + 954DCFBF1A023AAB00B7160E /* about_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = about_dialog.xml; sourceTree = "<group>"; }; + 954DCFC01A023AAB00B7160E /* license_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = license_dialog.xml; sourceTree = "<group>"; }; + 954DCFDD1A07A14E00B7160E /* read_only_session_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = read_only_session_dialog.xml; sourceTree = "<group>"; }; + 956D3F891A851805004F328C /* waves_import_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_import_dialog.xml; sourceTree = "<group>"; }; + 957EF44A1A30BFB300F1500E /* waves_message_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_message_dialog.cc; path = ../waves_message_dialog.cc; sourceTree = "<group>"; }; + 957EF44F1A30BFBF00F1500E /* waves_message_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_message_dialog.h; path = ../waves_message_dialog.h; sourceTree = "<group>"; }; + 95A134DD1A0239080008E3D6 /* license_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = license_dialog.cc; path = ../license_dialog.cc; sourceTree = "<group>"; }; + 95A134DF1A02391F0008E3D6 /* license_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = license_dialog.h; path = ../license_dialog.h; sourceTree = "<group>"; }; + 95D1C51A1A78ED1100BE28DB /* waves_edit_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_edit_dialog.h; path = ../waves_edit_dialog.h; sourceTree = "<group>"; }; + 95D1C51E1A78ED2100BE28DB /* waves_edit_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_edit_dialog.cc; path = ../waves_edit_dialog.cc; sourceTree = "<group>"; }; + 95D1C5201A78ED3A00BE28DB /* waves_edit_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_edit_dialog.xml; sourceTree = "<group>"; }; + 95D4986B1AEA363E006E065D /* audio_engine_reset_info_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = audio_engine_reset_info_dialog.xml; sourceTree = "<group>"; }; + 95D4986C1AEA363E006E065D /* crash_recovery_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = crash_recovery_dialog.xml; sourceTree = "<group>"; }; + 95D4986D1AEA363E006E065D /* waves_save_template_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_save_template_dialog.xml; sourceTree = "<group>"; }; + 95D5D1321A8A514300407F98 /* waves_numeric_edit_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_numeric_edit_dialog.h; path = ../waves_numeric_edit_dialog.h; sourceTree = "<group>"; }; + 95D5D1361A8A514300407F98 /* waves_numeric_edit_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_numeric_edit_dialog.cc; path = ../waves_numeric_edit_dialog.cc; sourceTree = "<group>"; }; + 95D5D1381A8A514300407F98 /* waves_numeric_edit_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_numeric_edit_dialog.xml; sourceTree = "<group>"; }; + 95D6A67A1A8E22E80030CDD0 /* waves_keyeditor.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_keyeditor.xml; sourceTree = "<group>"; }; + 95D71D501A4C66DF00DE5B3B /* waves_track_color_dialog.logic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_track_color_dialog.logic.h; path = ../waves_track_color_dialog.logic.h; sourceTree = "<group>"; }; + 95D71D541A4C66F600DE5B3B /* waves_track_color_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_track_color_dialog.cc; path = ../waves_track_color_dialog.cc; sourceTree = "<group>"; }; + 95D71D561A4C697700DE5B3B /* waves_track_color_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_track_color_dialog.h; path = ../waves_track_color_dialog.h; sourceTree = "<group>"; }; + 95D71D571A4C69AE00DE5B3B /* waves_track_color_dialog.logic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_track_color_dialog.logic.cc; path = ../waves_track_color_dialog.logic.cc; sourceTree = "<group>"; }; + 95D795DB1A7BB40C00120A4F /* marker_inspector_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = marker_inspector_dialog.xml; sourceTree = "<group>"; }; + 95D795DD1A7BB40C00120A4F /* waves_export_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_export_dialog.xml; sourceTree = "<group>"; }; + 95D795DE1A7BB40C00120A4F /* waves_export_file_notebook_page.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_export_file_notebook_page.xml; sourceTree = "<group>"; }; + 95D795DF1A7BB40C00120A4F /* waves_export_file_notebook.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_export_file_notebook.xml; sourceTree = "<group>"; }; + 95D795E01A7BB40C00120A4F /* waves_export_filename_selector.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_export_filename_selector.xml; sourceTree = "<group>"; }; + 95D795E11A7BB40C00120A4F /* waves_export_format_selector.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_export_format_selector.xml; sourceTree = "<group>"; }; + 95D795E21A7BB40C00120A4F /* waves_export_preset_selector.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_export_preset_selector.xml; sourceTree = "<group>"; }; + 95D795E31A7BB40C00120A4F /* waves_export_timespan_selector.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_export_timespan_selector.xml; sourceTree = "<group>"; }; + 95D795E41A7BB40C00120A4F /* waves_port_export_channel_selector.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_port_export_channel_selector.xml; sourceTree = "<group>"; }; + 95D795E51A7BB40C00120A4F /* waves_region_export_channel_selector.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_region_export_channel_selector.xml; sourceTree = "<group>"; }; + 95D795E61A7BB40C00120A4F /* waves_track_color_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_track_color_dialog.xml; sourceTree = "<group>"; }; + 95D795E71A7BB40C00120A4F /* waves_track_export_channel_selector.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_track_export_channel_selector.xml; sourceTree = "<group>"; }; + 95D795FF1A7BB9E000120A4F /* floating_text_entry.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = floating_text_entry.cc; path = ../floating_text_entry.cc; sourceTree = "<group>"; }; + 95D796001A7BB9E000120A4F /* marker_inspector_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = marker_inspector_dialog.cc; path = ../marker_inspector_dialog.cc; sourceTree = "<group>"; }; + 95D796011A7BB9E000120A4F /* marker_inspector_dialog.logic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = marker_inspector_dialog.logic.cc; path = ../marker_inspector_dialog.logic.cc; sourceTree = "<group>"; }; + 95D796021A7BB9E000120A4F /* route_inspector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = route_inspector.cc; path = ../route_inspector.cc; sourceTree = "<group>"; }; + 95D796031A7BB9E000120A4F /* waves_export_channel_selector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_export_channel_selector.cc; path = ../waves_export_channel_selector.cc; sourceTree = "<group>"; }; + 95D796041A7BB9E000120A4F /* waves_export_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_export_dialog.cc; path = ../waves_export_dialog.cc; sourceTree = "<group>"; }; + 95D796051A7BB9E000120A4F /* waves_export_file_notebook.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_export_file_notebook.cc; path = ../waves_export_file_notebook.cc; sourceTree = "<group>"; }; + 95D796061A7BB9E000120A4F /* waves_export_filename_selector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_export_filename_selector.cc; path = ../waves_export_filename_selector.cc; sourceTree = "<group>"; }; + 95D796071A7BB9E000120A4F /* waves_export_format_selector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_export_format_selector.cc; path = ../waves_export_format_selector.cc; sourceTree = "<group>"; }; + 95D796081A7BB9E000120A4F /* waves_export_preset_selector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_export_preset_selector.cc; path = ../waves_export_preset_selector.cc; sourceTree = "<group>"; }; + 95D796091A7BB9E000120A4F /* waves_export_timespan_selector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_export_timespan_selector.cc; path = ../waves_export_timespan_selector.cc; sourceTree = "<group>"; }; + 95D7960A1A7BB9E000120A4F /* waves_import_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_import_dialog.cc; path = ../waves_import_dialog.cc; sourceTree = "<group>"; }; + 95D7961A1A7BBA4E00120A4F /* floating_text_entry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = floating_text_entry.h; path = ../floating_text_entry.h; sourceTree = "<group>"; }; + 95D7961B1A7BBA4E00120A4F /* marker_inspector_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = marker_inspector_dialog.h; path = ../marker_inspector_dialog.h; sourceTree = "<group>"; }; + 95D7961C1A7BBA4E00120A4F /* marker_inspector_dialog.logic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = marker_inspector_dialog.logic.h; path = ../marker_inspector_dialog.logic.h; sourceTree = "<group>"; }; + 95D7961D1A7BBA4E00120A4F /* product_definition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = product_definition.h; path = ../product_definition.h; sourceTree = "<group>"; }; + 95D7961E1A7BBA4E00120A4F /* ruler_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ruler_dialog.h; path = ../ruler_dialog.h; sourceTree = "<group>"; }; + 95D7961F1A7BBA4E00120A4F /* trackslive_resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = trackslive_resource.h; path = ../trackslive_resource.h; sourceTree = "<group>"; }; + 95D796201A7BBA4E00120A4F /* waves_export_channel_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_export_channel_selector.h; path = ../waves_export_channel_selector.h; sourceTree = "<group>"; }; + 95D796211A7BBA4E00120A4F /* waves_export_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_export_dialog.h; path = ../waves_export_dialog.h; sourceTree = "<group>"; }; + 95D796221A7BBA4E00120A4F /* waves_export_file_notebook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_export_file_notebook.h; path = ../waves_export_file_notebook.h; sourceTree = "<group>"; }; + 95D796231A7BBA4E00120A4F /* waves_export_filename_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_export_filename_selector.h; path = ../waves_export_filename_selector.h; sourceTree = "<group>"; }; + 95D796241A7BBA4E00120A4F /* waves_export_format_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_export_format_selector.h; path = ../waves_export_format_selector.h; sourceTree = "<group>"; }; + 95D796251A7BBA4E00120A4F /* waves_export_preset_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_export_preset_selector.h; path = ../waves_export_preset_selector.h; sourceTree = "<group>"; }; + 95D796261A7BBA4E00120A4F /* waves_export_timespan_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_export_timespan_selector.h; path = ../waves_export_timespan_selector.h; sourceTree = "<group>"; }; + 95D796271A7BBA4E00120A4F /* waves_grid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_grid.h; path = ../waves_grid.h; sourceTree = "<group>"; }; + 95D796281A7BBA4E00120A4F /* waves_import_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_import_dialog.h; path = ../waves_import_dialog.h; sourceTree = "<group>"; }; + 95D9E3771A8D1B3B00A0DA46 /* waves_ambiguous_file_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_ambiguous_file_dialog.xml; sourceTree = "<group>"; }; + 95D9E3781A8D1B3B00A0DA46 /* waves_missing_file_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_missing_file_dialog.xml; sourceTree = "<group>"; }; + 95D9E37B1A8D1B5200A0DA46 /* waves_ambiguous_file_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_ambiguous_file_dialog.h; path = ../waves_ambiguous_file_dialog.h; sourceTree = "<group>"; }; + 95D9E37C1A8D1B5200A0DA46 /* waves_missing_file_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_missing_file_dialog.h; path = ../waves_missing_file_dialog.h; sourceTree = "<group>"; }; + 95D9E37D1A8D1B6600A0DA46 /* waves_ambiguous_file_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_ambiguous_file_dialog.cc; path = ../waves_ambiguous_file_dialog.cc; sourceTree = "<group>"; }; + 95D9E37E1A8D1B6600A0DA46 /* waves_missing_file_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_missing_file_dialog.cc; path = ../waves_missing_file_dialog.cc; sourceTree = "<group>"; }; + 95E2A7AA1A8F652F0080BD79 /* waves_radio_item.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_radio_item.xml; sourceTree = "<group>"; }; + 95E5E9411AE9462B0000E2CE /* waves_tooltip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_tooltip.h; path = ../waves_tooltip.h; sourceTree = "<group>"; }; + 95E5E9451AE946510000E2CE /* waves_tooltip.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_tooltip.cc; path = ../waves_tooltip.cc; sourceTree = "<group>"; }; + 95ED5FF61A95F285006D39E4 /* route_inspector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_inspector.h; path = ../route_inspector.h; sourceTree = "<group>"; }; + 95F9DFD61A35A8BD0007E953 /* waves_message_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_message_dialog.xml; sourceTree = "<group>"; }; + 95F9DFD81A35F3310007E953 /* waves_clean_up_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_clean_up_dialog.xml; sourceTree = "<group>"; }; + 95F9DFD91A35F3310007E953 /* waves_connect_to_backend_error_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_connect_to_backend_error_dialog.xml; sourceTree = "<group>"; }; + 95F9DFDA1A35F3310007E953 /* waves_excessive_split_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_excessive_split_dialog.xml; sourceTree = "<group>"; }; + 95F9DFDC1A35F3310007E953 /* waves_file_exists_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_file_exists_dialog.xml; sourceTree = "<group>"; }; + 95F9DFDD1A35F3310007E953 /* waves_how_to_import_dialog_1.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_how_to_import_dialog_1.xml; sourceTree = "<group>"; }; + 95F9DFDE1A35F3310007E953 /* waves_how_to_import_dialog_2.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_how_to_import_dialog_2.xml; sourceTree = "<group>"; }; + 95F9DFDF1A35F3310007E953 /* waves_route_rename_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = waves_route_rename_dialog.xml; sourceTree = "<group>"; }; + CE1A9079199A37AE00ECA62B /* add_tracks_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = add_tracks_dialog.cc; path = ../add_tracks_dialog.cc; sourceTree = "<group>"; }; + CE1A907E199A37BF00ECA62B /* add_tracks_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = add_tracks_dialog.h; path = ../add_tracks_dialog.h; sourceTree = "<group>"; }; + CE1C6DCC19879F04006BDB03 /* compact_meter_bridge.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = compact_meter_bridge.cc; path = ../compact_meter_bridge.cc; sourceTree = "<group>"; }; + CE1C6DCD19879F04006BDB03 /* compact_meter_strip.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = compact_meter_strip.cc; path = ../compact_meter_strip.cc; sourceTree = "<group>"; }; + CE1C6DD319879F1B006BDB03 /* compact_meter_bridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = compact_meter_bridge.h; path = ../compact_meter_bridge.h; sourceTree = "<group>"; }; + CE1C6DD419879F1B006BDB03 /* compact_meter_strip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = compact_meter_strip.h; path = ../compact_meter_strip.h; sourceTree = "<group>"; }; + CE1C6DDB1987A910006BDB03 /* master_bus_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = master_bus_ui.h; path = ../master_bus_ui.h; sourceTree = "<group>"; }; + CE1C6DDF1987A924006BDB03 /* master_bus_ui.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = master_bus_ui.cc; path = ../master_bus_ui.cc; sourceTree = "<group>"; }; + CE294C5719CAD4E300D12768 /* add_tracks_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = add_tracks_dialog.xml; sourceTree = "<group>"; }; + CE294C5819CAD4E300D12768 /* compact_meter_bridge.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = compact_meter_bridge.xml; sourceTree = "<group>"; }; + CE294C5919CAD4E300D12768 /* compact_meter_strip.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = compact_meter_strip.xml; sourceTree = "<group>"; }; + CE294C5A19CAD4E300D12768 /* marker_io_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = marker_io_dialog.xml; sourceTree = "<group>"; }; + CE294C5B19CAD4E300D12768 /* meter_bridge_view.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = meter_bridge_view.xml; sourceTree = "<group>"; }; + CE294C5C19CAD4E300D12768 /* meter_strip_gain_meter.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = meter_strip_gain_meter.xml; sourceTree = "<group>"; }; + CE294C5D19CAD4E300D12768 /* mixer_bridge_view.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = mixer_bridge_view.xml; sourceTree = "<group>"; }; + CE294C5E19CAD4E300D12768 /* time_info_box.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = time_info_box.xml; sourceTree = "<group>"; }; + CE294C6B19CAD54500D12768 /* marker_io_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = marker_io_dialog.cc; path = ../marker_io_dialog.cc; sourceTree = "<group>"; }; + CE294C6C19CAD54500D12768 /* mixer_bridge_view.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mixer_bridge_view.cc; path = ../mixer_bridge_view.cc; sourceTree = "<group>"; }; + CE294C6D19CAD54500D12768 /* open_file_dialog_nix.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = open_file_dialog_nix.cc; path = ../open_file_dialog_nix.cc; sourceTree = "<group>"; }; + CE294C6E19CAD54500D12768 /* open_file_dialog_windows.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = open_file_dialog_windows.cc; path = ../open_file_dialog_windows.cc; sourceTree = "<group>"; }; + CE294C6F19CAD54500D12768 /* ruler_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ruler_dialog.cc; path = ../ruler_dialog.cc; sourceTree = "<group>"; }; + CE294C7019CAD54500D12768 /* soundcloud_export_selector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = soundcloud_export_selector.cc; path = ../soundcloud_export_selector.cc; sourceTree = "<group>"; }; + CE294C7119CAD54500D12768 /* waves_dropdown.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_dropdown.cc; path = ../waves_dropdown.cc; sourceTree = "<group>"; }; + CE294C7219CAD54500D12768 /* waves_grid.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_grid.cc; path = ../waves_grid.cc; sourceTree = "<group>"; }; + CE294C7319CAD54500D12768 /* waves_zoom_control.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_zoom_control.cc; path = ../waves_zoom_control.cc; sourceTree = "<group>"; }; + CE294C7E19CAD58500D12768 /* ardour_dropdown.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ardour_dropdown.h; path = ../ardour_dropdown.h; sourceTree = "<group>"; }; + CE294C7F19CAD58500D12768 /* marker_io_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = marker_io_dialog.h; path = ../marker_io_dialog.h; sourceTree = "<group>"; }; + CE294C8019CAD58500D12768 /* mixer_bridge_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mixer_bridge_view.h; path = ../mixer_bridge_view.h; sourceTree = "<group>"; }; + CE294C8119CAD58500D12768 /* soundcloud_export_selector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = soundcloud_export_selector.h; path = ../soundcloud_export_selector.h; sourceTree = "<group>"; }; + CE294C8219CAD58500D12768 /* waves_dropdown.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_dropdown.h; path = ../waves_dropdown.h; sourceTree = "<group>"; }; + CE294C8319CAD58500D12768 /* waves_zoom_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_zoom_control.h; path = ../waves_zoom_control.h; sourceTree = "<group>"; }; + CEAFC76E195445560016ACF0 /* bbt_time.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bbt_time.cc; path = ../../libs/timecode/src/bbt_time.cc; sourceTree = "<group>"; }; + CEAFC76F195445560016ACF0 /* time.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = time.cc; path = ../../libs/timecode/src/time.cc; sourceTree = "<group>"; }; + CEAFC775195445D90016ACF0 /* bbt_time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bbt_time.h; path = ../../libs/timecode/timecode/bbt_time.h; sourceTree = "<group>"; }; + CEAFC776195445D90016ACF0 /* time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = time.h; path = ../../libs/timecode/timecode/time.h; sourceTree = "<group>"; }; + CEAFC777195445D90016ACF0 /* visibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = visibility.h; path = ../../libs/timecode/timecode/visibility.h; sourceTree = "<group>"; }; + CEB0A45A19583F3F006D269A /* session_close_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_close_dialog.h; path = ../session_close_dialog.h; sourceTree = "<group>"; }; + CEB0A9F119583F96006D269A /* session_close_dialog.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_close_dialog.cc; path = ../session_close_dialog.cc; sourceTree = "<group>"; }; + CEB0A9F31958447C006D269A /* session_close_dialog.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = session_close_dialog.xml; sourceTree = "<group>"; }; + CEB9D787197516BE00B21780 /* audio_time_axis.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = audio_time_axis.xml; sourceTree = "<group>"; }; + CEB9D788197516BE00B21780 /* automation_time_axis.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = automation_time_axis.xml; sourceTree = "<group>"; }; + CEB9D789197516BE00B21780 /* editor_mixer.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = editor_mixer.xml; sourceTree = "<group>"; }; + CEB9D78A197516BE00B21780 /* inspector_gain_meter.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = inspector_gain_meter.xml; sourceTree = "<group>"; }; + CEB9D78C197516BE00B21780 /* master_ui.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = master_ui.xml; sourceTree = "<group>"; }; + CEB9D78D197516BE00B21780 /* meter_strip.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = meter_strip.xml; sourceTree = "<group>"; }; + CEB9D78E197516BE00B21780 /* mixer_gain_meter.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = mixer_gain_meter.xml; sourceTree = "<group>"; }; + CEB9D78F197516BE00B21780 /* mixer_strip.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = mixer_strip.xml; sourceTree = "<group>"; }; + CEB9D790197516BE00B21780 /* track_header_gain_meter.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = track_header_gain_meter.xml; sourceTree = "<group>"; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 43279241194EFFF1003C9FEA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 43279248194EFFF1003C9FEA /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 43279039194EFF24003C9FEA = { + isa = PBXGroup; + children = ( + 5BC24BA91A64328D006A2400 /* trackslive.menus.in */, + 435E66781A4AB60C00472D50 /* audiographer.xcodeproj */, + 952E0B3B1A0A1D7000F375D0 /* buildlog.txt */, + 4397599619CB06AC00740098 /* gtkmm2ext.xcodeproj */, + 4397595019CADAFC00740098 /* canvas.xcodeproj */, + 43B351FA194F131D0038C140 /* pbd.xcodeproj */, + 43B351F4194F130C0038C140 /* libardour.xcodeproj */, + 43B351EE194F12FB0038C140 /* waves_audiobackend.xcodeproj */, + 43279480194F00CB003C9FEA /* headers */, + 43279461194F007F003C9FEA /* menus */, + 43279429194F0062003C9FEA /* ui */, + 432793FF194F0062003C9FEA /* pixmaps */, + 4327923F194EFFC3003C9FEA /* Resources */, + 43279040194EFF38003C9FEA /* source */, + 4327924D194EFFF1003C9FEA /* Tracks */, + 43279246194EFFF1003C9FEA /* Frameworks */, + 43279245194EFFF1003C9FEA /* Products */, + ); + sourceTree = "<group>"; + }; + 43279040194EFF38003C9FEA /* source */ = { + isa = PBXGroup; + children = ( + 95E5E9451AE946510000E2CE /* waves_tooltip.cc */, + 95D9E37D1A8D1B6600A0DA46 /* waves_ambiguous_file_dialog.cc */, + 95D9E37E1A8D1B6600A0DA46 /* waves_missing_file_dialog.cc */, + 95D5D1361A8A514300407F98 /* waves_numeric_edit_dialog.cc */, + 95D795FF1A7BB9E000120A4F /* floating_text_entry.cc */, + 95D796001A7BB9E000120A4F /* marker_inspector_dialog.cc */, + 95D796011A7BB9E000120A4F /* marker_inspector_dialog.logic.cc */, + 95D796021A7BB9E000120A4F /* route_inspector.cc */, + 95D796031A7BB9E000120A4F /* waves_export_channel_selector.cc */, + 95D796041A7BB9E000120A4F /* waves_export_dialog.cc */, + 95D796051A7BB9E000120A4F /* waves_export_file_notebook.cc */, + 95D796061A7BB9E000120A4F /* waves_export_filename_selector.cc */, + 95D796071A7BB9E000120A4F /* waves_export_format_selector.cc */, + 95D796081A7BB9E000120A4F /* waves_export_preset_selector.cc */, + 95D796091A7BB9E000120A4F /* waves_export_timespan_selector.cc */, + 95D7960A1A7BB9E000120A4F /* waves_import_dialog.cc */, + 95D1C51E1A78ED2100BE28DB /* waves_edit_dialog.cc */, + 95D71D571A4C69AE00DE5B3B /* waves_track_color_dialog.logic.cc */, + 95D71D541A4C66F600DE5B3B /* waves_track_color_dialog.cc */, + 5BC67E5E1A4090BD00F29ABA /* progress_dialog.cc */, + 957EF44A1A30BFB300F1500E /* waves_message_dialog.cc */, + 95176F791A08E6E800E32046 /* file_sample_rate_mismatch_dialog.cc */, + 954DCFBC1A0239DA00B7160E /* about_dialog.cc */, + 95A134DD1A0239080008E3D6 /* license_dialog.cc */, + CE294C6B19CAD54500D12768 /* marker_io_dialog.cc */, + CE294C6C19CAD54500D12768 /* mixer_bridge_view.cc */, + CE294C6D19CAD54500D12768 /* open_file_dialog_nix.cc */, + CE294C6E19CAD54500D12768 /* open_file_dialog_windows.cc */, + CE294C6F19CAD54500D12768 /* ruler_dialog.cc */, + CE294C7019CAD54500D12768 /* soundcloud_export_selector.cc */, + CE294C7119CAD54500D12768 /* waves_dropdown.cc */, + CE294C7219CAD54500D12768 /* waves_grid.cc */, + CE294C7319CAD54500D12768 /* waves_zoom_control.cc */, + CE1A9079199A37AE00ECA62B /* add_tracks_dialog.cc */, + CE1C6DDF1987A924006BDB03 /* master_bus_ui.cc */, + CE1C6DCC19879F04006BDB03 /* compact_meter_bridge.cc */, + CE1C6DCD19879F04006BDB03 /* compact_meter_strip.cc */, + CEB0A9F119583F96006D269A /* session_close_dialog.cc */, + CEAFC76E195445560016ACF0 /* bbt_time.cc */, + CEAFC76F195445560016ACF0 /* time.cc */, + 43279210194EFFBA003C9FEA /* tracks_control_panel.cc */, + 43279212194EFFBA003C9FEA /* tracks_control_panel.logic.cc */, + 43279043194EFFB9003C9FEA /* actions.cc */, + 43279045194EFFB9003C9FEA /* add_route_dialog.cc */, + 43279047194EFFB9003C9FEA /* add_video_dialog.cc */, + 43279049194EFFB9003C9FEA /* ambiguous_file_dialog.cc */, + 4327904B194EFFB9003C9FEA /* analysis_window.cc */, + 4327904D194EFFB9003C9FEA /* ardour_button.cc */, + 4327904F194EFFB9003C9FEA /* ardour_dialog.cc */, + 43279051194EFFB9003C9FEA /* ardour_ui_dependents.cc */, + 43279052194EFFB9003C9FEA /* ardour_ui_dialogs.cc */, + 43279053194EFFB9003C9FEA /* ardour_ui_ed.cc */, + 43279054194EFFB9003C9FEA /* ardour_ui_mixer.cc */, + 43279055194EFFB9003C9FEA /* ardour_ui_options.cc */, + 43279056194EFFB9003C9FEA /* ardour_ui.cc */, + 43279058194EFFB9003C9FEA /* ardour_ui2.cc */, + 43279059194EFFB9003C9FEA /* ardour_window.cc */, + 4327905C194EFFB9003C9FEA /* au_pluginui.mm */, + 4327905D194EFFB9003C9FEA /* audio_clock.cc */, + 4327905F194EFFB9003C9FEA /* audio_region_editor.cc */, + 43279061194EFFB9003C9FEA /* audio_region_view.cc */, + 43279063194EFFB9003C9FEA /* audio_streamview.cc */, + 43279065194EFFB9003C9FEA /* audio_time_axis.cc */, + 43279067194EFFB9003C9FEA /* automation_controller.cc */, + 43279069194EFFB9003C9FEA /* automation_line.cc */, + 4327906B194EFFB9003C9FEA /* automation_region_view.cc */, + 4327906E194EFFB9003C9FEA /* automation_streamview.cc */, + 43279070194EFFB9003C9FEA /* automation_time_axis.cc */, + 43279072194EFFB9003C9FEA /* axis_view.cc */, + 43279074194EFFB9003C9FEA /* big_clock_window.cc */, + 43279076194EFFB9003C9FEA /* bundle_env_cocoa.cc */, + 43279077194EFFB9003C9FEA /* bundle_env_linux.cc */, + 43279078194EFFB9003C9FEA /* bundle_env_mingw.cc */, + 43279079194EFFB9003C9FEA /* bundle_env_msvc.cc */, + 4327907B194EFFB9003C9FEA /* bundle_manager.cc */, + 4327907D194EFFB9003C9FEA /* button_joiner.cc */, + 4327907F194EFFB9003C9FEA /* canvas_patch_change.cc */, + 43279081194EFFB9003C9FEA /* canvas-simpleline.c */, + 43279082194EFFB9003C9FEA /* canvas-simplerect.c */, + 43279083194EFFB9003C9FEA /* canvas-waveview.c */, + 43279085194EFFB9003C9FEA /* clock_group.cc */, + 43279087194EFFB9003C9FEA /* cocoacarbon.mm */, + 43279088194EFFB9003C9FEA /* configinfo.cc */, + 4327908A194EFFB9003C9FEA /* control_point_dialog.cc */, + 4327908C194EFFB9003C9FEA /* control_point.cc */, + 4327908E194EFFB9003C9FEA /* crossfade_edit.cc */, + 43279092194EFFB9003C9FEA /* curvetest.cc */, + 43279094194EFFB9003C9FEA /* debug.cc */, + 43279096194EFFB9003C9FEA /* device_connection_control.cc */, + 43279098194EFFB9003C9FEA /* edit_note_dialog.cc */, + 4327909B194EFFB9003C9FEA /* editing.cc */, + 4327909D194EFFB9003C9FEA /* editor_actions.cc */, + 4327909E194EFFB9003C9FEA /* editor_audio_import.cc */, + 4327909F194EFFB9003C9FEA /* editor_audiotrack.cc */, + 432790A0194EFFB9003C9FEA /* editor_canvas_events.cc */, + 432790A1194EFFB9003C9FEA /* editor_canvas.cc */, + 432790A2194EFFB9003C9FEA /* editor_component.cc */, + 432790A4194EFFB9003C9FEA /* editor_cursors.cc */, + 432790A6194EFFB9003C9FEA /* editor_drag.cc */, + 432790A9194EFFB9003C9FEA /* editor_export_audio.cc */, + 432790AA194EFFB9003C9FEA /* editor_group_tabs.cc */, + 432790AD194EFFB9003C9FEA /* editor_keys.cc */, + 432790AE194EFFB9003C9FEA /* editor_locations.cc */, + 432790B0194EFFB9003C9FEA /* editor_markers.cc */, + 432790B1194EFFB9003C9FEA /* editor_mixer.cc */, + 432790B2194EFFB9003C9FEA /* editor_mouse.cc */, + 432790B3194EFFB9003C9FEA /* editor_ops.cc */, + 432790B4194EFFB9003C9FEA /* editor_regions.cc */, + 432790B6194EFFB9003C9FEA /* editor_route_groups.cc */, + 432790B8194EFFB9003C9FEA /* editor_routes.cc */, + 432790BA194EFFB9003C9FEA /* editor_rulers.cc */, + 432790BB194EFFB9003C9FEA /* editor_selection.cc */, + 432790BC194EFFB9003C9FEA /* editor_snapshots.cc */, + 432790BE194EFFB9003C9FEA /* editor_summary.cc */, + 432790C0194EFFB9003C9FEA /* editor_tempodisplay.cc */, + 432790C1194EFFB9003C9FEA /* editor_timefx.cc */, + 432790C2194EFFB9003C9FEA /* editor_videotimeline.cc */, + 432790C5194EFFB9003C9FEA /* editor.cc */, + 432790C7194EFFB9003C9FEA /* engine_dialog.cc */, + 432790C9194EFFB9003C9FEA /* enums.cc */, + 432790CB194EFFB9003C9FEA /* evtest.cc */, + 432790CC194EFFB9003C9FEA /* export_channel_selector.cc */, + 432790CE194EFFB9003C9FEA /* export_dialog.cc */, + 432790D0194EFFB9003C9FEA /* export_file_notebook.cc */, + 432790D2194EFFB9003C9FEA /* export_filename_selector.cc */, + 432790D4194EFFB9003C9FEA /* export_format_dialog.cc */, + 432790D6194EFFB9003C9FEA /* export_format_selector.cc */, + 432790D8194EFFB9003C9FEA /* export_preset_selector.cc */, + 432790DA194EFFB9003C9FEA /* export_range_markers_dialog.cc */, + 432790DC194EFFB9003C9FEA /* export_timespan_selector.cc */, + 432790DE194EFFB9003C9FEA /* export_video_dialog.cc */, + 432790E0194EFFB9003C9FEA /* export_video_infobox.cc */, + 432790E2194EFFB9003C9FEA /* fft_graph.cc */, + 432790E4194EFFB9003C9FEA /* fft_result.cc */, + 432790E6194EFFB9003C9FEA /* fft.cc */, + 432790E9194EFFB9003C9FEA /* gain_meter.cc */, + 432790EB194EFFB9003C9FEA /* generic_pluginui.cc */, + 432790ED194EFFB9003C9FEA /* ghostregion.cc */, + 432790EF194EFFB9003C9FEA /* global_port_matrix.cc */, + 432790F2194EFFB9003C9FEA /* gprofhelper.c */, + 432790F3194EFFB9003C9FEA /* group_tabs.cc */, + 432790F5194EFFB9003C9FEA /* gtk_pianokeyboard.c */, + 432790FB194EFFB9003C9FEA /* gui_object.cc */, + 432790FE194EFFB9003C9FEA /* hit.cc */, + 43279101194EFFB9003C9FEA /* insert_time_dialog.cc */, + 43279103194EFFB9003C9FEA /* interthread_progress_window.cc */, + 43279105194EFFB9003C9FEA /* io_selector.cc */, + 43279107194EFFB9003C9FEA /* keyboard.cc */, + 43279109194EFFB9003C9FEA /* keyeditor.cc */, + 4327910B194EFFB9003C9FEA /* latency_gui.cc */, + 4327910D194EFFB9003C9FEA /* led.cc */, + 4327910F194EFFB9003C9FEA /* level_meter.cc */, + 43279111194EFFB9003C9FEA /* linux_vst_gui_support.cc */, + 43279112194EFFB9003C9FEA /* location_ui.cc */, + 43279116194EFFB9003C9FEA /* lv2_plugin_ui.cc */, + 43279118194EFFB9003C9FEA /* lxvst_plugin_ui.cc */, + 4327911A194EFFB9003C9FEA /* main_clock.cc */, + 4327911C194EFFB9003C9FEA /* main.cc */, + 4327911E194EFFB9003C9FEA /* marker.cc */, + 43279120194EFFB9003C9FEA /* meter_patterns.cc */, + 43279122194EFFB9003C9FEA /* meter_strip.cc */, + 43279124194EFFB9003C9FEA /* meterbridge.cc */, + 43279126194EFFB9003C9FEA /* midi_automation_line.cc */, + 43279128194EFFB9003C9FEA /* midi_channel_dialog.cc */, + 4327912A194EFFB9003C9FEA /* midi_channel_selector.cc */, + 4327912C194EFFB9003C9FEA /* midi_cut_buffer.cc */, + 4327912E194EFFB9003C9FEA /* midi_device_connection_control.cc */, + 43279130194EFFB9003C9FEA /* midi_export_dialog.cc */, + 43279132194EFFB9003C9FEA /* midi_list_editor.cc */, + 43279134194EFFB9003C9FEA /* midi_port_dialog.cc */, + 43279136194EFFB9003C9FEA /* midi_region_view.cc */, + 43279138194EFFB9003C9FEA /* midi_scroomer.cc */, + 4327913A194EFFB9003C9FEA /* midi_selection.cc */, + 4327913C194EFFB9003C9FEA /* midi_streamview.cc */, + 4327913E194EFFB9003C9FEA /* midi_time_axis.cc */, + 43279140194EFFB9003C9FEA /* midi_tracer.cc */, + 43279143194EFFB9003C9FEA /* midi_velocity_dialog.cc */, + 43279145194EFFB9003C9FEA /* missing_file_dialog.cc */, + 43279147194EFFB9003C9FEA /* missing_plugin_dialog.cc */, + 43279149194EFFB9003C9FEA /* mixer_actor.cc */, + 4327914B194EFFB9003C9FEA /* mixer_group_tabs.cc */, + 4327914D194EFFB9003C9FEA /* mixer_strip.cc */, + 4327914F194EFFB9003C9FEA /* mixer_ui.cc */, + 43279151194EFFB9003C9FEA /* monitor_section.cc */, + 43279153194EFFB9003C9FEA /* mono_panner_editor.cc */, + 43279155194EFFB9003C9FEA /* mono_panner.cc */, + 43279157194EFFB9003C9FEA /* mouse_cursors.cc */, + 43279159194EFFB9003C9FEA /* mtest.cc */, + 4327915A194EFFB9003C9FEA /* nag.cc */, + 4327915C194EFFB9003C9FEA /* new_plugin_preset_dialog.cc */, + 4327915E194EFFB9003C9FEA /* normalize_dialog.cc */, + 43279160194EFFB9003C9FEA /* note_base.cc */, + 43279162194EFFB9003C9FEA /* note_player.cc */, + 43279164194EFFB9003C9FEA /* note.cc */, + 43279166194EFFB9003C9FEA /* nsm.cc */, + 43279168194EFFB9003C9FEA /* nsmclient.cc */, + 4327916D194EFFB9003C9FEA /* open_file_dialog.mm */, + 4327916E194EFFB9003C9FEA /* option_editor.cc */, + 43279170194EFFB9003C9FEA /* opts.cc */, + 43279172194EFFB9003C9FEA /* panner_editor.cc */, + 43279174194EFFB9003C9FEA /* panner_interface.cc */, + 43279176194EFFB9003C9FEA /* panner_ui.cc */, + 43279178194EFFB9003C9FEA /* panner2d.cc */, + 4327917A194EFFB9003C9FEA /* patch_change_dialog.cc */, + 4327917C194EFFB9003C9FEA /* patch_change.cc */, + 4327917E194EFFB9003C9FEA /* piano_roll_header.cc */, + 43279180194EFFB9003C9FEA /* pingback.cc */, + 43279183194EFFB9003C9FEA /* playlist_selector.cc */, + 43279185194EFFB9003C9FEA /* plugin_eq_gui.cc */, + 43279188194EFFBA003C9FEA /* plugin_selector.cc */, + 4327918A194EFFBA003C9FEA /* plugin_ui.cc */, + 4327918D194EFFBA003C9FEA /* port_group.cc */, + 4327918F194EFFBA003C9FEA /* port_insert_ui.cc */, + 43279191194EFFBA003C9FEA /* port_matrix_body.cc */, + 43279193194EFFBA003C9FEA /* port_matrix_column_labels.cc */, + 43279195194EFFBA003C9FEA /* port_matrix_component.cc */, + 43279197194EFFBA003C9FEA /* port_matrix_grid.cc */, + 43279199194EFFBA003C9FEA /* port_matrix_labels.cc */, + 4327919B194EFFBA003C9FEA /* port_matrix_row_labels.cc */, + 4327919E194EFFBA003C9FEA /* port_matrix.cc */, + 432791A0194EFFBA003C9FEA /* processor_box.cc */, + 432791A3194EFFBA003C9FEA /* progress_reporter.cc */, + 432791A5194EFFBA003C9FEA /* prompter.cc */, + 432791A7194EFFBA003C9FEA /* public_editor.cc */, + 432791A9194EFFBA003C9FEA /* quantize_dialog.cc */, + 432791AB194EFFBA003C9FEA /* rc_option_editor.cc */, + 432791AD194EFFBA003C9FEA /* region_editor.cc */, + 432791AF194EFFBA003C9FEA /* region_gain_line.cc */, + 432791B1194EFFBA003C9FEA /* region_layering_order_editor.cc */, + 432791B3194EFFBA003C9FEA /* region_selection.cc */, + 432791B5194EFFBA003C9FEA /* region_view.cc */, + 432791B7194EFFBA003C9FEA /* return_ui.cc */, + 432791BA194EFFBA003C9FEA /* rhythm_ferret.cc */, + 432791BC194EFFBA003C9FEA /* route_group_dialog.cc */, + 432791BE194EFFBA003C9FEA /* route_group_menu.cc */, + 432791C0194EFFBA003C9FEA /* route_params_ui.cc */, + 432791C2194EFFBA003C9FEA /* route_processor_selection.cc */, + 432791C5194EFFBA003C9FEA /* route_time_axis.cc */, + 432791C8194EFFBA003C9FEA /* route_ui.cc */, + 432791CA194EFFBA003C9FEA /* search_path_option.cc */, + 432791CE194EFFBA003C9FEA /* selection.cc */, + 432791D0194EFFBA003C9FEA /* send_ui.cc */, + 432791D2194EFFBA003C9FEA /* session_dialog.cc */, + 432791D4194EFFBA003C9FEA /* session_dialog.logic.cc */, + 432791D6194EFFBA003C9FEA /* session_import_dialog.cc */, + 432791D8194EFFBA003C9FEA /* session_lock_dialog.cc */, + 432791DA194EFFBA003C9FEA /* session_metadata_dialog.cc */, + 432791DC194EFFBA003C9FEA /* session_option_editor.cc */, + 432791DE194EFFBA003C9FEA /* sfdb_freesound_mootcher.cc */, + 432791E0194EFFBA003C9FEA /* sfdb_ui.cc */, + 432791E2194EFFBA003C9FEA /* shuttle_control.cc */, + 432791E4194EFFBA003C9FEA /* speaker_dialog.cc */, + 432791E6194EFFBA003C9FEA /* splash.cc */, + 432791EA194EFFBA003C9FEA /* step_editor.cc */, + 432791EC194EFFBA003C9FEA /* step_entry.cc */, + 432791EE194EFFBA003C9FEA /* stereo_panner_editor.cc */, + 432791F0194EFFBA003C9FEA /* stereo_panner.cc */, + 432791F2194EFFBA003C9FEA /* streamview.cc */, + 432791F5194EFFBA003C9FEA /* strip_silence_dialog.cc */, + 432791F7194EFFBA003C9FEA /* sys_ex.cc */, + 432791F9194EFFBA003C9FEA /* tape_region_view.cc */, + 432791FB194EFFBA003C9FEA /* tempo_dialog.cc */, + 432791FD194EFFBA003C9FEA /* tempo_lines.cc */, + 432791FF194EFFBA003C9FEA /* theme_manager.cc */, + 43279201194EFFBA003C9FEA /* time_axis_view_item.cc */, + 43279203194EFFBA003C9FEA /* time_axis_view.cc */, + 43279205194EFFBA003C9FEA /* time_fx_dialog.cc */, + 43279207194EFFBA003C9FEA /* time_info_box.cc */, + 43279209194EFFBA003C9FEA /* time_selection.cc */, + 4327920B194EFFBA003C9FEA /* timecode_tester.cc */, + 4327920C194EFFBA003C9FEA /* track_selection.cc */, + 4327920E194EFFBA003C9FEA /* track_view_list.cc */, + 43279214194EFFBA003C9FEA /* transcode_ffmpeg.cc */, + 43279216194EFFBA003C9FEA /* transcode_video_dialog.cc */, + 43279218194EFFBA003C9FEA /* transpose_dialog.cc */, + 4327921B194EFFBA003C9FEA /* ui_config.cc */, + 4327921D194EFFBA003C9FEA /* utils_videotl.cc */, + 4327921F194EFFBA003C9FEA /* utils.cc */, + 43279221194EFFBA003C9FEA /* verbose_cursor.cc */, + 43279223194EFFBA003C9FEA /* version.cc */, + 43279225194EFFBA003C9FEA /* video_image_frame.cc */, + 43279227194EFFBA003C9FEA /* video_monitor.cc */, + 43279229194EFFBA003C9FEA /* video_server_dialog.cc */, + 4327922B194EFFBA003C9FEA /* video_timeline.cc */, + 4327922D194EFFBA003C9FEA /* visibility_group.cc */, + 4327922F194EFFBA003C9FEA /* volume_controller.cc */, + 43279231194EFFBA003C9FEA /* vst_plugin_ui.cc */, + 43279233194EFFBA003C9FEA /* waves_button.cc */, + 43279235194EFFBA003C9FEA /* waves_dialog.cc */, + 43279237194EFFBA003C9FEA /* waves_icon_button.cc */, + 43279239194EFFBA003C9FEA /* waves_ui.cc */, + 4327923B194EFFBA003C9FEA /* window_manager.cc */, + 4327923D194EFFBA003C9FEA /* windows_vst_plugin_ui.cc */, + ); + name = source; + sourceTree = "<group>"; + }; + 4327923F194EFFC3003C9FEA /* Resources */ = { + isa = PBXGroup; + children = ( + 43279427194F0062003C9FEA /* small-splash.png */, + 43279428194F0062003C9FEA /* splash.png */, + 43279262194F0039003C9FEA /* icons */, + ); + name = Resources; + sourceTree = "<group>"; + }; + 43279245194EFFF1003C9FEA /* Products */ = { + isa = PBXGroup; + children = ( + 43279244194EFFF1003C9FEA /* Tracks.app */, + ); + name = Products; + sourceTree = "<group>"; + }; + 43279246194EFFF1003C9FEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 43279247194EFFF1003C9FEA /* Cocoa.framework */, + 43279249194EFFF1003C9FEA /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = "<group>"; + }; + 43279249194EFFF1003C9FEA /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 4327924A194EFFF1003C9FEA /* AppKit.framework */, + 4327924B194EFFF1003C9FEA /* CoreData.framework */, + 4327924C194EFFF1003C9FEA /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = "<group>"; + }; + 4327924D194EFFF1003C9FEA /* Tracks */ = { + isa = PBXGroup; + children = ( + 43279259194EFFF1003C9FEA /* AppDelegate.h */, + 4327925A194EFFF1003C9FEA /* AppDelegate.m */, + 4327925C194EFFF1003C9FEA /* MainMenu.xib */, + 4327924E194EFFF1003C9FEA /* Supporting Files */, + ); + path = Tracks; + sourceTree = "<group>"; + }; + 4327924E194EFFF1003C9FEA /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 4327924F194EFFF1003C9FEA /* Tracks-Info.plist */, + 43279250194EFFF1003C9FEA /* InfoPlist.strings */, + 43279253194EFFF1003C9FEA /* main.m */, + 43279255194EFFF1003C9FEA /* Tracks-Prefix.pch */, + 43279256194EFFF1003C9FEA /* Credits.rtf */, + ); + name = "Supporting Files"; + sourceTree = "<group>"; + }; + 43279262194F0039003C9FEA /* icons */ = { + isa = PBXGroup; + children = ( + 43279263194F0039003C9FEA /* act-disabled.png */, + 43279264194F0039003C9FEA /* add.png */, + 43279265194F0039003C9FEA /* application-x-ardour_16px.png */, + 43279266194F0039003C9FEA /* application-x-ardour_22px.png */, + 43279267194F0039003C9FEA /* application-x-ardour_32px.png */, + 43279268194F0039003C9FEA /* application-x-ardour_48px.png */, + 43279269194F0039003C9FEA /* ardour-app-icon_osx.png */, + 4327926A194F0039003C9FEA /* ardour-app-icon_osx_mask.png */, + 4327926B194F0039003C9FEA /* ardour_icon_16px.png */, + 4327926C194F0039003C9FEA /* ardour_icon_22px.png */, + 4327926D194F0039003C9FEA /* ardour_icon_256px.png */, + 4327926E194F0039003C9FEA /* ardour_icon_32px.png */, + 4327926F194F0039003C9FEA /* ardour_icon_48px.png */, + 43279270194F0039003C9FEA /* chord.png */, + 43279271194F0039003C9FEA /* close.png */, + 43279272194F0039003C9FEA /* computer_keyboard.png */, + 43279273194F0039003C9FEA /* computer_keyboard_active.png */, + 43279274194F0039003C9FEA /* display_clock_mockup.png */, + 43279275194F0039003C9FEA /* display_metrics_mockup.png */, + 43279276194F0039003C9FEA /* eighthnote.png */, + 43279277194F0039003C9FEA /* expand_left_right_cursor.png */, + 43279278194F0039003C9FEA /* expand_up_down_cursor.png */, + 43279279194F0039003C9FEA /* export_icons.sh */, + 4327927A194F0039003C9FEA /* fade_in_cursor.png */, + 4327927B194F0039003C9FEA /* fade_out_cursor.png */, + 4327927C194F0039003C9FEA /* fadein-constant-power.png */, + 4327927D194F0039003C9FEA /* fadein-fast-cut.png */, + 4327927E194F0039003C9FEA /* fadein-linear.png */, + 4327927F194F0039003C9FEA /* fadein-long-cut.png */, + 43279280194F0039003C9FEA /* fadein-S1.png */, + 43279281194F0039003C9FEA /* fadein-S2.png */, + 43279282194F0039003C9FEA /* fadein-short-cut.png */, + 43279283194F0039003C9FEA /* fadein-slow-cut.png */, + 43279284194F0039003C9FEA /* fadeout-constant-power.png */, + 43279285194F0039003C9FEA /* fadeout-fast-cut.png */, + 43279286194F0039003C9FEA /* fadeout-linear.png */, + 43279287194F0039003C9FEA /* fadeout-long-cut.png */, + 43279288194F0039003C9FEA /* fadeout-S1.png */, + 43279289194F0039003C9FEA /* fadeout-S2.png */, + 4327928A194F0039003C9FEA /* fadeout-short-cut.png */, + 4327928B194F0039003C9FEA /* fadeout-slow-cut.png */, + 4327928C194F0039003C9FEA /* fader_belt.png */, + 4327928D194F0039003C9FEA /* fader_belt_desensitised.png */, + 4327928E194F0039003C9FEA /* fader_belt_h.png */, + 4327928F194F0039003C9FEA /* fader_belt_h_desensitised.png */, + 43279290194F0039003C9FEA /* fader_belt_h_medium.png */, + 43279291194F0039003C9FEA /* fader_belt_h_medium_desensitised.png */, + 43279292194F0039003C9FEA /* fader_belt_h_thin.png */, + 43279293194F0039003C9FEA /* fader_belt_h_thin_desensitised.png */, + 43279294194F0039003C9FEA /* fader_handle.png */, + 43279295194F0039003C9FEA /* ferret_02.png */, + 43279296194F0039003C9FEA /* forte.png */, + 43279297194F0039003C9FEA /* fortissimo.png */, + 43279298194F0039003C9FEA /* fortississimo.png */, + 43279299194F0039003C9FEA /* grabber.png */, + 4327929A194F0039003C9FEA /* grabber_edit_point.png */, + 4327929B194F0039003C9FEA /* grabber_note.png */, + 4327929C194F0039003C9FEA /* halfnote.png */, + 4327929D194F0039003C9FEA /* hide.png */, + 4327929E194F0039003C9FEA /* horizontal_zoom_fader_face.png */, + 4327929F194F0039003C9FEA /* i_beam_cursor.png */, + 432792A0194F0039003C9FEA /* inspector_on.png */, + 432792A1194F0039003C9FEA /* inspector_on_active.png */, + 432792A2194F0039003C9FEA /* inspector_on_prelight.png */, + 432792A3194F0039003C9FEA /* join_tools.png */, + 432792A4194F0039003C9FEA /* knob.png */, + 432792A5194F0039003C9FEA /* lock_session.png */, + 432792A6194F0039003C9FEA /* lock_session_active.png */, + 432792A7194F0039003C9FEA /* lock_session_prelight.png */, + 432792A8194F0039003C9FEA /* media_button.png */, + 432792A9194F0039003C9FEA /* media_button_active.png */, + 432792AA194F0039003C9FEA /* media_button_prelight.png */, + 432792AB194F0039003C9FEA /* meter_bridge_on.png */, + 432792AC194F0039003C9FEA /* meter_bridge_on_active.png */, + 432792AD194F0039003C9FEA /* meter_bridge_on_prelight.png */, + 432792AE194F0039003C9FEA /* metronome.png */, + 432792AF194F0039003C9FEA /* mezzforte.png */, + 432792B0194F0039003C9FEA /* mezzoforte.png */, + 432792B1194F0039003C9FEA /* mezzopiano.png */, + 432792B2194F0039003C9FEA /* midi-input-active.png */, + 432792B3194F0039003C9FEA /* midi-input-inactive.png */, + 432792B4194F0039003C9FEA /* midi_panic.png */, + 432792B5194F0039003C9FEA /* midi_socket_small.png */, + 432792B6194F0039003C9FEA /* midi_sound_notes.png */, + 432792B7194F0039003C9FEA /* midi_tool_erase.png */, + 432792B8194F0039003C9FEA /* midi_tool_pencil.png */, + 432792B9194F0039003C9FEA /* midi_tool_select.png */, + 432792BA194F0039003C9FEA /* mixer_on.png */, + 432792BB194F0039003C9FEA /* mixer_on_active.png */, + 432792BC194F0039003C9FEA /* mixer_on_prelight.png */, + 432792BD194F0039003C9FEA /* mode_multi_out.png */, + 432792BE194F0039003C9FEA /* mode_multi_out_active.png */, + 432792BF194F0039003C9FEA /* mode_multi_out_prelight.png */, + 432792C0194F0039003C9FEA /* mode_stereo_out.png */, + 432792C1194F0039003C9FEA /* mode_stereo_out_active.png */, + 432792C2194F0039003C9FEA /* mode_stereo_out_prelight.png */, + 432792C3194F0039003C9FEA /* move_cursor.png */, + 432792C4194F0039003C9FEA /* mute-disabled.png */, + 432792C5194F0039003C9FEA /* mute-enabled.png */, + 432792C6194F0039003C9FEA /* muted-by-others.png */, + 432792C7194F0039003C9FEA /* nudge_left.png */, + 432792C8194F0039003C9FEA /* nudge_right.png */, + 432792C9194F0039003C9FEA /* pianissimo.png */, + 432792CA194F0039003C9FEA /* pianississimo.png */, + 432792CB194F0039003C9FEA /* piano.png */, + 432792CC194F0039003C9FEA /* quarternote.png */, + 432792CD194F0039003C9FEA /* rec-enabled.png */, + 432792CE194F0039003C9FEA /* rec-in-progress.png */, + 432792CF194F0039003C9FEA /* record-normal-disabled.png */, + 432792D0194F0039003C9FEA /* record-normal-enabled.png */, + 432792D1194F0039003C9FEA /* record-normal-in-progress.png */, + 432792D2194F0039003C9FEA /* record-step.png */, + 432792D3194F0039003C9FEA /* record_disabled_grey.png */, + 432792D4194F0039003C9FEA /* record_normal_red.png */, + 432792D5194F0039003C9FEA /* record_tape_red.png */, + 432792D6194F0039003C9FEA /* resize_bottom_cursor.png */, + 432792D7194F0039003C9FEA /* resize_bottom_left_cursor.png */, + 432792D8194F0039003C9FEA /* resize_bottom_right_cursor.png */, + 432792D9194F0039003C9FEA /* resize_left_cursor.png */, + 432792DA194F0039003C9FEA /* resize_right_cursor.png */, + 432792DB194F0039003C9FEA /* resize_top_cursor.png */, + 432792DC194F0039003C9FEA /* resize_top_left_cursor.png */, + 432792DD194F0039003C9FEA /* resize_top_right_cursor.png */, + 432792DE194F0039003C9FEA /* sae.png */, + 432792DF194F0039003C9FEA /* sessionlock.png */, + 432792E0194F0039003C9FEA /* sixteenthnote.png */, + 432792E1194F0039003C9FEA /* sixtyfourthnote.png */, + 432792E2194F0039003C9FEA /* slider_controller_fader.png */, + 432792E3194F0039003C9FEA /* slider_controller_fader_handle.png */, + 432792E4194F0039003C9FEA /* solo-disabled.png */, + 432792E5194F0039003C9FEA /* solo-enabled.png */, + 432792E6194F0039003C9FEA /* solo-isolate-disabled.png */, + 432792E7194F0039003C9FEA /* solo-isolate-enabled.png */, + 432792E8194F0039003C9FEA /* solo-isolated.png */, + 432792E9194F0039003C9FEA /* solo-safe-disabled.png */, + 432792EA194F0039003C9FEA /* solo-safe-enabled.png */, + 432792EB194F0039003C9FEA /* solo-safe-icon.png */, + 432792EC194F0039003C9FEA /* soloed-by-others.png */, + 432792ED194F0039003C9FEA /* step-editing.png */, + 432792EE194F0039003C9FEA /* strip_width.png */, + 432792EF194F0039003C9FEA /* systemlock.png */, + 432792F0194F0039003C9FEA /* tav_exp.png */, + 432792F1194F0039003C9FEA /* tav_shrink.png */, + 432792F2194F0039003C9FEA /* thirtysecondnote.png */, + 432792F3194F0039003C9FEA /* tool_arrow.png */, + 432792F4194F0039003C9FEA /* tool_arrow_active.png */, + 432792F5194F0039003C9FEA /* tool_arrow_prelight.png */, + 432792F6194F0039003C9FEA /* tool_audition.png */, + 432792F7194F0039003C9FEA /* tool_cut.png */, + 432792F8194F0039003C9FEA /* tool_cut_active.png */, + 432792F9194F0039003C9FEA /* tool_cut_prelight.png */, + 432792FA194F0039003C9FEA /* tool_gain.png */, + 432792FB194F0039003C9FEA /* tool_marker.png */, + 432792FC194F0039003C9FEA /* tool_marker_active.png */, + 432792FD194F0039003C9FEA /* tool_marker_prelight.png */, + 432792FE194F0039003C9FEA /* tool_note.png */, + 432792FF194F0039003C9FEA /* tool_object.png */, + 43279300194F0039003C9FEA /* tool_object_range.png */, + 43279301194F0039003C9FEA /* tool_range.png */, + 43279302194F0039003C9FEA /* tool_stretch.png */, + 43279303194F0039003C9FEA /* tool_waveform_zoom.png */, + 43279304194F0039003C9FEA /* tool_waveform_zoom_active.png */, + 43279305194F0039003C9FEA /* tool_waveform_zoom_prelight.png */, + 43279306194F0039003C9FEA /* tool_zoom.png */, + 43279307194F0039003C9FEA /* tool_zoom_active.png */, + 43279308194F0039003C9FEA /* tool_zoom_ardour.png */, + 43279309194F0039003C9FEA /* tool_zoom_prelight.png */, + 4327930A194F003A003C9FEA /* tracks.png */, + 4327930B194F003A003C9FEA /* tracks_active.png */, + 4327930C194F003A003C9FEA /* tracks_prelight.png */, + 4327930D194F003A003C9FEA /* transport_end.png */, + 4327930E194F003A003C9FEA /* transport_end_active.png */, + 4327930F194F003A003C9FEA /* transport_end_prelight.png */, + 43279310194F003A003C9FEA /* transport_loop.png */, + 43279311194F003A003C9FEA /* transport_loop_active.png */, + 43279312194F003A003C9FEA /* transport_loop_prelight.png */, + 43279313194F003A003C9FEA /* transport_play.png */, + 43279314194F003A003C9FEA /* transport_play_active.png */, + 43279315194F003A003C9FEA /* transport_play_prelight.png */, + 43279316194F003A003C9FEA /* transport_range.png */, + 43279317194F003A003C9FEA /* transport_record.png */, + 43279318194F003A003C9FEA /* transport_record_active.png */, + 43279319194F003A003C9FEA /* transport_record_prelight.png */, + 4327931A194F003A003C9FEA /* transport_start.png */, + 4327931B194F003A003C9FEA /* transport_start_active.png */, + 4327931C194F003A003C9FEA /* transport_start_prelight.png */, + 4327931D194F003A003C9FEA /* transport_stop.png */, + 4327931E194F003A003C9FEA /* transport_stop_active.png */, + 4327931F194F003A003C9FEA /* transport_stop_prelight.png */, + 43279320194F003A003C9FEA /* trim_bottom_cursor.png */, + 43279321194F003A003C9FEA /* trim_left_cursor.png */, + 43279322194F003A003C9FEA /* trim_left_cursor_5.png */, + 43279323194F003A003C9FEA /* trim_left_cursor_right_only.png */, + 43279324194F003A003C9FEA /* trim_right_cursor.png */, + 43279325194F003A003C9FEA /* trim_right_cursor_5.png */, + 43279326194F003A003C9FEA /* trim_right_cursor_left_only.png */, + 43279327194F003A003C9FEA /* trim_top_cursor.png */, + 43279328194F003A003C9FEA /* vertical_zoom_fader_face.png */, + 43279329194F003A003C9FEA /* wholenote.png */, + 4327932A194F003A003C9FEA /* zoom_fader_handle.png */, + 4327932B194F003A003C9FEA /* zoom_fader_handle_active.png */, + 4327932C194F003A003C9FEA /* zoom_full.png */, + 4327932D194F003A003C9FEA /* zoom_in.png */, + 4327932E194F003A003C9FEA /* zoom_in_cursor.png */, + 4327932F194F003A003C9FEA /* zoom_out.png */, + 43279330194F003A003C9FEA /* zoom_out_cursor.png */, + ); + name = icons; + path = ../icons; + sourceTree = "<group>"; + }; + 432793FF194F0062003C9FEA /* pixmaps */ = { + isa = PBXGroup; + children = ( + 43279400194F0062003C9FEA /* forwardblarrow.xpm */, + 43279401194F0062003C9FEA /* h_meter_strip.xpm */, + 43279402194F0062003C9FEA /* hiin.xpm */, + 43279403194F0062003C9FEA /* hiout.xpm */, + 43279404194F0062003C9FEA /* hslider00.xpm */, + 43279405194F0062003C9FEA /* hslider01.xpm */, + 43279406194F0062003C9FEA /* left_arrow.xpm */, + 43279407194F0062003C9FEA /* linin.xpm */, + 43279408194F0062003C9FEA /* linout.xpm */, + 43279409194F0062003C9FEA /* loin.xpm */, + 4327940A194F0062003C9FEA /* loop.xpm */, + 4327940B194F0062003C9FEA /* loout.xpm */, + 4327940C194F0062003C9FEA /* lr.xpm */, + 4327940D194F0062003C9FEA /* regin.xpm */, + 4327940E194F0062003C9FEA /* regin2.xpm */, + 4327940F194F0062003C9FEA /* regout.xpm */, + 43279410194F0062003C9FEA /* regout2.xpm */, + 43279411194F0062003C9FEA /* revdblarrow.xpm */, + 43279412194F0062003C9FEA /* right_arrow.xpm */, + 43279413194F0062003C9FEA /* set-next-button.xpm */, + 43279414194F0062003C9FEA /* small-round-button-01.xpm */, + 43279415194F0062003C9FEA /* small_x.xpm */, + 43279416194F0062003C9FEA /* toggle-button-00.xpm */, + 43279417194F0062003C9FEA /* toggle-button-01.xpm */, + 43279418194F0062003C9FEA /* tool_audition.xpm */, + 43279419194F0062003C9FEA /* tool_gain.xpm */, + 4327941A194F0062003C9FEA /* tool_object.xpm */, + 4327941B194F0062003C9FEA /* tool_range.xpm */, + 4327941C194F0062003C9FEA /* tool_stretch.xpm */, + 4327941D194F0062003C9FEA /* tool_zoom.xpm */, + 4327941E194F0062003C9FEA /* v_meter_strip.xpm */, + 4327941F194F0062003C9FEA /* vslider00.xpm */, + 43279420194F0062003C9FEA /* vslider01.xpm */, + 43279421194F0062003C9FEA /* vslider02_rail.xpm */, + 43279422194F0062003C9FEA /* vslider02_slider.xpm */, + 43279423194F0062003C9FEA /* vslider_slider_16wide.xpm */, + 43279424194F0062003C9FEA /* zoom_full.xpm */, + 43279425194F0062003C9FEA /* zoom_in.xpm */, + 43279426194F0062003C9FEA /* zoom_out.xpm */, + ); + name = pixmaps; + path = ../pixmaps; + sourceTree = "<group>"; + }; + 43279429194F0062003C9FEA /* ui */ = { + isa = PBXGroup; + children = ( + 95D4986B1AEA363E006E065D /* audio_engine_reset_info_dialog.xml */, + 95D4986C1AEA363E006E065D /* crash_recovery_dialog.xml */, + 95D4986D1AEA363E006E065D /* waves_save_template_dialog.xml */, + 95E2A7AA1A8F652F0080BD79 /* waves_radio_item.xml */, + 95D6A67A1A8E22E80030CDD0 /* waves_keyeditor.xml */, + 95D9E3771A8D1B3B00A0DA46 /* waves_ambiguous_file_dialog.xml */, + 95D9E3781A8D1B3B00A0DA46 /* waves_missing_file_dialog.xml */, + 95D5D1381A8A514300407F98 /* waves_numeric_edit_dialog.xml */, + 956D3F891A851805004F328C /* waves_import_dialog.xml */, + 95D795DB1A7BB40C00120A4F /* marker_inspector_dialog.xml */, + 95D795DD1A7BB40C00120A4F /* waves_export_dialog.xml */, + 95D795DE1A7BB40C00120A4F /* waves_export_file_notebook_page.xml */, + 95D795DF1A7BB40C00120A4F /* waves_export_file_notebook.xml */, + 95D795E01A7BB40C00120A4F /* waves_export_filename_selector.xml */, + 95D795E11A7BB40C00120A4F /* waves_export_format_selector.xml */, + 95D795E21A7BB40C00120A4F /* waves_export_preset_selector.xml */, + 95D795E31A7BB40C00120A4F /* waves_export_timespan_selector.xml */, + 95D795E41A7BB40C00120A4F /* waves_port_export_channel_selector.xml */, + 95D795E51A7BB40C00120A4F /* waves_region_export_channel_selector.xml */, + 95D795E61A7BB40C00120A4F /* waves_track_color_dialog.xml */, + 95D795E71A7BB40C00120A4F /* waves_track_export_channel_selector.xml */, + 95D1C5201A78ED3A00BE28DB /* waves_edit_dialog.xml */, + 5BC67E581A408FCE00F29ABA /* progress_dialog.xml */, + 95F9DFD81A35F3310007E953 /* waves_clean_up_dialog.xml */, + 95F9DFD91A35F3310007E953 /* waves_connect_to_backend_error_dialog.xml */, + 95F9DFDA1A35F3310007E953 /* waves_excessive_split_dialog.xml */, + 95F9DFDC1A35F3310007E953 /* waves_file_exists_dialog.xml */, + 95F9DFDD1A35F3310007E953 /* waves_how_to_import_dialog_1.xml */, + 95F9DFDE1A35F3310007E953 /* waves_how_to_import_dialog_2.xml */, + 95F9DFDF1A35F3310007E953 /* waves_route_rename_dialog.xml */, + 95F9DFD61A35A8BD0007E953 /* waves_message_dialog.xml */, + 95176F7D1A08E76F00E32046 /* file_sample_rate_mismatch_dialog.xml */, + 954DCFDD1A07A14E00B7160E /* read_only_session_dialog.xml */, + 954DCFBF1A023AAB00B7160E /* about_dialog.xml */, + 954DCFC01A023AAB00B7160E /* license_dialog.xml */, + CE294C5719CAD4E300D12768 /* add_tracks_dialog.xml */, + CE294C5819CAD4E300D12768 /* compact_meter_bridge.xml */, + CE294C5919CAD4E300D12768 /* compact_meter_strip.xml */, + CE294C5A19CAD4E300D12768 /* marker_io_dialog.xml */, + CE294C5B19CAD4E300D12768 /* meter_bridge_view.xml */, + CE294C5C19CAD4E300D12768 /* meter_strip_gain_meter.xml */, + CE294C5D19CAD4E300D12768 /* mixer_bridge_view.xml */, + CE294C5E19CAD4E300D12768 /* time_info_box.xml */, + CEB9D787197516BE00B21780 /* audio_time_axis.xml */, + CEB9D788197516BE00B21780 /* automation_time_axis.xml */, + CEB9D789197516BE00B21780 /* editor_mixer.xml */, + CEB9D78A197516BE00B21780 /* inspector_gain_meter.xml */, + CEB9D78C197516BE00B21780 /* master_ui.xml */, + CEB9D78D197516BE00B21780 /* meter_strip.xml */, + CEB9D78E197516BE00B21780 /* mixer_gain_meter.xml */, + CEB9D78F197516BE00B21780 /* mixer_strip.xml */, + CEB9D790197516BE00B21780 /* track_header_gain_meter.xml */, + CEB0A9F31958447C006D269A /* session_close_dialog.xml */, + 4327942A194F0062003C9FEA /* device_capture_control.xml */, + 4327942B194F0062003C9FEA /* device_playback_control.xml */, + 4327942C194F0062003C9FEA /* editor_window.xml */, + 4327942D194F0062003C9FEA /* midi_device_control.xml */, + 4327942E194F0062003C9FEA /* session_dialog.xml */, + 4327942F194F0062003C9FEA /* session_lock_dialog.xml */, + 43279430194F0062003C9FEA /* tracks_preferences.xml */, + ); + name = ui; + path = ../ui; + sourceTree = "<group>"; + }; + 43279461194F007F003C9FEA /* menus */ = { + isa = PBXGroup; + children = ( + 43279475194F009E003C9FEA /* tracks.menus.in */, + ); + name = menus; + sourceTree = "<group>"; + }; + 43279480194F00CB003C9FEA /* headers */ = { + isa = PBXGroup; + children = ( + 95E5E9411AE9462B0000E2CE /* waves_tooltip.h */, + 95ED5FF61A95F285006D39E4 /* route_inspector.h */, + 95D9E37B1A8D1B5200A0DA46 /* waves_ambiguous_file_dialog.h */, + 95D9E37C1A8D1B5200A0DA46 /* waves_missing_file_dialog.h */, + 95D5D1321A8A514300407F98 /* waves_numeric_edit_dialog.h */, + 95D7961A1A7BBA4E00120A4F /* floating_text_entry.h */, + 95D7961B1A7BBA4E00120A4F /* marker_inspector_dialog.h */, + 95D7961C1A7BBA4E00120A4F /* marker_inspector_dialog.logic.h */, + 95D7961D1A7BBA4E00120A4F /* product_definition.h */, + 95D7961E1A7BBA4E00120A4F /* ruler_dialog.h */, + 95D7961F1A7BBA4E00120A4F /* trackslive_resource.h */, + 95D796201A7BBA4E00120A4F /* waves_export_channel_selector.h */, + 95D796211A7BBA4E00120A4F /* waves_export_dialog.h */, + 95D796221A7BBA4E00120A4F /* waves_export_file_notebook.h */, + 95D796231A7BBA4E00120A4F /* waves_export_filename_selector.h */, + 95D796241A7BBA4E00120A4F /* waves_export_format_selector.h */, + 95D796251A7BBA4E00120A4F /* waves_export_preset_selector.h */, + 95D796261A7BBA4E00120A4F /* waves_export_timespan_selector.h */, + 95D796271A7BBA4E00120A4F /* waves_grid.h */, + 95D796281A7BBA4E00120A4F /* waves_import_dialog.h */, + 95D1C51A1A78ED1100BE28DB /* waves_edit_dialog.h */, + 95D71D561A4C697700DE5B3B /* waves_track_color_dialog.h */, + 95D71D501A4C66DF00DE5B3B /* waves_track_color_dialog.logic.h */, + 5BC67E5D1A4090AA00F29ABA /* progress_dialog.h */, + 957EF44F1A30BFBF00F1500E /* waves_message_dialog.h */, + 95176F781A08E6D800E32046 /* file_sample_rate_mismatch_dialog.h */, + 954DCFBE1A0239EC00B7160E /* about_dialog.h */, + 95A134DF1A02391F0008E3D6 /* license_dialog.h */, + CE294C7E19CAD58500D12768 /* ardour_dropdown.h */, + CE294C7F19CAD58500D12768 /* marker_io_dialog.h */, + CE294C8019CAD58500D12768 /* mixer_bridge_view.h */, + CE294C8119CAD58500D12768 /* soundcloud_export_selector.h */, + CE294C8219CAD58500D12768 /* waves_dropdown.h */, + CE294C8319CAD58500D12768 /* waves_zoom_control.h */, + CE1A907E199A37BF00ECA62B /* add_tracks_dialog.h */, + CE1C6DDB1987A910006BDB03 /* master_bus_ui.h */, + CE1C6DD319879F1B006BDB03 /* compact_meter_bridge.h */, + CE1C6DD419879F1B006BDB03 /* compact_meter_strip.h */, + CEB0A45A19583F3F006D269A /* session_close_dialog.h */, + CEAFC775195445D90016ACF0 /* bbt_time.h */, + CEAFC776195445D90016ACF0 /* time.h */, + CEAFC777195445D90016ACF0 /* visibility.h */, + 43B351D4194F04E00038C140 /* tracks_control_panel.h */, + 43B351D5194F04E00038C140 /* tracks_control_panel.logic.h */, + 43B350F1194F04E00038C140 /* actions.h */, + 43B350F2194F04E00038C140 /* add_route_dialog.h */, + 43B350F3194F04E00038C140 /* add_video_dialog.h */, + 43B350F4194F04E00038C140 /* ambiguous_file_dialog.h */, + 43B350F5194F04E00038C140 /* analysis_window.h */, + 43B350F6194F04E00038C140 /* ardour_button.h */, + 43B350F7194F04E00038C140 /* ardour_dialog.h */, + 43B350F8194F04E00038C140 /* ardour_ui.h */, + 43B350F9194F04E00038C140 /* ardour_window.h */, + 43B350FA194F04E00038C140 /* au_pluginui.h */, + 43B350FB194F04E00038C140 /* audio_clock.h */, + 43B350FC194F04E00038C140 /* audio_region_editor.h */, + 43B350FD194F04E00038C140 /* audio_region_view.h */, + 43B350FE194F04E00038C140 /* audio_streamview.h */, + 43B350FF194F04E00038C140 /* audio_time_axis.h */, + 43B35100194F04E00038C140 /* automation_controller.h */, + 43B35101194F04E00038C140 /* automation_line.h */, + 43B35102194F04E00038C140 /* automation_region_view.h */, + 43B35103194F04E00038C140 /* automation_selection.h */, + 43B35104194F04E00038C140 /* automation_streamview.h */, + 43B35105194F04E00038C140 /* automation_time_axis.h */, + 43B35106194F04E00038C140 /* axis_view.h */, + 43B35107194F04E00038C140 /* big_clock_window.h */, + 43B35108194F04E00038C140 /* bundle_env.h */, + 43B35109194F04E00038C140 /* bundle_manager.h */, + 43B3510A194F04E00038C140 /* button_joiner.h */, + 43B3510B194F04E00038C140 /* canvas_vars.h */, + 43B3510C194F04E00038C140 /* canvas-waveview.h */, + 43B3510D194F04E00038C140 /* clock_group.h */, + 43B3510E194F04E00038C140 /* configinfo.h */, + 43B3510F194F04E00038C140 /* control_point_dialog.h */, + 43B35110194F04E00038C140 /* control_point.h */, + 43B35111194F04E00038C140 /* crossfade_edit.h */, + 43B35112194F04E00038C140 /* crossfade_view.h */, + 43B35113194F04E00038C140 /* crossfade_xpms.h */, + 43B35114194F04E00038C140 /* dbg_msg.h */, + 43B35115194F04E00038C140 /* debug.h */, + 43B35116194F04E00038C140 /* device_connection_control.h */, + 43B35117194F04E00038C140 /* edit_note_dialog.h */, + 43B35118194F04E00038C140 /* editing_syms.h */, + 43B35119194F04E00038C140 /* editing.h */, + 43B3511A194F04E00038C140 /* editor_component.h */, + 43B3511B194F04E00038C140 /* editor_cursors.h */, + 43B3511C194F04E00038C140 /* editor_drag.h */, + 43B3511D194F04E00038C140 /* editor_enums.h */, + 43B3511E194F04E00038C140 /* editor_group_tabs.h */, + 43B3511F194F04E00038C140 /* editor_items.h */, + 43B35120194F04E00038C140 /* editor_locations.h */, + 43B35121194F04E00038C140 /* editor_regions.h */, + 43B35122194F04E00038C140 /* editor_route_groups.h */, + 43B35123194F04E00038C140 /* editor_routes.h */, + 43B35124194F04E00038C140 /* editor_snapshots.h */, + 43B35125194F04E00038C140 /* editor_summary.h */, + 43B35126194F04E00038C140 /* editor.h */, + 43B35127194F04E00038C140 /* engine_dialog.h */, + 43B35128194F04E00038C140 /* enums.h */, + 43B3512A194F04E00038C140 /* export_channel_selector.h */, + 43B3512B194F04E00038C140 /* export_dialog.h */, + 43B3512C194F04E00038C140 /* export_file_notebook.h */, + 43B3512D194F04E00038C140 /* export_filename_selector.h */, + 43B3512E194F04E00038C140 /* export_format_dialog.h */, + 43B3512F194F04E00038C140 /* export_format_selector.h */, + 43B35130194F04E00038C140 /* export_preset_selector.h */, + 43B35131194F04E00038C140 /* export_range_markers_dialog.h */, + 43B35132194F04E00038C140 /* export_timespan_selector.h */, + 43B35133194F04E00038C140 /* export_video_dialog.h */, + 43B35134194F04E00038C140 /* export_video_infobox.h */, + 43B35135194F04E00038C140 /* fft_graph.h */, + 43B35136194F04E00038C140 /* fft_result.h */, + 43B35137194F04E00038C140 /* fft.h */, + 43B35138194F04E00038C140 /* fix_carbon.h */, + 43B35139194F04E00038C140 /* gain_meter.h */, + 43B3513A194F04E00038C140 /* gettext.h */, + 43B3513B194F04E00038C140 /* ghostregion.h */, + 43B3513C194F04E00038C140 /* global_port_matrix.h */, + 43B3513D194F04E00038C140 /* global_signals.h */, + 43B3513E194F04E00038C140 /* group_tabs.h */, + 43B3513F194F04E00038C140 /* gtk_pianokeyboard.h */, + 43B35142194F04E00038C140 /* gui_object.h */, + 43B35143194F04E00038C140 /* gui_thread.h */, + 43B35144194F04E00038C140 /* hit.h */, + 43B35145194F04E00038C140 /* i18n.h */, + 43B35146194F04E00038C140 /* insert_time_dialog.h */, + 43B35147194F04E00038C140 /* interthread_progress_window.h */, + 43B35148194F04E00038C140 /* io_selector.h */, + 43B35149194F04E00038C140 /* keyboard.h */, + 43B3514A194F04E00038C140 /* keyeditor.h */, + 43B3514B194F04E00038C140 /* latency_gui.h */, + 43B3514C194F04E00038C140 /* led.h */, + 43B3514D194F04E00038C140 /* level_meter.h */, + 43B3514E194F04E00038C140 /* location_ui.h */, + 43B3514F194F04E00038C140 /* logmeter.h */, + 43B35150194F04E00038C140 /* lv2_external_ui.h */, + 43B35151194F04E00038C140 /* lv2_plugin_ui.h */, + 43B35152194F04E00038C140 /* lxvst_plugin_ui.h */, + 43B35153194F04E00038C140 /* main_clock.h */, + 43B35154194F04E00038C140 /* marker_selection.h */, + 43B35155194F04E00038C140 /* marker.h */, + 43B35156194F04E00038C140 /* meter_patterns.h */, + 43B35157194F04E00038C140 /* meter_strip.h */, + 43B35158194F04E00038C140 /* meterbridge.h */, + 43B35159194F04E00038C140 /* midi_automation_line.h */, + 43B3515A194F04E00038C140 /* midi_channel_dialog.h */, + 43B3515B194F04E00038C140 /* midi_channel_selector.h */, + 43B3515C194F04E00038C140 /* midi_cut_buffer.h */, + 43B3515D194F04E00038C140 /* midi_device_connection_control.h */, + 43B3515E194F04E00038C140 /* midi_export_dialog.h */, + 43B3515F194F04E00038C140 /* midi_list_editor.h */, + 43B35160194F04E00038C140 /* midi_port_dialog.h */, + 43B35161194F04E00038C140 /* midi_region_view.h */, + 43B35162194F04E00038C140 /* midi_scroomer.h */, + 43B35163194F04E00038C140 /* midi_selection.h */, + 43B35164194F04E00038C140 /* midi_streamview.h */, + 43B35165194F04E00038C140 /* midi_time_axis.h */, + 43B35166194F04E00038C140 /* midi_tracer.h */, + 43B35167194F04E00038C140 /* midi_util.h */, + 43B35168194F04E00038C140 /* midi_velocity_dialog.h */, + 43B35169194F04E00038C140 /* missing_file_dialog.h */, + 43B3516A194F04E00038C140 /* missing_plugin_dialog.h */, + 43B3516B194F04E00038C140 /* mixer_actor.h */, + 43B3516C194F04E00038C140 /* mixer_group_tabs.h */, + 43B3516D194F04E00038C140 /* mixer_strip.h */, + 43B3516E194F04E00038C140 /* mixer_ui.h */, + 43B3516F194F04E00038C140 /* monitor_section.h */, + 43B35170194F04E00038C140 /* mono_panner_editor.h */, + 43B35171194F04E00038C140 /* mono_panner.h */, + 43B35172194F04E00038C140 /* mouse_cursors.h */, + 43B35173194F04E00038C140 /* nag.h */, + 43B35174194F04E00038C140 /* new_plugin_preset_dialog.h */, + 43B35175194F04E00038C140 /* normalize_dialog.h */, + 43B35176194F04E00038C140 /* note_base.h */, + 43B35177194F04E00038C140 /* note_player.h */, + 43B35178194F04E00038C140 /* note.h */, + 43B35179194F04E00038C140 /* nsm.h */, + 43B3517A194F04E00038C140 /* nsmclient.h */, + 43B3517B194F04E00038C140 /* open_file_dialog_proxy.h */, + 43B3517C194F04E00038C140 /* open_file_dialog.h */, + 43B3517D194F04E00038C140 /* option_editor.h */, + 43B3517E194F04E00038C140 /* opts.h */, + 43B3517F194F04E00038C140 /* panner_editor.h */, + 43B35180194F04E00038C140 /* panner_interface.h */, + 43B35181194F04E00038C140 /* panner_ui.h */, + 43B35182194F04E00038C140 /* panner2d.h */, + 43B35183194F04E00038C140 /* patch_change_dialog.h */, + 43B35184194F04E00038C140 /* patch_change.h */, + 43B35185194F04E00038C140 /* piano_roll_header.h */, + 43B35186194F04E00038C140 /* pingback.h */, + 43B35187194F04E00038C140 /* playlist_selection.h */, + 43B35188194F04E00038C140 /* playlist_selector.h */, + 43B35189194F04E00038C140 /* plugin_eq_gui.h */, + 43B3518A194F04E00038C140 /* plugin_interest.h */, + 43B3518B194F04E00038C140 /* plugin_selector.h */, + 43B3518C194F04E00038C140 /* plugin_ui.h */, + 43B3518D194F04E00038C140 /* point_selection.h */, + 43B3518E194F04E00038C140 /* port_group.h */, + 43B3518F194F04E00038C140 /* port_insert_ui.h */, + 43B35190194F04E00038C140 /* port_matrix_body.h */, + 43B35191194F04E00038C140 /* port_matrix_column_labels.h */, + 43B35192194F04E00038C140 /* port_matrix_component.h */, + 43B35193194F04E00038C140 /* port_matrix_grid.h */, + 43B35194194F04E00038C140 /* port_matrix_labels.h */, + 43B35195194F04E00038C140 /* port_matrix_row_labels.h */, + 43B35196194F04E00038C140 /* port_matrix_types.h */, + 43B35197194F04E00038C140 /* port_matrix.h */, + 43B35198194F04E00038C140 /* processor_box.h */, + 43B35199194F04E00038C140 /* processor_selection.h */, + 43B3519A194F04E00038C140 /* progress_reporter.h */, + 43B3519B194F04E00038C140 /* prompter.h */, + 43B3519C194F04E00038C140 /* public_editor.h */, + 43B3519D194F04E00038C140 /* quantize_dialog.h */, + 43B3519E194F04E00038C140 /* rc_option_editor.h */, + 43B3519F194F04E00038C140 /* region_editor.h */, + 43B351A0194F04E00038C140 /* region_gain_line.h */, + 43B351A1194F04E00038C140 /* region_layering_order_editor.h */, + 43B351A2194F04E00038C140 /* region_selection.h */, + 43B351A3194F04E00038C140 /* region_view.h */, + 43B351A4194F04E00038C140 /* return_ui.h */, + 43B351A5194F04E00038C140 /* rgb_macros.h */, + 43B351A6194F04E00038C140 /* rhythm_ferret.h */, + 43B351A7194F04E00038C140 /* route_group_dialog.h */, + 43B351A8194F04E00038C140 /* route_group_menu.h */, + 43B351A9194F04E00038C140 /* route_params_ui.h */, + 43B351AA194F04E00038C140 /* route_processor_selection.h */, + 43B351AB194F04E00038C140 /* route_sorter.h */, + 43B351AC194F04E00038C140 /* route_time_axis.h */, + 43B351AD194F04E00038C140 /* route_ui_selection.h */, + 43B351AE194F04E00038C140 /* route_ui.h */, + 43B351AF194F04E00038C140 /* search_path_option.h */, + 43B351B0194F04E00038C140 /* selectable.h */, + 43B351B1194F04E00038C140 /* selection_templates.h */, + 43B351B2194F04E00038C140 /* selection.h */, + 43B351B3194F04E00038C140 /* send_ui.h */, + 43B351B4194F04E00038C140 /* session_dialog.h */, + 43B351B5194F04E00038C140 /* session_dialog.logic.h */, + 43B351B6194F04E00038C140 /* session_import_dialog.h */, + 43B351B7194F04E00038C140 /* session_lock_dialog.h */, + 43B351B8194F04E00038C140 /* session_metadata_dialog.h */, + 43B351B9194F04E00038C140 /* session_option_editor.h */, + 43B351BA194F04E00038C140 /* sfdb_freesound_mootcher.h */, + 43B351BB194F04E00038C140 /* sfdb_ui.h */, + 43B351BC194F04E00038C140 /* shuttle_control.h */, + 43B351BD194F04E00038C140 /* speaker_dialog.h */, + 43B351BE194F04E00038C140 /* splash.h */, + 43B351BF194F04E00038C140 /* startup.h */, + 43B351C0194F04E00038C140 /* step_editing.bindings */, + 43B351C1194F04E00038C140 /* step_editor.h */, + 43B351C2194F04E00038C140 /* step_entry.h */, + 43B351C3194F04E00038C140 /* stereo_panner_editor.h */, + 43B351C4194F04E00038C140 /* stereo_panner.h */, + 43B351C5194F04E00038C140 /* streamview.h */, + 43B351C6194F04E00038C140 /* strip_selection.h */, + 43B351C7194F04E00038C140 /* strip_silence_dialog.h */, + 43B351C8194F04E00038C140 /* sys_ex.h */, + 43B351C9194F04E00038C140 /* tape_region_view.h */, + 43B351CA194F04E00038C140 /* tempo_dialog.h */, + 43B351CB194F04E00038C140 /* tempo_lines.h */, + 43B351CC194F04E00038C140 /* theme_manager.h */, + 43B351CD194F04E00038C140 /* time_axis_view_item.h */, + 43B351CE194F04E00038C140 /* time_axis_view.h */, + 43B351CF194F04E00038C140 /* time_fx_dialog.h */, + 43B351D0194F04E00038C140 /* time_info_box.h */, + 43B351D1194F04E00038C140 /* time_selection.h */, + 43B351D2194F04E00038C140 /* track_selection.h */, + 43B351D3194F04E00038C140 /* track_view_list.h */, + 43B351D6194F04E00038C140 /* transcode_ffmpeg.h */, + 43B351D7194F04E00038C140 /* transcode_video_dialog.h */, + 43B351D8194F04E00038C140 /* transpose_dialog.h */, + 43B351D9194F04E00038C140 /* ui_config_vars.h */, + 43B351DA194F04E00038C140 /* ui_config.h */, + 43B351DB194F04E00038C140 /* utils_videotl.h */, + 43B351DC194F04E00038C140 /* utils.h */, + 43B351DD194F04E00038C140 /* verbose_cursor.h */, + 43B351DE194F04E00038C140 /* version.h */, + 43B351DF194F04E00038C140 /* video_image_frame.h */, + 43B351E0194F04E00038C140 /* video_monitor.h */, + 43B351E1194F04E00038C140 /* video_server_dialog.h */, + 43B351E2194F04E00038C140 /* video_timeline.h */, + 43B351E3194F04E00038C140 /* visibility_group.h */, + 43B351E4194F04E00038C140 /* volume_controller.h */, + 43B351E5194F04E00038C140 /* vst_plugin_ui.h */, + 43B351E6194F04E00038C140 /* waves_button.h */, + 43B351E7194F04E00038C140 /* waves_dialog.h */, + 43B351E8194F04E00038C140 /* waves_icon_button.h */, + 43B351E9194F04E00038C140 /* waves_ui.h */, + 43B351EA194F04E00038C140 /* window_manager.h */, + 43B351EB194F04E00038C140 /* windows_vst_plugin_ui.h */, + ); + name = headers; + sourceTree = "<group>"; + }; + 435E66791A4AB60C00472D50 /* Products */ = { + isa = PBXGroup; + children = ( + ); + name = Products; + sourceTree = "<group>"; + }; + 4397595119CADAFC00740098 /* Products */ = { + isa = PBXGroup; + children = ( + ); + name = Products; + sourceTree = "<group>"; + }; + 4397599719CB06AC00740098 /* Products */ = { + isa = PBXGroup; + children = ( + ); + name = Products; + sourceTree = "<group>"; + }; + 43B351EF194F12FB0038C140 /* Products */ = { + isa = PBXGroup; + children = ( + 43B351F3194F12FB0038C140 /* libwaves_audiobackend.dylib */, + ); + name = Products; + sourceTree = "<group>"; + }; + 43B351F5194F130C0038C140 /* Products */ = { + isa = PBXGroup; + children = ( + 43B351F9194F130D0038C140 /* liblibardour.dylib */, + ); + name = Products; + sourceTree = "<group>"; + }; + 43B351FB194F131D0038C140 /* Products */ = { + isa = PBXGroup; + children = ( + 43B351FF194F131E0038C140 /* pbd.framework */, + ); + name = Products; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 43279243194EFFF1003C9FEA /* Tracks */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4327925F194EFFF1003C9FEA /* Build configuration list for PBXNativeTarget "Tracks" */; + buildPhases = ( + 43279240194EFFF1003C9FEA /* Sources */, + 43279241194EFFF1003C9FEA /* Frameworks */, + 43279242194EFFF1003C9FEA /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Tracks; + productName = Tracks; + productReference = 43279244194EFFF1003C9FEA /* Tracks.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 4327903A194EFF24003C9FEA /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0460; + }; + buildConfigurationList = 4327903D194EFF24003C9FEA /* Build configuration list for PBXProject "tracks" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 43279039194EFF24003C9FEA; + productRefGroup = 43279245194EFFF1003C9FEA /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 435E66791A4AB60C00472D50 /* Products */; + ProjectRef = 435E66781A4AB60C00472D50 /* audiographer.xcodeproj */; + }, + { + ProductGroup = 4397595119CADAFC00740098 /* Products */; + ProjectRef = 4397595019CADAFC00740098 /* canvas.xcodeproj */; + }, + { + ProductGroup = 4397599719CB06AC00740098 /* Products */; + ProjectRef = 4397599619CB06AC00740098 /* gtkmm2ext.xcodeproj */; + }, + { + ProductGroup = 43B351F5194F130C0038C140 /* Products */; + ProjectRef = 43B351F4194F130C0038C140 /* libardour.xcodeproj */; + }, + { + ProductGroup = 43B351FB194F131D0038C140 /* Products */; + ProjectRef = 43B351FA194F131D0038C140 /* pbd.xcodeproj */; + }, + { + ProductGroup = 43B351EF194F12FB0038C140 /* Products */; + ProjectRef = 43B351EE194F12FB0038C140 /* waves_audiobackend.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 43279243194EFFF1003C9FEA /* Tracks */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 43B351F3194F12FB0038C140 /* libwaves_audiobackend.dylib */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.dylib"; + path = libwaves_audiobackend.dylib; + remoteRef = 43B351F2194F12FB0038C140 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 43B351F9194F130D0038C140 /* liblibardour.dylib */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.dylib"; + path = liblibardour.dylib; + remoteRef = 43B351F8194F130D0038C140 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 43B351FF194F131E0038C140 /* pbd.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = pbd.framework; + remoteRef = 43B351FE194F131E0038C140 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 43279242194EFFF1003C9FEA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 43279252194EFFF1003C9FEA /* InfoPlist.strings in Resources */, + 43279258194EFFF1003C9FEA /* Credits.rtf in Resources */, + 4327925E194EFFF1003C9FEA /* MainMenu.xib in Resources */, + 43279331194F003A003C9FEA /* act-disabled.png in Resources */, + 43279332194F003A003C9FEA /* add.png in Resources */, + 43279333194F003A003C9FEA /* application-x-ardour_16px.png in Resources */, + 43279334194F003A003C9FEA /* application-x-ardour_22px.png in Resources */, + 43279335194F003A003C9FEA /* application-x-ardour_32px.png in Resources */, + 43279336194F003A003C9FEA /* application-x-ardour_48px.png in Resources */, + 43279337194F003A003C9FEA /* ardour-app-icon_osx.png in Resources */, + 43279338194F003A003C9FEA /* ardour-app-icon_osx_mask.png in Resources */, + 95F9DFE71A35F3310007E953 /* waves_route_rename_dialog.xml in Resources */, + 43279339194F003A003C9FEA /* ardour_icon_16px.png in Resources */, + 4327933A194F003A003C9FEA /* ardour_icon_22px.png in Resources */, + 4327933B194F003A003C9FEA /* ardour_icon_256px.png in Resources */, + 4327933C194F003A003C9FEA /* ardour_icon_32px.png in Resources */, + 4327933D194F003A003C9FEA /* ardour_icon_48px.png in Resources */, + 95D795F41A7BB40C00120A4F /* waves_track_export_channel_selector.xml in Resources */, + 4327933E194F003A003C9FEA /* chord.png in Resources */, + 95D795EE1A7BB40C00120A4F /* waves_export_format_selector.xml in Resources */, + 4327933F194F003A003C9FEA /* close.png in Resources */, + 43279340194F003A003C9FEA /* computer_keyboard.png in Resources */, + 43279341194F003A003C9FEA /* computer_keyboard_active.png in Resources */, + 43279342194F003A003C9FEA /* display_clock_mockup.png in Resources */, + 43279343194F003A003C9FEA /* display_metrics_mockup.png in Resources */, + 43279344194F003A003C9FEA /* eighthnote.png in Resources */, + 43279345194F003A003C9FEA /* expand_left_right_cursor.png in Resources */, + 43279346194F003A003C9FEA /* expand_up_down_cursor.png in Resources */, + 43279347194F003A003C9FEA /* export_icons.sh in Resources */, + 43279348194F003A003C9FEA /* fade_in_cursor.png in Resources */, + 43279349194F003A003C9FEA /* fade_out_cursor.png in Resources */, + 4327934A194F003A003C9FEA /* fadein-constant-power.png in Resources */, + 4327934B194F003A003C9FEA /* fadein-fast-cut.png in Resources */, + 4327934C194F003A003C9FEA /* fadein-linear.png in Resources */, + 4327934D194F003A003C9FEA /* fadein-long-cut.png in Resources */, + 95F9DFE11A35F3310007E953 /* waves_connect_to_backend_error_dialog.xml in Resources */, + 4327934E194F003A003C9FEA /* fadein-S1.png in Resources */, + 4327934F194F003A003C9FEA /* fadein-S2.png in Resources */, + 43279350194F003A003C9FEA /* fadein-short-cut.png in Resources */, + 43279351194F003A003C9FEA /* fadein-slow-cut.png in Resources */, + 43279352194F003A003C9FEA /* fadeout-constant-power.png in Resources */, + 43279353194F003A003C9FEA /* fadeout-fast-cut.png in Resources */, + 43279354194F003A003C9FEA /* fadeout-linear.png in Resources */, + 43279355194F003A003C9FEA /* fadeout-long-cut.png in Resources */, + 43279356194F003A003C9FEA /* fadeout-S1.png in Resources */, + 43279357194F003A003C9FEA /* fadeout-S2.png in Resources */, + 43279358194F003A003C9FEA /* fadeout-short-cut.png in Resources */, + 43279359194F003A003C9FEA /* fadeout-slow-cut.png in Resources */, + 4327935A194F003A003C9FEA /* fader_belt.png in Resources */, + 4327935B194F003A003C9FEA /* fader_belt_desensitised.png in Resources */, + 4327935C194F003A003C9FEA /* fader_belt_h.png in Resources */, + 4327935D194F003A003C9FEA /* fader_belt_h_desensitised.png in Resources */, + 4327935E194F003A003C9FEA /* fader_belt_h_medium.png in Resources */, + 4327935F194F003A003C9FEA /* fader_belt_h_medium_desensitised.png in Resources */, + 43279360194F003A003C9FEA /* fader_belt_h_thin.png in Resources */, + 43279361194F003A003C9FEA /* fader_belt_h_thin_desensitised.png in Resources */, + 43279362194F003A003C9FEA /* fader_handle.png in Resources */, + 43279363194F003A003C9FEA /* ferret_02.png in Resources */, + 43279364194F003A003C9FEA /* forte.png in Resources */, + 43279365194F003A003C9FEA /* fortissimo.png in Resources */, + 43279366194F003A003C9FEA /* fortississimo.png in Resources */, + 43279367194F003A003C9FEA /* grabber.png in Resources */, + 43279368194F003A003C9FEA /* grabber_edit_point.png in Resources */, + 43279369194F003A003C9FEA /* grabber_note.png in Resources */, + 4327936A194F003A003C9FEA /* halfnote.png in Resources */, + 4327936B194F003A003C9FEA /* hide.png in Resources */, + 4327936C194F003A003C9FEA /* horizontal_zoom_fader_face.png in Resources */, + 4327936D194F003A003C9FEA /* i_beam_cursor.png in Resources */, + 4327936E194F003A003C9FEA /* inspector_on.png in Resources */, + 4327936F194F003A003C9FEA /* inspector_on_active.png in Resources */, + 43279370194F003A003C9FEA /* inspector_on_prelight.png in Resources */, + 43279371194F003A003C9FEA /* join_tools.png in Resources */, + 43279372194F003A003C9FEA /* knob.png in Resources */, + 43279373194F003A003C9FEA /* lock_session.png in Resources */, + 43279374194F003A003C9FEA /* lock_session_active.png in Resources */, + 43279375194F003A003C9FEA /* lock_session_prelight.png in Resources */, + 43279376194F003A003C9FEA /* media_button.png in Resources */, + 43279377194F003A003C9FEA /* media_button_active.png in Resources */, + 43279378194F003A003C9FEA /* media_button_prelight.png in Resources */, + 954DCFC21A023AAB00B7160E /* license_dialog.xml in Resources */, + 43279379194F003A003C9FEA /* meter_bridge_on.png in Resources */, + 4327937A194F003A003C9FEA /* meter_bridge_on_active.png in Resources */, + 4327937B194F003A003C9FEA /* meter_bridge_on_prelight.png in Resources */, + 4327937C194F003A003C9FEA /* metronome.png in Resources */, + 4327937D194F003A003C9FEA /* mezzforte.png in Resources */, + 4327937E194F003A003C9FEA /* mezzoforte.png in Resources */, + 4327937F194F003A003C9FEA /* mezzopiano.png in Resources */, + 43279380194F003A003C9FEA /* midi-input-active.png in Resources */, + 43279381194F003A003C9FEA /* midi-input-inactive.png in Resources */, + 43279382194F003A003C9FEA /* midi_panic.png in Resources */, + 43279383194F003A003C9FEA /* midi_socket_small.png in Resources */, + 43279384194F003A003C9FEA /* midi_sound_notes.png in Resources */, + 43279385194F003A003C9FEA /* midi_tool_erase.png in Resources */, + 43279386194F003A003C9FEA /* midi_tool_pencil.png in Resources */, + 43279387194F003A003C9FEA /* midi_tool_select.png in Resources */, + 43279388194F003A003C9FEA /* mixer_on.png in Resources */, + 43279389194F003A003C9FEA /* mixer_on_active.png in Resources */, + 4327938A194F003A003C9FEA /* mixer_on_prelight.png in Resources */, + 4327938B194F003A003C9FEA /* mode_multi_out.png in Resources */, + 4327938C194F003A003C9FEA /* mode_multi_out_active.png in Resources */, + 4327938D194F003A003C9FEA /* mode_multi_out_prelight.png in Resources */, + 4327938E194F003A003C9FEA /* mode_stereo_out.png in Resources */, + 4327938F194F003A003C9FEA /* mode_stereo_out_active.png in Resources */, + 95D795EB1A7BB40C00120A4F /* waves_export_file_notebook_page.xml in Resources */, + 43279390194F003A003C9FEA /* mode_stereo_out_prelight.png in Resources */, + 95D795F21A7BB40C00120A4F /* waves_region_export_channel_selector.xml in Resources */, + 43279391194F003A003C9FEA /* move_cursor.png in Resources */, + 43279392194F003A003C9FEA /* mute-disabled.png in Resources */, + 43279393194F003A003C9FEA /* mute-enabled.png in Resources */, + 95D795E81A7BB40C00120A4F /* marker_inspector_dialog.xml in Resources */, + 43279394194F003A003C9FEA /* muted-by-others.png in Resources */, + 43279395194F003A003C9FEA /* nudge_left.png in Resources */, + 43279396194F003A003C9FEA /* nudge_right.png in Resources */, + 43279397194F003A003C9FEA /* pianissimo.png in Resources */, + 95D4986F1AEA363E006E065D /* crash_recovery_dialog.xml in Resources */, + 43279398194F003A003C9FEA /* pianississimo.png in Resources */, + 43279399194F003A003C9FEA /* piano.png in Resources */, + 4327939A194F003A003C9FEA /* quarternote.png in Resources */, + 4327939B194F003A003C9FEA /* rec-enabled.png in Resources */, + 95D6A67C1A8E22E80030CDD0 /* waves_keyeditor.xml in Resources */, + 4327939C194F003A003C9FEA /* rec-in-progress.png in Resources */, + 4327939D194F003A003C9FEA /* record-normal-disabled.png in Resources */, + 4327939E194F003A003C9FEA /* record-normal-enabled.png in Resources */, + 4327939F194F003A003C9FEA /* record-normal-in-progress.png in Resources */, + 432793A0194F003A003C9FEA /* record-step.png in Resources */, + 432793A1194F003A003C9FEA /* record_disabled_grey.png in Resources */, + 432793A2194F003A003C9FEA /* record_normal_red.png in Resources */, + 432793A3194F003A003C9FEA /* record_tape_red.png in Resources */, + 432793A4194F003A003C9FEA /* resize_bottom_cursor.png in Resources */, + 432793A5194F003A003C9FEA /* resize_bottom_left_cursor.png in Resources */, + 432793A6194F003A003C9FEA /* resize_bottom_right_cursor.png in Resources */, + 432793A7194F003A003C9FEA /* resize_left_cursor.png in Resources */, + 432793A8194F003A003C9FEA /* resize_right_cursor.png in Resources */, + 432793A9194F003A003C9FEA /* resize_top_cursor.png in Resources */, + 432793AA194F003A003C9FEA /* resize_top_left_cursor.png in Resources */, + 95D5D1391A8A514300407F98 /* waves_numeric_edit_dialog.xml in Resources */, + 432793AB194F003A003C9FEA /* resize_top_right_cursor.png in Resources */, + 432793AC194F003A003C9FEA /* sae.png in Resources */, + 432793AD194F003A003C9FEA /* sessionlock.png in Resources */, + 432793AE194F003A003C9FEA /* sixteenthnote.png in Resources */, + 432793AF194F003A003C9FEA /* sixtyfourthnote.png in Resources */, + 432793B0194F003A003C9FEA /* slider_controller_fader.png in Resources */, + 432793B1194F003A003C9FEA /* slider_controller_fader_handle.png in Resources */, + 954DCFDE1A07A14E00B7160E /* read_only_session_dialog.xml in Resources */, + 432793B2194F003A003C9FEA /* solo-disabled.png in Resources */, + 432793B3194F003A003C9FEA /* solo-enabled.png in Resources */, + 432793B4194F003A003C9FEA /* solo-isolate-disabled.png in Resources */, + 432793B5194F003A003C9FEA /* solo-isolate-enabled.png in Resources */, + 432793B6194F003A003C9FEA /* solo-isolated.png in Resources */, + 432793B7194F003A003C9FEA /* solo-safe-disabled.png in Resources */, + 432793B8194F003A003C9FEA /* solo-safe-enabled.png in Resources */, + 432793B9194F003A003C9FEA /* solo-safe-icon.png in Resources */, + 432793BA194F003A003C9FEA /* soloed-by-others.png in Resources */, + 432793BB194F003A003C9FEA /* step-editing.png in Resources */, + 432793BC194F003A003C9FEA /* strip_width.png in Resources */, + 954DCFC11A023AAB00B7160E /* about_dialog.xml in Resources */, + 95D1C5211A78ED3A00BE28DB /* waves_edit_dialog.xml in Resources */, + 432793BD194F003A003C9FEA /* systemlock.png in Resources */, + 432793BE194F003A003C9FEA /* tav_exp.png in Resources */, + 432793BF194F003A003C9FEA /* tav_shrink.png in Resources */, + 432793C0194F003A003C9FEA /* thirtysecondnote.png in Resources */, + 432793C1194F003A003C9FEA /* tool_arrow.png in Resources */, + 432793C2194F003A003C9FEA /* tool_arrow_active.png in Resources */, + 432793C3194F003A003C9FEA /* tool_arrow_prelight.png in Resources */, + 432793C4194F003A003C9FEA /* tool_audition.png in Resources */, + 432793C5194F003A003C9FEA /* tool_cut.png in Resources */, + 432793C6194F003A003C9FEA /* tool_cut_active.png in Resources */, + 95D795EF1A7BB40C00120A4F /* waves_export_preset_selector.xml in Resources */, + 432793C7194F003A003C9FEA /* tool_cut_prelight.png in Resources */, + 432793C8194F003A003C9FEA /* tool_gain.png in Resources */, + 5BC24BAA1A64328D006A2400 /* trackslive.menus.in in Resources */, + 432793C9194F003A003C9FEA /* tool_marker.png in Resources */, + 432793CA194F003A003C9FEA /* tool_marker_active.png in Resources */, + 95D498701AEA363E006E065D /* waves_save_template_dialog.xml in Resources */, + 95D795EC1A7BB40C00120A4F /* waves_export_file_notebook.xml in Resources */, + 432793CB194F003A003C9FEA /* tool_marker_prelight.png in Resources */, + 432793CC194F003A003C9FEA /* tool_note.png in Resources */, + 432793CD194F003A003C9FEA /* tool_object.png in Resources */, + 432793CE194F003A003C9FEA /* tool_object_range.png in Resources */, + 432793CF194F003A003C9FEA /* tool_range.png in Resources */, + 432793D0194F003A003C9FEA /* tool_stretch.png in Resources */, + 432793D1194F003A003C9FEA /* tool_waveform_zoom.png in Resources */, + 432793D2194F003A003C9FEA /* tool_waveform_zoom_active.png in Resources */, + 432793D3194F003A003C9FEA /* tool_waveform_zoom_prelight.png in Resources */, + 432793D4194F003A003C9FEA /* tool_zoom.png in Resources */, + 95176F7E1A08E76F00E32046 /* file_sample_rate_mismatch_dialog.xml in Resources */, + 432793D5194F003A003C9FEA /* tool_zoom_active.png in Resources */, + 432793D6194F003A003C9FEA /* tool_zoom_ardour.png in Resources */, + 432793D7194F003A003C9FEA /* tool_zoom_prelight.png in Resources */, + 432793D8194F003A003C9FEA /* tracks.png in Resources */, + 432793D9194F003A003C9FEA /* tracks_active.png in Resources */, + 432793DA194F003A003C9FEA /* tracks_prelight.png in Resources */, + 956D3F8A1A851805004F328C /* waves_import_dialog.xml in Resources */, + 432793DB194F003A003C9FEA /* transport_end.png in Resources */, + 432793DC194F003A003C9FEA /* transport_end_active.png in Resources */, + 432793DD194F003A003C9FEA /* transport_end_prelight.png in Resources */, + 432793DE194F003A003C9FEA /* transport_loop.png in Resources */, + 432793DF194F003A003C9FEA /* transport_loop_active.png in Resources */, + 432793E0194F003A003C9FEA /* transport_loop_prelight.png in Resources */, + 432793E1194F003A003C9FEA /* transport_play.png in Resources */, + 432793E2194F003A003C9FEA /* transport_play_active.png in Resources */, + 432793E3194F003A003C9FEA /* transport_play_prelight.png in Resources */, + 95D795F11A7BB40C00120A4F /* waves_port_export_channel_selector.xml in Resources */, + 432793E4194F003A003C9FEA /* transport_range.png in Resources */, + 432793E5194F003A003C9FEA /* transport_record.png in Resources */, + 432793E6194F003A003C9FEA /* transport_record_active.png in Resources */, + 432793E7194F003A003C9FEA /* transport_record_prelight.png in Resources */, + 432793E8194F003A003C9FEA /* transport_start.png in Resources */, + 432793E9194F003A003C9FEA /* transport_start_active.png in Resources */, + 95D4986E1AEA363E006E065D /* audio_engine_reset_info_dialog.xml in Resources */, + 432793EA194F003A003C9FEA /* transport_start_prelight.png in Resources */, + 432793EB194F003A003C9FEA /* transport_stop.png in Resources */, + 432793EC194F003A003C9FEA /* transport_stop_active.png in Resources */, + 432793ED194F003A003C9FEA /* transport_stop_prelight.png in Resources */, + 432793EE194F003A003C9FEA /* trim_bottom_cursor.png in Resources */, + 432793EF194F003A003C9FEA /* trim_left_cursor.png in Resources */, + 432793F0194F003A003C9FEA /* trim_left_cursor_5.png in Resources */, + 432793F1194F003A003C9FEA /* trim_left_cursor_right_only.png in Resources */, + 432793F2194F003A003C9FEA /* trim_right_cursor.png in Resources */, + 432793F3194F003A003C9FEA /* trim_right_cursor_5.png in Resources */, + 95D795F31A7BB40C00120A4F /* waves_track_color_dialog.xml in Resources */, + 432793F4194F003A003C9FEA /* trim_right_cursor_left_only.png in Resources */, + 432793F5194F003A003C9FEA /* trim_top_cursor.png in Resources */, + 432793F6194F003A003C9FEA /* vertical_zoom_fader_face.png in Resources */, + 432793F7194F003A003C9FEA /* wholenote.png in Resources */, + 432793F8194F003A003C9FEA /* zoom_fader_handle.png in Resources */, + 95F9DFE61A35F3310007E953 /* waves_how_to_import_dialog_2.xml in Resources */, + 432793F9194F003A003C9FEA /* zoom_fader_handle_active.png in Resources */, + 432793FA194F003A003C9FEA /* zoom_full.png in Resources */, + 432793FB194F003A003C9FEA /* zoom_in.png in Resources */, + 432793FC194F003A003C9FEA /* zoom_in_cursor.png in Resources */, + 432793FD194F003A003C9FEA /* zoom_out.png in Resources */, + 432793FE194F003A003C9FEA /* zoom_out_cursor.png in Resources */, + 95F9DFE41A35F3310007E953 /* waves_file_exists_dialog.xml in Resources */, + 43279431194F0062003C9FEA /* forwardblarrow.xpm in Resources */, + 43279432194F0062003C9FEA /* h_meter_strip.xpm in Resources */, + 43279433194F0062003C9FEA /* hiin.xpm in Resources */, + 43279434194F0062003C9FEA /* hiout.xpm in Resources */, + 43279435194F0062003C9FEA /* hslider00.xpm in Resources */, + 43279436194F0062003C9FEA /* hslider01.xpm in Resources */, + 43279437194F0062003C9FEA /* left_arrow.xpm in Resources */, + 43279438194F0062003C9FEA /* linin.xpm in Resources */, + 43279439194F0062003C9FEA /* linout.xpm in Resources */, + 4327943A194F0062003C9FEA /* loin.xpm in Resources */, + 4327943B194F0062003C9FEA /* loop.xpm in Resources */, + 4327943C194F0062003C9FEA /* loout.xpm in Resources */, + 4327943D194F0062003C9FEA /* lr.xpm in Resources */, + 4327943E194F0062003C9FEA /* regin.xpm in Resources */, + 4327943F194F0062003C9FEA /* regin2.xpm in Resources */, + 43279440194F0062003C9FEA /* regout.xpm in Resources */, + 43279441194F0062003C9FEA /* regout2.xpm in Resources */, + 43279442194F0062003C9FEA /* revdblarrow.xpm in Resources */, + 43279443194F0062003C9FEA /* right_arrow.xpm in Resources */, + 43279444194F0062003C9FEA /* set-next-button.xpm in Resources */, + 43279445194F0062003C9FEA /* small-round-button-01.xpm in Resources */, + 43279446194F0062003C9FEA /* small_x.xpm in Resources */, + 43279447194F0062003C9FEA /* toggle-button-00.xpm in Resources */, + 43279448194F0062003C9FEA /* toggle-button-01.xpm in Resources */, + 43279449194F0062003C9FEA /* tool_audition.xpm in Resources */, + 95D795ED1A7BB40C00120A4F /* waves_export_filename_selector.xml in Resources */, + 95F9DFE51A35F3310007E953 /* waves_how_to_import_dialog_1.xml in Resources */, + 95F9DFE21A35F3310007E953 /* waves_excessive_split_dialog.xml in Resources */, + 4327944A194F0062003C9FEA /* tool_gain.xpm in Resources */, + 4327944B194F0062003C9FEA /* tool_object.xpm in Resources */, + 95F9DFE01A35F3310007E953 /* waves_clean_up_dialog.xml in Resources */, + 4327944C194F0062003C9FEA /* tool_range.xpm in Resources */, + 4327944D194F0062003C9FEA /* tool_stretch.xpm in Resources */, + 4327944E194F0062003C9FEA /* tool_zoom.xpm in Resources */, + 4327944F194F0062003C9FEA /* v_meter_strip.xpm in Resources */, + 43279450194F0062003C9FEA /* vslider00.xpm in Resources */, + 43279451194F0062003C9FEA /* vslider01.xpm in Resources */, + 43279452194F0062003C9FEA /* vslider02_rail.xpm in Resources */, + 43279453194F0062003C9FEA /* vslider02_slider.xpm in Resources */, + 43279454194F0062003C9FEA /* vslider_slider_16wide.xpm in Resources */, + 43279455194F0062003C9FEA /* zoom_full.xpm in Resources */, + 95D9E37A1A8D1B3B00A0DA46 /* waves_missing_file_dialog.xml in Resources */, + 43279456194F0062003C9FEA /* zoom_in.xpm in Resources */, + 43279457194F0062003C9FEA /* zoom_out.xpm in Resources */, + 95D795EA1A7BB40C00120A4F /* waves_export_dialog.xml in Resources */, + 43279458194F0062003C9FEA /* small-splash.png in Resources */, + 95E2A7AB1A8F652F0080BD79 /* waves_radio_item.xml in Resources */, + 43279459194F0062003C9FEA /* splash.png in Resources */, + 4327945A194F0062003C9FEA /* device_capture_control.xml in Resources */, + 4327945B194F0062003C9FEA /* device_playback_control.xml in Resources */, + 4327945C194F0062003C9FEA /* editor_window.xml in Resources */, + 4327945D194F0062003C9FEA /* midi_device_control.xml in Resources */, + 95D9E3791A8D1B3B00A0DA46 /* waves_ambiguous_file_dialog.xml in Resources */, + 4327945E194F0062003C9FEA /* session_dialog.xml in Resources */, + 4327945F194F0062003C9FEA /* session_lock_dialog.xml in Resources */, + 43279460194F0062003C9FEA /* tracks_preferences.xml in Resources */, + 4327947F194F009E003C9FEA /* tracks.menus.in in Resources */, + 43B351ED194F04E00038C140 /* step_editing.bindings in Resources */, + CEB0A9F41958447C006D269A /* session_close_dialog.xml in Resources */, + CEB9D791197516BE00B21780 /* audio_time_axis.xml in Resources */, + CEB9D792197516BE00B21780 /* automation_time_axis.xml in Resources */, + CEB9D793197516BE00B21780 /* editor_mixer.xml in Resources */, + 952E0B3C1A0A1D7000F375D0 /* buildlog.txt in Resources */, + 95F9DFD71A35A8BD0007E953 /* waves_message_dialog.xml in Resources */, + CEB9D794197516BE00B21780 /* inspector_gain_meter.xml in Resources */, + 5BC67E591A408FCE00F29ABA /* progress_dialog.xml in Resources */, + CEB9D796197516BE00B21780 /* master_ui.xml in Resources */, + CEB9D797197516BE00B21780 /* meter_strip.xml in Resources */, + CEB9D798197516BE00B21780 /* mixer_gain_meter.xml in Resources */, + CEB9D799197516BE00B21780 /* mixer_strip.xml in Resources */, + CEB9D79A197516BE00B21780 /* track_header_gain_meter.xml in Resources */, + CE294C5F19CAD4E300D12768 /* add_tracks_dialog.xml in Resources */, + 95D795F01A7BB40C00120A4F /* waves_export_timespan_selector.xml in Resources */, + CE294C6019CAD4E300D12768 /* compact_meter_bridge.xml in Resources */, + CE294C6119CAD4E300D12768 /* compact_meter_strip.xml in Resources */, + CE294C6219CAD4E300D12768 /* marker_io_dialog.xml in Resources */, + CE294C6319CAD4E300D12768 /* meter_bridge_view.xml in Resources */, + CE294C6419CAD4E300D12768 /* meter_strip_gain_meter.xml in Resources */, + CE294C6519CAD4E300D12768 /* mixer_bridge_view.xml in Resources */, + CE294C6619CAD4E300D12768 /* time_info_box.xml in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 43279240194EFFF1003C9FEA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 95D796151A7BB9E000120A4F /* waves_export_timespan_selector.cc in Sources */, + 43279254194EFFF1003C9FEA /* main.m in Sources */, + 4327925B194EFFF1003C9FEA /* AppDelegate.m in Sources */, + CEAFC770195445560016ACF0 /* bbt_time.cc in Sources */, + CEAFC771195445560016ACF0 /* time.cc in Sources */, + 95D7960C1A7BB9E000120A4F /* marker_inspector_dialog.cc in Sources */, + 95D71D581A4C69AE00DE5B3B /* waves_track_color_dialog.logic.cc in Sources */, + 95D796121A7BB9E000120A4F /* waves_export_filename_selector.cc in Sources */, + 95D7960F1A7BB9E000120A4F /* waves_export_channel_selector.cc in Sources */, + CEB0A9F219583F96006D269A /* session_close_dialog.cc in Sources */, + 95D796141A7BB9E000120A4F /* waves_export_preset_selector.cc in Sources */, + 95D7960B1A7BB9E000120A4F /* floating_text_entry.cc in Sources */, + CE1C6DCE19879F04006BDB03 /* compact_meter_bridge.cc in Sources */, + 95D9E37F1A8D1B6600A0DA46 /* waves_ambiguous_file_dialog.cc in Sources */, + 95D7960E1A7BB9E000120A4F /* route_inspector.cc in Sources */, + CE1C6DCF19879F04006BDB03 /* compact_meter_strip.cc in Sources */, + 95A134DE1A0239080008E3D6 /* license_dialog.cc in Sources */, + CE1C6DE01987A924006BDB03 /* master_bus_ui.cc in Sources */, + 95D796101A7BB9E000120A4F /* waves_export_dialog.cc in Sources */, + 954DCFBD1A0239DA00B7160E /* about_dialog.cc in Sources */, + 95D5D1371A8A514300407F98 /* waves_numeric_edit_dialog.cc in Sources */, + CE1A907A199A37AE00ECA62B /* add_tracks_dialog.cc in Sources */, + 95176F7A1A08E6E800E32046 /* file_sample_rate_mismatch_dialog.cc in Sources */, + 95D7960D1A7BB9E000120A4F /* marker_inspector_dialog.logic.cc in Sources */, + 95D71D551A4C66F600DE5B3B /* waves_track_color_dialog.cc in Sources */, + 95D1C51F1A78ED2100BE28DB /* waves_edit_dialog.cc in Sources */, + CE294C7519CAD54500D12768 /* marker_io_dialog.cc in Sources */, + 957EF44B1A30BFB300F1500E /* waves_message_dialog.cc in Sources */, + CE294C7619CAD54500D12768 /* mixer_bridge_view.cc in Sources */, + CE294C7719CAD54500D12768 /* open_file_dialog_nix.cc in Sources */, + CE294C7819CAD54500D12768 /* open_file_dialog_windows.cc in Sources */, + 5BC67E5F1A4090BD00F29ABA /* progress_dialog.cc in Sources */, + 95D796161A7BB9E000120A4F /* waves_import_dialog.cc in Sources */, + CE294C7919CAD54500D12768 /* ruler_dialog.cc in Sources */, + 95D9E3801A8D1B6600A0DA46 /* waves_missing_file_dialog.cc in Sources */, + 95D796131A7BB9E000120A4F /* waves_export_format_selector.cc in Sources */, + 95D796111A7BB9E000120A4F /* waves_export_file_notebook.cc in Sources */, + CE294C7A19CAD54500D12768 /* soundcloud_export_selector.cc in Sources */, + 95E5E9461AE946510000E2CE /* waves_tooltip.cc in Sources */, + CE294C7B19CAD54500D12768 /* waves_dropdown.cc in Sources */, + CE294C7C19CAD54500D12768 /* waves_grid.cc in Sources */, + CE294C7D19CAD54500D12768 /* waves_zoom_control.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 43279250194EFFF1003C9FEA /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 43279251194EFFF1003C9FEA /* en */, + ); + name = InfoPlist.strings; + sourceTree = "<group>"; + }; + 43279256194EFFF1003C9FEA /* Credits.rtf */ = { + isa = PBXVariantGroup; + children = ( + 43279257194EFFF1003C9FEA /* en */, + ); + name = Credits.rtf; + sourceTree = "<group>"; + }; + 4327925C194EFFF1003C9FEA /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 4327925D194EFFF1003C9FEA /* en */, + ); + name = MainMenu.xib; + path = Tracks; + sourceTree = SOURCE_ROOT; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 4327903E194EFF24003C9FEA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Debug; + }; + 4327903F194EFF24003C9FEA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Release; + }; + 43279260194EFFF1003C9FEA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tracks/Tracks-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = "Tracks/Tracks-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.8; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 43279261194EFFF1003C9FEA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tracks/Tracks-Prefix.pch"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = "Tracks/Tracks-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.8; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4327903D194EFF24003C9FEA /* Build configuration list for PBXProject "tracks" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4327903E194EFF24003C9FEA /* Debug */, + 4327903F194EFF24003C9FEA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4327925F194EFFF1003C9FEA /* Build configuration list for PBXNativeTarget "Tracks" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 43279260194EFFF1003C9FEA /* Debug */, + 43279261194EFFF1003C9FEA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 4327903A194EFF24003C9FEA /* Project object */; +} diff --git a/gtk2_ardour/meter_patterns.cc b/gtk2_ardour/meter_patterns.cc index 675e567df6..b9653e6ab3 100644 --- a/gtk2_ardour/meter_patterns.cc +++ b/gtk2_ardour/meter_patterns.cc @@ -79,10 +79,10 @@ ArdourMeter::meter_type_string (ARDOUR::MeterType mt) { switch (mt) { case MeterPeak: - return _("Peak"); + return _("Peak (+6dBFS)"); break; case MeterPeak0dB: - return _("Peak 0dB"); + return _("Peak (0dBFS)"); break; case MeterKrms: return _("RMS + Peak"); @@ -100,13 +100,13 @@ ArdourMeter::meter_type_string (ARDOUR::MeterType mt) return _("IEC2/EBU"); break; case MeterK20: - return _("K20"); + return _("K20/RMS"); break; case MeterK14: - return _("K14"); + return _("K14/RMS"); break; case MeterK12: - return _("K12"); + return _("K12/RMS"); break; case MeterVU: return _("VU"); diff --git a/gtk2_ardour/meterbridge.cc b/gtk2_ardour/meterbridge.cc index 08604b0620..aaf1842c79 100644 --- a/gtk2_ardour/meterbridge.cc +++ b/gtk2_ardour/meterbridge.cc @@ -111,7 +111,6 @@ Meterbridge::Meterbridge () assert(max_height % 16 == 0); set_geometry_hints(*((Gtk::Window*) this), geom, Gdk::HINT_MIN_SIZE | Gdk::HINT_MAX_SIZE | Gdk::HINT_RESIZE_INC); - set_keep_above (true); set_border_width (0); metrics_vpacker_left.pack_start (metrics_left, true, true); @@ -439,7 +438,7 @@ Meterbridge::set_session (Session* s) if (_visible) { show_window(); - ActionManager::check_toggleaction ("<Actions>/Common/toggle-meterbridge"); + present (); } start_updating (); } diff --git a/gtk2_ardour/midi_list_editor.cc b/gtk2_ardour/midi_list_editor.cc index 4c7a30cdd9..047dcf27a7 100644 --- a/gtk2_ardour/midi_list_editor.cc +++ b/gtk2_ardour/midi_list_editor.cc @@ -777,7 +777,7 @@ MidiListEditor::redisplay_model () bbt.beats = dur.get_beats (); bbt.ticks = dur.get_ticks (); - int len_ticks = (*i)->length().to_ticks(); + uint64_t len_ticks = (*i)->length().to_ticks(); std::map<int,string>::iterator x = note_length_map.find (len_ticks); if (x != note_length_map.end()) { diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index a011d2e9b3..661d1f6db9 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -1179,6 +1179,7 @@ MixerStrip::update_io_button (boost::shared_ptr<ARDOUR::Route> route, Width widt uint32_t ardour_connection_count = 0; uint32_t system_connection_count = 0; uint32_t other_connection_count = 0; + uint32_t typed_connection_count = 0; ostringstream label; @@ -1196,8 +1197,12 @@ MixerStrip::update_io_button (boost::shared_ptr<ARDOUR::Route> route, Width widt //to avoid confusion, the button caption should only show connections that match the datatype of the track DataType dt = DataType::AUDIO; - if ( boost::dynamic_pointer_cast<MidiTrack>(route) != 0 ) + if ( boost::dynamic_pointer_cast<MidiTrack>(route) != 0 ) { dt = DataType::MIDI; + // avoid further confusion with Midi-tracks that have a synth. + // Audio-ports may be connected, but button says "Disconnected" + tooltip << _("MIDI "); + } if (for_input) { io_count = route->n_inputs().n_total(); @@ -1215,12 +1220,17 @@ MixerStrip::update_io_button (boost::shared_ptr<ARDOUR::Route> route, Width widt port = route->output()->nth (io_index); } - //ignore any port connections that don't match our DataType - if (port->type() != dt) - continue; - port_connections.clear (); port->get_connections(port_connections); + + //ignore any port connections that don't match our DataType + if (port->type() != dt) { + if (!port_connections.empty()) { + ++typed_connection_count; + } + continue; + } + io_connection_count = 0; if (!port_connections.empty()) { @@ -1360,6 +1370,9 @@ MixerStrip::update_io_button (boost::shared_ptr<ARDOUR::Route> route, Width widt // Odd configuration label << "*" << total_connection_count << "*"; } + if (typed_connection_count > 0) { + label << "\u2295"; // circled plus + } } if (for_input) { diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 23144094e9..a1cb2365d5 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -777,12 +777,6 @@ Mixer_UI::set_session (Session* sess) if (_visible) { show_window(); - - /* Bit of a hack; if we're here, we're opening the mixer because of our - instant XML state having a show-mixer property. Fix up the corresponding - action state. - */ - ActionManager::check_toggleaction ("<Actions>/Common/toggle-mixer"); } start_updating (); @@ -951,7 +945,7 @@ Mixer_UI::set_all_strips_visibility (bool yn) void -Mixer_UI::set_all_audio_visibility (int tracks, bool yn) +Mixer_UI::set_all_audio_midi_visibility (int tracks, bool yn) { TreeModel::Children rows = track_model->children(); TreeModel::Children::iterator i; @@ -972,6 +966,7 @@ Mixer_UI::set_all_audio_visibility (int tracks, bool yn) } boost::shared_ptr<AudioTrack> at = strip->audio_track(); + boost::shared_ptr<MidiTrack> mt = strip->midi_track(); switch (tracks) { case 0: @@ -985,7 +980,13 @@ Mixer_UI::set_all_audio_visibility (int tracks, bool yn) break; case 2: - if (!at) { /* bus */ + if (!at && !mt) { /* bus */ + (*i)[track_columns.visible] = yn; + } + break; + + case 3: + if (mt) { /* midi-track */ (*i)[track_columns.visible] = yn; } break; @@ -1011,26 +1012,38 @@ Mixer_UI::show_all_routes () void Mixer_UI::show_all_audiobus () { - set_all_audio_visibility (2, true); + set_all_audio_midi_visibility (2, true); } void Mixer_UI::hide_all_audiobus () { - set_all_audio_visibility (2, false); + set_all_audio_midi_visibility (2, false); } void Mixer_UI::show_all_audiotracks() { - set_all_audio_visibility (1, true); + set_all_audio_midi_visibility (1, true); } void Mixer_UI::hide_all_audiotracks () { - set_all_audio_visibility (1, false); + set_all_audio_midi_visibility (1, false); } void +Mixer_UI::show_all_miditracks() +{ + set_all_audio_midi_visibility (3, true); +} +void +Mixer_UI::hide_all_miditracks () +{ + set_all_audio_midi_visibility (3, false); +} + + +void Mixer_UI::track_list_reorder (const TreeModel::Path&, const TreeModel::iterator&, int* /*new_order*/) { DEBUG_TRACE (DEBUG::OrderKeys, "mixer UI treeview reordered\n"); @@ -1202,6 +1215,8 @@ Mixer_UI::build_track_menu () items.push_back (MenuElem (_("Hide All Audio Tracks"), sigc::mem_fun(*this, &Mixer_UI::hide_all_audiotracks))); items.push_back (MenuElem (_("Show All Audio Busses"), sigc::mem_fun(*this, &Mixer_UI::show_all_audiobus))); items.push_back (MenuElem (_("Hide All Audio Busses"), sigc::mem_fun(*this, &Mixer_UI::hide_all_audiobus))); + items.push_back (MenuElem (_("Show All Midi Tracks"), sigc::mem_fun (*this, &Mixer_UI::show_all_miditracks))); + items.push_back (MenuElem (_("Hide All Midi Tracks"), sigc::mem_fun (*this, &Mixer_UI::hide_all_miditracks))); } diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h index 4ab48ffd31..a56bb39bb1 100644 --- a/gtk2_ardour/mixer_ui.h +++ b/gtk2_ardour/mixer_ui.h @@ -179,7 +179,7 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR void show_track_list_menu (); void set_all_strips_visibility (bool yn); - void set_all_audio_visibility (int tracks, bool yn); + void set_all_audio_midi_visibility (int, bool); void track_visibility_changed (std::string const & path); void update_track_visibility (); @@ -189,6 +189,8 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR void hide_all_audiobus (); void show_all_audiotracks(); void hide_all_audiotracks (); + void show_all_miditracks(); + void hide_all_miditracks (); bool in_group_row_change; diff --git a/gtk2_ardour/mnemonic-us.bindings.in b/gtk2_ardour/mnemonic-us.bindings.in index e2e8bd408f..6819ef92f8 100644 --- a/gtk2_ardour/mnemonic-us.bindings.in +++ b/gtk2_ardour/mnemonic-us.bindings.in @@ -132,11 +132,14 @@ This mode provides many different operations on both regions and control points, @rop|Region/boost-region-gain|<@SECONDARY@>6|increase region gain @rop|Region/cut-region-gain|<@SECONDARY@>7|reduce region gain @rop|Region/pitch-shift-region|<@SECONDARY@>8|transpose +@rop|Region/lower-region|<@SECONDARY@>9|lower region layer +@rop|Region/raise-region|<@SECONDARY@>0|raise region layer ;; letters ;; TOP ROW @sess|Common/Quit|<@PRIMARY@>q|quit +@sess|Common/Hide|<@PRIMARY@>h|hide @movp|Editor/jump-forward-to-mark|w|to next mark @movp|Editor/jump-backward-to-mark|q|to previous mark @@ -213,12 +216,14 @@ This mode provides many different operations on both regions and control points, @mmode|MouseMode/set-mouse-mode-cut|c|cut mode @edit|Editor/editor-cut|<@PRIMARY@>x|cut @edit|Editor/editor-copy|<@PRIMARY@>c|copy -@-group|Editor/crop|<@SECONDARY@>c|some text +@wvis|Window/toggle-big-clock|<@SECONDARY@>c|toggle big clock +@-group|Editor/crop<@PRIMARY@><@TERTIARY@>c|crop @rop|Region/set-region-sync-position|v|set region sync point @edit|Editor/editor-paste|<@PRIMARY@>v|paste +@edit|Editor/ToggleJadeo|<@SECONDARY@>v|video window @-group|Editor/brush-at-mouse|<@PRIMARY@>b|some text +@wvis|Common/toggle-meterbridge|<@SECONDARY@>b|show meter bridge @trans|Editor/track-record-enable-toggle|<@TERTIARY@>b|toggle track rec-enable -@wvis|Window/toggle-big-clock|<@SECONDARY@>b|toggle big clock @sess|Main/AddTrackBus|<@PRIMARY@><@TERTIARY@>n|add track(s) or bus(ses) @wvis|Window/toggle-audio-connection-manager|<@SECONDARY@>n|toggle global audio patchbay @sess|Main/New|<@PRIMARY@>n|open a new session diff --git a/gtk2_ardour/opts.cc b/gtk2_ardour/opts.cc index 4596b5c62c..f544adec5c 100644 --- a/gtk2_ardour/opts.cc +++ b/gtk2_ardour/opts.cc @@ -74,7 +74,7 @@ print_help (const char *execname) #endif << _(" -E, --save <file> Load the specified session, save it to <file> and then quit\n") << _(" -C, --curvetest filename Curve algorithm debugger\n") - << _(" -k, --keybindings filename Name of key bindings to load (default is ~/.ardour3/ardour.bindings)\n") + << _(" -k, --keybindings filename Name of key bindings to load\n") ; return 1; diff --git a/gtk2_ardour/panner_interface.cc b/gtk2_ardour/panner_interface.cc index 0fcba4cd1c..0091cf592a 100644 --- a/gtk2_ardour/panner_interface.cc +++ b/gtk2_ardour/panner_interface.cc @@ -119,7 +119,7 @@ PannerInterface::set_send_drawing_mode(bool onoff) { } PannerPersistentTooltip::PannerPersistentTooltip (Gtk::Widget* w) - : PersistentTooltip (w) + : PersistentTooltip (w, true) , _dragging (false) { diff --git a/gtk2_ardour/pingback.cc b/gtk2_ardour/pingback.cc index 8e4a32628d..3c46a0c8ff 100644 --- a/gtk2_ardour/pingback.cc +++ b/gtk2_ardour/pingback.cc @@ -23,7 +23,10 @@ #include <fstream> #include <cstring> -#ifndef PLATFORM_WINDOWS +#ifdef PLATFORM_WINDOWS +#include <windows.h> +#include <glibmm.h> +#else #include <sys/utsname.h> #endif @@ -42,7 +45,6 @@ using std::string; using namespace ARDOUR; -#ifndef PLATFORM_WINDOWS // no pingback for windows, so far static size_t curl_write_data (char *bufptr, size_t size, size_t nitems, void *ptr) { @@ -62,7 +64,6 @@ curl_write_data (char *bufptr, size_t size, size_t nitems, void *ptr) return size * nitems; } -#endif struct ping_call { std::string version; @@ -72,19 +73,40 @@ struct ping_call { : version (v), announce_path (a) {} }; +#ifdef PLATFORM_WINDOWS +static bool +_query_registry (const char *regkey, const char *regval, std::string &rv) { + HKEY key; + DWORD size = PATH_MAX; + char tmp[PATH_MAX+1]; + + if ( (ERROR_SUCCESS == RegOpenKeyExA (HKEY_LOCAL_MACHINE, regkey, 0, KEY_READ, &key)) + && (ERROR_SUCCESS == RegQueryValueExA (key, regval, 0, NULL, reinterpret_cast<LPBYTE>(tmp), &size)) + ) + { + rv = Glib::locale_to_utf8 (tmp); + return true; + } + + if ( (ERROR_SUCCESS == RegOpenKeyExA (HKEY_LOCAL_MACHINE, regkey, 0, KEY_READ | KEY_WOW64_32KEY, &key)) + && (ERROR_SUCCESS == RegQueryValueExA (key, regval, 0, NULL, reinterpret_cast<LPBYTE>(tmp), &size)) + ) + { + rv = Glib::locale_to_utf8 (tmp); + return true; + } + + return false; +} +#endif + + static void* _pingback (void *arg) { -#ifndef PLATFORM_WINDOWS ping_call* cm = static_cast<ping_call*> (arg); CURL* c; - struct utsname utb; string return_str; - - if (uname (&utb)) { - return 0; - } - //initialize curl curl_global_init (CURL_GLOBAL_NOTHING); @@ -99,16 +121,31 @@ _pingback (void *arg) #ifdef __APPLE__ url = Config->get_osx_pingback_url (); +#elif defined PLATFORM_WINDOWS + url = Config->get_windows_pingback_url (); #else url = Config->get_linux_pingback_url (); #endif + if (url.compare (0, 4, "http") != 0) { + delete cm; + return 0; + } + char* v = curl_easy_escape (c, cm->version.c_str(), cm->version.length()); url += v; url += '?'; free (v); - string uts = string_compose ("%1 %2 %3 %4", utb.sysname, utb.release, utb.version, utb.machine); +#ifndef PLATFORM_WINDOWS + struct utsname utb; + + if (uname (&utb)) { + delete cm; + return 0; + } + + //string uts = string_compose ("%1 %2 %3 %4", utb.sysname, utb.release, utb.version, utb.machine); string s; char* query; @@ -128,6 +165,40 @@ _pingback (void *arg) s = string_compose ("m=%1", query); url += s; free (query); +#else + std::string val; + if (_query_registry("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "ProductName", val)) { + char* query = curl_easy_escape (c, val.c_str(), strlen (val.c_str())); + url += "r="; + url += query; + url += '&'; + free (query); + } else { + url += "r=&"; + } + + if (_query_registry("Hardware\\Description\\System\\CentralProcessor\\0", "Identifier", val)) { + // remove "Family X Model YY Stepping Z" tail + size_t cut = val.find (" Family "); + if (string::npos != cut) { + val = val.substr (0, cut); + } + char* query = curl_easy_escape (c, val.c_str(), strlen (val.c_str())); + url += "m="; + url += query; + url += '&'; + free (query); + } else { + url += "m=&"; + } + +# if ( defined(__x86_64__) || defined(_M_X64) ) + url += "s=Windows64"; +# else + url += "s=Windows32"; +# endif + +#endif /* PLATFORM_WINDOWS */ curl_easy_setopt (c, CURLOPT_URL, url.c_str()); @@ -163,9 +234,6 @@ _pingback (void *arg) curl_easy_cleanup (c); delete cm; - -#endif /* PLATFORM_WINDOWS */ - return 0; } diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc index 2a1ce85ee3..3c3d08c2d0 100644 --- a/gtk2_ardour/plugin_selector.cc +++ b/gtk2_ardour/plugin_selector.cc @@ -131,8 +131,6 @@ PluginSelector::PluginSelector (PluginManager& mgr) btn_remove = manage(new Gtk::Button(Stock::REMOVE)); btn_remove->set_sensitive (false); ARDOUR_UI::instance()->set_tip(*btn_remove, _("Remove a plugin from the effect list")); - Gtk::Button *btn_update = manage(new Gtk::Button(Stock::REFRESH)); - ARDOUR_UI::instance()->set_tip(*btn_update, _("Update available plugins")); btn_add->set_name("PluginSelectorButton"); btn_remove->set_name("PluginSelectorButton"); @@ -163,8 +161,7 @@ PluginSelector::PluginSelector (PluginManager& mgr) table->attach (*filter_box, 0, 7, 5, 6, FILL|EXPAND, FILL, 5, 5); table->attach(*btn_add, 1, 2, 6, 7, FILL, FILL, 5, 5); - table->attach(*btn_remove, 3, 4, 6, 7, FILL, FILL, 5, 5); - table->attach(*btn_update, 5, 6, 6, 7, FILL, FILL, 5, 5); + table->attach(*btn_remove, 5, 6, 6, 7, FILL, FILL, 5, 5); table->attach(ascroller, 0, 7, 8, 10); @@ -183,7 +180,6 @@ PluginSelector::PluginSelector (PluginManager& mgr) plugin_display.get_selection()->signal_changed().connect (sigc::mem_fun(*this, &PluginSelector::display_selection_changed)); plugin_display.grab_focus(); - btn_update->signal_clicked().connect (sigc::mem_fun(*this, &PluginSelector::btn_update_clicked)); btn_add->signal_clicked().connect(sigc::mem_fun(*this, &PluginSelector::btn_add_clicked)); btn_remove->signal_clicked().connect(sigc::mem_fun(*this, &PluginSelector::btn_remove_clicked)); added_list.get_selection()->signal_changed().connect (sigc::mem_fun(*this, &PluginSelector::added_list_selection_changed)); @@ -447,12 +443,6 @@ PluginSelector::btn_remove_clicked() } void -PluginSelector::btn_update_clicked() -{ - manager.refresh (); -} - -void PluginSelector::display_selection_changed() { if (plugin_display.get_selection()->count_selected_rows() != 0) { diff --git a/gtk2_ardour/plugin_selector.h b/gtk2_ardour/plugin_selector.h index 84c165138e..9a71d28780 100644 --- a/gtk2_ardour/plugin_selector.h +++ b/gtk2_ardour/plugin_selector.h @@ -121,7 +121,6 @@ class PluginSelector : public ArdourDialog void row_activated(Gtk::TreeModel::Path path, Gtk::TreeViewColumn* col); void btn_add_clicked(); void btn_remove_clicked(); - void btn_update_clicked(); void added_list_selection_changed(); void added_row_clicked(GdkEventButton* event); void display_selection_changed(); diff --git a/gtk2_ardour/po/ru.po b/gtk2_ardour/po/ru.po index cf4491d1eb..9380058eca 100644 --- a/gtk2_ardour/po/ru.po +++ b/gtk2_ardour/po/ru.po @@ -10,15 +10,15 @@ msgid "" msgstr "" "Project-Id-Version: Ardour 4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-04-18 20:02+0300\n" -"PO-Revision-Date: 2015-04-19 00:46+0300\n" +"POT-Creation-Date: 2015-06-26 02:12+0300\n" +"PO-Revision-Date: 2015-06-26 03:23+0300\n" "Last-Translator: Alexandre Prokoudine <alexandre.prokoudine@gmail.com>\n" "Language-Team: руÑÑкий <>\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Gtranslator 2.91.6\n" +"X-Generator: Gtranslator 2.91.7\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" "%100>=20) ? 1: 2);\n" @@ -509,23 +509,23 @@ msgid "Insert:" msgstr "Ð’Ñтавить:" #: add_route_dialog.cc:223 add_route_dialog.cc:232 add_route_dialog.cc:306 -#: ardour_ui_ed.cc:539 engine_dialog.cc:238 rc_option_editor.cc:1797 -#: rc_option_editor.cc:1799 rc_option_editor.cc:1801 rc_option_editor.cc:1819 -#: rc_option_editor.cc:1821 rc_option_editor.cc:1829 rc_option_editor.cc:1831 -#: rc_option_editor.cc:1849 rc_option_editor.cc:1862 rc_option_editor.cc:1864 -#: rc_option_editor.cc:1866 rc_option_editor.cc:1911 rc_option_editor.cc:1913 -#: rc_option_editor.cc:1915 rc_option_editor.cc:1923 rc_option_editor.cc:1931 -#: rc_option_editor.cc:1933 rc_option_editor.cc:1941 +#: ardour_ui_ed.cc:547 engine_dialog.cc:238 rc_option_editor.cc:2185 +#: rc_option_editor.cc:2187 rc_option_editor.cc:2189 rc_option_editor.cc:2207 +#: rc_option_editor.cc:2209 rc_option_editor.cc:2217 rc_option_editor.cc:2219 +#: rc_option_editor.cc:2237 rc_option_editor.cc:2250 rc_option_editor.cc:2252 +#: rc_option_editor.cc:2254 rc_option_editor.cc:2299 rc_option_editor.cc:2301 +#: rc_option_editor.cc:2303 rc_option_editor.cc:2311 rc_option_editor.cc:2319 +#: rc_option_editor.cc:2321 rc_option_editor.cc:2329 msgid "Audio" msgstr "Ðудио" #: add_route_dialog.cc:224 add_route_dialog.cc:235 add_route_dialog.cc:307 #: editor_actions.cc:109 engine_dialog.cc:240 missing_file_dialog.cc:56 -#: rc_option_editor.cc:2076 rc_option_editor.cc:2086 rc_option_editor.cc:2094 -#: rc_option_editor.cc:2102 rc_option_editor.cc:2111 rc_option_editor.cc:2119 -#: rc_option_editor.cc:2127 rc_option_editor.cc:2135 rc_option_editor.cc:2144 -#: rc_option_editor.cc:2153 rc_option_editor.cc:2162 rc_option_editor.cc:2170 -#: rc_option_editor.cc:2178 rc_option_editor.cc:2186 rc_option_editor.cc:2209 +#: rc_option_editor.cc:2464 rc_option_editor.cc:2474 rc_option_editor.cc:2482 +#: rc_option_editor.cc:2490 rc_option_editor.cc:2499 rc_option_editor.cc:2507 +#: rc_option_editor.cc:2515 rc_option_editor.cc:2523 rc_option_editor.cc:2532 +#: rc_option_editor.cc:2541 rc_option_editor.cc:2550 rc_option_editor.cc:2558 +#: rc_option_editor.cc:2566 rc_option_editor.cc:2574 rc_option_editor.cc:2597 msgid "MIDI" msgstr "MIDI" @@ -552,8 +552,8 @@ msgstr "" "ЕÑли вы не ÑобираетеÑÑŒ иÑпользовать такие плагины, иÑпользуйте обычные " "звуковые и MIDI-дорожки." -#: add_route_dialog.cc:327 add_route_dialog.cc:346 editor_actions.cc:420 -#: editor_rulers.cc:251 time_axis_view.cc:1374 +#: add_route_dialog.cc:327 add_route_dialog.cc:346 editor_actions.cc:431 +#: editor_rulers.cc:251 time_axis_view.cc:1385 msgid "Normal" msgstr "Обычный" @@ -565,7 +565,7 @@ msgstr "БеÑÑлойный" msgid "Tape" msgstr "Плёночный" -#: add_route_dialog.cc:431 monitor_section.cc:290 +#: add_route_dialog.cc:431 monitor_section.cc:296 msgid "Mono" msgstr "Моно" @@ -597,7 +597,7 @@ msgstr "8 каналов" msgid "12 Channel" msgstr "3 канала" -#: add_route_dialog.cc:483 mixer_strip.cc:1855 mixer_strip.cc:2263 +#: add_route_dialog.cc:483 mixer_strip.cc:1885 mixer_strip.cc:2293 msgid "Custom" msgstr "Ðа заказ" @@ -671,7 +671,7 @@ msgstr "Ðормировать значениÑ" msgid "FFT analysis window" msgstr "Спектральный анализ" -#: analysis_window.cc:60 editor.cc:1823 +#: analysis_window.cc:60 editor.cc:1831 msgid "Spectral Analysis" msgstr "Спектральный анализ" @@ -679,8 +679,8 @@ msgstr "Спектральный анализ" msgid "Track" msgstr "Дорожка" -#: analysis_window.cc:68 editor_actions.cc:646 mixer_ui.cc:131 -#: mixer_ui.cc:1854 +#: analysis_window.cc:68 editor_actions.cc:657 mixer_ui.cc:131 +#: mixer_ui.cc:1859 msgid "Show" msgstr "Показать" @@ -688,15 +688,15 @@ msgstr "Показать" msgid "Re-analyze data" msgstr "Повторно проанализировать данные" -#: ardour_button.cc:1116 +#: ardour_button.cc:820 msgid "button cannot watch state of non-existing Controllable\n" msgstr "Кнопка не может видеть ÑоÑтоÑние неÑущеÑтвующего управлÑемого\n" -#: ardour_button.cc:1384 +#: ardour_button.cc:1088 msgid "ABCDEFGHIJLKMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" msgstr "ABCDEFGHIJLKMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" -#: ardour_ui.cc:164 +#: ardour_ui.cc:168 msgid "" "%1 %2.x has discovered configuration files from %1 %3.x.\n" "\n" @@ -710,82 +710,82 @@ msgstr "" "\n" "(%1 придётÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿ÑƒÑтить.)\n" -#: ardour_ui.cc:216 editor_actions.cc:640 region_editor.cc:51 +#: ardour_ui.cc:211 editor_actions.cc:651 region_editor.cc:51 msgid "Audition" msgstr "Контроль" -#: ardour_ui.cc:217 editor_actions.cc:136 mixer_strip.cc:2035 -#: monitor_section.cc:357 rc_option_editor.cc:1951 route_time_axis.cc:252 -#: route_time_axis.cc:2707 +#: ardour_ui.cc:212 editor_actions.cc:136 mixer_strip.cc:2065 +#: monitor_section.cc:376 rc_option_editor.cc:2339 route_time_axis.cc:253 +#: route_time_axis.cc:2734 msgid "Solo" msgstr "Соло" -#: ardour_ui.cc:218 rc_option_editor.cc:741 +#: ardour_ui.cc:213 rc_option_editor.cc:1118 msgid "Feedback" msgstr "Отклик" -#: ardour_ui.cc:224 speaker_dialog.cc:36 +#: ardour_ui.cc:223 speaker_dialog.cc:36 msgid "Speaker Configuration" msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð³Ñ€Ð¾Ð¼ÐºÐ¾Ð³Ð¾Ð²Ð¾Ñ€Ð¸Ñ‚ÐµÐ»ÐµÐ¹" -#: ardour_ui.cc:225 keyeditor.cc:53 +#: ardour_ui.cc:224 keyeditor.cc:53 msgid "Key Bindings" msgstr "Клавиатурные комбинации" -#: ardour_ui.cc:226 +#: ardour_ui.cc:225 msgid "Preferences" msgstr "Параметры" -#: ardour_ui.cc:227 ardour_ui.cc:234 +#: ardour_ui.cc:226 ardour_ui.cc:233 msgid "Add Tracks/Busses" msgstr "Добавить дорожки/шины" -#: ardour_ui.cc:228 +#: ardour_ui.cc:227 msgid "About" msgstr "О программе" -#: ardour_ui.cc:229 location_ui.cc:1141 session_option_editor.cc:189 +#: ardour_ui.cc:228 location_ui.cc:1141 session_option_editor.cc:189 #: session_option_editor.cc:195 session_option_editor.cc:202 msgid "Locations" msgstr "Позиции" -#: ardour_ui.cc:230 route_params_ui.cc:59 route_params_ui.cc:630 +#: ardour_ui.cc:229 route_params_ui.cc:59 route_params_ui.cc:630 msgid "Tracks and Busses" msgstr "Дорожки и шины" -#: ardour_ui.cc:231 engine_dialog.cc:71 +#: ardour_ui.cc:230 engine_dialog.cc:71 msgid "Audio/MIDI Setup" msgstr "ÐаÑтройка звука и MIDI" -#: ardour_ui.cc:232 +#: ardour_ui.cc:231 msgid "Video Export Dialog" msgstr "Диалог ÑкÑпорта видео" -#: ardour_ui.cc:233 +#: ardour_ui.cc:232 msgid "Properties" msgstr "СвойÑтва" -#: ardour_ui.cc:235 bundle_manager.cc:264 +#: ardour_ui.cc:234 bundle_manager.cc:264 msgid "Bundle Manager" msgstr "Управление пакетами" -#: ardour_ui.cc:236 big_clock_window.cc:37 +#: ardour_ui.cc:235 big_clock_window.cc:37 msgid "Big Clock" msgstr "Большой Ñчётчик" -#: ardour_ui.cc:237 +#: ardour_ui.cc:236 msgid "Audio Connections" msgstr "Звуковые ÑоединениÑ" -#: ardour_ui.cc:238 +#: ardour_ui.cc:237 msgid "MIDI Connections" msgstr "Ð¡Ð¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ MIDI" -#: ardour_ui.cc:247 +#: ardour_ui.cc:251 msgid "Your configuration files were copied. You can now restart %1." msgstr "Ваши файлы Ñ Ð½Ð°Ñтройками Ñкопированы. Можно перезапуÑтить %1." -#: ardour_ui.cc:486 +#: ardour_ui.cc:472 msgid "" "The audio backend was shutdown because:\n" "\n" @@ -795,7 +795,7 @@ msgstr "" "\n" "%1" -#: ardour_ui.cc:488 +#: ardour_ui.cc:474 msgid "" "The audio backend has either been shutdown or it\n" "disconnected %1 because %1\n" @@ -807,7 +807,7 @@ msgstr "" "работал недоÑтаточно быÑтро. Попробуйте Ñнова\n" "запуÑтить подÑиÑтему и Ñохранить ÑеÑÑию." -#: ardour_ui.cc:512 +#: ardour_ui.cc:498 msgid "" "Audio Unit Plugin Scan Failed. Automatic AU scanning has been disabled. " "Please see the log window for further details." @@ -815,39 +815,39 @@ msgstr "" "Ðе удалоÑÑŒ проÑканировать плагины Audio Unit. ÐвтоматичеÑкое Ñканирование AU " "выключено. ПодробноÑти указаны в окне журнала." -#: ardour_ui.cc:513 +#: ardour_ui.cc:499 msgid "Audio Unit Plugin Scan Failed:" msgstr "Ðе удалоÑÑŒ проÑканировать плагины Audio Unit:" -#: ardour_ui.cc:833 +#: ardour_ui.cc:828 msgid "NSM server did not announce itself" msgstr "Сервер NSM не объÑвлÑл о Ñебе" -#: ardour_ui.cc:846 +#: ardour_ui.cc:841 msgid "NSM: no client ID provided" msgstr "NSM: не предоÑтавлен ни один ID-клиент" -#: ardour_ui.cc:853 +#: ardour_ui.cc:848 msgid "NSM: no session created" msgstr "NSM: нет Ñозданной ÑеÑÑии" -#: ardour_ui.cc:876 +#: ardour_ui.cc:871 msgid "NSM: initialization failed" msgstr "NSM: Ñбой инициализации" -#: ardour_ui.cc:906 +#: ardour_ui.cc:901 msgid "Free/Demo Version Warning" msgstr "Предупреждение демоверÑии" -#: ardour_ui.cc:908 +#: ardour_ui.cc:903 msgid "Subscribe and support development of %1" msgstr "ПодпиÑатьÑÑ Ð¸ поддержать разработку %1" -#: ardour_ui.cc:909 +#: ardour_ui.cc:904 msgid "Don't warn me about this again" msgstr "Больше не предупреждать" -#: ardour_ui.cc:911 +#: ardour_ui.cc:906 msgid "" "<span weight=\"bold\" size=\"large\">%1</span>\n" "\n" @@ -865,15 +865,15 @@ msgstr "" "\n" "%4" -#: ardour_ui.cc:912 +#: ardour_ui.cc:907 msgid "This is a free/demo version of %1" msgstr "Ðто демонÑÑ‚Ñ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ %1" -#: ardour_ui.cc:913 +#: ardour_ui.cc:908 msgid "It will not restore OR save any plugin settings" msgstr "Она не ÑохранÑет и не воÑÑтанавливает параметры плагинов." -#: ardour_ui.cc:914 +#: ardour_ui.cc:909 msgid "" "If you load an existing session with plugin settings\n" "they will not be used and will be lost." @@ -881,7 +881,7 @@ msgstr "" "ЕÑли вы загрузите ÑущеÑтвующую ÑеÑÑию, вÑе ÑобÑтвенные \n" "параметры плагинов будут Ñброшены и потерÑны при Ñохранении." -#: ardour_ui.cc:916 plugin_ui.cc:569 +#: ardour_ui.cc:911 plugin_ui.cc:579 msgid "" "To get full access to updates without this limitation\n" "consider becoming a subscriber for a low cost every month." @@ -889,19 +889,19 @@ msgstr "" "Чтобы получить полный доÑтуп к обновлениÑм без ограничений,\n" "необходима ежемеÑÑÑ‡Ð½Ð°Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñка по низкой цене." -#: ardour_ui.cc:926 +#: ardour_ui.cc:921 msgid "Quit now" msgstr "Выйти" -#: ardour_ui.cc:927 +#: ardour_ui.cc:922 msgid "Continue using %1" msgstr "Продолжить работу" -#: ardour_ui.cc:960 startup.cc:345 +#: ardour_ui.cc:955 startup.cc:345 msgid "%1 is ready for use" msgstr "%1 готов к работе" -#: ardour_ui.cc:1002 +#: ardour_ui.cc:997 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" @@ -916,23 +916,23 @@ msgstr "" "Ð’Ñ‹ можете узнать уÑтановленный предел при помощи команды 'ulimit -l'. Обычно " "Ñто контролируетÑÑ Ð² %2." -#: ardour_ui.cc:1019 +#: ardour_ui.cc:1014 msgid "Do not show this window again" msgstr "Больше не показывать Ñто окно" -#: ardour_ui.cc:1063 +#: ardour_ui.cc:1058 msgid "Don't quit" msgstr "Ðе выходить" -#: ardour_ui.cc:1064 +#: ardour_ui.cc:1059 msgid "Just quit" msgstr "ПроÑто выйти" -#: ardour_ui.cc:1065 ardour_ui.cc:4727 +#: ardour_ui.cc:1060 ardour_ui.cc:4845 msgid "Save and quit" msgstr "Сохранить и выйти" -#: ardour_ui.cc:1075 +#: ardour_ui.cc:1070 msgid "" "%1 was unable to save your session.\n" "\n" @@ -947,11 +947,11 @@ msgstr "" "\n" "«ПроÑто выйти»." -#: ardour_ui.cc:1125 +#: ardour_ui.cc:1120 msgid "Unsaved Session" msgstr "СеÑÑÐ¸Ñ Ð½Ðµ Ñохранена" -#: ardour_ui.cc:1146 +#: ardour_ui.cc:1141 msgid "" "The session \"%1\"\n" "has not been saved.\n" @@ -969,7 +969,7 @@ msgstr "" "\n" "Что вы хотите Ñделать?" -#: ardour_ui.cc:1149 +#: ardour_ui.cc:1144 msgid "" "The snapshot \"%1\"\n" "has not been saved.\n" @@ -987,74 +987,93 @@ msgstr "" "\n" "Что вы хотите Ñделать?" -#: ardour_ui.cc:1163 +#: ardour_ui.cc:1158 msgid "Prompter" msgstr "Суфлер" -#: ardour_ui.cc:1275 ardour_ui.cc:1283 +#: ardour_ui.cc:1271 ardour_ui.cc:1279 msgid "Audio: <span foreground=\"red\">none</span>" msgstr "Звук: <span foreground=\"red\">нет</span>" -#: ardour_ui.cc:1287 +#: ardour_ui.cc:1283 #, c-format msgid "Audio: <span foreground=\"green\">%.1f kHz / %4.1f ms</span>" msgstr "Звук: <span foreground=\"green\">%.1f КГц / %4.1f мÑ</span>" -#: ardour_ui.cc:1291 +#: ardour_ui.cc:1287 #, c-format msgid "Audio: <span foreground=\"green\">%<PRId64> kHz / %4.1f ms</span>" msgstr "Звук: <span foreground=\"green\">%<PRId64> КГц / %4.1f мÑ</span>" -#: ardour_ui.cc:1309 export_video_dialog.cc:80 +#: ardour_ui.cc:1305 export_video_dialog.cc:76 msgid "File:" msgstr "Файл:" -#: ardour_ui.cc:1313 +#: ardour_ui.cc:1309 msgid "BWF" msgstr "BWF" -#: ardour_ui.cc:1316 +#: ardour_ui.cc:1312 msgid "WAV" msgstr "WAV" -#: ardour_ui.cc:1319 +#: ardour_ui.cc:1315 msgid "WAV64" msgstr "WAV64" -#: ardour_ui.cc:1322 session_option_editor.cc:185 +#: ardour_ui.cc:1318 session_option_editor.cc:185 msgid "CAF" msgstr "CAF" -#: ardour_ui.cc:1325 +#: ardour_ui.cc:1321 msgid "AIFF" msgstr "AIFF" -#: ardour_ui.cc:1328 +#: ardour_ui.cc:1324 msgid "iXML" msgstr "iXML" -#: ardour_ui.cc:1331 +#: ardour_ui.cc:1327 msgid "RF64" msgstr "RF64" -#: ardour_ui.cc:1339 +#: ardour_ui.cc:1335 msgid "32-float" msgstr "32-float" -#: ardour_ui.cc:1342 +#: ardour_ui.cc:1338 msgid "24-int" msgstr "24-int" -#: ardour_ui.cc:1345 +#: ardour_ui.cc:1341 msgid "16-int" msgstr "16-int" +#: ardour_ui.cc:1362 +#, c-format +msgid "X: <span foreground=\"%s\">>10K</span>" +msgstr "" + #: ardour_ui.cc:1364 #, c-format +msgid "X: <span foreground=\"%s\">%u</span>" +msgstr "" + +#: ardour_ui.cc:1367 +#, c-format +msgid "X: <span foreground=\"%s\">?</span>" +msgstr "" + +#: ardour_ui.cc:1370 +msgid "Audio dropouts. Shift+click to reset" +msgstr "" + +#: ardour_ui.cc:1383 +#, c-format msgid "DSP: <span foreground=\"%s\">%5.1f%%</span>" msgstr "ЦП: <span foreground=\"%s\">%5.1f%%</span>" -#: ardour_ui.cc:1383 +#: ardour_ui.cc:1402 #, c-format msgid "" "Buffers: <span foreground=\"green\">p:</span><span foreground=\"%s\">" @@ -1065,34 +1084,34 @@ msgstr "" "%%</span> <span foreground=\"green\">c:</span><span foreground=\"%s\">" "%<PRIu32>%%</span>" -#: ardour_ui.cc:1424 +#: ardour_ui.cc:1443 msgid "Disk: <span foreground=\"green\">Unknown</span>" msgstr "Ðа диÑке: <span foreground=\"green\">неизвеÑтно</span>" -#: ardour_ui.cc:1426 +#: ardour_ui.cc:1445 msgid "Disk: <span foreground=\"green\">24hrs+</span>" msgstr "Ðа диÑке: <span foreground=\"green\">24ч+</span>" -#: ardour_ui.cc:1444 +#: ardour_ui.cc:1463 msgid "Disk: <span foreground=\"green\">>24 hrs</span>" msgstr "Ðа диÑке: <span foreground=\"green\">>24ч</span>" -#: ardour_ui.cc:1455 +#: ardour_ui.cc:1474 #, c-format msgid "Disk: <span foreground=\"%s\">%02dh:%02dm:%02ds</span>" msgstr "Ðа диÑке: <span foreground=\"%s\">%02dч:%02dм:%02dÑ</span>" -#: ardour_ui.cc:1481 +#: ardour_ui.cc:1500 #, c-format msgid "Timecode|TC: <span foreground=\"%s\">%s</span>" msgstr "ТК: <span foreground=\"%s\">%s</span>" -#: ardour_ui.cc:1602 ardour_ui.cc:1611 session_dialog.cc:318 +#: ardour_ui.cc:1621 ardour_ui.cc:1630 session_dialog.cc:318 #: session_dialog.cc:323 msgid "Recent Sessions" msgstr "Ðедавние ÑеÑÑии" -#: ardour_ui.cc:1690 +#: ardour_ui.cc:1709 msgid "" "%1 is not connected to any audio backend.\n" "You cannot open or close sessions in this condition" @@ -1100,27 +1119,27 @@ msgstr "" "%1 не Ñоединен Ñ ÐºÐ°ÐºÐ¾Ð¹-либо звуковой подÑиÑтемой.\n" "Открытие и закрытие ÑеÑÑий невозможно." -#: ardour_ui.cc:1714 +#: ardour_ui.cc:1733 msgid "Open Session" msgstr "Открыть ÑеÑÑию" -#: ardour_ui.cc:1739 session_dialog.cc:349 session_import_dialog.cc:170 +#: ardour_ui.cc:1758 session_dialog.cc:349 session_import_dialog.cc:170 #: session_metadata_dialog.cc:858 msgid "%1 sessions" msgstr "CеанÑÑ‹ %1" -#: ardour_ui.cc:1776 +#: ardour_ui.cc:1795 msgid "You cannot add a track without a session already loaded." msgstr "Ð’Ñ‹ не можете добавить дорожку без загруженной ÑеÑÑии." -#: ardour_ui.cc:1784 +#: ardour_ui.cc:1803 msgid "could not create %1 new mixed track" msgid_plural "could not create %1 new mixed tracks" msgstr[0] "Ðе удалоÑÑŒ Ñоздать %1 новую Ñмешанную дорожку" msgstr[1] "Ðе удалоÑÑŒ Ñоздать %1 новых Ñмешанных дорожки" msgstr[2] "Ðе удалоÑÑŒ Ñоздать %1 новых Ñмешанных дорожек" -#: ardour_ui.cc:1790 ardour_ui.cc:1851 +#: ardour_ui.cc:1809 ardour_ui.cc:1870 msgid "" "There are insufficient ports available\n" "to create a new track or bus.\n" @@ -1131,25 +1150,25 @@ msgstr "" "Вам необходимо Ñохранить %1 и \n" "перезапуÑтить программу Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ количеÑтвом портов." -#: ardour_ui.cc:1825 +#: ardour_ui.cc:1844 msgid "You cannot add a track or bus without a session already loaded." msgstr "Ð’Ñ‹ не можете добавить дорожку или шину без открытой ÑеÑÑии." -#: ardour_ui.cc:1834 +#: ardour_ui.cc:1853 msgid "could not create %1 new audio track" msgid_plural "could not create %1 new audio tracks" msgstr[0] "Ðе удалоÑÑŒ Ñоздать %1 новую звуковую дорожку" msgstr[1] "Ðе удалоÑÑŒ Ñоздать %2 новых звуковых дорожки" msgstr[2] "Ðе удалоÑÑŒ Ñоздать %2 новых звуковых дорожек" -#: ardour_ui.cc:1843 +#: ardour_ui.cc:1862 msgid "could not create %1 new audio bus" msgid_plural "could not create %1 new audio busses" msgstr[0] "Ðе удалоÑÑŒ Ñоздать %1 новую звуковую шину" msgstr[1] "Ðе удалоÑÑŒ Ñоздать %1 новых звуковых шины" msgstr[2] "Ðе удалоÑÑŒ Ñоздать %1 новых звуковых шин" -#: ardour_ui.cc:1996 +#: ardour_ui.cc:2015 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." @@ -1158,23 +1177,36 @@ msgstr "" "как пытатьÑÑ Ñ‡Ñ‚Ð¾-либо запиÑать.\n" "ИÑпользуйте меню «СеÑÑÐ¸Ñ > Добавить дорожку/шину»." -#: ardour_ui.cc:2382 +#: ardour_ui.cc:2393 +#, c-format +msgid "Copied %<PRId64> of %<PRId64>" +msgstr "Скопировано %<PRId64> из %<PRId64>" + +#: ardour_ui.cc:2447 save_as_dialog.cc:33 +msgid "Save As" +msgstr "Сохранить как" + +#: ardour_ui.cc:2475 +msgid "Save As failed: %1" +msgstr "Ðе удалоÑÑŒ Ñохранить под другим именем: %1" + +#: ardour_ui.cc:2497 msgid "Save as..." msgstr "Сохранить как..." -#: ardour_ui.cc:2383 ardour_ui.cc:2462 +#: ardour_ui.cc:2498 ardour_ui.cc:2577 msgid "New session name" msgstr "Ðовое название ÑеÑÑии" -#: ardour_ui.cc:2385 +#: ardour_ui.cc:2500 msgid "Take Snapshot" msgstr "Создать Ñнимок" -#: ardour_ui.cc:2386 +#: ardour_ui.cc:2501 msgid "Name of new snapshot" msgstr "Ðазвание нового Ñнимка" -#: ardour_ui.cc:2411 +#: ardour_ui.cc:2526 msgid "" "To ensure compatibility with various systems\n" "snapshot names may not contain a '%1' character" @@ -1182,23 +1214,23 @@ msgstr "" "Ð”Ð»Ñ Ð¾Ð±ÐµÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ ÑовмеÑтимоÑти Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ ÑиÑтемами\n" "Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñнимков не могут Ñодержать Ñимвол '%1'." -#: ardour_ui.cc:2423 +#: ardour_ui.cc:2538 msgid "Confirm Snapshot Overwrite" msgstr "Подтвердите перезапиÑÑŒ Ñнимка" -#: ardour_ui.cc:2424 +#: ardour_ui.cc:2539 msgid "A snapshot already exists with that name. Do you want to overwrite it?" msgstr "Снимок Ñ Ñ‚Ð°ÐºÐ¸Ð¼ названием уже еÑÑ‚ÑŒ. ПерезапиÑать его?" -#: ardour_ui.cc:2427 utils_videotl.cc:74 +#: ardour_ui.cc:2542 utils_videotl.cc:74 msgid "Overwrite" msgstr "ПерезапиÑать" -#: ardour_ui.cc:2461 +#: ardour_ui.cc:2576 msgid "Rename Session" msgstr "Переименовать ÑеÑÑию" -#: ardour_ui.cc:2476 ardour_ui.cc:2890 ardour_ui.cc:2928 +#: ardour_ui.cc:2591 ardour_ui.cc:3005 ardour_ui.cc:3043 msgid "" "To ensure compatibility with various systems\n" "session names may not contain a '%1' character" @@ -1206,12 +1238,12 @@ msgstr "" "Ð”Ð»Ñ Ð¾Ð±ÐµÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ ÑовмеÑтимоÑти Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ ÑиÑтемами\n" "Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ ÑеÑÑий не могут Ñодержать Ñимвол '%1'." -#: ardour_ui.cc:2484 +#: ardour_ui.cc:2599 msgid "" "That name is already in use by another directory/folder. Please try again." msgstr "Папка Ñ Ñ‚Ð°ÐºÐ¸Ð¼ названием уже еÑÑ‚ÑŒ. Укажите другое." -#: ardour_ui.cc:2493 +#: ardour_ui.cc:2608 msgid "" "Renaming this session failed.\n" "Things could be seriously messed up at this point" @@ -1219,19 +1251,19 @@ msgstr "" "Ðе удалоÑÑŒ переименовать Ñту ÑеÑÑию.\n" "Ð’ÑÑ‘ может быть очень, очень плохо." -#: ardour_ui.cc:2608 +#: ardour_ui.cc:2723 msgid "Save Template" msgstr "Сохранить шаблон" -#: ardour_ui.cc:2609 +#: ardour_ui.cc:2724 msgid "Name for template:" msgstr "Ðазвание шаблона:" -#: ardour_ui.cc:2610 +#: ardour_ui.cc:2725 msgid "-template" msgstr "-шаблон" -#: ardour_ui.cc:2647 +#: ardour_ui.cc:2762 msgid "" "This session\n" "%1\n" @@ -1241,35 +1273,35 @@ msgstr "" "%1\n" "уже ÑущеÑтвует. Открыть её?" -#: ardour_ui.cc:2657 +#: ardour_ui.cc:2772 msgid "Open Existing Session" msgstr "Открыть ÑущеÑтвующую ÑеÑÑÑŽ" -#: ardour_ui.cc:2918 +#: ardour_ui.cc:3033 msgid "There is no existing session at \"%1\"" msgstr "По адреÑу \"%1\" не ÑущеÑтвующей ÑеÑÑии" -#: ardour_ui.cc:3010 +#: ardour_ui.cc:3125 msgid "Please wait while %1 loads your session" msgstr "ДождитеÑÑŒ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ ÑеÑÑии в %1" -#: ardour_ui.cc:3025 +#: ardour_ui.cc:3140 msgid "Port Registration Error" msgstr "Ошибка региÑтрации порта" -#: ardour_ui.cc:3026 +#: ardour_ui.cc:3141 msgid "Click the Close button to try again." msgstr "Щелкните кнопку «Закрыть» Ð´Ð»Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð° к предыдущему диалогу." -#: ardour_ui.cc:3047 +#: ardour_ui.cc:3162 msgid "Session \"%1 (snapshot %2)\" did not load successfully" msgstr "Ðе удалоÑÑŒ загрузить ÑеÑÑию \"%1 (Ñнимок %2)\"" -#: ardour_ui.cc:3053 +#: ardour_ui.cc:3168 msgid "Loading Error" msgstr "Ошибка при загрузке" -#: ardour_ui.cc:3072 +#: ardour_ui.cc:3187 msgid "" "This session has been opened in read-only mode.\n" "\n" @@ -1279,24 +1311,24 @@ msgstr "" "\n" "Ð’Ñ‹ не Ñможете запиÑывать или ÑохранÑÑ‚ÑŒ." -#: ardour_ui.cc:3077 +#: ardour_ui.cc:3192 msgid "Read-only Session" msgstr "СеÑÑÐ¸Ñ Ð² режиме чтениÑ" -#: ardour_ui.cc:3143 +#: ardour_ui.cc:3258 msgid "Could not create session in \"%1\"" msgstr "Ðе удалоÑÑŒ Ñоздать ÑеÑÑию «%1»" -#: ardour_ui.cc:3292 +#: ardour_ui.cc:3407 msgid "No files were ready for clean-up" msgstr "Ðет готовых к удалению звуковых файлов" -#: ardour_ui.cc:3296 ardour_ui.cc:3306 ardour_ui.cc:3439 ardour_ui.cc:3446 +#: ardour_ui.cc:3411 ardour_ui.cc:3421 ardour_ui.cc:3554 ardour_ui.cc:3561 #: ardour_ui_ed.cc:103 msgid "Clean-up" msgstr "ОчиÑтить" -#: ardour_ui.cc:3297 +#: ardour_ui.cc:3412 msgid "" "If this seems suprising, \n" "check for any existing snapshots.\n" @@ -1308,19 +1340,19 @@ msgstr "" "Они могут включать облаÑти, которым\n" "нужны неиÑпользуемые файлы." -#: ardour_ui.cc:3356 +#: ardour_ui.cc:3471 msgid "kilo" msgstr "Кило" -#: ardour_ui.cc:3359 +#: ardour_ui.cc:3474 msgid "mega" msgstr "Мега" -#: ardour_ui.cc:3362 +#: ardour_ui.cc:3477 msgid "giga" msgstr "Гига" -#: ardour_ui.cc:3367 +#: ardour_ui.cc:3482 msgid "" "The following file was deleted from %2,\n" "releasing %3 %4bytes of disk space" @@ -1340,7 +1372,7 @@ msgstr[2] "" "оÑвободив при Ñтом %3 %4байт\n" "диÑкового проÑтранÑтва." -#: ardour_ui.cc:3374 +#: ardour_ui.cc:3489 msgid "" "The following file was not in use and \n" "has been moved to: %2\n" @@ -1387,11 +1419,11 @@ msgstr[2] "" "\n" "дополнительно оÑвободит %3 %4байт диÑкового проÑтранÑтва.\n" -#: ardour_ui.cc:3434 +#: ardour_ui.cc:3549 msgid "Are you sure you want to clean-up?" msgstr "Ð’Ñ‹ уверены, что хотите выполнить очиÑтку?" -#: ardour_ui.cc:3441 +#: ardour_ui.cc:3556 msgid "" "Clean-up is a destructive operation.\n" "ALL undo/redo information will be lost if you clean-up.\n" @@ -1402,39 +1434,39 @@ msgstr "" "неиÑпользуемые звуковые файлы\n" "будут перемещены в «мертвую» зону." -#: ardour_ui.cc:3449 +#: ardour_ui.cc:3564 msgid "CleanupDialog" msgstr "ОчиÑтка" -#: ardour_ui.cc:3479 +#: ardour_ui.cc:3594 msgid "Cleaned Files" msgstr "Очищенные файлы" -#: ardour_ui.cc:3496 +#: ardour_ui.cc:3611 msgid "deleted file" msgstr "Удалён файл" -#: ardour_ui.cc:3634 +#: ardour_ui.cc:3749 msgid "Video-Server was not launched by %1. The request to stop it is ignored." msgstr "ВидеоÑервер не был запущен %1. Ð—Ð°Ð¿Ñ€Ð¾Ñ ÐµÐ³Ð¾ оÑтановки игнорируетÑÑ." -#: ardour_ui.cc:3638 +#: ardour_ui.cc:3753 msgid "Stop Video-Server" msgstr "ОÑтановить видеоÑервер" -#: ardour_ui.cc:3639 +#: ardour_ui.cc:3754 msgid "Do you really want to stop the Video Server?" msgstr "Ð’Ñ‹ дейÑтвительно хотите оÑтановить видеоÑервер?" -#: ardour_ui.cc:3642 +#: ardour_ui.cc:3757 msgid "Yes, Stop It" msgstr "Да, оÑтановить" -#: ardour_ui.cc:3668 +#: ardour_ui.cc:3783 msgid "The Video Server is already started." msgstr "ВидеоÑервер уже запущен." -#: ardour_ui.cc:3670 +#: ardour_ui.cc:3785 msgid "" "An external Video Server is configured and can be reached. Not starting a " "new instance." @@ -1442,7 +1474,7 @@ msgstr "" "Внешний видеоÑервер наÑтроен и может быть доÑтупен, не Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ð½Ð¾Ð²Ñ‹Ð¹ " "ÑкземплÑÑ€." -#: ardour_ui.cc:3678 ardour_ui.cc:3783 +#: ardour_ui.cc:3793 ardour_ui.cc:3898 msgid "" "Could not connect to the Video Server. Start it or configure its access URL " "in Preferences." @@ -1450,35 +1482,39 @@ msgstr "" "Ðе удалоÑÑŒ ÑоединитьÑÑ Ñ Ð²Ð¸Ð´ÐµÐ¾Ñервером. ЗапуÑтите его, либо укажите URL " "доÑтупа к нему в диалоге параметров программы." -#: ardour_ui.cc:3708 +#: ardour_ui.cc:3823 msgid "Specified docroot is not an existing directory." msgstr "Указан DOC-корень не ÑущеÑтвующего каталога." -#: ardour_ui.cc:3714 ardour_ui.cc:3720 +#: ardour_ui.cc:3829 ardour_ui.cc:3835 msgid "Given Video Server is not an executable file." msgstr "Данный видеоÑервер не ÑвлÑетÑÑ Ð¸ÑполнÑемым файлом." -#: ardour_ui.cc:3754 +#: ardour_ui.cc:3869 msgid "Cannot launch the video-server" msgstr "Ðе удалоÑÑŒ запуÑтить видеоÑервер" -#: ardour_ui.cc:3764 +#: ardour_ui.cc:3879 msgid "Video-server was started but does not respond to requests..." msgstr "ВидеоÑервер запущен, но не откликаетÑÑ." -#: ardour_ui.cc:3809 editor_audio_import.cc:641 +#: ardour_ui.cc:3924 editor_audio_import.cc:641 msgid "could not open %1" msgstr "Ðе удалоÑÑŒ открыть %1" -#: ardour_ui.cc:3813 +#: ardour_ui.cc:3928 msgid "no video-file selected" msgstr "Ðе выбран видеофайл" -#: ardour_ui.cc:4011 +#: ardour_ui.cc:4120 +msgid "xrun" +msgstr "" + +#: ardour_ui.cc:4129 msgid "Recording was stopped because your system could not keep up." msgstr "ЗапиÑÑŒ оÑтановлена из-за недоÑтаточного быÑтродейÑÑ‚Ð²Ð¸Ñ ÑиÑтемы" -#: ardour_ui.cc:4040 +#: ardour_ui.cc:4158 msgid "" "The disk system on your computer\n" "was not able to keep up with %1.\n" @@ -1492,23 +1528,23 @@ msgstr "" "Ð’ чаÑтноÑти ей не удалоÑÑŒ запиÑать данные на диÑк\n" "доÑтаточно быÑтро Ð´Ð»Ñ Ñ„Ð¸ÐºÑации захваченных данных.\n" -#: ardour_ui.cc:4110 +#: ardour_ui.cc:4228 msgid "Scanning for plugins" msgstr "Сканирование плагинов" -#: ardour_ui.cc:4112 +#: ardour_ui.cc:4230 msgid "Cancel plugin scan" msgstr "Отменить Ñканирование плагинов" -#: ardour_ui.cc:4121 +#: ardour_ui.cc:4239 msgid "Stop Timeout" msgstr "Тайм-аут оÑтановки" -#: ardour_ui.cc:4128 +#: ardour_ui.cc:4246 msgid "Scan Timeout" msgstr "Тайм-аут ÑканированиÑ" -#: ardour_ui.cc:4171 +#: ardour_ui.cc:4289 msgid "" "The disk system on your computer\n" "was not able to keep up with %1.\n" @@ -1522,11 +1558,11 @@ msgstr "" "Ð’ чаÑтноÑти ей не удалоÑÑŒ прочитать данные\n" "Ñ Ð´Ð¸Ñка доÑтаточно быÑтро Ð´Ð»Ñ Ð²Ð¾ÑпроизведениÑ.\n" -#: ardour_ui.cc:4211 +#: ardour_ui.cc:4329 msgid "Crash Recovery" msgstr "ВоÑÑтановление данных" -#: ardour_ui.cc:4212 +#: ardour_ui.cc:4330 msgid "" "This session appears to have been in the\n" "middle of recording when %1 or\n" @@ -1542,19 +1578,19 @@ msgstr "" "%1 может воÑÑтановить запиÑанные данные,\n" "либо проигнорировать их. Примите решение.\n" -#: ardour_ui.cc:4224 +#: ardour_ui.cc:4342 msgid "Ignore crash data" msgstr "Проигнорировать" -#: ardour_ui.cc:4225 +#: ardour_ui.cc:4343 msgid "Recover from crash" msgstr "ВоÑÑтановить данные" -#: ardour_ui.cc:4245 +#: ardour_ui.cc:4363 msgid "Sample Rate Mismatch" msgstr "ÐеÑовпадение чаÑтот ÑÑмплированиÑ" -#: ardour_ui.cc:4246 +#: ardour_ui.cc:4364 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" @@ -1566,23 +1602,23 @@ msgstr "" "ЕÑли вы загрузите Ñту ÑеÑÑию, звуковые данные могут быть\n" "воÑпроизведены Ñ Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ð¹ чаÑтотой ÑÑмплированиÑ.\n" -#: ardour_ui.cc:4255 +#: ardour_ui.cc:4373 msgid "Do not load session" msgstr "Ðе загружать ÑеÑÑию" -#: ardour_ui.cc:4256 +#: ardour_ui.cc:4374 msgid "Load session anyway" msgstr "Ð’Ñе равно загрузить" -#: ardour_ui.cc:4283 +#: ardour_ui.cc:4401 msgid "Could not disconnect from Audio/MIDI engine" msgstr "Ðе удалоÑÑŒ отÑоединитьÑÑ Ð¾Ñ‚ аудио/MIDI-подÑиÑтемы." -#: ardour_ui.cc:4300 ardour_ui.cc:4303 +#: ardour_ui.cc:4418 ardour_ui.cc:4421 msgid "Could not reconnect to the Audio/MIDI engine" msgstr "Ðе удалоÑÑŒ повторно ÑоединитьÑÑ Ñ Ð°ÑƒÐ´Ð¸Ð¾/MIDI-подÑиÑтемой." -#: ardour_ui.cc:4587 +#: ardour_ui.cc:4705 msgid "" "%4This is a session from an older version of %3%5\n" "\n" @@ -1608,38 +1644,38 @@ msgstr "" "\n" "Отныне, иÑпользуйте 2-Ñ… верÑии Ñо Ñтарыми ÑеÑÑиÑми %3" -#: ardour_ui.cc:4696 +#: ardour_ui.cc:4814 msgid "This is a free/demo copy of %1. It has just switched to silent mode." msgstr "" "ДемонÑÑ‚Ñ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ %1 только что переключилаÑÑŒ в беззвучный режим." -#: ardour_ui.cc:4702 +#: ardour_ui.cc:4820 msgid "%1 is now silent" msgstr "%1 переключилÑÑ Ð² беззвучный режим" -#: ardour_ui.cc:4704 +#: ardour_ui.cc:4822 msgid "" "Please consider paying for a copy of %1 - you can pay whatever you want." msgstr "" "Возможно, вы хотите заплатить за копию %1 — цену вы можете уÑтановить Ñами." -#: ardour_ui.cc:4705 +#: ardour_ui.cc:4823 msgid "Better yet become a subscriber - subscriptions start at US$1 per month." msgstr "Ð’Ñ‹ также можете выбрать подпиÑку (от US$1 в меÑÑц)." -#: ardour_ui.cc:4706 +#: ardour_ui.cc:4824 msgid "Pay for a copy (via the web)" msgstr "Заплатить один раз" -#: ardour_ui.cc:4707 +#: ardour_ui.cc:4825 msgid "Become a subscriber (via the web)" msgstr "Стать подпиÑчиком" -#: ardour_ui.cc:4726 +#: ardour_ui.cc:4844 msgid "Remain silent" msgstr "ОÑтавить беззвучным" -#: ardour_ui.cc:4728 +#: ardour_ui.cc:4846 msgid "Give me more time" msgstr "Дайте ещё поработать" @@ -1707,7 +1743,7 @@ msgstr "Будьте разумны наÑчёт входного монитор msgid "Enable/Disable audio click" msgstr "Включить или выключить метроном" -#: ardour_ui2.cc:140 monitor_section.cc:111 +#: ardour_ui2.cc:140 monitor_section.cc:117 msgid "" "When active, something is soloed.\n" "Click to de-solo everything" @@ -1773,24 +1809,24 @@ msgstr "[ПРЕДУПРЕЖДЕÐИЕ]:" msgid "[INFO]: " msgstr "[СПРÐВКÐ]:" -#: ardour_ui2.cc:253 ardour_ui_ed.cc:403 +#: ardour_ui2.cc:255 ardour_ui_ed.cc:407 msgid "Auto Return" msgstr "Ðвтовозврат" -#: ardour_ui2.cc:255 ardour_ui_ed.cc:406 +#: ardour_ui2.cc:257 ardour_ui_ed.cc:410 msgid "Follow Edits" msgstr "Следовать правкам" -#: ardour_ui2.cc:728 rc_option_editor.cc:2292 +#: ardour_ui2.cc:716 rc_option_editor.cc:2692 msgid "GUI" msgstr "ИнтерфейÑ" -#: ardour_ui2.cc:745 rc_option_editor.cc:1309 rc_option_editor.cc:1327 -#: rc_option_editor.cc:1330 rc_option_editor.cc:1332 rc_option_editor.cc:1334 -#: rc_option_editor.cc:1342 rc_option_editor.cc:1350 rc_option_editor.cc:1352 -#: rc_option_editor.cc:1360 rc_option_editor.cc:1367 rc_option_editor.cc:1376 -#: rc_option_editor.cc:1378 rc_option_editor.cc:1380 rc_option_editor.cc:1388 -#: rc_option_editor.cc:1390 rc_option_editor.cc:1399 +#: ardour_ui2.cc:733 rc_option_editor.cc:1686 rc_option_editor.cc:1704 +#: rc_option_editor.cc:1707 rc_option_editor.cc:1709 rc_option_editor.cc:1711 +#: rc_option_editor.cc:1719 rc_option_editor.cc:1727 rc_option_editor.cc:1729 +#: rc_option_editor.cc:1737 rc_option_editor.cc:1744 rc_option_editor.cc:1753 +#: rc_option_editor.cc:1755 rc_option_editor.cc:1757 rc_option_editor.cc:1765 +#: rc_option_editor.cc:1767 rc_option_editor.cc:1776 #: session_option_editor.cc:321 session_option_editor.cc:323 #: session_option_editor.cc:344 session_option_editor.cc:346 #: session_option_editor.cc:348 session_option_editor.cc:355 @@ -1863,15 +1899,15 @@ msgstr "Тип файла" msgid "Sample Format" msgstr "Формат ÑÑмпла" -#: ardour_ui_ed.cc:113 rc_option_editor.cc:2237 rc_option_editor.cc:2249 +#: ardour_ui_ed.cc:113 rc_option_editor.cc:2625 rc_option_editor.cc:2637 msgid "Control Surfaces" msgstr "УÑтройÑтва управлениÑ" -#: ardour_ui_ed.cc:114 rc_option_editor.cc:1913 rc_option_editor.cc:2256 +#: ardour_ui_ed.cc:114 rc_option_editor.cc:2301 rc_option_editor.cc:2644 msgid "Plugins" msgstr "Плагины" -#: ardour_ui_ed.cc:115 rc_option_editor.cc:2343 +#: ardour_ui_ed.cc:115 rc_option_editor.cc:2759 msgid "Metering" msgstr "Индикаторы" @@ -1887,7 +1923,7 @@ msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ¸" msgid "Denormal Handling" msgstr "Обработка отклонений" -#: ardour_ui_ed.cc:122 route_time_axis.cc:1673 +#: ardour_ui_ed.cc:122 route_time_axis.cc:1684 msgid "New..." msgstr "Создать..." @@ -1920,284 +1956,288 @@ msgid "Export To Video File" msgstr "Видеофайл" #: ardour_ui_ed.cc:144 -msgid "Snapshot..." -msgstr "Создать Ñнимок..." +msgid "Snapshot (& keep working on current version) ..." +msgstr "Сделать Ñнимок и работать Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ верÑией..." #: ardour_ui_ed.cc:148 +msgid "Snapshot (& switch to new version) ..." +msgstr "Сделать Ñнимок и перейти к новой верÑии..." + +#: ardour_ui_ed.cc:152 msgid "Save As..." msgstr "Сохранить как..." -#: ardour_ui_ed.cc:152 editor_actions.cc:1769 editor_markers.cc:903 -#: editor_snapshots.cc:124 mixer_strip.cc:1521 route_time_axis.cc:1669 +#: ardour_ui_ed.cc:156 editor_actions.cc:1780 editor_markers.cc:896 +#: editor_snapshots.cc:124 mixer_strip.cc:1551 route_time_axis.cc:1680 msgid "Rename..." msgstr "Переименовать..." -#: ardour_ui_ed.cc:156 +#: ardour_ui_ed.cc:160 msgid "Save Template..." msgstr "Сохранить шаблон..." -#: ardour_ui_ed.cc:159 +#: ardour_ui_ed.cc:163 msgid "Metadata" msgstr "Метаданные" -#: ardour_ui_ed.cc:162 +#: ardour_ui_ed.cc:166 msgid "Edit Metadata..." msgstr "Изменить метаданные..." -#: ardour_ui_ed.cc:165 +#: ardour_ui_ed.cc:169 msgid "Import Metadata..." msgstr "Импортировать метаданные..." -#: ardour_ui_ed.cc:168 +#: ardour_ui_ed.cc:172 msgid "Export To Audio File(s)..." msgstr "Ð’ звуковые файлы..." -#: ardour_ui_ed.cc:171 +#: ardour_ui_ed.cc:175 msgid "Stem export..." msgstr "Каждую дорожку в Ñвой файл..." -#: ardour_ui_ed.cc:174 editor_export_audio.cc:65 -#: export_channel_selector.cc:182 export_channel_selector.cc:564 -#: export_dialog.cc:129 export_video_dialog.cc:84 +#: ardour_ui_ed.cc:178 editor_export_audio.cc:65 +#: export_channel_selector.cc:182 export_channel_selector.cc:570 +#: export_dialog.cc:129 export_video_dialog.cc:80 msgid "Export" msgstr "ÐкÑпортировать" -#: ardour_ui_ed.cc:177 +#: ardour_ui_ed.cc:181 msgid "Clean-up Unused Sources..." msgstr "ОчиÑтить неиÑпользуемые иÑточники..." -#: ardour_ui_ed.cc:181 +#: ardour_ui_ed.cc:185 msgid "Flush Wastebasket" msgstr "ОчиÑтить корзину" -#: ardour_ui_ed.cc:188 +#: ardour_ui_ed.cc:192 msgid "Quit" msgstr "Выход" -#: ardour_ui_ed.cc:192 +#: ardour_ui_ed.cc:196 msgid "Maximise Editor Space" msgstr "Редактор на полный Ñкран" -#: ardour_ui_ed.cc:193 +#: ardour_ui_ed.cc:197 msgid "Maximise Mixer Space" msgstr "Развернуть окно микшера" -#: ardour_ui_ed.cc:194 +#: ardour_ui_ed.cc:198 msgid "Show Toolbars" msgstr "Показывать панели" -#: ardour_ui_ed.cc:198 +#: ardour_ui_ed.cc:202 msgid "Show more UI preferences" msgstr "Показать больше предуÑтановок UI" -#: ardour_ui_ed.cc:200 mixer_ui.cc:1925 mixer_ui.cc:1931 +#: ardour_ui_ed.cc:204 mixer_ui.cc:1930 mixer_ui.cc:1936 msgid "Window|Mixer" msgstr "Микшер" -#: ardour_ui_ed.cc:201 +#: ardour_ui_ed.cc:205 msgid "Toggle Editor+Mixer" msgstr "Редактор или микшер на переднем плане" -#: ardour_ui_ed.cc:202 meterbridge.cc:218 meterbridge.cc:224 +#: ardour_ui_ed.cc:206 meterbridge.cc:217 meterbridge.cc:223 msgid "Window|Meterbridge" msgstr "Панель индикаторов" -#: ardour_ui_ed.cc:204 +#: ardour_ui_ed.cc:208 msgid "Reattach All Tearoffs" msgstr "Заново прикрепить разрывы" -#: ardour_ui_ed.cc:206 midi_tracer.cc:45 +#: ardour_ui_ed.cc:210 midi_tracer.cc:45 msgid "MIDI Tracer" msgstr "Журнал MIDI-Ñобытий" -#: ardour_ui_ed.cc:208 +#: ardour_ui_ed.cc:212 msgid "Chat" msgstr "ПообщатьÑÑ" -#: ardour_ui_ed.cc:210 +#: ardour_ui_ed.cc:214 msgid "Help|Manual" msgstr "Справка" -#: ardour_ui_ed.cc:211 +#: ardour_ui_ed.cc:215 msgid "Reference" msgstr "Справка в Интернете" -#: ardour_ui_ed.cc:212 +#: ardour_ui_ed.cc:216 msgid "Report A Bug" msgstr "Сообщить об ошибке" -#: ardour_ui_ed.cc:213 +#: ardour_ui_ed.cc:217 msgid "Cheat Sheet" msgstr "Шпаргалка" -#: ardour_ui_ed.cc:214 +#: ardour_ui_ed.cc:218 msgid "Ardour Website" msgstr "Сайт Ardour" -#: ardour_ui_ed.cc:215 +#: ardour_ui_ed.cc:219 msgid "Ardour Development" msgstr "Разработка Ardour" -#: ardour_ui_ed.cc:216 +#: ardour_ui_ed.cc:220 msgid "User Forums" msgstr "Форумы Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹" -#: ardour_ui_ed.cc:217 +#: ardour_ui_ed.cc:221 msgid "How to report a bug" msgstr "Как Ñообщить об ошибке" -#: ardour_ui_ed.cc:219 plugin_ui.cc:419 +#: ardour_ui_ed.cc:223 plugin_ui.cc:419 msgid "Save" msgstr "Сохранить" -#: ardour_ui_ed.cc:227 rc_option_editor.cc:1419 rc_option_editor.cc:1430 -#: rc_option_editor.cc:1441 rc_option_editor.cc:1450 rc_option_editor.cc:1463 -#: rc_option_editor.cc:1476 rc_option_editor.cc:1485 rc_option_editor.cc:1495 -#: rc_option_editor.cc:1497 rc_option_editor.cc:1506 rc_option_editor.cc:1522 -#: rc_option_editor.cc:1543 rc_option_editor.cc:1561 rc_option_editor.cc:1563 -#: rc_option_editor.cc:1579 rc_option_editor.cc:1582 rc_option_editor.cc:1584 -#: rc_option_editor.cc:1601 rc_option_editor.cc:1612 +#: ardour_ui_ed.cc:231 rc_option_editor.cc:1796 rc_option_editor.cc:1807 +#: rc_option_editor.cc:1818 rc_option_editor.cc:1827 rc_option_editor.cc:1840 +#: rc_option_editor.cc:1853 rc_option_editor.cc:1862 rc_option_editor.cc:1872 +#: rc_option_editor.cc:1874 rc_option_editor.cc:1883 rc_option_editor.cc:1899 +#: rc_option_editor.cc:1920 rc_option_editor.cc:1938 rc_option_editor.cc:1940 +#: rc_option_editor.cc:1956 rc_option_editor.cc:1959 rc_option_editor.cc:1961 +#: rc_option_editor.cc:1978 rc_option_editor.cc:1989 msgid "Transport" msgstr "ТранÑпорт" -#: ardour_ui_ed.cc:233 +#: ardour_ui_ed.cc:237 msgid "Stop" msgstr "Стоп" -#: ardour_ui_ed.cc:236 +#: ardour_ui_ed.cc:240 msgid "Roll" msgstr "Перевернуть" -#: ardour_ui_ed.cc:240 ardour_ui_ed.cc:243 +#: ardour_ui_ed.cc:244 ardour_ui_ed.cc:247 msgid "Start/Stop" msgstr "Старт/Стоп" -#: ardour_ui_ed.cc:246 +#: ardour_ui_ed.cc:250 msgid "Start/Continue/Stop" msgstr "Старт/Продолжить/Стоп" -#: ardour_ui_ed.cc:249 +#: ardour_ui_ed.cc:253 msgid "Stop and Forget Capture" msgstr "ОÑтановитьÑÑ Ð¸ забыть захват" -#: ardour_ui_ed.cc:259 +#: ardour_ui_ed.cc:263 msgid "Transition To Roll" msgstr "Ð’ обычном направлении" -#: ardour_ui_ed.cc:263 +#: ardour_ui_ed.cc:267 msgid "Transition To Reverse" msgstr "Ð’ обратном направлении" -#: ardour_ui_ed.cc:267 +#: ardour_ui_ed.cc:271 msgid "Play Loop Range" msgstr "ВоÑпроизвеÑти петлю" -#: ardour_ui_ed.cc:270 +#: ardour_ui_ed.cc:274 msgid "Play Selection" msgstr "ВоÑпроизводить выделение" -#: ardour_ui_ed.cc:273 +#: ardour_ui_ed.cc:277 msgid "Play Selection w/Preroll" msgstr "Играть выбранный w/Preroll" -#: ardour_ui_ed.cc:277 +#: ardour_ui_ed.cc:281 msgid "Enable Record" msgstr "Разрешить запиÑÑŒ" -#: ardour_ui_ed.cc:280 ardour_ui_ed.cc:284 +#: ardour_ui_ed.cc:284 ardour_ui_ed.cc:288 msgid "Start Recording" msgstr "Ðачать запиÑÑŒ" -#: ardour_ui_ed.cc:288 +#: ardour_ui_ed.cc:292 msgid "Rewind" msgstr "Перемотать назад" -#: ardour_ui_ed.cc:291 +#: ardour_ui_ed.cc:295 msgid "Rewind (Slow)" msgstr "Перемотать назад (медленно)" -#: ardour_ui_ed.cc:294 +#: ardour_ui_ed.cc:298 msgid "Rewind (Fast)" msgstr "Перемотать назад (быÑтро)" -#: ardour_ui_ed.cc:297 +#: ardour_ui_ed.cc:301 msgid "Forward" msgstr "Перемотать вперёд" -#: ardour_ui_ed.cc:300 +#: ardour_ui_ed.cc:304 msgid "Forward (Slow)" msgstr "Перемотать вперёд (медленно)" -#: ardour_ui_ed.cc:303 +#: ardour_ui_ed.cc:307 msgid "Forward (Fast)" msgstr "Перемотать вперёд (быÑтро)" -#: ardour_ui_ed.cc:306 +#: ardour_ui_ed.cc:310 msgid "Go to Zero" msgstr "К нулевой отметке" -#: ardour_ui_ed.cc:309 ardour_ui_ed.cc:312 +#: ardour_ui_ed.cc:313 ardour_ui_ed.cc:316 msgid "Go to Start" msgstr "К началу" -#: ardour_ui_ed.cc:315 +#: ardour_ui_ed.cc:319 msgid "Go to End" msgstr "Ð’ конец" -#: ardour_ui_ed.cc:318 +#: ardour_ui_ed.cc:322 msgid "Go to Wall Clock" msgstr "К текущему времени" -#: ardour_ui_ed.cc:323 ardour_ui_ed.cc:326 +#: ardour_ui_ed.cc:327 ardour_ui_ed.cc:330 msgid "Numpad Decimal" msgstr "ДеÑÑтичный разделитель на цифровой клавиатуре" -#: ardour_ui_ed.cc:329 +#: ardour_ui_ed.cc:333 msgid "Numpad 0" msgstr "Numpad 0" -#: ardour_ui_ed.cc:332 +#: ardour_ui_ed.cc:336 msgid "Numpad 1" msgstr "Numpad 1" -#: ardour_ui_ed.cc:335 +#: ardour_ui_ed.cc:339 msgid "Numpad 2" msgstr "Numpad 2" -#: ardour_ui_ed.cc:338 +#: ardour_ui_ed.cc:342 msgid "Numpad 3" msgstr "Numpad 3" -#: ardour_ui_ed.cc:341 +#: ardour_ui_ed.cc:345 msgid "Numpad 4" msgstr "Numpad 3" -#: ardour_ui_ed.cc:344 +#: ardour_ui_ed.cc:348 msgid "Numpad 5" msgstr "Numpad 5" -#: ardour_ui_ed.cc:347 +#: ardour_ui_ed.cc:351 msgid "Numpad 6" msgstr "Numpad 6" -#: ardour_ui_ed.cc:350 +#: ardour_ui_ed.cc:354 msgid "Numpad 7" msgstr "Numpad 7" -#: ardour_ui_ed.cc:353 +#: ardour_ui_ed.cc:357 msgid "Numpad 8" msgstr "Numpad 8" -#: ardour_ui_ed.cc:356 +#: ardour_ui_ed.cc:360 msgid "Numpad 9" msgstr "Numpad 9" -#: ardour_ui_ed.cc:360 +#: ardour_ui_ed.cc:364 msgid "Focus On Clock" msgstr "Изменить Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ" -#: ardour_ui_ed.cc:364 ardour_ui_ed.cc:373 audio_clock.cc:2109 editor.cc:258 -#: editor_actions.cc:567 editor_actions.cc:576 export_timespan_selector.cc:88 +#: ardour_ui_ed.cc:368 ardour_ui_ed.cc:377 audio_clock.cc:2114 editor.cc:258 +#: editor_actions.cc:578 editor_actions.cc:587 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 #: session_option_editor.cc:109 session_option_editor.cc:122 @@ -2205,121 +2245,129 @@ msgstr "Изменить Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ" msgid "Timecode" msgstr "Тайм-код" -#: ardour_ui_ed.cc:366 ardour_ui_ed.cc:375 editor_actions.cc:565 +#: ardour_ui_ed.cc:370 ardour_ui_ed.cc:379 editor_actions.cc:576 msgid "Bars & Beats" msgstr "Такты и доли" -#: ardour_ui_ed.cc:368 ardour_ui_ed.cc:377 +#: ardour_ui_ed.cc:372 ardour_ui_ed.cc:381 msgid "Minutes & Seconds" msgstr "Минуты и Ñекунды" -#: ardour_ui_ed.cc:370 ardour_ui_ed.cc:379 audio_clock.cc:2113 editor.cc:259 -#: editor_actions.cc:566 +#: ardour_ui_ed.cc:374 ardour_ui_ed.cc:383 audio_clock.cc:2118 editor.cc:259 +#: editor_actions.cc:577 msgid "Samples" msgstr "СÑмплы" -#: ardour_ui_ed.cc:382 +#: ardour_ui_ed.cc:386 msgid "Punch In" msgstr "Ðачало врезки" -#: ardour_ui_ed.cc:383 mixer_strip.cc:1838 mixer_strip.cc:2026 route_ui.cc:165 +#: ardour_ui_ed.cc:387 mixer_strip.cc:1868 mixer_strip.cc:2056 route_ui.cc:164 #: time_info_box.cc:116 msgid "In" msgstr "Вход" -#: ardour_ui_ed.cc:386 +#: ardour_ui_ed.cc:390 msgid "Punch Out" msgstr "Конец врезки" -#: ardour_ui_ed.cc:387 mixer_strip.cc:1850 time_info_box.cc:117 +#: ardour_ui_ed.cc:391 mixer_strip.cc:1880 time_info_box.cc:117 msgid "Out" msgstr "Выход" -#: ardour_ui_ed.cc:390 +#: ardour_ui_ed.cc:394 msgid "Punch In/Out" msgstr "Врезка" -#: ardour_ui_ed.cc:391 +#: ardour_ui_ed.cc:395 msgid "In/Out" msgstr "Ð’Ñ…/Ð’Ñ‹Ñ…" -#: ardour_ui_ed.cc:394 rc_option_editor.cc:1376 +#: ardour_ui_ed.cc:398 rc_option_editor.cc:1753 msgid "Click" msgstr "Метроном" -#: ardour_ui_ed.cc:397 +#: ardour_ui_ed.cc:401 msgid "Auto Input" msgstr "Ðвтовход" -#: ardour_ui_ed.cc:400 +#: ardour_ui_ed.cc:404 msgid "Auto Play" msgstr "ÐвтовоÑпр." -#: ardour_ui_ed.cc:411 +#: ardour_ui_ed.cc:415 msgid "Sync Startup to Video" msgstr "Синхронизировать начало Ñ Ð²Ð¸Ð´ÐµÐ¾" -#: ardour_ui_ed.cc:413 +#: ardour_ui_ed.cc:417 msgid "Time Master" msgstr "Ведущий времени" -#: ardour_ui_ed.cc:420 +#: ardour_ui_ed.cc:419 +msgid "Use External Positional Sync Source" +msgstr "" + +#: ardour_ui_ed.cc:424 msgid "Toggle Record Enable Track %1" msgstr "Переключить запиÑываемоÑÑ‚ÑŒ дорожки %1" -#: ardour_ui_ed.cc:427 +#: ardour_ui_ed.cc:431 msgid "Percentage" msgstr "Проценты" -#: ardour_ui_ed.cc:428 shuttle_control.cc:178 +#: ardour_ui_ed.cc:432 shuttle_control.cc:178 msgid "Semitones" msgstr "Полутона" -#: ardour_ui_ed.cc:432 +#: ardour_ui_ed.cc:436 msgid "Send MTC" msgstr "Передавать MTC" -#: ardour_ui_ed.cc:434 +#: ardour_ui_ed.cc:438 msgid "Send MMC" msgstr "Передавать MMC" -#: ardour_ui_ed.cc:436 +#: ardour_ui_ed.cc:440 msgid "Use MMC" msgstr "ИÑпользовать MMC" -#: ardour_ui_ed.cc:438 rc_option_editor.cc:2089 +#: ardour_ui_ed.cc:442 rc_option_editor.cc:2477 msgid "Send MIDI Clock" msgstr "ОтправлÑÑ‚ÑŒ MIDI Clock" -#: ardour_ui_ed.cc:440 +#: ardour_ui_ed.cc:444 msgid "Send MIDI Feedback" msgstr "ОтправлÑÑ‚ÑŒ MIDI Feedback" -#: ardour_ui_ed.cc:446 +#: ardour_ui_ed.cc:450 msgid "Panic" msgstr "Паника" -#: ardour_ui_ed.cc:534 +#: ardour_ui_ed.cc:541 msgid "Wall Clock" msgstr "Текущее времÑ" -#: ardour_ui_ed.cc:536 +#: ardour_ui_ed.cc:543 msgid "Disk Space" msgstr "ДиÑк. проÑтранÑтво" -#: ardour_ui_ed.cc:537 +#: ardour_ui_ed.cc:544 msgid "DSP" msgstr "DSP" -#: ardour_ui_ed.cc:538 +#: ardour_ui_ed.cc:545 +msgid "X-run" +msgstr "" + +#: ardour_ui_ed.cc:546 msgid "Buffers" msgstr "Буферы" -#: ardour_ui_ed.cc:540 +#: ardour_ui_ed.cc:548 msgid "Timecode Format" msgstr "Формат тайм-кода" -#: ardour_ui_ed.cc:541 +#: ardour_ui_ed.cc:549 msgid "File Format" msgstr "Формат файлов" @@ -2335,69 +2383,69 @@ msgstr "" msgid "Internal" msgstr "Внутр. ÑинхронизациÑ" -#: ardour_ui_options.cc:498 +#: ardour_ui_options.cc:503 msgid "Enable/Disable external positional sync" msgstr "Включить или выключить внешнюю Ñинхронизацию позиционированиÑ" -#: ardour_ui_options.cc:500 +#: ardour_ui_options.cc:505 msgid "Sync to JACK is not possible: video pull up/down is set" msgstr "" "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ JACK не возможна: уÑтановлена раÑÑ‚Ñжка видео вверх/вниз" -#: audio_clock.cc:1047 audio_clock.cc:1066 +#: audio_clock.cc:1052 audio_clock.cc:1071 msgid "--pending--" msgstr "--в ожидании--" -#: audio_clock.cc:1118 +#: audio_clock.cc:1123 msgid "SR" msgstr "SR" -#: audio_clock.cc:1124 audio_clock.cc:1128 +#: audio_clock.cc:1129 audio_clock.cc:1133 msgid "Pull" msgstr "ПодтÑгивание" -#: audio_clock.cc:1126 +#: audio_clock.cc:1131 #, c-format msgid "%+.4f%%" msgstr "%+.4f%%" -#: audio_clock.cc:1282 editor.cc:260 editor_actions.cc:139 -#: editor_actions.cc:559 +#: audio_clock.cc:1287 editor.cc:260 editor_actions.cc:139 +#: editor_actions.cc:570 msgid "Tempo" msgstr "Темп" -#: audio_clock.cc:1286 editor.cc:261 editor_actions.cc:560 +#: audio_clock.cc:1291 editor.cc:261 editor_actions.cc:571 msgid "Meter" msgstr "Размер" -#: audio_clock.cc:1864 audio_streamview.cc:115 editor_actions.cc:1087 +#: audio_clock.cc:1869 audio_streamview.cc:115 editor_actions.cc:1098 #: session_metadata_dialog.cc:452 session_metadata_dialog.cc:500 #: session_metadata_dialog.cc:556 session_metadata_dialog.cc:845 #: streamview.cc:470 msgid "programming error: %1" msgstr "Ошибка в программе: %1" -#: audio_clock.cc:1997 audio_clock.cc:2025 +#: audio_clock.cc:2002 audio_clock.cc:2030 msgid "programming error: %1 %2" msgstr "Ошибка в программе: %1 %2" -#: audio_clock.cc:2111 editor.cc:257 export_timespan_selector.cc:98 +#: audio_clock.cc:2116 editor.cc:257 export_timespan_selector.cc:98 msgid "Bars:Beats" msgstr "Такты : Доли" -#: audio_clock.cc:2112 export_timespan_selector.cc:93 +#: audio_clock.cc:2117 export_timespan_selector.cc:93 msgid "Minutes:Seconds" msgstr "Минуты : Секунды" -#: audio_clock.cc:2117 +#: audio_clock.cc:2122 msgid "Set From Playhead" msgstr "По указателю воÑпроизведениÑ" -#: audio_clock.cc:2118 +#: audio_clock.cc:2123 msgid "Locate to This Time" msgstr "Перейти к Ñтой позиции" -#: audio_clock.cc:2121 +#: audio_clock.cc:2126 msgid "Copy to clipboard" msgstr "Скопировать в буфер обмена" @@ -2422,7 +2470,7 @@ msgstr "ÐŸÐ¸ÐºÐ¾Ð²Ð°Ñ Ð°Ð¼Ð¿Ð»Ð¸Ñ‚ÑƒÐ´Ð°:" msgid "Calculating..." msgstr "ПроизводитÑÑ Ð²Ñ‹Ñ‡Ð¸Ñление..." -#: audio_region_view.cc:1243 +#: audio_region_view.cc:1254 msgid "add gain control point" msgstr "Добавление точки ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ ÑƒÑилениÑ" @@ -2445,23 +2493,23 @@ msgstr[0] "Сделать равным %1 удару" msgstr[1] "Сделать равным %1 ударам" msgstr[2] "Сделать равным %1 ударам" -#: automation_line.cc:286 automation_line.cc:462 +#: automation_line.cc:287 automation_line.cc:469 msgid "automation event move" msgstr "Смещение ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ð·Ð°Ñ†Ð¸Ð¸" -#: automation_line.cc:488 automation_line.cc:508 +#: automation_line.cc:495 automation_line.cc:515 msgid "automation range move" msgstr "Смещение Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ð·Ð°Ñ†Ð¸Ð¸" -#: automation_line.cc:880 region_gain_line.cc:72 +#: automation_line.cc:887 region_gain_line.cc:75 msgid "remove control point" msgstr "Удаление контрольной точки" -#: automation_line.cc:1003 +#: automation_line.cc:1010 msgid "Ignoring illegal points on AutomationLine \"%1\"" msgstr "Игнорирование некорреткных точек на линии автоматизации \"%1\"" -#: automation_region_view.cc:190 automation_time_axis.cc:645 +#: automation_region_view.cc:190 automation_time_axis.cc:644 msgid "add automation event" msgstr "Ðовое Ñобытие автоматизации" @@ -2469,71 +2517,71 @@ msgstr "Ðовое Ñобытие автоматизации" msgid "unable to display automation region for control without list" msgstr "без ÑпиÑка невозможно показать облаÑÑ‚ÑŒ автоматизации Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ" -#: automation_time_axis.cc:164 +#: automation_time_axis.cc:163 msgid "automation state" msgstr "СоÑтоÑние автоматизации" -#: automation_time_axis.cc:165 +#: automation_time_axis.cc:164 msgid "hide track" msgstr "Скрыть дорожку" -#: automation_time_axis.cc:309 automation_time_axis.cc:361 -#: automation_time_axis.cc:555 gain_meter.cc:220 generic_pluginui.cc:523 -#: generic_pluginui.cc:817 panner_ui.cc:151 +#: automation_time_axis.cc:308 automation_time_axis.cc:360 +#: automation_time_axis.cc:554 gain_meter.cc:222 generic_pluginui.cc:524 +#: generic_pluginui.cc:818 panner_ui.cc:149 msgid "Automation|Manual" msgstr "Вручную" -#: automation_time_axis.cc:311 automation_time_axis.cc:372 -#: automation_time_axis.cc:560 editor.cc:1904 editor.cc:1981 -#: editor_actions.cc:122 editor_actions.cc:1918 gain_meter.cc:223 -#: generic_pluginui.cc:99 generic_pluginui.cc:526 generic_pluginui.cc:819 +#: automation_time_axis.cc:310 automation_time_axis.cc:371 +#: automation_time_axis.cc:559 editor.cc:1912 editor.cc:1990 +#: editor_actions.cc:122 editor_actions.cc:1929 gain_meter.cc:225 +#: generic_pluginui.cc:100 generic_pluginui.cc:527 generic_pluginui.cc:820 #: midi_time_axis.cc:1606 midi_time_axis.cc:1609 midi_time_axis.cc:1612 -#: panner_ui.cc:154 +#: panner_ui.cc:152 msgid "Play" msgstr "Проигрывание" -#: automation_time_axis.cc:313 automation_time_axis.cc:383 -#: automation_time_axis.cc:565 gain_meter.cc:226 generic_pluginui.cc:101 -#: generic_pluginui.cc:529 generic_pluginui.cc:821 panner_ui.cc:157 +#: automation_time_axis.cc:312 automation_time_axis.cc:382 +#: automation_time_axis.cc:564 gain_meter.cc:228 generic_pluginui.cc:102 +#: generic_pluginui.cc:530 generic_pluginui.cc:822 panner_ui.cc:155 msgid "Write" msgstr "ЗапиÑÑŒ" -#: automation_time_axis.cc:315 automation_time_axis.cc:394 -#: automation_time_axis.cc:570 gain_meter.cc:229 generic_pluginui.cc:103 -#: generic_pluginui.cc:532 generic_pluginui.cc:823 panner_ui.cc:160 +#: automation_time_axis.cc:314 automation_time_axis.cc:393 +#: automation_time_axis.cc:569 gain_meter.cc:231 generic_pluginui.cc:104 +#: generic_pluginui.cc:533 generic_pluginui.cc:824 panner_ui.cc:158 msgid "Touch" msgstr "КаÑание" -#: automation_time_axis.cc:405 generic_pluginui.cc:535 meter_patterns.cc:112 +#: automation_time_axis.cc:404 generic_pluginui.cc:536 meter_patterns.cc:116 msgid "???" msgstr "???" -#: automation_time_axis.cc:446 +#: automation_time_axis.cc:445 msgid "clear automation" msgstr "ОчиÑтить автоматизацию" -#: automation_time_axis.cc:544 editor_actions.cc:643 editor_markers.cc:902 -#: location_ui.cc:57 plugin_selector.cc:86 route_time_axis.cc:854 +#: automation_time_axis.cc:543 editor_actions.cc:654 editor_markers.cc:895 +#: location_ui.cc:57 plugin_selector.cc:86 route_time_axis.cc:864 msgid "Hide" msgstr "Скрыть" -#: automation_time_axis.cc:546 +#: automation_time_axis.cc:545 msgid "Clear" msgstr "ОчиÑтить" -#: automation_time_axis.cc:577 +#: automation_time_axis.cc:576 msgid "State" msgstr "СоÑтоÑние" -#: automation_time_axis.cc:593 +#: automation_time_axis.cc:592 msgid "Discrete" msgstr "ДиÑкретный" -#: automation_time_axis.cc:599 export_format_dialog.cc:485 +#: automation_time_axis.cc:598 export_format_dialog.cc:489 msgid "Linear" msgstr "ЛинейнаÑ" -#: automation_time_axis.cc:605 rhythm_ferret.cc:109 shuttle_control.cc:197 +#: automation_time_axis.cc:604 rhythm_ferret.cc:109 shuttle_control.cc:197 msgid "Mode" msgstr "Режим" @@ -2549,30 +2597,31 @@ msgstr "Изменение пакета" msgid "Direction:" msgstr "Ðаправление:" -#: bundle_manager.cc:206 bundle_manager.cc:210 engine_dialog.cc:686 -#: mixer_strip.cc:164 mixer_strip.cc:369 mixer_strip.cc:2259 -#: rc_option_editor.cc:2318 +#: bundle_manager.cc:206 bundle_manager.cc:210 engine_dialog.cc:707 +#: mixer_strip.cc:165 mixer_strip.cc:379 mixer_strip.cc:2289 +#: rc_option_editor.cc:2734 msgid "Input" msgstr "Вход" #: bundle_manager.cc:207 bundle_manager.cc:212 bundle_manager.cc:246 -#: engine_dialog.cc:688 mixer_strip.cc:168 mixer_strip.cc:373 -#: mixer_strip.cc:2262 rc_option_editor.cc:2322 +#: engine_dialog.cc:709 mixer_strip.cc:169 mixer_strip.cc:383 +#: mixer_strip.cc:2292 monitor_section.cc:329 monitor_section.cc:333 +#: rc_option_editor.cc:2738 msgid "Output" msgstr "Выход" -#: bundle_manager.cc:265 editor.cc:1945 editor_actions.cc:94 -#: editor_actions.cc:104 rc_option_editor.cc:1087 rc_option_editor.cc:1094 +#: bundle_manager.cc:265 editor.cc:1954 editor_actions.cc:94 +#: editor_actions.cc:104 rc_option_editor.cc:1464 rc_option_editor.cc:1471 msgid "Edit" msgstr "Правка" -#: bundle_manager.cc:266 editor.cc:5902 editor.cc:5930 editor_actions.cc:338 -#: editor_actions.cc:339 plugin_ui.cc:420 processor_box.cc:2460 +#: bundle_manager.cc:266 editor.cc:5912 editor.cc:5940 editor_actions.cc:345 +#: editor_actions.cc:346 plugin_ui.cc:420 processor_box.cc:2466 msgid "Delete" msgstr "Удалить" #: bundle_manager.cc:272 bundle_manager.cc:439 editor_route_groups.cc:97 -#: editor_routes.cc:206 midi_list_editor.cc:107 session_metadata_dialog.cc:646 +#: editor_routes.cc:207 midi_list_editor.cc:107 session_metadata_dialog.cc:646 msgid "Name" msgstr "ИмÑ" @@ -2775,31 +2824,31 @@ msgstr "Синхр. облаÑтей" msgid "Region bounds" msgstr "Границы облаÑтей" -#: editor.cc:181 editor_actions.cc:508 +#: editor.cc:181 editor_actions.cc:519 msgid "No Grid" msgstr "Без Ñетки" -#: editor.cc:182 editor_actions.cc:509 +#: editor.cc:182 editor_actions.cc:520 msgid "Grid" msgstr "По Ñетке" -#: editor.cc:183 editor_actions.cc:510 +#: editor.cc:183 editor_actions.cc:521 msgid "Magnetic" msgstr "Магнит" -#: editor.cc:188 editor.cc:206 editor_actions.cc:121 editor_actions.cc:491 +#: editor.cc:188 editor.cc:206 editor_actions.cc:121 editor_actions.cc:502 msgid "Playhead" msgstr "Указатель воÑпроизведениÑ" -#: editor.cc:189 editor_actions.cc:493 +#: editor.cc:189 editor_actions.cc:504 msgid "Marker" msgstr "Маркер" -#: editor.cc:190 editor.cc:207 editor_actions.cc:492 +#: editor.cc:190 editor.cc:207 editor_actions.cc:503 msgid "Mouse" msgstr "Мышь" -#: editor.cc:195 editor_actions.cc:500 +#: editor.cc:195 editor_actions.cc:511 msgid "Slide" msgstr "Слайд" @@ -2807,11 +2856,11 @@ msgstr "Слайд" msgid "Splice" msgstr "Стыковка" -#: editor.cc:197 editor_actions.cc:499 +#: editor.cc:197 editor_actions.cc:510 msgid "Ripple" msgstr "Ð Ñбь" -#: editor.cc:198 editor_actions.cc:1787 editor_markers.cc:905 +#: editor.cc:198 editor_actions.cc:1798 editor_markers.cc:898 #: editor_rulers.cc:260 location_ui.cc:58 msgid "Lock" msgstr "Блок" @@ -2828,7 +2877,7 @@ msgstr "Вправо" msgid "Center" msgstr "По центру" -#: editor.cc:208 editor.cc:3231 +#: editor.cc:208 editor.cc:3244 msgid "Edit point" msgstr "КурÑор редактора" @@ -2876,7 +2925,7 @@ msgstr "Маркеры выделений" msgid "Loop/Punch Ranges" msgstr "Диапазоны петель/врезок" -#: editor.cc:265 editor_actions.cc:563 +#: editor.cc:265 editor_actions.cc:574 msgid "CD Markers" msgstr "Маркеры CD" @@ -2888,11 +2937,11 @@ msgstr "Видеолинейка" msgid "mode" msgstr "Режим" -#: editor.cc:459 editor_actions.cc:114 editor_actions.cc:562 +#: editor.cc:459 editor_actions.cc:114 editor_actions.cc:573 msgid "Markers" msgstr "Маркеры" -#: editor.cc:577 rc_option_editor.cc:1931 +#: editor.cc:577 rc_option_editor.cc:2319 msgid "Regions" msgstr "ОблаÑти" @@ -2912,41 +2961,41 @@ msgstr "Группы дорожек и шин" msgid "Ranges & Marks" msgstr "ОблаÑти и маркеры" -#: editor.cc:728 editor.cc:5754 rc_option_editor.cc:1619 -#: rc_option_editor.cc:1627 rc_option_editor.cc:1635 rc_option_editor.cc:1643 -#: rc_option_editor.cc:1667 rc_option_editor.cc:1679 rc_option_editor.cc:1681 -#: rc_option_editor.cc:1689 rc_option_editor.cc:1697 rc_option_editor.cc:1717 -#: rc_option_editor.cc:1729 rc_option_editor.cc:1731 rc_option_editor.cc:1733 -#: rc_option_editor.cc:1741 rc_option_editor.cc:1749 rc_option_editor.cc:1764 -#: rc_option_editor.cc:1768 rc_option_editor.cc:1792 +#: editor.cc:728 editor.cc:5764 rc_option_editor.cc:1996 +#: rc_option_editor.cc:2004 rc_option_editor.cc:2012 rc_option_editor.cc:2020 +#: rc_option_editor.cc:2044 rc_option_editor.cc:2056 rc_option_editor.cc:2067 +#: rc_option_editor.cc:2069 rc_option_editor.cc:2077 rc_option_editor.cc:2085 +#: rc_option_editor.cc:2105 rc_option_editor.cc:2117 rc_option_editor.cc:2119 +#: rc_option_editor.cc:2121 rc_option_editor.cc:2129 rc_option_editor.cc:2137 +#: rc_option_editor.cc:2152 rc_option_editor.cc:2156 rc_option_editor.cc:2180 msgid "Editor" msgstr "Редактор" -#: editor.cc:1331 editor.cc:4735 editor_actions.cc:134 editor_actions.cc:1863 +#: editor.cc:1331 editor.cc:4753 editor_actions.cc:134 editor_actions.cc:1874 msgid "Loop" msgstr "ПетлÑ" -#: editor.cc:1337 editor.cc:4762 editor_actions.cc:135 time_info_box.cc:68 +#: editor.cc:1337 editor.cc:4780 editor_actions.cc:135 time_info_box.cc:68 msgid "Punch" msgstr "Врезка" -#: editor.cc:1449 rc_option_editor.cc:1661 +#: editor.cc:1449 rc_option_editor.cc:2038 msgid "Linear (for highly correlated material)" msgstr "Линейно (Ð´Ð»Ñ Ñхожего материала)" -#: editor.cc:1459 rc_option_editor.cc:1662 +#: editor.cc:1459 rc_option_editor.cc:2039 msgid "Constant power" msgstr "С поÑтоÑнной Ñилой" -#: editor.cc:1468 rc_option_editor.cc:1663 +#: editor.cc:1468 rc_option_editor.cc:2040 msgid "Symmetric" msgstr "Симметрично" -#: editor.cc:1478 rc_option_editor.cc:1664 +#: editor.cc:1478 rc_option_editor.cc:2041 msgid "Slow" msgstr "Медленно" -#: editor.cc:1487 rc_option_editor.cc:1665 sfdb_ui.cc:1771 sfdb_ui.cc:1881 +#: editor.cc:1487 rc_option_editor.cc:2042 sfdb_ui.cc:1771 sfdb_ui.cc:1881 msgid "Fast" msgstr "БыÑтро" @@ -2958,7 +3007,7 @@ msgstr "Деактивировать" msgid "Activate" msgstr "Ðктивировать" -#: editor.cc:1637 editor.cc:1645 editor_ops.cc:3824 +#: editor.cc:1637 editor.cc:1645 editor_ops.cc:3872 msgid "Freeze" msgstr "Заморозить" @@ -2970,263 +3019,267 @@ msgstr "Разморозить" msgid "Selected Regions" msgstr "Выделенные облаÑти" -#: editor.cc:1816 editor_markers.cc:940 +#: editor.cc:1824 editor_markers.cc:933 msgid "Play Range" msgstr "ВоÑпроизвеÑти выделение" -#: editor.cc:1817 editor_markers.cc:943 +#: editor.cc:1825 editor_markers.cc:936 msgid "Loop Range" msgstr "Создать петлю из выделениÑ" -#: editor.cc:1820 editor_markers.cc:950 +#: editor.cc:1828 editor_markers.cc:943 msgid "Zoom to Range" msgstr "МаÑштабировать в выделение" -#: editor.cc:1829 editor_actions.cc:369 +#: editor.cc:1837 editor_actions.cc:376 msgid "Move Range Start to Previous Region Boundary" msgstr "ПеремеÑтить начало Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ðº границе предыдущей облаÑти" -#: editor.cc:1836 editor_actions.cc:376 +#: editor.cc:1844 editor_actions.cc:383 msgid "Move Range Start to Next Region Boundary" msgstr "ПеремеÑтить начало Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ðº границе Ñледующей облаÑти" -#: editor.cc:1843 editor_actions.cc:383 +#: editor.cc:1851 editor_actions.cc:390 msgid "Move Range End to Previous Region Boundary" msgstr "ПеремеÑтить конец Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ðº границе предыдущей облаÑти" -#: editor.cc:1850 editor_actions.cc:390 +#: editor.cc:1858 editor_actions.cc:397 msgid "Move Range End to Next Region Boundary" msgstr "ПеремеÑтить конец Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ðº границе Ñледующей облаÑти" -#: editor.cc:1856 editor_actions.cc:133 editor_actions.cc:325 +#: editor.cc:1864 editor_actions.cc:133 editor_actions.cc:332 msgid "Separate" msgstr "Разделить" -#: editor.cc:1857 +#: editor.cc:1865 msgid "Convert to Region in Region List" msgstr "Преобразовать в облаÑÑ‚ÑŒ в ÑпиÑке облаÑтей" -#: editor.cc:1860 editor_markers.cc:970 +#: editor.cc:1868 editor_markers.cc:963 msgid "Select All in Range" msgstr "Выбрать вÑÑ‘ в выделении" -#: editor.cc:1863 editor_actions.cc:297 +#: editor.cc:1871 editor_actions.cc:304 msgid "Set Loop from Selection" msgstr "Создать петлю из выделениÑ" -#: editor.cc:1864 editor_actions.cc:298 +#: editor.cc:1872 editor_actions.cc:305 msgid "Set Punch from Selection" msgstr "Создать врезку из выделениÑ" -#: editor.cc:1865 editor_actions.cc:299 +#: editor.cc:1873 editor_actions.cc:306 msgid "Set Session Start/End from Selection" msgstr "Задать начало и конец по выделению" -#: editor.cc:1868 +#: editor.cc:1876 msgid "Add Range Markers" msgstr "Добавить маркеры облаÑтей" -#: editor.cc:1871 +#: editor.cc:1879 msgid "Crop Region to Range" msgstr "Обрезать облаÑÑ‚ÑŒ по выделению" -#: editor.cc:1872 +#: editor.cc:1880 msgid "Fill Range with Region" msgstr "Заполнить диапазон облаÑтью" -#: editor.cc:1873 editor_actions.cc:311 +#: editor.cc:1881 editor_actions.cc:318 msgid "Duplicate Range" msgstr "Продублировать диапазон" -#: editor.cc:1876 +#: editor.cc:1884 msgid "Consolidate Range" msgstr "Объединить диапазон" -#: editor.cc:1877 +#: editor.cc:1885 msgid "Consolidate Range With Processing" msgstr "Объединить диапазон Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¾Ð¹" -#: editor.cc:1878 +#: editor.cc:1886 msgid "Bounce Range to Region List" msgstr "СвеÑти диапазон в ÑпиÑок облаÑтей" -#: editor.cc:1879 +#: editor.cc:1887 msgid "Bounce Range to Region List With Processing" msgstr "СвеÑти выделение в ÑпиÑок облаÑтей Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¾Ð¹" -#: editor.cc:1880 editor_markers.cc:953 +#: editor.cc:1888 editor_markers.cc:946 msgid "Export Range..." msgstr "ÐкÑпортировать выделение…" -#: editor.cc:1882 +#: editor.cc:1890 msgid "Export Video Range..." msgstr "ÐкÑпортировать фрагмент видео..." -#: editor.cc:1898 editor.cc:1979 editor_actions.cc:303 +#: editor.cc:1906 editor.cc:1988 editor_actions.cc:310 msgid "Play From Edit Point" msgstr "ВоÑпроизвеÑти от курÑора редактора" -#: editor.cc:1899 editor.cc:1980 +#: editor.cc:1907 editor.cc:1989 msgid "Play From Start" msgstr "ВоÑпроизвеÑти Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°" -#: editor.cc:1900 +#: editor.cc:1908 msgid "Play Region" msgstr "ВоÑпроизвеÑти облаÑÑ‚ÑŒ" -#: editor.cc:1902 +#: editor.cc:1910 msgid "Loop Region" msgstr "Создать петлю из облаÑти" -#: editor.cc:1912 editor.cc:1989 +#: editor.cc:1920 editor.cc:1998 msgid "Select All in Track" msgstr "Выделить вÑÑ‘ на дорожке" -#: editor.cc:1913 editor.cc:1990 editor_actions.cc:194 +#: editor.cc:1921 editor.cc:1999 editor_actions.cc:194 msgid "Select All Objects" msgstr "Выделить вÑе объекты" -#: editor.cc:1914 editor.cc:1991 +#: editor.cc:1922 editor.cc:2000 msgid "Invert Selection in Track" msgstr "Обратить выделение на дорожке" -#: editor.cc:1915 editor.cc:1992 editor_actions.cc:197 +#: editor.cc:1923 editor.cc:2001 editor_actions.cc:197 msgid "Invert Selection" msgstr "Обратить выделение" -#: editor.cc:1917 +#: editor.cc:1925 msgid "Set Range to Loop Range" msgstr "УÑтановить диапазон по диапазону петли" -#: editor.cc:1918 +#: editor.cc:1926 editor_actions.cc:200 msgid "Set Range to Punch Range" msgstr "УÑтановить диапазон по диапазону врезки" -#: editor.cc:1920 editor.cc:1994 editor_actions.cc:199 editor_actions.cc:200 +#: editor.cc:1927 editor_actions.cc:201 +msgid "Set Range to Selected Regions" +msgstr "" + +#: editor.cc:1929 editor.cc:2003 editor_actions.cc:203 editor_actions.cc:204 msgid "Select All After Edit Point" msgstr "Выделить вÑÑ‘ поÑле курÑора редактора" -#: editor.cc:1921 editor.cc:1995 editor_actions.cc:201 editor_actions.cc:202 +#: editor.cc:1930 editor.cc:2004 editor_actions.cc:205 editor_actions.cc:206 msgid "Select All Before Edit Point" msgstr "Выделить вÑÑ‘ до курÑора редактора" -#: editor.cc:1922 editor.cc:1996 +#: editor.cc:1931 editor.cc:2005 msgid "Select All After Playhead" msgstr "Выделить вÑÑ‘ поÑле указателÑ" -#: editor.cc:1923 editor.cc:1997 +#: editor.cc:1932 editor.cc:2006 msgid "Select All Before Playhead" msgstr "Выделить вÑÑ‘ до указателÑ" -#: editor.cc:1924 +#: editor.cc:1933 msgid "Select All Between Playhead and Edit Point" msgstr "Выделить вÑÑ‘ между указателем и курÑором редактора" -#: editor.cc:1925 +#: editor.cc:1934 msgid "Select All Within Playhead and Edit Point" msgstr "Выделить вÑÑ‘ между указателем и точкой редактированиÑ" -#: editor.cc:1926 +#: editor.cc:1935 msgid "Select Range Between Playhead and Edit Point" msgstr "Создать выделение между указателем и курÑором редактора" -#: editor.cc:1928 editor.cc:1999 editor_actions.cc:131 editor_actions.cc:132 +#: editor.cc:1937 editor.cc:2008 editor_actions.cc:131 editor_actions.cc:132 msgid "Select" msgstr "Выделить" -#: editor.cc:1936 editor.cc:2007 editor_actions.cc:337 processor_box.cc:2453 +#: editor.cc:1945 editor.cc:2016 editor_actions.cc:344 processor_box.cc:2459 msgid "Cut" msgstr "Вырезать" -#: editor.cc:1937 editor.cc:2008 editor_actions.cc:341 processor_box.cc:2456 +#: editor.cc:1946 editor.cc:2017 editor_actions.cc:348 processor_box.cc:2462 msgid "Copy" msgstr "Копировать" -#: editor.cc:1938 editor.cc:2009 editor_actions.cc:342 processor_box.cc:2464 +#: editor.cc:1947 editor.cc:2018 editor_actions.cc:349 processor_box.cc:2470 msgid "Paste" msgstr "Ð’Ñтавить" -#: editor.cc:1942 editor_actions.cc:91 +#: editor.cc:1951 editor_actions.cc:91 msgid "Align" msgstr "ВыровнÑÑ‚ÑŒ" -#: editor.cc:1943 +#: editor.cc:1952 msgid "Align Relative" msgstr "ВыровнÑÑ‚ÑŒ отноÑительно" -#: editor.cc:1950 +#: editor.cc:1959 msgid "Insert Selected Region" msgstr "Ð’Ñтавить выделенную облаÑÑ‚ÑŒ" -#: editor.cc:1951 +#: editor.cc:1960 msgid "Insert Existing Media" msgstr "Ð’Ñтавить ÑущеÑтвующие данные" -#: editor.cc:1960 editor.cc:2016 +#: editor.cc:1969 editor.cc:2025 msgid "Nudge Entire Track Later" msgstr "Толкнуть вÑÑŽ дорожку вперёд" -#: editor.cc:1961 editor.cc:2017 +#: editor.cc:1970 editor.cc:2026 msgid "Nudge Track After Edit Point Later" msgstr "Толкнуть дорожку вперёд поÑле курÑора редактора" -#: editor.cc:1962 editor.cc:2018 +#: editor.cc:1971 editor.cc:2027 msgid "Nudge Entire Track Earlier" msgstr "Толкнуть вÑÑŽ дорожку назад" -#: editor.cc:1963 editor.cc:2019 +#: editor.cc:1972 editor.cc:2028 msgid "Nudge Track After Edit Point Earlier" msgstr "Толкнуть дорожку назад поÑле курÑора редактора" -#: editor.cc:1965 editor.cc:2021 +#: editor.cc:1974 editor.cc:2030 msgid "Nudge" msgstr "Толкнуть" -#: editor.cc:2235 +#: editor.cc:2245 msgid "" "Playhead position stored with a negative value - ignored (use zero instead)" msgstr "" "ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ Ð²Ð¾ÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñохранена Ñ Ð½ÐµÐ³Ð°Ñ‚Ð¸Ð²Ð½Ñ‹Ð¼ значением и будет " "проигнорирована. ВмеÑто неё будет иÑпользовано начало ÑеанÑа." -#: editor.cc:3006 editor.cc:3707 editor.cc:3778 midi_channel_selector.cc:157 +#: editor.cc:3023 editor.cc:3720 editor.cc:3791 midi_channel_selector.cc:157 #: midi_channel_selector.cc:395 midi_channel_selector.cc:431 msgid "All" msgstr "Ð’Ñе" -#: editor.cc:3210 +#: editor.cc:3223 msgid "Smart Mode (add Range functions to Grab mode)" msgstr "УниверÑальный режим (захват + работа Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°Ð¼Ð¸)" -#: editor.cc:3211 +#: editor.cc:3224 msgid "Grab Mode (select/move objects)" msgstr "Захват (выделение и перемещение объектов)" -#: editor.cc:3212 +#: editor.cc:3225 msgid "Cut Mode (split regions)" msgstr "Ðарезка (разделение облаÑтей)" -#: editor.cc:3213 +#: editor.cc:3226 msgid "Range Mode (select time ranges)" msgstr "Диапазоны (выделение диапазонов времени)" -#: editor.cc:3214 +#: editor.cc:3227 msgid "Draw Mode (draw and edit gain/notes/automation)" msgstr "РиÑование (риÑование и правка уÑилениÑ, нот и автоматизации)" -#: editor.cc:3215 +#: editor.cc:3228 msgid "Stretch Mode (time-stretch audio and midi regions, preserving pitch)" msgstr "РаÑÑ‚Ñгивание (аудио и MIDI во времени Ñ Ñохранением выÑоты тона)" -#: editor.cc:3216 +#: editor.cc:3229 msgid "Audition Mode (listen to regions)" msgstr "ПроÑлушивание (облаÑтей)" -#: editor.cc:3217 -msgid "Internal Edit Mode (edit notes and gain curves inside regions)" -msgstr "Правка внутри облаÑтей (нот и кривых уÑилениÑ)" +#: editor.cc:3230 +msgid "Internal Edit Mode (edit notes and automation points)" +msgstr "Правка Ñодержимого облаÑтей (правка нот и точек автоматизации)" -#: editor.cc:3218 +#: editor.cc:3231 msgid "" "Groups: click to (de)activate\n" "Context-click for other operations" @@ -3234,59 +3287,59 @@ msgstr "" "Группы: щёлкните Ð´Ð»Ñ (де)активации\n" "Щелчок другой клавишей вызывает контекÑтное меню" -#: editor.cc:3219 +#: editor.cc:3232 msgid "Nudge Region/Selection Later" msgstr "Толкнуть облаÑÑ‚ÑŒ или выделение вперёд" -#: editor.cc:3220 +#: editor.cc:3233 msgid "Nudge Region/Selection Earlier" msgstr "Толкнуть облаÑÑ‚ÑŒ или выделение назад" -#: editor.cc:3221 editor_actions.cc:262 +#: editor.cc:3234 editor_actions.cc:269 msgid "Zoom In" msgstr "Увеличить" -#: editor.cc:3222 editor_actions.cc:261 +#: editor.cc:3235 editor_actions.cc:268 msgid "Zoom Out" msgstr "Уменьшить" -#: editor.cc:3223 +#: editor.cc:3236 msgid "Zoom to Time Scale" msgstr "Увеличить до шкалы времени" -#: editor.cc:3224 editor.cc:3729 editor_actions.cc:263 +#: editor.cc:3237 editor.cc:3742 editor_actions.cc:270 msgid "Zoom to Session" msgstr "Показать вÑÑ‘" -#: editor.cc:3225 +#: editor.cc:3238 msgid "Zoom focus" msgstr "Ð¤Ð¾ÐºÑƒÑ Ð¿Ñ€Ð¸ маÑштабировании" -#: editor.cc:3226 +#: editor.cc:3239 msgid "Expand Tracks" msgstr "Увеличить дорожки по выÑоте" -#: editor.cc:3227 +#: editor.cc:3240 msgid "Shrink Tracks" msgstr "Уменьшить дорожки по выÑоте" -#: editor.cc:3228 +#: editor.cc:3241 msgid "Number of visible tracks" msgstr "КоличеÑтво видимых дорожек" -#: editor.cc:3229 +#: editor.cc:3242 msgid "Snap/Grid Units" msgstr "Единица привÑзки/Ñетки" -#: editor.cc:3230 +#: editor.cc:3243 msgid "Snap/Grid Mode" msgstr "Режим привÑзки/Ñетки" -#: editor.cc:3232 +#: editor.cc:3245 msgid "Edit Mode" msgstr "Режим редактированиÑ" -#: editor.cc:3233 +#: editor.cc:3246 msgid "" "Nudge Clock\n" "(controls distance used to nudge regions and selections)" @@ -3294,124 +3347,124 @@ msgstr "" "Сдвиг чаÑов\n" "(раÑÑтоÑние, на которое подтолкнуть облаÑти и выделениÑ)" -#: editor.cc:3501 editor_actions.cc:313 +#: editor.cc:3514 editor_actions.cc:320 msgid "Command|Undo" msgstr "Отменить" -#: editor.cc:3503 +#: editor.cc:3516 msgid "Command|Undo (%1)" msgstr "Отменить (%1)" -#: editor.cc:3510 editor_actions.cc:315 editor_actions.cc:316 -#: editor_actions.cc:317 +#: editor.cc:3523 editor_actions.cc:322 editor_actions.cc:323 +#: editor_actions.cc:324 msgid "Redo" msgstr "Вернуть" -#: editor.cc:3512 +#: editor.cc:3525 msgid "Redo (%1)" msgstr "Вернуть (%1)" -#: editor.cc:3531 editor.cc:3555 editor_actions.cc:110 editor_actions.cc:1844 +#: editor.cc:3544 editor.cc:3568 editor_actions.cc:110 editor_actions.cc:1855 msgid "Duplicate" msgstr "Продублировать" -#: editor.cc:3532 +#: editor.cc:3545 msgid "Number of duplications:" msgstr "КоличеÑтво копий:" -#: editor.cc:3706 route_group_dialog.cc:51 time_info_box.cc:67 +#: editor.cc:3719 route_group_dialog.cc:51 time_info_box.cc:67 msgid "Selection" msgstr "Выделение" -#: editor.cc:3709 +#: editor.cc:3722 msgid "Fit 1 track" msgstr "УмеÑтить 1 дорожку" -#: editor.cc:3710 +#: editor.cc:3723 msgid "Fit 2 tracks" msgstr "УмеÑтить 2 дорожки" -#: editor.cc:3711 +#: editor.cc:3724 msgid "Fit 4 tracks" msgstr "УмеÑтить 4 дорожки" -#: editor.cc:3712 +#: editor.cc:3725 msgid "Fit 8 tracks" msgstr "УмеÑтить 8 дорожек" -#: editor.cc:3713 +#: editor.cc:3726 msgid "Fit 16 tracks" msgstr "УмеÑтить 16 дорожек" -#: editor.cc:3714 +#: editor.cc:3727 msgid "Fit 24 tracks" msgstr "УмеÑтить 24 дорожки" -#: editor.cc:3715 +#: editor.cc:3728 msgid "Fit 32 tracks" msgstr "УмеÑтить 32 дорожки" -#: editor.cc:3716 +#: editor.cc:3729 msgid "Fit 48 tracks" msgstr "УмеÑтить 48 дорожек" -#: editor.cc:3717 +#: editor.cc:3730 msgid "Fit All tracks" msgstr "УмеÑтить вÑе дорожки" -#: editor.cc:3718 +#: editor.cc:3731 msgid "Fit Selection" msgstr "УмеÑтить выделение" -#: editor.cc:3720 +#: editor.cc:3733 msgid "Zoom to 10 ms" msgstr "ОтмаÑштабировать до 10 мÑ" -#: editor.cc:3721 +#: editor.cc:3734 msgid "Zoom to 100 ms" msgstr "ОтмаÑштабировать до 100 мÑ" -#: editor.cc:3722 +#: editor.cc:3735 msgid "Zoom to 1 sec" msgstr "ОтмаÑштабировать до 1 Ñек" -#: editor.cc:3723 +#: editor.cc:3736 msgid "Zoom to 10 sec" msgstr "ОтмаÑштабировать до 10 Ñек" -#: editor.cc:3724 +#: editor.cc:3737 msgid "Zoom to 1 min" msgstr "ОтмаÑштабировать до 1 мин" -#: editor.cc:3725 +#: editor.cc:3738 msgid "Zoom to 10 min" msgstr "ОтмаÑштабировать до 10 мин" -#: editor.cc:3726 +#: editor.cc:3739 msgid "Zoom to 1 hour" msgstr "ОтмаÑштабировать до 1 чаÑа" -#: editor.cc:3727 +#: editor.cc:3740 msgid "Zoom to 8 hours" msgstr "ОтмаÑштабировать до 8 чаÑ" -#: editor.cc:3728 +#: editor.cc:3741 msgid "Zoom to 24 hours" msgstr "ОтмаÑштабировать до 24 чаÑ" -#: editor.cc:3730 +#: editor.cc:3743 msgid "Zoom to Range/Region Selection" msgstr "ОтмаÑштабировать до выбранного диапазона/облаÑти" -#: editor.cc:3800 +#: editor.cc:3813 msgid "*" msgstr "*" -#: editor.cc:4120 +#: editor.cc:4133 msgid "Playlist Deletion" msgstr "Удаление ÑпиÑка воÑпроизведениÑ" -#: editor.cc:4121 +#: editor.cc:4134 msgid "" "Playlist %1 is currently unused.\n" "If it is kept, its audio files will not be cleaned.\n" @@ -3421,54 +3474,54 @@ msgstr "" "ЕÑли его оÑтавить, ÑвÑзанные звуковые файлы не будут подчищены.\n" "ЕÑли его удалить, будут подчищены и ÑвÑзанные звуковые файлы." -#: editor.cc:4131 +#: editor.cc:4144 msgid "Delete Playlist" msgstr "Удалить ÑпиÑок" -#: editor.cc:4132 +#: editor.cc:4145 msgid "Keep Playlist" msgstr "Сохранить ÑпиÑок" -#: editor.cc:4133 editor_audio_import.cc:594 editor_ops.cc:6174 -#: engine_dialog.cc:2107 sfdb_freesound_mootcher.cc:69 processor_box.cc:2221 -#: processor_box.cc:2246 +#: editor.cc:4146 editor_audio_import.cc:594 editor_ops.cc:6222 +#: engine_dialog.cc:2427 sfdb_freesound_mootcher.cc:69 processor_box.cc:2227 +#: processor_box.cc:2252 msgid "Cancel" msgstr "Отмена" -#: editor.cc:4275 +#: editor.cc:4288 msgid "new playlists" msgstr "Создать ÑпиÑки воÑпроизведениÑ" -#: editor.cc:4291 +#: editor.cc:4304 msgid "copy playlists" msgstr "Скопировать ÑпиÑки воÑпроизведениÑ" -#: editor.cc:4306 +#: editor.cc:4319 msgid "clear playlists" msgstr "ОчиÑтить ÑпиÑки воÑпроизведениÑ" -#: editor.cc:5046 +#: editor.cc:5064 msgid "Please wait while %1 loads visual data." msgstr "ДождитеÑÑŒ загрузки визуальных данных в %1." -#: editor.cc:5901 editor.cc:5932 editor_markers.cc:985 panner_ui.cc:410 -#: processor_box.cc:2484 +#: editor.cc:5911 editor.cc:5942 editor_markers.cc:978 panner_ui.cc:410 +#: processor_box.cc:2490 msgid "Edit..." msgstr "Изменить" -#: editor.cc:5934 editor_actions.cc:1939 +#: editor.cc:5944 editor_actions.cc:1950 msgid "Legatize" msgstr "Добавить легато" -#: editor.cc:5936 editor_actions.cc:1938 +#: editor.cc:5946 editor_actions.cc:1949 msgid "Quantize..." msgstr "Квантование..." -#: editor.cc:5938 editor_actions.cc:1941 +#: editor.cc:5948 editor_actions.cc:1952 msgid "Remove Overlap" msgstr "Убрать перекрытие" -#: editor.cc:5940 editor_actions.cc:1940 +#: editor.cc:5950 editor_actions.cc:1951 msgid "Transform..." msgstr "Преобразовать..." @@ -3516,8 +3569,8 @@ msgstr "Слои" msgid "Position" msgstr "Положение" -#: editor_actions.cc:105 gain_meter.cc:156 gain_meter.cc:825 panner_ui.cc:178 -#: panner_ui.cc:635 +#: editor_actions.cc:105 gain_meter.cc:158 gain_meter.cc:827 panner_ui.cc:176 +#: panner_ui.cc:635 route_time_axis.cc:527 msgid "Trim" msgstr "Обрезать" @@ -3525,11 +3578,11 @@ msgstr "Обрезать" msgid "Gain" msgstr "УÑиление" -#: editor_actions.cc:107 editor_actions.cc:561 +#: editor_actions.cc:107 editor_actions.cc:572 msgid "Ranges" msgstr "ВыделениÑ" -#: editor_actions.cc:108 editor_actions.cc:1840 session_option_editor.cc:135 +#: editor_actions.cc:108 editor_actions.cc:1851 session_option_editor.cc:135 #: session_option_editor.cc:144 session_option_editor.cc:151 msgid "Fades" msgstr "Фейды" @@ -3562,7 +3615,7 @@ msgstr "Параметры MIDI" msgid "Misc Options" msgstr "Прочие параметры" -#: editor_actions.cc:119 rc_option_editor.cc:1801 route_group_dialog.cc:54 +#: editor_actions.cc:119 rc_option_editor.cc:2189 route_group_dialog.cc:54 #: session_option_editor.cc:243 session_option_editor.cc:250 msgid "Monitoring" msgstr "Мониторинг" @@ -3607,7 +3660,7 @@ msgstr "Подвыборки" msgid "Timecode fps" msgstr "СкороÑÑ‚ÑŒ (FPS) тайм-кода" -#: editor_actions.cc:141 route_time_axis.cc:575 +#: editor_actions.cc:141 route_time_axis.cc:585 msgid "Height" msgstr "Ð’Ñ‹Ñота" @@ -3739,978 +3792,994 @@ msgstr "К концу облаÑти" msgid "Select All Tracks" msgstr "Выбрать вÑе дорожки" -#: editor_actions.cc:196 export_timespan_selector.cc:61 processor_box.cc:2470 +#: editor_actions.cc:196 export_timespan_selector.cc:61 processor_box.cc:2476 msgid "Deselect All" msgstr "СнÑÑ‚ÑŒ вÑе выделениÑ" -#: editor_actions.cc:204 +#: editor_actions.cc:199 +msgid "Set Range in Loop Range" +msgstr "" + +#: editor_actions.cc:208 msgid "Select All Overlapping Edit Range" msgstr "Выделить вÑÑŽ переÑекающуюÑÑ Ð¾Ð±Ð»Ð°ÑÑ‚ÑŒ правки" -#: editor_actions.cc:205 +#: editor_actions.cc:209 msgid "Select All Inside Edit Range" msgstr "Выделить вÑÑ‘ внутри облаÑти правки" -#: editor_actions.cc:207 +#: editor_actions.cc:211 msgid "Select Edit Range" msgstr "Выделить облаÑÑ‚ÑŒ правки" -#: editor_actions.cc:209 +#: editor_actions.cc:213 msgid "Select All in Punch Range" msgstr "Выделить вÑе в облаÑти врезки" -#: editor_actions.cc:210 +#: editor_actions.cc:214 msgid "Select All in Loop Range" msgstr "Выделить вÑÑ‘ в закольцованной облаÑти" -#: editor_actions.cc:212 +#: editor_actions.cc:216 msgid "Select Next Track or Bus" msgstr "Выбрать Ñледующую дорожку или шину" -#: editor_actions.cc:213 +#: editor_actions.cc:217 msgid "Select Previous Track or Bus" msgstr "Выбрать предыдущую дорожку или шину" -#: editor_actions.cc:215 +#: editor_actions.cc:219 msgid "Toggle Record Enable" msgstr "Переключить готовноÑÑ‚ÑŒ к запиÑи" -#: editor_actions.cc:217 +#: editor_actions.cc:221 msgid "Toggle Solo" msgstr "Переключить Ñоло" -#: editor_actions.cc:219 +#: editor_actions.cc:223 msgid "Toggle Mute" msgstr "Переключить приглушение" -#: editor_actions.cc:221 +#: editor_actions.cc:225 msgid "Toggle Solo Isolate" msgstr "Переключить изолирование ÑолированиÑ" -#: editor_actions.cc:226 +#: editor_actions.cc:230 msgid "Save View %1" msgstr "Сохранить вид %1" -#: editor_actions.cc:232 +#: editor_actions.cc:236 msgid "Go to View %1" msgstr "Перейти к виду %1" -#: editor_actions.cc:238 +#: editor_actions.cc:242 msgid "Locate to Mark %1" msgstr "Перейти к маркеру %1" -#: editor_actions.cc:242 editor_actions.cc:243 +#: editor_actions.cc:246 editor_actions.cc:247 msgid "Jump to Next Mark" msgstr "К Ñледующему маркеру" -#: editor_actions.cc:244 editor_actions.cc:245 +#: editor_actions.cc:248 editor_actions.cc:249 msgid "Jump to Previous Mark" msgstr "К предыдущему маркеру" -#: editor_actions.cc:247 editor_actions.cc:248 +#: editor_actions.cc:251 +msgid "Set Session Start from Playhead" +msgstr "" + +#: editor_actions.cc:252 +msgid "Set Session End from Playhead" +msgstr "" + +#: editor_actions.cc:254 editor_actions.cc:255 msgid "Add Mark from Playhead" msgstr "Добавить маркер по указателю" -#: editor_actions.cc:250 editor_actions.cc:251 +#: editor_actions.cc:257 editor_actions.cc:258 msgid "Remove Mark at Playhead" msgstr "Удалить маркер воÑпроизведениÑ" -#: editor_actions.cc:253 +#: editor_actions.cc:260 msgid "Nudge Next Later" msgstr "Сдвиг Ñледующего позже" -#: editor_actions.cc:254 +#: editor_actions.cc:261 msgid "Nudge Next Earlier" msgstr "Сдвиг Ñледующего раньше" -#: editor_actions.cc:256 +#: editor_actions.cc:263 msgid "Nudge Playhead Forward" msgstr "Толкнуть указатель вперёд" -#: editor_actions.cc:257 +#: editor_actions.cc:264 msgid "Nudge Playhead Backward" msgstr "Толкнуть указатель назад" -#: editor_actions.cc:258 +#: editor_actions.cc:265 msgid "Playhead To Next Grid" msgstr "К Ñледующему делению Ñетки" -#: editor_actions.cc:259 +#: editor_actions.cc:266 msgid "Playhead To Previous Grid" msgstr "К предыдущему делению Ñетки" -#: editor_actions.cc:264 +#: editor_actions.cc:271 msgid "Zoom to Selection" msgstr "МаÑштабировать до выделениÑ" -#: editor_actions.cc:265 +#: editor_actions.cc:272 msgid "Toggle Zoom State" msgstr "Переключить ÑоÑтоÑÐ½Ð¸Ñ Ð¼Ð°Ñштаба" -#: editor_actions.cc:267 +#: editor_actions.cc:274 msgid "Expand Track Height" msgstr "Увеличить выÑоту дорожки" -#: editor_actions.cc:268 +#: editor_actions.cc:275 msgid "Shrink Track Height" msgstr "Уменьшить выÑоту дорожки" -#: editor_actions.cc:270 +#: editor_actions.cc:277 msgid "Move Selected Tracks Up" msgstr "ПоднÑÑ‚ÑŒ выбранные дорожки" -#: editor_actions.cc:272 +#: editor_actions.cc:279 msgid "Move Selected Tracks Down" msgstr "ОпуÑтить выбранные дорожки" -#: editor_actions.cc:275 +#: editor_actions.cc:282 msgid "Scroll Tracks Up" msgstr "Прокрутить дорожки вверх" -#: editor_actions.cc:277 +#: editor_actions.cc:284 msgid "Scroll Tracks Down" msgstr "Прокрутить дорожки вниз" -#: editor_actions.cc:279 +#: editor_actions.cc:286 msgid "Step Tracks Up" msgstr "Перейти на дорожку выше" -#: editor_actions.cc:281 +#: editor_actions.cc:288 msgid "Step Tracks Down" msgstr "Перейти на дорожку ниже" -#: editor_actions.cc:284 +#: editor_actions.cc:291 msgid "Scroll Backward" msgstr "Прокрутить назад" -#: editor_actions.cc:285 +#: editor_actions.cc:292 msgid "Scroll Forward" msgstr "Прокрутить вперёд" -#: editor_actions.cc:286 +#: editor_actions.cc:293 msgid "Center Playhead" msgstr "Указатель по центру" -#: editor_actions.cc:287 +#: editor_actions.cc:294 msgid "Center Edit Point" msgstr "Центрировать точку редактированиÑ" -#: editor_actions.cc:289 +#: editor_actions.cc:296 msgid "Playhead Forward" msgstr "Указатель вперёд" -#: editor_actions.cc:290 +#: editor_actions.cc:297 msgid "Playhead Backward" msgstr "Указатель назад" -#: editor_actions.cc:292 +#: editor_actions.cc:299 msgid "Playhead to Active Mark" msgstr "Указатель к активному маркеру" -#: editor_actions.cc:293 +#: editor_actions.cc:300 msgid "Active Mark to Playhead" msgstr "Ðктивный маркер к указателю воÑпроизведениÑ" -#: editor_actions.cc:295 +#: editor_actions.cc:302 msgid "Use Skip Ranges" msgstr "ИÑп. пропуÑк диапазонов" -#: editor_actions.cc:302 +#: editor_actions.cc:309 msgid "Play Selected Regions" msgstr "ВоÑпроизвеÑти выбранные облаÑти" -#: editor_actions.cc:304 +#: editor_actions.cc:311 msgid "Play from Edit Point and Return" msgstr "ВоÑпроизвеÑти от курÑора редактора и вернутьÑÑ" -#: editor_actions.cc:306 +#: editor_actions.cc:313 msgid "Play Edit Range" msgstr "ВоÑпроизвеÑти изменÑемое выделение" -#: editor_actions.cc:308 +#: editor_actions.cc:315 msgid "Playhead to Mouse" msgstr "Указатель к курÑору мыши" -#: editor_actions.cc:309 +#: editor_actions.cc:316 msgid "Active Marker to Mouse" msgstr "Ðктивный маркер к указателю мыши" -#: editor_actions.cc:319 +#: editor_actions.cc:326 msgid "Undo Selection Change" msgstr "Отменить Ñмену выделениÑ" -#: editor_actions.cc:320 +#: editor_actions.cc:327 msgid "Redo Selection Change" msgstr "Повторить Ñмену выделениÑ" -#: editor_actions.cc:322 +#: editor_actions.cc:329 msgid "Export Audio" msgstr "ÐкÑпортировать звук" -#: editor_actions.cc:323 export_dialog.cc:396 +#: editor_actions.cc:330 export_dialog.cc:396 msgid "Export Range" msgstr "ÐкÑпортировать облаÑÑ‚ÑŒ" -#: editor_actions.cc:328 +#: editor_actions.cc:335 msgid "Separate Using Punch Range" msgstr "Разделить по выделению врезки" -#: editor_actions.cc:331 +#: editor_actions.cc:338 msgid "Separate Using Loop Range" msgstr "Разделить по выделению петли" -#: editor_actions.cc:334 editor_actions.cc:356 +#: editor_actions.cc:341 editor_actions.cc:363 msgid "Crop" msgstr "Обрезать" -#: editor_actions.cc:344 +#: editor_actions.cc:351 msgid "Fade Range Selection" msgstr "Диапазон поÑвлениÑ" -#: editor_actions.cc:346 +#: editor_actions.cc:353 msgid "Set Tempo from Edit Range = Bar" msgstr "УÑтановить темп, ÑÑ‡Ð¸Ñ‚Ð°Ñ Ñ‡Ñ‚Ð¾ диапазон Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ = такт" -#: editor_actions.cc:348 +#: editor_actions.cc:355 msgid "Log" msgstr "Журнал" -#: editor_actions.cc:351 editor_actions.cc:353 +#: editor_actions.cc:358 editor_actions.cc:360 msgid "Move to Next Transient" msgstr "Перейти к Ñледующей переменной" -#: editor_actions.cc:352 editor_actions.cc:354 +#: editor_actions.cc:359 editor_actions.cc:361 msgid "Move to Previous Transient" msgstr "Перейти к предыдущей переменной" -#: editor_actions.cc:358 editor_actions.cc:361 +#: editor_actions.cc:365 editor_actions.cc:368 msgid "Start Range" msgstr "Ðачать выделение" -#: editor_actions.cc:359 editor_actions.cc:362 +#: editor_actions.cc:366 editor_actions.cc:369 msgid "Finish Range" msgstr "Закончить выделение" -#: editor_actions.cc:394 +#: editor_actions.cc:401 msgid "Follow Playhead" msgstr "Следовать за указателем" -#: editor_actions.cc:395 +#: editor_actions.cc:402 msgid "Remove Last Capture" msgstr "Удалить поÑледнюю запиÑÑŒ" -#: editor_actions.cc:397 +#: editor_actions.cc:404 msgid "Stationary Playhead" msgstr "Ðеподвижный указатель" -#: editor_actions.cc:399 insert_time_dialog.cc:32 +#: editor_actions.cc:406 insert_remove_time_dialog.cc:32 msgid "Insert Time" msgstr "Ð’Ñтавить промежуток времени" -#: editor_actions.cc:402 +#: editor_actions.cc:408 insert_remove_time_dialog.cc:32 +msgid "Remove Time" +msgstr "" + +#: editor_actions.cc:413 msgid "Toggle Active" msgstr "Переключить активноÑÑ‚ÑŒ" -#: editor_actions.cc:404 editor_actions.cc:1766 editor_markers.cc:921 -#: editor_markers.cc:986 editor_snapshots.cc:122 mixer_strip.cc:1560 -#: route_time_axis.cc:856 +#: editor_actions.cc:415 editor_actions.cc:1777 editor_markers.cc:914 +#: editor_markers.cc:979 editor_snapshots.cc:122 mixer_strip.cc:1590 +#: route_time_axis.cc:866 msgid "Remove" msgstr "Удалить" -#: editor_actions.cc:409 +#: editor_actions.cc:420 msgid "Fit Selection (Vertical)" msgstr "УмеÑтить выделение по вертикали" -#: editor_actions.cc:411 time_axis_view.cc:1371 +#: editor_actions.cc:422 time_axis_view.cc:1382 msgid "Largest" msgstr "ОгромнаÑ" -#: editor_actions.cc:414 time_axis_view.cc:1372 +#: editor_actions.cc:425 time_axis_view.cc:1383 msgid "Larger" msgstr "Больше" -#: editor_actions.cc:417 editor_rulers.cc:249 time_axis_view.cc:1373 +#: editor_actions.cc:428 editor_rulers.cc:249 time_axis_view.cc:1384 msgid "Large" msgstr "БольшаÑ" -#: editor_actions.cc:423 editor_rulers.cc:253 time_axis_view.cc:1375 +#: editor_actions.cc:434 editor_rulers.cc:253 time_axis_view.cc:1386 msgid "Small" msgstr "МаленькаÑ" -#: editor_actions.cc:427 +#: editor_actions.cc:438 msgid "Sound Selected MIDI Notes" msgstr "ВоÑпроизводить выделÑемые MIDI-ноты" -#: editor_actions.cc:432 +#: editor_actions.cc:443 msgid "Zoom Focus Left" msgstr "Влево" -#: editor_actions.cc:433 +#: editor_actions.cc:444 msgid "Zoom Focus Right" msgstr "Вправо" -#: editor_actions.cc:434 +#: editor_actions.cc:445 msgid "Zoom Focus Center" msgstr "По центру" -#: editor_actions.cc:435 +#: editor_actions.cc:446 msgid "Zoom Focus Playhead" msgstr "По указателю" -#: editor_actions.cc:436 +#: editor_actions.cc:447 msgid "Zoom Focus Mouse" msgstr "По курÑору мыши" -#: editor_actions.cc:437 +#: editor_actions.cc:448 msgid "Zoom Focus Edit Point" msgstr "По точке редактированиÑ" -#: editor_actions.cc:439 +#: editor_actions.cc:450 msgid "Next Zoom Focus" msgstr "Следующий вариант фокуÑа" -#: editor_actions.cc:445 +#: editor_actions.cc:456 msgid "Smart Object Mode" msgstr "УниверÑальный режим" -#: editor_actions.cc:448 +#: editor_actions.cc:459 msgid "Smart" msgstr "УниверÑальный" -#: editor_actions.cc:451 +#: editor_actions.cc:462 msgid "Object Tool" msgstr "Объект" -#: editor_actions.cc:456 +#: editor_actions.cc:467 msgid "Range Tool" msgstr "Выделение" -#: editor_actions.cc:461 +#: editor_actions.cc:472 msgid "Note Drawing Tool" msgstr "ИнÑтрумент риÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð¾Ñ‚" -#: editor_actions.cc:466 +#: editor_actions.cc:477 msgid "Audition Tool" msgstr "ИнÑтрумент проÑлушиваниÑ" -#: editor_actions.cc:471 +#: editor_actions.cc:482 msgid "Time FX Tool" msgstr "РаÑÑ‚Ñжение во времени" -#: editor_actions.cc:476 +#: editor_actions.cc:487 msgid "Content Tool" msgstr "Правка Ñодержимого" -#: editor_actions.cc:482 +#: editor_actions.cc:493 msgid "Cut Tool" msgstr "ИнÑтрумент обрезки" -#: editor_actions.cc:488 +#: editor_actions.cc:499 msgid "Step Mouse Mode" msgstr "Режим шага мыши" -#: editor_actions.cc:495 +#: editor_actions.cc:506 msgid "Change Edit Point" msgstr "Изменить точку редактированиÑ" -#: editor_actions.cc:496 +#: editor_actions.cc:507 msgid "Change Edit Point Including Marker" msgstr "Изменить точку редактированиÑ, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¼Ð°Ñ€ÐºÐµÑ€" -#: editor_actions.cc:501 +#: editor_actions.cc:512 msgid "EditMode|Lock" msgstr "Блок" -#: editor_actions.cc:502 +#: editor_actions.cc:513 msgid "Cycle Edit Mode" msgstr "ЦикличеÑки менÑÑ‚ÑŒ режим редактированиÑ" -#: editor_actions.cc:504 +#: editor_actions.cc:515 msgid "Snap to" msgstr "ПривÑзка" -#: editor_actions.cc:505 +#: editor_actions.cc:516 msgid "Snap Mode" msgstr "Режим привÑзки" -#: editor_actions.cc:512 +#: editor_actions.cc:523 msgid "Next Snap Mode" msgstr "Следующий режим привÑзки" -#: editor_actions.cc:513 +#: editor_actions.cc:524 msgid "Next Snap Choice" msgstr "Следующий выбор привÑзки" -#: editor_actions.cc:514 +#: editor_actions.cc:525 msgid "Next Musical Snap Choice" msgstr "Следующий вариант привÑзки (такты, доли)" -#: editor_actions.cc:515 +#: editor_actions.cc:526 msgid "Previous Snap Choice" msgstr "Предыдущий вариант привÑзки" -#: editor_actions.cc:516 +#: editor_actions.cc:527 msgid "Previous Musical Snap Choice" msgstr "Предыдущий вариант привÑзки (такты, доли)" -#: editor_actions.cc:521 +#: editor_actions.cc:532 msgid "Snap to CD Frame" msgstr "К выборкам CD" -#: editor_actions.cc:522 +#: editor_actions.cc:533 msgid "Snap to Timecode Frame" msgstr "К кадрам таймкода" -#: editor_actions.cc:523 +#: editor_actions.cc:534 msgid "Snap to Timecode Seconds" msgstr "К Ñекундам таймкода" -#: editor_actions.cc:524 +#: editor_actions.cc:535 msgid "Snap to Timecode Minutes" msgstr "К минутам таймкода" -#: editor_actions.cc:525 +#: editor_actions.cc:536 msgid "Snap to Seconds" msgstr "К Ñекундам" -#: editor_actions.cc:526 +#: editor_actions.cc:537 msgid "Snap to Minutes" msgstr "К минутам" -#: editor_actions.cc:528 +#: editor_actions.cc:539 msgid "Snap to One Twenty Eighths" msgstr "К 1/28" -#: editor_actions.cc:529 +#: editor_actions.cc:540 msgid "Snap to Sixty Fourths" msgstr "К 1/24" -#: editor_actions.cc:530 +#: editor_actions.cc:541 msgid "Snap to Thirty Seconds" msgstr "К 30 Ñекундам" -#: editor_actions.cc:531 +#: editor_actions.cc:542 msgid "Snap to Twenty Eighths" msgstr "К 1/28" -#: editor_actions.cc:532 +#: editor_actions.cc:543 msgid "Snap to Twenty Fourths" msgstr "К 1/24" -#: editor_actions.cc:533 +#: editor_actions.cc:544 msgid "Snap to Twentieths" msgstr "К 1/20" -#: editor_actions.cc:534 +#: editor_actions.cc:545 msgid "Snap to Sixteenths" msgstr "К 1/16" -#: editor_actions.cc:535 +#: editor_actions.cc:546 msgid "Snap to Fourteenths" msgstr "К 1/14" -#: editor_actions.cc:536 +#: editor_actions.cc:547 msgid "Snap to Twelfths" msgstr "К 1/12" -#: editor_actions.cc:537 +#: editor_actions.cc:548 msgid "Snap to Tenths" msgstr "К 1/10" -#: editor_actions.cc:538 +#: editor_actions.cc:549 msgid "Snap to Eighths" msgstr "К 1/8" -#: editor_actions.cc:539 +#: editor_actions.cc:550 msgid "Snap to Sevenths" msgstr "К 1/7" -#: editor_actions.cc:540 +#: editor_actions.cc:551 msgid "Snap to Sixths" msgstr "К 1/6" -#: editor_actions.cc:541 +#: editor_actions.cc:552 msgid "Snap to Fifths" msgstr "К 1/5" -#: editor_actions.cc:542 +#: editor_actions.cc:553 msgid "Snap to Quarters" msgstr "К 1/4" -#: editor_actions.cc:543 +#: editor_actions.cc:554 msgid "Snap to Thirds" msgstr "К 1/3" -#: editor_actions.cc:544 +#: editor_actions.cc:555 msgid "Snap to Halves" msgstr "К 1/2" -#: editor_actions.cc:546 +#: editor_actions.cc:557 msgid "Snap to Beat" msgstr "К долÑм" -#: editor_actions.cc:547 +#: editor_actions.cc:558 msgid "Snap to Bar" msgstr "К тактам" -#: editor_actions.cc:548 +#: editor_actions.cc:559 msgid "Snap to Mark" msgstr "К маркерам" -#: editor_actions.cc:549 +#: editor_actions.cc:560 msgid "Snap to Region Start" msgstr "К началам облаÑтей" -#: editor_actions.cc:550 +#: editor_actions.cc:561 msgid "Snap to Region End" msgstr "К концам облаÑтей" -#: editor_actions.cc:551 +#: editor_actions.cc:562 msgid "Snap to Region Sync" msgstr "К Ñинхронизаторам облаÑтей" -#: editor_actions.cc:552 +#: editor_actions.cc:563 msgid "Snap to Region Boundary" msgstr "К границам облаÑтей" -#: editor_actions.cc:554 +#: editor_actions.cc:565 msgid "Show Marker Lines" msgstr "Показывать линии маркеров" -#: editor_actions.cc:564 +#: editor_actions.cc:575 msgid "Loop/Punch" msgstr "Петли/Врезки" -#: editor_actions.cc:568 +#: editor_actions.cc:579 msgid "Min:Sec" msgstr "Мин:С" -#: editor_actions.cc:570 editor_actions.cc:573 editor_rulers.cc:271 +#: editor_actions.cc:581 editor_actions.cc:584 editor_rulers.cc:271 msgid "Video Monitor" msgstr "Видеомонитор" -#: editor_actions.cc:572 rc_option_editor.cc:2252 +#: editor_actions.cc:583 rc_option_editor.cc:2640 msgid "Video" msgstr "Видео" -#: editor_actions.cc:575 +#: editor_actions.cc:586 msgid "Always on Top" msgstr "Ð’Ñегда Ñверху" -#: editor_actions.cc:577 +#: editor_actions.cc:588 msgid "Frame number" msgstr "Ðомер кадра" -#: editor_actions.cc:578 +#: editor_actions.cc:589 msgid "Timecode Background" msgstr "Фон тайм-кода" -#: editor_actions.cc:579 +#: editor_actions.cc:590 msgid "Fullscreen" msgstr "Во веÑÑŒ Ñкран" -#: editor_actions.cc:580 +#: editor_actions.cc:591 msgid "Letterbox" msgstr "УмеÑтить в окно" -#: editor_actions.cc:581 +#: editor_actions.cc:592 msgid "Original Size" msgstr "ИÑходный размер" -#: editor_actions.cc:638 +#: editor_actions.cc:649 msgid "Sort" msgstr "Сортировать" -#: editor_actions.cc:649 editor_routes.cc:476 mixer_ui.cc:1196 +#: editor_actions.cc:660 editor_routes.cc:484 mixer_ui.cc:1199 msgid "Show All" msgstr "Показать вÑÑ‘" -#: editor_actions.cc:650 +#: editor_actions.cc:661 msgid "Show Automatic Regions" msgstr "Показать автомат. облаÑти" -#: editor_actions.cc:652 +#: editor_actions.cc:663 msgid "Ascending" msgstr "По возраÑтанию" -#: editor_actions.cc:654 +#: editor_actions.cc:665 msgid "Descending" msgstr "По убыванию" -#: editor_actions.cc:657 +#: editor_actions.cc:668 msgid "By Region Name" msgstr "По имени облаÑти" -#: editor_actions.cc:659 +#: editor_actions.cc:670 msgid "By Region Length" msgstr "По длительноÑти облаÑти" -#: editor_actions.cc:661 +#: editor_actions.cc:672 msgid "By Region Position" msgstr "По раÑположению облаÑти" -#: editor_actions.cc:663 +#: editor_actions.cc:674 msgid "By Region Timestamp" msgstr "По времени ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±Ð»Ð°Ñти" -#: editor_actions.cc:665 +#: editor_actions.cc:676 msgid "By Region Start in File" msgstr "По началу облаÑти в файле" -#: editor_actions.cc:667 +#: editor_actions.cc:678 msgid "By Region End in File" msgstr "По концу облаÑти в файле" -#: editor_actions.cc:669 +#: editor_actions.cc:680 msgid "By Source File Name" msgstr "По имени иÑходного файла" -#: editor_actions.cc:671 +#: editor_actions.cc:682 msgid "By Source File Length" msgstr "По длительноÑти иÑходного файла" -#: editor_actions.cc:673 +#: editor_actions.cc:684 msgid "By Source File Creation Date" msgstr "По дате ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸Ñходного файла" -#: editor_actions.cc:675 +#: editor_actions.cc:686 msgid "By Source Filesystem" msgstr "По иÑходной файловой ÑиÑтеме" -#: editor_actions.cc:678 +#: editor_actions.cc:689 msgid "Remove Unused" msgstr "Удаление неиÑпользуемых" -#: editor_actions.cc:682 editor_audio_import.cc:282 +#: editor_actions.cc:693 editor_audio_import.cc:282 #: session_import_dialog.cc:75 session_import_dialog.cc:95 #: session_metadata_dialog.cc:418 editor_videotimeline.cc:91 msgid "Import" msgstr "Импортировать" -#: editor_actions.cc:685 +#: editor_actions.cc:696 msgid "Import to Region List..." msgstr "Импортировать в ÑпиÑок облаÑтей…" -#: editor_actions.cc:688 session_import_dialog.cc:44 +#: editor_actions.cc:699 session_import_dialog.cc:44 msgid "Import From Session" msgstr "Импортировать из ÑеÑÑии" -#: editor_actions.cc:692 +#: editor_actions.cc:703 msgid "Bring all media into session folder" msgstr "ЗанеÑти вÑе медиа в папку ÑеÑÑии" -#: editor_actions.cc:695 +#: editor_actions.cc:706 msgid "Show Summary" msgstr "Показывать Ñводку" -#: editor_actions.cc:697 +#: editor_actions.cc:708 msgid "Show Group Tabs" msgstr "Показывать вкладки групп" -#: editor_actions.cc:699 +#: editor_actions.cc:710 msgid "Show Measure Lines" msgstr "Показывать линии тактов и долей" -#: editor_actions.cc:703 +#: editor_actions.cc:714 msgid "Show Logo" msgstr "Показать логотип" -#: editor_actions.cc:707 +#: editor_actions.cc:718 msgid "Toggle MIDI Input Active for Editor-Selected Tracks/Busses" msgstr "Переключить активный вход MIDI Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð° выбранных дорожек/шин" -#: editor_actions.cc:730 +#: editor_actions.cc:741 msgid "Loaded editor bindings from %1" msgstr "Загруженный редактор привÑзки от %1" -#: editor_actions.cc:732 +#: editor_actions.cc:743 msgid "Could not find editor.bindings in search path %1" msgstr "Ðе удалоÑÑŒ найти редактор привÑзок в пути поиÑка %1" -#: editor_actions.cc:1076 editor_actions.cc:1472 editor_actions.cc:1483 -#: editor_actions.cc:1536 editor_actions.cc:1547 editor_actions.cc:1594 -#: editor_actions.cc:1604 editor_regions.cc:1563 +#: editor_actions.cc:1087 editor_actions.cc:1483 editor_actions.cc:1494 +#: editor_actions.cc:1547 editor_actions.cc:1558 editor_actions.cc:1605 +#: editor_actions.cc:1615 editor_regions.cc:1571 msgid "programming error: %1: %2" msgstr "Ошибка в программе: %1: %2" -#: editor_actions.cc:1772 +#: editor_actions.cc:1783 msgid "Raise" msgstr "ПоднÑÑ‚ÑŒ" -#: editor_actions.cc:1775 +#: editor_actions.cc:1786 msgid "Raise to Top" msgstr "Ðа Ñамый верх" -#: editor_actions.cc:1778 +#: editor_actions.cc:1789 msgid "Lower" msgstr "ОпуÑтить" -#: editor_actions.cc:1781 +#: editor_actions.cc:1792 msgid "Lower to Bottom" msgstr "Ð’ Ñамый низ" -#: editor_actions.cc:1784 +#: editor_actions.cc:1795 msgid "Move to Original Position" msgstr "К иÑходной позиции" -#: editor_actions.cc:1789 +#: editor_actions.cc:1800 msgid "Lock to Video" msgstr "Прикрепить к видео" -#: editor_actions.cc:1794 editor_markers.cc:912 +#: editor_actions.cc:1805 editor_markers.cc:905 msgid "Glue to Bars and Beats" msgstr "Прикрепить к тактам и долÑм" -#: editor_actions.cc:1799 +#: editor_actions.cc:1810 msgid "Remove Sync" msgstr "Удалить Ñинхронизатор" -#: editor_actions.cc:1802 mixer_strip.cc:2025 monitor_section.cc:272 -#: monitor_section.cc:349 route_time_axis.cc:253 route_time_axis.cc:526 +#: editor_actions.cc:1813 mixer_strip.cc:2055 monitor_section.cc:278 +#: monitor_section.cc:368 route_time_axis.cc:254 route_time_axis.cc:536 msgid "Mute" msgstr "Молча" -#: editor_actions.cc:1805 +#: editor_actions.cc:1816 msgid "Normalize..." msgstr "Ðормировать Ñигнал..." -#: editor_actions.cc:1808 +#: editor_actions.cc:1819 msgid "Reverse" msgstr "Развернуть" -#: editor_actions.cc:1811 +#: editor_actions.cc:1822 msgid "Make Mono Regions" msgstr "Создать моно-облаÑти" -#: editor_actions.cc:1814 +#: editor_actions.cc:1825 msgid "Boost Gain" msgstr "ПовыÑить громкоÑÑ‚ÑŒ облаÑти" -#: editor_actions.cc:1817 +#: editor_actions.cc:1828 msgid "Cut Gain" msgstr "Понизить громкоÑÑ‚ÑŒ облаÑти" -#: editor_actions.cc:1820 +#: editor_actions.cc:1831 msgid "Pitch Shift..." msgstr "Сменить выÑоту тона…" -#: editor_actions.cc:1823 +#: editor_actions.cc:1834 msgid "Transpose..." msgstr "ТранÑпозициÑ…" -#: editor_actions.cc:1826 +#: editor_actions.cc:1837 msgid "Opaque" msgstr "Ðепрозрачно" -#: editor_actions.cc:1830 editor_regions.cc:117 +#: editor_actions.cc:1841 editor_regions.cc:117 msgid "Fade In" msgstr "ÐараÑтание" -#: editor_actions.cc:1835 editor_regions.cc:118 +#: editor_actions.cc:1846 editor_regions.cc:118 msgid "Fade Out" msgstr "Затухание" -#: editor_actions.cc:1850 +#: editor_actions.cc:1861 msgid "Multi-Duplicate..." msgstr "Продублировать многократно..." -#: editor_actions.cc:1855 +#: editor_actions.cc:1866 msgid "Fill Track" msgstr "Заполнить дорожку" -#: editor_actions.cc:1859 editor_markers.cc:1000 +#: editor_actions.cc:1870 editor_markers.cc:993 msgid "Set Loop Range" msgstr "УÑтановить облаÑÑ‚ÑŒ петли" -#: editor_actions.cc:1866 +#: editor_actions.cc:1877 msgid "Set Punch" msgstr "УÑтановить врезку" -#: editor_actions.cc:1870 +#: editor_actions.cc:1881 msgid "Add Single Range Marker" msgstr "Добавить маркер текущей облаÑти" -#: editor_actions.cc:1875 +#: editor_actions.cc:1886 msgid "Add Range Marker Per Region" msgstr "Добавить по маркеру на каждую облаÑÑ‚ÑŒ" -#: editor_actions.cc:1879 +#: editor_actions.cc:1890 msgid "Snap Position To Grid" msgstr "ПривÑзать позицию к Ñетке" -#: editor_actions.cc:1882 +#: editor_actions.cc:1893 msgid "Close Gaps" msgstr "Закрыть интервалы" -#: editor_actions.cc:1885 +#: editor_actions.cc:1896 msgid "Rhythm Ferret..." msgstr "РитмичеÑкий хорёк..." -#: editor_actions.cc:1888 +#: editor_actions.cc:1899 msgid "Export..." msgstr "ÐкÑпортировать..." -#: editor_actions.cc:1894 +#: editor_actions.cc:1905 msgid "Separate Under" msgstr "Разделить под" -#: editor_actions.cc:1898 editor_actions.cc:1899 +#: editor_actions.cc:1909 editor_actions.cc:1910 msgid "Set Fade In Length" msgstr "УÑтановить длительноÑÑ‚ÑŒ нараÑтаниÑ" -#: editor_actions.cc:1900 editor_actions.cc:1901 +#: editor_actions.cc:1911 editor_actions.cc:1912 msgid "Set Fade Out Length" msgstr "УÑтановить длительноÑÑ‚ÑŒ затуханиÑ" -#: editor_actions.cc:1903 +#: editor_actions.cc:1914 msgid "Set Tempo from Region = Bar" msgstr "УÑтановить темп, ÑÑ‡Ð¸Ñ‚Ð°Ñ Ñ‡Ñ‚Ð¾ облаÑÑ‚ÑŒ = такт" -#: editor_actions.cc:1908 +#: editor_actions.cc:1919 msgid "Split at Percussion Onsets" msgstr "Разделить по атакам перкуÑÑии" -#: editor_actions.cc:1913 +#: editor_actions.cc:1924 msgid "List Editor..." msgstr "Редактор ÑпиÑка Ñобытий" -#: editor_actions.cc:1916 +#: editor_actions.cc:1927 msgid "Properties..." msgstr "СвойÑтва..." -#: editor_actions.cc:1920 +#: editor_actions.cc:1931 msgid "Bounce (with processing)" msgstr "СвеÑти (Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¾Ð¹)" -#: editor_actions.cc:1921 +#: editor_actions.cc:1932 msgid "Bounce (without processing)" msgstr "СвеÑти (без обработки)" -#: editor_actions.cc:1922 +#: editor_actions.cc:1933 msgid "Combine" msgstr "Объединить" -#: editor_actions.cc:1923 +#: editor_actions.cc:1934 msgid "Uncombine" msgstr "СнÑÑ‚ÑŒ объединение" -#: editor_actions.cc:1925 +#: editor_actions.cc:1936 msgid "Spectral Analysis..." msgstr "Спектральный анализ..." -#: editor_actions.cc:1927 +#: editor_actions.cc:1938 msgid "Reset Envelope" msgstr "СброÑить огибающую" -#: editor_actions.cc:1929 +#: editor_actions.cc:1940 msgid "Reset Gain" msgstr "СброÑить уÑиление" -#: editor_actions.cc:1934 +#: editor_actions.cc:1945 msgid "Envelope Active" msgstr "ÐžÐ³Ð¸Ð±Ð°ÑŽÑ‰Ð°Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð°" -#: editor_actions.cc:1942 editor_actions.cc:1943 +#: editor_actions.cc:1953 editor_actions.cc:1954 msgid "Insert Patch Change..." msgstr "Ð’Ñтавить Ñмену программы..." -#: editor_actions.cc:1944 +#: editor_actions.cc:1955 msgid "Unlink from other copies" msgstr "ОтÑоединить от других копий" -#: editor_actions.cc:1945 +#: editor_actions.cc:1956 msgid "Strip Silence..." msgstr "Вырезать тишину..." -#: editor_actions.cc:1946 +#: editor_actions.cc:1957 msgid "Set Range Selection" msgstr "Создать выделение из облаÑти" -#: editor_actions.cc:1948 editor_actions.cc:1949 +#: editor_actions.cc:1959 editor_actions.cc:1960 msgid "Nudge Later" msgstr "Толкнуть вперёд" -#: editor_actions.cc:1950 editor_actions.cc:1951 +#: editor_actions.cc:1961 editor_actions.cc:1962 msgid "Nudge Earlier" msgstr "Толкнуть назад" -#: editor_actions.cc:1953 +#: editor_actions.cc:1964 msgid "Sequence Regions" msgstr "Ð’Ñ‹Ñтроить облаÑти вÑтык" -#: editor_actions.cc:1958 +#: editor_actions.cc:1969 msgid "Nudge Later by Capture Offset" msgstr "Толкнуть вперёд на Ñмещение захвата" -#: editor_actions.cc:1965 +#: editor_actions.cc:1976 msgid "Nudge Earlier by Capture Offset" msgstr "Толкнуть назад на Ñмещение захвата" -#: editor_actions.cc:1969 +#: editor_actions.cc:1980 msgid "Trim to Loop" msgstr "Ð’ петлю" -#: editor_actions.cc:1970 +#: editor_actions.cc:1981 msgid "Trim to Punch" msgstr "Во врезку" -#: editor_actions.cc:1972 +#: editor_actions.cc:1983 msgid "Trim to Previous" msgstr "До предыдущей облаÑти" -#: editor_actions.cc:1973 +#: editor_actions.cc:1984 msgid "Trim to Next" msgstr "До Ñледующей облаÑти" -#: editor_actions.cc:1980 +#: editor_actions.cc:1991 msgid "Insert Region From Region List" msgstr "Ð’Ñтавить облаÑÑ‚ÑŒ из ÑпиÑка облаÑтей" -#: editor_actions.cc:1986 +#: editor_actions.cc:1997 msgid "Set Sync Position" msgstr "УÑтановить Ñинхронизатор облаÑти" -#: editor_actions.cc:1987 +#: editor_actions.cc:1998 msgid "Place Transient" msgstr "МеÑто переходных" -#: editor_actions.cc:1988 +#: editor_actions.cc:1999 msgid "Split/Separate" msgstr "Разбить" -#: editor_actions.cc:1989 +#: editor_actions.cc:2000 msgid "Trim Start at Edit Point" msgstr "Ðачало по курÑору редактора" -#: editor_actions.cc:1990 +#: editor_actions.cc:2001 msgid "Trim End at Edit Point" msgstr "Конец по курÑору редактора" -#: editor_actions.cc:1995 +#: editor_actions.cc:2006 msgid "Align Start" msgstr "ВыровнÑÑ‚ÑŒ начала облаÑтей" -#: editor_actions.cc:2002 +#: editor_actions.cc:2013 msgid "Align Start Relative" msgstr "ВыровнÑÑ‚ÑŒ отноÑительно начал облаÑтей" -#: editor_actions.cc:2006 +#: editor_actions.cc:2017 msgid "Align End" msgstr "ВыровнÑÑ‚ÑŒ концы облаÑтей" -#: editor_actions.cc:2011 +#: editor_actions.cc:2022 msgid "Align End Relative" msgstr "ВыровнÑÑ‚ÑŒ отноÑительно концов облаÑтей" -#: editor_actions.cc:2018 +#: editor_actions.cc:2029 msgid "Align Sync" msgstr "ВыровнÑÑ‚ÑŒ по Ñинхронизаторам облаÑтей" -#: editor_actions.cc:2025 +#: editor_actions.cc:2036 msgid "Align Sync Relative" msgstr "ВыровнÑÑ‚ÑŒ отноÑительно Ñинхронизаторов облаÑтей" -#: editor_actions.cc:2029 editor_actions.cc:2032 +#: editor_actions.cc:2040 editor_actions.cc:2043 msgid "Choose Top..." msgstr "Выбрать верхнюю облаÑÑ‚ÑŒ..." @@ -4776,92 +4845,92 @@ msgstr "" msgid "Embed it anyway" msgstr "Ð’ÑÑ‘ равно вÑтроить" -#: editor_canvas_events.cc:1306 editor_drag.cc:1381 +#: editor_canvas_events.cc:1306 editor_drag.cc:1399 msgid "Could not create new track after region placed in the drop zone" msgstr "" "Ðе удалоÑÑŒ Ñоздать новую дорожку поÑле облаÑти, помещённой в рабочую зону" -#: editor_drag.cc:1266 +#: editor_drag.cc:1292 msgid "fixed time region drag" msgstr "ФикÑÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾Ð±Ð»Ð°ÑÑ‚ÑŒ перетаÑкиваниÑ" -#: editor_drag.cc:2214 +#: editor_drag.cc:2232 msgid "Ripple drag" msgstr "ПеретаÑкивание Ñ€Ñби" -#: editor_drag.cc:2365 midi_region_view.cc:2813 +#: editor_drag.cc:2388 midi_region_view.cc:2850 msgid "resize notes" msgstr "Смена размера ноты" -#: editor_drag.cc:2517 +#: editor_drag.cc:2581 msgid "Video Start:" msgstr "Ðачало видеофайла" -#: editor_drag.cc:2519 +#: editor_drag.cc:2583 msgid "Diff:" msgstr "Разница:" -#: editor_drag.cc:2538 +#: editor_drag.cc:2602 msgid "Move Video" msgstr "ПеремеÑтить видео" -#: editor_drag.cc:3046 +#: editor_drag.cc:3110 msgid "copy meter mark" msgstr "Скопировать маркер Ñчетчика" -#: editor_drag.cc:3054 +#: editor_drag.cc:3118 msgid "move meter mark" msgstr "ПеремеÑтить маркер Ñчетчика" -#: editor_drag.cc:3177 +#: editor_drag.cc:3241 msgid "copy tempo mark" msgstr "Скопировать маркер темпа" -#: editor_drag.cc:3185 +#: editor_drag.cc:3249 msgid "move tempo mark" msgstr "ПеремеÑтить маркер темпа" -#: editor_drag.cc:3412 +#: editor_drag.cc:3484 msgid "change fade in length" msgstr "Смена длительноÑти фейда нараÑтаниÑ" -#: editor_drag.cc:3526 +#: editor_drag.cc:3603 msgid "change fade out length" msgstr "Смена длительноÑти фейда затуханиÑ" -#: editor_drag.cc:3880 +#: editor_drag.cc:3957 msgid "move marker" msgstr "Смещение маркера" -#: editor_drag.cc:4490 +#: editor_drag.cc:4576 msgid "An error occurred while executing time stretch operation" msgstr "Произошла ошибка при выполнении операции раÑÑ‚ÑÐ¶ÐµÐ½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸" -#: editor_drag.cc:4947 +#: editor_drag.cc:5033 msgid "programming_error: %1" msgstr "Ошибка в программе: %1" -#: editor_drag.cc:5016 editor_drag.cc:5026 +#: editor_drag.cc:5102 editor_drag.cc:5112 msgid "new skip marker" msgstr "Ðовый маркер пропуÑка" -#: editor_drag.cc:5017 +#: editor_drag.cc:5103 msgid "skip" msgstr "ПропуÑтить" -#: editor_drag.cc:5021 location_ui.cc:56 +#: editor_drag.cc:5107 location_ui.cc:56 msgid "CD" msgstr "CD" -#: editor_drag.cc:5022 +#: editor_drag.cc:5108 msgid "new CD marker" msgstr "Ðовый CD маркер" -#: editor_drag.cc:5027 editor_route_groups.cc:437 mixer_ui.cc:1493 +#: editor_drag.cc:5113 editor_route_groups.cc:437 mixer_ui.cc:1498 msgid "unnamed" msgstr "БезымÑнный" -#: editor_drag.cc:5309 +#: editor_drag.cc:5419 msgid "Automation range drag created for invalid region type" msgstr "" "ПеретаÑкивание облаÑти автоматизации предпринÑто Ð´Ð»Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð³Ð¾ типа " @@ -4879,7 +4948,7 @@ msgstr "Цвет вкладки группы" msgid "Name of Group" msgstr "Ðазвание группы" -#: editor_route_groups.cc:98 editor_routes.cc:207 +#: editor_route_groups.cc:98 editor_routes.cc:208 msgid "Visible|V" msgstr "Ð’" @@ -4911,9 +4980,9 @@ msgstr "Отн." msgid "Relative Gain Changes?" msgstr "ОтноÑительны ли Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² уÑилении" -#: editor_route_groups.cc:102 editor_regions.cc:121 editor_routes.cc:211 -#: mixer_strip.cc:2051 meter_strip.cc:363 route_time_axis.cc:2709 -#: time_axis_view.cc:1190 +#: editor_route_groups.cc:102 editor_regions.cc:121 editor_routes.cc:212 +#: mixer_strip.cc:2081 meter_strip.cc:367 route_time_axis.cc:2736 +#: time_axis_view.cc:1201 msgid "Mute|M" msgstr "Ðœ" @@ -4921,8 +4990,8 @@ msgstr "Ðœ" msgid "Sharing Mute?" msgstr "РазделÑетÑÑ Ð»Ð¸ приглушение" -#: editor_route_groups.cc:103 editor_routes.cc:212 mixer_strip.cc:2061 -#: meter_strip.cc:371 route_time_axis.cc:2706 +#: editor_route_groups.cc:103 editor_routes.cc:213 mixer_strip.cc:2091 +#: meter_strip.cc:375 route_time_axis.cc:2733 msgid "Solo|S" msgstr "С" @@ -4955,7 +5024,7 @@ msgstr "Выд." msgid "Sharing Selected/Editing Status?" msgstr "РазделÑÑ‚ÑŒ ÑÑ‚Ð°Ñ‚ÑƒÑ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ð¾Ñти" -#: editor_route_groups.cc:107 editor_routes.cc:208 +#: editor_route_groups.cc:107 editor_routes.cc:209 msgid "Active|A" msgstr "Ð" @@ -4963,13 +5032,13 @@ msgstr "Ð" msgid "Sharing Active Status?" msgstr "РазделÑетÑÑ Ð»Ð¸ активный ÑтатуÑ" -#: editor_export_audio.cc:92 editor_markers.cc:740 editor_markers.cc:827 -#: editor_markers.cc:1012 editor_markers.cc:1030 editor_markers.cc:1048 -#: editor_markers.cc:1067 editor_markers.cc:1086 editor_markers.cc:1116 -#: editor_markers.cc:1147 editor_markers.cc:1177 editor_markers.cc:1205 -#: editor_markers.cc:1236 editor_markers.cc:1261 editor_markers.cc:1312 -#: editor_markers.cc:1356 editor_markers.cc:1382 editor_markers.cc:1576 -#: editor_mouse.cc:2120 +#: editor_export_audio.cc:92 editor_markers.cc:733 editor_markers.cc:820 +#: editor_markers.cc:1005 editor_markers.cc:1023 editor_markers.cc:1041 +#: editor_markers.cc:1060 editor_markers.cc:1079 editor_markers.cc:1109 +#: editor_markers.cc:1140 editor_markers.cc:1170 editor_markers.cc:1198 +#: editor_markers.cc:1229 editor_markers.cc:1254 editor_markers.cc:1305 +#: editor_markers.cc:1349 editor_markers.cc:1375 editor_markers.cc:1569 +#: editor_mouse.cc:2128 msgid "programming error: marker canvas item has no marker object pointer!" msgstr "Ошибка в программе: marker canvas item has no marker object pointer!" @@ -4993,105 +5062,109 @@ msgstr "Ðачало" msgid "end" msgstr "Конец" -#: editor_markers.cc:657 editor_ops.cc:2085 editor_ops.cc:2107 -#: editor_ops.cc:2164 editor_ops.cc:2193 location_ui.cc:1023 +#: editor_markers.cc:645 +msgid "mark" +msgstr "" + +#: editor_markers.cc:650 editor_ops.cc:2085 editor_ops.cc:2107 +#: editor_ops.cc:2212 editor_ops.cc:2241 location_ui.cc:1023 msgid "add marker" msgstr "Добавка маркера" -#: editor_markers.cc:689 editor_markers.cc:1456 +#: editor_markers.cc:682 editor_markers.cc:1449 msgid "set loop range" msgstr "Создать петлю из облаÑти" -#: editor_markers.cc:705 editor_markers.cc:1462 +#: editor_markers.cc:698 editor_markers.cc:1455 msgid "set punch range" msgstr "Создание Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²Ñ€ÐµÐ·ÐºÐ¸" -#: editor_markers.cc:722 editor_ops.cc:4055 +#: editor_markers.cc:715 editor_ops.cc:4103 msgid "range" msgstr "диапазон" -#: editor_markers.cc:725 +#: editor_markers.cc:718 msgid "new range marker" msgstr "Ðовый маркер диапазона" -#: editor_markers.cc:758 editor_ops.cc:2129 location_ui.cc:859 +#: editor_markers.cc:751 editor_ops.cc:2177 location_ui.cc:859 msgid "remove marker" msgstr "Удаление маркера" -#: editor_markers.cc:894 +#: editor_markers.cc:887 msgid "Locate to Here" msgstr "ПеремеÑтить Ñюда указатель" -#: editor_markers.cc:895 +#: editor_markers.cc:888 msgid "Play from Here" msgstr "ВоÑпроизвеÑти отÑюда" -#: editor_markers.cc:896 +#: editor_markers.cc:889 msgid "Move Mark to Playhead" msgstr "Маркер к указателю воÑпроизведениÑ" -#: editor_markers.cc:900 +#: editor_markers.cc:893 msgid "Create Range to Next Marker" msgstr "Создать выделение до Ñлед. маркера" -#: editor_markers.cc:941 +#: editor_markers.cc:934 msgid "Locate to Marker" msgstr "Перейти к маркеру" -#: editor_markers.cc:942 +#: editor_markers.cc:935 msgid "Play from Marker" msgstr "ВоÑпроизвеÑти от маркера" -#: editor_markers.cc:945 +#: editor_markers.cc:938 msgid "Set Marker from Playhead" msgstr "УÑтановить маркер по указателю" -#: editor_markers.cc:947 +#: editor_markers.cc:940 msgid "Set Range from Selection" msgstr "УÑтановить диапазон по выделению" -#: editor_markers.cc:957 +#: editor_markers.cc:950 msgid "Hide Range" msgstr "Скрыть выделение" -#: editor_markers.cc:958 +#: editor_markers.cc:951 msgid "Rename Range..." msgstr "Переименовать облаÑть…" -#: editor_markers.cc:962 +#: editor_markers.cc:955 msgid "Remove Range" msgstr "Удалить выделение" -#: editor_markers.cc:969 +#: editor_markers.cc:962 msgid "Separate Regions in Range" msgstr "Разделить облаÑти в выделении" -#: editor_markers.cc:972 +#: editor_markers.cc:965 msgid "Select Range" msgstr "Выбрать выделение" -#: editor_markers.cc:1001 +#: editor_markers.cc:994 msgid "Set Punch Range" msgstr "УÑтановить облаÑÑ‚ÑŒ врезки" -#: editor_markers.cc:1407 editor_ops.cc:2040 +#: editor_markers.cc:1400 editor_ops.cc:2040 msgid "New Name:" msgstr "Ðовое название:" -#: editor_markers.cc:1410 +#: editor_markers.cc:1403 msgid "Rename Mark" msgstr "Переименовать маркер" -#: editor_markers.cc:1412 +#: editor_markers.cc:1405 msgid "Rename Range" msgstr "Переименовать выделение" -#: editor_markers.cc:1419 editor_mouse.cc:2137 processor_box.cc:1996 -#: processor_box.cc:2466 route_time_axis.cc:1096 route_ui.cc:1571 +#: editor_markers.cc:1412 editor_mouse.cc:2145 processor_box.cc:2002 +#: processor_box.cc:2472 route_time_axis.cc:1106 route_ui.cc:1569 msgid "Rename" msgstr "Переименовать" -#: editor_markers.cc:1432 +#: editor_markers.cc:1425 msgid "rename marker" msgstr "Переименование маркера" @@ -5113,7 +5186,7 @@ msgstr "Ошибка в программе: marker for tempo is not a tempo mark msgid "programming error: marker for meter is not a meter marker!" msgstr "Ошибка в программе: маркер размера таковым не ÑвлÑетÑÑ!" -#: editor_mouse.cc:1885 editor_mouse.cc:1910 editor_mouse.cc:1923 +#: editor_mouse.cc:1893 editor_mouse.cc:1918 editor_mouse.cc:1931 msgid "" "programming error: control point canvas item has no control point object " "pointer!" @@ -5121,15 +5194,15 @@ msgstr "" "ошибка в программе: у контр. точки пункта ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð½ÐµÑ‚ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ " "объектауказатель!" -#: editor_mouse.cc:2058 +#: editor_mouse.cc:2066 msgid "start point trim" msgstr "Обрезка начальной точки" -#: editor_mouse.cc:2083 +#: editor_mouse.cc:2091 msgid "End point trim" msgstr "ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ° отделки" -#: editor_mouse.cc:2135 +#: editor_mouse.cc:2143 msgid "Name for region:" msgstr "Ðазвание облаÑти: " @@ -5173,123 +5246,127 @@ msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ build_region_boundary_cache вызвана Ñ snap_type = msgid "New Location Marker" msgstr "Ðовый маркер позиции" -#: editor_ops.cc:2164 +#: editor_ops.cc:2133 editor_ops.cc:2157 +msgid "Set session start" +msgstr "" + +#: editor_ops.cc:2212 msgid "add markers" msgstr "Добавка маркера" -#: editor_ops.cc:2274 +#: editor_ops.cc:2322 msgid "clear markers" msgstr "ОчиÑтка маркеров" -#: editor_ops.cc:2289 +#: editor_ops.cc:2337 msgid "clear ranges" msgstr "ОчиÑтка диапазонов" -#: editor_ops.cc:2305 +#: editor_ops.cc:2353 msgid "clear locations" msgstr "ОчиÑтка позиций" -#: editor_ops.cc:2368 +#: editor_ops.cc:2416 msgid "insert region" msgstr "Ð’Ñтавка облаÑти" -#: editor_ops.cc:2559 +#: editor_ops.cc:2607 msgid "raise regions" msgstr "ПоднÑтие облаÑтей" -#: editor_ops.cc:2561 +#: editor_ops.cc:2609 msgid "raise region" msgstr "ПоднÑтие облаÑти" -#: editor_ops.cc:2567 +#: editor_ops.cc:2615 msgid "raise regions to top" msgstr "ПоднÑтие облаÑтей наверх" -#: editor_ops.cc:2569 +#: editor_ops.cc:2617 msgid "raise region to top" msgstr "ПоднÑтие облаÑти наверх" -#: editor_ops.cc:2575 +#: editor_ops.cc:2623 msgid "lower regions" msgstr "ОпуÑкание облаÑтей" -#: editor_ops.cc:2577 editor_ops.cc:2585 +#: editor_ops.cc:2625 editor_ops.cc:2633 msgid "lower region" msgstr "ОпуÑкание облаÑти" -#: editor_ops.cc:2583 +#: editor_ops.cc:2631 msgid "lower regions to bottom" msgstr "ОпуÑкание облаÑтей вниз" -#: editor_ops.cc:2668 +#: editor_ops.cc:2716 msgid "Rename Region" msgstr "Переименовать облаÑÑ‚ÑŒ..." -#: editor_ops.cc:2670 processor_box.cc:1994 route_ui.cc:1569 +#: editor_ops.cc:2718 processor_box.cc:2000 route_ui.cc:1567 msgid "New name:" msgstr "Ðовое название:" -#: editor_ops.cc:2987 +#: editor_ops.cc:3035 msgid "separate" msgstr "разделение" -#: editor_ops.cc:3099 +#: editor_ops.cc:3147 msgid "separate region under" msgstr "разделение облаÑти под курÑором" -#: editor_ops.cc:3220 +#: editor_ops.cc:3268 msgid "trim to selection" msgstr "Обрезание по выделению" -#: editor_ops.cc:3356 +#: editor_ops.cc:3404 msgid "set sync point" msgstr "УÑтановка точки Ñинхронизации" -#: editor_ops.cc:3380 +#: editor_ops.cc:3428 msgid "remove region sync" msgstr "Удаление Ñинхронизатора облаÑти" -#: editor_ops.cc:3402 +#: editor_ops.cc:3450 msgid "move regions to original position" msgstr "Перемещение облаÑтей в иÑходную позицию" -#: editor_ops.cc:3404 +#: editor_ops.cc:3452 msgid "move region to original position" msgstr "Перемещение облаÑти в иÑходную позицию" -#: editor_ops.cc:3425 +#: editor_ops.cc:3473 msgid "align selection" msgstr "Выравнивание выделениÑ" -#: editor_ops.cc:3499 +#: editor_ops.cc:3547 msgid "align selection (relative)" msgstr "Выравнивание Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ (отноÑительное)" -#: editor_ops.cc:3533 +#: editor_ops.cc:3581 msgid "align region" msgstr "Выравнивание облаÑти" -#: editor_ops.cc:3584 +#: editor_ops.cc:3632 msgid "trim front" msgstr "Обрезка впереди" -#: editor_ops.cc:3584 +#: editor_ops.cc:3632 msgid "trim back" msgstr "Обрезка Ñзади" -#: editor_ops.cc:3614 +#: editor_ops.cc:3662 msgid "trim to loop" msgstr "Обрезка в петлю" -#: editor_ops.cc:3624 +#: editor_ops.cc:3672 msgid "trim to punch" msgstr "Обрезка во врезку" -#: editor_ops.cc:3686 +#: editor_ops.cc:3734 msgid "trim to region" msgstr "Обрезка в облаÑÑ‚ÑŒ" -#: editor_ops.cc:3794 +#: editor_ops.cc:3842 msgid "" "This track/bus cannot be frozen because the signal adds or loses channels " "before reaching the outputs.\n" @@ -5301,11 +5378,11 @@ msgstr "" "Ðто, как правило, вызвано плагинами, которые генерируют выходной " "ÑтереоÑигнал из моновхода или наоборот." -#: editor_ops.cc:3797 +#: editor_ops.cc:3845 msgid "Cannot freeze" msgstr "Ðевозможно заморозить" -#: editor_ops.cc:3803 +#: editor_ops.cc:3851 msgid "" "<b>%1</b>\n" "\n" @@ -5321,23 +5398,23 @@ msgstr "" "Замораживание будет только обрабатывать Ñигнал как первый поÑыл/вÑтавку/" "возврат." -#: editor_ops.cc:3807 +#: editor_ops.cc:3855 msgid "Freeze anyway" msgstr "Ð’ÑÑ‘ равно заморозить" -#: editor_ops.cc:3808 +#: editor_ops.cc:3856 msgid "Don't freeze" msgstr "Ðе замораживать" -#: editor_ops.cc:3809 +#: editor_ops.cc:3857 msgid "Freeze Limits" msgstr "Пределы заморозки" -#: editor_ops.cc:3824 +#: editor_ops.cc:3872 msgid "Cancel Freeze" msgstr "Отменить замораживание" -#: editor_ops.cc:3854 +#: editor_ops.cc:3902 msgid "" "You can't perform this operation because the processing of the signal will " "cause one or more of the tracks to end up with a region with more channels " @@ -5351,47 +5428,47 @@ msgstr "" "\n" "Ð’Ñ‹ можете Ñделать Ñто без обработки, и Ñто уже Ð´Ñ€ÑƒÐ³Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ." -#: editor_ops.cc:3858 +#: editor_ops.cc:3906 msgid "Cannot bounce" msgstr "Ðевозможно выполнить Ñведение" -#: editor_ops.cc:3869 +#: editor_ops.cc:3917 msgid "bounce range" msgstr "Сведение облаÑти" -#: editor_ops.cc:3971 +#: editor_ops.cc:4019 msgid "delete" msgstr "Удаление" -#: editor_ops.cc:3974 +#: editor_ops.cc:4022 msgid "cut" msgstr "Вырезать" -#: editor_ops.cc:3977 +#: editor_ops.cc:4025 msgid "copy" msgstr "Копировать" -#: editor_ops.cc:3980 +#: editor_ops.cc:4028 msgid "clear" msgstr "ОчиÑтить" -#: editor_ops.cc:4028 +#: editor_ops.cc:4076 msgid "objects" msgstr "объекты" -#: editor_ops.cc:4238 editor_ops.cc:4270 +#: editor_ops.cc:4286 editor_ops.cc:4318 msgid "remove region" msgstr "Удаление облаÑти" -#: editor_ops.cc:4719 +#: editor_ops.cc:4767 msgid "duplicate selection" msgstr "Дублирование выделениÑ" -#: editor_ops.cc:4803 +#: editor_ops.cc:4851 msgid "nudge track" msgstr "Смещение дорожки" -#: editor_ops.cc:4840 +#: editor_ops.cc:4888 msgid "" "Do you really want to destroy the last capture?\n" "(This is destructive and cannot be undone)" @@ -5399,136 +5476,136 @@ msgstr "" "ПоÑледнюю запиÑÑŒ будет удалена. Ð’Ñ‹ уверены?\n" "(отмена операции невозможна)" -#: editor_ops.cc:4843 editor_ops.cc:6845 editor_regions.cc:462 +#: editor_ops.cc:4891 editor_ops.cc:6893 editor_regions.cc:462 #: editor_snapshots.cc:159 msgid "No, do nothing." msgstr "Ðет" -#: editor_ops.cc:4844 +#: editor_ops.cc:4892 msgid "Yes, destroy it." msgstr "Да" -#: editor_ops.cc:4846 +#: editor_ops.cc:4894 msgid "Destroy last capture" msgstr "Уничтожение поÑледней запиÑи" -#: editor_ops.cc:4906 +#: editor_ops.cc:4954 msgid "normalize" msgstr "ÐормализациÑ" -#: editor_ops.cc:5000 +#: editor_ops.cc:5048 msgid "reverse regions" msgstr "Разворот облаÑтей" -#: editor_ops.cc:5034 +#: editor_ops.cc:5082 msgid "strip silence" msgstr "Удаление тишины" -#: editor_ops.cc:5091 +#: editor_ops.cc:5139 msgid "Fork Region(s)" msgstr "Ответвление облаÑтей" -#: editor_ops.cc:5112 +#: editor_ops.cc:5160 msgid "Could not unlink %1" msgstr "Ðе удалоÑÑŒ отÑоединить %1" -#: editor_ops.cc:5326 +#: editor_ops.cc:5374 msgid "reset region gain" msgstr "Ð¡Ð±Ñ€Ð¾Ñ ÑƒÑÐ¸Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ð»Ð°Ñти" -#: editor_ops.cc:5379 +#: editor_ops.cc:5427 msgid "region gain envelope active" msgstr "ÐžÐ³Ð¸Ð±Ð°ÑŽÑ‰Ð°Ñ Ð¾Ð±Ð»Ð°Ñти активна" -#: editor_ops.cc:5406 +#: editor_ops.cc:5454 msgid "toggle region lock" msgstr "Переключение блокировки облаÑти" -#: editor_ops.cc:5430 +#: editor_ops.cc:5478 msgid "Toggle Video Lock" msgstr "Переключить видеоблокировку" -#: editor_ops.cc:5454 +#: editor_ops.cc:5502 msgid "region lock style" msgstr "СпоÑоб блокировки облаÑти" -#: editor_ops.cc:5479 +#: editor_ops.cc:5527 msgid "change region opacity" msgstr "Смена прозрачноÑти облаÑти" -#: editor_ops.cc:5572 +#: editor_ops.cc:5620 msgid "fade range" msgstr "Диапазон фейда" -#: editor_ops.cc:5610 +#: editor_ops.cc:5658 msgid "set fade in length" msgstr "УÑтановка длины фейда нараÑтаниÑ" -#: editor_ops.cc:5617 +#: editor_ops.cc:5665 msgid "set fade out length" msgstr "УÑтановка длины фейда затуханиÑ" -#: editor_ops.cc:5662 +#: editor_ops.cc:5710 msgid "set fade in shape" msgstr "УÑтановка формы фейда нараÑтаниÑ" -#: editor_ops.cc:5693 +#: editor_ops.cc:5741 msgid "set fade out shape" msgstr "УÑтановка формы фейда затуханиÑ" -#: editor_ops.cc:5723 +#: editor_ops.cc:5771 msgid "set fade in active" msgstr "УÑтановка активноÑти фейда нараÑтаниÑ" -#: editor_ops.cc:5752 +#: editor_ops.cc:5800 msgid "set fade out active" msgstr "УÑтановка активноÑти фейда затуханиÑ" -#: editor_ops.cc:5994 +#: editor_ops.cc:6042 msgid "set loop range from selection" msgstr "УÑтановка петли из выделениÑ" -#: editor_ops.cc:6008 +#: editor_ops.cc:6056 msgid "set loop range from region" msgstr "УÑтановка петли из облаÑти" -#: editor_ops.cc:6027 +#: editor_ops.cc:6075 msgid "set punch range from selection" msgstr "УÑтановка врезки из выделениÑ" -#: editor_ops.cc:6041 +#: editor_ops.cc:6099 msgid "set session start/end from selection" msgstr "УÑтановка начала/конца ÑеÑÑии из выделениÑ" -#: editor_ops.cc:6066 +#: editor_ops.cc:6114 msgid "set punch range from region" msgstr "УÑтановка врезки из облаÑти" -#: editor_ops.cc:6175 +#: editor_ops.cc:6223 msgid "Add new marker" msgstr "Создать маркер" -#: editor_ops.cc:6176 +#: editor_ops.cc:6224 msgid "Set global tempo" msgstr "УÑтановить общий темп" -#: editor_ops.cc:6179 +#: editor_ops.cc:6227 msgid "Define one bar" msgstr "Определение такта" -#: editor_ops.cc:6180 +#: editor_ops.cc:6228 msgid "Do you want to set the global tempo or add a new tempo marker?" msgstr "Ð’Ñ‹ хотите уÑтановить общий темп или добавить новый маркер темпа?" -#: editor_ops.cc:6206 +#: editor_ops.cc:6254 msgid "set tempo from region" msgstr "УÑтановка темпа из облаÑти" -#: editor_ops.cc:6236 +#: editor_ops.cc:6284 msgid "split regions" msgstr "Разделение выделений" -#: editor_ops.cc:6278 +#: editor_ops.cc:6326 msgid "" "You are about to split\n" "%1\n" @@ -5540,11 +5617,11 @@ msgstr "" "на %2 чаÑтей.\n" "Ðто может занÑÑ‚ÑŒ много времени." -#: editor_ops.cc:6285 +#: editor_ops.cc:6333 msgid "Call for the Ferret!" msgstr "(?)Призвать Ферре!" -#: editor_ops.cc:6286 +#: editor_ops.cc:6334 msgid "" "Press OK to continue with this split operation\n" "or ask the Ferret dialog to tune the analysis" @@ -5552,52 +5629,52 @@ msgstr "" "Ðажмите OK Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ\n" "или попроÑите Хорька Ñкорректировать анализ." -#: editor_ops.cc:6288 +#: editor_ops.cc:6336 msgid "Press OK to continue with this split operation" msgstr "Ðажмите OK Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ" -#: editor_ops.cc:6291 +#: editor_ops.cc:6339 msgid "Excessive split?" msgstr "МаÑÑовое разделение?" -#: editor_ops.cc:6443 +#: editor_ops.cc:6491 msgid "place transient" msgstr "РазмеÑтить переходные" -#: editor_ops.cc:6478 +#: editor_ops.cc:6526 msgid "snap regions to grid" msgstr "привÑзка облаÑтей к Ñетке" -#: editor_ops.cc:6517 +#: editor_ops.cc:6565 msgid "Close Region Gaps" msgstr "Закрытие интервалов между облаÑÑ‚Ñми" -#: editor_ops.cc:6522 +#: editor_ops.cc:6570 msgid "Crossfade length" msgstr "ДлительноÑÑ‚ÑŒ кроÑÑфейда" -#: editor_ops.cc:6531 editor_ops.cc:6542 rhythm_ferret.cc:119 +#: editor_ops.cc:6579 editor_ops.cc:6590 rhythm_ferret.cc:119 #: session_option_editor.cc:141 msgid "ms" msgstr "мÑ" -#: editor_ops.cc:6533 +#: editor_ops.cc:6581 msgid "Pull-back length" msgstr "РаÑÑ‚Ñжка длины назад" -#: editor_ops.cc:6546 +#: editor_ops.cc:6594 msgid "Ok" msgstr "ОК" -#: editor_ops.cc:6561 +#: editor_ops.cc:6609 msgid "close region gaps" msgstr "уÑтранение пробелов облаÑти" -#: editor_ops.cc:6803 +#: editor_ops.cc:6851 msgid "That would be bad news ...." msgstr "Ðто было бы плохой новоÑтью..." -#: editor_ops.cc:6808 +#: editor_ops.cc:6856 msgid "" "Removing the master or monitor bus is such a bad idea\n" "that %1 is not going to allow it.\n" @@ -5613,21 +5690,21 @@ msgstr "" "подобные вещи, в файле ardour.rc измените значение параметра\n" "\"allow-special-bus-removal\" на \"yes\"" -#: editor_ops.cc:6824 route_ui.cc:1935 +#: editor_ops.cc:6872 route_ui.cc:1933 msgid "track" msgid_plural "tracks" msgstr[0] "дорожка" msgstr[1] "дорожки" msgstr[2] "дорожек" -#: editor_ops.cc:6825 route_ui.cc:1935 +#: editor_ops.cc:6873 route_ui.cc:1933 msgid "bus" msgid_plural "busses" msgstr[0] "шина" msgstr[1] "шины" msgstr[2] "шин" -#: editor_ops.cc:6829 +#: editor_ops.cc:6877 msgid "" "Do you really want to remove %1 %2 and %3 %4?\n" "(You may also lose the playlists associated with the %2)\n" @@ -5639,7 +5716,7 @@ msgstr "" "\n" "Ðто дейÑтвие невозможно отменить, файл ÑеÑÑии будет перезапиÑан." -#: editor_ops.cc:6834 +#: editor_ops.cc:6882 msgid "" "Do you really want to remove %1 %2?\n" "(You may also lose the playlists associated with the %2)\n" @@ -5651,7 +5728,7 @@ msgstr "" "\n" "Ðто дейÑтвие невозможно отменить, файл ÑеÑÑии будет перезапиÑан." -#: editor_ops.cc:6840 +#: editor_ops.cc:6888 msgid "" "Do you really want to remove %1 %2?\n" "\n" @@ -5661,60 +5738,68 @@ msgstr "" "\n" "Ðто дейÑтвие не может быть отменено и файл ÑеÑÑии будут перезапиÑан" -#: editor_ops.cc:6847 +#: editor_ops.cc:6895 msgid "Yes, remove them." msgstr "Да, удалить их." -#: editor_ops.cc:6849 editor_snapshots.cc:160 +#: editor_ops.cc:6897 editor_snapshots.cc:160 msgid "Yes, remove it." msgstr "Да, удалить" -#: editor_ops.cc:6854 editor_ops.cc:6856 +#: editor_ops.cc:6902 editor_ops.cc:6904 msgid "Remove %1" msgstr "Удалить %1" -#: editor_ops.cc:6919 +#: editor_ops.cc:6967 msgid "insert time" msgstr "Ð’Ñтавка времени" -#: editor_ops.cc:7083 +#: editor_ops.cc:7110 +msgid "Cannot insert or delete time when in Lock edit." +msgstr "" + +#: editor_ops.cc:7114 +msgid "cut time" +msgstr "" + +#: editor_ops.cc:7291 msgid "There are too many tracks to fit in the current window" msgstr "Такое количеÑтво дорожек в окне не помеÑтитÑÑ" -#: editor_ops.cc:7144 +#: editor_ops.cc:7352 msgid "Sel" msgstr "Выб." -#: editor_ops.cc:7183 +#: editor_ops.cc:7391 #, c-format msgid "Saved view %u" msgstr "Сохраненный вид %u" -#: editor_ops.cc:7208 +#: editor_ops.cc:7416 msgid "mute regions" msgstr "Приглушение облаÑтей" -#: editor_ops.cc:7210 +#: editor_ops.cc:7418 msgid "mute region" msgstr "Приглушение облаÑти" -#: editor_ops.cc:7247 +#: editor_ops.cc:7455 msgid "combine regions" msgstr "Объединение облаÑтей" -#: editor_ops.cc:7285 +#: editor_ops.cc:7493 msgid "uncombine regions" msgstr "Разъединение облаÑтей" -#: editor_ops.cc:7322 +#: editor_ops.cc:7530 msgid "%1: Locked" msgstr "%1: заблокировано" -#: editor_ops.cc:7329 +#: editor_ops.cc:7537 msgid "Click to unlock" msgstr "СнÑÑ‚ÑŒ замок" -#: editor_ops.cc:7383 +#: editor_ops.cc:7591 msgid "Moving embedded files into session folder" msgstr "Перемещение вÑтроенных файлов в папке ÑеÑÑии" @@ -5726,7 +5811,7 @@ msgstr "Ðазвание региона Ñ Ñ‡Ð¸Ñлом каналов в []'Ñ" msgid "Position of start of region" msgstr "Положение начала облаÑти" -#: editor_regions.cc:114 editor_regions.cc:851 time_info_box.cc:101 +#: editor_regions.cc:114 editor_regions.cc:859 time_info_box.cc:101 msgid "End" msgstr "Конец" @@ -5802,107 +5887,111 @@ msgstr "Да, удалить" msgid "Remove unused regions" msgstr "Удалить неиÑпользуемые облаÑти" -#: editor_regions.cc:818 editor_regions.cc:832 editor_regions.cc:846 +#: editor_regions.cc:694 +msgid "EditorRegions::format_position: negative timecode position: %1" +msgstr "" + +#: editor_regions.cc:824 editor_regions.cc:840 editor_regions.cc:854 msgid "Mult." msgstr "ÐеÑк." -#: editor_regions.cc:849 midi_list_editor.cc:104 time_info_box.cc:94 +#: editor_regions.cc:857 midi_list_editor.cc:104 time_info_box.cc:94 msgid "Start" msgstr "Ðачало" -#: editor_regions.cc:867 editor_regions.cc:883 +#: editor_regions.cc:875 editor_regions.cc:891 msgid "Multiple" msgstr "ÐеÑколько" -#: editor_regions.cc:952 +#: editor_regions.cc:960 msgid "MISSING " msgstr "(ОТСУТСТВУЕТ) " -#: editor_routes.cc:182 +#: editor_routes.cc:183 msgid "SS" msgstr "СС" -#: editor_routes.cc:206 +#: editor_routes.cc:207 msgid "Track/Bus Name" msgstr "Ðазвание дорожи/шины" -#: editor_routes.cc:207 +#: editor_routes.cc:208 msgid "Track/Bus visible ?" msgstr "Дорожка или шина видима?" -#: editor_routes.cc:208 +#: editor_routes.cc:209 msgid "Track/Bus active ?" msgstr "Дорожка или шина активна?" -#: editor_routes.cc:209 +#: editor_routes.cc:210 msgid "MidiInput|I" msgstr "Ð’Ñ…" -#: editor_routes.cc:209 +#: editor_routes.cc:210 msgid "MIDI input enabled" msgstr "Вход MIDI включен" -#: editor_routes.cc:210 +#: editor_routes.cc:211 msgid "Rec|R" msgstr "З" -#: editor_routes.cc:210 +#: editor_routes.cc:211 msgid "Record enabled" msgstr "ГотовноÑÑ‚ÑŒ к запиÑи" -#: editor_routes.cc:211 +#: editor_routes.cc:212 msgid "Muted" msgstr "Пригл." -#: editor_routes.cc:212 +#: editor_routes.cc:213 msgid "Soloed" msgstr "Солир." -#: editor_routes.cc:213 +#: editor_routes.cc:214 msgid "SoloIso|SI" msgstr "ИС" -#: editor_routes.cc:213 +#: editor_routes.cc:214 msgid "Solo Isolated" msgstr "Изолирование Ñоло" -#: editor_routes.cc:214 +#: editor_routes.cc:215 msgid "SoloLock|SS" msgstr "БС" -#: editor_routes.cc:214 +#: editor_routes.cc:215 msgid "Solo Safe (Locked)" msgstr "Сохр. Ñоло (закрыт)" -#: editor_routes.cc:477 mixer_ui.cc:1197 +#: editor_routes.cc:485 mixer_ui.cc:1200 msgid "Hide All" msgstr "Скрыть вÑÑ‘" -#: editor_routes.cc:478 mixer_ui.cc:1198 +#: editor_routes.cc:486 mixer_ui.cc:1201 msgid "Show All Audio Tracks" msgstr "Показать вÑе звуковые дорожки" -#: editor_routes.cc:479 mixer_ui.cc:1199 +#: editor_routes.cc:487 mixer_ui.cc:1202 msgid "Hide All Audio Tracks" msgstr "Скрыть вÑе звуковые дорожки" -#: editor_routes.cc:480 mixer_ui.cc:1200 +#: editor_routes.cc:488 mixer_ui.cc:1203 msgid "Show All Audio Busses" msgstr "Показать вÑе звуковые шины" -#: editor_routes.cc:481 mixer_ui.cc:1201 +#: editor_routes.cc:489 mixer_ui.cc:1204 msgid "Hide All Audio Busses" msgstr "Скрыть вÑе звуковые шины" -#: editor_routes.cc:482 +#: editor_routes.cc:490 msgid "Show All Midi Tracks" msgstr "Показать вÑе MIDI-дорожки" -#: editor_routes.cc:483 +#: editor_routes.cc:491 msgid "Hide All Midi Tracks" msgstr "Скрыть вÑе MIDI-дорожки" -#: editor_routes.cc:484 +#: editor_routes.cc:492 msgid "Show Tracks With Regions Under Playhead" msgstr "Показывать дорожки Ñ Ð¾Ð±Ð»Ð°ÑÑ‚Ñми под указателем воÑпроизведениÑ" @@ -5931,12 +6020,12 @@ msgid "Unhide ranges" msgstr "РаÑкрыть маркеры выделениÑ" #: editor_rulers.cc:224 -msgid "Make Loop range" -msgstr "Создать облаÑÑ‚ÑŒ петли" +msgid "New Loop range" +msgstr "Создать новую петлю" #: editor_rulers.cc:225 -msgid "Make Punch range" -msgstr "Создать облаÑÑ‚ÑŒ врезки" +msgid "New Punch range" +msgstr "Создать новую врезку" #: editor_rulers.cc:230 msgid "New CD track marker" @@ -5946,7 +6035,7 @@ msgstr "Создать маркер дорожки CD" msgid "New Tempo" msgstr "Ð’Ñтавить новый темп" -#: editor_rulers.cc:239 tempo_dialog.cc:296 +#: editor_rulers.cc:239 tempo_dialog.cc:315 msgid "New Meter" msgstr "Ð’Ñтавить новый размер" @@ -6004,11 +6093,11 @@ msgstr "" msgid "stretch/shrink" msgstr "РаÑÑ‚Ñнуть или Ñжать" -#: editor_timefx.cc:129 +#: editor_timefx.cc:130 msgid "pitch shift" msgstr "Смена выÑоты тона" -#: editor_timefx.cc:301 +#: editor_timefx.cc:302 msgid "timefx cannot be started - thread creation error" msgstr "Timefx не может быть запущен, ошибка при Ñоздании потока" @@ -6020,7 +6109,7 @@ msgstr "Панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑƒÑтройÑтвом" msgid "Midi Device Setup" msgstr "ÐаÑтройка MIDI-уÑтройÑтва" -#: engine_dialog.cc:86 engine_dialog.cc:2121 +#: engine_dialog.cc:86 engine_dialog.cc:2441 msgid "Measure" msgstr "Измерить" @@ -6083,7 +6172,7 @@ msgid "When satisfied with the results, click the \"Use results\" button." msgstr "" "ЕÑли результат Ð²Ð°Ñ ÑƒÑтраивает, нажмите кнопку «ИÑпользовать результаты»." -#: engine_dialog.cc:229 engine_dialog.cc:2241 engine_dialog.cc:2251 +#: engine_dialog.cc:229 engine_dialog.cc:2561 engine_dialog.cc:2571 msgid "No measurement results yet" msgstr "Пока нет результатов измерениÑ" @@ -6091,60 +6180,65 @@ msgstr "Пока нет результатов измерениÑ" msgid "Latency" msgstr "Задержка отклика" -#: engine_dialog.cc:396 +#: engine_dialog.cc:401 msgid "Audio System:" msgstr "Ð—Ð²ÑƒÐºÐ¾Ð²Ð°Ñ Ð¿Ð¾Ð´ÑиÑтема:" -#: engine_dialog.cc:433 +#: engine_dialog.cc:438 msgid "Driver:" msgstr "Драйвер:" -#: engine_dialog.cc:439 +#: engine_dialog.cc:445 +msgid "Input Device:" +msgstr "УÑтройÑтво запиÑи:" + +#: engine_dialog.cc:449 +msgid "Output Device:" +msgstr "УÑтройÑтво вывода:" + +#: engine_dialog.cc:456 msgid "Device:" msgstr "УÑтройÑтво:" -#: engine_dialog.cc:444 engine_dialog.cc:543 sfdb_ui.cc:153 sfdb_ui.cc:348 +#: engine_dialog.cc:465 engine_dialog.cc:564 sfdb_ui.cc:153 sfdb_ui.cc:348 #: sfdb_ui.cc:353 msgid "Sample rate:" msgstr "ЧаÑтота ÑÑмплированиÑ:" -#: engine_dialog.cc:450 engine_dialog.cc:550 +#: engine_dialog.cc:471 engine_dialog.cc:571 msgid "Buffer size:" msgstr "Размер буфера:" -#: engine_dialog.cc:468 +#: engine_dialog.cc:489 msgid "Input Channels:" msgstr "Каналов входа:" -#: engine_dialog.cc:481 +#: engine_dialog.cc:502 msgid "Output Channels:" msgstr "Каналов выхода:" -#: engine_dialog.cc:493 +#: engine_dialog.cc:514 msgid "Hardware input latency:" msgstr "Задержка аппаратных входов:" -#: engine_dialog.cc:496 engine_dialog.cc:509 +#: engine_dialog.cc:517 engine_dialog.cc:530 msgid "samples" msgstr "ÑÑмплов" -#: engine_dialog.cc:506 +#: engine_dialog.cc:527 msgid "Hardware output latency:" msgstr "Задержка аппаратных выходов:" -#: engine_dialog.cc:517 +#: engine_dialog.cc:538 msgid "MIDI System:" msgstr "ПодÑиÑтема MIDI:" -#: engine_dialog.cc:535 +#: engine_dialog.cc:556 msgid "" -"The %1 audio backend was configured and started externally.\n" -"This limits your control over it." +"%1 is already running. %2 will connect to it and use the existing settings." msgstr "" -"Ð—Ð²ÑƒÐºÐ¾Ð²Ð°Ñ Ð¿Ð¾Ð´ÑиÑтема %1 была наÑтроена и запущена извне.\n" -"Ð’Ñ‹ не Ñможете полноÑтью контролировать её." -#: engine_dialog.cc:588 +#: engine_dialog.cc:609 msgid "" "Failed to start or connect to audio-engine.\n" "\n" @@ -6154,7 +6248,7 @@ msgstr "" "\n" "Калибровка задержки требует рабочий аудиоинтерфейÑ." -#: engine_dialog.cc:594 +#: engine_dialog.cc:615 msgid "" "Your selected audio configuration is playback- or capture-only.\n" "\n" @@ -6164,133 +6258,141 @@ msgstr "" "\n" "Калибровка задержки требует воÑпроизведение и захват" -#: engine_dialog.cc:675 +#: engine_dialog.cc:696 msgid "MIDI Devices" msgstr "MIDI уÑтройÑтва" -#: engine_dialog.cc:681 +#: engine_dialog.cc:702 msgid "Device" msgstr "УÑтройÑтво" -#: engine_dialog.cc:683 +#: engine_dialog.cc:704 msgid "Hardware Latencies" msgstr "Ðппаратные задержки" -#: engine_dialog.cc:724 +#: engine_dialog.cc:745 msgid "Calibrate" msgstr "Калибровка" -#: engine_dialog.cc:824 +#: engine_dialog.cc:845 msgid "all available channels" msgstr "Ð’Ñе доÑтупные каналы" -#: engine_dialog.cc:1063 latency_gui.cc:39 +#: engine_dialog.cc:1291 latency_gui.cc:39 msgid "sample" msgid_plural "samples" msgstr[0] "ÑÑмпл" msgstr[1] "ÑÑмпла" msgstr[2] "ÑÑмплов" -#: engine_dialog.cc:1114 +#: engine_dialog.cc:1342 #, c-format msgid "(%.1f ms)" msgstr "(%.1f мÑ)" -#: engine_dialog.cc:1617 +#: engine_dialog.cc:1912 msgid "Could not start backend engine %1" msgstr "Ðе удалоÑÑŒ запуÑтить движок бекенда %1" -#: engine_dialog.cc:1668 +#: engine_dialog.cc:1963 msgid "Cannot set driver to %1" msgstr "Ðевозможно иÑпользовать %1 в качеÑтве драйвера." -#: engine_dialog.cc:1672 +#: engine_dialog.cc:1968 +msgid "Cannot set input device name to %1" +msgstr "" + +#: engine_dialog.cc:1972 +msgid "Cannot set output device name to %1" +msgstr "" + +#: engine_dialog.cc:1977 msgid "Cannot set device name to %1" msgstr "Ðевозможно %1 в имени уÑтройÑтва." -#: engine_dialog.cc:1676 +#: engine_dialog.cc:1982 msgid "Cannot set sample rate to %1" msgstr "Ðевозможно иÑпользовать %1 в чаÑтоты ÑÑмплированиÑ." -#: engine_dialog.cc:1680 +#: engine_dialog.cc:1986 msgid "Cannot set buffer size to %1" msgstr "Ðевозможно иÑпользовать %1 в размера буфера." -#: engine_dialog.cc:1686 +#: engine_dialog.cc:1992 msgid "Cannot set input channels to %1" msgstr "Ðе удаетÑÑ ÑƒÑтановить входные каналы в %1" -#: engine_dialog.cc:1690 +#: engine_dialog.cc:1996 msgid "Cannot set output channels to %1" msgstr "Ðе удаетÑÑ ÑƒÑтановить выходные каналы в %1" -#: engine_dialog.cc:1696 +#: engine_dialog.cc:2002 msgid "Cannot set input latency to %1" msgstr "Ðе удаетÑÑ ÑƒÑтановить задержку входа в %1" -#: engine_dialog.cc:1700 +#: engine_dialog.cc:2006 msgid "Cannot set output latency to %1" msgstr "Ðе удаетÑÑ ÑƒÑтановить задержку выхода в %1" -#: engine_dialog.cc:1979 engine_dialog.cc:2038 +#: engine_dialog.cc:2299 engine_dialog.cc:2358 msgid "No signal detected " msgstr "Сигнал не обнаружен" -#: engine_dialog.cc:1992 engine_dialog.cc:2046 port_insert_ui.cc:70 +#: engine_dialog.cc:2312 engine_dialog.cc:2366 port_insert_ui.cc:70 #: port_insert_ui.cc:98 msgid "Disconnected from audio engine" msgstr "Выполнено отÑоединение от звукового движка" -#: engine_dialog.cc:2001 engine_dialog.cc:2054 +#: engine_dialog.cc:2321 engine_dialog.cc:2374 msgid "Detected roundtrip latency: " msgstr "Определены Ñледующие задержки:" -#: engine_dialog.cc:2003 engine_dialog.cc:2056 +#: engine_dialog.cc:2323 engine_dialog.cc:2376 msgid "Systemic latency: " msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ°:" -#: engine_dialog.cc:2010 +#: engine_dialog.cc:2330 msgid "(signal detection error)" msgstr "(ошибка Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ñигнала)" -#: engine_dialog.cc:2016 +#: engine_dialog.cc:2336 msgid "(inverted - bad wiring)" msgstr "(инвертировано - Ð¿Ð»Ð¾Ñ…Ð°Ñ Ð¿Ñ€Ð¾Ð²Ð¾Ð´ÐºÐ°)" -#: engine_dialog.cc:2063 +#: engine_dialog.cc:2383 msgid "(averaging)" msgstr "(уÑреднение)" -#: engine_dialog.cc:2069 +#: engine_dialog.cc:2389 msgid "(too large jitter)" msgstr "(Ñлишком большое дрожание)" -#: engine_dialog.cc:2073 +#: engine_dialog.cc:2393 msgid "(large jitter)" msgstr "(большое дрожание)" -#: engine_dialog.cc:2085 +#: engine_dialog.cc:2405 msgid "Timeout - large MIDI jitter." msgstr "Тайм-аут - большой MIDI джиттер." -#: engine_dialog.cc:2101 port_insert_ui.cc:134 +#: engine_dialog.cc:2421 port_insert_ui.cc:134 msgid "Detecting ..." msgstr "ВыполнÑетÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ..." -#: engine_dialog.cc:2195 +#: engine_dialog.cc:2515 msgid "Disconnect from %1" msgstr "ОтÑоединить от %1" -#: engine_dialog.cc:2199 mixer_strip.cc:1525 route_group_dialog.cc:45 -#: route_time_axis.cc:841 +#: engine_dialog.cc:2519 mixer_strip.cc:1555 route_group_dialog.cc:45 +#: route_time_axis.cc:851 msgid "Active" msgstr "Ðктивно" -#: engine_dialog.cc:2209 +#: engine_dialog.cc:2529 msgid "Connect to %1" msgstr "Соединить Ñ %1" -#: engine_dialog.cc:2214 +#: engine_dialog.cc:2534 msgid "Inactive" msgstr "Ðеактивно" @@ -6326,7 +6428,19 @@ msgstr "ÐкÑпортировать Ñодержимое облаÑти" msgid "Export track output" msgstr "ÐкÑпортировать выходы дорожки" -#: export_channel_selector.cc:575 +#: export_channel_selector.cc:544 +msgid "Select all tracks" +msgstr "Выбрать вÑе дорожки" + +#: export_channel_selector.cc:545 +msgid "Select all busses" +msgstr "Выбрать вÑе шины" + +#: export_channel_selector.cc:546 +msgid "Deselect all" +msgstr "СнÑÑ‚ÑŒ выделение" + +#: export_channel_selector.cc:581 msgid "Track name" msgstr "Ðазвание дорожки" @@ -6461,8 +6575,8 @@ msgstr "Папка:" #: export_filename_selector.cc:37 session_import_dialog.cc:45 #: transcode_video_dialog.cc:59 video_server_dialog.cc:54 -#: video_server_dialog.cc:56 export_video_dialog.cc:81 -#: export_video_dialog.cc:83 +#: video_server_dialog.cc:56 export_video_dialog.cc:77 +#: export_video_dialog.cc:79 msgid "Browse" msgstr "Указать" @@ -6557,39 +6671,43 @@ msgstr "ЗапиÑать файл CUE Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ CD/DVD" msgid "Create TOC file for disk-at-once CD/DVD creation" msgstr "ЗапиÑать файл TOC Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ CD/DVD" -#: export_format_dialog.cc:73 +#: export_format_dialog.cc:72 +msgid "Create chapter mark file for MP4 chapter marks" +msgstr "" + +#: export_format_dialog.cc:74 msgid "Tag file with session's metadata" msgstr "Добавить в файла метаданные ÑеÑÑии" -#: export_format_dialog.cc:470 +#: export_format_dialog.cc:474 msgid "Best (sinc)" msgstr "Ðаилучшее (sinc)" -#: export_format_dialog.cc:475 +#: export_format_dialog.cc:479 msgid "Medium (sinc)" msgstr "Среднее (sinc)" -#: export_format_dialog.cc:480 +#: export_format_dialog.cc:484 msgid "Fast (sinc)" msgstr "БыÑтро (sinc)" -#: export_format_dialog.cc:490 +#: export_format_dialog.cc:494 msgid "Zero order hold" msgstr "Ðулевой порÑдок удержаниÑ" -#: export_format_dialog.cc:895 +#: export_format_dialog.cc:904 msgid "Linear encoding options" msgstr "Параметры линейного кодированиÑ" -#: export_format_dialog.cc:911 +#: export_format_dialog.cc:920 msgid "Ogg Vorbis options" msgstr "Параметры Ogg Vorbis" -#: export_format_dialog.cc:922 +#: export_format_dialog.cc:931 msgid "FLAC options" msgstr "Параметры FLAC" -#: export_format_dialog.cc:939 +#: export_format_dialog.cc:948 msgid "Broadcast Wave options" msgstr "Параметры Broadcast Wave" @@ -6617,7 +6735,7 @@ msgstr "Ð’Ñ‹ дейÑтвительно хотите удалить Ñтот Ð¿Ñ msgid "Show Times as:" msgstr "Показать Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº:" -#: export_timespan_selector.cc:53 processor_box.cc:2468 +#: export_timespan_selector.cc:53 processor_box.cc:2474 msgid "Select All" msgstr "Выделить вÑÑ‘" @@ -6641,39 +6759,39 @@ msgstr "getSoundResourceFile: Ðет правильного ÐºÐ¾Ñ€Ð½Ñ Ð² фай msgid "getSoundResourceFile: root = %1, != response" msgstr "getSoundResourceFile: корень = %1, != ответ" -#: sfdb_freesound_mootcher.cc:410 rc_option_editor.cc:1816 +#: sfdb_freesound_mootcher.cc:410 rc_option_editor.cc:2204 msgid "%1" msgstr "%1" -#: gain_meter.cc:132 gain_meter.cc:400 gain_meter.cc:505 gain_meter.cc:896 +#: gain_meter.cc:134 gain_meter.cc:402 gain_meter.cc:507 gain_meter.cc:898 msgid "-inf" msgstr "-inf" -#: gain_meter.cc:147 gain_meter.cc:958 +#: gain_meter.cc:149 gain_meter.cc:962 msgid "Fader automation mode" msgstr "Режим автоматизации фейдера" -#: gain_meter.cc:148 gain_meter.cc:959 +#: gain_meter.cc:150 gain_meter.cc:963 msgid "Fader automation type" msgstr "Тип автоматизации фейдера" -#: gain_meter.cc:157 gain_meter.cc:829 panner_ui.cc:179 panner_ui.cc:639 +#: gain_meter.cc:159 gain_meter.cc:831 panner_ui.cc:177 panner_ui.cc:639 msgid "Abs" msgstr "ÐбÑ" -#: gain_meter.cc:793 +#: gain_meter.cc:795 msgid "M" msgstr "Ðœ" -#: gain_meter.cc:796 +#: gain_meter.cc:798 msgid "P" msgstr "Сп" -#: gain_meter.cc:799 +#: gain_meter.cc:801 msgid "T" msgstr "К" -#: gain_meter.cc:802 +#: gain_meter.cc:804 msgid "W" msgstr "З" @@ -6681,44 +6799,44 @@ msgstr "З" msgid "<span size=\"large\">Presets</span>" msgstr "<span size=\"large\">Профили</span>" -#: generic_pluginui.cc:97 +#: generic_pluginui.cc:98 msgid "Manual" msgstr "Вручную" -#: generic_pluginui.cc:106 +#: generic_pluginui.cc:107 msgid "All Automation" msgstr "Ð’ÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ð·Ð°Ñ†Ð¸Ñ" -#: generic_pluginui.cc:250 +#: generic_pluginui.cc:251 msgid "Switches" msgstr "Переключатели" -#: generic_pluginui.cc:260 generic_pluginui.cc:436 processor_box.cc:2442 +#: generic_pluginui.cc:261 generic_pluginui.cc:437 processor_box.cc:2448 msgid "Controls" msgstr "Управление" -#: generic_pluginui.cc:293 +#: generic_pluginui.cc:294 msgid "Plugin Editor: could not build control element for port %1" msgstr "Редактор плагинов: невозможно Ñоздать управлÑющий Ñлемент Ð´Ð»Ñ Ð¿Ð¾Ñ€Ñ‚Ð° %1" -#: generic_pluginui.cc:318 +#: generic_pluginui.cc:319 msgid "Plugin Editor: no control for property %1" msgstr "Редактор плагинов: нет регулÑтора Ð´Ð»Ñ ÑвойÑтва %1" -#: generic_pluginui.cc:324 +#: generic_pluginui.cc:325 msgid "Plugin Editor: could not build control element for property %1" msgstr "" "Редаткор плагина: не удалоÑÑŒ Ñоздать контрольный Ñлемент Ð´Ð»Ñ ÑвойÑтва %1" -#: generic_pluginui.cc:468 +#: generic_pluginui.cc:469 msgid "Meters" msgstr "Индикаторы уровнÑ" -#: generic_pluginui.cc:490 +#: generic_pluginui.cc:491 msgid "Automation control" msgstr "Контроль автоматизации" -#: generic_pluginui.cc:497 +#: generic_pluginui.cc:498 msgid "Mgnual" msgstr "Mgnual" @@ -6730,12 +6848,12 @@ msgstr "Управление звуковыми ÑоединениÑми" msgid "MIDI Connection Manager" msgstr "Управление MIDI-ÑоединениÑми" -#: global_port_matrix.cc:201 io_selector.cc:211 mixer_strip.cc:796 -#: mixer_strip.cc:897 +#: global_port_matrix.cc:201 io_selector.cc:211 mixer_strip.cc:826 +#: mixer_strip.cc:927 monitor_section.cc:1279 monitor_selector.cc:189 msgid "Disconnect" msgstr "ОтÑоединить" -#: global_port_matrix.cc:207 io_selector.cc:217 +#: global_port_matrix.cc:207 io_selector.cc:217 monitor_selector.cc:195 msgid "port" msgstr "порт" @@ -6795,47 +6913,51 @@ msgstr "Включить вÑе группы" msgid "Disable All Groups" msgstr "Отключить вÑе группы" -#: insert_time_dialog.cc:46 +#: insert_remove_time_dialog.cc:52 +msgid "Time to remove" +msgstr "" + +#: insert_remove_time_dialog.cc:52 msgid "Time to insert:" msgstr "Ð’ÑтавлÑемый промежуток времени:" -#: insert_time_dialog.cc:54 +#: insert_remove_time_dialog.cc:61 msgid "Intersected regions should:" msgstr "Выделенные облаÑти должны:" -#: insert_time_dialog.cc:57 +#: insert_remove_time_dialog.cc:64 msgid "stay in position" msgstr "ОÑтатьÑÑ Ð½Ð° меÑте" -#: insert_time_dialog.cc:58 +#: insert_remove_time_dialog.cc:65 msgid "move" msgstr "ПеремеÑтитьÑÑ" -#: insert_time_dialog.cc:59 +#: insert_remove_time_dialog.cc:66 msgid "be split" msgstr "РазделитьÑÑ" -#: insert_time_dialog.cc:65 -msgid "Insert time on all the track's playlists" -msgstr "Ð’Ñтавить во вÑе ÑпиÑки воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ¸" +#: insert_remove_time_dialog.cc:73 +msgid "Apply to all the track's playlists" +msgstr "" -#: insert_time_dialog.cc:68 +#: insert_remove_time_dialog.cc:76 msgid "Move glued regions" msgstr "ПеремеÑтить приклеенные облаÑти" -#: insert_time_dialog.cc:70 +#: insert_remove_time_dialog.cc:78 msgid "Move markers" msgstr "ПеремеÑтить маркеры" -#: insert_time_dialog.cc:73 +#: insert_remove_time_dialog.cc:81 msgid "Move glued markers" msgstr "ПеремеÑтить приклеенные маркеры" -#: insert_time_dialog.cc:78 +#: insert_remove_time_dialog.cc:86 msgid "Move locked markers" msgstr "ПеремеÑтить заблокированные маркеры" -#: insert_time_dialog.cc:83 +#: insert_remove_time_dialog.cc:91 msgid "" "Move tempo and meter changes\n" "<i>(may cause oddities in the tempo map)</i>" @@ -6843,7 +6965,11 @@ msgstr "" "ПеремеÑтить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ‚ÐµÐ¼Ð¿Ð° и размера такта\n" "<i>(может привеÑти к ÑтранноÑÑ‚Ñм в карте темпа)</i>" -#: insert_time_dialog.cc:91 +#: insert_remove_time_dialog.cc:99 +msgid "Remove time" +msgstr "" + +#: insert_remove_time_dialog.cc:99 msgid "Insert time" msgstr "Ð’Ñтавить" @@ -6859,24 +6985,24 @@ msgstr "ИмпортируетÑÑ Ñ„Ð°Ð¹Ð»: %1 из %2" msgid "I/O selector" msgstr "Выбор входов и выходов" -#: io_selector.cc:266 +#: io_selector.cc:266 monitor_selector.cc:244 msgid "%1 input" msgstr "%1 вход" -#: io_selector.cc:268 +#: io_selector.cc:268 monitor_selector.cc:246 msgid "%1 output" msgstr "%1 выход" -#: keyboard.cc:70 +#: keyboard.cc:78 msgid "your own" msgstr "Ваш ÑобÑ." -#: keyboard.cc:133 keyboard.cc:157 +#: keyboard.cc:141 keyboard.cc:165 msgid "Default keybindings not found - %1 will be hard to use!" msgstr "" "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ð¹ клавиш недоÑтупна - работать Ñ %1 будет непроÑто!" -#: keyboard.cc:136 +#: keyboard.cc:144 msgid "Key bindings file \"%1\" not found. Default bindings used instead" msgstr "Файл привÑзки клавиш \"%1\" не найден. ИÑп. привÑзки по умолчанию" @@ -6935,7 +7061,7 @@ msgstr[0] "%1 ÑÑмпл" msgstr[1] "%1 ÑÑмпла" msgstr[2] "%1 ÑÑмплов" -#: latency_gui.cc:72 panner_ui.cc:409 +#: latency_gui.cc:72 panner_ui.cc:409 plugin_ui.cc:421 msgid "Reset" msgstr "СброÑить" @@ -7107,20 +7233,40 @@ msgid "Cannot xinstall SIGPIPE error handler" msgstr "Сбой уÑтановки обработчика ошибок SIGPIPE" #: main.cc:351 +msgid "Could not complete pre-GUI initialization" +msgstr "" + +#: main.cc:358 msgid "could not create %1 GUI" msgstr "Ðе удалоÑÑŒ Ñоздать графичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð»Ñ %1" -#: main_clock.cc:52 +#: main_clock.cc:50 msgid "Display delta to edit cursor" msgstr "Показывать разницу Ñ ÐºÑƒÑ€Ñором редактора" -#: marker.cc:273 +#: main_clock.cc:65 tempo_dialog.cc:54 +msgid "Edit Tempo" +msgstr "Изменить темп" + +#: main_clock.cc:66 tempo_dialog.cc:326 +msgid "Edit Meter" +msgstr "Изменить размер" + +#: main_clock.cc:67 +msgid "Insert Tempo Change" +msgstr "Ð’Ñтавить новый темп" + +#: main_clock.cc:68 +msgid "Insert Meter Change" +msgstr "Ð’Ñтавить новый размер" + +#: marker.cc:276 msgid "MarkerText" -msgstr "Маркер ТекÑÑ‚" +msgstr "" #: midi_channel_selector.cc:161 midi_channel_selector.cc:400 -#: midi_channel_selector.cc:436 rc_option_editor.cc:1573 -#: rc_option_editor.cc:2195 sfdb_ui.cc:665 +#: midi_channel_selector.cc:436 rc_option_editor.cc:1950 +#: rc_option_editor.cc:2583 sfdb_ui.cc:665 msgid "None" msgstr "Ðет" @@ -7309,83 +7455,83 @@ msgstr "Ðазвание порта:" msgid "MidiPortDialog" msgstr "MidiPortDialog" -#: midi_region_view.cc:859 +#: midi_region_view.cc:863 msgid "channel edit" msgstr "Правка канала" -#: midi_region_view.cc:895 +#: midi_region_view.cc:899 msgid "velocity edit" msgstr "Правка Ñилы нажатиÑ" -#: midi_region_view.cc:954 +#: midi_region_view.cc:958 msgid "add note" msgstr "Добавка ноты" -#: midi_region_view.cc:1885 +#: midi_region_view.cc:1890 msgid "step add" msgstr "Добавить шаг" -#: midi_region_view.cc:1979 midi_region_view.cc:2002 +#: midi_region_view.cc:1984 midi_region_view.cc:2007 msgid "alter patch change" msgstr "Смена Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ‚Ñ‡Ð°" -#: midi_region_view.cc:2038 +#: midi_region_view.cc:2043 msgid "add patch change" msgstr "Добавка Ñмены программы" -#: midi_region_view.cc:2060 midi_region_view.cc:2061 +#: midi_region_view.cc:2065 midi_region_view.cc:2066 msgid "move patch change" msgstr "Перемещение Ñмены программы" -#: midi_region_view.cc:2073 midi_region_view.cc:2074 +#: midi_region_view.cc:2078 midi_region_view.cc:2079 msgid "delete patch change" msgstr "Удаление Ñмены программы" -#: midi_region_view.cc:2112 +#: midi_region_view.cc:2117 msgid "delete selection" msgstr "Удаление выделениÑ" -#: midi_region_view.cc:2128 +#: midi_region_view.cc:2133 msgid "delete note" msgstr "Удаление ноты" -#: midi_region_view.cc:2587 +#: midi_region_view.cc:2592 msgid "move notes" msgstr "Перемещение ноты" -#: midi_region_view.cc:3070 +#: midi_region_view.cc:3123 msgid "change velocities" msgstr "Смена Ñилы нажатиÑ" -#: midi_region_view.cc:3136 +#: midi_region_view.cc:3189 msgid "transpose" msgstr "ТранÑпозициÑ" -#: midi_region_view.cc:3164 +#: midi_region_view.cc:3217 msgid "change note lengths" msgstr "Смена длительноÑти нот" -#: midi_region_view.cc:3240 +#: midi_region_view.cc:3293 msgid "nudge" msgstr "Толчок" -#: midi_region_view.cc:3255 +#: midi_region_view.cc:3308 msgid "change channel" msgstr "Смена канала" -#: midi_region_view.cc:3295 +#: midi_region_view.cc:3348 msgid "Bank " msgstr "Банк" -#: midi_region_view.cc:3296 +#: midi_region_view.cc:3349 msgid "Program " msgstr "Программа" -#: midi_region_view.cc:3297 +#: midi_region_view.cc:3350 msgid "Channel " msgstr "Канал" -#: midi_region_view.cc:3484 +#: midi_region_view.cc:3537 msgid "paste" msgstr "Ð’Ñтавка" @@ -7518,7 +7664,7 @@ msgstr "Ðвтопрокрутка" msgid "Decimal" msgstr "ДеÑÑтичный" -#: midi_tracer.cc:57 rc_option_editor.cc:740 +#: midi_tracer.cc:57 rc_option_editor.cc:1117 msgid "Enabled" msgstr "Включено" @@ -7666,20 +7812,20 @@ msgstr "Загруженные привÑзки микшера от %1" msgid "Could not find mixer.bindings in search path %1" msgstr "Ðе удалоÑÑŒ найти привÑзки микшера в пути поиÑка %1" -#: mixer_strip.cc:96 mixer_strip.cc:125 +#: mixer_strip.cc:97 mixer_strip.cc:127 msgid "pre" msgstr "До" -#: mixer_strip.cc:98 mixer_strip.cc:127 mixer_strip.cc:374 mixer_strip.cc:1413 -#: rc_option_editor.cc:2323 +#: mixer_strip.cc:99 mixer_strip.cc:129 mixer_strip.cc:384 mixer_strip.cc:1443 +#: rc_option_editor.cc:2739 msgid "Comments" msgstr "Комментарии" -#: mixer_strip.cc:149 +#: mixer_strip.cc:152 msgid "Click to toggle the width of this mixer strip." msgstr "Щёлкните Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ñ‹ полоÑки микшера" -#: mixer_strip.cc:151 +#: mixer_strip.cc:154 msgid "" "\n" "%1-%2-click to toggle the width of all strips." @@ -7687,265 +7833,269 @@ msgstr "" "\n" "%1-%2-щелчок Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ñ‹ вÑех полоÑ." -#: mixer_strip.cc:160 +#: mixer_strip.cc:161 msgid "Hide this mixer strip" msgstr "Скрыть полоÑку микшера" -#: mixer_strip.cc:171 +#: mixer_strip.cc:172 msgid "Click to select metering point" msgstr "Щёлкните Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° точки замера" -#: mixer_strip.cc:187 +#: mixer_strip.cc:188 msgid "Isolate Solo" msgstr "Изолировать Ñоло" -#: mixer_strip.cc:195 +#: mixer_strip.cc:196 msgid "Lock Solo Status" msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ¸ ÑолированиÑ" -#: mixer_strip.cc:197 mixer_strip.cc:2047 +#: mixer_strip.cc:198 mixer_strip.cc:2077 msgid "SoloLock|Lock" msgstr "Блок" -#: mixer_strip.cc:198 mixer_strip.cc:2046 +#: mixer_strip.cc:199 mixer_strip.cc:2076 msgid "Iso" msgstr "Изо." -#: mixer_strip.cc:252 +#: mixer_strip.cc:253 msgid "Mix group" msgstr "Группа микÑа" -#: mixer_strip.cc:370 rc_option_editor.cc:2319 +#: mixer_strip.cc:263 +msgid "Trim: " +msgstr "УÑиление: " + +#: mixer_strip.cc:380 rc_option_editor.cc:2735 msgid "Phase Invert" msgstr "ИнверÑÐ¸Ñ Ñ„Ð°Ð·Ñ‹" -#: mixer_strip.cc:371 rc_option_editor.cc:2320 +#: mixer_strip.cc:381 rc_option_editor.cc:2736 msgid "Record & Monitor" msgstr "ЗапиÑÑŒ и монитор" -#: mixer_strip.cc:372 rc_option_editor.cc:2321 +#: mixer_strip.cc:382 rc_option_editor.cc:2737 msgid "Solo Iso / Lock" msgstr "Соло Iso / Блок" -#: mixer_strip.cc:527 +#: mixer_strip.cc:546 msgid "Enable/Disable MIDI input" msgstr "Включить или выключить MIDI-вход" -#: mixer_strip.cc:691 +#: mixer_strip.cc:712 msgid "Aux" msgstr "Ð’Ñ‹Ñ…" -#: mixer_strip.cc:713 +#: mixer_strip.cc:738 msgid "Snd" msgstr "ПÑл" -#: mixer_strip.cc:779 mixer_strip.cc:882 processor_box.cc:2384 +#: mixer_strip.cc:809 mixer_strip.cc:912 processor_box.cc:2390 msgid "Not connected to audio engine - no I/O changes are possible" msgstr "" "Ðет ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñо звуковой подÑиÑтемой, любые Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ñ…Ð¾Ð´Ð°-выхода " "невозможны." -#: mixer_strip.cc:836 mixer_strip.cc:938 +#: mixer_strip.cc:866 mixer_strip.cc:968 msgid "Add %1 port" msgstr "Добавить %1-порт" -#: mixer_strip.cc:843 mixer_strip.cc:945 +#: mixer_strip.cc:873 mixer_strip.cc:975 monitor_section.cc:1315 msgid "Routing Grid" msgstr "Матрица маршрутизации" -#: mixer_strip.cc:1174 +#: mixer_strip.cc:1204 msgid "<b>INPUT</b> to %1" msgstr "<b>ВХОД</b> в %1" -#: mixer_strip.cc:1177 +#: mixer_strip.cc:1207 monitor_section.cc:1366 msgid "<b>OUTPUT</b> from %1" msgstr "<b>ВЫХОД</b> из %1" -#: mixer_strip.cc:1290 +#: mixer_strip.cc:1320 monitor_section.cc:1453 msgid "Disconnected" msgstr "Ðет ÑоединениÑ" -#: mixer_strip.cc:1416 +#: mixer_strip.cc:1446 msgid "*Comments*" msgstr "*Кмт*" -#: mixer_strip.cc:1423 +#: mixer_strip.cc:1453 msgid "Cmt" msgstr "Кмт" -#: mixer_strip.cc:1426 +#: mixer_strip.cc:1456 msgid "*Cmt*" msgstr "*Кмт*" -#: mixer_strip.cc:1432 +#: mixer_strip.cc:1462 msgid "Click to Add/Edit Comments" msgstr "Ðажмите Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ/правки комментариев" -#: mixer_strip.cc:1476 +#: mixer_strip.cc:1506 msgid "Grp" msgstr "Грп" -#: mixer_strip.cc:1479 +#: mixer_strip.cc:1509 msgid "~G" msgstr "нГр" -#: mixer_strip.cc:1508 route_time_axis.cc:561 +#: mixer_strip.cc:1538 route_time_axis.cc:571 msgid "Color..." msgstr "Цвет..." -#: mixer_strip.cc:1510 route_time_axis.cc:563 +#: mixer_strip.cc:1540 route_time_axis.cc:573 msgid "Comments..." msgstr "Комментарии..." -#: mixer_strip.cc:1512 route_time_axis.cc:565 +#: mixer_strip.cc:1542 route_time_axis.cc:575 msgid "Inputs..." msgstr "Входы..." -#: mixer_strip.cc:1514 route_time_axis.cc:567 +#: mixer_strip.cc:1544 route_time_axis.cc:577 msgid "Outputs..." msgstr "Выходы..." -#: mixer_strip.cc:1519 +#: mixer_strip.cc:1549 msgid "Save As Template..." msgstr "Сохранить как шаблон..." -#: mixer_strip.cc:1533 +#: mixer_strip.cc:1563 msgid "Adjust Latency..." msgstr "Скорректировать задержку..." -#: mixer_strip.cc:1536 +#: mixer_strip.cc:1566 msgid "Protect Against Denormals" msgstr "Защищать от отклонений" -#: mixer_strip.cc:1542 route_time_axis.cc:580 +#: mixer_strip.cc:1572 route_time_axis.cc:590 msgid "Remote Control ID..." msgstr "ID Ð´Ð»Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ управлениÑ..." -#: mixer_strip.cc:1842 +#: mixer_strip.cc:1872 msgid "Pre" msgstr "До" -#: mixer_strip.cc:1846 +#: mixer_strip.cc:1876 msgid "Post" msgstr "ПоÑле" -#: mixer_strip.cc:1862 +#: mixer_strip.cc:1892 msgid "Meter|In" msgstr "Ð’Ñ…" -#: mixer_strip.cc:1866 +#: mixer_strip.cc:1896 msgid "Meter|Pr" msgstr "Прд" -#: mixer_strip.cc:1870 +#: mixer_strip.cc:1900 msgid "Meter|Po" msgstr "ПÑл" -#: mixer_strip.cc:1874 +#: mixer_strip.cc:1904 msgid "Meter|O" msgstr "Ð’Ñ‹Ñ…" -#: mixer_strip.cc:1879 +#: mixer_strip.cc:1909 msgid "Meter|C" msgstr "З" -#: mixer_strip.cc:2027 route_ui.cc:171 +#: mixer_strip.cc:2057 route_ui.cc:170 msgid "Disk" msgstr "ДиÑк" -#: mixer_strip.cc:2039 monitor_section.cc:70 +#: mixer_strip.cc:2069 monitor_section.cc:76 msgid "AFL" msgstr "AFL" -#: mixer_strip.cc:2042 monitor_section.cc:71 +#: mixer_strip.cc:2072 monitor_section.cc:77 msgid "PFL" msgstr "PFL" -#: mixer_strip.cc:2052 meter_strip.cc:383 +#: mixer_strip.cc:2082 meter_strip.cc:387 msgid "MonitorInput|I" msgstr "Ð’Ñ…" -#: mixer_strip.cc:2053 meter_strip.cc:384 +#: mixer_strip.cc:2083 meter_strip.cc:388 msgid "MonitorDisk|D" msgstr "Д" -#: mixer_strip.cc:2065 meter_strip.cc:375 route_time_axis.cc:2697 +#: mixer_strip.cc:2095 meter_strip.cc:379 route_time_axis.cc:2724 msgid "AfterFader|A" msgstr "П" -#: mixer_strip.cc:2068 +#: mixer_strip.cc:2098 msgid "Prefader|P" msgstr "Д" -#: mixer_strip.cc:2073 +#: mixer_strip.cc:2103 msgid "SoloIso|I" msgstr "И" -#: mixer_strip.cc:2074 +#: mixer_strip.cc:2104 msgid "SoloLock|L" msgstr "Б" -#: mixer_strip.cc:2260 +#: mixer_strip.cc:2290 msgid "Pre Fader" msgstr "Предфейдер" -#: mixer_strip.cc:2261 +#: mixer_strip.cc:2291 msgid "Post Fader" msgstr "ПоÑлефейдер" -#: mixer_strip.cc:2305 meter_strip.cc:851 +#: mixer_strip.cc:2336 meter_strip.cc:860 msgid "Change all in Group to %1" msgstr "ПоменÑÑ‚ÑŒ вÑе в группе на %1" -#: mixer_strip.cc:2307 meter_strip.cc:853 +#: mixer_strip.cc:2338 meter_strip.cc:862 msgid "Change all to %1" msgstr "ПоменÑÑ‚ÑŒ вÑе на %1" -#: mixer_strip.cc:2309 meter_strip.cc:855 +#: mixer_strip.cc:2340 meter_strip.cc:864 msgid "Change same track-type to %1" msgstr "ПоменÑÑ‚ÑŒ дорожки одного типа на %1" -#: mixer_ui.cc:130 route_time_axis.cc:818 +#: mixer_ui.cc:130 route_time_axis.cc:828 msgid "Group" msgstr "Группа" -#: mixer_ui.cc:1224 +#: mixer_ui.cc:1227 msgid "track display list item for renamed strip not found!" msgstr "Ðлемент ÑпиÑка Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð½Ð¾Ð³Ð¾ канала микшера не найден!" -#: mixer_ui.cc:1316 +#: mixer_ui.cc:1321 msgid "-all-" msgstr "-вÑе-" -#: mixer_ui.cc:1853 +#: mixer_ui.cc:1858 msgid "Strips" msgstr "Каналы" -#: meter_strip.cc:157 +#: meter_strip.cc:161 msgid "Reset Peak" msgstr "Ð¡Ð±Ñ€Ð¾Ñ Ð¿Ð¸Ðº" -#: meter_strip.cc:378 route_time_axis.cc:2701 +#: meter_strip.cc:382 route_time_axis.cc:2728 msgid "PreFader|P" msgstr "Д" -#: meter_strip.cc:887 +#: meter_strip.cc:896 msgid "Variable height" msgstr "ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð²Ñ‹Ñота" -#: meter_strip.cc:888 +#: meter_strip.cc:897 msgid "Short" msgstr "Короткий" -#: meter_strip.cc:889 +#: meter_strip.cc:898 msgid "Tall" msgstr "Ð’Ñ‹Ñокий" -#: meter_strip.cc:890 +#: meter_strip.cc:899 msgid "Grande" msgstr "Grande" -#: meter_strip.cc:891 +#: meter_strip.cc:900 msgid "Venti" msgstr "Venti" @@ -7954,58 +8104,62 @@ msgid "Peak" msgstr "Пиковое значение" #: meter_patterns.cc:85 +msgid "Peak 0dB" +msgstr "" + +#: meter_patterns.cc:88 msgid "RMS + Peak" msgstr "Среднеквадратичное + пиковое значение" -#: meter_patterns.cc:88 +#: meter_patterns.cc:91 msgid "IEC1/DIN" msgstr "IEC1/DIN" -#: meter_patterns.cc:91 +#: meter_patterns.cc:94 msgid "IEC1/Nordic" msgstr "IEC1/Nordic" -#: meter_patterns.cc:94 +#: meter_patterns.cc:97 msgid "IEC2/BBC" msgstr "IEC2/BBC" -#: meter_patterns.cc:97 +#: meter_patterns.cc:100 msgid "IEC2/EBU" msgstr "IEC2/EBU" -#: meter_patterns.cc:100 +#: meter_patterns.cc:103 msgid "K20" msgstr "K20" -#: meter_patterns.cc:103 +#: meter_patterns.cc:106 msgid "K14" msgstr "K14" -#: meter_patterns.cc:106 +#: meter_patterns.cc:109 msgid "K12" msgstr "К12" -#: meter_patterns.cc:109 +#: meter_patterns.cc:112 msgid "VU" msgstr "VU" -#: monitor_section.cc:69 +#: monitor_section.cc:75 msgid "SiP" msgstr "SiP" -#: monitor_section.cc:96 route_group_dialog.cc:49 +#: monitor_section.cc:102 route_group_dialog.cc:49 msgid "Soloing" msgstr "Солирование" -#: monitor_section.cc:100 +#: monitor_section.cc:106 msgid "Isolated" msgstr "Изолировано" -#: monitor_section.cc:104 +#: monitor_section.cc:110 msgid "Auditioning" msgstr "ПроÑлушивание" -#: monitor_section.cc:114 +#: monitor_section.cc:120 msgid "" "When active, something is solo-isolated.\n" "Click to de-isolate everything" @@ -8013,7 +8167,7 @@ msgstr "" "ЕÑли активно, то что-то будет Ñоло-изолировано.\n" "Ðажмите, чтобы де-изолировать вÑе" -#: monitor_section.cc:117 +#: monitor_section.cc:123 msgid "" "When active, auditioning is active.\n" "Click to stop the audition" @@ -8021,44 +8175,44 @@ msgstr "" "ЕÑли включено, выполнÑетÑÑ Ð¿Ñ€Ð¾Ñлушивание.\n" "Щёлкните, чтобы прекратить его." -#: monitor_section.cc:134 +#: monitor_section.cc:140 msgid "Solo controls affect solo-in-place" msgstr "Управление Ñолированием затрагивает Ñолирование на меÑте" -#: monitor_section.cc:140 +#: monitor_section.cc:146 msgid "Solo controls toggle after-fader-listen" msgstr "Управление Ñолированием переключает поÑлефейдерное проÑлушивание" -#: monitor_section.cc:146 +#: monitor_section.cc:152 msgid "Solo controls toggle pre-fader-listen" msgstr "Управление Ñолированием переключает предфейдерное проÑлушивание" -#: monitor_section.cc:156 +#: monitor_section.cc:162 msgid "Gain increase for soloed signals (0dB is normal)" msgstr "УÑиление Ñолируемого Ñигнала (0dB ÑвлÑетÑÑ Ð½Ð¾Ñ€Ð¼Ð¾Ð¹)" -#: monitor_section.cc:161 monitor_section.cc:190 monitor_section.cc:216 -#: monitor_section.cc:316 +#: monitor_section.cc:167 monitor_section.cc:196 monitor_section.cc:222 +#: monitor_section.cc:322 msgid "0 dB" msgstr "0 Дб" -#: monitor_section.cc:162 +#: monitor_section.cc:168 msgid "3 dB" msgstr "3 Дб" -#: monitor_section.cc:163 +#: monitor_section.cc:169 msgid "6 dB" msgstr "6 Дб" -#: monitor_section.cc:164 +#: monitor_section.cc:170 msgid "10 dB" msgstr "10 Дб" -#: monitor_section.cc:170 +#: monitor_section.cc:176 msgid "Solo Boost" msgstr "УÑиление Ñоло" -#: monitor_section.cc:185 +#: monitor_section.cc:191 msgid "" "Gain reduction non-soloed signals\n" "A value above -inf dB causes \"solo-in-front\"" @@ -8066,51 +8220,51 @@ msgstr "" "Снижение уÑÐ¸Ð»ÐµÐ½Ð¸Ñ Ð½Ðµ-Ñолированных Ñигналов \n" "Значение выше -инф дБ вызывает \"solo-in-front\"" -#: monitor_section.cc:191 monitor_section.cc:218 monitor_section.cc:318 +#: monitor_section.cc:197 monitor_section.cc:224 monitor_section.cc:324 msgid "-6 dB" msgstr "-6 Дб" -#: monitor_section.cc:192 monitor_section.cc:219 monitor_section.cc:319 +#: monitor_section.cc:198 monitor_section.cc:225 monitor_section.cc:325 msgid "-12 dB" msgstr "-12 Дб" -#: monitor_section.cc:193 monitor_section.cc:220 monitor_section.cc:320 +#: monitor_section.cc:199 monitor_section.cc:226 monitor_section.cc:326 msgid "-20 dB" msgstr "-20 Дб" -#: monitor_section.cc:194 +#: monitor_section.cc:200 msgid "OFF" msgstr "ВЫКЛ" -#: monitor_section.cc:196 +#: monitor_section.cc:202 msgid "SiP Cut" msgstr "SiP Обр." -#: monitor_section.cc:211 +#: monitor_section.cc:217 msgid "Gain reduction to use when dimming monitor outputs" msgstr "Снижение уÑÐ¸Ð»ÐµÐ½ÐµÐ¸Ñ Ð´Ð»Ñ Ð¸Ñп. при затемнении мониторов выходов" -#: monitor_section.cc:217 monitor_section.cc:317 +#: monitor_section.cc:223 monitor_section.cc:323 msgid "-3 dB" msgstr "-3 Дб" -#: monitor_section.cc:225 monitor_section.cc:283 monitor_section.cc:353 +#: monitor_section.cc:231 monitor_section.cc:289 monitor_section.cc:372 msgid "Dim" msgstr "Тише" -#: monitor_section.cc:235 +#: monitor_section.cc:241 msgid "Excl. Solo" msgstr "ÐкÑкл. Ñоло" -#: monitor_section.cc:237 +#: monitor_section.cc:243 msgid "Exclusive solo means that only 1 solo is active at a time" msgstr "Одновременно может быть активным только одно Ñоло" -#: monitor_section.cc:244 +#: monitor_section.cc:250 msgid "Solo » Mute" msgstr "Соло » Выкл" -#: monitor_section.cc:246 +#: monitor_section.cc:252 msgid "" "If enabled, solo will override mute\n" "(a soloed & muted track or bus will be audible)" @@ -8118,81 +8272,89 @@ msgstr "" "ЕÑли включено, то Ñоло заменит приглушение\n" "(Ñоло и Ð¿Ñ€Ð¸Ð³Ð»ÑƒÑˆÐµÐ½Ð½Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ°/шина будут Ñлышны)" -#: monitor_section.cc:321 +#: monitor_section.cc:327 msgid "-30 dB" msgstr "-30 Дб" -#: monitor_section.cc:323 +#: monitor_section.cc:341 msgid "Monitor" msgstr "Монитор" -#: monitor_section.cc:361 +#: monitor_section.cc:380 msgid "Inv" msgstr "Инв." -#: monitor_section.cc:744 +#: monitor_section.cc:784 msgid "Switch monitor to mono" msgstr "Переключить мониторинг в монофоничеÑкий режим" -#: monitor_section.cc:747 +#: monitor_section.cc:787 msgid "Cut monitor" msgstr "Выключить мониторинг" -#: monitor_section.cc:750 +#: monitor_section.cc:790 msgid "Dim monitor" msgstr "Приглушить мониторинг" -#: monitor_section.cc:753 +#: monitor_section.cc:793 msgid "Toggle exclusive solo mode" msgstr "Переключить ÑкÑклюзивное Ñолирование" -#: monitor_section.cc:759 +#: monitor_section.cc:799 msgid "Toggle mute overrides solo mode" msgstr "Переключение Ð³Ð»ÑƒÑˆÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚ Ñоло-режим" -#: monitor_section.cc:771 +#: monitor_section.cc:811 msgid "Cut monitor channel %1" msgstr "Вырезать канал %1 мониторинга" -#: monitor_section.cc:776 +#: monitor_section.cc:816 msgid "Dim monitor channel %1" msgstr "Приглушить канал %1 мониторинга" -#: monitor_section.cc:781 +#: monitor_section.cc:821 msgid "Solo monitor channel %1" msgstr "Солировать каналом %1 мониторинга" -#: monitor_section.cc:786 +#: monitor_section.cc:826 msgid "Invert monitor channel %1" msgstr "Инвертировать канал %1 мониторинга" -#: monitor_section.cc:796 +#: monitor_section.cc:836 msgid "In-place solo" msgstr "Ðа меÑте Ñоло" -#: monitor_section.cc:798 +#: monitor_section.cc:838 msgid "After Fade Listen (AFL) solo" msgstr "ПроÑлушивание ÑÐ¾Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñле фейдера (AFL)" -#: monitor_section.cc:800 +#: monitor_section.cc:840 msgid "Pre Fade Listen (PFL) solo" msgstr "ПроÑлушивание ÑÐ¾Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾ фейдера (PFL)" -#: mono_panner.cc:109 stereo_panner.cc:119 +#: monitor_section.cc:1262 +msgid "No session - no I/O changes are possible" +msgstr "" + +#: monitor_selector.cc:199 +msgid "Monitor output selector" +msgstr "" + +#: mono_panner.cc:104 stereo_panner.cc:114 msgid "bypassed" msgstr "Обойдено" -#: mono_panner.cc:123 +#: mono_panner.cc:118 #, c-format msgid "L:%3d R:%3d" msgstr "Левый: %3d, Правый: %3d" -#: mono_panner.cc:203 panner2d.cc:240 stereo_panner.cc:251 +#: mono_panner.cc:202 panner2d.cc:240 stereo_panner.cc:251 #: stereo_panner.cc:274 msgid "Panner|L" msgstr "Л" -#: mono_panner.cc:220 panner2d.cc:241 stereo_panner.cc:249 +#: mono_panner.cc:219 panner2d.cc:241 stereo_panner.cc:249 #: stereo_panner.cc:276 msgid "Panner|R" msgstr "П" @@ -8430,7 +8592,7 @@ msgstr "" msgid "Panner (2D)" msgstr "Панорамирование (2D)" -#: panner2d.cc:856 panner_ui.cc:400 plugin_ui.cc:452 +#: panner2d.cc:856 panner_ui.cc:400 plugin_ui.cc:458 msgid "Bypass" msgstr "Обход" @@ -8438,11 +8600,11 @@ msgstr "Обход" msgid "Panner" msgstr "Панорамирование" -#: panner_ui.cc:72 +#: panner_ui.cc:70 msgid "Pan automation mode" msgstr "Режим автоматизации панорамы" -#: panner_ui.cc:73 +#: panner_ui.cc:71 msgid "Pan automation type" msgstr "Тип автоматизации панорамы" @@ -8644,15 +8806,15 @@ msgstr "Редактор ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ lv2, называемый не-LV2 пРmsgid "Add" msgstr "Добавить" -#: plugin_ui.cc:422 +#: plugin_ui.cc:423 msgid "Description" msgstr "ОпиÑание" -#: plugin_ui.cc:423 +#: plugin_ui.cc:424 msgid "Plugin analysis" msgstr "ЧаÑтотный анализ плагина" -#: plugin_ui.cc:430 +#: plugin_ui.cc:431 msgid "" "Presets (if any) for this plugin\n" "(Both factory and user-created)" @@ -8660,23 +8822,28 @@ msgstr "" "Ð’Ñе доÑтупные профили Ñтого плагина,\n" "как «заводÑкие», так и ÑобÑтвенные" -#: plugin_ui.cc:431 +#: plugin_ui.cc:432 msgid "Save a new preset" msgstr "Сохранить новый профиль" -#: plugin_ui.cc:432 +#: plugin_ui.cc:433 msgid "Save the current preset" msgstr "Сохранить текущий профиль" -#: plugin_ui.cc:433 +#: plugin_ui.cc:434 msgid "Delete the current preset" msgstr "Удалить текущий профиль" -#: plugin_ui.cc:434 +#: plugin_ui.cc:435 +msgid "" +"Reset parameters to default (if no parameters are in automation play mode)" +msgstr "" + +#: plugin_ui.cc:436 msgid "Disable signal processing by the plugin" msgstr "Выключить обработку Ñигнала Ñтим плагином" -#: plugin_ui.cc:467 plugin_ui.cc:663 +#: plugin_ui.cc:473 plugin_ui.cc:685 msgid "" "Click to allow the plugin to receive keyboard events that %1 would normally " "use as a shortcut" @@ -8684,26 +8851,26 @@ msgstr "" "Щёлкните, чтобы разрешить Ñтому плагину получать клавиатурные ÑобытиÑ, " "которые %1 обычно иÑпользует как горÑчие клавиши" -#: plugin_ui.cc:468 +#: plugin_ui.cc:474 msgid "Click to enable/disable this plugin" msgstr "Щелкните, чтобы включить или отключить Ñтот плагин" -#: plugin_ui.cc:507 +#: plugin_ui.cc:517 msgid "latency (%1 sample)" msgid_plural "latency (%1 samples)" msgstr[0] "Задержка (%1 ÑÑмпл)" msgstr[1] "Задержка (%1 ÑÑмпла)" msgstr[2] "Задержка (%1 ÑÑмплов)" -#: plugin_ui.cc:509 +#: plugin_ui.cc:519 msgid "latency (%1 ms)" msgstr "Задержка (%1 мÑ)" -#: plugin_ui.cc:520 +#: plugin_ui.cc:530 msgid "Edit Latency" msgstr "Изменить задержку" -#: plugin_ui.cc:566 +#: plugin_ui.cc:576 msgid "" "Plugin presets are not supported in this build of %1. Consider paying for a " "full version" @@ -8711,7 +8878,7 @@ msgstr "" "ПреÑеты плагинов не поддерживаютÑÑ Ð² Ñтой Ñборке %1. РаÑÑмотрите оплату за " "полную верÑию" -#: plugin_ui.cc:574 +#: plugin_ui.cc:584 msgid "" "Plugin presets are not supported in this build, see the Log window for more " "information." @@ -8719,12 +8886,12 @@ msgstr "" "Ð’ Ñтой Ñборке нет поддержки предуÑтановок плагинов. См. подробнее в окне " "журнала." -#: plugin_ui.cc:670 +#: plugin_ui.cc:692 msgid "Click to allow normal use of %1 keyboard shortcuts" msgstr "" "Щёлкните, чтобы переключитьÑÑ Ð½Ð° обычное иÑпользование горÑчих клавиш %1" -#: plugin_ui.cc:767 +#: plugin_ui.cc:789 msgid "(none)" msgstr "(нет)" @@ -8962,11 +9129,11 @@ msgstr "СвÑзать регулÑторы панорамированиÑ" msgid "on" msgstr "Вкл" -#: processor_box.cc:575 rc_option_editor.cc:2352 rc_option_editor.cc:2366 +#: processor_box.cc:575 rc_option_editor.cc:2768 rc_option_editor.cc:2782 msgid "off" msgstr "Выкл" -#: processor_box.cc:957 +#: processor_box.cc:963 msgid "" "Right-click to add/remove/edit\n" "plugins,inserts,sends and more" @@ -8974,15 +9141,15 @@ msgstr "" "Щелчком правой клавишей мыши можно добавлÑÑ‚ÑŒ, \n" "изменÑÑ‚ÑŒ и удалÑÑ‚ÑŒ плагины, поÑылы, возвраты и пр." -#: processor_box.cc:1431 processor_box.cc:1806 +#: processor_box.cc:1437 processor_box.cc:1812 msgid "Plugin Incompatibility" msgstr "ÐеÑовмеÑтимоÑÑ‚ÑŒ плагинов" -#: processor_box.cc:1434 +#: processor_box.cc:1440 msgid "You attempted to add the plugin \"%1\" in slot %2.\n" msgstr "Ð’Ñ‹ пыталиÑÑŒ добавить плагин \"%1\" в Ñлот %2.\n" -#: processor_box.cc:1440 +#: processor_box.cc:1446 msgid "" "\n" "This plugin has:\n" @@ -8990,21 +9157,21 @@ msgstr "" "\n" "У Ñтого плагина:\n" -#: processor_box.cc:1443 +#: processor_box.cc:1449 msgid "\t%1 MIDI input\n" msgid_plural "\t%1 MIDI inputs\n" msgstr[0] "\t%1 MIDI-вход\n" msgstr[1] "\t%1 MIDI-входа\n" msgstr[2] "\t%1 MIDI-входов\n" -#: processor_box.cc:1447 +#: processor_box.cc:1453 msgid "\t%1 audio input\n" msgid_plural "\t%1 audio inputs\n" msgstr[0] "\t%1 звуковой вход\n" msgstr[1] "\t%1 звуковых входа\n" msgstr[2] "\t%1 звуковых входов\n" -#: processor_box.cc:1450 +#: processor_box.cc:1456 msgid "" "\n" "but at the insertion point, there are:\n" @@ -9012,21 +9179,21 @@ msgstr "" "\n" "но в точке вÑтавки ÑейчаÑ:\n" -#: processor_box.cc:1453 +#: processor_box.cc:1459 msgid "\t%1 MIDI channel\n" msgid_plural "\t%1 MIDI channels\n" msgstr[0] "\t%1 MIDI-канал\n" msgstr[1] "\t%1 MIDI-канала\n" msgstr[2] "\t%1 MIDI-каналов\n" -#: processor_box.cc:1457 +#: processor_box.cc:1463 msgid "\t%1 audio channel\n" msgid_plural "\t%1 audio channels\n" msgstr[0] "\t%1 звуковой канал\n" msgstr[1] "\t%1 звуковых канала\n" msgstr[2] "\t%1 звуковых каналов\n" -#: processor_box.cc:1460 +#: processor_box.cc:1466 msgid "" "\n" "%1 is unable to insert this plugin here.\n" @@ -9034,11 +9201,11 @@ msgstr "" "\n" "%1 не может вÑтавить Ñюда Ñтот плагин.\n" -#: processor_box.cc:1497 +#: processor_box.cc:1503 msgid "Cannot set up new send: %1" msgstr "Ðевозможно наÑтроить новый поÑыл: %1" -#: processor_box.cc:1809 +#: processor_box.cc:1815 msgid "" "You cannot reorder these plugins/sends/inserts\n" "in that way because the inputs and\n" @@ -9048,20 +9215,20 @@ msgstr "" "поÑылы и возвраты подобным образом, поÑкольку \n" "входы и выходы переÑтанут корректно работать." -#: processor_box.cc:1993 +#: processor_box.cc:1999 msgid "Rename Processor" msgstr "Переименовать обработчик" -#: processor_box.cc:2024 +#: processor_box.cc:2030 msgid "At least 100 IO objects exist with a name like %1 - name not changed" msgstr "" "СущеÑтвует по крайней мере 100 объектов IO Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼, как %1 - Ð¸Ð¼Ñ Ð½Ðµ изменено" -#: processor_box.cc:2161 +#: processor_box.cc:2167 msgid "plugin insert constructor failed" msgstr "Сбой конÑтруктора вÑтавки плагина" -#: processor_box.cc:2172 +#: processor_box.cc:2178 msgid "" "Copying the set of processors on the clipboard failed,\n" "probably because the I/O configuration of the plugins\n" @@ -9071,7 +9238,7 @@ msgstr "" "буфер обмена. ВероÑтно, ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð²Ñ…Ð¾Ð´Ð° и выхода\n" "плагинов не Ñовпала Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸ÐµÐ¹ Ñтой дорожки." -#: processor_box.cc:2218 +#: processor_box.cc:2224 msgid "" "Do you really want to remove all processors from %1?\n" "(this cannot be undone)" @@ -9080,15 +9247,15 @@ msgstr "" "обработчики из \"%1\" ?\n" "(отмена невозможна)" -#: processor_box.cc:2222 processor_box.cc:2247 +#: processor_box.cc:2228 processor_box.cc:2253 msgid "Yes, remove them all" msgstr "Да, удалить их вÑе" -#: processor_box.cc:2224 processor_box.cc:2249 +#: processor_box.cc:2230 processor_box.cc:2255 msgid "Remove processors" msgstr "Удалить обработчики" -#: processor_box.cc:2239 +#: processor_box.cc:2245 msgid "" "Do you really want to remove all pre-fader processors from %1?\n" "(this cannot be undone)" @@ -9097,7 +9264,7 @@ msgstr "" "предфейдерные обработчики из \"%1\" ?\n" "(отмена невозможна)" -#: processor_box.cc:2242 +#: processor_box.cc:2248 msgid "" "Do you really want to remove all post-fader processors from %1?\n" "(this cannot be undone)" @@ -9106,59 +9273,59 @@ msgstr "" "поÑлефейдерные обработчики из \"%1\" ?\n" "(отмена невозможна)" -#: processor_box.cc:2430 +#: processor_box.cc:2436 msgid "New Plugin" msgstr "Добавить плагин" -#: processor_box.cc:2433 +#: processor_box.cc:2439 msgid "New Insert" msgstr "Добавить возврат" -#: processor_box.cc:2436 +#: processor_box.cc:2442 msgid "New External Send ..." msgstr "Добавить внешний поÑыл Ñ Ð¿Ð¾Ñ€Ñ‚Ð¾Ð¼ JACK..." -#: processor_box.cc:2440 +#: processor_box.cc:2446 msgid "New Aux Send ..." msgstr "Добавить внешний поÑыл без порта JACK..." -#: processor_box.cc:2443 +#: processor_box.cc:2449 msgid "Send Options" msgstr "Параметры отправки" -#: processor_box.cc:2445 +#: processor_box.cc:2451 msgid "Clear (all)" msgstr "ОчиÑтить (вÑÑ‘)" -#: processor_box.cc:2447 +#: processor_box.cc:2453 msgid "Clear (pre-fader)" msgstr "ОчиÑтить (до фейдера)" -#: processor_box.cc:2449 +#: processor_box.cc:2455 msgid "Clear (post-fader)" msgstr "ОчиÑтить (поÑле фейдера)" -#: processor_box.cc:2475 +#: processor_box.cc:2481 msgid "Activate All" msgstr "Ðктивировать вÑе" -#: processor_box.cc:2477 +#: processor_box.cc:2483 msgid "Deactivate All" msgstr "Деактивировать вÑе" -#: processor_box.cc:2479 +#: processor_box.cc:2485 msgid "A/B Plugins" msgstr "Отключить вÑе" -#: processor_box.cc:2488 +#: processor_box.cc:2494 msgid "Edit with generic controls..." msgstr "Изменить Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñом хоÑта..." -#: processor_box.cc:2791 +#: processor_box.cc:2797 msgid "%1: %2 (by %3)" msgstr "%1: %2 (автор — %3)" -#: processor_box.cc:2793 +#: processor_box.cc:2799 msgid "%1 (by %2)" msgstr "%1 (на %2)" @@ -9210,109 +9377,169 @@ msgstr "Ðачало привÑзки ноты" msgid "Snap note end" msgstr "Конец привÑзки ноты" -#: rc_option_editor.cc:77 +#: rc_option_editor.cc:79 msgid "Click audio file:" msgstr "Файл щелчка доли:" -#: rc_option_editor.cc:80 rc_option_editor.cc:87 +#: rc_option_editor.cc:82 rc_option_editor.cc:89 msgid "Browse..." msgstr "ПроÑмотр..." -#: rc_option_editor.cc:84 +#: rc_option_editor.cc:86 msgid "Click emphasis audio file:" msgstr "Файл щелчка Ñильной доли:" -#: rc_option_editor.cc:116 +#: rc_option_editor.cc:118 msgid "Choose Click" msgstr "Выберите щелчок метронома" -#: rc_option_editor.cc:139 +#: rc_option_editor.cc:141 msgid "Choose Click Emphasis" msgstr "Выберите акцентирующий щелчок метронома" -#: rc_option_editor.cc:170 +#: rc_option_editor.cc:172 msgid "Limit undo history to" msgstr "Ограничивать иÑторию дейÑтвий" -#: rc_option_editor.cc:171 +#: rc_option_editor.cc:173 msgid "Save undo history of" msgstr "Ограничивать Ñохранение иÑтории дейÑтвий" -#: rc_option_editor.cc:180 rc_option_editor.cc:187 +#: rc_option_editor.cc:182 rc_option_editor.cc:189 msgid "commands" msgstr "командами" -#: rc_option_editor.cc:325 +#: rc_option_editor.cc:332 +msgid "Select Keyboard layout:" +msgstr "РаÑкладка клавиатуры:" + +#: rc_option_editor.cc:351 +msgid "When Clicking:" +msgstr "При щелчке:" + +#: rc_option_editor.cc:358 msgid "Edit using:" msgstr "Редактировать Ñ:" -#: rc_option_editor.cc:331 rc_option_editor.cc:357 rc_option_editor.cc:384 +#: rc_option_editor.cc:364 rc_option_editor.cc:393 rc_option_editor.cc:422 msgid "+ button" msgstr "+ клавиша" -#: rc_option_editor.cc:351 +#: rc_option_editor.cc:387 msgid "Delete using:" msgstr "УдалÑÑ‚ÑŒ Ñ:" -#: rc_option_editor.cc:378 +#: rc_option_editor.cc:416 msgid "Insert note using:" msgstr "Ð’ÑтавлÑÑ‚ÑŒ ноты Ñ:" -#: rc_option_editor.cc:405 +#: rc_option_editor.cc:434 +msgid "When Beginning a Drag:" +msgstr "Ð’ начале перетаÑкиваниÑ:" + +#: rc_option_editor.cc:452 +msgid "Copy items using:" +msgstr "Копировать объекты Ñ:" + +#: rc_option_editor.cc:472 +msgid "Constrain drag using:" +msgstr "Ограничить перемещение Ñ:" + +#: rc_option_editor.cc:480 +msgid "When Beginning a Trim:" +msgstr "" + +#: rc_option_editor.cc:498 +msgid "Trim contents using:" +msgstr "" + +#: rc_option_editor.cc:518 +msgid "Anchored trim using:" +msgstr "" + +#: rc_option_editor.cc:561 +msgid "Resize notes relatively using:" +msgstr "" + +#: rc_option_editor.cc:570 +msgid "While Dragging:" +msgstr "При перетаÑкивании:" + +#: rc_option_editor.cc:588 msgid "Ignore snap using:" msgstr "Игнорировать привÑзку Ñ:" -#: rc_option_editor.cc:421 -msgid "Keyboard layout:" -msgstr "РаÑкладка клавиатуры:" +#: rc_option_editor.cc:608 +msgid "Snap relatively using:" +msgstr "" + +#: rc_option_editor.cc:616 +msgid "While Trimming:" +msgstr "" + +#: rc_option_editor.cc:634 +msgid "Resize overlaped regions using:" +msgstr "" -#: rc_option_editor.cc:544 -msgid "Font scaling:" -msgstr "МаÑштаб шрифта:" +#: rc_option_editor.cc:642 +msgid "While Dragging Control Points:" +msgstr "При перетаÑкивании контрольных точек:" -#: rc_option_editor.cc:547 +#: rc_option_editor.cc:660 +msgid "Fine adjust using:" +msgstr "" + +#: rc_option_editor.cc:680 +msgid "Push points using:" +msgstr "" + +#: rc_option_editor.cc:921 +msgid "GUI and Font scaling:" +msgstr "МаÑштаб интерфейÑа и шрифта:" + +#: rc_option_editor.cc:924 msgid "Default" msgstr "По умолчанию" -#: rc_option_editor.cc:573 -msgid "Major font-scale changes require an application restart to re-layout." -msgstr "СущеÑтвенное изменение маÑштаба требует перезапуÑка программы" +#: rc_option_editor.cc:950 +msgid "Adjusting the scale require an application restart to re-layout." +msgstr "ПоÑле коррекции маÑштаба необходимо перезапуÑтить приложение" -#: rc_option_editor.cc:614 +#: rc_option_editor.cc:991 msgid "Waveform Clip Level (dBFS):" msgstr "Уровень обрезки волновой формы (dBFS):" -#: rc_option_editor.cc:666 +#: rc_option_editor.cc:1043 msgid "Playback (seconds of buffering):" msgstr "ВоÑпроизведение (в Ñекундах буферизации):" -#: rc_option_editor.cc:679 +#: rc_option_editor.cc:1056 msgid "Recording (seconds of buffering):" msgstr "ЗапиÑÑŒ (в Ñекундах буферизации):" -#: rc_option_editor.cc:737 +#: rc_option_editor.cc:1114 msgid "Control Surface Protocol" msgstr "УÑтройÑтва управлениÑ" -#: rc_option_editor.cc:746 +#: rc_option_editor.cc:1123 msgid "Double-click on a name to edit settings for an enabled protocol" msgstr "" "Двойной щелчок по названию открывает редактор параметров включённого " "протокола" -#: rc_option_editor.cc:903 +#: rc_option_editor.cc:1280 msgid "Show Video Export Info before export" msgstr "Показывать диалог Ñо Ñправкой об ÑкÑпорте видео" -#: rc_option_editor.cc:904 +#: rc_option_editor.cc:1281 msgid "Show Video Server Startup Dialog" msgstr "Показывать диалог Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ видеоÑервера" -#: rc_option_editor.cc:905 +#: rc_option_editor.cc:1282 msgid "Advanced Setup (remote video server)" msgstr "Дополнительные параметры удалённого видеоÑервера" -#: rc_option_editor.cc:913 +#: rc_option_editor.cc:1290 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." @@ -9321,11 +9548,11 @@ msgstr "" "корневой каталог данных. Ðе иÑпользуйте Ñту функцию, еÑли точно не знаете, " "что делаете." -#: rc_option_editor.cc:915 +#: rc_option_editor.cc:1292 msgid "Video Server URL:" msgstr "URL видеоÑервера:" -#: rc_option_editor.cc:920 +#: rc_option_editor.cc:1297 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 " @@ -9335,11 +9562,11 @@ msgstr "" "example.org: 1554/' и по умолчанию 'http://localhost:1554/', когда " "видеоÑервер работает локально" -#: rc_option_editor.cc:922 +#: rc_option_editor.cc:1299 msgid "Video Folder:" msgstr "Папка Ñ Ð²Ð¸Ð´ÐµÐ¾:" -#: rc_option_editor.cc:927 +#: rc_option_editor.cc:1304 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 " @@ -9354,7 +9581,7 @@ msgstr "" "иÑпользуетÑÑ Ð´Ð»Ñ Ð¼ÐµÑтного видео - проÑмотра и выбора файлов при открытии/" "добавлении видеофайла." -#: rc_option_editor.cc:934 +#: rc_option_editor.cc:1311 msgid "" "<b>When enabled</b> an information window with details is displayed before " "the video-export dialog." @@ -9362,7 +9589,7 @@ msgstr "" "<b>Когда включено,</b> перед ÑкÑпортом видео показываетÑÑ Ð¾ÐºÐ½Ð¾ Ñо Ñправочной " "информацией" -#: rc_option_editor.cc:939 +#: rc_option_editor.cc:1316 msgid "" "<b>When enabled</b> the video server is never launched automatically without " "confirmation" @@ -9370,27 +9597,27 @@ msgstr "" "<b>ЕÑли включено,</b> видеоÑервер никогда автоматичеÑки не запуÑкаетÑÑ Ð±ÐµÐ· " "подтверждениÑ" -#: rc_option_editor.cc:1022 +#: rc_option_editor.cc:1399 msgid "Always Display Plugin Scan Progress" msgstr "Ð’Ñегда показывать прогреÑÑ ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¾Ð²" -#: rc_option_editor.cc:1023 +#: rc_option_editor.cc:1400 msgid "Scan for [new] VST Plugins on Application Start" msgstr "ИÑкать новые плагины VST при запуÑке приложениÑ" -#: rc_option_editor.cc:1024 +#: rc_option_editor.cc:1401 msgid "Scan for AudioUnit Plugins on Application Start" msgstr "ИÑкать новые плагины AudioUnit при запуÑке приложениÑ" -#: rc_option_editor.cc:1035 +#: rc_option_editor.cc:1412 msgid "General" msgstr "Главное" -#: rc_option_editor.cc:1041 +#: rc_option_editor.cc:1418 msgid "Scan for Plugins" msgstr "ПроÑканировать плагины" -#: rc_option_editor.cc:1048 +#: rc_option_editor.cc:1425 msgid "" "<b>When enabled</b> a popup window showing plugin scan progress is displayed " "for indexing (cache load) and discovery (detect new plugins)" @@ -9398,7 +9625,7 @@ msgstr "" "<b>Когда включено,</b> вÑплывающее окно показывает прогреÑÑ Ð¿Ð¾Ð¸Ñка и " "индекÑации звуковых плагинов в ÑиÑтеме" -#: rc_option_editor.cc:1055 +#: rc_option_editor.cc:1432 msgid "" "Specify the default timeout for plugin instantiation in 1/10 seconds. " "Plugins that require more time to load will be blacklisted. A value of 0 " @@ -9408,23 +9635,23 @@ msgstr "" "деÑÑÑ‚Ñ‹Ñ… долÑÑ… Ñекунды. Плагины, требующие больше времени Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸, будут " "блокироватьÑÑ. ЕÑли значение равно нулю, тайм-аут отключаетÑÑ." -#: rc_option_editor.cc:1057 +#: rc_option_editor.cc:1434 msgid "Scan Time Out [deciseconds]" msgstr "Тайм-аут ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ [дециÑек.]" -#: rc_option_editor.cc:1065 +#: rc_option_editor.cc:1442 msgid "VST" msgstr "VST" -#: rc_option_editor.cc:1071 +#: rc_option_editor.cc:1448 msgid "Clear VST Cache" msgstr "ОчиÑтить кÑш VST" -#: rc_option_editor.cc:1075 +#: rc_option_editor.cc:1452 msgid "Clear VST Blacklist" msgstr "ОчиÑтить чёрный ÑпиÑок VST" -#: rc_option_editor.cc:1083 +#: rc_option_editor.cc:1460 msgid "" "<b>When enabled</b> new VST plugins are searched, tested and added to the " "cache index on application start. When disabled new plugins will only be " @@ -9434,19 +9661,19 @@ msgstr "" "теÑтирование и добавление новых плагинов VST в Ð¸Ð½Ð´ÐµÐºÑ ÐºÑша. Когда отключено, " "новые плагины ÑтановÑÑ‚ÑÑ Ð´Ð¾Ñтупными лишь поÑле запуÑка ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ." -#: rc_option_editor.cc:1086 +#: rc_option_editor.cc:1463 msgid "Linux VST Path:" msgstr "Размещение Linux VST:" -#: rc_option_editor.cc:1093 +#: rc_option_editor.cc:1470 msgid "Windows VST Path:" msgstr "Размещение Windows VST:" -#: rc_option_editor.cc:1102 +#: rc_option_editor.cc:1479 msgid "Audio Unit" msgstr "Audio Unit" -#: rc_option_editor.cc:1111 +#: rc_option_editor.cc:1488 msgid "" "<b>When enabled</b> Audio Unit Plugins are discovered on application start. " "When disabled AU plugins will only be available after triggering a 'Scan' " @@ -9459,103 +9686,103 @@ msgstr "" "включено автоматичеÑкое Ñканирование плагинов AU. При любом падении " "программы во Ð²Ñ€ÐµÐ¼Ñ ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкое Ñканирование будет отключено." -#: rc_option_editor.cc:1114 +#: rc_option_editor.cc:1491 msgid "Clear AU Cache" msgstr "ОчиÑтить кÑш AU" -#: rc_option_editor.cc:1118 +#: rc_option_editor.cc:1495 msgid "Clear AU Blacklist" msgstr "ОчиÑтить чёрный ÑпиÑок AU" -#: rc_option_editor.cc:1201 +#: rc_option_editor.cc:1578 msgid "Set Windows VST Search Path" msgstr "УÑтановка пути поиÑка Windows VST" -#: rc_option_editor.cc:1216 +#: rc_option_editor.cc:1593 msgid "Set Linux VST Search Path" msgstr "УÑтановка пути поиÑка Linux VST" -#: rc_option_editor.cc:1297 +#: rc_option_editor.cc:1674 msgid "%1 Preferences" msgstr "Параметры %1" -#: rc_option_editor.cc:1309 +#: rc_option_editor.cc:1686 msgid "DSP CPU Utilization" msgstr "ИÑпользование ЦП" -#: rc_option_editor.cc:1313 +#: rc_option_editor.cc:1690 msgid "Signal processing uses" msgstr "При обработке иÑпользуютÑÑ" -#: rc_option_editor.cc:1318 +#: rc_option_editor.cc:1695 msgid "all but one processor" msgstr "Ð’Ñе процеÑÑоры кроме одного" -#: rc_option_editor.cc:1319 +#: rc_option_editor.cc:1696 msgid "all available processors" msgstr "Ð’Ñе доÑтупные процеÑÑоры" -#: rc_option_editor.cc:1322 +#: rc_option_editor.cc:1699 msgid "%1 processors" msgstr "%1 процеÑÑора" -#: rc_option_editor.cc:1325 +#: rc_option_editor.cc:1702 msgid "This setting will only take effect when %1 is restarted." msgstr "Ðто изменение вÑтупит в Ñилу при Ñледующем запуÑке %1." -#: rc_option_editor.cc:1330 +#: rc_option_editor.cc:1707 msgid "Options|Undo" msgstr "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð´ÐµÐ¹Ñтвий" -#: rc_option_editor.cc:1337 +#: rc_option_editor.cc:1714 msgid "Verify removal of last capture" msgstr "ПроверÑÑ‚ÑŒ удаление поÑледней запиÑи" -#: rc_option_editor.cc:1345 +#: rc_option_editor.cc:1722 msgid "Make periodic backups of the session file" msgstr "ПериодичеÑки Ñоздавать резервные копии файла ÑеÑÑии" -#: rc_option_editor.cc:1350 +#: rc_option_editor.cc:1727 msgid "Session Management" msgstr "Управление ÑеÑÑиÑми" -#: rc_option_editor.cc:1355 +#: rc_option_editor.cc:1732 msgid "Always copy imported files" msgstr "Ð’Ñегда копировать импортируемые файлы" -#: rc_option_editor.cc:1362 +#: rc_option_editor.cc:1739 msgid "Default folder for new sessions:" msgstr "Папка Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… ÑеÑÑий по умолчанию:" -#: rc_option_editor.cc:1370 +#: rc_option_editor.cc:1747 msgid "Maximum number of recent sessions" msgstr "МакÑимальное чиÑло недавних ÑеÑÑий" -#: rc_option_editor.cc:1383 +#: rc_option_editor.cc:1760 msgid "Click gain level" msgstr "Уровень щелчка метронома" -#: rc_option_editor.cc:1388 route_time_axis.cc:266 route_time_axis.cc:821 +#: rc_option_editor.cc:1765 route_time_axis.cc:267 route_time_axis.cc:831 msgid "Automation" msgstr "ÐвтоматизациÑ" -#: rc_option_editor.cc:1393 +#: rc_option_editor.cc:1770 msgid "Thinning factor (larger value => less data)" msgstr "Фактор Ñ€Ð°Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ (большее значение => меньше данных)" -#: rc_option_editor.cc:1402 +#: rc_option_editor.cc:1779 msgid "Automation sampling interval (milliseconds)" msgstr "Интервал ÑÑÐ¼Ð¿Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ð·Ð°Ñ†Ð¸Ð¸ (мÑ)" -#: rc_option_editor.cc:1414 +#: rc_option_editor.cc:1791 msgid "Keep record-enable engaged on stop" msgstr "ГотовноÑÑ‚ÑŒ к запиÑи ÑохранÑетÑÑ Ð¿Ð¾Ñле оÑтановки" -#: rc_option_editor.cc:1423 +#: rc_option_editor.cc:1800 msgid "Play loop is a transport mode" msgstr "ÐŸÐµÑ‚Ð»Ñ Ð²Ð¾ÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ°Ðº режим транÑпорта" -#: rc_option_editor.cc:1428 +#: rc_option_editor.cc:1805 msgid "" "<b>When enabled</b> the loop button does not start playback but forces " "playback to always play the loop\n" @@ -9569,11 +9796,11 @@ msgstr "" "<b>Когда выключено,</b> кнопка петли запуÑкает воÑпроизведение, но при " "оÑтановке режим цикличеÑкого воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ÑÑ." -#: rc_option_editor.cc:1434 +#: rc_option_editor.cc:1811 msgid "Stop recording when an xrun occurs" msgstr "ОÑтанавливать запиÑÑŒ при раÑÑинхронизации" -#: rc_option_editor.cc:1439 +#: rc_option_editor.cc:1816 msgid "" "<b>When enabled</b> %1 will stop recording if an over- or underrun is " "detected by the audio engine" @@ -9581,15 +9808,15 @@ msgstr "" "<b>Когда включено,</b> %1 оÑтановит запиÑÑŒ, еÑли звуковым движком обнаружено " "переполнение или опуÑтошение буфера" -#: rc_option_editor.cc:1445 +#: rc_option_editor.cc:1822 msgid "Create markers where xruns occur" msgstr "Создавать маркеры в точках раÑÑинхронизации" -#: rc_option_editor.cc:1454 +#: rc_option_editor.cc:1831 msgid "Stop at the end of the session" msgstr "ОÑтанавливатьÑÑ Ð² конце ÑеÑÑии" -#: rc_option_editor.cc:1459 +#: rc_option_editor.cc:1836 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" @@ -9602,13 +9829,13 @@ msgstr "" "\n" "<b>Когда выключено</b>, %1 будет воÑпроизводить дальше маркера конца ÑеÑÑии." -#: rc_option_editor.cc:1467 +#: rc_option_editor.cc:1844 msgid "Do seamless looping (not possible when slaved to MTC, LTC etc)" msgstr "" "БеÑшовное цикличеÑкое воÑпроизведение (невозможно, когда Ardour ведом по " "MTC, LTC и Ñ‚.д.)" -#: rc_option_editor.cc:1472 +#: rc_option_editor.cc:1849 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 " @@ -9625,11 +9852,11 @@ msgstr "" "обратно в начало цикла, когда %1 доÑтигает конца, что будет чаÑто приводить " "к небольшим щелчкам или задержке." -#: rc_option_editor.cc:1480 +#: rc_option_editor.cc:1857 msgid "Disable per-track record disarm while rolling" msgstr "Сделать невозможным отключение готовноÑти к запиÑи при захвате" -#: rc_option_editor.cc:1484 +#: rc_option_editor.cc:1861 msgid "" "<b>When enabled</b> this will prevent you from accidentally stopping " "specific tracks recording during a take" @@ -9637,11 +9864,11 @@ msgstr "" "<b>ЕÑли включено</b>, вы не Ñможете нечаÑнно выключить готовноÑÑ‚ÑŒ к запиÑи " "во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ñ…Ð²Ð°Ñ‚Ð° Ñигнала" -#: rc_option_editor.cc:1489 +#: rc_option_editor.cc:1866 msgid "12dB gain reduction during fast-forward and fast-rewind" msgstr "Приглушение громкоÑти на 12Дб при перемотке" -#: rc_option_editor.cc:1493 +#: rc_option_editor.cc:1870 msgid "" "This will reduce the unpleasant increase in perceived volume that occurs " "when fast-forwarding or rewinding through some kinds of audio" @@ -9649,19 +9876,19 @@ msgstr "" "При перемотке воÑпринимаемое на Ñлух резкое увеличение громкоÑти будет " "нивелировано" -#: rc_option_editor.cc:1497 +#: rc_option_editor.cc:1874 msgid "Sync/Slave" msgstr "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¸ ведомый режим" -#: rc_option_editor.cc:1501 +#: rc_option_editor.cc:1878 msgid "External timecode source" msgstr "Внешний иÑточник ÑинхроÑигнала" -#: rc_option_editor.cc:1510 +#: rc_option_editor.cc:1887 msgid "Match session video frame rate to external timecode" msgstr "Ðдаптировать чаÑтоту кадров видео в ÑеÑÑии к внешнему тайм-коду" -#: rc_option_editor.cc:1516 +#: rc_option_editor.cc:1893 msgid "" "This option controls the value of the video frame rate <i>while chasing</i> " "an external timecode source.\n" @@ -9684,11 +9911,11 @@ msgstr "" "Ñтого индикатор чаÑтоты кадров в оÑновном Ñчётчике будет мерцать краÑным, а " "%1 будет конвертировать внешний тайм-код в тайм-код ÑеÑÑии." -#: rc_option_editor.cc:1526 +#: rc_option_editor.cc:1903 msgid "Sync-lock timecode to clock (disable drift compensation)" msgstr "ПривÑзать тайм-код к чаÑам (отключить компенÑацию ÑмещениÑ)" -#: rc_option_editor.cc:1532 +#: rc_option_editor.cc:1909 msgid "" "<b>When enabled</b> %1 will never varispeed when slaved to external " "timecode. Sync Lock indicates that the selected external timecode source " @@ -9709,11 +9936,11 @@ msgstr "" "<b>Когда выключено,</b> %1 компенÑирует потенциальное Ñмещение вне " "завиÑимоÑти от того, разделÑет ли иÑточник тайм-кода Ñинхронизацию чаÑов." -#: rc_option_editor.cc:1547 +#: rc_option_editor.cc:1924 msgid "Lock to 29.9700 fps instead of 30000/1001" msgstr "Принудительно иÑпользовать 29,9700 к/Ñ Ð²Ð¼ÐµÑто 30000/1001" -#: rc_option_editor.cc:1553 +#: rc_option_editor.cc:1930 msgid "" "<b>When enabled</b> the external timecode source is assumed to use 29.97 fps " "instead of 30000/1001.\n" @@ -9736,27 +9963,27 @@ msgstr "" "неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° её противоречие Ñпецификации, потому что иÑпользование именно " "29,97 кадров в Ñекунду имеет нулевое Ñмещение тайм-кода.\n" -#: rc_option_editor.cc:1563 +#: rc_option_editor.cc:1940 msgid "LTC Reader" msgstr "Чтение LTC" -#: rc_option_editor.cc:1567 +#: rc_option_editor.cc:1944 msgid "LTC incoming port" msgstr "Порт Ñ‡Ñ‚ÐµÐ½Ð¸Ñ LTC" -#: rc_option_editor.cc:1582 +#: rc_option_editor.cc:1959 msgid "LTC Generator" msgstr "Генератор LTC" -#: rc_option_editor.cc:1587 +#: rc_option_editor.cc:1964 msgid "Enable LTC generator" msgstr "Включить генератор LTC" -#: rc_option_editor.cc:1594 +#: rc_option_editor.cc:1971 msgid "Send LTC while stopped" msgstr "ОтправлÑÑ‚ÑŒ LTC в оÑтановленном ÑоÑтоÑнии" -#: rc_option_editor.cc:1600 +#: rc_option_editor.cc:1977 msgid "" "<b>When enabled</b> %1 will continue to send LTC information even when the " "transport (playhead) is not moving" @@ -9764,11 +9991,11 @@ msgstr "" "<b>Когда включено,</b> %1 продолжит передавать LTC даже когда транÑпорт " "(воÑпроизведение) не движетÑÑ" -#: rc_option_editor.cc:1606 +#: rc_option_editor.cc:1983 msgid "LTC generator level" msgstr "Уровень генератора LTC" -#: rc_option_editor.cc:1610 +#: rc_option_editor.cc:1987 msgid "" "Specify the Peak Volume of the generated LTC signal in dbFS. A good value " "is 0dBu ^= -18dbFS in an EBU calibrated system" @@ -9776,99 +10003,111 @@ msgstr "" "Укажите пиковую громкоÑÑ‚ÑŒ генерируемого Ñигнала LTC в dbFS. Хорошее качеÑтво " "Ñто 0dBu ^ =-18dbFS в выщеуказанной EBU калиброванной ÑиÑтеме" -#: rc_option_editor.cc:1622 +#: rc_option_editor.cc:1999 msgid "Allow dragging of playhead" msgstr "Разрешить перетаÑкивание ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ Ð²Ð¾ÑпроизведениÑ" -#: rc_option_editor.cc:1630 +#: rc_option_editor.cc:2007 msgid "Move relevant automation when audio regions are moved" msgstr "Перемещать автоматизацию вмеÑте Ñ Ð¾Ð±Ð»Ð°ÑÑ‚Ñми" -#: rc_option_editor.cc:1638 +#: rc_option_editor.cc:2015 msgid "Show meters on tracks in the editor" msgstr "Показывать индикаторы громкоÑти в дорожках" -#: rc_option_editor.cc:1646 +#: rc_option_editor.cc:2023 msgid "Display master-meter in the toolbar" msgstr "Показывать индикатор громкоÑти маÑтер-шины в панели" -#: rc_option_editor.cc:1653 +#: rc_option_editor.cc:2030 msgid "Default fade shape" msgstr "Форма фейда по умолчанию" -#: rc_option_editor.cc:1672 +#: rc_option_editor.cc:2049 msgid "Regions in active edit groups are edited together" msgstr "ОблаÑти в активных редактируемых группах менÑÑŽÑ‚ÑÑ Ð²Ð¼ÐµÑте" -#: rc_option_editor.cc:1673 +#: rc_option_editor.cc:2050 msgid "whenever they overlap in time" msgstr "Когда переÑекаютÑÑ Ð¿Ð¾ времени" -#: rc_option_editor.cc:1674 +#: rc_option_editor.cc:2051 msgid "only if they have identical length, position and origin" msgstr "При одинаковой длительноÑти, позиции и проиÑхождении" -#: rc_option_editor.cc:1684 +#: rc_option_editor.cc:2060 +msgid "Layering model" +msgstr "СпоÑоб наÑлоениÑ" + +#: rc_option_editor.cc:2065 +msgid "later is higher" +msgstr "Более поздние — Ñверху" + +#: rc_option_editor.cc:2066 +msgid "manual layering" +msgstr "ÐаÑлаивание вручную" + +#: rc_option_editor.cc:2072 msgid "Make rubberband selection rectangle snap to the grid" msgstr "ПрÑмоугольное выделение привÑзываетÑÑ Ðº Ñетке" -#: rc_option_editor.cc:1692 +#: rc_option_editor.cc:2080 msgid "Show waveforms in regions" msgstr "Показывать форму волны в облаÑÑ‚ÑÑ…" -#: rc_option_editor.cc:1700 +#: rc_option_editor.cc:2088 msgid "Show gain envelopes in audio regions" msgstr "Показывать огибающие уÑилениÑ" -#: rc_option_editor.cc:1701 +#: rc_option_editor.cc:2089 msgid "in all modes" msgstr "Во вÑех режимах" -#: rc_option_editor.cc:1702 -msgid "only in region gain mode" -msgstr "Только в режиме правки огибающей" +#: rc_option_editor.cc:2090 +msgid "only in Draw and Internal Edit modes" +msgstr "Только в режимах риÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ правки Ñодержимого" -#: rc_option_editor.cc:1709 +#: rc_option_editor.cc:2097 msgid "Waveform scale" msgstr "МаÑштаб Ñигнала" -#: rc_option_editor.cc:1714 +#: rc_option_editor.cc:2102 msgid "linear" msgstr "Линейный" -#: rc_option_editor.cc:1715 +#: rc_option_editor.cc:2103 msgid "logarithmic" msgstr "ЛогарифмичеÑкий" -#: rc_option_editor.cc:1721 +#: rc_option_editor.cc:2109 msgid "Waveform shape" msgstr "Форма Ñигнала" -#: rc_option_editor.cc:1726 +#: rc_option_editor.cc:2114 msgid "traditional" msgstr "ОбычнаÑ" -#: rc_option_editor.cc:1727 +#: rc_option_editor.cc:2115 msgid "rectified" msgstr "От низа" -#: rc_option_editor.cc:1736 +#: rc_option_editor.cc:2124 msgid "Show waveforms for audio while it is being recorded" msgstr "Показывать форму Ñигнала при запиÑи" -#: rc_option_editor.cc:1744 +#: rc_option_editor.cc:2132 msgid "Show zoom toolbar" msgstr "Показывать панель Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð°Ñштабом" -#: rc_option_editor.cc:1752 +#: rc_option_editor.cc:2140 msgid "Update editor window during drags of the summary" msgstr "ОбновлÑÑ‚ÑŒ окно редактора при изменениÑÑ… в панели Ñводки" -#: rc_option_editor.cc:1759 +#: rc_option_editor.cc:2147 msgid "Name new markers" msgstr "Спрашивать об имени каждого нового маркера" -#: rc_option_editor.cc:1765 +#: rc_option_editor.cc:2153 msgid "" "If enabled, popup a dialog when a new marker is created to allow its name to " "be set as it is created.\n" @@ -9881,277 +10120,277 @@ msgstr "" "Ð’Ñ‹ вÑегда можете позднее переименовать маркеры, щелкнув по ним правой " "кнопкой мыши." -#: rc_option_editor.cc:1771 +#: rc_option_editor.cc:2159 msgid "Auto-scroll editor window when dragging near its edges" msgstr "" "ÐвтоматичеÑки прокручивать окно редактора при перетаÑкивании близко к краÑм" -#: rc_option_editor.cc:1778 +#: rc_option_editor.cc:2166 msgid "After splitting selected regions, select" msgstr "ПоÑле Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… облаÑтей выбирать" -#: rc_option_editor.cc:1783 +#: rc_option_editor.cc:2171 msgid "no regions" msgstr "Ðе выбирать облаÑти" -#: rc_option_editor.cc:1786 +#: rc_option_editor.cc:2174 msgid "newly-created regions" msgstr "Только что Ñозданные облаÑти" -#: rc_option_editor.cc:1790 +#: rc_option_editor.cc:2178 msgid "existing selection and newly-created regions" msgstr "Как выбранные ранее, так и только что Ñозданные облаÑти" -#: rc_option_editor.cc:1797 +#: rc_option_editor.cc:2185 msgid "Buffering" msgstr "БуферизациÑ" -#: rc_option_editor.cc:1805 +#: rc_option_editor.cc:2193 msgid "Record monitoring handled by" msgstr "Мониторинг запиÑи выполнÑетÑÑ" -#: rc_option_editor.cc:1811 +#: rc_option_editor.cc:2199 msgid "via Audio Driver" msgstr "Через аудиодрайвер" -#: rc_option_editor.cc:1817 +#: rc_option_editor.cc:2205 msgid "audio hardware" msgstr "Ðппаратным обеÑпечением" -#: rc_option_editor.cc:1824 +#: rc_option_editor.cc:2212 msgid "Tape machine mode" msgstr "Режим плёночного магнитофона" -#: rc_option_editor.cc:1829 +#: rc_option_editor.cc:2217 msgid "Connection of tracks and busses" msgstr "Соединение дорожек и шин" -#: rc_option_editor.cc:1834 +#: rc_option_editor.cc:2222 msgid "Auto-connect master/monitor busses" msgstr "ÐвтоматичеÑки ÑоединÑÑ‚ÑŒ шины master/monitor" -#: rc_option_editor.cc:1841 +#: rc_option_editor.cc:2229 msgid "Connect track inputs" msgstr "СоединÑÑ‚ÑŒ входы дорожек" -#: rc_option_editor.cc:1846 +#: rc_option_editor.cc:2234 msgid "automatically to physical inputs" msgstr "ÐвтоматичеÑки Ñ Ñ„Ð¸Ð·Ð¸Ñ‡ÐµÑкими входами" -#: rc_option_editor.cc:1847 rc_option_editor.cc:1860 +#: rc_option_editor.cc:2235 rc_option_editor.cc:2248 msgid "manually" msgstr "Вручную" -#: rc_option_editor.cc:1853 +#: rc_option_editor.cc:2241 msgid "Connect track and bus outputs" msgstr "СоединÑÑ‚ÑŒ выходы дорожек и шин" -#: rc_option_editor.cc:1858 +#: rc_option_editor.cc:2246 msgid "automatically to physical outputs" msgstr "ÐвтоматичеÑки Ñ Ñ„Ð¸Ð·Ð¸Ñ‡ÐµÑкими выходами" -#: rc_option_editor.cc:1859 +#: rc_option_editor.cc:2247 msgid "automatically to master bus" msgstr "ÐвтоматичеÑки Ñ Ð¾Ð±Ñ‰ÐµÐ¹ шиной" -#: rc_option_editor.cc:1864 +#: rc_option_editor.cc:2252 msgid "Denormals" msgstr "ÐžÑ‚ÐºÐ»Ð¾Ð½ÐµÐ½Ð¸Ñ Ñигнала" -#: rc_option_editor.cc:1869 +#: rc_option_editor.cc:2257 msgid "Use DC bias to protect against denormals" msgstr "ИÑпользовать Ñмещение Ð´Ð»Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ñ‹ от денормализации" -#: rc_option_editor.cc:1876 +#: rc_option_editor.cc:2264 msgid "Processor handling" msgstr "Что делать Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ°Ð¼Ð¸" -#: rc_option_editor.cc:1882 +#: rc_option_editor.cc:2270 msgid "no processor handling" msgstr "Ðичего не делать" -#: rc_option_editor.cc:1888 +#: rc_option_editor.cc:2276 msgid "use FlushToZero" msgstr "ИÑпользовать FlushToZero" -#: rc_option_editor.cc:1895 +#: rc_option_editor.cc:2283 msgid "use DenormalsAreZero" msgstr "ИÑпользовать DenormalsAreZero" -#: rc_option_editor.cc:1902 +#: rc_option_editor.cc:2290 msgid "use FlushToZero and DenormalsAreZero" msgstr "ИÑпользовать FlushToZero и DenormalsAreZero" -#: rc_option_editor.cc:1918 +#: rc_option_editor.cc:2306 msgid "Silence plugins when the transport is stopped" msgstr "Приглушать плагины при оÑтановке транÑпорта" -#: rc_option_editor.cc:1926 +#: rc_option_editor.cc:2314 msgid "Make new plugins active" msgstr "Делать новые плагины активными" -#: rc_option_editor.cc:1936 +#: rc_option_editor.cc:2324 msgid "Enable automatic analysis of audio" msgstr "Включить автоматичеÑкий анализ звука" -#: rc_option_editor.cc:1944 +#: rc_option_editor.cc:2332 msgid "Replicate missing region channels" msgstr "ВоÑÑоздавать отÑутÑтвующие каналы облаÑти" -#: rc_option_editor.cc:1951 rc_option_editor.cc:1953 rc_option_editor.cc:1968 -#: rc_option_editor.cc:1980 rc_option_editor.cc:1992 rc_option_editor.cc:2004 -#: rc_option_editor.cc:2008 rc_option_editor.cc:2016 rc_option_editor.cc:2024 -#: rc_option_editor.cc:2032 rc_option_editor.cc:2034 rc_option_editor.cc:2042 -#: rc_option_editor.cc:2050 rc_option_editor.cc:2058 rc_option_editor.cc:2066 -#: rc_option_editor.cc:2068 +#: rc_option_editor.cc:2339 rc_option_editor.cc:2341 rc_option_editor.cc:2356 +#: rc_option_editor.cc:2368 rc_option_editor.cc:2380 rc_option_editor.cc:2392 +#: rc_option_editor.cc:2396 rc_option_editor.cc:2404 rc_option_editor.cc:2412 +#: rc_option_editor.cc:2420 rc_option_editor.cc:2422 rc_option_editor.cc:2430 +#: rc_option_editor.cc:2438 rc_option_editor.cc:2446 rc_option_editor.cc:2454 +#: rc_option_editor.cc:2456 msgid "Solo / mute" msgstr "Соло/Приглушение" -#: rc_option_editor.cc:1956 +#: rc_option_editor.cc:2344 msgid "Solo-in-place mute cut (dB)" msgstr "Приглушение Ñигнала при Ñолировании (dB)" -#: rc_option_editor.cc:1963 +#: rc_option_editor.cc:2351 msgid "Solo controls are Listen controls" msgstr "Управление Ñолированием работает как управление проÑлушиванием" -#: rc_option_editor.cc:1972 +#: rc_option_editor.cc:2360 msgid "Listen Position" msgstr "Положение проÑлушиваниÑ" -#: rc_option_editor.cc:1977 +#: rc_option_editor.cc:2365 msgid "after-fader (AFL)" msgstr "ПоÑле фейдера (AFL)" -#: rc_option_editor.cc:1978 +#: rc_option_editor.cc:2366 msgid "pre-fader (PFL)" msgstr "До фейдера (PFL)" -#: rc_option_editor.cc:1984 +#: rc_option_editor.cc:2372 msgid "PFL signals come from" msgstr "ИÑточник Ñигнала PFL" -#: rc_option_editor.cc:1989 +#: rc_option_editor.cc:2377 msgid "before pre-fader processors" msgstr "До поÑлефейдерных обработчиков" -#: rc_option_editor.cc:1990 +#: rc_option_editor.cc:2378 msgid "pre-fader but after pre-fader processors" msgstr "До фейдера, но поÑле предфейдерных обработчиков" -#: rc_option_editor.cc:1996 +#: rc_option_editor.cc:2384 msgid "AFL signals come from" msgstr "ИÑточник Ñигнала AFL" -#: rc_option_editor.cc:2001 +#: rc_option_editor.cc:2389 msgid "immediately post-fader" msgstr "Сразу поÑле фейдера" -#: rc_option_editor.cc:2002 +#: rc_option_editor.cc:2390 msgid "after post-fader processors (before pan)" msgstr "За поÑлефейдерными обработчиками и до панорамированиÑ" -#: rc_option_editor.cc:2011 +#: rc_option_editor.cc:2399 msgid "Exclusive solo" msgstr "ÐкÑклюзивное Ñолирование" -#: rc_option_editor.cc:2019 +#: rc_option_editor.cc:2407 msgid "Show solo muting" msgstr "Показывать приглушение при Ñолировании" -#: rc_option_editor.cc:2027 +#: rc_option_editor.cc:2415 msgid "Soloing overrides muting" msgstr "Солирование приоритетнее приглушениÑ" -#: rc_option_editor.cc:2032 +#: rc_option_editor.cc:2420 msgid "Default track / bus muting options" msgstr "Приглушение дорожек и шин по умолчанию затрагивает" -#: rc_option_editor.cc:2037 +#: rc_option_editor.cc:2425 msgid "Mute affects pre-fader sends" msgstr "Предфейдерные поÑылы" -#: rc_option_editor.cc:2045 +#: rc_option_editor.cc:2433 msgid "Mute affects post-fader sends" msgstr "ПоÑлефейдерные поÑылы" -#: rc_option_editor.cc:2053 +#: rc_option_editor.cc:2441 msgid "Mute affects control outputs" msgstr "Выходы мониторинга" -#: rc_option_editor.cc:2061 +#: rc_option_editor.cc:2449 msgid "Mute affects main outputs" msgstr "ОÑновные выходы" -#: rc_option_editor.cc:2066 +#: rc_option_editor.cc:2454 msgid "Send Routing" msgstr "ÐœÐ°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ñылов" -#: rc_option_editor.cc:2071 +#: rc_option_editor.cc:2459 msgid "Link panners of Aux and External Sends with main panner by default" msgstr "По умолчанию ÑвÑзывать внешние поÑылы Ñ Ð¾Ñновным регулÑтором панорамы" -#: rc_option_editor.cc:2079 +#: rc_option_editor.cc:2467 msgid "MIDI read-ahead time (seconds)" msgstr "Чтение MIDI Ñ ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸ÐµÐ¼ (в Ñекундах)" -#: rc_option_editor.cc:2097 +#: rc_option_editor.cc:2485 msgid "Send MIDI Time Code" msgstr "Передавать MIDI Time Code" -#: rc_option_editor.cc:2105 +#: rc_option_editor.cc:2493 msgid "Percentage either side of normal transport speed to transmit MTC" msgstr "Процент по обе Ñтороны от нормальной транÑп. ÑкороÑти Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸ MTC" -#: rc_option_editor.cc:2114 +#: rc_option_editor.cc:2502 msgid "Obey MIDI Machine Control commands" msgstr "ВыполнÑÑ‚ÑŒ команды MIDI Machine Control" -#: rc_option_editor.cc:2122 +#: rc_option_editor.cc:2510 msgid "Send MIDI Machine Control commands" msgstr "ОтправлÑÑ‚ÑŒ команды MIDI Machine Control" -#: rc_option_editor.cc:2130 +#: rc_option_editor.cc:2518 msgid "Send MIDI control feedback" msgstr "ОтправлÑÑ‚ÑŒ отклик на контрольные ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ MIDI" -#: rc_option_editor.cc:2138 +#: rc_option_editor.cc:2526 msgid "Inbound MMC device ID" msgstr "Идентификатор входÑщего уÑтройÑтва MMC" -#: rc_option_editor.cc:2147 +#: rc_option_editor.cc:2535 msgid "Outbound MMC device ID" msgstr "Идентификатор выходÑщего уÑтройÑтва MMC" -#: rc_option_editor.cc:2156 +#: rc_option_editor.cc:2544 msgid "Initial program change" msgstr "ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ñмена программы" -#: rc_option_editor.cc:2165 +#: rc_option_editor.cc:2553 msgid "Display first MIDI bank/program as 0" msgstr "Показывать первый банк/программу MIDI как 0" -#: rc_option_editor.cc:2173 +#: rc_option_editor.cc:2561 msgid "Never display periodic MIDI messages (MTC, MIDI Clock)" msgstr "Ðикогда не показывать периодичеÑкие ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ MIDI (MTC, MIDI Clock)" -#: rc_option_editor.cc:2181 +#: rc_option_editor.cc:2569 msgid "Sound MIDI notes as they are selected" msgstr "ВоÑпроизводить ноты MIDI при их выделении" -#: rc_option_editor.cc:2186 +#: rc_option_editor.cc:2574 msgid "Midi Audition" msgstr "ПроÑлушивание MIDI" -#: rc_option_editor.cc:2190 +#: rc_option_editor.cc:2578 msgid "Midi Audition Synth (LV2)" msgstr "ИнÑтрумент Ð´Ð»Ñ Ð¿Ñ€Ð¾ÑÐ»ÑƒÑˆÐ¸Ð²Ð°Ð½Ð¸Ñ MIDI (LV2)" -#: rc_option_editor.cc:2221 rc_option_editor.cc:2231 rc_option_editor.cc:2233 +#: rc_option_editor.cc:2609 rc_option_editor.cc:2619 rc_option_editor.cc:2621 msgid "User interaction" msgstr "ВзаимодейÑтвие Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼" -#: rc_option_editor.cc:2224 +#: rc_option_editor.cc:2612 msgid "" "Use translations of %1 messages\n" " <i>(requires a restart of %1 to take effect)</i>\n" @@ -10161,141 +10400,159 @@ msgstr "" " <i>(вÑтупает в Ñилу поÑле перезапуÑка %1)</i>\n" " <i>(еÑли Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñзыка доÑтупна)</i>" -#: rc_option_editor.cc:2231 +#: rc_option_editor.cc:2619 msgid "Keyboard" msgstr "Клавиатура" -#: rc_option_editor.cc:2241 +#: rc_option_editor.cc:2629 msgid "Control surface remote ID" msgstr "ID Ð´Ð»Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ управлениÑ" -#: rc_option_editor.cc:2246 +#: rc_option_editor.cc:2634 msgid "assigned by user" msgstr "Ðазначенные пользователем" -#: rc_option_editor.cc:2247 +#: rc_option_editor.cc:2635 msgid "follows order of mixer" msgstr "Следуют порÑдку микшера" -#: rc_option_editor.cc:2261 rc_option_editor.cc:2270 rc_option_editor.cc:2279 -#: rc_option_editor.cc:2289 rc_option_editor.cc:2313 rc_option_editor.cc:2326 -#: rc_option_editor.cc:2335 +#: rc_option_editor.cc:2652 +msgid "Possibly improve slow graphical performance" +msgstr "" + +#: rc_option_editor.cc:2657 +msgid "This requires restarting %1 before having an effect" +msgstr "" + +#: rc_option_editor.cc:2658 rc_option_editor.cc:2661 rc_option_editor.cc:2670 +#: rc_option_editor.cc:2679 rc_option_editor.cc:2689 rc_option_editor.cc:2714 +#: rc_option_editor.cc:2729 rc_option_editor.cc:2742 rc_option_editor.cc:2751 msgid "Preferences|GUI" msgstr "ИнтерфейÑ" -#: rc_option_editor.cc:2264 +#: rc_option_editor.cc:2664 msgid "Graphically indicate mouse pointer hovering over various widgets" msgstr "ПодÑвечивать Ñлементы интерфейÑа под указателем мыши" -#: rc_option_editor.cc:2273 +#: rc_option_editor.cc:2673 msgid "Show tooltips if mouse hovers over a control" msgstr "Показывать вÑплывающие подÑказки к Ñлементам интерфейÑа" -#: rc_option_editor.cc:2282 +#: rc_option_editor.cc:2682 msgid "Use name highlight bars in region displays (requires a restart)" msgstr "ПодÑвечивать Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±Ð»Ð°Ñтей (требует перезапуÑка)" -#: rc_option_editor.cc:2295 +#: rc_option_editor.cc:2695 msgid "update transport clock display at FPS instead of every 100ms" msgstr "ОбновлÑÑ‚ÑŒ чаÑÑ‹ транÑпорта по FPS, а не каждые 100 мÑ" -#: rc_option_editor.cc:2304 +#: rc_option_editor.cc:2705 +msgid "Waveform image cache size (megabytes)" +msgstr "Размер кÑша Ð´Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ¸ волновой формы (МБ)" + +#: rc_option_editor.cc:2713 +msgid "" +"Increasing the cache size uses more memory to store waveform images, which " +"can improve graphical performance." +msgstr "" + +#: rc_option_editor.cc:2720 msgid "Lock timeout (seconds)" msgstr "Тайм-аут блокировки (Ñекунды)" -#: rc_option_editor.cc:2312 +#: rc_option_editor.cc:2728 msgid "Lock GUI after this many idle seconds (zero to never lock)" msgstr "" "Блокировка GUI поÑле Ñтого количеÑтва Ñекунд проÑтоÑ\n" "(0 - никогда не блокировать)" -#: rc_option_editor.cc:2328 +#: rc_option_editor.cc:2744 msgid "Mixer Strip" msgstr "ПолоÑа микшера" -#: rc_option_editor.cc:2338 +#: rc_option_editor.cc:2754 msgid "Use narrow strips in the mixer by default" msgstr "ИÑпользовать тонкие полоÑки в микшере по умолчанию" -#: rc_option_editor.cc:2343 rc_option_editor.cc:2357 rc_option_editor.cc:2376 -#: rc_option_editor.cc:2392 rc_option_editor.cc:2408 rc_option_editor.cc:2422 -#: rc_option_editor.cc:2436 rc_option_editor.cc:2438 +#: rc_option_editor.cc:2759 rc_option_editor.cc:2773 rc_option_editor.cc:2792 +#: rc_option_editor.cc:2808 rc_option_editor.cc:2824 rc_option_editor.cc:2838 +#: rc_option_editor.cc:2852 rc_option_editor.cc:2854 msgid "Preferences|Metering" msgstr "Замер" -#: rc_option_editor.cc:2347 +#: rc_option_editor.cc:2763 msgid "Peak hold time" msgstr "Удерживание пика" -#: rc_option_editor.cc:2353 +#: rc_option_editor.cc:2769 msgid "short" msgstr "Короткое" -#: rc_option_editor.cc:2354 +#: rc_option_editor.cc:2770 msgid "medium" msgstr "Среднее" -#: rc_option_editor.cc:2355 +#: rc_option_editor.cc:2771 msgid "long" msgstr "Долгое" -#: rc_option_editor.cc:2361 +#: rc_option_editor.cc:2777 msgid "DPM fall-off" msgstr "СкороÑÑ‚ÑŒ ÑпаданиÑ" -#: rc_option_editor.cc:2367 +#: rc_option_editor.cc:2783 msgid "slowest [6.6dB/sec]" msgstr "Самое медленное [6,6 Дб/Ñ]" -#: rc_option_editor.cc:2368 +#: rc_option_editor.cc:2784 msgid "slow [8.6dB/sec] (BBC PPM, EBU PPM)" msgstr "Медленное [8,6 Дб/Ñ] (BBC PPM, EBU PPM)" -#: rc_option_editor.cc:2369 +#: rc_option_editor.cc:2785 msgid "slowish [12.0dB/sec] (DIN)" msgstr "Ðеторопливое [12 Дб/Ñ] (DIN)" -#: rc_option_editor.cc:2370 +#: rc_option_editor.cc:2786 msgid "moderate [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)" msgstr "Умеренное [13,3 Дб/Ñ] (EBU Digi PPM, IRT Digi PPM)" -#: rc_option_editor.cc:2371 +#: rc_option_editor.cc:2787 msgid "medium [20dB/sec]" msgstr "Среднее [20 Дб/Ñ]" -#: rc_option_editor.cc:2372 +#: rc_option_editor.cc:2788 msgid "fast [32dB/sec]" msgstr "БыÑтрое [32 Дб/Ñ]" -#: rc_option_editor.cc:2373 +#: rc_option_editor.cc:2789 msgid "faster [46dB/sec]" msgstr "Ещё быÑтрее [46 Дб/Ñ]" -#: rc_option_editor.cc:2374 +#: rc_option_editor.cc:2790 msgid "fastest [70dB/sec]" msgstr "Самое быÑтрое [70 Дб/Ñ]" -#: rc_option_editor.cc:2380 +#: rc_option_editor.cc:2796 msgid "Meter line-up level; 0dBu" msgstr "Точка Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð°; 0dBu" -#: rc_option_editor.cc:2385 rc_option_editor.cc:2401 +#: rc_option_editor.cc:2801 rc_option_editor.cc:2817 msgid "-24dBFS (SMPTE US: 4dBu = -20dBFS)" msgstr "-24dBFS (SMPTE US: 4dBu = -20dBFS)" -#: rc_option_editor.cc:2386 rc_option_editor.cc:2402 +#: rc_option_editor.cc:2802 rc_option_editor.cc:2818 msgid "-20dBFS (SMPTE RP.0155)" msgstr "-20dBFS (SMPTE RP.0155)" -#: rc_option_editor.cc:2387 rc_option_editor.cc:2403 +#: rc_option_editor.cc:2803 rc_option_editor.cc:2819 msgid "-18dBFS (EBU, BBC)" msgstr "-18dBFS (EBU, BBC)" -#: rc_option_editor.cc:2388 rc_option_editor.cc:2404 +#: rc_option_editor.cc:2804 rc_option_editor.cc:2820 msgid "-15dBFS (DIN)" msgstr "-15dBFS (DIN)" -#: rc_option_editor.cc:2390 +#: rc_option_editor.cc:2806 msgid "" "Configure meter-marks and color-knee point for dBFS scale DPM, set reference " "level for IEC1/Nordic, IEC2 PPM and VU meter." @@ -10303,39 +10560,39 @@ msgstr "" "ÐаÑтройка измер. маркеров и цвета точки узла Ð´Ð»Ñ dBFS маÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑˆÐºÐ°Ð»Ñ‹ " "DPM, уÑтановка Ñталонного ÑƒÑ€Ð¾Ð²Ð½Ñ Ð´Ð»Ñ IEC1/Nordic, PPM и VU-метра." -#: rc_option_editor.cc:2396 +#: rc_option_editor.cc:2812 msgid "IEC1/DIN Meter line-up level; 0dBu" msgstr "Точка Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° IEC1/DIN; 0dBu" -#: rc_option_editor.cc:2406 +#: rc_option_editor.cc:2822 msgid "Reference level for IEC1/DIN meter." msgstr "РеференÑный уровень индикатора IEC1/DIN" -#: rc_option_editor.cc:2412 +#: rc_option_editor.cc:2828 msgid "VU Meter standard" msgstr "Стандарт индикатора VU" -#: rc_option_editor.cc:2417 +#: rc_option_editor.cc:2833 msgid "0VU = -2dBu (France)" msgstr "0VU = -2dBu (ФранциÑ)" -#: rc_option_editor.cc:2418 +#: rc_option_editor.cc:2834 msgid "0VU = 0dBu (North America, Australia)" msgstr "0VU = 0dBu (Ð¡ÐµÐ²ÐµÑ€Ð½Ð°Ñ Ðмерика, ÐвÑтралиÑ)" -#: rc_option_editor.cc:2419 +#: rc_option_editor.cc:2835 msgid "0VU = +4dBu (standard)" msgstr "0VU = +4dBu (Ñтандарт)" -#: rc_option_editor.cc:2420 +#: rc_option_editor.cc:2836 msgid "0VU = +8dBu" msgstr "0VU = +8dBu" -#: rc_option_editor.cc:2426 +#: rc_option_editor.cc:2842 msgid "Peak threshold [dBFS]" msgstr "Порог пика (dbFS)" -#: rc_option_editor.cc:2434 +#: rc_option_editor.cc:2850 msgid "" "Specify the audio signal level in dbFS at and above which the meter-peak " "indicator will flash red." @@ -10343,11 +10600,11 @@ msgstr "" "Укажите в dbFS номинальный уровень звукового Ñигнала и пикового, когда " "индикатор мигает краÑным цветом." -#: rc_option_editor.cc:2441 +#: rc_option_editor.cc:2857 msgid "LED meter style" msgstr "Индикатор в Ñтиле LED" -#: rc_option_editor.cc:2449 +#: rc_option_editor.cc:2865 msgid "Theme" msgstr "Тема" @@ -10570,7 +10827,7 @@ msgstr "ГотовноÑÑ‚ÑŒ к запиÑи" msgid "Active state" msgstr "Ðктивное ÑоÑтоÑние" -#: route_group_dialog.cc:53 route_group_dialog.cc:82 theme_manager.cc:90 +#: route_group_dialog.cc:53 route_group_dialog.cc:82 theme_manager.cc:92 msgid "Color" msgstr "Цвет" @@ -10631,172 +10888,172 @@ msgstr "П" msgid "RTAV|A" msgstr "Ð" -#: route_time_axis.cc:181 +#: route_time_axis.cc:182 msgid "Record (Right-click for Step Edit)" msgstr "ЗапиÑÑŒ (Ð¿Ñ€Ð°Ð²Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° мыши активирует пошаговый ввод)" -#: route_time_axis.cc:184 +#: route_time_axis.cc:185 msgid "Record" msgstr "ЗапиÑÑŒ" -#: route_time_axis.cc:254 +#: route_time_axis.cc:255 msgid "Route Group" msgstr "Группа маршрутизации" -#: route_time_axis.cc:264 +#: route_time_axis.cc:265 msgid "MIDI Controllers and Automation" msgstr "MIDI-контроллеры и автоматизациÑ" -#: route_time_axis.cc:495 +#: route_time_axis.cc:496 msgid "Show All Automation" msgstr "Показать вÑÑŽ автоматизацию" -#: route_time_axis.cc:498 +#: route_time_axis.cc:499 msgid "Show Existing Automation" msgstr "Показать ÑущеÑтвующую автоматизацию" -#: route_time_axis.cc:501 +#: route_time_axis.cc:502 msgid "Hide All Automation" msgstr "Скрыть вÑÑŽ автоматизацию" -#: route_time_axis.cc:510 +#: route_time_axis.cc:511 msgid "Processor automation" msgstr "ÐÐ²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ°" -#: route_time_axis.cc:517 +#: route_time_axis.cc:518 msgid "Fader" msgstr "Фейдер" -#: route_time_axis.cc:535 +#: route_time_axis.cc:545 msgid "Pan" msgstr "Панорама" -#: route_time_axis.cc:626 +#: route_time_axis.cc:636 msgid "Overlaid" msgstr "Перекрывают друг друга" -#: route_time_axis.cc:632 +#: route_time_axis.cc:642 msgid "Stacked" msgstr "Ð’ Ñтопке" -#: route_time_axis.cc:640 +#: route_time_axis.cc:650 msgid "Layers" msgstr "Слои" -#: route_time_axis.cc:709 +#: route_time_axis.cc:719 msgid "Automatic (based on I/O connections)" msgstr "ÐвтоматичеÑкое (по ÑоединениÑм входа-выхода)" -#: route_time_axis.cc:718 +#: route_time_axis.cc:728 msgid "(Currently: Existing Material)" msgstr "(СейчаÑ: Ñ Ð·Ð°Ð¿Ð¸Ñанным материалом)" -#: route_time_axis.cc:721 +#: route_time_axis.cc:731 msgid "(Currently: Capture Time)" msgstr "(СейчаÑ: по времени захвата)" -#: route_time_axis.cc:729 +#: route_time_axis.cc:739 msgid "Align With Existing Material" msgstr "С запиÑанным материалом" -#: route_time_axis.cc:734 +#: route_time_axis.cc:744 msgid "Align With Capture Time" msgstr "По времени захвата" -#: route_time_axis.cc:739 +#: route_time_axis.cc:749 msgid "Alignment" msgstr "Выравнивание" -#: route_time_axis.cc:774 +#: route_time_axis.cc:784 msgid "Normal Mode" msgstr "Обычный режим" -#: route_time_axis.cc:780 +#: route_time_axis.cc:790 msgid "Tape Mode" msgstr "Плёночный режим" -#: route_time_axis.cc:786 +#: route_time_axis.cc:796 msgid "Non-Layered Mode" msgstr "БеÑÑлойный режим" -#: route_time_axis.cc:792 +#: route_time_axis.cc:802 msgid "Record Mode" msgstr "Режим запиÑи" -#: route_time_axis.cc:799 route_time_axis.cc:1785 +#: route_time_axis.cc:809 route_time_axis.cc:1796 msgid "Playlist" msgstr "СпиÑок" -#: route_time_axis.cc:1093 +#: route_time_axis.cc:1103 msgid "Rename Playlist" msgstr "Переименовать ÑпиÑок воÑпроизведениÑ" -#: route_time_axis.cc:1094 +#: route_time_axis.cc:1104 msgid "New name for playlist:" msgstr "Ðовое название ÑпиÑка воÑпроизведениÑ:" -#: route_time_axis.cc:1179 +#: route_time_axis.cc:1189 msgid "New Copy Playlist" msgstr "ÐÐ¾Ð²Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ ÑпиÑка воÑпроизведениÑ" -#: route_time_axis.cc:1180 route_time_axis.cc:1233 +#: route_time_axis.cc:1190 route_time_axis.cc:1243 msgid "Name for new playlist:" msgstr "Ðазвание нового ÑпиÑка воÑпроизведениÑ:" -#: route_time_axis.cc:1232 +#: route_time_axis.cc:1242 msgid "New Playlist" msgstr "Ðовый ÑпиÑок воÑпроизведениÑ" -#: route_time_axis.cc:1432 +#: route_time_axis.cc:1442 msgid "You cannot create a track with that name as it is reserved for %1" msgstr "" "Ð’Ñ‹ не можете добавить дорожку Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼, которое зарезервировано Ð´Ð»Ñ %1" -#: route_time_axis.cc:1674 +#: route_time_axis.cc:1685 msgid "New Copy..." msgstr "Создать копию..." -#: route_time_axis.cc:1678 +#: route_time_axis.cc:1689 msgid "New Take" msgstr "Ðовый дубль" -#: route_time_axis.cc:1679 +#: route_time_axis.cc:1690 msgid "Copy Take" msgstr "Скопировать дубль" -#: route_time_axis.cc:1684 +#: route_time_axis.cc:1695 msgid "Clear Current" msgstr "ОчиÑтить текущий" -#: route_time_axis.cc:1687 +#: route_time_axis.cc:1698 msgid "Select From All..." msgstr "Выбрать из вÑех..." -#: route_time_axis.cc:1775 +#: route_time_axis.cc:1786 msgid "Take: %1.%2" msgstr "Дубль: %1.%2" -#: route_time_axis.cc:2165 selection.cc:1007 selection.cc:1061 +#: route_time_axis.cc:2192 selection.cc:1007 selection.cc:1061 msgid "programming error: " msgstr "Ошибка в программе: " -#: route_time_axis.cc:2581 +#: route_time_axis.cc:2608 msgid "Underlays" msgstr "ПодÑлойка" -#: route_time_axis.cc:2584 +#: route_time_axis.cc:2611 msgid "Remove \"%1\"" msgstr "Удалить «%1»" -#: route_time_axis.cc:2634 route_time_axis.cc:2671 +#: route_time_axis.cc:2661 route_time_axis.cc:2698 msgid "programming error: underlay reference pointer pairs are inconsistent!" msgstr "Ошибка в программе: пары подложка и указатель ÑÑылки неÑовмеÑтимы!" -#: route_time_axis.cc:2698 +#: route_time_axis.cc:2725 msgid "After-fade listen (AFL)" msgstr "ПроÑлушивание поÑле фейдера (AFL)" -#: route_time_axis.cc:2702 +#: route_time_axis.cc:2729 msgid "Pre-fade listen (PFL)" msgstr "ПроÑлушивание до фейдера (PFL)" @@ -10808,103 +11065,103 @@ msgstr "Приглушить Ñту дорожку" msgid "Mute other (non-soloed) tracks" msgstr "Приглушить другие (не Ñолирующие) дорожки" -#: route_ui.cc:153 +#: route_ui.cc:152 msgid "Enable recording on this track" msgstr "Включить готовноÑÑ‚ÑŒ к запиÑи Ñтой дорожки" -#: route_ui.cc:161 +#: route_ui.cc:160 msgid "make mixer strips show sends to this bus" msgstr "Показывать в полоÑках микшера поÑылы к Ñтой шине" -#: route_ui.cc:166 +#: route_ui.cc:165 msgid "Monitor input" msgstr "Мониторинг входа" -#: route_ui.cc:172 +#: route_ui.cc:171 msgid "Monitor playback" msgstr "Мониторинг воÑпроизведениÑ" -#: route_ui.cc:679 +#: route_ui.cc:678 msgid "Not connected to AudioEngine - cannot engage record" msgstr "Ðе подключено к AudioEngine. ÐÐµÐ»ÑŒÐ·Ñ Ð·Ð°Ð¿Ð¸Ñывать." -#: route_ui.cc:878 +#: route_ui.cc:877 msgid "Step Entry" msgstr "Пошаговый ввод" -#: route_ui.cc:951 +#: route_ui.cc:950 msgid "Assign all tracks (prefader)" msgstr "Ðазначить вÑем дорожкам (до фейдера)" -#: route_ui.cc:955 +#: route_ui.cc:954 msgid "Assign all tracks and buses (prefader)" msgstr "Ðазначить вÑем дорожкам и шинам (до фейдера)" -#: route_ui.cc:959 +#: route_ui.cc:958 msgid "Assign all tracks (postfader)" msgstr "Ðазначить вÑем дорожкам (поÑле фейдера)" -#: route_ui.cc:963 +#: route_ui.cc:962 msgid "Assign all tracks and buses (postfader)" msgstr "Ðазначить вÑем дорожкам и шинам (поÑле фейдера)" -#: route_ui.cc:967 +#: route_ui.cc:966 msgid "Assign selected tracks (prefader)" msgstr "Ðазначить выбранным дорожкам (до фейдера)" -#: route_ui.cc:971 +#: route_ui.cc:970 msgid "Assign selected tracks and buses (prefader)" msgstr "Ðазначить выбранным дорожкам и шинам (до фейдера)" -#: route_ui.cc:974 +#: route_ui.cc:973 msgid "Assign selected tracks (postfader)" msgstr "Ðазначить выбранным дорожкам (поÑле фейдера)" -#: route_ui.cc:978 +#: route_ui.cc:977 msgid "Assign selected tracks and buses (postfader)" msgstr "Ðазначить выбранным дорожкам и шинам (поÑле фейдера)" -#: route_ui.cc:981 +#: route_ui.cc:980 msgid "Copy track/bus gains to sends" msgstr "Скопировать фейдеры дорожки/шины в поÑылы" -#: route_ui.cc:982 +#: route_ui.cc:981 msgid "Set sends gain to -inf" msgstr "УÑтановка поÑылает уÑиление на -inf" -#: route_ui.cc:983 +#: route_ui.cc:982 msgid "Set sends gain to 0dB" msgstr "УÑтановка поÑылает уÑиление на 0dB" -#: route_ui.cc:1303 +#: route_ui.cc:1301 msgid "Solo Isolate" msgstr "Изолировать Ñоло" -#: route_ui.cc:1310 +#: route_ui.cc:1308 msgid "Solo Safe" msgstr "Блокировка ÑолированиÑ" -#: route_ui.cc:1332 +#: route_ui.cc:1330 msgid "Pre Fader Sends" msgstr "ПоÑылки префейдера" -#: route_ui.cc:1338 +#: route_ui.cc:1336 msgid "Post Fader Sends" msgstr "ПоÑылки поÑтфейдера" -#: route_ui.cc:1344 +#: route_ui.cc:1342 msgid "Control Outs" msgstr "Контрольные выходы" -#: route_ui.cc:1350 +#: route_ui.cc:1348 msgid "Main Outs" msgstr "Главные выходы" -#: route_ui.cc:1482 +#: route_ui.cc:1480 msgid "Color Selection" msgstr "Выбор цвета" -#: route_ui.cc:1547 +#: route_ui.cc:1545 msgid "" "The use of colons (':') is discouraged in track and bus names.\n" "Do you want to use this new name?" @@ -10912,51 +11169,51 @@ msgstr "" "ИÑпользование Ð´Ð²Ð¾ÐµÑ‚Ð¾Ñ‡Ð¸Ñ Ð² названиÑÑ… дорожек и шин не поощрÑетÑÑ.\n" "Ð’Ñ‹ точно хотите оÑтавить двоеточие?" -#: route_ui.cc:1551 +#: route_ui.cc:1549 msgid "Use the new name" msgstr "ИÑпользовать новое имÑ" -#: route_ui.cc:1552 +#: route_ui.cc:1550 msgid "Re-edit the name" msgstr "Повторно изменить название" -#: route_ui.cc:1565 +#: route_ui.cc:1563 msgid "Rename Track" msgstr "Переименование дорожки" -#: route_ui.cc:1567 +#: route_ui.cc:1565 msgid "Rename Bus" msgstr "Переименование шины" -#: route_ui.cc:1635 +#: route_ui.cc:1633 msgid ": comment editor" msgstr ": Редактор комментариев" -#: route_ui.cc:1801 +#: route_ui.cc:1799 msgid " latency" msgstr " задержка" -#: route_ui.cc:1814 +#: route_ui.cc:1812 msgid "Cannot create route template directory %1" msgstr "Ðе удалоÑÑŒ Ñоздать папку Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°Ð¼Ð¸ маршрутизации %1" -#: route_ui.cc:1820 +#: route_ui.cc:1818 msgid "Save As Template" msgstr "Сохранить как шаблон" -#: route_ui.cc:1821 +#: route_ui.cc:1819 msgid "Template name:" msgstr "Ðазвание шаблона:" -#: route_ui.cc:1902 +#: route_ui.cc:1900 msgid "Remote Control ID" msgstr "ID Ð´Ð»Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ управлениÑ" -#: route_ui.cc:1912 +#: route_ui.cc:1910 msgid "Remote control ID:" msgstr "ID Ð´Ð»Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ управлениÑ:" -#: route_ui.cc:1926 +#: route_ui.cc:1924 msgid "" "The remote control ID of %1 is: %2\n" "\n" @@ -10968,15 +11225,15 @@ msgstr "" "\n" "%3 не может получить другой ID." -#: route_ui.cc:1930 +#: route_ui.cc:1928 msgid "the master bus" msgstr "МаÑтер-шина" -#: route_ui.cc:1930 +#: route_ui.cc:1928 msgid "the monitor bus" msgstr "Шина мониторинга" -#: route_ui.cc:1932 +#: route_ui.cc:1930 msgid "" "The remote control ID of %5 is: %2\n" "\n" @@ -10995,7 +11252,7 @@ msgstr "" "%3ИÑпользуйте вкладку пользовательÑкой интеракции окна УÑтановки, еÑли вы " "хотите изменить Ñто %4" -#: route_ui.cc:1989 +#: route_ui.cc:1987 msgid "" "Left-click to invert (phase reverse) channel %1 of this track. Right-click " "to show menu." @@ -11003,10 +11260,34 @@ msgstr "" "Щелчком левой клавиши мыши инвертируетÑÑ (инверÑÐ¸Ñ Ñ„Ð°Ð·Ñ‹) \n" "канал %1 Ñтой дорожки. По правой клавише вызываетÑÑ Ð¼ÐµÐ½ÑŽ." -#: route_ui.cc:1991 +#: route_ui.cc:1989 msgid "Click to show a menu of channels for inversion (phase reverse)" msgstr "Кликните Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÐ°Ð·Ð° меню каналов Ð´Ð»Ñ Ð¸Ð½Ð²ÐµÑ€Ñии (Ñ€ÐµÐ²ÐµÑ€Ñ Ñ„Ð°Ð·Ñ‹)" +#: save_as_dialog.cc:34 +msgid "Switch to newly-saved version" +msgstr "ПереключитьÑÑ Ð½Ð° только что Ñозданную верÑию" + +#: save_as_dialog.cc:35 +msgid "Copy media to new session" +msgstr "Скопировать данные в новую ÑеÑÑию" + +#: save_as_dialog.cc:36 +msgid "Copy external media into new session" +msgstr "Скопировать внешние данные в новую ÑеÑÑию" + +#: save_as_dialog.cc:37 +msgid "Newly-saved session should be empty" +msgstr "СвежеÑÐ¾Ð·Ð´Ð°Ð½Ð½Ð°Ñ ÑеÑÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть пуÑтой" + +#: save_as_dialog.cc:48 +msgid "Save as session name" +msgstr "Ðовое название ÑеÑÑии" + +#: save_as_dialog.cc:55 +msgid "Parent directory/folder" +msgstr "Куда Ñохранить каталог ÑеанÑа" + #: search_path_option.cc:35 msgid "Select folder to search for media" msgstr "Выберите папку Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка звуковых данных" @@ -12027,11 +12308,11 @@ msgstr "Проценты" msgid "Units" msgstr "Единица измерениÑ" -#: shuttle_control.cc:188 shuttle_control.cc:609 +#: shuttle_control.cc:188 shuttle_control.cc:610 msgid "Sprung" msgstr "Прыжок" -#: shuttle_control.cc:192 shuttle_control.cc:612 +#: shuttle_control.cc:192 shuttle_control.cc:613 msgid "Wheel" msgstr "Переход" @@ -12039,21 +12320,21 @@ msgstr "Переход" msgid "Maximum speed" msgstr "МакÑ. ÑкороÑÑ‚ÑŒ" -#: shuttle_control.cc:568 +#: shuttle_control.cc:569 msgid "Playing" msgstr "ВоÑпроизведение" -#: shuttle_control.cc:583 +#: shuttle_control.cc:584 #, c-format msgid "<<< %+d semitones" msgstr "<<< %+d полутон" -#: shuttle_control.cc:585 +#: shuttle_control.cc:586 #, c-format msgid ">>> %+d semitones" msgstr ">>> %+d полутон" -#: shuttle_control.cc:590 +#: shuttle_control.cc:591 msgid "Stopped" msgstr "ОÑтановлено" @@ -12610,7 +12891,7 @@ msgstr "Переключить ввод аккордов" msgid "Sustain Selected Notes by Note Length" msgstr "Выдерживать выбранные ноты по длине" -#: stereo_panner.cc:133 +#: stereo_panner.cc:128 #, c-format msgid "L:%3d R:%3d Width:%d%%" msgstr "Левый:%3d, Правый:%3d, Ширина: %d%%" @@ -12655,52 +12936,48 @@ msgstr "ПульÑÐ¸Ñ€ÑƒÑŽÑ‰Ð°Ñ Ð½Ð¾Ñ‚Ð°" msgid "Tap tempo" msgstr "TAP времÑ" -#: tempo_dialog.cc:54 -msgid "Edit Tempo" -msgstr "Изменить темп" - -#: tempo_dialog.cc:77 tempo_dialog.cc:78 tempo_dialog.cc:324 -#: tempo_dialog.cc:325 +#: tempo_dialog.cc:77 tempo_dialog.cc:78 tempo_dialog.cc:343 +#: tempo_dialog.cc:344 msgid "whole" msgstr "целаÑ" -#: tempo_dialog.cc:79 tempo_dialog.cc:80 tempo_dialog.cc:326 -#: tempo_dialog.cc:327 +#: tempo_dialog.cc:79 tempo_dialog.cc:80 tempo_dialog.cc:345 +#: tempo_dialog.cc:346 msgid "second" msgstr "1/2" -#: tempo_dialog.cc:81 tempo_dialog.cc:82 tempo_dialog.cc:328 -#: tempo_dialog.cc:329 +#: tempo_dialog.cc:81 tempo_dialog.cc:82 tempo_dialog.cc:347 +#: tempo_dialog.cc:348 msgid "third" msgstr "1/3" -#: tempo_dialog.cc:83 tempo_dialog.cc:84 tempo_dialog.cc:330 -#: tempo_dialog.cc:331 +#: tempo_dialog.cc:83 tempo_dialog.cc:84 tempo_dialog.cc:349 +#: tempo_dialog.cc:350 msgid "quarter" msgstr "1/4" -#: tempo_dialog.cc:85 tempo_dialog.cc:86 tempo_dialog.cc:332 -#: tempo_dialog.cc:333 +#: tempo_dialog.cc:85 tempo_dialog.cc:86 tempo_dialog.cc:351 +#: tempo_dialog.cc:352 msgid "eighth" msgstr "1/8" -#: tempo_dialog.cc:87 tempo_dialog.cc:88 tempo_dialog.cc:334 -#: tempo_dialog.cc:335 +#: tempo_dialog.cc:87 tempo_dialog.cc:88 tempo_dialog.cc:353 +#: tempo_dialog.cc:354 msgid "sixteenth" msgstr "1/16" -#: tempo_dialog.cc:89 tempo_dialog.cc:90 tempo_dialog.cc:336 -#: tempo_dialog.cc:337 +#: tempo_dialog.cc:89 tempo_dialog.cc:90 tempo_dialog.cc:355 +#: tempo_dialog.cc:356 msgid "thirty-second" msgstr "1/32" -#: tempo_dialog.cc:91 tempo_dialog.cc:92 tempo_dialog.cc:338 -#: tempo_dialog.cc:339 +#: tempo_dialog.cc:91 tempo_dialog.cc:92 tempo_dialog.cc:357 +#: tempo_dialog.cc:358 msgid "sixty-fourth" msgstr "1/64" -#: tempo_dialog.cc:93 tempo_dialog.cc:94 tempo_dialog.cc:340 -#: tempo_dialog.cc:341 +#: tempo_dialog.cc:93 tempo_dialog.cc:94 tempo_dialog.cc:359 +#: tempo_dialog.cc:360 msgid "one-hundred-twenty-eighth" msgstr "1/128" @@ -12712,95 +12989,91 @@ msgstr "Долей в минуту:" msgid "Tempo begins at" msgstr "Темп начинаетÑÑ" -#: tempo_dialog.cc:251 +#: tempo_dialog.cc:254 msgid "incomprehensible pulse note type (%1)" msgstr "непонÑтный тип пульÑирующей ноты (%1)" -#: tempo_dialog.cc:307 -msgid "Edit Meter" -msgstr "Изменить размер" - -#: tempo_dialog.cc:356 +#: tempo_dialog.cc:375 msgid "Note value:" msgstr "Значение ноты: " -#: tempo_dialog.cc:357 +#: tempo_dialog.cc:376 msgid "Beats per bar:" msgstr "Долей на такт:" -#: tempo_dialog.cc:371 +#: tempo_dialog.cc:390 msgid "Meter begins at bar:" msgstr "Размер начинаетÑÑ Ð² такте:" -#: tempo_dialog.cc:484 +#: tempo_dialog.cc:503 msgid "incomprehensible meter note type (%1)" msgstr "непонÑтный тип нотного ритма (%1)" -#: theme_manager.cc:65 +#: theme_manager.cc:67 msgid "Dark Theme" msgstr "Ð¢Ñ‘Ð¼Ð½Ð°Ñ Ñ‚ÐµÐ¼Ð°" -#: theme_manager.cc:66 +#: theme_manager.cc:68 msgid "Light Theme" msgstr "Ð¡Ð²ÐµÑ‚Ð»Ð°Ñ Ñ‚ÐµÐ¼Ð°" -#: theme_manager.cc:67 +#: theme_manager.cc:69 msgid "Restore Defaults" msgstr "ВоÑÑтановить иÑходные значениÑ" -#: theme_manager.cc:68 +#: theme_manager.cc:70 msgid "Draw \"flat\" buttons" msgstr "РиÑовать кнопки плоÑкими" -#: theme_manager.cc:69 +#: theme_manager.cc:71 msgid "Blink Rec-Arm buttons" msgstr "Мигать кнопками готовноÑти к запиÑи" -#: theme_manager.cc:70 +#: theme_manager.cc:72 msgid "Color regions using their track's color" msgstr "РаÑкрашивать облаÑти цветом дорожки" -#: theme_manager.cc:71 +#: theme_manager.cc:73 msgid "Show waveform clipping" msgstr "Показывать клиппинг волновой формы" -#: theme_manager.cc:73 +#: theme_manager.cc:75 msgid "Waveforms color gradient depth" msgstr "Глубина градиента волновой формы Ñигнала" -#: theme_manager.cc:75 +#: theme_manager.cc:77 msgid "Timeline item gradient depth" msgstr "Глубина градиента объектов на таймлайне" -#: theme_manager.cc:76 +#: theme_manager.cc:78 msgid "All floating windows are dialogs" msgstr "Ð’Ñе плавающие окна ÑвлÑÑŽÑ‚ÑÑ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð°Ð¼Ð¸" -#: theme_manager.cc:77 +#: theme_manager.cc:79 msgid "Transient windows follow front window." msgstr "Временные окна Ñледуют за получающим Ñ„Ð¾ÐºÑƒÑ Ð¾Ñновным окном" -#: theme_manager.cc:78 +#: theme_manager.cc:80 msgid "Icon Set" msgstr "Ðабор значков:" -#: theme_manager.cc:87 +#: theme_manager.cc:89 msgid "Object" msgstr "Объект" -#: theme_manager.cc:163 +#: theme_manager.cc:165 msgid "Items" msgstr "Ðлементы" -#: theme_manager.cc:164 +#: theme_manager.cc:166 msgid "Palette" msgstr "Палитра" -#: theme_manager.cc:165 +#: theme_manager.cc:167 msgid "Transparency" msgstr "ПрозрачноÑÑ‚ÑŒ" -#: theme_manager.cc:195 +#: theme_manager.cc:197 msgid "" "Mark all floating windows to be type \"Dialog\" rather than using \"Utility" "\" for some.\n" @@ -12811,7 +13084,7 @@ msgstr "" "Ðто может помочь Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ оконными менеджерами.\n" "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²ÑтупÑÑ‚ в Ñилу поÑле перезапуÑка %1." -#: theme_manager.cc:199 +#: theme_manager.cc:201 msgid "" "Make transient windows follow the front window when toggling between the " "editor and mixer.\n" @@ -12821,15 +13094,15 @@ msgstr "" "при переключении между редактором и микшером.\n" "Ðто изменение вÑтупит в Ñилу поÑле перезапуÑка %1." -#: theme_manager.cc:620 +#: theme_manager.cc:635 msgid "Color Palette" msgstr "Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ð¿Ð°Ð»Ð¸Ñ‚Ñ€Ð°" -#: time_axis_view.cc:148 +#: time_axis_view.cc:150 msgid "Track/Bus name (double click to edit)" msgstr "Ð˜Ð¼Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ¸/шины (двойной клик Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ)" -#: time_axis_view_item.cc:345 +#: time_axis_view_item.cc:333 msgid "new duration %1 frame is out of bounds for %2" msgid_plural "new duration of %1 frames is out of bounds for %2" msgstr[0] "ÐÐ¾Ð²Ð°Ñ Ð´Ð»Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ÑÑ‚ÑŒ размером %1 кадр находитÑÑ Ð·Ð° пределами %2" @@ -12968,67 +13241,67 @@ msgstr "ТранÑпонировать MIDI" msgid "Transpose" msgstr "ТранÑпонировать" -#: ui_config.cc:163 ui_config.cc:300 +#: ui_config.cc:179 ui_config.cc:317 msgid "Loading default ui configuration file %1" msgstr "Загрузка файла конфигурации UI по умолчанию %1" -#: ui_config.cc:166 ui_config.cc:303 +#: ui_config.cc:182 ui_config.cc:320 msgid "cannot read default ui configuration file \"%1\"" msgstr "Ðевозможно прочитать оÑновной файл конфигурации интерфейÑа \"%1\"" -#: ui_config.cc:169 ui_config.cc:308 +#: ui_config.cc:185 ui_config.cc:325 msgid "default ui configuration file \"%1\" not loaded successfully." msgstr "ОÑновной файл конфигурации интерфейÑа \"%1\" не был уÑпешно загружен" -#: ui_config.cc:177 +#: ui_config.cc:193 msgid "Could not find default UI configuration file %1" msgstr "Ðе удалоÑÑŒ найти конфигурационный файл %1 Ð´Ð»Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñа" -#: ui_config.cc:219 +#: ui_config.cc:236 msgid "Loading color file %1" msgstr "ЗагружаетÑÑ Ñ„Ð°Ð¹Ð» %1 Ñ Ð¾Ð¿Ð¸Ñанием цветовой Ñхемы" -#: ui_config.cc:222 +#: ui_config.cc:239 msgid "cannot read color file \"%1\"" msgstr "Ðевозможно прочитать файл %1 Ñ Ð¾Ð¿Ð¸Ñанием цветовой Ñхемы" -#: ui_config.cc:227 +#: ui_config.cc:244 msgid "color file \"%1\" not loaded successfully." msgstr "Файл %1 Ñ Ð¾Ð¿Ð¸Ñанием цветовой Ñхемы не был уÑпешно загружен." -#: ui_config.cc:233 +#: ui_config.cc:250 msgid "Color file %1 not found" msgstr "Файл %1 Ñ Ð¾Ð¿Ð¸Ñанием цветовой Ñхемы не найден" -#: ui_config.cc:282 ui_config.cc:361 +#: ui_config.cc:299 ui_config.cc:378 msgid "Color file %1 not saved" msgstr "Файл %1 Ñ Ð¾Ð¿Ð¸Ñанием цветовой Ñхемы не Ñохранён" -#: ui_config.cc:317 +#: ui_config.cc:334 msgid "Loading user ui configuration file %1" msgstr "Загрузка файла пользовательÑкой конфигурации UI %1" -#: ui_config.cc:320 +#: ui_config.cc:337 msgid "cannot read ui configuration file \"%1\"" msgstr "Ðевозможно прочитать файл конфигурации UI \"%1\"" -#: ui_config.cc:325 +#: ui_config.cc:342 msgid "user ui configuration file \"%1\" not loaded successfully." msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ UI интерфейÑа файлa \"%1\" не загружена уÑпешно." -#: ui_config.cc:333 +#: ui_config.cc:350 msgid "could not find any ui configuration file, canvas will look broken." msgstr "Ðевозможно найти файл конфигурации UI, Ñто будет выглÑдеть Ñломаным." -#: ui_config.cc:351 +#: ui_config.cc:368 msgid "Config file %1 not saved" msgstr "Конфигурационный файл %1 не Ñохранён" -#: ui_config.cc:592 +#: ui_config.cc:609 msgid "Color %1 not found" msgstr "Цвет %1 не обнаружен" -#: ui_config.cc:662 +#: ui_config.cc:679 msgid "Unable to find UI style file %1 in search path %2. %3 will look strange" msgstr "" "Ðе удаетÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ файл Ñтилей пользовательÑкого интерфейÑа %1 в пути поиÑка " @@ -13103,7 +13376,7 @@ msgstr "Ð˜Ð½Ð´ÐµÐºÑ Ð²Ð¸Ð´ÐµÐ¾Ñервера" msgid " %1 fps" msgstr " %1 к/Ñ" -#: video_timeline.cc:468 +#: video_timeline.cc:472 msgid "" "Parsing video file info failed. Is the Video Server running? Is the file " "readable by the Video Server? Does the docroot match? Is it a video file?" @@ -13111,7 +13384,7 @@ msgstr "" "Разбор Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð²Ð¸Ð´ÐµÐ¾Ñ„Ð°Ð¹Ð» не удалÑÑ. Работает ли видеоÑервер? ДоÑтупен ли " "файл Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ Ð²Ð¸Ð´ÐµÐ¾Ñервера? Совпадает ли docroot? Ðто видеофайл?" -#: video_timeline.cc:506 +#: video_timeline.cc:510 msgid "" "Failed to set session-framerate: '%1' does not have a corresponding option " "setting in %2." @@ -13119,7 +13392,7 @@ msgstr "" "Ðе удалоÑÑŒ уÑтановить чатоту кадров ÑеÑÑии: '%1' не имеет ÑоответÑтвующей " "опции наÑтройки в %2." -#: video_timeline.cc:514 +#: video_timeline.cc:518 msgid "" "Video file's framerate is not equal to %1 session timecode's framerate: '%2' " "vs '%3'" @@ -13127,7 +13400,7 @@ msgstr "" "ЧаÑтота кадров видеофайла не равна чаÑтоте кадров таймкода ÑеÑÑии %1: '%2' " "против '%3'" -#: video_timeline.cc:587 +#: video_timeline.cc:591 msgid "" "Video-server docroot mismatch. %1: '%2', video-server: '%3'. This usually " "means that the video server was not started by %1 and uses a different " @@ -13137,7 +13410,7 @@ msgstr "" "видеоÑервер: '%3'. Как правило, Ñто означает, что видеоÑервер не был запущен " "от имени Ardour и иÑпользуетÑÑ Ð´Ñ€ÑƒÐ³Ð¸Ðµ различные корневые документы." -#: video_timeline.cc:724 +#: video_timeline.cc:728 msgid "" "Video-monitor 'xjadeo' was not found. Please install http://xjadeo.sf.net/ " "(a custom path to xjadeo can be specified by setting the XJREMOTE " @@ -13153,17 +13426,15 @@ msgstr "" "\n" "См. так же: http://manual.ardour.org/video-timeline/setup/" -#: video_timeline.cc:739 +#: video_timeline.cc:743 msgid "Video-monitor 'xjadeo' cannot be launched." msgstr "Видеомонитор 'xjadeo' не может быть запущен." -#: video_timeline.cc:766 +#: video_timeline.cc:769 msgid "" -"Video-monitor 'xjadeo' is too old. Please install xjadeo version 0.7.7 or " +"Video-monitor 'xjadeo' is too old. Please install xjadeo version 0.8.0 or " "later. http://xjadeo.sf.net/" msgstr "" -"Видеомонитор 'xjadeo' Ñлишком Ñтар. ПожалуйÑта, уÑтановите xjadeo верÑию " -"0.7.7 или более позднюю. http://xjadeo.sf.net/" #: video_monitor.cc:285 msgid "Video Monitor: File Not Found." @@ -13210,7 +13481,7 @@ msgstr "Импортировать/перекодировать видеофай msgid "Output File:" msgstr "Файл вывода:" -#: transcode_video_dialog.cc:61 export_video_dialog.cc:85 +#: transcode_video_dialog.cc:61 export_video_dialog.cc:81 msgid "Abort" msgstr "Прервать" @@ -13222,7 +13493,7 @@ msgstr "Ð’Ñ‹Ñота = " msgid "Manual Override" msgstr "Ручное управление" -#: transcode_video_dialog.cc:70 export_video_dialog.cc:103 +#: transcode_video_dialog.cc:70 export_video_dialog.cc:99 msgid "Debug Mode: Print ffmpeg command and output to stdout." msgstr "Режим отладки: вывод команд ffmpeg в stdout" @@ -13420,55 +13691,55 @@ msgstr "Снимок Ñ Ñ‚Ð°ÐºÐ¸Ð¼ названием уже еÑÑ‚ÑŒ. ПереРmsgid "Cannot create video folder \"%1\" (%2)" msgstr "Ðе удалоÑÑŒ Ñоздать папку Ð´Ð»Ñ Ð²Ð¸Ð´ÐµÐ¾: \"%1\" (%2)" -#: export_video_dialog.cc:71 +#: export_video_dialog.cc:67 msgid "Export Video File " msgstr "ÐкÑпортировать видеофайл" -#: export_video_dialog.cc:82 +#: export_video_dialog.cc:78 msgid "Video:" msgstr "Видео:" -#: export_video_dialog.cc:87 +#: export_video_dialog.cc:83 msgid "Scale Video (W x H):" msgstr "МаÑштабирование видео (В×Ш):" -#: export_video_dialog.cc:88 +#: export_video_dialog.cc:84 msgid "Retain Aspect" msgstr "Сохранить Ñоотношение Ñторон" -#: export_video_dialog.cc:93 +#: export_video_dialog.cc:89 msgid "Set Aspect Ratio:" msgstr "Указать Ñоотношение Ñторон:" -#: export_video_dialog.cc:94 +#: export_video_dialog.cc:90 msgid "Normalize Audio" msgstr "Ðормировать звук" -#: export_video_dialog.cc:95 +#: export_video_dialog.cc:91 msgid "2 Pass Encoding" msgstr "Кодирование в два прохода" -#: export_video_dialog.cc:96 +#: export_video_dialog.cc:92 msgid "Codec Optimizations:" msgstr "ÐžÐ¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð´ÐµÐºÐ°:" -#: export_video_dialog.cc:98 +#: export_video_dialog.cc:94 msgid "Deinterlace" msgstr "ДеинтерлейÑинг" -#: export_video_dialog.cc:99 +#: export_video_dialog.cc:95 msgid "Use [2] B-frames (MPEG 2 or 4 only)" msgstr "ИÑпользовать [2] B-кадры (только MPEG 2 или 4)" -#: export_video_dialog.cc:100 +#: export_video_dialog.cc:96 msgid "Override FPS (Default is to retain FPS from the input video file):" msgstr "Принудительно указать Ñвою чаÑтоту кадров:" -#: export_video_dialog.cc:101 +#: export_video_dialog.cc:97 msgid "Include Session Metadata" msgstr "Включить метаданные ÑеÑÑии" -#: export_video_dialog.cc:119 +#: export_video_dialog.cc:115 msgid "" "No ffprobe or ffmpeg executables could be found on this system. Video Export " "is not possible until you install those tools. See the Log window for more " @@ -13478,97 +13749,97 @@ msgstr "" "будет недоÑтупен до тех пор, пока вы их не уÑтановите. См. подробнее в окне " "журнала." -#: export_video_dialog.cc:130 +#: export_video_dialog.cc:126 msgid "<b>Output:</b> (file extension defines format)" msgstr "<b>Вывод:</b> (раÑширение файла определÑет контейнер)" -#: export_video_dialog.cc:140 +#: export_video_dialog.cc:136 msgid "<b>Input Video:</b>" msgstr "<b>Видео на входе:</b>" -#: export_video_dialog.cc:151 +#: export_video_dialog.cc:147 msgid "Audio:" msgstr "Звук:" -#: export_video_dialog.cc:153 +#: export_video_dialog.cc:149 msgid "Master Bus" msgstr "МаÑтер-шина" -#: export_video_dialog.cc:158 +#: export_video_dialog.cc:154 msgid "from the %1 session's start to the session's end" msgstr "от начала до конца ÑеÑÑии %1" -#: export_video_dialog.cc:161 +#: export_video_dialog.cc:157 msgid "<b>Settings:</b>" msgstr "<b>Параметры:</b>" -#: export_video_dialog.cc:169 +#: export_video_dialog.cc:165 msgid "Range:" msgstr "Диапазон:" -#: export_video_dialog.cc:172 +#: export_video_dialog.cc:168 msgid "Preset:" msgstr "Профиль:" -#: export_video_dialog.cc:175 +#: export_video_dialog.cc:171 msgid "Video Codec:" msgstr "Видеокодек:" -#: export_video_dialog.cc:178 +#: export_video_dialog.cc:174 msgid "Video KBit/s:" msgstr "СкороÑÑ‚ÑŒ видеопотока (Кбит/Ñ):" -#: export_video_dialog.cc:181 +#: export_video_dialog.cc:177 msgid "Audio Codec:" msgstr "Звуковой кодек:" -#: export_video_dialog.cc:184 +#: export_video_dialog.cc:180 msgid "Audio KBit/s:" msgstr "СкороÑÑ‚ÑŒ звукового потока (Кбит/Ñ):" -#: export_video_dialog.cc:187 +#: export_video_dialog.cc:183 msgid "Audio Samplerate:" msgstr "ЧаÑтота ÑÑÐ¼Ð¿Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð²ÑƒÐºÐ°:" -#: export_video_dialog.cc:222 export_video_dialog.cc:231 -#: export_video_dialog.cc:814 export_video_dialog.cc:817 +#: export_video_dialog.cc:218 export_video_dialog.cc:227 +#: export_video_dialog.cc:810 export_video_dialog.cc:813 msgid "(default for format)" msgstr "(по умолчанию Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ¹Ð½ÐµÑ€Ð°)" -#: export_video_dialog.cc:242 export_video_dialog.cc:255 -#: export_video_dialog.cc:821 export_video_dialog.cc:830 +#: export_video_dialog.cc:238 export_video_dialog.cc:251 +#: export_video_dialog.cc:817 export_video_dialog.cc:826 msgid "(default)" msgstr "(по умолчанию)" -#: export_video_dialog.cc:256 export_video_dialog.cc:824 +#: export_video_dialog.cc:252 export_video_dialog.cc:820 msgid "(retain)" msgstr "(иÑходнаÑ)" -#: export_video_dialog.cc:348 +#: export_video_dialog.cc:344 msgid "from 00:00:00:00 to the video's end" msgstr "от 00:00:00:00 до конца видео" -#: export_video_dialog.cc:350 +#: export_video_dialog.cc:346 msgid "from the video's start to the video's end" msgstr "от начала до конца видео" -#: export_video_dialog.cc:353 +#: export_video_dialog.cc:349 msgid "Selected range" msgstr "Выбранный диапазон" -#: export_video_dialog.cc:573 +#: export_video_dialog.cc:569 msgid "Normalizing audio" msgstr "ВыполнÑетÑÑ Ð½Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²ÐºÐ° звука" -#: export_video_dialog.cc:577 +#: export_video_dialog.cc:573 msgid "Exporting audio" msgstr "ÐкÑпорт звука" -#: export_video_dialog.cc:632 +#: export_video_dialog.cc:628 msgid "Exporting Audio..." msgstr "ÐкÑпортируетÑÑ Ð·Ð²ÑƒÐº..." -#: export_video_dialog.cc:689 +#: export_video_dialog.cc:685 msgid "" "Export Video: Cannot query duration of video-file, using duration from " "timeline instead." @@ -13576,36 +13847,36 @@ msgstr "" "ÐкÑпорт видео: невозможно запроÑить длительноÑÑ‚ÑŒ видеофайла, вмеÑто неё " "иÑпользуетÑÑ Ð´Ð»Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾ÑÑ‚ÑŒ проекта." -#: export_video_dialog.cc:719 +#: export_video_dialog.cc:715 msgid "Export Video: export-range does not include video." msgstr "ÐкÑпорт видео: ÑкÑпортный диапазон не Ñодержит видео." -#: export_video_dialog.cc:732 +#: export_video_dialog.cc:728 msgid "Export Video: No Master Out Ports to Connect for Audio Export" msgstr "" "ÐкÑпорт видео: нет ÑоединÑемых портов выхода маÑтер-шины Ð´Ð»Ñ ÑкÑпорта звука" -#: export_video_dialog.cc:774 +#: export_video_dialog.cc:770 msgid "Encoding Video..." msgstr "КодируетÑÑ Ð²Ð¸Ð´ÐµÐ¾..." -#: export_video_dialog.cc:794 +#: export_video_dialog.cc:790 msgid "Export Video: Video input file cannot be read." msgstr "ÐкÑпорт видео: не удалоÑÑŒ прочитать иÑпользуемый видеофайл" -#: export_video_dialog.cc:900 +#: export_video_dialog.cc:896 msgid "Encoding Video.. Pass 1/2" msgstr "ВыполнÑетÑÑ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ видео. Проход 1/2." -#: export_video_dialog.cc:912 +#: export_video_dialog.cc:908 msgid "Encoding Video.. Pass 2/2" msgstr "ВыполнÑетÑÑ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ видео. Проход 2/2." -#: export_video_dialog.cc:1015 +#: export_video_dialog.cc:1011 msgid "Transcoding failed." msgstr "Ðе удалоÑÑŒ выполнить перекодировку." -#: export_video_dialog.cc:1251 export_video_dialog.cc:1271 +#: export_video_dialog.cc:1247 export_video_dialog.cc:1267 msgid "Save Exported Video File" msgstr "Сохранить ÑкÑпортированный видеофайл" @@ -13636,6 +13907,48 @@ msgstr "" "\n" "Открыть руководÑтво в браузере? " +#~ msgid "Snapshot..." +#~ msgstr "Создать Ñнимок..." + +#~ msgid "Internal Edit Mode (edit notes and gain curves inside regions)" +#~ msgstr "Правка внутри облаÑтей (нот и кривых уÑилениÑ)" + +#~ msgid "Make Loop range" +#~ msgstr "Создать облаÑÑ‚ÑŒ петли" + +#~ msgid "Make Punch range" +#~ msgstr "Создать облаÑÑ‚ÑŒ врезки" + +#~ msgid "" +#~ "The %1 audio backend was configured and started externally.\n" +#~ "This limits your control over it." +#~ msgstr "" +#~ "Ð—Ð²ÑƒÐºÐ¾Ð²Ð°Ñ Ð¿Ð¾Ð´ÑиÑтема %1 была наÑтроена и запущена извне.\n" +#~ "Ð’Ñ‹ не Ñможете полноÑтью контролировать её." + +#~ msgid "Insert time on all the track's playlists" +#~ msgstr "Ð’Ñтавить во вÑе ÑпиÑки воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ¸" + +#~ msgid "Keyboard layout:" +#~ msgstr "РаÑкладка клавиатуры:" + +#~ msgid "Font scaling:" +#~ msgstr "МаÑштаб шрифта:" + +#~ msgid "" +#~ "Major font-scale changes require an application restart to re-layout." +#~ msgstr "СущеÑтвенное изменение маÑштаба требует перезапуÑка программы" + +#~ msgid "only in region gain mode" +#~ msgstr "Только в режиме правки огибающей" + +#~ msgid "" +#~ "Video-monitor 'xjadeo' is too old. Please install xjadeo version 0.7.7 or " +#~ "later. http://xjadeo.sf.net/" +#~ msgstr "" +#~ "Видеомонитор 'xjadeo' Ñлишком Ñтар. ПожалуйÑта, уÑтановите xjadeo верÑию " +#~ "0.7.7 или более позднюю. http://xjadeo.sf.net/" + #~ msgid "After Editor Selection" #~ msgstr "ПоÑле выбранного в редакторе" diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index 71435fe9e4..a059f32a05 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -2155,9 +2155,10 @@ ProcessorBox::paste_processor_state (const XMLNodeList& nlist, boost::shared_ptr /* XXX its a bit limiting to assume that everything else is a plugin. */ - p.reset (new PluginInsert (*_session)); - p->set_state (**niter, Stateful::current_state_version); + PBD::ID id = p->id(); + p->set_state (**niter, Stateful::current_state_version); + boost::dynamic_pointer_cast<PluginInsert>(p)->update_id (id); } copies.push_back (p); diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index 951c3e9b0e..b5d139b543 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -40,6 +40,8 @@ #include "pbd/statefuldestructible.h" #include "canvas/fwd.h" + +#include "gtkmm2ext/actions.h" #include "gtkmm2ext/visibility_tracker.h" #include "editing.h" @@ -459,4 +461,19 @@ class DisplaySuspender { } }; +class MainMenuDisabler { +public: + MainMenuDisabler () { + /* The global menu bar continues to be accessible to applications + with modal dialogs on mac, which means that we need to desensitize + all items in the menu bar. + */ + ActionManager::disable_active_actions (); + } + + ~MainMenuDisabler () { + ActionManager::enable_active_actions (); + } +}; + #endif // __gtk_ardour_public_editor_h__ diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc index bb0042cf79..5961ccfee2 100644 --- a/gtk2_ardour/rc_option_editor.cc +++ b/gtk2_ardour/rc_option_editor.cc @@ -50,6 +50,7 @@ #include "ardour_window.h" #include "ardour_dialog.h" #include "gui_thread.h" +#include "meter_patterns.h" #include "midi_tracer.h" #include "rc_option_editor.h" #include "utils.h" @@ -67,6 +68,121 @@ using namespace PBD; using namespace ARDOUR; using namespace ARDOUR_UI_UTILS; +class AutoReturnTargetOptions : public OptionEditorBox +{ + public: + AutoReturnTargetOptions (RCConfiguration* c, Gtk::Window* p) + : _rc_config (c) + , range_selection_button (_("Play Range Selection")) + , last_roll_button (_("Play from Last Roll")) + , loop_button (_("Play Loop")) + , region_selection_button (_("Play Region Selection")) + , toggle_button (_("Enable/Disable all options")) + { + _box->pack_start (range_selection_button, false, false); + range_selection_button.signal_toggled().connect (sigc::mem_fun (*this, &AutoReturnTargetOptions::range_selection_toggled)); + + _box->pack_start (loop_button, false, false); + loop_button.signal_toggled().connect (sigc::mem_fun (*this, &AutoReturnTargetOptions::loop_toggled)); + + _box->pack_start (region_selection_button, false, false); + region_selection_button.signal_toggled().connect (sigc::mem_fun (*this, &AutoReturnTargetOptions::region_selection_toggled)); + + _box->pack_start (last_roll_button, false, false); + last_roll_button.signal_toggled().connect (sigc::mem_fun (*this, &AutoReturnTargetOptions::last_roll_toggled)); + + HBox* hbox = manage (new HBox); + /* keep the toggle button small */ + hbox->pack_start (toggle_button, false, false); + _box->pack_start (*hbox, false, false); + + toggle_button.signal_clicked().connect (sigc::mem_fun (*this, &AutoReturnTargetOptions::toggle)); + + Gtkmm2ext::UI::instance()->set_tip (range_selection_button, + _("If enabled, playhead will always start from the beginning of the current range selection.\n\nIf disabled or no range selection, see the next choice in this list")); + Gtkmm2ext::UI::instance()->set_tip (loop_button, + _("If enabled, playhead will always start from the beginning of the loop range.\n\nIf disabled or no loop range, see the next choice in this list")); + Gtkmm2ext::UI::instance()->set_tip (region_selection_button, + _("If enabled, playhead will always start from the beginning of the first selected region.\n\nIf disabled or no region selection, see the next choice in this list")); + Gtkmm2ext::UI::instance()->set_tip (last_roll_button, + _("If enabled, playhead will always start from the last position where it was started.\n\nIf disabled it will start from wherever it is currently located")); + + Gtkmm2ext::UI::instance()->set_tip (toggle_button, + _("Change status of all buttons above to all enabled or all disabled")); + } + + void parameter_changed (string const & p) + { + if (p == "auto-return-target-list") { + AutoReturnTarget art = _rc_config->get_auto_return_target_list(); + range_selection_button.set_active (art & RangeSelectionStart); + loop_button.set_active (art & Loop); + region_selection_button.set_active (art & RegionSelectionStart); + last_roll_button.set_active (art & LastLocate); + } + } + + void set_state_from_config () + { + parameter_changed ("auto-return-target-list"); + } + + private: + + void range_selection_toggled () { + AutoReturnTarget art = _rc_config->get_auto_return_target_list (); + if (range_selection_button.get_active ()) { + _rc_config->set_auto_return_target_list (AutoReturnTarget (art | RangeSelectionStart)); + } else { + _rc_config->set_auto_return_target_list (AutoReturnTarget (art & ~RangeSelectionStart)); + } + } + void last_roll_toggled () { + AutoReturnTarget art = _rc_config->get_auto_return_target_list (); + if (last_roll_button.get_active ()) { + _rc_config->set_auto_return_target_list (AutoReturnTarget (art | LastLocate)); + } else { + _rc_config->set_auto_return_target_list (AutoReturnTarget (art & ~LastLocate)); + } + } + void region_selection_toggled () { + AutoReturnTarget art = _rc_config->get_auto_return_target_list (); + if (region_selection_button.get_active ()) { + _rc_config->set_auto_return_target_list (AutoReturnTarget (art | RegionSelectionStart)); + } else { + _rc_config->set_auto_return_target_list (AutoReturnTarget (art & ~RegionSelectionStart)); + } + } + void loop_toggled () { + AutoReturnTarget art = _rc_config->get_auto_return_target_list (); + if (loop_button.get_active ()) { + _rc_config->set_auto_return_target_list (AutoReturnTarget (art | Loop)); + } else { + _rc_config->set_auto_return_target_list (AutoReturnTarget (art & ~Loop)); + } + } + + void toggle () { + AutoReturnTarget art = _rc_config->get_auto_return_target_list (); + if (art) { + _rc_config->set_auto_return_target_list (AutoReturnTarget (0)); + } else { + _rc_config->set_auto_return_target_list (AutoReturnTarget (RangeSelectionStart| + RegionSelectionStart| + Loop| + LastLocate)); + } + } + + RCConfiguration* _rc_config; + + Gtk::CheckButton range_selection_button; + Gtk::CheckButton last_roll_button; + Gtk::CheckButton loop_button; + Gtk::CheckButton region_selection_button; + Gtk::Button toggle_button; +}; + class ClickOptions : public OptionEditorBox { public: @@ -1399,6 +1515,7 @@ public: , _display_plugin_scan_progress (_("Always Display Plugin Scan Progress")) , _discover_vst_on_start (_("Scan for [new] VST Plugins on Application Start")) , _discover_au_on_start (_("Scan for AudioUnit Plugins on Application Start")) + , _verbose_plugin_scan (_("Verbose Plugin Scan")) , _timeout_adjustment (0, 0, 3000, 50, 50) , _timeout_slider (_timeout_adjustment) { @@ -1471,6 +1588,12 @@ public: b = manage (new Button (_("Edit"))); b->signal_clicked().connect (sigc::mem_fun (*this, &PluginOptions::edit_vst_path_clicked)); t->attach (*b, 1, 2, n, n+1, FILL); ++n; + + // currently verbose logging is only implemented for Windows VST. + t->attach (_verbose_plugin_scan, 0, 2, n, n+1); ++n; + _verbose_plugin_scan.signal_toggled().connect (sigc::mem_fun (*this, &PluginOptions::verbose_plugin_scan_toggled)); + Gtkmm2ext::UI::instance()->set_tip (_verbose_plugin_scan, + _("<b>When enabled</b> additional information for every plugin is added to the Log Window.")); #endif #endif // any VST @@ -1518,6 +1641,10 @@ public: bool const x = _rc_config->get_discover_audio_units(); _discover_au_on_start.set_active (x); } + else if (p == "verbose-plugin-scan") { + bool const x = _rc_config->get_verbose_plugin_scan(); + _verbose_plugin_scan.set_active (x); + } } void set_state_from_config () { @@ -1525,6 +1652,7 @@ public: parameter_changed ("discover-vst-on-start"); parameter_changed ("vst-scan-timeout"); parameter_changed ("discover-audio-units"); + parameter_changed ("verbose-plugin-scan"); } private: @@ -1533,6 +1661,7 @@ private: CheckButton _display_plugin_scan_progress; CheckButton _discover_vst_on_start; CheckButton _discover_au_on_start; + CheckButton _verbose_plugin_scan; Adjustment _timeout_adjustment; HScale _timeout_slider; @@ -1551,6 +1680,11 @@ private: _rc_config->set_discover_audio_units(x); } + void verbose_plugin_scan_toggled () { + bool const x = _verbose_plugin_scan.get_active(); + _rc_config->set_verbose_plugin_scan(x); + } + void timeout_changed () { int x = floor(_timeout_adjustment.get_value()); _rc_config->set_vst_scan_timeout(x); @@ -1784,6 +1918,10 @@ RCOptionEditor::RCOptionEditor () /* TRANSPORT */ + add_option (_("Transport"), new OptionEditorHeading (S_("Playhead Behaviour"))); + add_option (_("Transport"), new AutoReturnTargetOptions (_rc_config, this)); + add_option (_("Transport"), new OptionEditorHeading (S_("Transport Options"))); + BoolOption* tsf; tsf = new BoolOption ( @@ -2697,6 +2835,22 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (*_ui_config, &UIConfiguration::set_super_rapid_clock_update) )); + + /* Image cache size */ + + Gtk::Adjustment *ics = manage (new Gtk::Adjustment(0, 1, 1024, 10)); /* 1 MB to 1GB in steps of 10MB */ + HSliderOption *sics = new HSliderOption("waveform-cache-size", + _("Waveform image cache size (megabytes)"), + ics, + sigc::mem_fun (*ARDOUR_UI::config(), &UIConfiguration::get_waveform_cache_size), + sigc::mem_fun (*ARDOUR_UI::config(), &UIConfiguration::set_waveform_cache_size) + ); + sics->scale().set_digits (0); + Gtkmm2ext::UI::instance()->set_tip + (sics->tip_widget(), + _("Increasing the cache size uses more memory to store waveform images, which can improve graphical performance.")); + add_option (S_("Preferences|GUI"), sics); + /* Lock GUI timeout */ Gtk::Adjustment *lts = manage (new Gtk::Adjustment(0, 0, 1000, 1, 10)); @@ -2766,12 +2920,10 @@ RCOptionEditor::RCOptionEditor () mfo->add (METER_FALLOFF_OFF, _("off")); mfo->add (METER_FALLOFF_SLOWEST, _("slowest [6.6dB/sec]")); mfo->add (METER_FALLOFF_SLOW, _("slow [8.6dB/sec] (BBC PPM, EBU PPM)")); - mfo->add (METER_FALLOFF_SLOWISH, _("slowish [12.0dB/sec] (DIN)")); - mfo->add (METER_FALLOFF_MODERATE, _("moderate [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)")); - mfo->add (METER_FALLOFF_MEDIUM, _("medium [20dB/sec]")); - mfo->add (METER_FALLOFF_FAST, _("fast [32dB/sec]")); - mfo->add (METER_FALLOFF_FASTER, _("faster [46dB/sec]")); - mfo->add (METER_FALLOFF_FASTEST, _("fastest [70dB/sec]")); + mfo->add (METER_FALLOFF_SLOWISH, _("moderate [12.0dB/sec] (DIN)")); + mfo->add (METER_FALLOFF_MODERATE, _("medium [13.3dB/sec] (EBU Digi PPM, IRT Digi PPM)")); + mfo->add (METER_FALLOFF_MEDIUM, _("fast [20dB/sec]")); + mfo->add (METER_FALLOFF_FAST, _("very fast [32dB/sec]")); add_option (S_("Preferences|Metering"), mfo); @@ -2829,6 +2981,54 @@ RCOptionEditor::RCOptionEditor () sigc::mem_fun (*_ui_config, &UIConfiguration::set_meter_peak) ); + + ComboOption<MeterType>* mtm = new ComboOption<MeterType> ( + "meter-type-master", + _("Default Meter Type for Master Bus"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_type_master), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_type_master) + ); + mtm->add (MeterPeak, ArdourMeter::meter_type_string(MeterPeak)); + mtm->add (MeterK20, ArdourMeter::meter_type_string(MeterK20)); + mtm->add (MeterK14, ArdourMeter::meter_type_string(MeterK14)); + mtm->add (MeterK12, ArdourMeter::meter_type_string(MeterK12)); + mtm->add (MeterIEC1DIN, ArdourMeter::meter_type_string(MeterIEC1DIN)); + mtm->add (MeterIEC1NOR, ArdourMeter::meter_type_string(MeterIEC1NOR)); + mtm->add (MeterIEC2BBC, ArdourMeter::meter_type_string(MeterIEC2BBC)); + mtm->add (MeterIEC2EBU, ArdourMeter::meter_type_string(MeterIEC2EBU)); + + add_option (S_("Preferences|Metering"), mtm); + + + ComboOption<MeterType>* mtb = new ComboOption<MeterType> ( + "meter-type-bus", + _("Default Meter Type for Busses"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_type_bus), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_type_bus) + ); + mtb->add (MeterPeak, ArdourMeter::meter_type_string(MeterPeak)); + mtb->add (MeterK20, ArdourMeter::meter_type_string(MeterK20)); + mtb->add (MeterK14, ArdourMeter::meter_type_string(MeterK14)); + mtb->add (MeterK12, ArdourMeter::meter_type_string(MeterK12)); + mtb->add (MeterIEC1DIN, ArdourMeter::meter_type_string(MeterIEC1DIN)); + mtb->add (MeterIEC1NOR, ArdourMeter::meter_type_string(MeterIEC1NOR)); + mtb->add (MeterIEC2BBC, ArdourMeter::meter_type_string(MeterIEC2BBC)); + mtb->add (MeterIEC2EBU, ArdourMeter::meter_type_string(MeterIEC2EBU)); + + add_option (S_("Preferences|Metering"), mtb); + + ComboOption<MeterType>* mtt = new ComboOption<MeterType> ( + "meter-type-track", + _("Default Meter Type for Tracks"), + sigc::mem_fun (*_rc_config, &RCConfiguration::get_meter_type_track), + sigc::mem_fun (*_rc_config, &RCConfiguration::set_meter_type_track) + ); + mtt->add (MeterPeak, ArdourMeter::meter_type_string(MeterPeak)); + mtt->add (MeterPeak0dB, ArdourMeter::meter_type_string(MeterPeak0dB)); + + add_option (S_("Preferences|Metering"), mtt); + + Gtkmm2ext::UI::instance()->set_tip (mpks->tip_widget(), _("Specify the audio signal level in dbFS at and above which the meter-peak indicator will flash red.")); diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index 854f6e04cf..8f99874ed0 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -1425,9 +1425,14 @@ RouteUI::solo_isolate_button_release (GdkEventButton* ev) /* disable isolate for all routes */ DisplaySuspender ds; _session->set_solo_isolated (_session->get_routes(), false, Session::rt_cleanup, true); + } else { + /* enable isolate for all routes */ + DisplaySuspender ds; + _session->set_solo_isolated (_session->get_routes(), true, Session::rt_cleanup, true); } } else { + if (model == view) { /* flip just this route */ diff --git a/gtk2_ardour/shuttle_control.cc b/gtk2_ardour/shuttle_control.cc index d879ce50ff..aeaf7d6b28 100644 --- a/gtk2_ardour/shuttle_control.cc +++ b/gtk2_ardour/shuttle_control.cc @@ -73,6 +73,15 @@ ShuttleControl::ShuttleControl () set_size_request (85, 20); set_name (X_("ShuttleControl")); + shuttle_max_speed = Config->get_shuttle_max_speed(); + + if (shuttle_max_speed >= 8.f) { shuttle_max_speed = 8.0f; } + else if (shuttle_max_speed >= 6.f) { shuttle_max_speed = 6.0f; } + else if (shuttle_max_speed >= 4.f) { shuttle_max_speed = 4.0f; } + else if (shuttle_max_speed >= 3.f) { shuttle_max_speed = 3.0f; } + else if (shuttle_max_speed >= 2.f) { shuttle_max_speed = 2.0f; } + else { shuttle_max_speed = 1.5f; } + Config->ParameterChanged.connect (parameter_connection, MISSING_INVALIDATOR, boost::bind (&ShuttleControl::parameter_changed, this, _1), gui_context()); /* gtkmm 2.4: the C++ wrapper doesn't work */ @@ -240,6 +249,7 @@ ShuttleControl::show_shuttle_context_menu () void ShuttleControl::set_shuttle_max_speed (float speed) { + Config->set_shuttle_max_speed (speed); shuttle_max_speed = speed; last_speed_displayed = -99999999; } @@ -302,9 +312,10 @@ ShuttleControl::on_button_release_event (GdkEventButton* ev) if (Config->get_shuttle_behaviour() == Sprung) { if (shuttle_speed_on_grab == 0 ) { - _session->request_transport_speed (1.0); + _session->request_stop (); + } else { + _session->request_transport_speed (shuttle_speed_on_grab); } - _session->request_transport_speed (shuttle_speed_on_grab); } else { mouse_shuttle (ev->x, true); } diff --git a/gtk2_ardour/startup.cc b/gtk2_ardour/startup.cc index d4c8686698..719e94f241 100644 --- a/gtk2_ardour/startup.cc +++ b/gtk2_ardour/startup.cc @@ -37,11 +37,12 @@ #include "ardour/audioengine.h" #include "ardour/filesystem_paths.h" +#include "ardour/filename_extensions.h" +#include "ardour/plugin_manager.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 "startup.h" @@ -343,13 +344,30 @@ void ArdourStartup::setup_final_page () { 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); - set_page_header_image (final_page, icon_pixbuf); - set_page_type (final_page, ASSISTANT_PAGE_CONFIRM); + + plugin_disco_button.signal_clicked().connect (sigc::mem_fun(*this, &ArdourStartup::discover_plugins)); + plugin_disco_button.set_label (_("Scan for Plugins")); + plugin_disco_button.show (); + + Gtk::Label* final_label = manage (new Label); + final_label->set_markup (string_compose ("<span weight=\"bold\" size=\"large\">%1</span>", msg)); + final_label->show (); + + VBox* vbox = manage (new VBox); + vbox->pack_start (*final_label, true, true); + vbox->pack_start (plugin_disco_button, true, false); + vbox->show (); + + final_page_index = append_page (*vbox); + set_page_complete (*vbox, true); + set_page_header_image (*vbox, icon_pixbuf); + set_page_type (*vbox, ASSISTANT_PAGE_CONFIRM); +} + +void +ArdourStartup::discover_plugins () { + plugin_disco_button.set_sensitive (false); + PluginManager::instance().refresh(); } void diff --git a/gtk2_ardour/startup.h b/gtk2_ardour/startup.h index a93a29ef42..74e0aee6b8 100644 --- a/gtk2_ardour/startup.h +++ b/gtk2_ardour/startup.h @@ -63,6 +63,7 @@ class ArdourStartup : public Gtk::Assistant { void on_apply (); void on_cancel (); bool on_delete_event (GdkEventAny*); + void discover_plugins (); static ArdourStartup *the_startup; @@ -101,7 +102,7 @@ class ArdourStartup : public Gtk::Assistant { /* final page */ void setup_final_page (); - Gtk::Label final_page; + Gtk::Button plugin_disco_button; /* always there */ diff --git a/gtk2_ardour/step_editor.cc b/gtk2_ardour/step_editor.cc index 63d706672d..a1beefb30c 100644 --- a/gtk2_ardour/step_editor.cc +++ b/gtk2_ardour/step_editor.cc @@ -226,6 +226,9 @@ StepEditor::step_edit_sustain (Evoral::Beats beats) void StepEditor::move_step_edit_beat_pos (Evoral::Beats beats) { + if (!step_edit_region_view) { + return; + } if (beats > 0.0) { step_edit_beat_pos = min (step_edit_beat_pos + beats, step_edit_region_view->region_frames_to_region_beats (step_edit_region->length())); @@ -356,8 +359,10 @@ StepEditor::step_edit_toggle_chord () { if (_step_edit_within_chord) { _step_edit_within_chord = false; - step_edit_beat_pos += _step_edit_chord_duration; - step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos); + if (step_edit_region_view) { + step_edit_beat_pos += _step_edit_chord_duration; + step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos); + } } else { _step_edit_triplet_countdown = 0; _step_edit_within_chord = true; @@ -375,7 +380,7 @@ StepEditor::step_edit_rest (Evoral::Beats beats) success = true; } - if (success) { + if (success && step_edit_region_view) { step_edit_beat_pos += beats; step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos); } @@ -385,7 +390,9 @@ void StepEditor::step_edit_beat_sync () { step_edit_beat_pos = step_edit_beat_pos.round_up_to_beat(); - step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos); + if (step_edit_region_view) { + step_edit_region_view->move_step_edit_cursor (step_edit_beat_pos); + } } void diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc index 9a0e37708d..94f9b93467 100644 --- a/gtk2_ardour/time_axis_view_item.cc +++ b/gtk2_ardour/time_axis_view_item.cc @@ -209,24 +209,12 @@ TimeAxisViewItem::init (ArdourCanvas::Item* parent, double fpp, uint32_t base_co if (ARDOUR_UI::config()->get_show_name_highlight() && (visibility & ShowNameHighlight)) { - double width; - double start = 1.0; - - if (visibility & FullWidthNameHighlight) { - width = trackview.editor().sample_to_pixel(item_duration); - } else { - width = trackview.editor().sample_to_pixel(item_duration) - 2.0; - } - - name_highlight = new ArdourCanvas::Rectangle (group, - ArdourCanvas::Rect (start, - trackview.current_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE, - width - 2.0, - trackview.current_height() - 1.0)); + /* rectangle size will be set in ::manage_name_highlight() */ + name_highlight = new ArdourCanvas::Rectangle (group); CANVAS_DEBUG_NAME (name_highlight, string_compose ("name highlight for %1", get_item_name())); name_highlight->set_data ("timeaxisviewitem", this); name_highlight->set_outline_what (ArdourCanvas::Rectangle::TOP); - name_highlight->set_outline_color (RGBA_TO_UINT (0,0,0,255)); + name_highlight->set_outline_color (RGBA_TO_UINT (0,0,0,255)); // this should use a theme color } else { name_highlight = 0; @@ -575,7 +563,7 @@ TimeAxisViewItem::set_height (double height) if (frame) { - frame->set_y0 (1.0); + frame->set_y0 (0.0); frame->set_y1 (height); if (frame_handle_start) { @@ -589,7 +577,7 @@ TimeAxisViewItem::set_height (double height) } if (vestigial_frame) { - vestigial_frame->set_y0 (1.0); + vestigial_frame->set_y0 (0.0); vestigial_frame->set_y1 (height); } @@ -618,7 +606,8 @@ TimeAxisViewItem::manage_name_highlight () if (name_highlight && wide_enough_for_name && high_enough_for_name) { name_highlight->show(); - name_highlight->set (ArdourCanvas::Rect (1.0, (double) _height - NAME_HIGHLIGHT_SIZE, _width, (double) _height - 1.0)); + // name_highlight->set_x_position (1.0); + name_highlight->set (ArdourCanvas::Rect (0.0, (double) _height - NAME_HIGHLIGHT_SIZE, _width - 2.0, _height)); } else { name_highlight->hide(); diff --git a/gtk2_ardour/transcode_ffmpeg.cc b/gtk2_ardour/transcode_ffmpeg.cc index 0f77000882..94f8527cbb 100644 --- a/gtk2_ardour/transcode_ffmpeg.cc +++ b/gtk2_ardour/transcode_ffmpeg.cc @@ -172,8 +172,8 @@ TranscodeFfmpeg::probe () } else if (key == X_("time_base")) { PARSE_FRACTIONAL_FPS(timebase) } else if (key == X_("timecode") && m_duration == 0) { - int h,m,s; char f[7]; - if (sscanf(i->at(16).c_str(), "%d:%d:%d:%s",&h,&m,&s,f) == 4) { + int h,m,s; char f[32]; + if (sscanf(i->at(16).c_str(), "%d:%d:%d:%32s",&h,&m,&s,f) == 4) { m_duration = (ARDOUR::framecnt_t) floor(m_fps * ( h * 3600.0 + m * 60.0 @@ -470,7 +470,7 @@ TranscodeFfmpeg::transcode (std::string outfile, const int outw, const int outh, if (bitrate < 10) bitrate = 10; if (bitrate > 1000) bitrate = 1000; - argp=(char**) calloc(16,sizeof(char*)); + argp=(char**) calloc(15,sizeof(char*)); argp[0] = strdup(ffmpeg_exe.c_str()); argp[1] = strdup("-i"); argp[2] = strdup(infile.c_str()); @@ -482,16 +482,15 @@ TranscodeFfmpeg::transcode (std::string outfile, const int outw, const int outh, argp[8] = strdup("-vcodec"); argp[9] = strdup("mpeg4"); argp[10] = strdup("-an"); - argp[11] = strdup("-intra"); - argp[12] = strdup("-g"); - argp[13] = strdup("1"); - argp[14] = strdup(outfile.c_str()); - argp[15] = (char *)0; + argp[11] = strdup("-keyint_min"); + argp[12] = strdup("10"); + argp[13] = strdup(outfile.c_str()); + argp[14] = (char *)0; /* Note: these are free()d in ~SystemExec */ #if 1 /* DEBUG */ if (debug_enable) { /* tentative debug mode */ printf("TRANSCODE VIDEO:\n"); - for (int i=0; i< 15; ++i) { + for (int i=0; i< 14; ++i) { printf("%s ", argp[i]); } printf("\n"); diff --git a/gtk2_ardour/transcode_video_dialog.cc b/gtk2_ardour/transcode_video_dialog.cc index 16bfc36995..04c21b6140 100644 --- a/gtk2_ardour/transcode_video_dialog.cc +++ b/gtk2_ardour/transcode_video_dialog.cc @@ -122,12 +122,15 @@ TranscodeVideoDialog::TranscodeVideoDialog (Session* s, std::string infile) aspect_checkbox.set_sensitive(false); bitrate_checkbox.set_sensitive(false); } else { - ffok = true; w = transcoder->get_width(); h = transcoder->get_height(); as = transcoder->get_audio(); m_aspect = transcoder->get_aspect(); + if (w > 0 && h > 0 && transcoder->get_fps() > 0 && transcoder->get_duration() > 0) { + ffok = true; + } + Table* t = manage (new Table (4, 2)); t->set_spacings (4); options_box->pack_start (*t, true, true, 4); @@ -178,17 +181,40 @@ TranscodeVideoDialog::TranscodeVideoDialog (Session* s, std::string infile) options_box->pack_start (*l, false, true, 4); video_combo.set_name ("PaddedButton"); - video_combo.append_text(_("Reference From Current Location (Previously Transcoded Files Only)")); - if (ffok) { + + if (ffok) { + video_combo.append_text(_("Reference From Current Location (Previously Transcoded Files Only)")); video_combo.append_text(_("Import/Transcode Video to Session")); video_combo.set_active(1); + if (as.size() > 0) { + video_combo.append_text(_("Do Not Import Video (Audio Import Only)")); + audio_combo.set_sensitive(true); + } else { + audio_combo.set_sensitive(false); + } + video_combo.set_sensitive(true); + transcode_button.set_sensitive(true); + path_entry.set_sensitive (true); + browse_button.set_sensitive (true); + } else if (as.size() > 0) { + video_combo.append_text(_("Do Not Import Video (Audio Import Only)")); + video_combo.set_active(0); + path_entry.set_text (""); + + video_combo.set_sensitive(false); + audio_combo.set_sensitive(true); + transcode_button.set_sensitive(true); + path_entry.set_sensitive (false); + browse_button.set_sensitive (false); } else { + video_combo.append_text(_("Do Not Import Video")); video_combo.set_active(0); + path_entry.set_text (""); video_combo.set_sensitive(false); audio_combo.set_sensitive(false); - } - if (as.size() > 0) { - video_combo.append_text(_("Do Not Import Video (Audio Import Only)")); + transcode_button.set_sensitive(false); + path_entry.set_sensitive (false); + browse_button.set_sensitive (false); } options_box->pack_start (video_combo, false, false, 4); diff --git a/gtk2_ardour/ui_config_vars.h b/gtk2_ardour/ui_config_vars.h index 7cf96ce7b0..ae6648ab96 100644 --- a/gtk2_ardour/ui_config_vars.h +++ b/gtk2_ardour/ui_config_vars.h @@ -72,3 +72,4 @@ UI_CONFIG_VARIABLE (double, waveform_clip_level, "waveform-clip-level", -0.09339 UI_CONFIG_VARIABLE (bool, hiding_groups_deactivates_groups, "hiding-groups-deactivates-groups", true) UI_CONFIG_VARIABLE (bool, no_new_session_dialog, "no-new-session-dialog", false) UI_CONFIG_VARIABLE (bool, buggy_gradients, "buggy-gradients", false) +UI_CONFIG_VARIABLE (uint64_t, waveform_cache_size, "waveform-cache-size", 100) /* units of megagbytes */ diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc index c903e591b4..fcfdbe644c 100644 --- a/gtk2_ardour/utils.cc +++ b/gtk2_ardour/utils.cc @@ -921,3 +921,40 @@ ARDOUR_UI_UTILS::rate_as_string (float r) } return buf; } + +bool +ARDOUR_UI_UTILS::windows_overlap (Gtk::Window *a, Gtk::Window *b) +{ + + if (!a || !b) { + return false; + } + if (a->get_screen() == b->get_screen()) { + gint ex, ey, ew, eh; + gint mx, my, mw, mh; + + a->get_position (ex, ey); + a->get_size (ew, eh); + b->get_position (mx, my); + b->get_size (mw, mh); + + GdkRectangle e; + GdkRectangle m; + GdkRectangle r; + + e.x = ex; + e.y = ey; + e.width = ew; + e.height = eh; + + m.x = mx; + m.y = my; + m.width = mw; + m.height = mh; + + if (gdk_rectangle_intersect (&e, &m, &r)) { + return true; + } + } + return false; +} diff --git a/gtk2_ardour/utils.h b/gtk2_ardour/utils.h index fe8a0f5cb5..df97da63bf 100644 --- a/gtk2_ardour/utils.h +++ b/gtk2_ardour/utils.h @@ -94,5 +94,7 @@ Gdk::Color unique_random_color (std::list<Gdk::Color> &); std::string rate_as_string (float r); +bool windows_overlap (Gtk::Window *a, Gtk::Window *b); + } // namespace #endif /* __ardour_gtk_utils_h__ */ diff --git a/gtk2_ardour/video_timeline.cc b/gtk2_ardour/video_timeline.cc index a1dd4bcfbb..12236eec38 100644 --- a/gtk2_ardour/video_timeline.cc +++ b/gtk2_ardour/video_timeline.cc @@ -761,14 +761,13 @@ VideoTimeLine::find_xjadeo () { { if (v_major >= 1) v_ok = true; else if (v_major == 0 && v_minor >= 8) v_ok = true; - else if (v_major == 0 && v_minor >= 7 && v_micro >= 7) v_ok = true; } } if (!v_ok) { _xjadeo_bin = X_(""); warning << _( "Video-monitor 'xjadeo' is too old. " - "Please install xjadeo version 0.7.7 or later. http://xjadeo.sf.net/" + "Please install xjadeo version 0.8.0 or later. http://xjadeo.sf.net/" ) << endmsg; } } diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index 84db23987f..fde642c373 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -106,7 +106,7 @@ gtk2_ardour_sources = [ 'group_tabs.cc', 'gtk_pianokeyboard.c', 'gui_object.cc', - 'insert_time_dialog.cc', + 'insert_remove_time_dialog.cc', 'instrument_selector.cc', 'interthread_progress_window.cc', 'io_selector.cc', @@ -200,7 +200,7 @@ gtk2_ardour_sources = [ 'route_time_axis.cc', 'route_ui.cc', 'ruler_dialog.cc', - 'save_as_dialog.cc', + 'save_as_dialog.cc', 'search_path_option.cc', 'selection.cc', 'selection_memento.cc', @@ -505,7 +505,7 @@ def build(bld): 'DATADIR' : os.path.normpath(bld.env['DATADIR']), 'CONFDIR' : os.path.normpath(bld.env['CONFDIR']), 'LIBS' : 'build/libs', - 'VERSION' : bld.env['VERSION'], + 'VERSION' : str (bld.env['VERSION']), 'EXECUTABLE' : 'build/gtk2_ardour/ardour-' + str (bld.env['VERSION']) } @@ -692,21 +692,21 @@ def build(bld): mo) def i18n(bld): - I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR'] - autowaf.build_i18n(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, - 'Paul Davis') - + I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR'] + autowaf.build_i18n(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, + 'Paul Davis') + def i18n_pot(bld): - I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR'] - autowaf.build_i18n_pot(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, - 'Paul Davis') + I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR'] + autowaf.build_i18n_pot(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, + 'Paul Davis') def i18n_po(bld): - I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR'] - autowaf.build_i18n_po(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, - 'Paul Davis') - + I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR'] + autowaf.build_i18n_po(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, + 'Paul Davis') + def i18n_mo(bld): - I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR'] - autowaf.build_i18n_mo(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, - 'Paul Davis') + I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR'] + autowaf.build_i18n_mo(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, + 'Paul Davis') diff --git a/libs/ardour/ardour/audio_diskstream.h b/libs/ardour/ardour/audio_diskstream.h index f48204d7ab..33126b5baf 100644 --- a/libs/ardour/ardour/audio_diskstream.h +++ b/libs/ardour/ardour/audio_diskstream.h @@ -209,9 +209,8 @@ class LIBARDOUR_API AudioDiskstream : public Diskstream /* The two central butler operations */ int do_flush (RunContext context, bool force = false); - int do_refill () { return _do_refill(_mixdown_buffer, _gain_buffer); } + int do_refill () { return _do_refill(_mixdown_buffer, _gain_buffer, 0); } - int do_refill_with_alloc (); int read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer, framepos_t& start, framecnt_t cnt, @@ -250,7 +249,6 @@ class LIBARDOUR_API AudioDiskstream : public Diskstream static void allocate_working_buffers(); static void free_working_buffers(); - static size_t _working_buffers_size; static Sample* _mixdown_buffer; static gain_t* _gain_buffer; @@ -258,9 +256,12 @@ class LIBARDOUR_API AudioDiskstream : public Diskstream SerializedRCUManager<ChannelList> channels; + protected: + int _do_refill_with_alloc (bool one_chunk_only); + /* really */ private: - int _do_refill (Sample *mixdown_buffer, float *gain_buffer); + int _do_refill (Sample *mixdown_buffer, float *gain_buffer, framecnt_t fill_level); int add_channel_to (boost::shared_ptr<ChannelList>, uint32_t how_many); int remove_channel_from (boost::shared_ptr<ChannelList>, uint32_t how_many); diff --git a/libs/ardour/ardour/audio_unit.h b/libs/ardour/ardour/audio_unit.h index 13b16827cb..8fcdcf75a4 100644 --- a/libs/ardour/ardour/audio_unit.h +++ b/libs/ardour/ardour/audio_unit.h @@ -241,7 +241,7 @@ class LIBARDOUR_API AUPluginInfo : public PluginInfo { bool reconfigurable_io() const { return true; } - static PluginInfoList* discover (); + static PluginInfoList* discover (bool scan_only); static bool au_get_crashlog (std::string &msg); static void get_names (CAComponentDescription&, std::string& name, std::string& maker); static std::string stringify_descriptor (const CAComponentDescription&); @@ -252,6 +252,7 @@ class LIBARDOUR_API AUPluginInfo : public PluginInfo { boost::shared_ptr<CAComponentDescription> descriptor; UInt32 version; static FILE * _crashlog_fd; + static bool _scan_only; static void au_start_crashlog (void); static void au_remove_crashlog (void); @@ -267,7 +268,7 @@ class LIBARDOUR_API AUPluginInfo : public PluginInfo { typedef std::map<std::string,AUPluginCachedInfo> CachedInfoMap; static CachedInfoMap cached_info; - static bool cached_io_configuration (const std::string&, UInt32, CAComponent&, AUPluginCachedInfo&, const std::string& name); + static int cached_io_configuration (const std::string&, UInt32, CAComponent&, AUPluginCachedInfo&, const std::string& name); static void add_cached_info (const std::string&, AUPluginCachedInfo&); static void save_cached_info (); }; diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h index 330de4e285..d1e3f8a7ef 100644 --- a/libs/ardour/ardour/audioengine.h +++ b/libs/ardour/ardour/audioengine.h @@ -209,6 +209,9 @@ class LIBARDOUR_API AudioEngine : public SessionHandlePtr, public PortManager void latency_callback (bool for_playback); void halted_callback (const char* reason); + /* checks if current thread is properly set up for audio processing */ + static bool thread_initialised_for_audio_processing (); + /* sets up the process callback thread */ static void thread_init_callback (void *); diff --git a/libs/ardour/ardour/audioregion.h b/libs/ardour/ardour/audioregion.h index 8e510b3e43..086544f3aa 100644 --- a/libs/ardour/ardour/audioregion.h +++ b/libs/ardour/ardour/audioregion.h @@ -73,7 +73,11 @@ class LIBARDOUR_API AudioRegion : public Region bool speed_mismatch (float) const; boost::shared_ptr<AudioSource> audio_source (uint32_t n=0) const; - + + // if several audio files associated with a region, + // information about file with MAX channel count will be provided + uint32_t get_related_audio_file_channel_count () const; + void set_scale_amplitude (gain_t); gain_t scale_amplitude() const { return _scale_amplitude; } diff --git a/libs/ardour/ardour/audiosource.h b/libs/ardour/ardour/audiosource.h index 095d9d2169..c02310ea28 100644 --- a/libs/ardour/ardour/audiosource.h +++ b/libs/ardour/ardour/audiosource.h @@ -109,8 +109,6 @@ class LIBARDOUR_API AudioSource : virtual public Source, static bool _build_missing_peakfiles; static bool _build_peakfiles; - static size_t _working_buffers_size; - /* these collections of working buffers for supporting playlist's reading from potentially nested/recursive sources assume SINGLE THREADED reads by the butler diff --git a/libs/ardour/ardour/butler.h b/libs/ardour/ardour/butler.h index 94b6fb876b..7f0847498e 100644 --- a/libs/ardour/ardour/butler.h +++ b/libs/ardour/ardour/butler.h @@ -61,6 +61,8 @@ class LIBARDOUR_API Butler : public SessionHandleRef bool transport_work_requested() const; void drop_references (); + void map_parameters (); + framecnt_t audio_diskstream_capture_buffer_size() const { return audio_dstream_capture_buffer_size; } framecnt_t audio_diskstream_playback_buffer_size() const { return audio_dstream_playback_buffer_size; } uint32_t midi_diskstream_buffer_size() const { return midi_dstream_buffer_size; } diff --git a/libs/ardour/ardour/coreaudiosource.h b/libs/ardour/ardour/coreaudiosource.h index 5e8e696bf9..44016b46a4 100644 --- a/libs/ardour/ardour/coreaudiosource.h +++ b/libs/ardour/ardour/coreaudiosource.h @@ -39,6 +39,8 @@ class LIBARDOUR_API CoreAudioSource : public AudioFileSource { float sample_rate() const; int update_header (framepos_t when, struct tm&, time_t); + uint32_t channel_count () const { return n_channels; } + int flush_header () {return 0;}; void set_header_timeline_position () {}; bool clamped_at_unity () const { return false; } diff --git a/libs/ardour/ardour/debug.h b/libs/ardour/ardour/debug.h index 1c19d855bc..94974a1dcd 100644 --- a/libs/ardour/ardour/debug.h +++ b/libs/ardour/ardour/debug.h @@ -69,6 +69,7 @@ namespace PBD { LIBARDOUR_API extern DebugBits AudioEngine; LIBARDOUR_API extern DebugBits Soundcloud; LIBARDOUR_API extern DebugBits Butler; + LIBARDOUR_API extern DebugBits GenericMidi; } } diff --git a/libs/ardour/ardour/directory_names.h b/libs/ardour/ardour/directory_names.h index db3fc1d533..5c0eae909c 100644 --- a/libs/ardour/ardour/directory_names.h +++ b/libs/ardour/ardour/directory_names.h @@ -42,6 +42,10 @@ namespace ARDOUR { LIBARDOUR_API extern const char* const ladspa_dir_name; LIBARDOUR_API extern const char* const panner_dir_name; LIBARDOUR_API extern const char* const backend_dir_name; + LIBARDOUR_API extern const char* const automation_dir_name; + LIBARDOUR_API extern const char* const analysis_dir_name; + LIBARDOUR_API extern const char* const plugins_dir_name; + LIBARDOUR_API extern const char* const externals_dir_name; }; diff --git a/libs/ardour/ardour/diskstream.h b/libs/ardour/ardour/diskstream.h index fc41d10160..fb9be653e1 100644 --- a/libs/ardour/ardour/diskstream.h +++ b/libs/ardour/ardour/diskstream.h @@ -103,8 +103,8 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream framecnt_t roll_delay() const { return _roll_delay; } void set_roll_delay (framecnt_t); - bool record_enabled() const { return g_atomic_int_get (&_record_enabled); } - bool record_safe () const { return g_atomic_int_get (&_record_safe); } + bool record_enabled() const { return g_atomic_int_get (const_cast<gint*>(&_record_enabled)); } + bool record_safe () const { return g_atomic_int_get (const_cast<gint*>(&_record_safe)); } virtual void set_record_enabled (bool yn) = 0; virtual void set_record_safe (bool yn) = 0; @@ -147,6 +147,8 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream static framecnt_t default_disk_read_chunk_frames (); static framecnt_t default_disk_write_chunk_frames (); + static void set_buffering_parameters (BufferingPreset bp); + /* Stateful */ virtual XMLNode& get_state(void); virtual int set_state(const XMLNode&, int version); @@ -169,8 +171,15 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream void move_processor_automation (boost::weak_ptr<Processor>, std::list<Evoral::RangeMove<framepos_t> > const &); - /** For non-butler contexts (allocates temporary working buffers) */ - virtual int do_refill_with_alloc() = 0; + /** For non-butler contexts (allocates temporary working buffers) + * + * This accessible method has a default argument; derived classes + * must inherit the virtual method that we call which does NOT + * have a default argument, to avoid complications with inheritance + */ + int do_refill_with_alloc(bool partial_fill = true) { + return _do_refill_with_alloc (partial_fill); + } virtual void set_block_size (pframes_t) = 0; bool pending_overwrite () const { @@ -203,6 +212,11 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream virtual int can_internal_playback_seek (framecnt_t distance) = 0; virtual void reset_write_sources (bool, bool force = false) = 0; virtual void non_realtime_input_change () = 0; + /* accessible method has default argument, so use standard C++ "trick" + to avoid complications with inheritance, by adding this virtual + method which does NOT have a default argument. + */ + virtual int _do_refill_with_alloc (bool partial_fill) = 0; protected: friend class Auditioner; @@ -345,6 +359,12 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream XMLNode* deprecated_io_node; void route_going_away (); + + static bool get_buffering_presets (BufferingPreset bp, + framecnt_t& read_chunk_size, + framecnt_t& read_buffer_size, + framecnt_t& write_chunk_size, + framecnt_t& write_buffer_size); }; }; /* namespace ARDOUR */ diff --git a/libs/ardour/ardour/engine_state_controller.h b/libs/ardour/ardour/engine_state_controller.h new file mode 100644 index 0000000000..737fb3b579 --- /dev/null +++ b/libs/ardour/ardour/engine_state_controller.h @@ -0,0 +1,653 @@ +/* + Copyright (C) 2014 Waves Audio Ltd. + + 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__engine_state_controller__ +#define __gtk2_ardour__engine_state_controller__ + +#include <vector> +#include <list> + +#include "ardour/types.h" +#include "ardour/audio_backend.h" + +namespace ARDOUR { + +class AudioBackendInfo; + +/** + * @class EngineStateController + * @brief EngineStateController class. + * + * Implements usecases for Audio devices and Audio/Midi ports. + * Persistantly saves to the config device configuration settings and audio/midi port states + */ +class EngineStateController +{ + public: + + // public data types: + + /** + * @struct PortState + * Structure which represents AudioPort state + */ + struct PortState { + std::string name; ///< Audio Port name + bool active; ///< Audio Port state + + PortState () + : name("") + , active(false) + { + } + + PortState (const std::string& name) + : name(name) + , active(false) + { + } + + bool operator==(const PortState& rhs) {return rhs.name == name; } + + }; + + /// @typedef Type for the list of all available audio ports + typedef std::list<PortState> PortStateList; + + /** + * @struct MidiPortState + * Structure which represents MidiPort state. + */ + struct MidiPortState + { + std::string name; ///< Midi Port name + bool active; ///< Midi Port state + bool available; ///< Midi Port availability - if it is physicaly available or not + bool scene_connected; ///< Is midi port used for scene MIDI marker in/out + bool mtc_in; ///< Is midi port used as MTC in + + MidiPortState(const std::string& name) + : name(name) + , active(false) + , available(false) + , scene_connected(false) + , mtc_in(false) + {} + + bool operator==(const MidiPortState& rhs) + { + return name == rhs.name; + } + }; + + /// @typedef Type for the list of MidiPorts ever registered in the system + typedef std::list<MidiPortState> MidiPortStateList; + + + //Interfaces + + /** Get an instance of EngineStateController singleton. + * @return EngineStateController instance pointer + */ + static EngineStateController* instance (); + + /** Associate session with EngineStateController instance. + */ + void set_session (Session* session); + + /** Remove link to the associated session. + */ + void remove_session (); + + ////////////////////////////////////////////////////////////////////////////////////////////////////////// + // General backend/device information methods + + /** Provides names of all available backends. + * + * @param[out] available_backends - vector of available backends + */ + void available_backends (std::vector<const AudioBackendInfo*>& available_backends); + + /** Provides the name of currently used backend. + * + * @return the name of currently used backend + */ + const std::string& get_current_backend_name() const; + + /** Provides the name of currently used device. + * + * @return the name of currently used device + */ + const std::string& get_current_device_name () const; + + /** Provides names for all available devices. + * + * @param[out] device_vector - vector of available devices + */ + void enumerate_devices (std::vector<ARDOUR::AudioBackend::DeviceStatus>& device_vector) const; + + /** Get sample rate used by current device. + * + * @return current sample rate + */ + ARDOUR::framecnt_t get_current_sample_rate () const; + + /** Get default sample rate for current backend. + * + * @return default sample rate for current backend + */ + ARDOUR::framecnt_t get_default_sample_rate () const; + + /** Get sample rates which are supported by current device and current backend. + * + * @param[out] sample_rates - vector of supported sample rates + */ + void available_sample_rates_for_current_device (std::vector<float>& sample_rates) const; + + /** Get buffer size used by current device. + * + * @return current buffer size + */ + ARDOUR::pframes_t get_current_buffer_size () const; + + /** Get default buffer size for current backend. + * + * @return default buffer size for current backend + */ + ARDOUR::pframes_t get_default_buffer_size () const; + + /** Get buffer sizes which are supported by current device and current backend. + * + * @param[out] buffer_sizes - vector of supported buffer_sizes + */ + void available_buffer_sizes_for_current_device (std::vector<ARDOUR::pframes_t>& buffer_sizes) const; + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // device state control methods + + /** Get the number of all enabled Audio inputs. + * + * @return number of all enabled Audio inputs + */ + uint32_t get_available_inputs_count() const; + /** Get the number of all enabled Audio outputs. + * + * @return number of all enabled Audio outputs + */ + uint32_t get_available_outputs_count () const; + + /** Get vector of all enabled physical Audio input port names. + * + * @param[out] port_names - vector of all enabled Audio input names + */ + void get_physical_audio_inputs (std::vector<std::string>& port_names); + /** Get vector of all enabled physical Audio input port names. + * + * @param[out] port_names - vector of all enabled Audio input names + */ + void get_physical_audio_outputs (std::vector<std::string>& port_names); + + /** Get vector of all enabled physical MIDI input port names. + * + * @param[out] port_names - vector of all enabled MIDI input names + */ + void get_physical_midi_inputs (std::vector<std::string>& port_names); + /** Get vector of all enabled physical MIDI output port names. + * + * @param[out] port_names - vector of all enabled MIDI output names + */ + void get_physical_midi_outputs (std::vector<std::string>& port_names); + + /** Sets new state to all Audio inputs. + * + * @param[in] state - new state + */ + void set_state_to_all_inputs(bool state); + /** Sets new state to all Audio outputs. + * @note Does nothing in Stereo Out mode + * @param[in] state - new state + */ + void set_state_to_all_outputs(bool state); + + /** Get vector of states for all physical Audio input ports. + * + * @param[out] channel_states - vector of input port states + */ + void get_physical_audio_input_states(std::vector<PortState>& channel_states); + /** Get vector of states for all physical Audio output ports. + * + * @param[out] channel_states - vector of output port states + */ + void get_physical_audio_output_states(std::vector<PortState>& channel_states); + + /** Set state of the specified Audio input port. + * + * @param[in] port_name - input name + * @param[in] state - new state + */ + void set_physical_audio_input_state(const std::string& port_name, bool state); + /** Set state of the specified Audio output port. + * + * @param[in] port_name - output name + * @param[in] state - new state + */ + void set_physical_audio_output_state(const std::string& port_name, bool state); + + /** Get state of the specified Audio input port. + * + * @param[in] port_name - input name + * @return input state + */ + bool get_physical_audio_input_state(const std::string& port_name); + /** Get state of the specified Audi output port. + * + * @param[in] port_name - output name + * @return output state + */ + bool get_physical_audio_output_state(const std::string& port_name); + + + /** Get vector of all enabled MIDI input port names. + * + * @param[out] channel_states - vector of enabled inputs + */ + void get_physical_midi_input_states (std::vector<MidiPortState>& channel_states); + /** Get vector of all enabled MIDI output port names. + * + * @param[out] channel_states - vector of enabled outputs + */ + void get_physical_midi_output_states (std::vector<MidiPortState>& channel_states); + + /** Get name of mtc source port + * + * return name of mtc source port + */ + std::string get_mtc_source_port (); + + /** Set ltc source port + * + * @param[in] port - name of ltc source port + */ + void set_ltc_source_port (const std::string& port); + /** Get name of ltc source port + * + * return name of ltc source port + */ + std::string get_ltc_source_port (); + + /** Set ltc output port + * + * @param[in] port - name of ltc output port + */ + void set_ltc_output_port (const std::string&); + /** Get name of ltc output port + * + * return name of ltc output port + */ + std::string get_ltc_output_port (); + + /** Set state of the specified MIDI input port. + * + * @param[in] port_name - input name + * @param[in] state - new state + */ + void set_physical_midi_input_state(const std::string& port_name, bool state); + /** Set state of the specified MIDI output port. + * + * @param[in] port_name - output name + * @param[in] state - new state + */ + void set_physical_midi_output_state(const std::string& port_name, bool state); + /** Get state of the specified MIDI input port. + * + * @param[in] port_name - input name + * @param[out] scene_connected - is port used as Scene In or not + * @return input state + */ + bool get_physical_midi_input_state(const std::string& port_name, bool& scene_connected); + /** Get state of the specified MIDI output port. + * + * @param[in] port_name - output name + * @param[out] scene_connected - is port used as Scene Out or not + * @return output state + */ + bool get_physical_midi_output_state(const std::string& port_name, bool& scene_connected); + + /** Set state of Scene In connection for the specified MIDI input port. + * + * @param[in] port_name - input name + * @param[in] state - new state + */ + void set_physical_midi_scene_in_connection_state(const std::string& port_name, bool state); + /** Set state of Scene Out connection for the specified MIDI output port. + * + * @param[in] port_name - input name + * @param[in] state - new state + */ + void set_physical_midi_scenen_out_connection_state(const std::string&, bool); + + /** Disocnnect all MIDI input ports from Scene In. + */ + void set_all_midi_scene_inputs_disconnected(); + /** Disocnnect all MIDI output ports from Scene Out. + */ + void set_all_midi_scene_outputs_disconnected(); + + /** Set MIDI TimeCode input port + * @note There is a sense to choose MIDI TimeCode input only because + * our MIDI TimeCode is propagated to all midi output ports. + */ + void set_mtc_source_port (const std::string&); + + /** Check if AudioEngine setup is required + * @return true if setup is required, otherwise - false + */ + bool is_setup_required() const {return ARDOUR::AudioEngine::instance()->setup_required (); } + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Methods set parameters inside the controller + // the state of engine won't change untill we make a "push" of this state to the backend + // NOTE: Use push_state_to_backend() method to update backend with the most recent controller state + + /** Set new sample rate for current device in EngineStateController database + * @note Use push_state_to_backend() method to update backend/device state with the most recent controller state + * @param sample_rate - new sample rate + */ + bool set_new_sample_rate_in_controller(framecnt_t sample_rate); + /** Set new buffer size for current device in EngineStateController database + * @note Use push_state_to_backend() method to update backend/device state with the most recent controller state + * @param buffer_size - new buffer size + */ + bool set_new_buffer_size_in_controller(pframes_t buffer_size); + + /** @brief push current controller state to backend. + * Propagate and set all current EngineStateController parameters to the backend + * @note Engine will be restarted if it's running when this method is called. + * @note If an attempt ot set parameters is unsuccessful current device will be switched to "None". + * @param start - start the Engine if it was not running when this function was called. + * @return true on success, otherwise - false + */ + bool push_current_state_to_backend(bool start); + /** Switch to new backend + * @note The change will be propagated emmidiatelly as if push_current_state_to_backend () was called. + * @param backend_name - new backend name. + * @return true on success, otherwise - false + */ + bool set_new_backend_as_current(const std::string& backend_name); + /** Switch to new device + * @note The change will be propagated emmidiatelly as if push_current_state_to_backend () was called. + * @param device_name - new device name. + * @return true on success, otherwise - false + */ + bool set_new_device_as_current(const std::string& device_name); + + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // Methods to save/serialize setting states + + /** Serialize Audio/Midi settings (entire EngineStateController database) to XML + * @return XML note with serialized states + */ + XMLNode& serialize_audio_midi_settings(); + /** Save Audio/Midi settings (entire EngineStateController database) to config persistently + */ + void save_audio_midi_settings(); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + //UPDATE SIGNALS + /** This signal is emitted if the sample rate changes */ + PBD::Signal0<void> SampleRateChanged; + /** This signal is emitted if the buffer size changes */ + PBD::Signal0<void> BufferSizeChanged; + /** This signal is emitted if the device list changes */ + PBD::Signal1<void, bool> DeviceListChanged; + /** This signal is emitted if the device cannot operate properly */ + PBD::Signal0<void> DeviceError; + + //////////////////////////////////////////////////////////////////////////////////////////////////// + //ENGINE STATE SIGNALS + /** This signal is emitted when the engine is started */ + PBD::Signal0<void> EngineRunning; + /** This signal is emitted when the engine is stopped */ + PBD::Signal0<void> EngineStopped; + /** This signal is emitted if Engine processing is terminated */ + PBD::Signal0<void> EngineHalted; + + /** This signal is emitted if the AUDIO input channel configuration changes */ + PBD::Signal0<void> InputConfigChanged; + /** This signal is emitted if the AUDIO output channel configuration changes */ + PBD::Signal0<void> OutputConfigChanged; + /** This signal is emitted if the AUDIO output connection mode changes + * @note By output connection mode "Stereo Out" or "Multi Out" is meant + */ + PBD::Signal0<void> OutputConnectionModeChanged; + + /** This signals is emitted if the MIDI input channel configuration changes */ + PBD::Signal0<void> MIDIInputConfigChanged; + /** This signals is emitted if the MIDI output channel configuration changes */ + PBD::Signal0<void> MIDIOutputConfigChanged; + /** This signals is emitted if the MIDI Scene In connection changes */ + PBD::Signal2<void, const std::vector<std::string>&, bool> MIDISceneInputConnectionChanged; + /** This signals is emitted if the MIDI Scene Out connection changes */ + PBD::Signal2<void, const std::vector<std::string>&, bool> MIDISceneOutputConnectionChanged; + + /** This signal is emitted if the MTC Input channel is changed */ + PBD::Signal1<void, const std::string&> MTCInputChanged; + + /** This signal is emitted if new Audio/MIDI ports are registered or unregistered */ + PBD::Signal0<void> PortRegistrationChanged; + + private: + + EngineStateController(); /// singleton + ~EngineStateController(); /// singleton + EngineStateController(const EngineStateController& ); /// prohibited + EngineStateController& operator=(const EngineStateController&); /// prohibited + + //////////////////////////////////////////////////////////////////////////////////////////// + // private data structures + + /** @struct Engine state + * @brief State structure. + * Contains information about single device/backend state + */ + struct State { + std::string backend_name; ///< state backend name + std::string device_name; ///< state device name + ARDOUR::framecnt_t sample_rate; ///< sample rate used by the device in this state + ARDOUR::pframes_t buffer_size; ///< buffer size used by the device in this state + + PortStateList input_channel_states; ///< states of device Audio inputs + PortStateList multi_out_channel_states; ///< states of device Audio inputs in Multi Out mode + PortStateList stereo_out_channel_states; ///< states of device Audio inputs in Stereo Out mode + bool active; ///< was this state the most recent active one + + State() + : sample_rate(0) + , buffer_size(0) + , input_channel_states (0) + , multi_out_channel_states (0) + , stereo_out_channel_states (0) + , active (false) + { + } + + bool operator==(const State& rhs) + { + return (backend_name == rhs.backend_name) && (device_name == rhs.device_name); + } + + /** Forms string name for the state + * @return name string + */ + std::string form_state_name() { + return std::string("State:" + backend_name + ":" + device_name); + } + + /** @struct StatepPredicate + * This predicate is used to identify a state during search in the list of states + */ + struct StatePredicate + { + StatePredicate(const std::string& backend_name, const std::string& device_name) + : _backend_name (backend_name) + , _device_name (device_name) + {} + + bool operator()(boost::shared_ptr<ARDOUR::EngineStateController::State> rhs) + { + return (_backend_name == rhs->backend_name) && (_device_name == rhs->device_name); + } + + private: + std::string _backend_name; + std::string _device_name; + }; + }; + + /// @typedef Type for the state pointer + typedef boost::shared_ptr<State> StatePtr; + /// @typedef Type for the list of states + typedef std::list<StatePtr> StateList; + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // methods to manage setting states + + /** Deserializes and loads Engine and Audio port states from the config to EngineStateController + */ + void _deserialize_and_load_engine_states(); + /** Deserializes and loads MIDI port states from the config to EngineStateController + */ + void _deserialize_and_load_midi_port_states(); + /** Serializes Engine and Audio port states from EngineStateController to XML node + * @param[in,out] audio_midi_settings_node - node to serialize the satets to + */ + void _serialize_engine_states(XMLNode* audio_midi_settings_node); + /** Serializes MIDI port states from EngineStateController to XML node + * @param[in,out] audio_midi_settings_node - node to serialize the satets to + */ + void _serialize_midi_port_states(XMLNode* audio_midi_settings_node); + + /** Provides initial state configuration. + * It loades the last active state if there is one and it is aplicable. + * Otherwise default state (None device with default sample rate and buffer size) is loaded. + */ + void _do_initial_engine_setup(); + + /** Loades provided state. + * @note It's possible that provided state can't be loaded + * (device disconnected or reqested parameters are not supported anymore). + * @param state - state to apply + * @return true on success, otherwise - false + */ + bool _apply_state(const StatePtr& state); + + /** Gets available device channels from engine and updates internal controller state + */ + void _update_device_channels_state(); + + /** Check "Stereo Out" mode channels state configuration and make it correspond Stereo Out mode requirements + */ + void _refresh_stereo_out_channel_states(); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////// + // internal helper functions + /** make sure that current device parameters are supported and fit session requirements + * @return true if current state is valid and all parameters are supported, otherwise - false + */ + bool _validate_current_device_state(); + + /** change ltc source port in case of the input ports list change + */ + void _update_ltc_source_port (); + /** change ltc source port in case of the output ports list change + */ + void _update_ltc_output_port (); + + /** check that port is still existed in the list of input ports + @param[in] port - port name + @return true if current port is existed, otherwise - false + */ + bool _audio_input_port_exists (const std::string& port); + /** check that port is still existed in the list of output ports + @param[in] port - port name + @return true if current port is existed, otherwise - false + */ + bool _audio_output_port_exists (const std::string& port); + + + + //////////////////////////////////////// + // callbacks + /** Invoked when Engine starts running + */ + void _on_engine_running(); + /** Invoked when Engine is halted + */ + void _on_engine_halted(); + /** Invoked when Engine processing is terminated + */ + void _on_engine_stopped(); + /** Invoked when Device error accured, it failed to start or didn't accept the change which should + */ + void _on_device_error(); + /** Invoked when current device changes sample rate + */ + void _on_sample_rate_change(ARDOUR::framecnt_t); + /** Invoked when current device changes buffer size + */ + void _on_buffer_size_change(ARDOUR::pframes_t); + /** Invoked when the list of available devices is changed + */ + void _on_device_list_change(); + /** Invoked when the config parameter is changed + */ + void _on_parameter_changed (const std::string&); + /** Invoked when Audio/MIDI ports are registered or unregistered + */ + void _on_ports_registration_update (); + /** Invoked when session loading process is complete + */ + void _on_session_loaded(); + //////////////////////////////////////// + + //////////////////////////////////////// + // attributes + StatePtr _current_state; ///< current state pointer + // list of system states + StateList _states; ///< list of all available states + + MidiPortStateList _midi_inputs; ///< midi input states + MidiPortStateList _midi_outputs; ///< midi output states + + std::string _last_used_real_device; ///< last active non-default (real) device + + Session* _session; ///< current session + + // Engine connections stuff + PBD::ScopedConnectionList update_connections; ///< connection container for update signals + PBD::ScopedConnectionList session_connections; ///< connection container for session signals + PBD::ScopedConnection running_connection; ///< connection container for EngineRunning signal + PBD::ScopedConnection halt_connection; ///< connection container for EngineHalted signal + PBD::ScopedConnection stopped_connection; ///< connection container for EngineStopped signal +}; + +} // namespace ARDOUR + +#endif /* defined(__gtk2_ardour__engine_state_controller__) */ diff --git a/libs/ardour/ardour/export_format_base.h b/libs/ardour/ardour/export_format_base.h index aa2ef69240..093913e294 100644 --- a/libs/ardour/ardour/export_format_base.h +++ b/libs/ardour/ardour/export_format_base.h @@ -102,6 +102,7 @@ class LIBARDOUR_API ExportFormatBase { SR_48 = 48000, SR_88_2 = 88200, SR_96 = 96000, + SR_176_4 = 176400, SR_192 = 192000 }; diff --git a/libs/ardour/ardour/export_format_specification.h b/libs/ardour/ardour/export_format_specification.h index ed6e259644..87a7729887 100644 --- a/libs/ardour/ardour/export_format_specification.h +++ b/libs/ardour/ardour/export_format_specification.h @@ -114,11 +114,42 @@ class LIBARDOUR_API ExportFormatSpecification : public ExportFormatBase { std::string format_name () const { return _format_name; } Type type () const { return _type; } - FormatId format_id () const { return *format_ids.begin(); } - Endianness endianness () const { return *endiannesses.begin(); } - SampleFormat sample_format () const { return *sample_formats.begin(); } - SampleRate sample_rate () const { return *sample_rates.begin(); } - Quality quality () const { return *qualities.begin(); } + + FormatId format_id () const { + if (!format_ids.empty() ) + return *format_ids.begin(); + else + return FormatId(0); + } + + Endianness endianness () const { + if (!endiannesses.empty() ) + return *endiannesses.begin(); + else + return Endianness(0); + } + + SampleFormat sample_format () const { + if (!sample_formats.empty() ) + return *sample_formats.begin(); + else + return SampleFormat(0); + } + + SampleRate sample_rate () const { + if (!sample_rates.empty() ) + return *sample_rates.begin(); + else + return SampleRate(0); + + } + + Quality quality () const { + if (!qualities.empty() ) + return *qualities.begin(); + else + return Quality(0); + } DitherType dither_type () const { return _dither_type; } SRCQuality src_quality () const { return _src_quality; } diff --git a/libs/ardour/ardour/export_graph_builder.h b/libs/ardour/ardour/export_graph_builder.h index 40960b2b38..5dc6cd7ac2 100644 --- a/libs/ardour/ardour/export_graph_builder.h +++ b/libs/ardour/ardour/export_graph_builder.h @@ -68,22 +68,25 @@ class LIBARDOUR_API ExportGraphBuilder unsigned get_normalize_cycle_count() const; void reset (); + void cleanup (bool remove_out_files = false); void set_current_timespan (boost::shared_ptr<ExportTimespan> span); void add_config (FileSpec const & config); private: void add_split_config (FileSpec const & config); - + class Encoder { - public: + public: template <typename T> boost::shared_ptr<AudioGrapher::Sink<T> > init (FileSpec const & new_config); void add_child (FileSpec const & new_config); + void remove_children (); + void destroy_writer (bool delete_out_file); bool operator== (FileSpec const & other_config) const; static int get_real_format (FileSpec const & config); - private: + private: typedef boost::shared_ptr<AudioGrapher::SndfileWriter<Sample> > FloatWriterPtr; typedef boost::shared_ptr<AudioGrapher::SndfileWriter<int> > IntWriterPtr; typedef boost::shared_ptr<AudioGrapher::SndfileWriter<short> > ShortWriterPtr; @@ -95,6 +98,8 @@ class LIBARDOUR_API ExportGraphBuilder std::list<ExportFilenamePtr> filenames; PBD::ScopedConnection copy_files_connection; + std::string writer_filename; + // Only one of these should be available at a time FloatWriterPtr float_writer; IntWriterPtr int_writer; @@ -103,14 +108,15 @@ class LIBARDOUR_API ExportGraphBuilder // sample format converter class SFC { - public: + public: // This constructor so that this can be constructed like a Normalizer SFC (ExportGraphBuilder &, FileSpec const & new_config, framecnt_t max_frames); FloatSinkPtr sink (); void add_child (FileSpec const & new_config); + void remove_children (bool remove_out_files); bool operator== (FileSpec const & other_config) const; - private: + private: typedef boost::shared_ptr<AudioGrapher::SampleFormatConverter<Sample> > FloatConverterPtr; typedef boost::shared_ptr<AudioGrapher::SampleFormatConverter<int> > IntConverterPtr; typedef boost::shared_ptr<AudioGrapher::SampleFormatConverter<short> > ShortConverterPtr; @@ -126,10 +132,11 @@ class LIBARDOUR_API ExportGraphBuilder }; class Normalizer { - public: + public: Normalizer (ExportGraphBuilder & parent, FileSpec const & new_config, framecnt_t max_frames); FloatSinkPtr sink (); void add_child (FileSpec const & new_config); + void remove_children (bool remove_out_files); bool operator== (FileSpec const & other_config) const; unsigned get_normalize_cycle_count() const; @@ -137,7 +144,7 @@ class LIBARDOUR_API ExportGraphBuilder /// Returns true when finished bool process (); - private: + private: typedef boost::shared_ptr<AudioGrapher::PeakReader> PeakReaderPtr; typedef boost::shared_ptr<AudioGrapher::Normalizer> NormalizerPtr; typedef boost::shared_ptr<AudioGrapher::TmpFile<Sample> > TmpFilePtr; @@ -163,13 +170,15 @@ class LIBARDOUR_API ExportGraphBuilder // sample rate converter class SRC { - public: + public: SRC (ExportGraphBuilder & parent, FileSpec const & new_config, framecnt_t max_frames); FloatSinkPtr sink (); void add_child (FileSpec const & new_config); + void remove_children (bool remove_out_files); + bool operator== (FileSpec const & other_config) const; - private: + private: typedef boost::shared_ptr<AudioGrapher::SampleRateConverter> SRConverterPtr; template<typename T> @@ -185,13 +194,14 @@ class LIBARDOUR_API ExportGraphBuilder // Silence trimmer + adder class SilenceHandler { - public: + public: SilenceHandler (ExportGraphBuilder & parent, FileSpec const & new_config, framecnt_t max_frames); FloatSinkPtr sink (); void add_child (FileSpec const & new_config); + void remove_children (bool remove_out_files); bool operator== (FileSpec const & other_config) const; - private: + private: typedef boost::shared_ptr<AudioGrapher::SilenceTrimmer<Sample> > SilenceTrimmerPtr; ExportGraphBuilder & parent; @@ -203,12 +213,13 @@ class LIBARDOUR_API ExportGraphBuilder // channel configuration class ChannelConfig { - public: + public: ChannelConfig (ExportGraphBuilder & parent, FileSpec const & new_config, ChannelMap & channel_map); void add_child (FileSpec const & new_config); + void remove_children (bool remove_out_files); bool operator== (FileSpec const & other_config) const; - private: + private: typedef boost::shared_ptr<AudioGrapher::Interleaver<Sample> > InterleaverPtr; typedef boost::shared_ptr<AudioGrapher::Chunker<Sample> > ChunkerPtr; diff --git a/libs/ardour/ardour/filter.h b/libs/ardour/ardour/filter.h index 2b6476c49f..e80d1fcfd5 100644 --- a/libs/ardour/ardour/filter.h +++ b/libs/ardour/ardour/filter.h @@ -43,7 +43,7 @@ class LIBARDOUR_API Filter { protected: Filter (ARDOUR::Session& s) : session(s) {} - int make_new_sources (boost::shared_ptr<ARDOUR::Region>, ARDOUR::SourceList&, std::string suffix = ""); + int make_new_sources (boost::shared_ptr<ARDOUR::Region>, ARDOUR::SourceList&, std::string suffix = "", bool use_session_sample_rate = true); int finish (boost::shared_ptr<ARDOUR::Region>, ARDOUR::SourceList&, std::string region_name = ""); ARDOUR::Session& session; diff --git a/libs/ardour/ardour/location.h b/libs/ardour/ardour/location.h index f809dbf280..6b1f89dab3 100644 --- a/libs/ardour/ardour/location.h +++ b/libs/ardour/ardour/location.h @@ -62,7 +62,7 @@ class LIBARDOUR_API Location : public SessionHandleRef, public PBD::StatefulDest Location (Session &, const XMLNode&); Location* operator= (const Location& other); - bool operator==(const Location& other); + bool operator==(const Location& other); bool locked() const { return _locked; } void lock (); @@ -86,8 +86,8 @@ class LIBARDOUR_API Location : public SessionHandleRef, public PBD::StatefulDest void set_hidden (bool yn, void *src); void set_cd (bool yn, void *src); void set_is_range_marker (bool yn, void* src); - void set_skip (bool yn); - void set_skipping (bool yn); + void set_skip (bool yn); + void set_skipping (bool yn); bool is_auto_punch () const { return _flags & IsAutoPunch; } bool is_auto_loop () const { return _flags & IsAutoLoop; } @@ -105,28 +105,29 @@ class LIBARDOUR_API Location : public SessionHandleRef, public PBD::StatefulDest boost::shared_ptr<SceneChange> scene_change() const { return _scene_change; } void set_scene_change (boost::shared_ptr<SceneChange>); - /* these are static signals for objects that want to listen to all - locations at once. - */ + /* these are static signals for objects that want to listen to all + locations at once. + */ static PBD::Signal1<void,Location*> name_changed; static PBD::Signal1<void,Location*> end_changed; static PBD::Signal1<void,Location*> start_changed; static PBD::Signal1<void,Location*> flags_changed; - static PBD::Signal1<void,Location*> lock_changed; + static PBD::Signal1<void,Location*> lock_changed; static PBD::Signal1<void,Location*> position_lock_style_changed; /* this is sent only when both start and end change at the same time */ static PBD::Signal1<void,Location*> changed; - /* these are member signals for objects that care only about - changes to this object - */ + /* these are member signals for objects that care only about + changes to this object + */ + PBD::Signal0<void> Changed; + PBD::Signal0<void> NameChanged; PBD::Signal0<void> EndChanged; PBD::Signal0<void> StartChanged; - PBD::Signal0<void> Changed; PBD::Signal0<void> FlagsChanged; PBD::Signal0<void> LockChanged; PBD::Signal0<void> PositionLockStyleChanged; @@ -143,8 +144,9 @@ class LIBARDOUR_API Location : public SessionHandleRef, public PBD::StatefulDest void set_position_lock_style (PositionLockStyle ps); void recompute_frames_from_bbt (); - static PBD::Signal0<void> scene_changed; - + static PBD::Signal0<void> scene_changed; /* for use by backend scene change management, class level */ + PBD::Signal0<void> SceneChangeChanged; /* for use by objects interested in this object */ + private: std::string _name; framepos_t _start; @@ -155,7 +157,7 @@ class LIBARDOUR_API Location : public SessionHandleRef, public PBD::StatefulDest bool _locked; PositionLockStyle _position_lock_style; boost::shared_ptr<SceneChange> _scene_change; - + void set_mark (bool yn); bool set_flag_internal (bool yn, Flags flag); void recompute_bbt_from_frames (); @@ -193,32 +195,32 @@ class LIBARDOUR_API Locations : public SessionHandleRef, public PBD::StatefulDes Location* mark_at (framepos_t, framecnt_t slop = 0) const; - framepos_t first_mark_before (framepos_t, bool include_special_ranges = false); + framepos_t first_mark_before (framepos_t, bool include_special_ranges = false); framepos_t first_mark_after (framepos_t, bool include_special_ranges = false); void marks_either_side (framepos_t const, framepos_t &, framepos_t &) const; void find_all_between (framepos_t start, framepos_t, LocationList&, Location::Flags); - + PBD::Signal1<void,Location*> current_changed; - /* Objects that care about individual addition and removal of Locations should connect to added/removed. - If an object additionally cares about potential mass clearance of Locations, they should connect to changed. - */ + /* Objects that care about individual addition and removal of Locations should connect to added/removed. + If an object additionally cares about potential mass clearance of Locations, they should connect to changed. + */ PBD::Signal1<void,Location*> added; PBD::Signal1<void,Location*> removed; PBD::Signal0<void> changed; /* emitted when any action that could have added/removed more than 1 location actually removed 1 or more */ template<class T> void apply (T& obj, void (T::*method)(const LocationList&)) const { - /* We don't want to hold the lock while the given method runs, so take a copy - of the list and pass that instead. - */ - Locations::LocationList copy; - { - Glib::Threads::Mutex::Lock lm (lock); - copy = locations; - } + /* We don't want to hold the lock while the given method runs, so take a copy + of the list and pass that instead. + */ + Locations::LocationList copy; + { + Glib::Threads::Mutex::Lock lm (lock); + copy = locations; + } (obj.*method)(copy); } diff --git a/libs/ardour/ardour/midi_diskstream.h b/libs/ardour/ardour/midi_diskstream.h index 6610708581..dac262e269 100644 --- a/libs/ardour/ardour/midi_diskstream.h +++ b/libs/ardour/ardour/midi_diskstream.h @@ -128,10 +128,10 @@ class LIBARDOUR_API MidiDiskstream : public Diskstream protected: friend class MidiTrack; friend class Auditioner; - int seek (framepos_t which_sample, bool complete_refill = false); + int seek (framepos_t which_sample, bool complete_refill = false); + int _do_refill_with_alloc (bool one_chunk_only); int process (BufferSet&, framepos_t transport_frame, pframes_t nframes, framecnt_t &, bool need_diskstream); - frameoffset_t calculate_playback_distance (pframes_t nframes); bool commit (framecnt_t nframes); @@ -143,8 +143,6 @@ class LIBARDOUR_API MidiDiskstream : public Diskstream int do_flush (RunContext context, bool force = false); int do_refill (); - int do_refill_with_alloc(); - int read (framepos_t& start, framecnt_t cnt, bool reversed); void finish_capture (); diff --git a/libs/ardour/ardour/midiport_manager.h b/libs/ardour/ardour/midiport_manager.h index 5e87238c22..4d6453b5cb 100644 --- a/libs/ardour/ardour/midiport_manager.h +++ b/libs/ardour/ardour/midiport_manager.h @@ -60,6 +60,9 @@ class LIBARDOUR_API MidiPortManager { MIDI::Port* scene_input_port () const { return _scene_input_port; } MIDI::Port* scene_output_port () const { return _scene_output_port; } + boost::shared_ptr<MidiPort> mmc_in() const { return boost::dynamic_pointer_cast<MidiPort>(_mmc_in); } + boost::shared_ptr<MidiPort> mmc_out() const { return boost::dynamic_pointer_cast<MidiPort>(_mmc_out); } + boost::shared_ptr<MidiPort> scene_in() const { return boost::dynamic_pointer_cast<MidiPort>(_scene_in); } boost::shared_ptr<MidiPort> scene_out() const { return boost::dynamic_pointer_cast<MidiPort>(_scene_out); } diff --git a/libs/ardour/ardour/mix.h b/libs/ardour/ardour/mix.h index 3cd9a3e60f..4676c01046 100644 --- a/libs/ardour/ardour/mix.h +++ b/libs/ardour/ardour/mix.h @@ -27,13 +27,23 @@ extern "C" { /* SSE functions */ - LIBARDOUR_API float x86_sse_compute_peak (const ARDOUR::Sample * buf, ARDOUR::pframes_t nsamples, float current); - LIBARDOUR_API void x86_sse_apply_gain_to_buffer (ARDOUR::Sample * buf, ARDOUR::pframes_t nframes, float gain); - LIBARDOUR_API void x86_sse_mix_buffers_with_gain(ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes, float gain); - LIBARDOUR_API void x86_sse_mix_buffers_no_gain (ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes); + LIBARDOUR_API float x86_sse_compute_peak (const float * buf, uint32_t nsamples, float current); + LIBARDOUR_API void x86_sse_apply_gain_to_buffer (float * buf, uint32_t nframes, float gain); + LIBARDOUR_API void x86_sse_mix_buffers_with_gain(float * dst, const float * src, uint32_t nframes, float gain); + LIBARDOUR_API void x86_sse_mix_buffers_no_gain (float * dst, const float * src, uint32_t nframes); } -LIBARDOUR_API void x86_sse_find_peaks (const ARDOUR::Sample * buf, ARDOUR::pframes_t nsamples, float *min, float *max); +extern "C" { +/* AVX functions */ + LIBARDOUR_API float x86_sse_avx_compute_peak (const float * buf, uint32_t nsamples, float current); + LIBARDOUR_API void x86_sse_avx_apply_gain_to_buffer (float * buf, uint32_t nframes, float gain); + LIBARDOUR_API void x86_sse_avx_mix_buffers_with_gain(float * dst, const float * src, uint32_t nframes, float gain); + LIBARDOUR_API void x86_sse_avx_mix_buffers_no_gain (float * dst, const float * src, uint32_t nframes); + LIBARDOUR_API void x86_sse_avx_copy_vector (float * dst, const float * src, uint32_t nframes); +} + +LIBARDOUR_API void x86_sse_find_peaks (const float * buf, uint32_t nsamples, float *min, float *max); +LIBARDOUR_API void x86_sse_avx_find_peaks (const float * buf, uint32_t nsamples, float *min, float *max); /* debug wrappers for SSE functions */ @@ -41,6 +51,7 @@ LIBARDOUR_API float debug_compute_peak (const ARDOUR::Sample * buf LIBARDOUR_API void debug_apply_gain_to_buffer (ARDOUR::Sample * buf, ARDOUR::pframes_t nframes, float gain); LIBARDOUR_API void debug_mix_buffers_with_gain (ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes, float gain); LIBARDOUR_API void debug_mix_buffers_no_gain (ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes); +LIBARDOUR_API void debug_copy_vector (ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes); #endif @@ -61,5 +72,6 @@ LIBARDOUR_API void default_find_peaks (const ARDOUR::Sample * bu LIBARDOUR_API void default_apply_gain_to_buffer (ARDOUR::Sample * buf, ARDOUR::pframes_t nframes, float gain); LIBARDOUR_API void default_mix_buffers_with_gain (ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes, float gain); LIBARDOUR_API void default_mix_buffers_no_gain (ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes); +LIBARDOUR_API void default_copy_vector (ARDOUR::Sample * dst, const ARDOUR::Sample * src, ARDOUR::pframes_t nframes); #endif /* __ardour_mix_h__ */ diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h index e01f56d8bf..7504478e87 100644 --- a/libs/ardour/ardour/plugin_insert.h +++ b/libs/ardour/ardour/plugin_insert.h @@ -53,6 +53,7 @@ class LIBARDOUR_API PluginInsert : public Processor XMLNode& state(bool); XMLNode& get_state(void); int set_state(const XMLNode&, int version); + void update_id (PBD::ID); void run (BufferSet& in, framepos_t start_frame, framepos_t end_frame, pframes_t nframes, bool); void silence (framecnt_t nframes); diff --git a/libs/ardour/ardour/plugin_manager.h b/libs/ardour/ardour/plugin_manager.h index 3a6a210b5f..663bb92324 100644 --- a/libs/ardour/ardour/plugin_manager.h +++ b/libs/ardour/ardour/plugin_manager.h @@ -144,6 +144,8 @@ class LIBARDOUR_API PluginManager : public boost::noncopyable { std::string get_ladspa_category (uint32_t id); std::vector<uint32_t> ladspa_plugin_whitelist; + Glib::Threads::Mutex _lock; + static PluginManager* _instance; // singleton PluginManager (); }; diff --git a/libs/ardour/ardour/port_insert.h b/libs/ardour/ardour/port_insert.h index 327080984a..54d8583d9a 100644 --- a/libs/ardour/ardour/port_insert.h +++ b/libs/ardour/ardour/port_insert.h @@ -64,6 +64,8 @@ class LIBARDOUR_API PortInsert : public IOProcessor void activate (); void deactivate (); + void set_pre_fader (bool); + uint32_t bit_slot() const { return _bitslot; } void start_latency_detection (); diff --git a/libs/ardour/ardour/processor.h b/libs/ardour/ardour/processor.h index fa75876580..c7d3608b5e 100644 --- a/libs/ardour/ardour/processor.h +++ b/libs/ardour/ardour/processor.h @@ -107,7 +107,7 @@ class LIBARDOUR_API Processor : public SessionObject, public Automatable, public XMLNode& get_state (void); int set_state (const XMLNode&, int version); - void set_pre_fader (bool); + virtual void set_pre_fader (bool); PBD::Signal0<void> ActiveChanged; PBD::Signal2<void,ChanCount,ChanCount> ConfigurationChanged; diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h index 52c3309b65..5bd23f16b1 100644 --- a/libs/ardour/ardour/rc_configuration_vars.h +++ b/libs/ardour/ardour/rc_configuration_vars.h @@ -29,15 +29,21 @@ DO dump the config using cfgtool to system_config after modifying this file. - ./waf && build/cfgtool/cfgtool system_config + ./waf && gtk2_ardour/arcfg system_config *****************************************************/ /* IO connection */ CONFIG_VARIABLE (bool, auto_connect_standard_busses, "auto-connect-standard-busses", true) +/* this variable is used to indicate output mode in Waves Tracks: + "Multi Out" == AutoConnectPhysical and "Stereo Out" == AutoConnectMaster +*/ CONFIG_VARIABLE (AutoConnectOption, output_auto_connect, "output-auto-connect", AutoConnectMaster) CONFIG_VARIABLE (AutoConnectOption, input_auto_connect, "input-auto-connect", AutoConnectPhysical) +/* Naming */ +CONFIG_VARIABLE (TracksAutoNamingRule, tracks_auto_naming, "tracks-auto-naming", UseDefaultNames) + /* MIDI and MIDI related */ CONFIG_VARIABLE (bool, trace_midi_input, "trace-midi-input", false) @@ -51,15 +57,23 @@ CONFIG_VARIABLE (int32_t, mmc_receive_device_id, "mmc-receive-device-id", 0x7f) CONFIG_VARIABLE (int32_t, mmc_send_device_id, "mmc-send-device-id", 0) CONFIG_VARIABLE (int32_t, initial_program_change, "initial-program-change", -1) CONFIG_VARIABLE (bool, first_midi_bank_is_zero, "display-first-midi-bank-as-zero", false) -CONFIG_VARIABLE (int32_t, inter_scene_gap_msecs, "inter-scene-gap-msecs", 1) +CONFIG_VARIABLE (int32_t, inter_scene_gap_frames, "inter-scene-gap-frames", 1) /* Timecode and related */ CONFIG_VARIABLE (int, mtc_qf_speed_tolerance, "mtc-qf-speed-tolerance", 5) CONFIG_VARIABLE (bool, timecode_sync_frame_rate, "timecode-sync-frame-rate", true) +#ifdef USE_TRACKS_CODE_FEATURES +CONFIG_VARIABLE (bool, timecode_source_is_synced, "timecode-source-is-synced", true) +#else CONFIG_VARIABLE (bool, timecode_source_is_synced, "timecode-source-is-synced", false) +#endif CONFIG_VARIABLE (bool, timecode_source_2997, "timecode-source-2997", false) +#ifdef USE_TRACKS_CODE_FEATURES +CONFIG_VARIABLE (SyncSource, sync_source, "sync-source", MTC) +#else CONFIG_VARIABLE (SyncSource, sync_source, "sync-source", Engine) +#endif CONFIG_VARIABLE (std::string, ltc_source_port, "ltc-source-port", "system:capture_1") CONFIG_VARIABLE (bool, send_ltc, "send-ltc", false) CONFIG_VARIABLE (bool, ltc_send_continuously, "ltc-send-continuously", true) @@ -77,6 +91,7 @@ CONFIG_VARIABLE (RemoteModel, remote_model, "remote-model", MixerOrdered) CONFIG_VARIABLE (uint32_t, minimum_disk_read_bytes, "minimum-disk-read-bytes", ARDOUR::Diskstream::default_disk_read_chunk_frames() * sizeof (ARDOUR::Sample)) CONFIG_VARIABLE (uint32_t, minimum_disk_write_bytes, "minimum-disk-write-bytes", ARDOUR::Diskstream::default_disk_write_chunk_frames() * sizeof (ARDOUR::Sample)) CONFIG_VARIABLE (float, midi_readahead, "midi-readahead", 1.0) +CONFIG_VARIABLE (BufferingPreset, buffering_preset, "buffering-preset", Medium) CONFIG_VARIABLE (float, audio_capture_buffer_seconds, "capture-buffer-seconds", 5.0) CONFIG_VARIABLE (float, audio_playback_buffer_seconds, "playback-buffer-seconds", 5.0) CONFIG_VARIABLE (float, midi_track_buffer_seconds, "midi-track-buffer-seconds", 1.0) @@ -99,7 +114,11 @@ CONFIG_VARIABLE (RegionSelectionAfterSplit, region_selection_after_split, "regio /* monitoring, mute, solo etc */ +#ifdef USE_TRACKS_CODE_FEATURES +CONFIG_VARIABLE (bool, mute_affects_pre_fader, "mute-affects-pre-fader", true) +#else CONFIG_VARIABLE (bool, mute_affects_pre_fader, "mute-affects-pre-fader", false) +#endif CONFIG_VARIABLE (bool, mute_affects_post_fader, "mute-affects-post-fader", true) CONFIG_VARIABLE (bool, mute_affects_control_outs, "mute-affects-control-outs", true) CONFIG_VARIABLE (bool, mute_affects_main_outs, "mute-affects-main-outs", true) @@ -141,20 +160,39 @@ CONFIG_VARIABLE (bool, stop_recording_on_xrun, "stop-recording-on-xrun", false) CONFIG_VARIABLE (bool, create_xrun_marker, "create-xrun-marker", true) CONFIG_VARIABLE (bool, stop_at_session_end, "stop-at-session-end", false) CONFIG_VARIABLE (bool, seamless_loop, "seamless-loop", false) +#ifdef USE_TRACKS_CODE_FEATURES +CONFIG_VARIABLE (bool, loop_is_mode, "loop-is-mode", true) +#else CONFIG_VARIABLE (bool, loop_is_mode, "loop-is-mode", false) +#endif CONFIG_VARIABLE (framecnt_t, preroll, "preroll", 0) CONFIG_VARIABLE (framecnt_t, postroll, "postroll", 0) CONFIG_VARIABLE (float, rf_speed, "rf-speed", 2.0f) -CONFIG_VARIABLE (float, shuttle_speed_factor, "shuttle-speed-factor", 1.0f) -CONFIG_VARIABLE (float, shuttle_speed_threshold, "shuttle-speed-threshold", 5.0f) +CONFIG_VARIABLE (float, shuttle_speed_factor, "shuttle-speed-factor", 1.0f) // used for MMC shuttle +CONFIG_VARIABLE (float, shuttle_speed_threshold, "shuttle-speed-threshold", 5.0f) // used for MMC shuttle CONFIG_VARIABLE (ShuttleBehaviour, shuttle_behaviour, "shuttle-behaviour", Sprung) CONFIG_VARIABLE (ShuttleUnits, shuttle_units, "shuttle-units", Percentage) +CONFIG_VARIABLE (float, shuttle_max_speed, "shuttle-max-speed", 8.0f) CONFIG_VARIABLE (bool, locate_while_waiting_for_sync, "locate-while-waiting-for-sync", false) CONFIG_VARIABLE (bool, disable_disarm_during_roll, "disable-disarm-during-roll", false) +#ifdef USE_TRACKS_CODE_FEATURES +CONFIG_VARIABLE (AutoReturnTarget, auto_return_target_list, "auto-return-target-list", AutoReturnTarget(LastLocate) ) +#else +CONFIG_VARIABLE (AutoReturnTarget, auto_return_target_list, "auto-return-target-list", AutoReturnTarget(LastLocate|RangeSelectionStart|Loop|RegionSelectionStart)) +#endif /* metering */ +#ifdef USE_TRACKS_CODE_FEATURES +CONFIG_VARIABLE (float, meter_falloff, "meter-falloff", 60.0f) +CONFIG_VARIABLE (MeterType, meter_type_master, "meter-type-master", MeterPeak) +#else CONFIG_VARIABLE (float, meter_falloff, "meter-falloff", 13.3f) +CONFIG_VARIABLE (MeterType, meter_type_master, "meter-type-master", MeterK20) +#endif +CONFIG_VARIABLE (MeterType, meter_type_track, "meter-type-track", MeterPeak) +CONFIG_VARIABLE (MeterType, meter_type_bus, "meter-type-bus", MeterPeak) + /* miscellany */ @@ -170,11 +208,18 @@ CONFIG_VARIABLE (bool, use_overlap_equivalency, "use-overlap-equivalency", false CONFIG_VARIABLE (bool, periodic_safety_backups, "periodic-safety-backups", true) CONFIG_VARIABLE (uint32_t, periodic_safety_backup_interval, "periodic-safety-backup-interval", 120) CONFIG_VARIABLE (float, automation_interval_msecs, "automation-interval-msecs", 30) -CONFIG_VARIABLE (std::string, default_session_parent_dir, "default-session-parent-dir", "~") +#ifdef __APPLE__ +CONFIG_VARIABLE_SPECIAL (std::string, default_session_parent_dir, "default-session-parent-dir", "~/Music", poor_mans_glob) +#elif defined (PLATFORM_WINDOWS) +CONFIG_VARIABLE_SPECIAL (std::string, default_session_parent_dir, "default-session-parent-dir", "~\\Documents", poor_mans_glob) +#else +CONFIG_VARIABLE_SPECIAL (std::string, default_session_parent_dir, "default-session-parent-dir", "~", poor_mans_glob) +#endif CONFIG_VARIABLE (bool, allow_special_bus_removal, "allow-special-bus-removal", false) CONFIG_VARIABLE (int32_t, processor_usage, "processor-usage", -1) CONFIG_VARIABLE (gain_t, max_gain, "max-gain", 2.0) /* +6.0dB */ CONFIG_VARIABLE (uint32_t, max_recent_sessions, "max-recent-sessions", 10) +CONFIG_VARIABLE (uint32_t, max_recent_templates, "max-recent-templates", 10) CONFIG_VARIABLE (double, automation_thinning_factor, "automation-thinning-factor", 20.0) CONFIG_VARIABLE (std::string, freesound_download_dir, "freesound-download-dir", Glib::get_home_dir() + "/Freesound/snd") CONFIG_VARIABLE (framecnt_t, range_location_minimum, "range-location-minimum", 128) /* samples */ @@ -187,6 +232,7 @@ CONFIG_VARIABLE (bool, use_plugin_own_gui, "use-plugin-own-gui", true) CONFIG_VARIABLE (bool, use_windows_vst, "use-windows-vst", true) CONFIG_VARIABLE (bool, use_lxvst, "use-lxvst", true) CONFIG_VARIABLE (bool, discover_vst_on_start, "discover-vst-on-start", false) +CONFIG_VARIABLE (bool, verbose_plugin_scan, "verbose-plugin-scan", true) CONFIG_VARIABLE (int, vst_scan_timeout, "vst-scan-timeout", 600) /* deciseconds, per plugin, <= 0 no timeout */ CONFIG_VARIABLE (bool, discover_audio_units, "discover-audio-units", false) @@ -206,7 +252,8 @@ CONFIG_VARIABLE (DenormalModel, denormal_model, "denormal-model", DenormalFTZDAZ CONFIG_VARIABLE (std::string, osx_pingback_url, "osx-pingback-url", "http://community.ardour.org/pingback/osx/") CONFIG_VARIABLE (std::string, linux_pingback_url, "linux-pingback-url", "http://community.ardour.org/pingback/linux/") -CONFIG_VARIABLE (std::string, tutorial_manual_url, "tutorial-manual-url", "http://ardour.org/flossmanual") +CONFIG_VARIABLE (std::string, windows_pingback_url, "windows-pingback-url", "http://community.ardour.org/pingback/windows/") +CONFIG_VARIABLE (std::string, tutorial_manual_url, "tutorial-manual-url", "http://ardour.org/tutorial") CONFIG_VARIABLE (std::string, reference_manual_url, "reference-manual-url", "http://manual.ardour.org/") CONFIG_VARIABLE (std::string, updates_url, "updates-url", "http://ardour.org/whatsnew.html") CONFIG_VARIABLE (std::string, donate_url, "donate-url", "http://ardour.org/donate") diff --git a/libs/ardour/ardour/recent_sessions.h b/libs/ardour/ardour/recent_sessions.h index 03134da6d2..7c4158c9b5 100644 --- a/libs/ardour/ardour/recent_sessions.h +++ b/libs/ardour/ardour/recent_sessions.h @@ -30,8 +30,11 @@ namespace ARDOUR { typedef std::deque<std::pair<std::string,std::string> > RecentSessions; LIBARDOUR_API int read_recent_sessions (RecentSessions& rs); + LIBARDOUR_API int read_recent_templates (std::deque<std::string>& rt); LIBARDOUR_API int store_recent_sessions (std::string name, std::string path); + LIBARDOUR_API int store_recent_templates (const std::string& session_template_full_name); LIBARDOUR_API int write_recent_sessions (RecentSessions& rs); + LIBARDOUR_API int write_recent_templates (std::deque<std::string>& rt); LIBARDOUR_API int remove_recent_sessions (const std::string& path); }; // namespace ARDOUR diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index cce1e152a2..ec6fa8ca8d 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -547,7 +547,10 @@ class LIBARDOUR_API Route : public SessionObject, public Automatable, public Rou uint32_t _soloed_by_others_upstream; uint32_t _soloed_by_others_downstream; uint32_t _solo_isolated; + uint32_t _solo_isolated_by_upstream; + void mod_solo_isolated_by_upstream (bool, void*); + bool _denormal_protection; bool _recordable : 1; diff --git a/libs/ardour/ardour/runtime_functions.h b/libs/ardour/ardour/runtime_functions.h index e1d6b99f61..45d6ec7015 100644 --- a/libs/ardour/ardour/runtime_functions.h +++ b/libs/ardour/ardour/runtime_functions.h @@ -25,17 +25,19 @@ namespace ARDOUR { - typedef float (*compute_peak_t) (const ARDOUR::Sample *, pframes_t, float); - typedef void (*find_peaks_t) (const ARDOUR::Sample *, pframes_t, float *, float*); + typedef float (*compute_peak_t) (const ARDOUR::Sample *, pframes_t, float); + typedef void (*find_peaks_t) (const ARDOUR::Sample *, pframes_t, float *, float*); typedef void (*apply_gain_to_buffer_t) (ARDOUR::Sample *, pframes_t, float); typedef void (*mix_buffers_with_gain_t) (ARDOUR::Sample *, const ARDOUR::Sample *, pframes_t, float); typedef void (*mix_buffers_no_gain_t) (ARDOUR::Sample *, const ARDOUR::Sample *, pframes_t); + typedef void (*copy_vector_t) (ARDOUR::Sample *, const ARDOUR::Sample *, pframes_t); LIBARDOUR_API extern compute_peak_t compute_peak; LIBARDOUR_API extern find_peaks_t find_peaks; LIBARDOUR_API extern apply_gain_to_buffer_t apply_gain_to_buffer; LIBARDOUR_API extern mix_buffers_with_gain_t mix_buffers_with_gain; LIBARDOUR_API extern mix_buffers_no_gain_t mix_buffers_no_gain; + LIBARDOUR_API extern copy_vector_t copy_vector; } #endif /* __ardour_runtime_functions_h__ */ diff --git a/libs/ardour/ardour/scene_change.h b/libs/ardour/ardour/scene_change.h index ee711985b5..661d2238b7 100644 --- a/libs/ardour/ardour/scene_change.h +++ b/libs/ardour/ardour/scene_change.h @@ -36,17 +36,21 @@ class SceneChange : public PBD::Stateful static boost::shared_ptr<SceneChange> factory (const XMLNode&, int version); static std::string xml_node_name; - uint32_t color() const; - void set_color (uint32_t); - bool color_out_of_bounds() const { return _color == out_of_bound_color; } - static const uint32_t out_of_bound_color; - - PBD::Signal0<void> ColorChanged; + uint32_t color() const; + void set_color (uint32_t); + bool color_out_of_bounds() const { return _color == out_of_bound_color; } + static const uint32_t out_of_bound_color; -protected: - /* derived classes are responsible for serializing & deserializing this value */ - uint32_t _color; + bool active () const { return _active; } + void set_active (bool); + + PBD::Signal0<void> ColorChanged; + PBD::Signal0<void> ActiveChanged; + protected: + /* derived classes are responsible for serializing & deserializing this value */ + uint32_t _color; + bool _active; }; } /* namespace */ diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index bbc82939c7..f75e38cff6 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -176,9 +176,14 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop bool dirty() const { return _state_of_the_state & Dirty; } void set_deletion_in_progress (); void clear_deletion_in_progress (); + bool reconnection_in_progress() const { return _reconnecting_routes_in_progress; } bool deletion_in_progress() const { return _state_of_the_state & Deletion; } + bool routes_deletion_in_progress() const { return _route_deletion_in_progress; } + PBD::Signal0<void> DirtyChanged; + PBD::Signal1<void, bool> RouteAddedOrRemoved; + const SessionDirectory& session_directory () const { return *(_session_dir.get()); } static PBD::Signal1<void,std::string> Dialog; @@ -214,6 +219,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop BufferSet& get_mix_buffers (ChanCount count = ChanCount::ZERO); bool have_rec_enabled_track () const; + bool have_rec_disabled_track () const; bool have_captured() const { return _have_captured; } @@ -292,9 +298,20 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop PBD::Signal0<void> IOConnectionsComplete; + /* Timecode status signals */ + PBD::Signal1<void, bool> MTCSyncStateChanged; + PBD::Signal1<void, bool> LTCSyncStateChanged; + /* Record status signals */ - PBD::Signal0<void> RecordStateChanged; + PBD::Signal0<void> RecordStateChanged; /* signals changes in recording state (i.e. are we recording) */ + /* XXX may 2015: paul says: it isn't clear to me that this has semantics that cannot be inferrred + from the previous signal and session state. + */ + PBD::Signal0<void> RecordArmStateChanged; /* signals changes in recording arming */ + + /* Emited when session is loaded */ + PBD::Signal0<void> SessionLoaded; /* Transport mechanism signals */ @@ -331,6 +348,9 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop /* Step Editing status changed */ PBD::Signal1<void,bool> StepEditStatusChange; + /* Timecode state signals */ + PBD::Signal0<void> MtcOrLtcInputPortChanged; + void queue_event (SessionEvent*); void request_roll_at_and_return (framepos_t start, framepos_t return_to); @@ -539,13 +559,17 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop RouteGroup* route_group = 0, uint32_t how_many = 1, std::string name_template = "" ); - void remove_route (boost::shared_ptr<Route>); - void resort_routes (); - void resort_routes_using (boost::shared_ptr<RouteList>); + void remove_routes (boost::shared_ptr<RouteList>); + void remove_route (boost::shared_ptr<Route>); + + void resort_routes (); + void resort_routes_using (boost::shared_ptr<RouteList>); AudioEngine & engine() { return _engine; } AudioEngine const & engine () const { return _engine; } + static std::string default_track_name_pattern (DataType); + /* Time */ framepos_t transport_frame () const {return _transport_frame; } @@ -586,7 +610,9 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop void request_sync_source (Slave*); bool synced_to_engine() const { return _slave && config.get_external_sync() && Config->get_sync_source() == Engine; } - + bool synced_to_mtc () const { return config.get_external_sync() && Config->get_sync_source() == MTC && g_atomic_int_get (const_cast<gint*>(&_mtc_active)); } + bool synced_to_ltc () const { return config.get_external_sync() && Config->get_sync_source() == LTC && g_atomic_int_get (const_cast<gint*>(&_ltc_active)); } + double transport_speed() const { return _transport_speed; } bool transport_stopped() const { return _transport_speed == 0.0f; } bool transport_rolling() const { return _transport_speed != 0.0f; } @@ -709,6 +735,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop PBD::Signal0<void> SoloChanged; PBD::Signal0<void> IsolatedChanged; + PBD::Signal0<void> session_routes_reconnected; + /* monitor/master out */ void add_monitor_section (); @@ -824,6 +852,14 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop void maybe_update_session_range (framepos_t, framepos_t); + /* temporary hacks to allow selection to be pushed from GUI into backend. + Whenever we move the selection object into libardour, these will go away. + */ + void set_range_selection (framepos_t start, framepos_t end); + void set_object_selection (framepos_t start, framepos_t end); + void clear_range_selection (); + void clear_object_selection (); + /* buffers for gain and pan */ gain_t* gain_automation_buffer () const; @@ -979,6 +1015,13 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop MIDI::MachineControl& mmc() { return *_mmc; } + void reconnect_midi_scene_ports (bool); + void reconnect_mtc_ports (); + void reconnect_mmc_ports (bool); + + void reconnect_ltc_input (); + void reconnect_ltc_output (); + protected: friend class AudioEngine; void set_block_size (pframes_t nframes); @@ -1050,6 +1093,11 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop bool _under_nsm_control; unsigned int _xrun_count; + void mtc_status_changed (bool); + PBD::ScopedConnection mtc_status_connection; + void ltc_status_changed (bool); + PBD::ScopedConnection ltc_status_connection; + void initialize_latencies (); void set_worst_io_latencies (); void set_worst_playback_latency (); @@ -1087,6 +1135,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop bool have_first_delta_accumulator; SlaveState _slave_state; + gint _mtc_active; + gint _ltc_active; framepos_t slave_wait_end; void reset_slave_state (); @@ -1229,7 +1279,6 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop void update_skips (Location*, bool consolidate); void update_marks (Location* loc); - void update_loop (Location* loc); void consolidate_skips (Location*); void sync_locations_to_skips (); void _sync_locations_to_skips (); @@ -1251,6 +1300,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop int post_engine_init (); int immediately_post_engine (); void remove_empty_sounds (); + + void session_loaded (); void setup_midi_control (); int midi_read (MIDI::Port *); @@ -1413,6 +1464,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop void engine_halted (); void xrun_recovery (); void set_track_loop (bool); + bool select_playhead_priority_target (framepos_t&); + void follow_playhead_priority (); /* These are synchronous and so can only be called from within the process * cycle @@ -1440,6 +1493,9 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop void add_routes (RouteList&, bool input_auto_connect, bool output_auto_connect, bool save); void add_routes_inner (RouteList&, bool input_auto_connect, bool output_auto_connect); bool _adding_routes_in_progress; + bool _reconnecting_routes_in_progress; + bool _route_deletion_in_progress; + uint32_t destructive_index; boost::shared_ptr<Route> XMLRouteFactory (const XMLNode&, int); @@ -1447,7 +1503,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop void route_processors_changed (RouteProcessorChange); - bool find_route_name (std::string const &, uint32_t& id, char* name, size_t name_len, bool); + bool find_route_name (std::string const &, uint32_t& id, std::string& name, bool); void count_existing_track_channels (ChanCount& in, ChanCount& out); void auto_connect_route (boost::shared_ptr<Route> route, ChanCount& existing_inputs, ChanCount& existing_outputs, bool with_lock, bool connect_inputs = true, @@ -1634,6 +1690,12 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop void set_play_range (std::list<AudioRange>&, bool leave_rolling); void unset_play_range (); + /* temporary hacks to allow selection to be pushed from GUI into backend + Whenever we move the selection object into libardour, these will go away. + */ + Evoral::Range<framepos_t> _range_selection; + Evoral::Range<framepos_t> _object_selection; + /* main outs */ uint32_t main_outs; @@ -1676,8 +1738,9 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop mutable bool have_looped; ///< Used in ::audible_frame(*) - void update_have_rec_enabled_track (); + void update_route_record_state (); gint _have_rec_enabled_track; + gint _have_rec_disabled_track; static int ask_about_playlist_deletion (boost::shared_ptr<Playlist>); @@ -1706,7 +1769,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop /** temporary list of Diskstreams used only during load of 2.X sessions */ std::list<boost::shared_ptr<Diskstream> > _diskstreams_2X; - void add_session_range_location (framepos_t, framepos_t); + void set_session_range_location (framepos_t, framepos_t); void setup_midi_machine_control (); @@ -1741,9 +1804,6 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop boost::shared_ptr<IO> _ltc_input; boost::shared_ptr<IO> _ltc_output; - void reconnect_ltc_input (); - void reconnect_ltc_output (); - /* Scene Changing */ SceneChanger* _scene_changer; @@ -1759,6 +1819,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop void save_as_bring_callback (uint32_t, uint32_t, std::string); static int get_session_info_from_path (XMLTree& state_tree, const std::string& xmlpath); + static const uint32_t session_end_shift; }; diff --git a/libs/ardour/ardour/session_configuration_vars.h b/libs/ardour/ardour/session_configuration_vars.h index ec11fc545d..823cf5fe07 100644 --- a/libs/ardour/ardour/session_configuration_vars.h +++ b/libs/ardour/ardour/session_configuration_vars.h @@ -27,7 +27,6 @@ CONFIG_VARIABLE (uint32_t, destructive_xfade_msecs, "destructive-xfade-msecs", 2) CONFIG_VARIABLE (bool, use_region_fades, "use-region-fades", true) -CONFIG_VARIABLE (bool, show_region_fades, "show-region-fades", true) CONFIG_VARIABLE (SampleFormat, native_file_data_format, "native-file-data-format", ARDOUR::FormatFloat) CONFIG_VARIABLE (HeaderFormat, native_file_header_format, "native-file-header-format", ARDOUR::WAVE) CONFIG_VARIABLE (bool, auto_play, "auto-play", false) @@ -46,8 +45,6 @@ CONFIG_VARIABLE (std::string, take_name, "take-name", "Take1") CONFIG_VARIABLE (bool, jack_time_master, "jack-time-master", true) CONFIG_VARIABLE (bool, use_video_sync, "use-video-sync", false) CONFIG_VARIABLE (float, video_pullup, "video-pullup", 0.0f) -CONFIG_VARIABLE (bool, show_summary, "show-summary", true) -CONFIG_VARIABLE (bool, show_group_tabs, "show-group-tabs", true) CONFIG_VARIABLE (bool, external_sync, "external-sync", false) CONFIG_VARIABLE (InsertMergePolicy, insert_merge_policy, "insert-merge-policy", InsertMergeRelax) CONFIG_VARIABLE (framecnt_t, timecode_offset, "timecode-offset", 0) @@ -57,6 +54,15 @@ CONFIG_VARIABLE (std::string, timecode_generator_offset, "timecode-generator-off CONFIG_VARIABLE (bool, glue_new_markers_to_bars_and_beats, "glue-new-markers-to-bars-and-beats", false) CONFIG_VARIABLE (bool, midi_copy_is_fork, "midi-copy-is-fork", false) CONFIG_VARIABLE (bool, glue_new_regions_to_bars_and_beats, "glue-new-regions-to-bars-and-beats", false) +/* These are GUI-only properties and should not be present in this + * context. There needs to be a new GUI-level session-scoped configuration + * variable header. + */ +CONFIG_VARIABLE (double, wave_amplitude_zoom, "wave-amplitude-zoom", 0.0) +CONFIG_VARIABLE (uint16_t, wave_zoom_factor, "wave-zoom-factor", 2) +CONFIG_VARIABLE (bool, show_summary, "show-summary", true) +CONFIG_VARIABLE (bool, show_group_tabs, "show-group-tabs", true) +CONFIG_VARIABLE (bool, show_region_fades, "show-region-fades", true) CONFIG_VARIABLE (bool, use_video_file_fps, "use-video-file-fps", false) CONFIG_VARIABLE (bool, videotimeline_pullup, "videotimeline-pullup", true) CONFIG_VARIABLE (bool, show_busses_on_meterbridge, "show-busses-on-meterbridge", false) @@ -68,3 +74,14 @@ CONFIG_VARIABLE (bool, show_solo_on_meterbridge, "show-solo-on-meterbridge", fal CONFIG_VARIABLE (bool, show_monitor_on_meterbridge, "show-monitor-on-meterbridge", false) CONFIG_VARIABLE (bool, show_name_on_meterbridge, "show-name-on-meterbridge", true) CONFIG_VARIABLE (uint32_t, meterbridge_label_height, "meterbridge-label-height", 0) + +#ifdef USE_TRACKS_CODE_FEATURES +/* This variable was not discussed with Ardour developers and is considered + weakly conceived. It is also poorly named, since we have "groups" already + present in libardour but this variable has nothing to do with it. There + should have been more discussion about what was required and the best + way to accomplish it. +*/ +CONFIG_VARIABLE (bool, enable_group_edit, "enable-group-edit", false) +/* These are GUI-only properties and should not be present in this context */ +#endif diff --git a/libs/ardour/ardour/session_event.h b/libs/ardour/ardour/session_event.h index 96145e7b29..a8c17a1ddb 100644 --- a/libs/ardour/ardour/session_event.h +++ b/libs/ardour/ardour/session_event.h @@ -134,6 +134,7 @@ public: static const framepos_t Immediate = -1; + static bool has_per_thread_pool (); static void create_per_thread_pool (const std::string& n, uint32_t nitems); static void init_event_pool (); diff --git a/libs/ardour/ardour/slave.h b/libs/ardour/ardour/slave.h index 8396a337d7..bda47ceba0 100644 --- a/libs/ardour/ardour/slave.h +++ b/libs/ardour/ardour/slave.h @@ -237,19 +237,21 @@ struct LIBARDOUR_API SafeTime { class LIBARDOUR_API TimecodeSlave : public Slave { public: - TimecodeSlave () {} - - virtual Timecode::TimecodeFormat apparent_timecode_format() const = 0; - - /* this is intended to be used by a UI and polled from a timeout. it should - return a string describing the current position of the TC source. it - should NOT do any computation, but should use a cached value - of the TC source position. - */ - virtual std::string approximate_current_position() const = 0; - - framepos_t timecode_offset; - bool timecode_negative_offset; + TimecodeSlave () {} + + virtual Timecode::TimecodeFormat apparent_timecode_format() const = 0; + + /* this is intended to be used by a UI and polled from a timeout. it should + return a string describing the current position of the TC source. it + should NOT do any computation, but should use a cached value + of the TC source position. + */ + virtual std::string approximate_current_position() const = 0; + + framepos_t timecode_offset; + bool timecode_negative_offset; + + PBD::Signal1<void, bool> ActiveChanged; }; class LIBARDOUR_API MTC_Slave : public TimecodeSlave { diff --git a/libs/ardour/ardour/sndfilesource.h b/libs/ardour/ardour/sndfilesource.h index 5a4a11515c..45e049e35f 100644 --- a/libs/ardour/ardour/sndfilesource.h +++ b/libs/ardour/ardour/sndfilesource.h @@ -66,6 +66,7 @@ class LIBARDOUR_API SndFileSource : public AudioFileSource { bool set_destructive (bool yn); bool one_of_several_channels () const; + uint32_t channel_count () const { return _info.channels; } bool clamped_at_unity () const; diff --git a/libs/ardour/ardour/tempo.h b/libs/ardour/ardour/tempo.h index 24a3f53fe9..d5ae2959c6 100644 --- a/libs/ardour/ardour/tempo.h +++ b/libs/ardour/ardour/tempo.h @@ -323,7 +323,7 @@ class LIBARDOUR_API TempoMap : public PBD::StatefulDestructible void change_initial_tempo (double bpm, double note_type); void insert_time (framepos_t, framecnt_t); - bool cut_time (framepos_t where, framecnt_t amount); //returns true if anything was moved + bool remove_time (framepos_t where, framecnt_t amount); //returns true if anything was moved int n_tempos () const; int n_meters () const; diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h index b1b4388a74..17e0b0d7e4 100644 --- a/libs/ardour/ardour/types.h +++ b/libs/ardour/ardour/types.h @@ -456,6 +456,11 @@ namespace ARDOUR { AutoConnectPhysical = 0x1, AutoConnectMaster = 0x2 }; + + enum TracksAutoNamingRule { + UseDefaultNames = 0x1, + NameAfterDriver = 0x2 + }; enum SampleFormat { FormatFloat = 0, @@ -623,6 +628,20 @@ namespace ARDOUR { uint32_t max; //< samples }; + enum BufferingPreset { + Small, + Medium, + Large, + Custom, + }; + + enum AutoReturnTarget { + LastLocate = 0x1, + RangeSelectionStart = 0x2, + Loop = 0x4, + RegionSelectionStart = 0x8, + }; + } // namespace ARDOUR @@ -632,6 +651,7 @@ namespace ARDOUR { std::istream& operator>>(std::istream& o, ARDOUR::SampleFormat& sf); std::istream& operator>>(std::istream& o, ARDOUR::HeaderFormat& sf); std::istream& operator>>(std::istream& o, ARDOUR::AutoConnectOption& sf); +std::istream& operator>>(std::istream& o, ARDOUR::TracksAutoNamingRule& sf); std::istream& operator>>(std::istream& o, ARDOUR::EditMode& sf); std::istream& operator>>(std::istream& o, ARDOUR::MonitorModel& sf); std::istream& operator>>(std::istream& o, ARDOUR::PFLPosition& sf); @@ -648,10 +668,14 @@ std::istream& operator>>(std::istream& o, ARDOUR::DenormalModel& sf); std::istream& operator>>(std::istream& o, ARDOUR::PositionLockStyle& sf); std::istream& operator>>(std::istream& o, ARDOUR::FadeShape& sf); std::istream& operator>>(std::istream& o, ARDOUR::RegionSelectionAfterSplit& sf); +std::istream& operator>>(std::istream& o, ARDOUR::BufferingPreset& var); +std::istream& operator>>(std::istream& o, ARDOUR::AutoReturnTarget& sf); +std::istream& operator>>(std::istream& o, ARDOUR::MeterType& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::SampleFormat& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::HeaderFormat& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::AutoConnectOption& sf); +std::ostream& operator<<(std::ostream& o, const ARDOUR::TracksAutoNamingRule& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::EditMode& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::MonitorModel& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::PFLPosition& sf); @@ -668,7 +692,9 @@ std::ostream& operator<<(std::ostream& o, const ARDOUR::DenormalModel& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::PositionLockStyle& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::FadeShape& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::RegionSelectionAfterSplit& sf); - +std::ostream& operator<<(std::ostream& o, const ARDOUR::BufferingPreset& var); +std::ostream& operator<<(std::ostream& o, const ARDOUR::AutoReturnTarget& sf); +std::ostream& operator<<(std::ostream& o, const ARDOUR::MeterType& sf); /* because these operators work on types which can be used when making a UI_CONFIG_VARIABLE (in gtk2_ardour) we need them to be exported. diff --git a/libs/ardour/ardour/utils.h b/libs/ardour/ardour/utils.h index 4b71c1586e..682206f58a 100644 --- a/libs/ardour/ardour/utils.h +++ b/libs/ardour/ardour/utils.h @@ -161,8 +161,6 @@ LIBARDOUR_API double slider_position_to_gain_with_max (double g, double max_gain #define METER_FALLOFF_MODERATE 13.3f // EBU-PPM, IRT PPM- 20dB / 1.5 sec #define METER_FALLOFF_MEDIUM 20.0f #define METER_FALLOFF_FAST 32.0f -#define METER_FALLOFF_FASTER 46.0f -#define METER_FALLOFF_FASTEST 70.0f LIBARDOUR_API float meter_falloff_to_float (ARDOUR::MeterFalloff); LIBARDOUR_API ARDOUR::MeterFalloff meter_falloff_from_float (float); diff --git a/libs/ardour/ardour/vst_info_file.h b/libs/ardour/ardour/vst_info_file.h index 5e613801a6..62c3484c80 100644 --- a/libs/ardour/ardour/vst_info_file.h +++ b/libs/ardour/ardour/vst_info_file.h @@ -25,6 +25,20 @@ #include "ardour/vst_types.h" #include <vector> +/* Cache File extensions */ +# if ( defined(__x86_64__) || defined(_M_X64) ) +# define VST_EXT_BLACKLIST ".fsb64" +#else +# define VST_EXT_BLACKLIST ".fsb" +#endif + +#define VST_EXT_ERRORFILE ".err" +# if ( defined(__x86_64__) || defined(_M_X64) ) +#define VST_EXT_INFOFILE ".fsi64" +#else +#define VST_EXT_INFOFILE ".fsi" +#endif + #ifndef VST_SCANNER_APP namespace ARDOUR { #endif diff --git a/libs/ardour/audio_buffer.cc b/libs/ardour/audio_buffer.cc index de2c1ddf00..6d8b2aa55f 100644 --- a/libs/ardour/audio_buffer.cc +++ b/libs/ardour/audio_buffer.cc @@ -43,7 +43,7 @@ AudioBuffer::AudioBuffer(size_t capacity) AudioBuffer::~AudioBuffer() { if (_owns_data) - free(_data); + cache_aligned_free(_data); } void @@ -60,7 +60,7 @@ AudioBuffer::resize (size_t size) return; } - free (_data); + cache_aligned_free (_data); cache_aligned_malloc ((void**) &_data, sizeof (Sample) * size); diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc index 00e1f9298f..d75dfea90f 100644 --- a/libs/ardour/audio_diskstream.cc +++ b/libs/ardour/audio_diskstream.cc @@ -46,9 +46,11 @@ #include "ardour/debug.h" #include "ardour/io.h" #include "ardour/playlist_factory.h" +#include "ardour/profile.h" #include "ardour/region_factory.h" #include "ardour/session.h" #include "ardour/session_playlists.h" +#include "ardour/sndfile_helpers.h" #include "ardour/source_factory.h" #include "ardour/track.h" #include "ardour/types.h" @@ -61,7 +63,6 @@ using namespace std; using namespace ARDOUR; using namespace PBD; -size_t AudioDiskstream::_working_buffers_size = 0; Sample* AudioDiskstream::_mixdown_buffer = 0; gain_t* AudioDiskstream::_gain_buffer = 0; @@ -132,9 +133,13 @@ AudioDiskstream::~AudioDiskstream () void AudioDiskstream::allocate_working_buffers() { - _working_buffers_size = max (disk_write_chunk_frames, disk_read_chunk_frames); - _mixdown_buffer = new Sample[_working_buffers_size]; - _gain_buffer = new gain_t[_working_buffers_size]; + /* with varifill buffer refilling, we compute the read size in bytes (to optimize + for disk i/o bandwidth) and then convert back into samples. These buffers + need to reflect the maximum size we could use, which is 4MB reads, or 2M samples + using 16 bit samples. + */ + _mixdown_buffer = new Sample[2*1048576]; + _gain_buffer = new gain_t[2*1048576]; } void @@ -142,7 +147,6 @@ AudioDiskstream::free_working_buffers() { delete [] _mixdown_buffer; delete [] _gain_buffer; - _working_buffers_size = 0; _mixdown_buffer = 0; _gain_buffer = 0; } @@ -209,9 +213,9 @@ AudioDiskstream::non_realtime_locate (framepos_t location) /* now refill channel buffers */ if (speed() != 1.0f || speed() != -1.0f) { - seek ((framepos_t) (location * (double) speed())); + seek ((framepos_t) (location * (double) speed()), true); } else { - seek (location); + seek (location, true); } } @@ -602,7 +606,7 @@ AudioDiskstream::process (BufferSet& bufs, framepos_t transport_frame, pframes_t /* no varispeed playback if we're recording, because the output .... TBD */ - if (rec_nframes == 0 && _actual_speed != 1.0f) { + if (rec_nframes == 0 && _actual_speed != 1.0) { necessary_samples = (framecnt_t) ceil ((nframes * fabs (_actual_speed))) + 2; } else { necessary_samples = nframes; @@ -923,9 +927,15 @@ AudioDiskstream::seek (framepos_t frame, bool complete_refill) file_frame = frame; if (complete_refill) { - while ((ret = do_refill_with_alloc ()) > 0) ; + /* call _do_refill() to refill the entire buffer, using + the largest reads possible. + */ + while ((ret = do_refill_with_alloc (false)) > 0) ; } else { - ret = do_refill_with_alloc (); + /* call _do_refill() to refill just one chunk, and then + return. + */ + ret = do_refill_with_alloc (true); } return ret; @@ -1067,12 +1077,18 @@ AudioDiskstream::read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer, } int -AudioDiskstream::do_refill_with_alloc () +AudioDiskstream::_do_refill_with_alloc (bool partial_fill) { - Sample* mix_buf = new Sample[disk_read_chunk_frames]; - float* gain_buf = new float[disk_read_chunk_frames]; + /* We limit disk reads to at most 4MB chunks, which with floating point + samples would be 1M samples. But we might use 16 or 14 bit samples, + in which case 4MB is more samples than that. Therefore size this for + the smallest sample value .. 4MB = 2M samples (16 bit). + */ + + Sample* mix_buf = new Sample[2*1048576]; + float* gain_buf = new float[2*1048576]; - int ret = _do_refill(mix_buf, gain_buf); + int ret = _do_refill (mix_buf, gain_buf, (partial_fill ? disk_read_chunk_frames : 0)); delete [] mix_buf; delete [] gain_buf; @@ -1082,9 +1098,15 @@ AudioDiskstream::do_refill_with_alloc () /** Get some more data from disk and put it in our channels' playback_bufs, * if there is suitable space in them. + * + * If fill_level is non-zero, then we will refill the buffer so that there is + * still at least fill_level samples of space left to be filled. This is used + * after locates so that we do not need to wait to fill the entire buffer. + * */ + int -AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer) +AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer, framecnt_t fill_level) { int32_t ret = 0; framecnt_t to_read; @@ -1097,6 +1119,14 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer) boost::shared_ptr<ChannelList> c = channels.reader(); framecnt_t ts; + /* do not read from disk while session is marked as Loading, to avoid + useless redundant I/O. + */ + + if (_session.state_of_the_state() & Session::Loading) { + return 0; + } + if (c->empty()) { return 0; } @@ -1116,13 +1146,13 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer) return 0; } - /* if there are 2+ chunks of disk i/o possible for - this track, let the caller know so that it can arrange - for us to be called again, ASAP. - */ - - if (total_space >= (_slaved ? 3 : 2) * disk_read_chunk_frames) { - ret = 1; + if (fill_level) { + if (fill_level < total_space) { + total_space -= fill_level; + } else { + /* we can't do anything with it */ + fill_level = 0; + } } /* if we're running close to normal speed and there isn't enough @@ -1149,10 +1179,6 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer) return 0; } - /* never do more than disk_read_chunk_frames worth of disk input per call (limit doesn't apply for memset) */ - - total_space = min (disk_read_chunk_frames, total_space); - if (reversed) { if (file_frame == 0) { @@ -1219,6 +1245,30 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer) framepos_t file_frame_tmp = 0; + /* total_space is in samples. We want to optimize read sizes in various sizes using bytes */ + + const size_t bits_per_sample = format_data_width (_session.config.get_native_file_data_format()); + size_t total_bytes = total_space * bits_per_sample / 8; + + /* chunk size range is 256kB to 4MB. Bigger is faster in terms of MB/sec, but bigger chunk size always takes longer + */ + size_t byte_size_for_read = max ((size_t) (256 * 1024), min ((size_t) (4 * 1048576), total_bytes)); + + /* find nearest (lower) multiple of 16384 */ + + byte_size_for_read = (byte_size_for_read / 16384) * 16384; + + /* now back to samples */ + + framecnt_t samples_to_read = byte_size_for_read / (bits_per_sample / 8); + + //cerr << name() << " will read " << byte_size_for_read << " out of total bytes " << total_bytes << " in buffer of " + // << c->front()->playback_buf->bufsize() * bits_per_sample / 8 << " bps = " << bits_per_sample << endl; + // cerr << name () << " read samples = " << samples_to_read << " out of total space " << total_space << " in buffer of " << c->front()->playback_buf->bufsize() << " samples\n"; + + // uint64_t before = g_get_monotonic_time (); + // uint64_t elapsed; + for (chan_n = 0, i = c->begin(); i != c->end(); ++i, ++chan_n) { ChannelInfo* chan (*i); @@ -1228,7 +1278,7 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer) chan->playback_buf->get_write_vector (&vector); - if ((framecnt_t) vector.len[0] > disk_read_chunk_frames) { + if ((framecnt_t) vector.len[0] > samples_to_read) { /* we're not going to fill the first chunk, so certainly do not bother with the other part. it won't be connected with the part we do fill, as in: @@ -1260,7 +1310,7 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer) len2 = vector.len[1]; to_read = min (ts, len1); - to_read = min (to_read, disk_read_chunk_frames); + to_read = min (to_read, (framecnt_t) samples_to_read); assert (to_read >= 0); @@ -1279,8 +1329,9 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer) if (to_read) { - /* we read all of vector.len[0], but it wasn't an entire disk_read_chunk_frames of data, - so read some or all of vector.len[1] as well. + /* we read all of vector.len[0], but it wasn't the + entire samples_to_read of data, so read some or + all of vector.len[1] as well. */ if (read (buf2, mixdown_buffer, gain_buffer, file_frame_tmp, to_read, chan_n, reversed)) { @@ -1297,11 +1348,17 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer) } + // elapsed = g_get_monotonic_time () - before; + // cerr << "\tbandwidth = " << (byte_size_for_read / 1048576.0) / (elapsed/1000000.0) << "MB/sec\n"; + file_frame = file_frame_tmp; assert (file_frame >= 0); + ret = ((total_space - samples_to_read) > disk_read_chunk_frames); + + c->front()->playback_buf->get_write_vector (&vector); + out: - return ret; } @@ -2070,7 +2127,7 @@ AudioDiskstream::allocate_temporary_buffers () when slaving to MTC, Timecode etc. */ - double const sp = max (fabsf (_actual_speed), 1.2f); + double const sp = max (fabs (_actual_speed), 1.2); framecnt_t required_wrap_size = (framecnt_t) ceil (_session.get_block_size() * sp) + 2; if (required_wrap_size > wrap_buffer_size) { @@ -2362,6 +2419,10 @@ AudioDiskstream::set_destructive (bool yn) bool AudioDiskstream::can_become_destructive (bool& requires_bounce) const { + if (Profile->get_trx()) { + return false; + } + if (!_playlist) { requires_bounce = false; return false; diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc index c056763efc..e864df83c3 100644 --- a/libs/ardour/audio_track.cc +++ b/libs/ardour/audio_track.cc @@ -35,6 +35,7 @@ #include "ardour/meter.h" #include "ardour/playlist_factory.h" #include "ardour/processor.h" +#include "ardour/profile.h" #include "ardour/region.h" #include "ardour/region_factory.h" #include "ardour/session.h" @@ -62,7 +63,7 @@ AudioTrack::create_diskstream () { AudioDiskstream::Flag dflags = AudioDiskstream::Flag (AudioDiskstream::Recordable); - if (_mode == Destructive) { + if (_mode == Destructive && !Profile->get_trx()) { dflags = AudioDiskstream::Flag (dflags | AudioDiskstream::Destructive); } else if (_mode == NonLayered){ dflags = AudioDiskstream::Flag(dflags | AudioDiskstream::NonLayered); @@ -77,7 +78,11 @@ AudioTrack::set_diskstream (boost::shared_ptr<Diskstream> ds) Track::set_diskstream (ds); _diskstream->set_track (this); - _diskstream->set_destructive (_mode == Destructive); + if (Profile->get_trx()) { + _diskstream->set_destructive (false); + } else { + _diskstream->set_destructive (_mode == Destructive); + } _diskstream->set_non_layered (_mode == NonLayered); if (audio_diskstream()->deprecated_io_node) { @@ -106,7 +111,7 @@ AudioTrack::set_mode (TrackMode m) { if (m != _mode) { - if (_diskstream->set_destructive (m == Destructive)) { + if (!Profile->get_trx() && _diskstream->set_destructive (m == Destructive)) { return -1; } @@ -129,8 +134,15 @@ AudioTrack::can_use_mode (TrackMode m, bool& bounce_required) return true; case Destructive: + if (Profile->get_trx()) { + return false; + } else { + return _diskstream->can_become_destructive (bounce_required); + } + break; + default: - return _diskstream->can_become_destructive (bounce_required); + return false; } } @@ -193,6 +205,14 @@ AudioTrack::set_state (const XMLNode& node, int version) _mode = Normal; } + if (Profile->get_trx() && _mode == Destructive) { + /* Tracks does not support destructive tracks and trying to + handle it as a normal track would be wrong. + */ + error << string_compose (_("%1: this session uses destructive tracks, which are not supported"), PROGRAM_NAME) << endmsg; + return -1; + } + if (Track::set_state (node, version)) { return -1; } diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc index 4b9a81eb9f..2ce4b763c3 100644 --- a/libs/ardour/audio_unit.cc +++ b/libs/ardour/audio_unit.cc @@ -73,6 +73,7 @@ static string preset_search_path = "/Library/Audio/Presets:/Network/Library/Audi static string preset_suffix = ".aupreset"; static bool preset_search_path_initialized = false; FILE * AUPluginInfo::_crashlog_fd = NULL; +bool AUPluginInfo::_scan_only = true; static void au_blacklist (std::string id) @@ -2277,10 +2278,19 @@ AUPluginInfo::au_cache_path () } PluginInfoList* -AUPluginInfo::discover () +AUPluginInfo::discover (bool scan_only) { XMLTree tree; + /* AU require a CAComponentDescription pointer provided by the OS. + * Ardour only caches port and i/o config. It can't just 'scan' without + * 'discovering' (like we do for VST). + * + * "Scan Only" means + * "Iterate over all plugins. skip the ones where there's no io-cache". + */ + _scan_only = scan_only; + if (!Glib::file_test (au_cache_path(), Glib::FILE_TEST_EXISTS)) { ARDOUR::BootMessage (_("Discovering AudioUnit plugins (could take some time ...)")); } @@ -2498,8 +2508,9 @@ AUPluginInfo::discover_by_description (PluginInfoList& plugs, CAComponentDescrip info->version = 0; } - if (cached_io_configuration (info->unique_id, info->version, cacomp, info->cache, info->name)) { + const int rv = cached_io_configuration (info->unique_id, info->version, cacomp, info->cache, info->name); + if (rv == 0) { /* here we have to map apple's wildcard system to a simple pair of values. in ::can_do() we use the whole system, but here we need a single pair of values. XXX probably means we should @@ -2533,7 +2544,8 @@ AUPluginInfo::discover_by_description (PluginInfoList& plugs, CAComponentDescrip plugs.push_back (info); - } else { + } + else if (rv == -1) { error << string_compose (_("Cannot get I/O configuration info for AU %1"), info->name) << endmsg; } @@ -2545,7 +2557,7 @@ AUPluginInfo::discover_by_description (PluginInfoList& plugs, CAComponentDescrip au_crashlog(string_compose("End AU discovery for Type: %1", (int)desc.componentType)); } -bool +int AUPluginInfo::cached_io_configuration (const std::string& unique_id, UInt32 version, CAComponent& comp, @@ -2569,7 +2581,12 @@ AUPluginInfo::cached_io_configuration (const std::string& unique_id, if (cim != cached_info.end()) { cinfo = cim->second; - return true; + return 0; + } + + if (_scan_only) { + PBD::info << string_compose (_("Skipping AU %1 (not indexed. Discover new plugins to add)"), unique_id) << endmsg; + return 1; } CAAudioUnit unit; @@ -2582,19 +2599,19 @@ AUPluginInfo::cached_io_configuration (const std::string& unique_id, try { if (CAAudioUnit::Open (comp, unit) != noErr) { - return false; + return -1; } } catch (...) { warning << string_compose (_("Could not load AU plugin %1 - ignored"), name) << endmsg; - return false; + return -1; } DEBUG_TRACE (DEBUG::AudioUnits, "get AU channel info\n"); if ((ret = unit.GetChannelInfo (&channel_info, cnt)) < 0) { - return false; + return -1; } if (ret > 0) { @@ -2620,7 +2637,7 @@ AUPluginInfo::cached_io_configuration (const std::string& unique_id, add_cached_info (id, cinfo); save_cached_info (); - return true; + return 0; } void diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index c18b5dde38..16283d9232 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -455,7 +455,7 @@ AudioEngine::backend_reset_requested() void AudioEngine::do_reset_backend() { - SessionEvent::create_per_thread_pool (X_("Backend reset processing thread"), 512); + SessionEvent::create_per_thread_pool (X_("Backend reset processing thread"), 1024); Glib::Threads::Mutex::Lock guard (_reset_request_lock); @@ -468,25 +468,28 @@ AudioEngine::do_reset_backend() Glib::Threads::RecMutex::Lock pl (_state_lock); g_atomic_int_dec_and_test (&_hw_reset_request_count); - std::cout << "AudioEngine::RESET::Reset request processing. Requests left: " << _hw_reset_request_count << std::endl; - DeviceResetStarted(); // notify about device reset to be started - - // backup the device name - std::string name = _backend->device_name (); - - std::cout << "AudioEngine::RESET::Stoping engine..." << std::endl; - stop(); - - std::cout << "AudioEngine::RESET::Reseting device..." << std::endl; - if ( 0 == _backend->reset_device () ) { - - std::cout << "AudioEngine::RESET::Starting engine..." << std::endl; - start (); - + std::cout << "AudioEngine::RESET::Reset request processing. Requests left: " << _hw_reset_request_count << std::endl; + DeviceResetStarted(); // notify about device reset to be started + + // backup the device name + std::string name = _backend->device_name (); + + std::cout << "AudioEngine::RESET::Reseting device..." << std::endl; + if ( ( 0 == stop () ) && + ( 0 == _backend->reset_device () ) && + ( 0 == start () ) ) { + + std::cout << "AudioEngine::RESET::Engine started..." << std::endl; + // inform about possible changes BufferSizeChanged (_backend->buffer_size() ); - } else { - DeviceError(); + DeviceResetFinished(); // notify about device reset finish + + } else { + + DeviceResetFinished(); // notify about device reset finish + // we've got an error + DeviceError(); } std::cout << "AudioEngine::RESET::Done." << std::endl; @@ -522,6 +525,8 @@ AudioEngine::do_devicelist_update() _devicelist_update_lock.unlock(); + Glib::Threads::RecMutex::Lock pl (_state_lock); + g_atomic_int_dec_and_test (&_hw_devicelist_update_count); DeviceListChanged (); /* EMIT SIGNAL */ @@ -623,9 +628,11 @@ AudioEngine::remove_session () void AudioEngine::reconnect_session_routes (bool reconnect_inputs, bool reconnect_outputs) { - if (_session) { - _session->reconnect_existing_routes(true, true, reconnect_inputs, reconnect_outputs); - } +#ifdef USE_TRACKS_CODE_FEATURES + if (_session) { + _session->reconnect_existing_routes(true, true, reconnect_inputs, reconnect_outputs); + } +#endif } @@ -768,7 +775,7 @@ void AudioEngine::drop_backend () { if (_backend) { - stop(false); + _backend->stop (); _backend->drop_device (); _backend.reset (); _running = false; @@ -856,18 +863,18 @@ AudioEngine::stop (bool for_latency) return 0; } - if (_session && _running) { + if (_backend->stop ()) { + return -1; + } + + if (_session && _running && + (_session->state_of_the_state() & Session::Loading) == 0 && + (_session->state_of_the_state() & Session::Deletion) == 0) { // it's not a halt, but should be handled the same way: // disable record, stop transport and I/O processign but save the data. _session->engine_halted (); } - Glib::Threads::Mutex::Lock lm (_process_lock); - - if (_backend->stop ()) { - return -1; - } - _running = false; _processed_frames = 0; _measuring_latency = MeasureNone; @@ -1151,6 +1158,12 @@ AudioEngine::set_systemic_output_latency (uint32_t ol) return _backend->set_systemic_output_latency (ol); } +bool +AudioEngine::thread_initialised_for_audio_processing () +{ + return SessionEvent::has_per_thread_pool () && AsyncMIDIPort::is_process_thread(); +} + /* END OF BACKEND PROXY API */ void diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc index 8113b261f9..a3535565dd 100644 --- a/libs/ardour/audioregion.cc +++ b/libs/ardour/audioregion.cc @@ -25,6 +25,7 @@ #include <set> #include <boost/scoped_array.hpp> +#include <boost/shared_ptr.hpp> #include <glibmm/threads.h> @@ -49,6 +50,11 @@ #include "ardour/parameter_descriptor.h" #include "ardour/progress.h" +#include "ardour/sndfilesource.h" +#ifdef HAVE_COREAUDIO +#include "ardour/coreaudiosource.h" +#endif // HAVE_COREAUDIO + #include "i18n.h" #include <locale.h> @@ -1562,6 +1568,34 @@ AudioRegion::audio_source (uint32_t n) const return boost::dynamic_pointer_cast<AudioSource>(source(n)); } +uint32_t +AudioRegion::get_related_audio_file_channel_count () const +{ + uint32_t chan_count = 0; + for (SourceList::const_iterator i = _sources.begin(); i != _sources.end(); ++i) { + + boost::shared_ptr<SndFileSource> sndf = boost::dynamic_pointer_cast<SndFileSource>(*i); + if (sndf ) { + + if (sndf->channel_count() > chan_count) { + chan_count = sndf->channel_count(); + } + } +#ifdef HAVE_COREAUDIO + else { + boost::shared_ptr<CoreAudioSource> cauf = boost::dynamic_pointer_cast<CoreAudioSource>(*i); + if (cauf) { + if (cauf->channel_count() > chan_count) { + chan_count = cauf->channel_count(); + } + } + } +#endif // HAVE_COREAUDIO + } + + return chan_count; +} + int AudioRegion::adjust_transients (frameoffset_t delta) { diff --git a/libs/ardour/audiosource.cc b/libs/ardour/audiosource.cc index 566a37f5bb..025652aa3b 100644 --- a/libs/ardour/audiosource.cc +++ b/libs/ardour/audiosource.cc @@ -68,7 +68,6 @@ using namespace PBD; Glib::Threads::Mutex AudioSource::_level_buffer_lock; vector<boost::shared_array<Sample> > AudioSource::_mixdown_buffers; vector<boost::shared_array<gain_t> > AudioSource::_gain_buffers; -size_t AudioSource::_working_buffers_size = 0; bool AudioSource::_build_missing_peakfiles = false; /** true if we want peakfiles (e.g. if we are displaying a GUI) */ diff --git a/libs/ardour/auditioner.cc b/libs/ardour/auditioner.cc index 30a354aa95..3242346e96 100644 --- a/libs/ardour/auditioner.cc +++ b/libs/ardour/auditioner.cc @@ -34,6 +34,7 @@ #include "ardour/midi_region.h" #include "ardour/plugin.h" #include "ardour/plugin_insert.h" +#include "ardour/profile.h" #include "ardour/region_factory.h" #include "ardour/route.h" #include "ardour/session.h" @@ -327,7 +328,11 @@ Auditioner::set_diskstream (boost::shared_ptr<Diskstream> ds) Track::set_diskstream (ds); _diskstream->set_track (this); - _diskstream->set_destructive (_mode == Destructive); + if (Profile->get_trx()) { + _diskstream->set_destructive (false); + } else { + _diskstream->set_destructive (_mode == Destructive); + } _diskstream->set_non_layered (_mode == NonLayered); _diskstream->set_record_enabled (false); _diskstream->request_input_monitoring (false); diff --git a/libs/ardour/butler.cc b/libs/ardour/butler.cc index 01c21b45d0..f8f8c83eba 100644 --- a/libs/ardour/butler.cc +++ b/libs/ardour/butler.cc @@ -54,6 +54,7 @@ Butler::Butler(Session& s) g_atomic_int_set(&should_do_transport_work, 0); SessionEvent::pool->set_trash (&pool_trash); + /* catch future changes to parameters */ Config->ParameterChanged.connect_same_thread (*this, boost::bind (&Butler::config_changed, this, _1)); } @@ -63,15 +64,38 @@ Butler::~Butler() } void +Butler::map_parameters () +{ + /* use any current ones that we care about */ + boost::function<void (std::string)> ff (boost::bind (&Butler::config_changed, this, _1)); + Config->map_parameters (ff); +} + +void Butler::config_changed (std::string p) { if (p == "playback-buffer-seconds") { - /* size is in Samples, not bytes */ - audio_dstream_playback_buffer_size = (uint32_t) floor (Config->get_audio_playback_buffer_seconds() * _session.frame_rate()); _session.adjust_playback_buffering (); + if (Config->get_buffering_preset() == Custom) { + /* size is in Samples, not bytes */ + audio_dstream_playback_buffer_size = (uint32_t) floor (Config->get_audio_playback_buffer_seconds() * _session.frame_rate()); + _session.adjust_playback_buffering (); + } else { + std::cerr << "Skip explicit buffer seconds, preset in use\n"; + } } else if (p == "capture-buffer-seconds") { + if (Config->get_buffering_preset() == Custom) { + audio_dstream_capture_buffer_size = (uint32_t) floor (Config->get_audio_capture_buffer_seconds() * _session.frame_rate()); + _session.adjust_capture_buffering (); + } else { + std::cerr << "Skip explicit buffer seconds, preset in use\n"; + } + } else if (p == "buffering-preset") { + Diskstream::set_buffering_parameters (Config->get_buffering_preset()); audio_dstream_capture_buffer_size = (uint32_t) floor (Config->get_audio_capture_buffer_seconds() * _session.frame_rate()); + audio_dstream_playback_buffer_size = (uint32_t) floor (Config->get_audio_playback_buffer_seconds() * _session.frame_rate()); _session.adjust_capture_buffering (); + _session.adjust_playback_buffering (); } else if (p == "midi-readahead") { MidiDiskstream::set_readahead_frames ((framecnt_t) (Config->get_midi_readahead() * _session.frame_rate())); } @@ -80,14 +104,16 @@ Butler::config_changed (std::string p) int Butler::start_thread() { - const float rate = (float)_session.frame_rate(); - + // set up capture and playback buffering + Diskstream::set_buffering_parameters (Config->get_buffering_preset()); + /* size is in Samples, not bytes */ + const float rate = (float)_session.frame_rate(); audio_dstream_capture_buffer_size = (uint32_t) floor (Config->get_audio_capture_buffer_seconds() * rate); audio_dstream_playback_buffer_size = (uint32_t) floor (Config->get_audio_playback_buffer_seconds() * rate); - + /* size is in bytes - * XXX: Jack needs to tell us the MIDI buffer size + * XXX: AudioEngine needs to tell us the MIDI buffer size * (i.e. how many MIDI bytes we might see in a cycle) */ midi_dstream_buffer_size = (uint32_t) floor (Config->get_midi_track_buffer_seconds() * rate); @@ -103,6 +129,11 @@ Butler::start_thread() //pthread_detach (thread); have_thread = true; + + // we are ready to request buffer adjustments + _session.adjust_capture_buffering (); + _session.adjust_playback_buffering (); + return 0; } diff --git a/libs/ardour/debug.cc b/libs/ardour/debug.cc index 0a00e896d9..d7b7269e25 100644 --- a/libs/ardour/debug.cc +++ b/libs/ardour/debug.cc @@ -65,5 +65,6 @@ PBD::DebugBits PBD::DEBUG::Ports = PBD::new_debug_bit ("Ports"); PBD::DebugBits PBD::DEBUG::AudioEngine = PBD::new_debug_bit ("AudioEngine"); PBD::DebugBits PBD::DEBUG::Soundcloud = PBD::new_debug_bit ("Soundcloud"); PBD::DebugBits PBD::DEBUG::Butler = PBD::new_debug_bit ("Butler"); +PBD::DebugBits PBD::DEBUG::GenericMidi = PBD::new_debug_bit ("genericmidi"); diff --git a/libs/ardour/directory_names.cc b/libs/ardour/directory_names.cc index a5d7bbbe9b..d8c35c52eb 100644 --- a/libs/ardour/directory_names.cc +++ b/libs/ardour/directory_names.cc @@ -39,5 +39,9 @@ const char* const surfaces_dir_name = X_("surfaces"); const char* const ladspa_dir_name = X_("ladspa"); const char* const panner_dir_name = X_("panners"); const char* const backend_dir_name = X_("backends"); +const char* const automation_dir_name = X_("automation"); +const char* const analysis_dir_name = X_("analysis"); +const char* const plugins_dir_name = X_("plugins"); +const char* const externals_dir_name = X_("externals"); } diff --git a/libs/ardour/diskstream.cc b/libs/ardour/diskstream.cc index 9f3322dade..91859e76a3 100644 --- a/libs/ardour/diskstream.cc +++ b/libs/ardour/diskstream.cc @@ -42,6 +42,7 @@ #include "ardour/diskstream.h" #include "ardour/io.h" #include "ardour/pannable.h" +#include "ardour/profile.h" #include "ardour/playlist.h" #include "ardour/session.h" #include "ardour/track.h" @@ -498,6 +499,11 @@ Diskstream::set_state (const XMLNode& node, int /*version*/) _flags = Flag (string_2_enum (prop->value(), _flags)); } + if (Profile->get_trx() && (_flags & Destructive)) { + error << string_compose (_("%1: this session uses destructive tracks, which are not supported"), PROGRAM_NAME) << endmsg; + return -1; + } + if ((prop = node.property (X_("capture-alignment"))) != 0) { set_align_choice (AlignChoice (string_2_enum (prop->value(), _alignment_choice)), true); } else { @@ -799,3 +805,63 @@ Diskstream::default_disk_write_chunk_frames () { return 65536; } + +void +Diskstream::set_buffering_parameters (BufferingPreset bp) +{ + framecnt_t read_chunk_size; + framecnt_t read_buffer_size; + framecnt_t write_chunk_size; + framecnt_t write_buffer_size; + + if (!get_buffering_presets (bp, read_chunk_size, read_buffer_size, write_chunk_size, write_buffer_size)) { + return; + } + + disk_read_chunk_frames = read_chunk_size; + disk_write_chunk_frames = write_chunk_size; + Config->set_audio_capture_buffer_seconds (write_buffer_size); + Config->set_audio_playback_buffer_seconds (read_buffer_size); + + cerr << "Set buffering params to " << disk_read_chunk_frames << '|' << disk_write_chunk_frames << '|' + << Config->get_audio_playback_buffer_seconds() << '|' + << Config->get_audio_capture_buffer_seconds () + << endl; +} + +bool +Diskstream::get_buffering_presets (BufferingPreset bp, + framecnt_t& read_chunk_size, + framecnt_t& read_buffer_size, + framecnt_t& write_chunk_size, + framecnt_t& write_buffer_size) +{ + switch (bp) { + case Small: + read_chunk_size = 65536; /* samples */ + write_chunk_size = 65536; /* samples */ + read_buffer_size = 5; /* seconds */ + write_buffer_size = 5; /* seconds */ + break; + + case Medium: + read_chunk_size = 262144; /* samples */ + write_chunk_size = 131072; /* samples */ + read_buffer_size = 10; /* seconds */ + write_buffer_size = 10; /* seconds */ + break; + + case Large: + read_chunk_size = 524288; /* samples */ + write_chunk_size = 131072; /* samples */ + read_buffer_size = 20; /* seconds */ + write_buffer_size = 20; /* seconds */ + break; + + default: + return false; + } + + return true; +} + diff --git a/libs/ardour/engine_state_controller.cc b/libs/ardour/engine_state_controller.cc new file mode 100644 index 0000000000..eb4cb14959 --- /dev/null +++ b/libs/ardour/engine_state_controller.cc @@ -0,0 +1,1907 @@ +/* + Copyright (C) 2014 Waves Audio Ltd. + + 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. + +*/ + +#include "ardour/engine_state_controller.h" + +#include "ardour/audioengine.h" +#include "ardour/session.h" +#include "ardour/rc_configuration.h" +#include "ardour/data_type.h" + +#include "pbd/pthread_utils.h" +#include "pbd/error.h" +#include "i18n.h" + + +using namespace ARDOUR; +using namespace PBD; + +namespace { + +struct DevicePredicate +{ + DevicePredicate (const std::string& device_name) + : _device_name (device_name) + {} + + bool operator ()(const AudioBackend::DeviceStatus& rhs) + { + return _device_name == rhs.name; + } + + private: + std::string _device_name; +}; +} + +EngineStateController* +EngineStateController::instance () +{ + static EngineStateController instance; + return &instance; +} + + +EngineStateController::EngineStateController () + : _current_state () + , _last_used_real_device ("") + +{ + AudioEngine::instance ()->Running.connect_same_thread (running_connection, boost::bind (&EngineStateController::_on_engine_running, this)); + AudioEngine::instance ()->Stopped.connect_same_thread (stopped_connection, boost::bind (&EngineStateController::_on_engine_stopped, this)); + AudioEngine::instance ()->Halted.connect_same_thread (stopped_connection, boost::bind (&EngineStateController::_on_engine_stopped, this)); + + /* Subscribe for udpates from AudioEngine */ + AudioEngine::instance ()->PortRegisteredOrUnregistered.connect_same_thread (update_connections, boost::bind (&EngineStateController::_on_ports_registration_update, this)); + AudioEngine::instance ()->SampleRateChanged.connect_same_thread (update_connections, boost::bind (&EngineStateController::_on_sample_rate_change, this, _1)); + AudioEngine::instance ()->BufferSizeChanged.connect_same_thread (update_connections, boost::bind (&EngineStateController::_on_buffer_size_change, this, _1)); + AudioEngine::instance ()->DeviceListChanged.connect_same_thread (update_connections, boost::bind (&EngineStateController::_on_device_list_change, this)); + AudioEngine::instance ()->DeviceError.connect_same_thread (update_connections, boost::bind (&EngineStateController::_on_device_error, this)); + + /* Global configuration parameters update */ + Config->ParameterChanged.connect_same_thread (update_connections, boost::bind (&EngineStateController::_on_parameter_changed, this, _1)); + + _deserialize_and_load_engine_states (); + _deserialize_and_load_midi_port_states (); + _do_initial_engine_setup (); + + // now push the sate to the backend + push_current_state_to_backend (false); +} + + +EngineStateController::~EngineStateController () +{ +} + + +void +EngineStateController::set_session (Session* session) +{ + _session = session; + _session->SessionLoaded.connect_same_thread (session_connections, boost::bind (&EngineStateController::_on_session_loaded, this)); +} + + +void +EngineStateController::remove_session () +{ + session_connections.drop_connections (); + _session = 0; +} + + +XMLNode& +EngineStateController::serialize_audio_midi_settings () +{ + + XMLNode* root = new XMLNode ("AudioMidiSettings"); + + _serialize_engine_states (root); + _serialize_midi_port_states (root); + + return *root; +} + + +void +EngineStateController::save_audio_midi_settings () +{ + Config->add_extra_xml (serialize_audio_midi_settings ()); + Config->save_state (); +} + + +void +EngineStateController::_deserialize_and_load_engine_states () +{ + XMLNode* audio_midi_settings_root = ARDOUR::Config->extra_xml ("AudioMidiSettings"); + + if (!audio_midi_settings_root) { + return; + } + + XMLNode* engine_states = audio_midi_settings_root->child ("EngineStates"); + + if (!engine_states) { + return; + } + + XMLNodeList state_nodes_list = engine_states->children (); + XMLNodeConstIterator state_node_iter = state_nodes_list.begin (); + + for (; state_node_iter != state_nodes_list.end (); ++state_node_iter) { + + XMLNode* state_node = *state_node_iter; + StatePtr engine_state (new State); + XMLProperty* prop = NULL; + + if ((prop = state_node->property ("backend-name")) == 0) { + continue; + } + engine_state->backend_name = prop->value (); + + if ((prop = state_node->property ("device-name")) == 0) { + continue; + } + engine_state->device_name = prop->value (); + + if ((prop = state_node->property ("sample-rate")) == 0) { + continue; + } + engine_state->sample_rate = atoi (prop->value ()); + + if ((prop = state_node->property ("buffer-size")) == 0) { + continue; + } + engine_state->buffer_size = atoi (prop->value ()); + + if ((prop = state_node->property ("active")) == 0) { + continue; + } + engine_state->active = string_is_affirmative (prop->value ()); + + XMLNodeList state_children_list = state_node->children (); + XMLNodeConstIterator state_child_iter = state_children_list.begin (); + + for (; state_child_iter != state_children_list.end (); ++state_child_iter) { + XMLNode* state_child = *state_child_iter; + + if (state_child->name () == "InputConfiguration") { + + XMLNodeList input_states_nodes = state_child->children (); + XMLNodeConstIterator input_state_node_iter = input_states_nodes.begin (); + PortStateList& input_states = engine_state->input_channel_states; + + for (; input_state_node_iter != input_states_nodes.end (); ++input_state_node_iter) { + + XMLNode* input_state_node = *input_state_node_iter; + + if (input_state_node->name () != "input") { + continue; + } + PortState input_state (input_state_node->name ()); + + if ((prop = input_state_node->property ("name")) == 0) { + continue; + } + input_state.name = prop->value (); + + if ((prop = input_state_node->property ("active")) == 0) { + continue; + } + input_state.active = string_is_affirmative (prop->value ()); + + input_states.push_back (input_state); + } + + } else if (state_child->name () == "MultiOutConfiguration") { + + XMLNodeList multi_out_state_nodes = state_child->children (); + XMLNodeConstIterator multi_out_state_node_iter = multi_out_state_nodes.begin (); + PortStateList& multi_out_states = engine_state->multi_out_channel_states; + + for (; multi_out_state_node_iter != multi_out_state_nodes.end (); ++multi_out_state_node_iter) { + + XMLNode* multi_out_state_node = *multi_out_state_node_iter; + + if (multi_out_state_node->name () != "output") { + continue; + } + PortState multi_out_state (multi_out_state_node->name ()); + + if ((prop = multi_out_state_node->property ("name")) == 0) { + continue; + } + multi_out_state.name = prop->value (); + + if ((prop = multi_out_state_node->property ("active")) == 0) { + continue; + } + multi_out_state.active = string_is_affirmative (prop->value ()); + + multi_out_states.push_back (multi_out_state); + } + } else if (state_child->name () == "StereoOutConfiguration") { + + XMLNodeList stereo_out_state_nodes = state_child->children (); + XMLNodeConstIterator stereo_out_state_node_iter = stereo_out_state_nodes.begin (); + PortStateList& stereo_out_states = engine_state->stereo_out_channel_states; + + for (; stereo_out_state_node_iter != stereo_out_state_nodes.end (); ++stereo_out_state_node_iter) { + + XMLNode* stereo_out_state_node = *stereo_out_state_node_iter; + + if (stereo_out_state_node->name () != "output") { + continue; + } + PortState stereo_out_state (stereo_out_state_node->name ()); + + if ((prop = stereo_out_state_node->property ("name")) == 0) { + continue; + } + stereo_out_state.name = prop->value (); + + if ((prop = stereo_out_state_node->property ("active")) == 0) { + continue; + } + stereo_out_state.active = string_is_affirmative (prop->value ()); + + stereo_out_states.push_back (stereo_out_state); + } + } + } + + _states.push_back (engine_state); + } +} + + +void +EngineStateController::_deserialize_and_load_midi_port_states () +{ + XMLNode* audio_midi_settings_root = ARDOUR::Config->extra_xml ("AudioMidiSettings"); + + if (!audio_midi_settings_root) { + return; + } + + XMLNode* midi_states = audio_midi_settings_root->child ("MidiStates"); + + if (!midi_states) { + return; + } + + XMLNodeList state_nodes_list = midi_states->children (); + XMLNodeConstIterator state_node_iter = state_nodes_list.begin (); + for (; state_node_iter != state_nodes_list.end (); ++state_node_iter) { + + XMLNode* state_node = *state_node_iter; + if (state_node->name () == "MidiInputs") { + + XMLNodeList input_state_nodes = state_node->children (); + XMLNodeConstIterator input_state_node_iter = input_state_nodes.begin (); + _midi_inputs.clear (); + + for (; input_state_node_iter != input_state_nodes.end (); ++input_state_node_iter) { + + XMLNode* input_state_node = *input_state_node_iter; + XMLProperty* prop = NULL; + + if (input_state_node->name () != "input") { + continue; + } + MidiPortState input_state (input_state_node->name ()); + + if ((prop = input_state_node->property ("name")) == 0) { + continue; + } + input_state.name = prop->value (); + + if ((prop = input_state_node->property ("active")) == 0) { + continue; + } + input_state.active = string_is_affirmative (prop->value ()); + + if ((prop = input_state_node->property ("scene-connected")) == 0) { + continue; + } + input_state.scene_connected = string_is_affirmative (prop->value ()); + + if ((prop = input_state_node->property ("mtc-in")) == 0) { + continue; + } + input_state.mtc_in = string_is_affirmative (prop->value ()); + + _midi_inputs.push_back (input_state); + } + + } else if (state_node->name () == "MidiOutputs") { + + XMLNodeList output_state_nodes = state_node->children (); + XMLNodeConstIterator output_state_node_iter = output_state_nodes.begin (); + _midi_outputs.clear (); + + for (; output_state_node_iter != output_state_nodes.end (); ++output_state_node_iter) { + + XMLNode* output_state_node = *output_state_node_iter; + XMLProperty* prop = NULL; + + if (output_state_node->name () != "output") { + continue; + } + MidiPortState output_state (output_state_node->name ()); + + if ((prop = output_state_node->property ("name")) == 0) { + continue; + } + output_state.name = prop->value (); + + if ((prop = output_state_node->property ("active")) == 0) { + continue; + } + output_state.active = string_is_affirmative (prop->value ()); + + if ((prop = output_state_node->property ("scene-connected")) == 0) { + continue; + } + output_state.scene_connected = string_is_affirmative (prop->value ()); + + if ((prop = output_state_node->property ("mtc-in")) == 0) { + continue; + } + output_state.mtc_in = string_is_affirmative (prop->value ()); + + _midi_outputs.push_back (output_state); + } + } + } +} + + +void +EngineStateController::_serialize_engine_states (XMLNode* audio_midi_settings_node) +{ + if (!audio_midi_settings_node) { + return; + } + + // clean up state data first + audio_midi_settings_node->remove_nodes_and_delete ("EngineStates" ); + + XMLNode* engine_states = new XMLNode ("EngineStates" ); + + StateList::const_iterator state_iter = _states.begin (); + for (; state_iter != _states.end (); ++state_iter) { + + StatePtr state_ptr = *state_iter; + + // create new node for the state + XMLNode* state_node = new XMLNode ("State"); + + state_node->add_property ("backend-name", state_ptr->backend_name); + state_node->add_property ("device-name", state_ptr->device_name); + state_node->add_property ("sample-rate", state_ptr->sample_rate); + state_node->add_property ("buffer-size", state_ptr->buffer_size); + state_node->add_property ("active", state_ptr->active ? "yes" : "no"); + + // store channel states: + // inputs + XMLNode* input_config_node = new XMLNode ("InputConfiguration"); + PortStateList& input_channels = state_ptr->input_channel_states; + PortStateList::const_iterator input_state_iter = input_channels.begin (); + for (; input_state_iter != input_channels.end (); ++input_state_iter) { + XMLNode* input_state_node = new XMLNode ("input"); + input_state_node->add_property ("name", input_state_iter->name); + input_state_node->add_property ("active", input_state_iter->active ? "yes" : "no"); + input_config_node->add_child_nocopy (*input_state_node); + } + state_node->add_child_nocopy (*input_config_node); + + // multi out outputs + XMLNode* multi_out_config_node = new XMLNode ("MultiOutConfiguration"); + PortStateList& multi_out_channels = state_ptr->multi_out_channel_states; + PortStateList::const_iterator multi_out_state_iter = multi_out_channels.begin (); + for (; multi_out_state_iter != multi_out_channels.end (); ++multi_out_state_iter) { + XMLNode* multi_out_state_node = new XMLNode ("output" ); + multi_out_state_node->add_property ("name", multi_out_state_iter->name); + multi_out_state_node->add_property ("active", multi_out_state_iter->active ? "yes" : "no"); + multi_out_config_node->add_child_nocopy (*multi_out_state_node); + } + state_node->add_child_nocopy (*multi_out_config_node); + + // stereo out outputs + XMLNode* stereo_out_config_node = new XMLNode ("StereoOutConfiguration"); + PortStateList& stereo_out_channels = state_ptr->stereo_out_channel_states; + PortStateList::const_iterator stereo_out_state_iter = stereo_out_channels.begin (); + for (; stereo_out_state_iter != stereo_out_channels.end (); ++stereo_out_state_iter) { + XMLNode* stereo_out_state_node = new XMLNode ("output" ); + stereo_out_state_node->add_property ("name", stereo_out_state_iter->name); + stereo_out_state_node->add_property ("active", stereo_out_state_iter->active ? "yes" : "no"); + stereo_out_config_node->add_child_nocopy (*stereo_out_state_node); + } + state_node->add_child_nocopy (*stereo_out_config_node); + + engine_states->add_child_nocopy (*state_node); + } + + audio_midi_settings_node->add_child_nocopy (*engine_states); +} + + +void +EngineStateController::_serialize_midi_port_states (XMLNode* audio_midi_settings_node) +{ + if (!audio_midi_settings_node) { + return; + } + + // clean up state data first + audio_midi_settings_node->remove_nodes_and_delete ("MidiStates" ); + + XMLNode* midi_states_node = new XMLNode ("MidiStates" ); + + XMLNode* midi_input_states_node = new XMLNode ("MidiInputs" ); + MidiPortStateList::const_iterator midi_input_state_iter = _midi_inputs.begin (); + for (; midi_input_state_iter != _midi_inputs.end (); ++midi_input_state_iter) { + XMLNode* midi_input_node = new XMLNode ("input" ); + midi_input_node->add_property ("name", midi_input_state_iter->name); + midi_input_node->add_property ("active", midi_input_state_iter->active ? "yes" : "no"); + midi_input_node->add_property ("scene_connected", midi_input_state_iter->scene_connected ? "yes" : "no"); + midi_input_node->add_property ("mtc-in", midi_input_state_iter->mtc_in ? "yes" : "no"); + midi_input_states_node->add_child_nocopy (*midi_input_node); + } + midi_states_node->add_child_nocopy (*midi_input_states_node); + + XMLNode* midi_output_states_node = new XMLNode ("MidiOutputs" ); + MidiPortStateList::const_iterator midi_output_state_iter = _midi_outputs.begin (); + for (; midi_output_state_iter != _midi_outputs.end (); ++midi_output_state_iter) { + XMLNode* midi_output_node = new XMLNode ("output" ); + midi_output_node->add_property ("name", midi_output_state_iter->name); + midi_output_node->add_property ("active", midi_output_state_iter->active ? "yes" : "no"); + midi_output_node->add_property ("scene_connected", midi_output_state_iter->scene_connected ? "yes" : "no"); + midi_output_node->add_property ("mtc-in", midi_output_state_iter->mtc_in ? "yes" : "no"); + midi_output_states_node->add_child_nocopy (*midi_output_node); + } + midi_states_node->add_child_nocopy (*midi_output_states_node); + + audio_midi_settings_node->add_child_nocopy (*midi_states_node); +} + + +bool +EngineStateController::_apply_state (const StatePtr& state) +{ + bool applied = false; + + if (set_new_backend_as_current (state->backend_name)) { + applied = set_new_device_as_current (state->device_name); + } + + return applied; +} + + +void +EngineStateController::_do_initial_engine_setup () +{ + bool state_applied = false; + + // if we have no saved state load default values + if (!_states.empty ()) { + + // look for last active state first + StateList::const_iterator state_iter = _states.begin (); + for (; state_iter != _states.end (); ++state_iter) { + if ( (*state_iter)->active ) { + state_applied = _apply_state (*state_iter); + break; + } + } + + // last active state was not applied + // try others + if (!state_applied) { + StateList::const_iterator state_iter = _states.begin (); + for (; state_iter != _states.end (); ++state_iter) { + state_applied = _apply_state (*state_iter); + break; + } + } + } + + if (!state_applied ){ + std::vector<const AudioBackendInfo*> backends = AudioEngine::instance ()->available_backends (); + + if (!backends.empty ()) { + + if (!set_new_backend_as_current (backends.front ()->name )) { + std::cerr << "\tfailed to set backend [" << backends.front ()->name << "]\n"; + } + } + + } +} + + +bool +EngineStateController::_validate_current_device_state () +{ + boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend (); + assert (backend); + + // check if device parameters from the state record are still valid + // validate sample rate + std::vector<float> sample_rates = backend->available_sample_rates (_current_state->device_name); + + if (sample_rates.empty ()) { + return false; + } + + // check if session desired sample rate (if it's set) could be used with this device + if (_session != 0) { + + if ( !set_new_sample_rate_in_controller (_session->nominal_frame_rate ())) { + if ( !set_new_sample_rate_in_controller (backend->default_sample_rate ()) ) { + if (!set_new_sample_rate_in_controller (sample_rates.front ()) ) { + return false; + } + } + } + + } else { + // check if current sample rate is supported because we have no session desired sample rate value + if ( !set_new_sample_rate_in_controller (_current_state->sample_rate)) { + if ( !set_new_sample_rate_in_controller (backend->default_sample_rate ()) ) { + if (!set_new_sample_rate_in_controller (sample_rates.front ()) ) { + return false; + } + } + } + } + + // validate buffer size + std::vector<pframes_t> buffer_sizes = backend->available_buffer_sizes (_current_state->device_name); + // check if buffer size is supported + std::vector<pframes_t>::iterator bs_iter = std::find (buffer_sizes.begin (), buffer_sizes.end (), _current_state->buffer_size); + // if current is not found switch to default if is supported + if (bs_iter == buffer_sizes.end ()) { + bs_iter = std::find (buffer_sizes.begin (), buffer_sizes.end (), backend->default_buffer_size (_current_state->device_name)); + + if (bs_iter != buffer_sizes.end ()) { + _current_state->buffer_size = backend->default_buffer_size (_current_state->device_name); + } else { + if (!buffer_sizes.empty ()) { + _current_state->buffer_size = buffer_sizes.front (); + } + } + + } + + return true; +} + + +void +EngineStateController::_update_ltc_source_port () +{ + // this method is called if the list of ports is changed + + // check that ltc-in port from Config still exists + if (_audio_input_port_exists (get_ltc_source_port ())) { + // audio port, that was saved in Config, exists + return ; + } + + //otherwise set first available audio port + if (!_current_state->input_channel_states.empty ()) { + set_ltc_source_port (_current_state->input_channel_states.front ().name); + return ; + } + + // no available audio-in ports + set_ltc_source_port (""); +} + +void +EngineStateController::_update_ltc_output_port () +{ + // this method is called if the list of ports is changed + + // check that ltc-out port from Config still exists + if (_audio_output_port_exists (get_ltc_output_port ())) { + // audio port, that was saved in Config, exists + return ; + } + + PortStateList* output_states; + if (Config->get_output_auto_connect () & AutoConnectMaster) { + output_states = &_current_state->stereo_out_channel_states; + } else { + output_states = &_current_state->multi_out_channel_states; + } + + //otherwise set first available audio port + if (!output_states->empty ()) { + set_ltc_output_port (output_states->front ().name); + return ; + } + + // no available audio-out ports + set_ltc_output_port (""); +} + + +bool +EngineStateController::_audio_input_port_exists (const std::string& port_name) +{ + PortStateList::const_iterator iter = _current_state->input_channel_states.begin (); + for (; iter != _current_state->input_channel_states.end (); ++iter ) { + if (iter->name == port_name) + return true; + } + return false; +} + +bool +EngineStateController::_audio_output_port_exists (const std::string& port_name) +{ + PortStateList* output_states; + if (Config->get_output_auto_connect () & AutoConnectMaster) { + output_states = &_current_state->stereo_out_channel_states; + } else { + output_states = &_current_state->multi_out_channel_states; + } + + PortStateList::const_iterator iter = output_states->begin (); + for (; iter != output_states->end (); ++iter ) { + if (iter->name == port_name) + return true; + } + return false; +} + + +const std::string& +EngineStateController::get_current_backend_name () const +{ + return _current_state->backend_name; +} + + +const std::string& +EngineStateController::get_current_device_name () const +{ + return _current_state->device_name; +} + + +void +EngineStateController::available_backends (std::vector<const AudioBackendInfo*>& available_backends) +{ + available_backends = AudioEngine::instance ()->available_backends (); +} + + +void +EngineStateController::enumerate_devices (std::vector<AudioBackend::DeviceStatus>& device_vector) const +{ + boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend (); + assert (backend); + device_vector = backend->enumerate_devices (); +} + + +framecnt_t +EngineStateController::get_current_sample_rate () const +{ + return _current_state->sample_rate; +} + + +framecnt_t +EngineStateController::get_default_sample_rate () const +{ + boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend (); + assert (backend); + return backend->default_sample_rate (); +} + + +void +EngineStateController::available_sample_rates_for_current_device (std::vector<float>& sample_rates) const +{ + boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend (); + assert (backend); + sample_rates = backend->available_sample_rates (_current_state->device_name); +} + + +uint32_t +EngineStateController::get_current_buffer_size () const +{ + return _current_state->buffer_size; +} + + +uint32_t +EngineStateController::get_default_buffer_size () const +{ + boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend (); + assert (backend); + return backend->default_buffer_size (_current_state->device_name); +} + + +void +EngineStateController::available_buffer_sizes_for_current_device (std::vector<pframes_t>& buffer_sizes) const +{ + boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend (); + assert (backend); + buffer_sizes = backend->available_buffer_sizes (_current_state->device_name); +} + + +bool +EngineStateController::set_new_backend_as_current (const std::string& backend_name) +{ + if (backend_name == AudioEngine::instance ()->current_backend_name ()) { + return true; + } + + boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->set_backend (backend_name, PROGRAM_NAME, ""); + if (backend) + { + if (_current_state != NULL) { + _current_state->active = false; + } + + StateList::iterator found_state_iter = find_if (_states.begin (), _states.end (), + State::StatePredicate (backend_name, "None")); + + if (found_state_iter != _states.end ()) { + // we found a record for new engine with None device - switch to it + _current_state = *found_state_iter; + _validate_current_device_state (); + } else { + // create new record for this engine with default device + _current_state = boost::shared_ptr<State>(new State ()); + _current_state->backend_name = backend_name; + _current_state->device_name = "None"; + _validate_current_device_state (); + _states.push_front (_current_state); + } + + push_current_state_to_backend (false); + + return true; + } + + return false; +} + + +bool +EngineStateController::set_new_device_as_current (const std::string& device_name) +{ + if (_current_state->device_name == device_name) { + return true; + } + + boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend (); + assert (backend); + + std::vector<AudioBackend::DeviceStatus> device_vector = backend->enumerate_devices (); + + // validate the device + std::vector<AudioBackend::DeviceStatus>::iterator device_iter; + device_iter = std::find_if (device_vector.begin (), device_vector.end (), DevicePredicate (device_name)); + + // device is available + if (device_iter != device_vector.end ()) { + + boost::shared_ptr<State> previous_state (_current_state); + + // look through state list and find the record for this device and current engine + StateList::iterator found_state_iter = find_if (_states.begin (), _states.end (), + State::StatePredicate (backend->name (), device_name)); + + if (found_state_iter != _states.end ()) + { + // we found a record for current engine and provided device name - switch to it + + _current_state = *found_state_iter; + + if (!_validate_current_device_state ()) { + _current_state = previous_state; + return false; + } + + } else { + + // the record is not found, create new one + _current_state = boost::shared_ptr<State>(new State ()); + + _current_state->backend_name = backend->name (); + _current_state->device_name = device_name; + + if (!_validate_current_device_state ()) { + _current_state = previous_state; + return false; + } + + _states.push_front (_current_state); + } + + if (previous_state != NULL) { + previous_state->active = false; + } + + push_current_state_to_backend (false); + + _last_used_real_device.clear (); + + if (device_name != "None") { + _last_used_real_device = device_name; + } + + return true; + } + + // device is not supported by current backend + return false; +} + + +bool +EngineStateController::set_new_sample_rate_in_controller (framecnt_t sample_rate) +{ + boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend (); + assert (backend); + + std::vector<float> sample_rates = backend->available_sample_rates (_current_state->device_name); + std::vector<float>::iterator iter = std::find (sample_rates.begin (), sample_rates.end (), (float)sample_rate); + + if (iter != sample_rates.end ()) { + _current_state->sample_rate = sample_rate; + return true; + } + + return false; +} + + +bool +EngineStateController::set_new_buffer_size_in_controller (pframes_t buffer_size) +{ + boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend (); + assert (backend); + + std::vector<uint32_t> buffer_sizes = backend->available_buffer_sizes (_current_state->device_name); + std::vector<uint32_t>::iterator iter = std::find (buffer_sizes.begin (), buffer_sizes.end (), buffer_size); + + if (iter != buffer_sizes.end ()) { + _current_state->buffer_size = buffer_size; + return true; + } + + return false; +} + + +uint32_t +EngineStateController::get_available_inputs_count () const +{ + uint32_t available_channel_count = 0; + + PortStateList::const_iterator iter = _current_state->input_channel_states.begin (); + + for (; iter != _current_state->input_channel_states.end (); ++iter) { + if (iter->active) { + ++available_channel_count; + } + } + + return available_channel_count; +} + + +uint32_t +EngineStateController::get_available_outputs_count () const +{ + uint32_t available_channel_count = 0; + + PortStateList* output_states; + if (Config->get_output_auto_connect () & AutoConnectMaster) { + output_states = &_current_state->stereo_out_channel_states; + } else { + output_states = &_current_state->multi_out_channel_states; + } + + PortStateList::const_iterator iter = output_states->begin (); + + for (; iter != output_states->end (); ++iter) { + if (iter->active) { + ++available_channel_count; + } + } + + return available_channel_count; +} + + +void +EngineStateController::get_physical_audio_inputs (std::vector<std::string>& port_names) +{ + port_names.clear (); + + PortStateList &input_states = _current_state->input_channel_states; + + PortStateList::iterator iter = input_states.begin (); + for (; iter != input_states.end (); ++iter) { + if (iter->active) { + port_names.push_back (iter->name); + } + } +} + + +void +EngineStateController::get_physical_audio_outputs (std::vector<std::string>& port_names) +{ + port_names.clear (); + + PortStateList* output_states; + if (Config->get_output_auto_connect () & AutoConnectMaster) { + output_states = &_current_state->stereo_out_channel_states; + } else { + output_states = &_current_state->multi_out_channel_states; + } + + PortStateList::iterator iter = output_states->begin (); + for (; iter != output_states->end (); ++iter) { + if (iter->active) { + port_names.push_back (iter->name); + } + } +} + + +void +EngineStateController::get_physical_midi_inputs (std::vector<std::string>& port_names) +{ + port_names.clear (); + + MidiPortStateList::iterator iter = _midi_inputs.begin (); + for (; iter != _midi_inputs.end (); ++iter) { + if (iter->available && iter->active) { + port_names.push_back (iter->name); + } + } +} + + +void +EngineStateController::get_physical_midi_outputs (std::vector<std::string>& port_names) +{ + port_names.clear (); + + MidiPortStateList::iterator iter = _midi_outputs.begin (); + for (; iter != _midi_outputs.end (); ++iter) { + if (iter->available && iter->active) { + port_names.push_back (iter->name); + } + } +} + + +void +EngineStateController::set_physical_audio_input_state (const std::string& port_name, bool state) +{ + PortStateList &input_states = _current_state->input_channel_states; + PortStateList::iterator found_state_iter; + found_state_iter = std::find (input_states.begin (), input_states.end (), PortState (port_name)); + + if (found_state_iter != input_states.end () && found_state_iter->active != state ) { + found_state_iter->active = state; + AudioEngine::instance ()->reconnect_session_routes (true, false); + + InputConfigChanged (); + } +} + + +void +EngineStateController::set_physical_audio_output_state (const std::string& port_name, bool state) +{ + PortStateList* output_states; + if (Config->get_output_auto_connect () & AutoConnectMaster) { + output_states = &_current_state->stereo_out_channel_states; + } else { + output_states = &_current_state->multi_out_channel_states; + } + + PortStateList::iterator target_state_iter; + target_state_iter = std::find (output_states->begin (), output_states->end (), PortState (port_name)); + + if (target_state_iter != output_states->end () && target_state_iter->active != state ) { + target_state_iter->active = state; + + // if StereoOut mode is used + if (Config->get_output_auto_connect () & AutoConnectMaster) { + + // get next element + PortStateList::iterator next_state_iter (target_state_iter); + + // loopback + if (++next_state_iter == output_states->end ()) { + next_state_iter = output_states->begin (); + } + + + // only two outputs should be enabled + if (output_states->size () <= 2) { + + target_state_iter->active = true; + next_state_iter->active = true; + + } else { + + // if current was set to active - activate next and disable the rest + if (target_state_iter->active ) { + next_state_iter->active = true; + } else { + // if current was deactivated but the next is active + if (next_state_iter->active) { + if (++next_state_iter == output_states->end ()) { + next_state_iter = output_states->begin (); + } + next_state_iter->active = true; + } else { + // if current was deactivated but the previous is active - restore the state of current + target_state_iter->active = true; // state restored; + --target_state_iter; // switch to previous to make it stop point in the next cycle + target_state_iter->active = true; + } + } + + // now deactivate the rest + while (++next_state_iter != target_state_iter) { + + if (next_state_iter == output_states->end ()) { + next_state_iter = output_states->begin (); + // we jumped, so additional check is required + if (next_state_iter == target_state_iter) { + break; + } + } + + next_state_iter->active = false; + } + + } + } + + AudioEngine::instance ()->reconnect_session_routes (false, true); + OutputConfigChanged (); + } +} + + +bool +EngineStateController::get_physical_audio_input_state (const std::string& port_name) +{ + bool state = false; + + PortStateList &input_states = _current_state->input_channel_states; + PortStateList::iterator found_state_iter; + found_state_iter = std::find (input_states.begin (), input_states.end (), PortState (port_name)); + + if (found_state_iter != input_states.end ()) { + state = found_state_iter->active; + } + + return state; +} + + +bool +EngineStateController::get_physical_audio_output_state (const std::string& port_name) +{ + bool state = false; + + PortStateList* output_states; + if (Config->get_output_auto_connect () & AutoConnectMaster) { + output_states = &_current_state->stereo_out_channel_states; + } else { + output_states = &_current_state->multi_out_channel_states; + } + + PortStateList::iterator found_state_iter; + found_state_iter = std::find (output_states->begin (), output_states->end (), PortState (port_name)); + + if (found_state_iter != output_states->end ()) { + state = found_state_iter->active; + } + + return state; +} + + +void +EngineStateController::set_physical_midi_input_state (const std::string& port_name, bool state) { + + MidiPortStateList::iterator found_state_iter; + found_state_iter = std::find (_midi_inputs.begin (), _midi_inputs.end (), MidiPortState (port_name)); + + if (found_state_iter != _midi_inputs.end () && found_state_iter->available && found_state_iter->active != state ) { + found_state_iter->active = state; + + if (_session) { + // reconnect MTC inputs as well + if (found_state_iter->mtc_in) { + _session->reconnect_mtc_ports (); + } + _session->reconnect_mmc_ports (true); + } + + MIDIInputConfigChanged (); + } +} + + +void +EngineStateController::set_physical_midi_output_state (const std::string& port_name, bool state) { + + MidiPortStateList::iterator found_state_iter; + found_state_iter = std::find (_midi_outputs.begin (), _midi_outputs.end (), MidiPortState (port_name)); + + if (found_state_iter != _midi_outputs.end () && found_state_iter->available && found_state_iter->active != state ) { + found_state_iter->active = state; + + if (_session) { + _session->reconnect_mmc_ports (false); + } + + MIDIOutputConfigChanged (); + } +} + + +bool +EngineStateController::get_physical_midi_input_state (const std::string& port_name, bool& scene_connected) { + + bool state = false; + + MidiPortStateList::iterator found_state_iter; + found_state_iter = std::find (_midi_inputs.begin (), _midi_inputs.end (), MidiPortState (port_name)); + + if (found_state_iter != _midi_inputs.end () && found_state_iter->available) { + state = found_state_iter->active; + scene_connected = found_state_iter->scene_connected; + } + + return state; +} + + +bool +EngineStateController::get_physical_midi_output_state (const std::string& port_name, bool& scene_connected) { + + bool state = false; + + MidiPortStateList::iterator found_state_iter; + found_state_iter = std::find (_midi_outputs.begin (), _midi_outputs.end (), MidiPortState (port_name)); + + if (found_state_iter != _midi_outputs.end () && found_state_iter->available) { + state = found_state_iter->active; + scene_connected = found_state_iter->scene_connected; + } + + return state; +} + + +void +EngineStateController::set_physical_midi_scene_in_connection_state (const std::string& port_name, bool state) { + + MidiPortStateList::iterator found_state_iter; + found_state_iter = std::find (_midi_inputs.begin (), _midi_inputs.end (), MidiPortState (port_name)); + + if (found_state_iter != _midi_inputs.end () && found_state_iter->available && found_state_iter->active ) { + found_state_iter->scene_connected = state; + + std::vector<std::string> ports; + ports.push_back (port_name); + MIDISceneInputConnectionChanged (ports, state); + } + +} + + +void +EngineStateController::set_physical_midi_scenen_out_connection_state (const std::string& port_name, bool state) { + + MidiPortStateList::iterator found_state_iter; + found_state_iter = std::find (_midi_outputs.begin (), _midi_outputs.end (), MidiPortState (port_name)); + + if (found_state_iter != _midi_outputs.end () && found_state_iter->available && found_state_iter->active ) { + found_state_iter->scene_connected = state; + + std::vector<std::string> ports; + ports.push_back (port_name); + MIDISceneOutputConnectionChanged (ports, state); + } + +} + + +void +EngineStateController::set_all_midi_scene_inputs_disconnected () +{ + MidiPortStateList::iterator iter = _midi_inputs.begin (); + for (; iter != _midi_inputs.end (); ++iter) { + iter->scene_connected = false; + } + + std::vector<std::string> ports; + MIDISceneInputConnectionChanged (ports, false); +} + + +void +EngineStateController::set_all_midi_scene_outputs_disconnected () +{ + MidiPortStateList::iterator iter = _midi_outputs.begin (); + for (; iter != _midi_outputs.end (); ++iter) { + iter->scene_connected = false; + } + + std::vector<std::string> ports; + MIDISceneOutputConnectionChanged (ports, false); +} + + +void +EngineStateController::set_mtc_source_port (const std::string& port_name) +{ + MidiPortStateList::iterator iter = _midi_inputs.begin (); + for (; iter != _midi_inputs.end (); ++iter) { + iter->mtc_in = false; + + if (iter->name == port_name) { + iter->mtc_in = true; + + if (_session) { + _session->reconnect_mtc_ports (); + } + } + } + + if (_session && port_name.empty ()) { + _session->reconnect_mtc_ports (); + } + + MTCInputChanged (port_name); +} + + +void +EngineStateController::set_state_to_all_inputs (bool state) +{ + bool something_changed = false; + + PortStateList::iterator iter = _current_state->input_channel_states.begin (); + for (; iter != _current_state->input_channel_states.end (); ++iter) { + if (iter->active != state) { + iter->active = state; + something_changed = true; + } + } + + if (something_changed) { + AudioEngine::instance ()->reconnect_session_routes (true, false); + InputConfigChanged (); + } +} + + +void +EngineStateController::set_state_to_all_outputs (bool state) +{ + // unapplicable in Stereo Out mode, just return + if (Config->get_output_auto_connect () & AutoConnectMaster) { + return; + } + + bool something_changed = false; + + PortStateList::iterator iter = _current_state->multi_out_channel_states.begin (); + for (; iter != _current_state->multi_out_channel_states.end (); ++iter) { + if (iter->active != state) { + iter->active = state; + something_changed = true; + } + } + + if (something_changed) { + AudioEngine::instance ()->reconnect_session_routes (false, true); + OutputConfigChanged (); + } +} + + +void +EngineStateController::get_physical_audio_input_states (std::vector<PortState>& channel_states) +{ + PortStateList &input_states = _current_state->input_channel_states; + channel_states.assign (input_states.begin (), input_states.end ()); +} + + +void +EngineStateController::get_physical_audio_output_states (std::vector<PortState>& channel_states) +{ + PortStateList* output_states; + if (Config->get_output_auto_connect () & AutoConnectMaster) { + output_states = &_current_state->stereo_out_channel_states; + } else { + output_states = &_current_state->multi_out_channel_states; + } + + channel_states.assign (output_states->begin (), output_states->end ()); +} + + +void +EngineStateController::get_physical_midi_input_states (std::vector<MidiPortState>& channel_states) +{ + channel_states.clear (); + + MidiPortStateList::iterator iter = _midi_inputs.begin (); + + for (; iter != _midi_inputs.end (); ++iter ) { + if (iter->available) { + MidiPortState state (iter->name); + state.active = iter->active; + state.available = true; + state.scene_connected = iter->scene_connected; + state.mtc_in = iter->mtc_in; + channel_states.push_back (state); + } + } +} + +void +EngineStateController::get_physical_midi_output_states (std::vector<MidiPortState>& channel_states) +{ + channel_states.clear (); + + MidiPortStateList::iterator iter = _midi_outputs.begin (); + + for (; iter != _midi_outputs.end (); ++iter ) { + if (iter->available) { + MidiPortState state (iter->name); + state.active = iter->active; + state.available = true; + state.scene_connected = iter->scene_connected; + state.mtc_in = iter->mtc_in; + channel_states.push_back (state); + } + } +} + + +void +EngineStateController::_on_session_loaded () +{ + if (!_session) { + return; + } + + AudioEngine::instance ()->reconnect_session_routes (true, true); + _session->reconnect_mtc_ports (); + _session->reconnect_mmc_ports (true); + _session->reconnect_mmc_ports (false); + + // This is done during session construction + // _session->reconnect_ltc_input (); + // _session->reconnect_ltc_output (); + + framecnt_t desired_sample_rate = _session->nominal_frame_rate (); + if ( desired_sample_rate > 0 && set_new_sample_rate_in_controller (desired_sample_rate)) + { + push_current_state_to_backend (false); + SampleRateChanged (); // emit a signal + } +} + + +void +EngineStateController::_on_sample_rate_change (framecnt_t new_sample_rate) +{ + if (_current_state->sample_rate != new_sample_rate) { + + // if sample rate has been changed + framecnt_t sample_rate_to_set = new_sample_rate; + if (AudioEngine::instance ()->session ()) { + // and we have current session we should restore it back to the one tracks uses + sample_rate_to_set = AudioEngine::instance ()->session ()->frame_rate (); + } + + if ( !set_new_sample_rate_in_controller (sample_rate_to_set)) { + // if sample rate can't be set + // switch to NONE device + set_new_device_as_current ("None"); + DeviceListChanged (false); + DeviceError (); + } + } + + SampleRateChanged (); // emit a signal +} + + +void +EngineStateController::_on_buffer_size_change (pframes_t new_buffer_size) +{ + if (_current_state->buffer_size != new_buffer_size) { + _current_state->buffer_size = new_buffer_size; + } + + BufferSizeChanged (); // emit a signal +} + + +void +EngineStateController::_on_device_list_change () +{ + bool current_device_disconnected = false; + + boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend (); + assert (backend); + + std::vector<AudioBackend::DeviceStatus> device_vector = backend->enumerate_devices (); + + // find out out if current device is still available if it's not None + if (_current_state->device_name != "None") + { + std::vector<AudioBackend::DeviceStatus>::iterator device_iter; + device_iter = std::find_if (device_vector.begin (), device_vector.end (), DevicePredicate (_current_state->device_name)); + + // if current device is not available any more - switch to None device + if (device_iter == device_vector.end ()) { + + StateList::iterator found_state_iter = find_if (_states.begin (), _states.end (), + State::StatePredicate (_current_state->backend_name, "None")); + + if (found_state_iter != _states.end ()) { + // found the record - switch to it + _current_state = *found_state_iter; + _validate_current_device_state (); + } else { + // create new record for this engine with default device + _current_state = boost::shared_ptr<State>(new State ()); + _current_state->backend_name = backend->name (); + _current_state->device_name = "None"; + _validate_current_device_state (); + _states.push_front (_current_state); + } + + push_current_state_to_backend (true); + current_device_disconnected = true; + } + } else { + // if the device which was active before is available now - switch to it + + std::vector<AudioBackend::DeviceStatus>::iterator device_iter; + device_iter = std::find_if (device_vector.begin (), device_vector.end (), DevicePredicate (_last_used_real_device)); + + if (device_iter != device_vector.end ()) { + StateList::iterator found_state_iter = find_if (_states.begin (), _states.end (), + State::StatePredicate (_current_state->backend_name, + _last_used_real_device)); + + if (found_state_iter != _states.end ()) { + + boost::shared_ptr<State> previous_state (_current_state); + _current_state = *found_state_iter; + + if (_validate_current_device_state ()) { + push_current_state_to_backend (false); + } else { + // cannot use this device right now + _last_used_real_device.clear (); + _current_state = previous_state; + } + } + } + } + + DeviceListChanged (current_device_disconnected); // emit a signal +} + + +void +EngineStateController::_update_device_channels_state () +{ + boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend (); + assert (backend); + + // update audio input states + std::vector<std::string> phys_audio_inputs; + backend->get_physical_inputs (DataType::AUDIO, phys_audio_inputs); + + PortStateList new_input_states; + PortStateList &input_states = _current_state->input_channel_states; + + std::vector<std::string>::const_iterator input_iter = phys_audio_inputs.begin (); + for (; input_iter != phys_audio_inputs.end (); ++input_iter) { + + PortState state (*input_iter); + state.active = true; + PortStateList::const_iterator found_state_iter = std::find (input_states.begin (), input_states.end (), state); + + if (found_state_iter != input_states.end ()) { + new_input_states.push_back (*found_state_iter); + } else { + new_input_states.push_back (state); + } + } + _current_state->input_channel_states = new_input_states; + + // update audio output states (multi out mode) + std::vector<std::string> phys_audio_outputs; + backend->get_physical_outputs (DataType::AUDIO, phys_audio_outputs); + + PortStateList new_output_states; + PortStateList &output_multi_states = _current_state->multi_out_channel_states; + + std::vector<std::string>::const_iterator output_iter = phys_audio_outputs.begin (); + for (; output_iter != phys_audio_outputs.end (); ++output_iter) { + + PortState state (*output_iter); + state.active = true; + PortStateList::const_iterator found_state_iter = std::find (output_multi_states.begin (), output_multi_states.end (), state); + + if (found_state_iter != output_multi_states.end ()) { + new_output_states.push_back (*found_state_iter); + } else { + new_output_states.push_back (state); + } + } + + _current_state->multi_out_channel_states = new_output_states; + + // update audio output states (stereo out mode) + new_output_states.clear (); + PortStateList &output_stereo_states = _current_state->stereo_out_channel_states; + + output_iter = phys_audio_outputs.begin (); + for (; output_iter != phys_audio_outputs.end (); ++output_iter) { + + PortState state (*output_iter); + state.active = true; + PortStateList::const_iterator found_state_iter = std::find (output_stereo_states.begin (), output_stereo_states.end (), state); + + if (found_state_iter != output_stereo_states.end ()) { + new_output_states.push_back (*found_state_iter); + } else { + new_output_states.push_back (state); + } + } + + _current_state->stereo_out_channel_states = new_output_states; + _refresh_stereo_out_channel_states (); + + + // update midi ports: unlike audio ports which states are saved per device + // each midi port state is saved individualy + // so get all midi ports from the backend + // and compare to the list of midi ports we have + // if physical port is new, add it to our state list + // if physical port is present in our state list - mark it available + // if there is no corresponding physical port to one we have in a list - leave it unavailable + MidiPortStateList::iterator iter = _midi_inputs.begin (); + for (; iter != _midi_inputs.end (); ++iter) { + iter->available = false; + } + + for (iter = _midi_outputs.begin (); iter != _midi_outputs.end (); ++iter) { + iter->available = false; + } + + // update midi input ports + std::vector<std::string> phys_midi_inputs; + backend->get_physical_inputs (DataType::MIDI, phys_midi_inputs); + + std::vector<std::string>::const_iterator midi_input_iter = phys_midi_inputs.begin (); + for (; midi_input_iter != phys_midi_inputs.end (); ++midi_input_iter) { + + MidiPortState state (*midi_input_iter); + state.active = false; + state.available = true; + MidiPortStateList::iterator found_state_iter = std::find (_midi_inputs.begin (), _midi_inputs.end (), state); + + if (found_state_iter != _midi_inputs.end ()) { + found_state_iter->available = true; + } else { + _midi_inputs.push_back (state); + } + } + + // update midi output ports + std::vector<std::string> phys_midi_outputs; + backend->get_physical_outputs (DataType::MIDI, phys_midi_outputs); + + std::vector<std::string>::const_iterator midi_output_iter = phys_midi_outputs.begin (); + for (; midi_output_iter != phys_midi_outputs.end (); ++midi_output_iter) { + + MidiPortState state (*midi_output_iter); + state.active = false; + state.available = true; + MidiPortStateList::iterator found_state_iter = std::find (_midi_outputs.begin (), _midi_outputs.end (), state); + + if (found_state_iter != _midi_outputs.end ()) { + found_state_iter->available = true; + } else { + _midi_outputs.push_back (state); + } + } +} + + +void +EngineStateController::_refresh_stereo_out_channel_states () +{ + PortStateList &output_states = _current_state->stereo_out_channel_states; + PortStateList::iterator active_iter = output_states.begin (); + + for (; active_iter != output_states.end (); ++active_iter) { + if (active_iter->active) { + break; + } + } + + uint32_t pending_active_channels = 2; + PortStateList::iterator iter = output_states.begin (); + // if found active + if (active_iter != output_states.end ()) { + iter = active_iter; + if (++iter == output_states.end ()) { + iter = output_states.begin (); + } + + (iter++)->active = true; + pending_active_channels = 0; + } + + // drop the rest of the states to false (until we reach the end or first existing active channel) + for (; iter != output_states.end () && iter != active_iter; ++iter) { + if (pending_active_channels) { + iter->active = true; + --pending_active_channels; + } else { + iter->active = false; + } + } +} + + +void +EngineStateController::_on_engine_running () +{ + AudioEngine::instance ()->reconnect_session_routes (true, true); + _current_state->active = true; + + EngineRunning (); // emit a signal +} + + +void +EngineStateController::_on_engine_stopped () +{ + EngineStopped (); +} + + +void +EngineStateController::_on_engine_halted () +{ + EngineHalted (); +} + + +void +EngineStateController::_on_device_error () +{ + set_new_device_as_current ("None"); + push_current_state_to_backend (true); + DeviceListChanged (false); + DeviceError (); +} + + +void +EngineStateController::_on_parameter_changed (const std::string& parameter_name) +{ + if (parameter_name == "output-auto-connect") { + + AudioEngine::instance ()->reconnect_session_routes (false, true); + OutputConfigChanged (); // emit a signal + OutputConnectionModeChanged (); // emit signal + } +} + + +void +EngineStateController::_on_ports_registration_update () +{ + _update_device_channels_state (); + + // update MIDI connections + if (_session) { + _session->reconnect_midi_scene_ports (true); + _session->reconnect_midi_scene_ports (false); + + _session->reconnect_mtc_ports (); + + _session->reconnect_mmc_ports (true); + _session->reconnect_mmc_ports (false); + + _session->reconnect_ltc_input (); + _session->reconnect_ltc_output (); + } + + _update_ltc_source_port (); + _update_ltc_output_port (); + + PortRegistrationChanged (); // emit a signal +} + + +bool +EngineStateController::push_current_state_to_backend (bool start) +{ + boost::shared_ptr<AudioBackend> backend = AudioEngine::instance ()->current_backend (); + + if (!backend) { + return false; + } + + // check if anything changed + bool state_changed = (_current_state->device_name != backend->device_name ()) || + (_current_state->sample_rate != backend->sample_rate ()) || + (_current_state->buffer_size != backend->buffer_size ()); + + bool was_running = AudioEngine::instance ()->running (); + + Glib::Threads::RecMutex::Lock sl (AudioEngine::instance ()->state_lock ()); + if (state_changed) { + + if (was_running) { + + if (_current_state->device_name != backend->device_name ()) { + // device has been changed + // the list of ports has been changed too + // current ltc_source_port and ltc_output_port aren't available + set_ltc_source_port (""); + set_ltc_output_port (""); + } + + if (AudioEngine::instance ()->stop ()) { + return false; + } + } + + int result = 0; + { + std::cout << "EngineStateController::Setting device: " << _current_state->device_name << std::endl; + if ((_current_state->device_name != backend->device_name ()) && (result = backend->set_device_name (_current_state->device_name))) { + error << string_compose (_("Cannot set device name to %1"), get_current_device_name ()) << endmsg; + } + + if (!result ) { + std::cout << "EngineStateController::Setting device sample rate " << _current_state->sample_rate << std::endl; + result = backend->set_sample_rate (_current_state->sample_rate); + + if (result) { + error << string_compose (_("Cannot set sample rate to %1"), get_current_sample_rate ()) << endmsg; + } + } + + if (!result ) { + std::cout << "EngineStateController::Setting device buffer size " << _current_state->buffer_size << std::endl; + result = backend->set_buffer_size (_current_state->buffer_size); + + if (result) { + error << string_compose (_("Cannot set buffer size to %1"), get_current_buffer_size ()) << endmsg; + } + } + } + + if (result) // error during device setup + { + //switch to None device and notify about the issue + set_new_device_as_current ("None"); + DeviceListChanged (false); + DeviceError (); + } + + if (AudioEngine::instance ()->backend_reset_requested ()) { + // device asked for reset, do not start engine now + // free sate lock and let Engine reset the device as it's required + return true; + } + } + + if (start || (was_running && state_changed)) { + if (AudioEngine::instance ()->start () && !AudioEngine::instance ()->is_reset_requested ()) { + //switch to None device and notify about the issue + set_new_device_as_current ("None"); + AudioEngine::instance ()->start (); + DeviceListChanged (false); + DeviceError (); + return false; + } + } + + save_audio_midi_settings (); + + return true; +} + + +std::string +EngineStateController::get_mtc_source_port () +{ + MidiPortStateList::const_iterator state_iter = _midi_inputs.begin (); + for (; state_iter != _midi_inputs.end (); ++state_iter) { + if (state_iter->available && state_iter->mtc_in) { + return (state_iter->name); + } + } + + return ""; +} + +void +EngineStateController::set_ltc_source_port (const std::string& port) +{ + Config->set_ltc_source_port (port); +} + +std::string +EngineStateController::get_ltc_source_port () +{ + return Config->get_ltc_source_port (); +} + +void +EngineStateController::set_ltc_output_port (const std::string& port) +{ + Config->set_ltc_output_port (port); +} + +std::string +EngineStateController::get_ltc_output_port () +{ + return Config->get_ltc_output_port (); +} + diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc index a1cf8d090c..8607b9f01f 100644 --- a/libs/ardour/enums.cc +++ b/libs/ardour/enums.cc @@ -96,6 +96,7 @@ setup_enum_writer () AutoState _AutoState; AutoStyle _AutoStyle; AutoConnectOption _AutoConnectOption; + TracksAutoNamingRule _TracksAutoNamingRule; Session::StateOfTheState _Session_StateOfTheState; Route::Flag _Route_Flag; Source::Flag _Source_Flag; @@ -129,6 +130,8 @@ setup_enum_writer () Session::SlaveState _Session_SlaveState; MTC_Status _MIDI_MTC_Status; Evoral::OverlapType _OverlapType; + BufferingPreset _BufferingPreset; + AutoReturnTarget _AutoReturnTarget; #define REGISTER(e) enum_writer.register_distinct (typeid(e).name(), i, s); i.clear(); s.clear() #define REGISTER_BITS(e) enum_writer.register_bits (typeid(e).name(), i, s); i.clear(); s.clear() @@ -319,6 +322,10 @@ setup_enum_writer () REGISTER_ENUM (AutoConnectMaster); REGISTER_BITS (_AutoConnectOption); + REGISTER_ENUM (UseDefaultNames); + REGISTER_ENUM (NameAfterDriver); + REGISTER_BITS (_TracksAutoNamingRule); + REGISTER_ENUM (FormatFloat); REGISTER_ENUM (FormatInt24); REGISTER_ENUM (FormatInt16); @@ -654,6 +661,18 @@ setup_enum_writer () REGISTER_ENUM (Evoral::OverlapEnd); REGISTER_ENUM (Evoral::OverlapExternal); REGISTER(_OverlapType); + + REGISTER_ENUM (Small); + REGISTER_ENUM (Medium); + REGISTER_ENUM (Large); + REGISTER_ENUM (Custom); + REGISTER(_BufferingPreset); + + REGISTER_ENUM (LastLocate); + REGISTER_ENUM (RangeSelectionStart); + REGISTER_ENUM (Loop); + REGISTER_ENUM (RegionSelectionStart); + REGISTER_BITS (_AutoReturnTarget); } } /* namespace ARDOUR */ @@ -687,6 +706,7 @@ std::ostream& operator<<(std::ostream& o, const SampleFormat& var) std::string s = enum_2_string (var); return o << s; } + std::istream& operator>>(std::istream& o, AutoConnectOption& var) { std::string s; @@ -701,6 +721,20 @@ std::ostream& operator<<(std::ostream& o, const AutoConnectOption& var) return o << s; } +std::istream& operator>>(std::istream& o, TracksAutoNamingRule& var) +{ + std::string s; + o >> s; + var = (TracksAutoNamingRule) string_2_enum (s, var); + return o; +} + +std::ostream& operator<<(std::ostream& o, const TracksAutoNamingRule& var) +{ + std::string s = enum_2_string (var); + return o << s; +} + std::istream& operator>>(std::istream& o, MonitorModel& var) { std::string s; @@ -984,3 +1018,45 @@ std::ostream& operator<<(std::ostream& o, const RegionSelectionAfterSplit& var) std::string s = enum_2_string (var); return o << s; } + +std::istream& operator>>(std::istream& o, ARDOUR::BufferingPreset& var) +{ + std::string s; + o >> s; + var = (ARDOUR::BufferingPreset) string_2_enum (s, var); + return o; +} + +std::ostream& operator<<(std::ostream& o, const ARDOUR::BufferingPreset& var) +{ + std::string s = enum_2_string (var); + return o << s; +} + +std::istream& operator>>(std::istream& o, AutoReturnTarget& var) +{ + std::string s; + o >> s; + var = (AutoReturnTarget) string_2_enum (s, var); + return o; +} + +std::ostream& operator<<(std::ostream& o, const AutoReturnTarget& var) +{ + std::string s = enum_2_string (var); + return o << s; +} + +std::istream& operator>>(std::istream& o, MeterType& var) +{ + std::string s; + o >> s; + var = (MeterType) string_2_enum (s, var); + return o; +} + +std::ostream& operator<<(std::ostream& o, const MeterType& var) +{ + std::string s = enum_2_string (var); + return o << s; +} diff --git a/libs/ardour/export_format_specification.cc b/libs/ardour/export_format_specification.cc index 32d16c9dee..5bc10e813c 100644 --- a/libs/ardour/export_format_specification.cc +++ b/libs/ardour/export_format_specification.cc @@ -591,6 +591,9 @@ ExportFormatSpecification::description (bool include_name) case SR_96: components.push_back ("96 kHz"); break; + case SR_176_4: + components.push_back ("176.4 kHz"); + break; case SR_192: components.push_back ("192 kHz"); break; diff --git a/libs/ardour/export_graph_builder.cc b/libs/ardour/export_graph_builder.cc index 5e8c052b63..be183c7270 100644 --- a/libs/ardour/export_graph_builder.cc +++ b/libs/ardour/export_graph_builder.cc @@ -1,20 +1,20 @@ /* - Copyright (C) 2008-2012 Paul Davis - Author: Sakari Bergen + Copyright (C) 2008-2012 Paul Davis + Author: Sakari Bergen - 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 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. + 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. + 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. */ @@ -53,8 +53,8 @@ using std::string; namespace ARDOUR { ExportGraphBuilder::ExportGraphBuilder (Session const & session) - : session (session) - , thread_pool (hardware_concurrency()) + : session (session) + , thread_pool (hardware_concurrency()) { process_buffer_frames = session.engine().samples_per_cycle(); } @@ -113,6 +113,17 @@ ExportGraphBuilder::reset () } void +ExportGraphBuilder::cleanup (bool remove_out_files/*=false*/) +{ + ChannelConfigList::iterator iter = channel_configs.begin(); + + while (iter != channel_configs.end() ) { + iter->remove_children(remove_out_files); + iter = channel_configs.erase(iter); + } +} + +void ExportGraphBuilder::set_current_timespan (boost::shared_ptr<ExportTimespan> span) { timespan = span; @@ -175,7 +186,7 @@ ExportGraphBuilder::add_split_config (FileSpec const & config) // No duplicate channel config found, create new one channel_configs.push_back (new ChannelConfig (*this, config, channels)); } - + /* Encoder */ template <> @@ -210,6 +221,33 @@ ExportGraphBuilder::Encoder::add_child (FileSpec const & new_config) { filenames.push_back (new_config.filename); } + +void +ExportGraphBuilder::Encoder::destroy_writer (bool delete_out_file) +{ + if (delete_out_file ) { + + if (float_writer) { + float_writer->close (); + } + + if (int_writer) { + int_writer->close (); + } + + if (short_writer) { + short_writer->close (); + } + + if (std::remove(writer_filename.c_str() ) != 0) { + std::cout << "Encoder::destroy_writer () : Error removing file: " << strerror(errno) << std::endl; + } + } + + float_writer.reset (); + int_writer.reset (); + short_writer.reset (); +} bool ExportGraphBuilder::Encoder::operator== (FileSpec const & other_config) const @@ -231,9 +269,9 @@ ExportGraphBuilder::Encoder::init_writer (boost::shared_ptr<AudioGrapher::Sndfil unsigned channels = config.channel_config->get_n_chans(); int format = get_real_format (config); config.filename->set_channel_config(config.channel_config); - string filename = config.filename->get_path (config.format); + writer_filename = config.filename->get_path (config.format); - writer.reset (new AudioGrapher::SndfileWriter<T> (filename, format, channels, config.format->sample_rate(), config.broadcast_info)); + writer.reset (new AudioGrapher::SndfileWriter<T> (writer_filename, format, channels, config.format->sample_rate(), config.broadcast_info)); writer->FileWritten.connect_same_thread (copy_files_connection, boost::bind (&ExportGraphBuilder::Encoder::copy_files, this, _1)); } @@ -250,7 +288,7 @@ ExportGraphBuilder::Encoder::copy_files (std::string orig_path) /* SFC */ ExportGraphBuilder::SFC::SFC (ExportGraphBuilder &, FileSpec const & new_config, framecnt_t max_frames) - : data_width(0) + : data_width(0) { config = new_config; data_width = sndfile_data_width (Encoder::get_real_format (config)); @@ -306,6 +344,20 @@ ExportGraphBuilder::SFC::add_child (FileSpec const & new_config) } } +void +ExportGraphBuilder::SFC::remove_children (bool remove_out_files) +{ + boost::ptr_list<Encoder>::iterator iter = children.begin (); + + while (iter != children.end() ) { + + if (remove_out_files) { + iter->destroy_writer(remove_out_files); + } + iter = children.erase (iter); + } +} + bool ExportGraphBuilder::SFC::operator== (FileSpec const & other_config) const { @@ -315,7 +367,7 @@ ExportGraphBuilder::SFC::operator== (FileSpec const & other_config) const /* Normalizer */ ExportGraphBuilder::Normalizer::Normalizer (ExportGraphBuilder & parent, FileSpec const & new_config, framecnt_t /*max_frames*/) - : parent (parent) + : parent (parent) { std::string tmpfile_path = parent.session.session_directory().export_path(); tmpfile_path = Glib::build_filename(tmpfile_path, "XXXXXX"); @@ -365,11 +417,22 @@ ExportGraphBuilder::Normalizer::add_child (FileSpec const & new_config) threader->add_output (children.back().sink()); } +void +ExportGraphBuilder::Normalizer::remove_children (bool remove_out_files) +{ + boost::ptr_list<SFC>::iterator iter = children.begin (); + + while (iter != children.end() ) { + iter->remove_children (remove_out_files); + iter = children.erase (iter); + } +} + bool ExportGraphBuilder::Normalizer::operator== (FileSpec const & other_config) const { return config.format->normalize() == other_config.format->normalize() && - config.format->normalize_target() == other_config.format->normalize_target(); + config.format->normalize_target() == other_config.format->normalize_target(); } unsigned @@ -398,7 +461,7 @@ ExportGraphBuilder::Normalizer::start_post_processing() /* SRC */ ExportGraphBuilder::SRC::SRC (ExportGraphBuilder & parent, FileSpec const & new_config, framecnt_t max_frames) - : parent (parent) + : parent (parent) { config = new_config; converter.reset (new SampleRateConverter (new_config.channel_config->get_n_chans())); @@ -424,6 +487,27 @@ ExportGraphBuilder::SRC::add_child (FileSpec const & new_config) add_child_to_list (new_config, children); } } + +void +ExportGraphBuilder::SRC::remove_children (bool remove_out_files) +{ + boost::ptr_list<SFC>::iterator sfc_iter = children.begin(); + + while (sfc_iter != children.end() ) { + converter->remove_output (sfc_iter->sink() ); + sfc_iter->remove_children (remove_out_files); + sfc_iter = children.erase (sfc_iter); + } + + boost::ptr_list<Normalizer>::iterator norm_iter = normalized_children.begin(); + + while (norm_iter != normalized_children.end() ) { + converter->remove_output (norm_iter->sink() ); + norm_iter->remove_children (remove_out_files); + norm_iter = normalized_children.erase (norm_iter); + } + +} template<typename T> void @@ -448,7 +532,7 @@ ExportGraphBuilder::SRC::operator== (FileSpec const & other_config) const /* SilenceHandler */ ExportGraphBuilder::SilenceHandler::SilenceHandler (ExportGraphBuilder & parent, FileSpec const & new_config, framecnt_t max_frames) - : parent (parent) + : parent (parent) { config = new_config; max_frames_in = max_frames; @@ -486,6 +570,18 @@ ExportGraphBuilder::SilenceHandler::add_child (FileSpec const & new_config) children.push_back (new SRC (parent, new_config, max_frames_in)); silence_trimmer->add_output (children.back().sink()); } + +void +ExportGraphBuilder::SilenceHandler::remove_children (bool remove_out_files) +{ + boost::ptr_list<SRC>::iterator iter = children.begin(); + + while (iter != children.end() ) { + silence_trimmer->remove_output (iter->sink() ); + iter->remove_children (remove_out_files); + iter = children.erase (iter); + } +} bool ExportGraphBuilder::SilenceHandler::operator== (FileSpec const & other_config) const @@ -493,15 +589,15 @@ ExportGraphBuilder::SilenceHandler::operator== (FileSpec const & other_config) c ExportFormatSpecification & format = *config.format; ExportFormatSpecification & other_format = *other_config.format; return (format.trim_beginning() == other_format.trim_beginning()) && - (format.trim_end() == other_format.trim_end()) && - (format.silence_beginning_time() == other_format.silence_beginning_time()) && - (format.silence_end_time() == other_format.silence_end_time()); + (format.trim_end() == other_format.trim_end()) && + (format.silence_beginning_time() == other_format.silence_beginning_time()) && + (format.silence_end_time() == other_format.silence_end_time()); } /* ChannelConfig */ ExportGraphBuilder::ChannelConfig::ChannelConfig (ExportGraphBuilder & parent, FileSpec const & new_config, ChannelMap & channel_map) - : parent (parent) + : parent (parent) { typedef ExportChannelConfiguration::ChannelList ChannelList; @@ -551,6 +647,19 @@ ExportGraphBuilder::ChannelConfig::add_child (FileSpec const & new_config) children.push_back (new SilenceHandler (parent, new_config, max_frames_out)); chunker->add_output (children.back().sink ()); } + +void +ExportGraphBuilder::ChannelConfig::remove_children (bool remove_out_files) +{ + boost::ptr_list<SilenceHandler>::iterator iter = children.begin(); + + while(iter != children.end() ) { + + chunker->remove_output (iter->sink ()); + iter->remove_children (remove_out_files); + iter = children.erase(iter); + } +} bool ExportGraphBuilder::ChannelConfig::operator== (FileSpec const & other_config) const diff --git a/libs/ardour/export_handler.cc b/libs/ardour/export_handler.cc index 62cb96f0fa..46cd247d20 100644 --- a/libs/ardour/export_handler.cc +++ b/libs/ardour/export_handler.cc @@ -118,7 +118,7 @@ ExportHandler::ExportHandler (Session & session) ExportHandler::~ExportHandler () { - // TODO remove files that were written but not finished + graph_builder->cleanup (export_status->aborted () ); } /** Add an export to the `to-do' list */ @@ -542,7 +542,7 @@ ExportHandler::write_cue_header (CDMarkerStatus & status) status.out << "REM Cue file generated by " << PROGRAM_NAME << endl; if (barcode != "") - status.out << "CATALOG \"" << barcode << "\"" << endl; + status.out << "CATALOG " << barcode << endl; if (album_artist != "") status.out << "PERFORMER " << cue_escape_cdtext (album_artist) << endl; diff --git a/libs/ardour/export_profile_manager.cc b/libs/ardour/export_profile_manager.cc index c2d6cb087a..84072284f7 100644 --- a/libs/ardour/export_profile_manager.cc +++ b/libs/ardour/export_profile_manager.cc @@ -43,6 +43,7 @@ #include "ardour/export_failed.h" #include "ardour/directory_names.h" #include "ardour/filename_extensions.h" +#include "ardour/profile.h" #include "ardour/route.h" #include "ardour/session.h" #include "ardour/broadcast_info.h" @@ -392,7 +393,14 @@ ExportProfileManager::init_timespans (XMLNodeList nodes) timespans.push_back (state); // Add session as default selection - Location * session_range = session.locations()->session_range_location(); + Location * session_range; + + if (Profile->get_trx()) { + session_range = (session.get_play_loop () ? session.locations()->auto_loop_location () : session.locations()->session_range_location()); + } else { + session_range = session.locations()->session_range_location(); + } + if (!session_range) { return false; } ExportTimespanPtr timespan = handler->add_timespan(); @@ -477,7 +485,8 @@ ExportProfileManager::update_ranges () { /* Session */ - Location * session_range = session.locations()->session_range_location(); + Location * session_range = (session.get_play_loop () ? session.locations()->auto_loop_location () : + session.locations()->session_range_location()); if (session_range) { ranges->push_back (session_range); } diff --git a/libs/ardour/filesystem_paths.cc b/libs/ardour/filesystem_paths.cc index 231bc84a3c..4dfac59bc3 100644 --- a/libs/ardour/filesystem_paths.cc +++ b/libs/ardour/filesystem_paths.cc @@ -49,13 +49,28 @@ user_config_directory_name (int version = -1) version = atoi (X_(PROGRAM_VERSION)); } + /* ARDOUR::Profile may not be available when this is + called, so rely on build-time detection of the + product name etc. + */ + +#ifdef USE_TRACKS_CODE_FEATURES + /* Tracks does not use versioned configuration folders, which may or + may not be problematic in the future. + */ + return X_(PROGRAM_NAME); + +#else const string config_dir_name = string_compose ("%1%2", X_(PROGRAM_NAME), version); #if defined (__APPLE__) || defined (PLATFORM_WINDOWS) + /* Use mixed-case folder name on OS X and Windows */ return config_dir_name; #else + /* use lower case folder name on Linux */ return downcase (config_dir_name); #endif +#endif } std::string diff --git a/libs/ardour/filter.cc b/libs/ardour/filter.cc index d782db96f2..382e6d9d86 100644 --- a/libs/ardour/filter.cc +++ b/libs/ardour/filter.cc @@ -39,7 +39,7 @@ using namespace ARDOUR; using namespace PBD; int -Filter::make_new_sources (boost::shared_ptr<Region> region, SourceList& nsrcs, string suffix) +Filter::make_new_sources (boost::shared_ptr<Region> region, SourceList& nsrcs, std::string suffix, bool use_session_sample_rate) { vector<string> names = region->master_source_names(); assert (region->n_channels() <= names.size()); @@ -70,11 +70,24 @@ Filter::make_new_sources (boost::shared_ptr<Region> region, SourceList& nsrcs, s } try { + framecnt_t sample_rate; + if (use_session_sample_rate) { + sample_rate = session.frame_rate(); + } else { + boost::shared_ptr<AudioRegion> aregion = boost::dynamic_pointer_cast<AudioRegion>(region); + + if (aregion) { + sample_rate = aregion->audio_source()->sample_rate(); + } else { + return -1; + } + } + nsrcs.push_back (boost::dynamic_pointer_cast<Source> ( - SourceFactory::createWritable (region->data_type(), session, - path, false, session.frame_rate()))); + SourceFactory::createWritable (region->data_type(), session, + path, false, sample_rate))); } - + catch (failed_constructor& err) { error << string_compose (_("filter: error creating new file %1 (%2)"), path, strerror (errno)) << endmsg; return -1; diff --git a/libs/ardour/find_session.cc b/libs/ardour/find_session.cc index 501927c42c..67aa43d071 100644 --- a/libs/ardour/find_session.cc +++ b/libs/ardour/find_session.cc @@ -117,7 +117,10 @@ find_session (string str, string& path, string& snapshot, bool& isnew) suffix = snapshot.find (statefile_suffix); - if (suffix == string::npos) { + const string::size_type start_pos_of_extension = snapshot.size () - strlen (statefile_suffix); + // we should check the start of extension position + // because files '*.ardour.bak' are possible + if (suffix != start_pos_of_extension) { error << string_compose (_("%1 is not a snapshot file"), str) << endmsg; return -1; } diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc index 288e69dc9e..fa6f833d94 100644 --- a/libs/ardour/globals.cc +++ b/libs/ardour/globals.cc @@ -131,6 +131,7 @@ find_peaks_t ARDOUR::find_peaks = 0; apply_gain_to_buffer_t ARDOUR::apply_gain_to_buffer = 0; mix_buffers_with_gain_t ARDOUR::mix_buffers_with_gain = 0; mix_buffers_no_gain_t ARDOUR::mix_buffers_no_gain = 0; +copy_vector_t ARDOUR::copy_vector = 0; PBD::Signal1<void,std::string> ARDOUR::BootMessage; PBD::Signal3<void,std::string,std::string,bool> ARDOUR::PluginScanMessage; @@ -160,7 +161,21 @@ setup_hardware_optimization (bool try_optimization) #if defined (ARCH_X86) && defined (BUILD_SSE_OPTIMIZATIONS) - if (fpu.has_sse()) { + if (fpu.has_avx()) { + + info << "Using AVX optimized routines" << endmsg; + + // AVX SET + compute_peak = x86_sse_avx_compute_peak; + find_peaks = x86_sse_avx_find_peaks; + apply_gain_to_buffer = x86_sse_avx_apply_gain_to_buffer; + mix_buffers_with_gain = x86_sse_avx_mix_buffers_with_gain; + mix_buffers_no_gain = x86_sse_avx_mix_buffers_no_gain; + copy_vector = x86_sse_avx_copy_vector; + + generic_mix_functions = false; + + } else if (fpu.has_sse()) { info << "Using SSE optimized routines" << endmsg; @@ -170,6 +185,7 @@ setup_hardware_optimization (bool try_optimization) apply_gain_to_buffer = x86_sse_apply_gain_to_buffer; mix_buffers_with_gain = x86_sse_mix_buffers_with_gain; mix_buffers_no_gain = x86_sse_mix_buffers_no_gain; + copy_vector = default_copy_vector; generic_mix_functions = false; @@ -187,6 +203,7 @@ setup_hardware_optimization (bool try_optimization) apply_gain_to_buffer = veclib_apply_gain_to_buffer; mix_buffers_with_gain = veclib_mix_buffers_with_gain; mix_buffers_no_gain = veclib_mix_buffers_no_gain; + copy_vector = default_copy_vector; generic_mix_functions = false; @@ -206,6 +223,7 @@ setup_hardware_optimization (bool try_optimization) apply_gain_to_buffer = default_apply_gain_to_buffer; mix_buffers_with_gain = default_mix_buffers_with_gain; mix_buffers_no_gain = default_mix_buffers_no_gain; + copy_vector = default_copy_vector; info << "No H/W specific optimizations in use" << endmsg; } diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc index 69f7c9053e..6d1a181ee6 100644 --- a/libs/ardour/io.cc +++ b/libs/ardour/io.cc @@ -39,6 +39,7 @@ #include "ardour/debug.h" #include "ardour/io.h" #include "ardour/port.h" +#include "ardour/profile.h" #include "ardour/route.h" #include "ardour/session.h" #include "ardour/user_bundle.h" @@ -692,13 +693,16 @@ IO::set_state_2X (const XMLNode& node, int version, bool in) int IO::connecting_became_legal () { - int ret; + int ret = 0; assert (pending_state_node); connection_legal_c.disconnect (); - ret = make_connections (*pending_state_node, pending_state_node_version, pending_state_node_in); + // it's not required for TracksLive, as long as TracksLive's session does all the connections when it's being loaded + if (!Profile->get_trx() ) { + ret = make_connections (*pending_state_node, pending_state_node_version, pending_state_node_in); + } delete pending_state_node; pending_state_node = 0; diff --git a/libs/ardour/location.cc b/libs/ardour/location.cc index 2c19ebd1e0..c693e1f5d5 100644 --- a/libs/ardour/location.cc +++ b/libs/ardour/location.cc @@ -72,6 +72,7 @@ Location::Location (Session& s, framepos_t sample_start, framepos_t sample_end, , _flags (bits) , _locked (false) , _position_lock_style (s.config.get_glue_new_markers_to_bars_and_beats() ? MusicTime : AudioTime) + { recompute_bbt_from_frames (); @@ -89,6 +90,7 @@ Location::Location (const Location& other) , _bbt_end (other._bbt_end) , _flags (other._flags) , _position_lock_style (other._position_lock_style) + { /* copy is not locked even if original was */ @@ -166,10 +168,10 @@ Location::operator= (const Location& other) void Location::set_name (const std::string& str) { - _name = str; + _name = str; - name_changed (this); /* EMIT SIGNAL */ - NameChanged (); /* EMIT SIGNAL */ + name_changed (this); /* EMIT SIGNAL */ + NameChanged (); /* EMIT SIGNAL */ } /** Set start position. @@ -221,11 +223,11 @@ Location::set_start (framepos_t s, bool force, bool allow_bbt_recompute) return 0; } else if (!force) { - /* range locations must exceed a minimum duration */ - if (_end - s < Config->get_range_location_minimum()) { - return -1; - } - } + /* range locations must exceed a minimum duration */ + if (_end - s < Config->get_range_location_minimum()) { + return -1; + } + } if (s != _start) { @@ -288,11 +290,11 @@ Location::set_end (framepos_t e, bool force, bool allow_bbt_recompute) assert (_end >= 0); return 0; - } else if (!force) { - /* range locations must exceed a minimum duration */ - if (e - _start < Config->get_range_location_minimum()) { - return -1; - } + } else if (!force) { + /* range locations must exceed a minimum duration */ + if (e - _start < Config->get_range_location_minimum()) { + return -1; + } } if (e != _end) { @@ -329,8 +331,8 @@ Location::set (framepos_t s, framepos_t e, bool allow_bbt_recompute) return -1; } - bool start_change = false; - bool end_change = false; + bool start_change = false; + bool end_change = false; if (is_mark()) { @@ -342,8 +344,8 @@ Location::set (framepos_t s, framepos_t e, bool allow_bbt_recompute) recompute_bbt_from_frames (); } - start_change = true; - end_change = true; + start_change = true; + end_change = true; } assert (_start >= 0); @@ -351,64 +353,64 @@ Location::set (framepos_t s, framepos_t e, bool allow_bbt_recompute) } else { - /* range locations must exceed a minimum duration */ - if (e - s < Config->get_range_location_minimum()) { - return -1; - } + /* range locations must exceed a minimum duration */ + if (e - s < Config->get_range_location_minimum()) { + return -1; + } - if (s != _start) { + if (s != _start) { - framepos_t const old = _start; - _start = s; + framepos_t const old = _start; + _start = s; - if (allow_bbt_recompute) { - recompute_bbt_from_frames (); - } + if (allow_bbt_recompute) { + recompute_bbt_from_frames (); + } - start_change = true; + start_change = true; - if (is_session_range ()) { - Session::StartTimeChanged (old); /* EMIT SIGNAL */ - AudioFileSource::set_header_position_offset (s); - } - } + if (is_session_range ()) { + Session::StartTimeChanged (old); /* EMIT SIGNAL */ + AudioFileSource::set_header_position_offset (s); + } + } - if (e != _end) { + if (e != _end) { - framepos_t const old = _end; - _end = e; + framepos_t const old = _end; + _end = e; - if (allow_bbt_recompute) { - recompute_bbt_from_frames (); - } + if (allow_bbt_recompute) { + recompute_bbt_from_frames (); + } - end_change = true; + end_change = true; - if (is_session_range()) { - Session::EndTimeChanged (old); /* EMIT SIGNAL */ - } - } + if (is_session_range()) { + Session::EndTimeChanged (old); /* EMIT SIGNAL */ + } + } - assert (_end >= 0); - } + assert (_end >= 0); + } - if (start_change) { - start_changed(this); /* EMIT SIGNAL */ - StartChanged(); /* EMIT SIGNAL */ - } + if (start_change) { + start_changed(this); /* EMIT SIGNAL */ + StartChanged(); /* EMIT SIGNAL */ + } - if (end_change) { - end_changed(this); /* EMIT SIGNAL */ - EndChanged(); /* EMIT SIGNAL */ - } + if (end_change) { + end_changed(this); /* EMIT SIGNAL */ + EndChanged(); /* EMIT SIGNAL */ + } - if (start_change && end_change) { - changed (this); - Changed (); - } + if (start_change && end_change) { + changed (this); + Changed (); + } - return 0; + return 0; } int @@ -441,8 +443,8 @@ void Location::set_hidden (bool yn, void*) { if (set_flag_internal (yn, IsHidden)) { - flags_changed (this); /* EMIT SIGNAL */ - FlagsChanged (); + flags_changed (this); /* EMIT SIGNAL */ + FlagsChanged (); } } @@ -458,40 +460,40 @@ Location::set_cd (bool yn, void*) } if (set_flag_internal (yn, IsCDMarker)) { - flags_changed (this); /* EMIT SIGNAL */ - FlagsChanged (); + flags_changed (this); /* EMIT SIGNAL */ + FlagsChanged (); } } void Location::set_is_range_marker (bool yn, void*) { - if (set_flag_internal (yn, IsRangeMarker)) { - flags_changed (this); - FlagsChanged (); /* EMIT SIGNAL */ - } + if (set_flag_internal (yn, IsRangeMarker)) { + flags_changed (this); + FlagsChanged (); /* EMIT SIGNAL */ + } } void Location::set_skip (bool yn) { - if (is_range_marker() && length() > 0) { - if (set_flag_internal (yn, IsSkip)) { - flags_changed (this); - FlagsChanged (); - } - } + if (is_range_marker() && length() > 0) { + if (set_flag_internal (yn, IsSkip)) { + flags_changed (this); + FlagsChanged (); + } + } } void Location::set_skipping (bool yn) { - if (is_range_marker() && is_skip() && length() > 0) { - if (set_flag_internal (yn, IsSkipping)) { - flags_changed (this); - FlagsChanged (); - } - } + if (is_range_marker() && is_skip() && length() > 0) { + if (set_flag_internal (yn, IsSkipping)) { + flags_changed (this); + FlagsChanged (); + } + } } void @@ -502,8 +504,8 @@ Location::set_auto_punch (bool yn, void*) } if (set_flag_internal (yn, IsAutoPunch)) { - flags_changed (this); /* EMIT SIGNAL */ - FlagsChanged (); /* EMIT SIGNAL */ + flags_changed (this); /* EMIT SIGNAL */ + FlagsChanged (); /* EMIT SIGNAL */ } } @@ -515,8 +517,8 @@ Location::set_auto_loop (bool yn, void*) } if (set_flag_internal (yn, IsAutoLoop)) { - flags_changed (this); /* EMIT SIGNAL */ - FlagsChanged (); /* EMIT SIGNAL */ + flags_changed (this); /* EMIT SIGNAL */ + FlagsChanged (); /* EMIT SIGNAL */ } } @@ -625,26 +627,31 @@ Location::set_state (const XMLNode& node, int version) return -1; } - /* can't use set_start() here, because _end - may make the value of _start illegal. - */ + /* can't use set_start() here, because _end + may make the value of _start illegal. + */ sscanf (prop->value().c_str(), "%" PRId64, &_start); if ((prop = node.property ("end")) == 0) { - error << _("XML node for Location has no end information") << endmsg; - return -1; + error << _("XML node for Location has no end information") << endmsg; + return -1; } sscanf (prop->value().c_str(), "%" PRId64, &_end); if ((prop = node.property ("flags")) == 0) { - error << _("XML node for Location has no flags information") << endmsg; - return -1; + error << _("XML node for Location has no flags information") << endmsg; + return -1; } + Flags old_flags (_flags); _flags = Flags (string_2_enum (prop->value(), _flags)); + if (old_flags != _flags) { + FlagsChanged (); + } + if ((prop = node.property ("locked")) != 0) { _locked = string_is_affirmative (prop->value()); } else { @@ -653,26 +660,26 @@ Location::set_state (const XMLNode& node, int version) for (cd_iter = cd_list.begin(); cd_iter != cd_list.end(); ++cd_iter) { - cd_node = *cd_iter; + cd_node = *cd_iter; - if (cd_node->name() != "CD-Info") { - continue; - } + if (cd_node->name() != "CD-Info") { + continue; + } - if ((prop = cd_node->property ("name")) != 0) { - cd_name = prop->value(); - } else { - throw failed_constructor (); - } + if ((prop = cd_node->property ("name")) != 0) { + cd_name = prop->value(); + } else { + throw failed_constructor (); + } - if ((prop = cd_node->property ("value")) != 0) { - cd_value = prop->value(); - } else { - throw failed_constructor (); - } + if ((prop = cd_node->property ("value")) != 0) { + cd_value = prop->value(); + } else { + throw failed_constructor (); + } - cd_info[cd_name] = cd_value; + cd_info[cd_name] = cd_value; } if ((prop = node.property ("position-lock-style")) != 0) { @@ -752,9 +759,13 @@ Location::unlock () void Location::set_scene_change (boost::shared_ptr<SceneChange> sc) { - _scene_change = sc; - - scene_changed (); /* EMIT SIGNAL */ + if (_scene_change != sc) { + _scene_change = sc; + _session.set_dirty (); + + scene_changed (); /* EMIT SIGNAL */ + SceneChangeChanged (); /* EMIT SIGNAL */ + } } /*---------------------------------------------------------------------- */ @@ -788,7 +799,7 @@ Locations::set_current (Location *loc, bool want_lock) } if (ret == 0) { - current_changed (current_location); /* EMIT SIGNAL */ + current_changed (current_location); /* EMIT SIGNAL */ } return ret; } @@ -800,51 +811,55 @@ Locations::next_available_name(string& result,string base) string::size_type l; int suffix; char buf[32]; - std::map<uint32_t,bool> taken; - uint32_t n; + std::map<uint32_t,bool> taken; + uint32_t n; result = base; - l = base.length(); + l = base.length(); - if (!base.empty()) { + if (!base.empty()) { - /* find all existing names that match "base", and store - the numeric part of them (if any) in the map "taken" - */ + /* find all existing names that match "base", and store + the numeric part of them (if any) in the map "taken" + */ - for (i = locations.begin(); i != locations.end(); ++i) { + for (i = locations.begin(); i != locations.end(); ++i) { - const string& temp ((*i)->name()); + const string& temp ((*i)->name()); - if (!temp.find (base,0)) { + if (!temp.find (base,0)) { + /* grab what comes after the "base" as if it was + a number, and assuming that works OK, + store it in "taken" so that we know it + has been used. + */ + if ((suffix = atoi (temp.substr(l))) != 0) { + taken.insert (make_pair (suffix,true)); + } + } + } + } - if ((suffix = atoi (temp.substr(l,3))) != 0) { - taken.insert (make_pair (suffix,true)); - } - } - } - } + /* Now search for an un-used suffix to add to "base". This + will find "holes" in the numbering sequence when a location + was deleted. - /* Now search for an un-used suffix to add to "base". This - will find "holes" in the numbering sequence when a location - was deleted. - - This must start at 1, both for human-numbering reasons - and also because the call to atoi() above would return - zero if there is no recognizable numeric suffix, causing - "base 0" not to be inserted into the "taken" map. - */ - - n = 1; - - while (n < UINT32_MAX) { - if (taken.find (n) == taken.end()) { - snprintf (buf, sizeof(buf), "%d", n); - result += buf; - return 1; - } - ++n; - } + This must start at 1, both for human-numbering reasons + and also because the call to atoi() above would return + zero if there is no recognizable numeric suffix, causing + "base 0" not to be inserted into the "taken" map. + */ + + n = 1; + + while (n < UINT32_MAX) { + if (taken.find (n) == taken.end()) { + snprintf (buf, sizeof(buf), "%d", n); + result += buf; + return 1; + } + ++n; + } return 0; } @@ -945,7 +960,7 @@ Locations::clear_ranges () current_location = 0; } - changed (); + changed (); current_changed (0); /* EMIT SIGNAL */ } @@ -966,7 +981,7 @@ Locations::add (Location *loc, bool make_current) added (loc); /* EMIT SIGNAL */ if (make_current) { - current_changed (current_location); /* EMIT SIGNAL */ + current_changed (current_location); /* EMIT SIGNAL */ } if (loc->is_session_range()) { @@ -1008,7 +1023,7 @@ Locations::remove (Location *loc) removed (loc); /* EMIT SIGNAL */ if (was_current) { - current_changed (0); /* EMIT SIGNAL */ + current_changed (0); /* EMIT SIGNAL */ } } } @@ -1069,6 +1084,8 @@ Locations::set_state (const XMLNode& node, int version) if (i != locations.end()) { /* we can re-use an old Location object */ loc = *i; + + // changed locations will be updated by Locations::changed signal loc->set_state (**niter, version); } else { loc = new Location (_session, **niter); @@ -1156,16 +1173,16 @@ typedef std::pair<framepos_t,Location*> LocationPair; struct LocationStartEarlierComparison { - bool operator() (LocationPair a, LocationPair b) { - return a.first < b.first; - } + bool operator() (LocationPair a, LocationPair b) { + return a.first < b.first; + } }; struct LocationStartLaterComparison { - bool operator() (LocationPair a, LocationPair b) { - return a.first > b.first; - } + bool operator() (LocationPair a, LocationPair b) { + return a.first > b.first; + } }; framepos_t @@ -1374,7 +1391,7 @@ Locations::auto_punch_location () const return const_cast<Location*> (*i); } } - return 0; + return 0; } uint32_t @@ -1393,12 +1410,12 @@ Locations::num_range_markers () const Location * Locations::get_location_by_id(PBD::ID id) { - LocationList::iterator it; - for (it = locations.begin(); it != locations.end(); ++it) - if (id == (*it)->id()) - return *it; + LocationList::iterator it; + for (it = locations.begin(); it != locations.end(); ++it) + if (id == (*it)->id()) + return *it; - return 0; + return 0; } void diff --git a/libs/ardour/ltc_slave.cc b/libs/ardour/ltc_slave.cc index c5840f68d4..621984702d 100644 --- a/libs/ardour/ltc_slave.cc +++ b/libs/ardour/ltc_slave.cc @@ -26,6 +26,7 @@ #include "pbd/pthread_utils.h" #include "ardour/debug.h" +#include "ardour/profile.h" #include "ardour/slave.h" #include "ardour/session.h" #include "ardour/audioengine.h" @@ -151,6 +152,8 @@ LTC_Slave::reset() ltc_speed = 0; engine_dll_initstate = 0; sync_lock_broken = false; + + ActiveChanged (false); /* EMIT SIGNAL */ } void @@ -443,8 +446,10 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos) if (last_timestamp == 0) { engine_dll_initstate = 0; if (delayedlocked < 10) ++delayedlocked; - } - else if (engine_dll_initstate != transport_direction && ltc_speed != 0) { + } else if (engine_dll_initstate != transport_direction && ltc_speed != 0) { + + ActiveChanged (true); /* EMIT SIGNAL */ + engine_dll_initstate = transport_direction; init_engine_dll(last_ltc_frame + rint(ltc_speed * double(2 * nframes + now - last_timestamp)), session.engine().samples_per_cycle()); @@ -488,6 +493,7 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos) reset(); speed = 0; pos = session.transport_frame(); + ActiveChanged (false); /* EMIT SIGNAL */ return true; } @@ -556,7 +562,7 @@ LTC_Slave::speed_and_position (double& speed, framepos_t& pos) speed = 1.0; } - if (speed != 0 && delayedlocked == 0 && fabsf(speed) != 1.0) { + if (speed != 0 && delayedlocked == 0 && fabs(speed) != 1.0) { sync_lock_broken = true; DEBUG_TRACE (DEBUG::LTC, string_compose ("LTC speed not locked %1 %2\n", speed, ltc_speed)); } diff --git a/libs/ardour/macosx/libardour.xcodeproj/project.pbxproj b/libs/ardour/macosx/libardour.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..c31e8b0735 --- /dev/null +++ b/libs/ardour/macosx/libardour.xcodeproj/project.pbxproj @@ -0,0 +1,3464 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 432653E6194EF73C00BEFB46 /* amp.h in Headers */ = {isa = PBXBuildFile; fileRef = 432652FC194EF73C00BEFB46 /* amp.h */; }; + 432653E7194EF73C00BEFB46 /* analyser.h in Headers */ = {isa = PBXBuildFile; fileRef = 432652FD194EF73C00BEFB46 /* analyser.h */; }; + 432653E8194EF73C00BEFB46 /* ardour.h in Headers */ = {isa = PBXBuildFile; fileRef = 432652FE194EF73C00BEFB46 /* ardour.h */; }; + 432653E9194EF73C00BEFB46 /* async_midi_port.h in Headers */ = {isa = PBXBuildFile; fileRef = 432652FF194EF73C00BEFB46 /* async_midi_port.h */; }; + 432653EA194EF73C00BEFB46 /* audio_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265300194EF73C00BEFB46 /* audio_backend.h */; }; + 432653EB194EF73C00BEFB46 /* audio_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265301194EF73C00BEFB46 /* audio_buffer.h */; }; + 432653EC194EF73C00BEFB46 /* audio_diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265302194EF73C00BEFB46 /* audio_diskstream.h */; }; + 432653ED194EF73C00BEFB46 /* audio_library.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265303194EF73C00BEFB46 /* audio_library.h */; }; + 432653EE194EF73C00BEFB46 /* audio_playlist_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265304194EF73C00BEFB46 /* audio_playlist_importer.h */; }; + 432653EF194EF73C00BEFB46 /* audio_playlist_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265305194EF73C00BEFB46 /* audio_playlist_source.h */; }; + 432653F0194EF73C00BEFB46 /* audio_port.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265306194EF73C00BEFB46 /* audio_port.h */; }; + 432653F1194EF73C00BEFB46 /* audio_region_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265307194EF73C00BEFB46 /* audio_region_importer.h */; }; + 432653F2194EF73C00BEFB46 /* audio_track.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265308194EF73C00BEFB46 /* audio_track.h */; }; + 432653F3194EF73C00BEFB46 /* audio_track_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265309194EF73C00BEFB46 /* audio_track_importer.h */; }; + 432653F4194EF73C00BEFB46 /* audio_unit.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326530A194EF73C00BEFB46 /* audio_unit.h */; }; + 432653F5194EF73C00BEFB46 /* audioanalyser.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326530B194EF73C00BEFB46 /* audioanalyser.h */; }; + 432653F6194EF73C00BEFB46 /* audioengine.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326530C194EF73C00BEFB46 /* audioengine.h */; }; + 432653F7194EF73C00BEFB46 /* audiofile_tagger.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326530D194EF73C00BEFB46 /* audiofile_tagger.h */; }; + 432653F8194EF73C00BEFB46 /* audiofilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326530E194EF73C00BEFB46 /* audiofilesource.h */; }; + 432653F9194EF73C00BEFB46 /* audioplaylist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326530F194EF73C00BEFB46 /* audioplaylist.h */; }; + 432653FA194EF73C00BEFB46 /* audioregion.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265310194EF73C00BEFB46 /* audioregion.h */; }; + 432653FB194EF73C00BEFB46 /* audiosource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265311194EF73C00BEFB46 /* audiosource.h */; }; + 432653FC194EF73C00BEFB46 /* auditioner.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265312194EF73C00BEFB46 /* auditioner.h */; }; + 432653FD194EF73C00BEFB46 /* auto_bundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265313194EF73C00BEFB46 /* auto_bundle.h */; }; + 432653FE194EF73C00BEFB46 /* automatable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265314194EF73C00BEFB46 /* automatable.h */; }; + 432653FF194EF73C00BEFB46 /* automatable_sequence.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265315194EF73C00BEFB46 /* automatable_sequence.h */; }; + 43265400194EF73C00BEFB46 /* automation_control.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265316194EF73C00BEFB46 /* automation_control.h */; }; + 43265401194EF73C00BEFB46 /* automation_list.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265317194EF73C00BEFB46 /* automation_list.h */; }; + 43265402194EF73C00BEFB46 /* automation_watch.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265318194EF73C00BEFB46 /* automation_watch.h */; }; + 43265403194EF73C00BEFB46 /* beats_frames_converter.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265319194EF73C00BEFB46 /* beats_frames_converter.h */; }; + 43265404194EF73C00BEFB46 /* broadcast_info.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326531A194EF73C00BEFB46 /* broadcast_info.h */; }; + 43265405194EF73C00BEFB46 /* buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326531B194EF73C00BEFB46 /* buffer.h */; }; + 43265406194EF73C00BEFB46 /* buffer_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326531C194EF73C00BEFB46 /* buffer_manager.h */; }; + 43265407194EF73C00BEFB46 /* buffer_set.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326531D194EF73C00BEFB46 /* buffer_set.h */; }; + 43265408194EF73C00BEFB46 /* bundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326531E194EF73C00BEFB46 /* bundle.h */; }; + 43265409194EF73C00BEFB46 /* butler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326531F194EF73C00BEFB46 /* butler.h */; }; + 4326540A194EF73C00BEFB46 /* caimportable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265320194EF73C00BEFB46 /* caimportable.h */; }; + 4326540B194EF73C00BEFB46 /* capturing_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265321194EF73C00BEFB46 /* capturing_processor.h */; }; + 4326540C194EF73C00BEFB46 /* chan_count.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265322194EF73C00BEFB46 /* chan_count.h */; }; + 4326540D194EF73D00BEFB46 /* chan_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265323194EF73C00BEFB46 /* chan_mapping.h */; }; + 4326540E194EF73D00BEFB46 /* click.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265324194EF73C00BEFB46 /* click.h */; }; + 4326540F194EF73D00BEFB46 /* comparable_shared_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265325194EF73C00BEFB46 /* comparable_shared_ptr.h */; }; + 43265410194EF73D00BEFB46 /* configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265326194EF73C00BEFB46 /* configuration.h */; }; + 43265411194EF73D00BEFB46 /* configuration_variable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265327194EF73C00BEFB46 /* configuration_variable.h */; }; + 43265412194EF73D00BEFB46 /* control_protocol_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265328194EF73C00BEFB46 /* control_protocol_manager.h */; }; + 43265413194EF73D00BEFB46 /* coreaudiosource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265329194EF73C00BEFB46 /* coreaudiosource.h */; }; + 43265414194EF73D00BEFB46 /* cycle_timer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326532A194EF73C00BEFB46 /* cycle_timer.h */; }; + 43265415194EF73D00BEFB46 /* cycles.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326532B194EF73C00BEFB46 /* cycles.h */; }; + 43265416194EF73D00BEFB46 /* data_type.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326532C194EF73C00BEFB46 /* data_type.h */; }; + 43265417194EF73D00BEFB46 /* dB.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326532D194EF73C00BEFB46 /* dB.h */; }; + 43265418194EF73D00BEFB46 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326532E194EF73C00BEFB46 /* debug.h */; }; + 43265419194EF73D00BEFB46 /* delivery.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326532F194EF73C00BEFB46 /* delivery.h */; }; + 4326541A194EF73D00BEFB46 /* directory_names.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265330194EF73C00BEFB46 /* directory_names.h */; }; + 4326541B194EF73D00BEFB46 /* diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265331194EF73C00BEFB46 /* diskstream.h */; }; + 4326541C194EF73D00BEFB46 /* element_import_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265332194EF73C00BEFB46 /* element_import_handler.h */; }; + 4326541D194EF73D00BEFB46 /* element_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265333194EF73C00BEFB46 /* element_importer.h */; }; + 4326541E194EF73D00BEFB46 /* engine_state_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265334194EF73C00BEFB46 /* engine_state_controller.h */; }; + 4326541F194EF73D00BEFB46 /* event_type_map.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265335194EF73C00BEFB46 /* event_type_map.h */; }; + 43265420194EF73D00BEFB46 /* export_channel.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265336194EF73C00BEFB46 /* export_channel.h */; }; + 43265421194EF73D00BEFB46 /* export_channel_configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265337194EF73C00BEFB46 /* export_channel_configuration.h */; }; + 43265422194EF73D00BEFB46 /* export_failed.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265338194EF73C00BEFB46 /* export_failed.h */; }; + 43265423194EF73D00BEFB46 /* export_filename.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265339194EF73C00BEFB46 /* export_filename.h */; }; + 43265424194EF73D00BEFB46 /* export_format_base.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326533A194EF73C00BEFB46 /* export_format_base.h */; }; + 43265425194EF73D00BEFB46 /* export_format_compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326533B194EF73C00BEFB46 /* export_format_compatibility.h */; }; + 43265426194EF73D00BEFB46 /* export_format_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326533C194EF73C00BEFB46 /* export_format_manager.h */; }; + 43265427194EF73D00BEFB46 /* export_format_specification.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326533D194EF73C00BEFB46 /* export_format_specification.h */; }; + 43265428194EF73D00BEFB46 /* export_formats.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326533E194EF73C00BEFB46 /* export_formats.h */; }; + 43265429194EF73D00BEFB46 /* export_graph_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326533F194EF73C00BEFB46 /* export_graph_builder.h */; }; + 4326542A194EF73D00BEFB46 /* export_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265340194EF73C00BEFB46 /* export_handler.h */; }; + 4326542B194EF73D00BEFB46 /* export_multiplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265341194EF73C00BEFB46 /* export_multiplication.h */; }; + 4326542C194EF73D00BEFB46 /* export_pointers.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265342194EF73C00BEFB46 /* export_pointers.h */; }; + 4326542D194EF73D00BEFB46 /* export_preset.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265343194EF73C00BEFB46 /* export_preset.h */; }; + 4326542E194EF73D00BEFB46 /* export_profile_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265344194EF73C00BEFB46 /* export_profile_manager.h */; }; + 4326542F194EF73D00BEFB46 /* export_status.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265345194EF73C00BEFB46 /* export_status.h */; }; + 43265430194EF73D00BEFB46 /* export_timespan.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265346194EF73C00BEFB46 /* export_timespan.h */; }; + 43265431194EF73D00BEFB46 /* file_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265347194EF73C00BEFB46 /* file_source.h */; }; + 43265432194EF73D00BEFB46 /* filename_extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265348194EF73C00BEFB46 /* filename_extensions.h */; }; + 43265433194EF73D00BEFB46 /* filesystem_paths.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265349194EF73C00BEFB46 /* filesystem_paths.h */; }; + 43265434194EF73D00BEFB46 /* filter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326534A194EF73C00BEFB46 /* filter.h */; }; + 43265435194EF73D00BEFB46 /* graph.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326534B194EF73C00BEFB46 /* graph.h */; }; + 43265436194EF73D00BEFB46 /* graphnode.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326534C194EF73C00BEFB46 /* graphnode.h */; }; + 43265437194EF73D00BEFB46 /* iec1ppmdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326534D194EF73C00BEFB46 /* iec1ppmdsp.h */; }; + 43265438194EF73D00BEFB46 /* iec2ppmdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326534E194EF73C00BEFB46 /* iec2ppmdsp.h */; }; + 43265439194EF73D00BEFB46 /* import_status.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326534F194EF73C00BEFB46 /* import_status.h */; }; + 4326543A194EF73D00BEFB46 /* importable_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265350194EF73C00BEFB46 /* importable_source.h */; }; + 4326543B194EF73D00BEFB46 /* instrument_info.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265351194EF73C00BEFB46 /* instrument_info.h */; }; + 4326543C194EF73D00BEFB46 /* internal_return.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265352194EF73C00BEFB46 /* internal_return.h */; }; + 4326543D194EF73D00BEFB46 /* internal_send.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265353194EF73C00BEFB46 /* internal_send.h */; }; + 4326543E194EF73D00BEFB46 /* interpolation.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265354194EF73C00BEFB46 /* interpolation.h */; }; + 4326543F194EF73D00BEFB46 /* interthread_info.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265355194EF73C00BEFB46 /* interthread_info.h */; }; + 43265440194EF73D00BEFB46 /* io.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265356194EF73C00BEFB46 /* io.h */; }; + 43265441194EF73D00BEFB46 /* io_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265357194EF73C00BEFB46 /* io_processor.h */; }; + 43265442194EF73D00BEFB46 /* jack_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265358194EF73C00BEFB46 /* jack_utils.h */; }; + 43265443194EF73D00BEFB46 /* kmeterdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265359194EF73C00BEFB46 /* kmeterdsp.h */; }; + 43265444194EF73D00BEFB46 /* ladspa.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326535A194EF73C00BEFB46 /* ladspa.h */; }; + 43265445194EF73D00BEFB46 /* ladspa_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326535B194EF73C00BEFB46 /* ladspa_plugin.h */; }; + 43265446194EF73D00BEFB46 /* latent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326535C194EF73C00BEFB46 /* latent.h */; }; + 43265447194EF73D00BEFB46 /* libardour_visibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326535D194EF73C00BEFB46 /* libardour_visibility.h */; }; + 43265448194EF73D00BEFB46 /* linux_vst_support.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326535E194EF73C00BEFB46 /* linux_vst_support.h */; }; + 43265449194EF73D00BEFB46 /* location.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326535F194EF73C00BEFB46 /* location.h */; }; + 4326544A194EF73D00BEFB46 /* location_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265360194EF73C00BEFB46 /* location_importer.h */; }; + 4326544B194EF73D00BEFB46 /* logcurve.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265361194EF73C00BEFB46 /* logcurve.h */; }; + 4326544C194EF73D00BEFB46 /* lv2_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265362194EF73C00BEFB46 /* lv2_plugin.h */; }; + 4326544D194EF73D00BEFB46 /* lxvst_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265363194EF73C00BEFB46 /* lxvst_plugin.h */; }; + 4326544E194EF73D00BEFB46 /* meter.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265364194EF73C00BEFB46 /* meter.h */; }; + 4326544F194EF73D00BEFB46 /* midi_automation_list_binder.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265365194EF73C00BEFB46 /* midi_automation_list_binder.h */; }; + 43265450194EF73D00BEFB46 /* midi_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265366194EF73C00BEFB46 /* midi_buffer.h */; }; + 43265451194EF73D00BEFB46 /* midi_diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265367194EF73C00BEFB46 /* midi_diskstream.h */; }; + 43265452194EF73D00BEFB46 /* midi_model.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265368194EF73C00BEFB46 /* midi_model.h */; }; + 43265453194EF73D00BEFB46 /* midi_operator.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265369194EF73C00BEFB46 /* midi_operator.h */; }; + 43265454194EF73D00BEFB46 /* midi_patch_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326536A194EF73C00BEFB46 /* midi_patch_manager.h */; }; + 43265455194EF73D00BEFB46 /* midi_playlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326536B194EF73C00BEFB46 /* midi_playlist.h */; }; + 43265456194EF73D00BEFB46 /* midi_playlist_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326536C194EF73C00BEFB46 /* midi_playlist_source.h */; }; + 43265457194EF73D00BEFB46 /* midi_port.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326536D194EF73C00BEFB46 /* midi_port.h */; }; + 43265458194EF73D00BEFB46 /* midi_region.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326536E194EF73C00BEFB46 /* midi_region.h */; }; + 43265459194EF73D00BEFB46 /* midi_ring_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326536F194EF73C00BEFB46 /* midi_ring_buffer.h */; }; + 4326545A194EF73D00BEFB46 /* midi_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265370194EF73C00BEFB46 /* midi_source.h */; }; + 4326545B194EF73D00BEFB46 /* midi_state_tracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265371194EF73C00BEFB46 /* midi_state_tracker.h */; }; + 4326545C194EF73D00BEFB46 /* midi_stretch.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265372194EF73C00BEFB46 /* midi_stretch.h */; }; + 4326545D194EF73D00BEFB46 /* midi_track.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265373194EF73C00BEFB46 /* midi_track.h */; }; + 4326545E194EF73D00BEFB46 /* midi_ui.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265374194EF73C00BEFB46 /* midi_ui.h */; }; + 4326545F194EF73D00BEFB46 /* midiport_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265375194EF73C00BEFB46 /* midiport_manager.h */; }; + 43265460194EF73D00BEFB46 /* mix.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265376194EF73C00BEFB46 /* mix.h */; }; + 43265461194EF73D00BEFB46 /* monitor_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265377194EF73C00BEFB46 /* monitor_processor.h */; }; + 43265462194EF73D00BEFB46 /* movable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265378194EF73C00BEFB46 /* movable.h */; }; + 43265463194EF73D00BEFB46 /* msvc_libardour.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265379194EF73C00BEFB46 /* msvc_libardour.h */; }; + 43265464194EF73D00BEFB46 /* mtdm.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326537A194EF73C00BEFB46 /* mtdm.h */; }; + 43265465194EF73D00BEFB46 /* mute_master.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326537B194EF73C00BEFB46 /* mute_master.h */; }; + 43265466194EF73D00BEFB46 /* noise.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326537C194EF73C00BEFB46 /* noise.h */; }; + 43265467194EF73D00BEFB46 /* onset_detector.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326537D194EF73C00BEFB46 /* onset_detector.h */; }; + 43265468194EF73D00BEFB46 /* operations.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326537E194EF73C00BEFB46 /* operations.h */; }; + 43265469194EF73D00BEFB46 /* pan_controllable.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326537F194EF73C00BEFB46 /* pan_controllable.h */; }; + 4326546A194EF73D00BEFB46 /* pannable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265380194EF73C00BEFB46 /* pannable.h */; }; + 4326546B194EF73D00BEFB46 /* panner.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265381194EF73C00BEFB46 /* panner.h */; }; + 4326546C194EF73D00BEFB46 /* panner_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265382194EF73C00BEFB46 /* panner_manager.h */; }; + 4326546D194EF73D00BEFB46 /* panner_shell.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265383194EF73C00BEFB46 /* panner_shell.h */; }; + 4326546E194EF73D00BEFB46 /* pcm_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265384194EF73C00BEFB46 /* pcm_utils.h */; }; + 4326546F194EF73D00BEFB46 /* peak.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265385194EF73C00BEFB46 /* peak.h */; }; + 43265470194EF73D00BEFB46 /* pi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265386194EF73C00BEFB46 /* pi_controller.h */; }; + 43265471194EF73D00BEFB46 /* pitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265387194EF73C00BEFB46 /* pitch.h */; }; + 43265472194EF73D00BEFB46 /* playlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265388194EF73C00BEFB46 /* playlist.h */; }; + 43265473194EF73D00BEFB46 /* playlist_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265389194EF73C00BEFB46 /* playlist_factory.h */; }; + 43265474194EF73D00BEFB46 /* playlist_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326538A194EF73C00BEFB46 /* playlist_source.h */; }; + 43265475194EF73D00BEFB46 /* plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326538B194EF73C00BEFB46 /* plugin.h */; }; + 43265476194EF73D00BEFB46 /* plugin_insert.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326538C194EF73C00BEFB46 /* plugin_insert.h */; }; + 43265477194EF73D00BEFB46 /* plugin_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326538D194EF73C00BEFB46 /* plugin_manager.h */; }; + 43265478194EF73D00BEFB46 /* plugin_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326538E194EF73C00BEFB46 /* plugin_types.h */; }; + 43265479194EF73D00BEFB46 /* port.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326538F194EF73C00BEFB46 /* port.h */; }; + 4326547A194EF73D00BEFB46 /* port_engine.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265390194EF73C00BEFB46 /* port_engine.h */; }; + 4326547B194EF73D00BEFB46 /* port_insert.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265391194EF73C00BEFB46 /* port_insert.h */; }; + 4326547C194EF73D00BEFB46 /* port_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265392194EF73C00BEFB46 /* port_manager.h */; }; + 4326547D194EF73D00BEFB46 /* port_set.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265393194EF73C00BEFB46 /* port_set.h */; }; + 4326547E194EF73D00BEFB46 /* process_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265394194EF73C00BEFB46 /* process_thread.h */; }; + 4326547F194EF73D00BEFB46 /* processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265395194EF73C00BEFB46 /* processor.h */; }; + 43265480194EF73D00BEFB46 /* profile.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265396194EF73C00BEFB46 /* profile.h */; }; + 43265481194EF73D00BEFB46 /* progress.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265397194EF73C00BEFB46 /* progress.h */; }; + 43265482194EF73D00BEFB46 /* proxy_controllable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265398194EF73C00BEFB46 /* proxy_controllable.h */; }; + 43265483194EF73D00BEFB46 /* public_diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43265399194EF73C00BEFB46 /* public_diskstream.h */; }; + 43265484194EF73D00BEFB46 /* quantize.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326539A194EF73C00BEFB46 /* quantize.h */; }; + 43265485194EF73D00BEFB46 /* rb_effect.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326539B194EF73C00BEFB46 /* rb_effect.h */; }; + 43265486194EF73D00BEFB46 /* rc_configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326539C194EF73C00BEFB46 /* rc_configuration.h */; }; + 43265487194EF73D00BEFB46 /* rc_configuration_vars.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326539D194EF73C00BEFB46 /* rc_configuration_vars.h */; }; + 43265488194EF73D00BEFB46 /* readable.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326539E194EF73C00BEFB46 /* readable.h */; }; + 43265489194EF73D00BEFB46 /* recent_sessions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4326539F194EF73C00BEFB46 /* recent_sessions.h */; }; + 4326548A194EF73D00BEFB46 /* region.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A0194EF73C00BEFB46 /* region.h */; }; + 4326548B194EF73D00BEFB46 /* region_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A1194EF73C00BEFB46 /* region_factory.h */; }; + 4326548C194EF73D00BEFB46 /* region_sorters.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A2194EF73C00BEFB46 /* region_sorters.h */; }; + 4326548D194EF73D00BEFB46 /* resampled_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A3194EF73C00BEFB46 /* resampled_source.h */; }; + 4326548E194EF73D00BEFB46 /* return.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A4194EF73C00BEFB46 /* return.h */; }; + 4326548F194EF73D00BEFB46 /* reverse.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A5194EF73C00BEFB46 /* reverse.h */; }; + 43265490194EF73D00BEFB46 /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A6194EF73C00BEFB46 /* revision.h */; }; + 43265491194EF73D00BEFB46 /* route.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A7194EF73C00BEFB46 /* route.h */; }; + 43265492194EF73D00BEFB46 /* route_graph.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A8194EF73C00BEFB46 /* route_graph.h */; }; + 43265493194EF73D00BEFB46 /* route_group.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653A9194EF73C00BEFB46 /* route_group.h */; }; + 43265494194EF73D00BEFB46 /* route_group_member.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653AA194EF73C00BEFB46 /* route_group_member.h */; }; + 43265495194EF73D00BEFB46 /* route_group_specialized.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653AB194EF73C00BEFB46 /* route_group_specialized.h */; }; + 43265496194EF73D00BEFB46 /* runtime_functions.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653AC194EF73C00BEFB46 /* runtime_functions.h */; }; + 43265497194EF73D00BEFB46 /* search_paths.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653AD194EF73C00BEFB46 /* search_paths.h */; }; + 43265498194EF73D00BEFB46 /* send.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653AE194EF73C00BEFB46 /* send.h */; }; + 43265499194EF73D00BEFB46 /* session.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653AF194EF73C00BEFB46 /* session.h */; }; + 4326549A194EF73D00BEFB46 /* session_configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B0194EF73C00BEFB46 /* session_configuration.h */; }; + 4326549B194EF73D00BEFB46 /* session_configuration_vars.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B1194EF73C00BEFB46 /* session_configuration_vars.h */; }; + 4326549C194EF73D00BEFB46 /* session_directory.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B2194EF73C00BEFB46 /* session_directory.h */; }; + 4326549D194EF73D00BEFB46 /* session_event.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B3194EF73C00BEFB46 /* session_event.h */; }; + 4326549E194EF73D00BEFB46 /* session_handle.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B4194EF73C00BEFB46 /* session_handle.h */; }; + 4326549F194EF73D00BEFB46 /* session_metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B5194EF73C00BEFB46 /* session_metadata.h */; }; + 432654A0194EF73D00BEFB46 /* session_object.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B6194EF73C00BEFB46 /* session_object.h */; }; + 432654A1194EF73D00BEFB46 /* session_playlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B7194EF73C00BEFB46 /* session_playlist.h */; }; + 432654A2194EF73D00BEFB46 /* session_playlists.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B8194EF73C00BEFB46 /* session_playlists.h */; }; + 432654A3194EF73D00BEFB46 /* session_route.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653B9194EF73C00BEFB46 /* session_route.h */; }; + 432654A4194EF73D00BEFB46 /* session_state_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653BA194EF73C00BEFB46 /* session_state_utils.h */; }; + 432654A5194EF73D00BEFB46 /* session_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653BB194EF73C00BEFB46 /* session_utils.h */; }; + 432654A6194EF73D00BEFB46 /* silentfilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653BC194EF73C00BEFB46 /* silentfilesource.h */; }; + 432654A7194EF73D00BEFB46 /* slave.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653BD194EF73C00BEFB46 /* slave.h */; }; + 432654A8194EF73D00BEFB46 /* smf_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653BE194EF73C00BEFB46 /* smf_source.h */; }; + 432654A9194EF73D00BEFB46 /* sndfile_helpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653BF194EF73C00BEFB46 /* sndfile_helpers.h */; }; + 432654AA194EF73D00BEFB46 /* sndfileimportable.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C0194EF73C00BEFB46 /* sndfileimportable.h */; }; + 432654AB194EF73D00BEFB46 /* sndfilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C1194EF73C00BEFB46 /* sndfilesource.h */; }; + 432654AC194EF73D00BEFB46 /* soundseq.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C2194EF73C00BEFB46 /* soundseq.h */; }; + 432654AD194EF73D00BEFB46 /* source.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C3194EF73C00BEFB46 /* source.h */; }; + 432654AE194EF73D00BEFB46 /* source_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C4194EF73C00BEFB46 /* source_factory.h */; }; + 432654AF194EF73D00BEFB46 /* speaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C5194EF73C00BEFB46 /* speaker.h */; }; + 432654B0194EF73D00BEFB46 /* speakers.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C6194EF73C00BEFB46 /* speakers.h */; }; + 432654B1194EF73D00BEFB46 /* spline.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C7194EF73C00BEFB46 /* spline.h */; }; + 432654B2194EF73D00BEFB46 /* srcfilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C8194EF73C00BEFB46 /* srcfilesource.h */; }; + 432654B3194EF73D00BEFB46 /* stretch.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653C9194EF73C00BEFB46 /* stretch.h */; }; + 432654B4194EF73D00BEFB46 /* strip_silence.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653CA194EF73C00BEFB46 /* strip_silence.h */; }; + 432654B5194EF73D00BEFB46 /* system_exec.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653CB194EF73C00BEFB46 /* system_exec.h */; }; + 432654B6194EF73D00BEFB46 /* tape_file_matcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653CC194EF73C00BEFB46 /* tape_file_matcher.h */; }; + 432654B7194EF73D00BEFB46 /* template_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653CD194EF73C00BEFB46 /* template_utils.h */; }; + 432654B8194EF73D00BEFB46 /* tempo.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653CE194EF73C00BEFB46 /* tempo.h */; }; + 432654B9194EF73D00BEFB46 /* tempo_map_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653CF194EF73C00BEFB46 /* tempo_map_importer.h */; }; + 432654BA194EF73D00BEFB46 /* thread_buffers.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D0194EF73C00BEFB46 /* thread_buffers.h */; }; + 432654BB194EF73D00BEFB46 /* ticker.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D1194EF73C00BEFB46 /* ticker.h */; }; + 432654BC194EF73D00BEFB46 /* timecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D2194EF73C00BEFB46 /* timecode.h */; }; + 432654BD194EF73D00BEFB46 /* timefx_request.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D3194EF73C00BEFB46 /* timefx_request.h */; }; + 432654BE194EF73D00BEFB46 /* timestamps.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D4194EF73C00BEFB46 /* timestamps.h */; }; + 432654BF194EF73D00BEFB46 /* track.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D5194EF73C00BEFB46 /* track.h */; }; + 432654C0194EF73D00BEFB46 /* transient_detector.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D6194EF73C00BEFB46 /* transient_detector.h */; }; + 432654C1194EF73D00BEFB46 /* trimmable.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D7194EF73C00BEFB46 /* trimmable.h */; }; + 432654C2194EF73D00BEFB46 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D8194EF73C00BEFB46 /* types.h */; }; + 432654C3194EF73D00BEFB46 /* unknown_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653D9194EF73C00BEFB46 /* unknown_processor.h */; }; + 432654C4194EF73D00BEFB46 /* uri_map.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653DA194EF73C00BEFB46 /* uri_map.h */; }; + 432654C5194EF73D00BEFB46 /* user_bundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653DB194EF73C00BEFB46 /* user_bundle.h */; }; + 432654C6194EF73D00BEFB46 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653DC194EF73C00BEFB46 /* utils.h */; }; + 432654C7194EF73D00BEFB46 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653DD194EF73C00BEFB46 /* version.h */; }; + 432654C8194EF73D00BEFB46 /* aeffectx.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653DF194EF73C00BEFB46 /* aeffectx.h */; }; + 432654C9194EF73D00BEFB46 /* vst_info_file.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653E0194EF73C00BEFB46 /* vst_info_file.h */; }; + 432654CA194EF73D00BEFB46 /* vst_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653E1194EF73C00BEFB46 /* vst_plugin.h */; }; + 432654CB194EF73D00BEFB46 /* vst_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653E2194EF73C00BEFB46 /* vst_types.h */; }; + 432654CC194EF73D00BEFB46 /* vumeterdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653E3194EF73C00BEFB46 /* vumeterdsp.h */; }; + 432654CD194EF73D00BEFB46 /* windows_vst_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653E4194EF73C00BEFB46 /* windows_vst_plugin.h */; }; + 432654CE194EF73D00BEFB46 /* worker.h in Headers */ = {isa = PBXBuildFile; fileRef = 432653E5194EF73C00BEFB46 /* worker.h */; }; + 432859E61A10F415006C3E03 /* midi_scene_change.h in Headers */ = {isa = PBXBuildFile; fileRef = 432859E21A10F415006C3E03 /* midi_scene_change.h */; }; + 432859E71A10F415006C3E03 /* midi_scene_changer.h in Headers */ = {isa = PBXBuildFile; fileRef = 432859E31A10F415006C3E03 /* midi_scene_changer.h */; }; + 432859E81A10F415006C3E03 /* mididm.h in Headers */ = {isa = PBXBuildFile; fileRef = 432859E41A10F415006C3E03 /* mididm.h */; }; + 432859E91A10F415006C3E03 /* soundcloud_upload.h in Headers */ = {isa = PBXBuildFile; fileRef = 432859E51A10F415006C3E03 /* soundcloud_upload.h */; }; + 432859F31A10F436006C3E03 /* midi_scene_change.cc in Sources */ = {isa = PBXBuildFile; fileRef = 432859EE1A10F436006C3E03 /* midi_scene_change.cc */; }; + 432859F41A10F436006C3E03 /* midi_scene_changer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 432859EF1A10F436006C3E03 /* midi_scene_changer.cc */; }; + 432859F51A10F436006C3E03 /* mididm.cc in Sources */ = {isa = PBXBuildFile; fileRef = 432859F01A10F436006C3E03 /* mididm.cc */; }; + 432859F61A10F436006C3E03 /* scene_change.cc in Sources */ = {isa = PBXBuildFile; fileRef = 432859F11A10F436006C3E03 /* scene_change.cc */; }; + 432859F71A10F436006C3E03 /* soundcloud_upload.cc in Sources */ = {isa = PBXBuildFile; fileRef = 432859F21A10F436006C3E03 /* soundcloud_upload.cc */; }; + 43AA8383194EEB2600A67B56 /* amp.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82AE194EEB2600A67B56 /* amp.cc */; }; + 43AA8384194EEB2600A67B56 /* analyser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82AF194EEB2600A67B56 /* analyser.cc */; }; + 43AA8385194EEB2600A67B56 /* async_midi_port.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B0194EEB2600A67B56 /* async_midi_port.cc */; }; + 43AA8386194EEB2600A67B56 /* audio_buffer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B1194EEB2600A67B56 /* audio_buffer.cc */; }; + 43AA8387194EEB2600A67B56 /* audio_diskstream.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B2194EEB2600A67B56 /* audio_diskstream.cc */; }; + 43AA8388194EEB2600A67B56 /* audio_library.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B3194EEB2600A67B56 /* audio_library.cc */; }; + 43AA8389194EEB2600A67B56 /* audio_playlist_importer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B4194EEB2600A67B56 /* audio_playlist_importer.cc */; }; + 43AA838A194EEB2600A67B56 /* audio_playlist_source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B5194EEB2600A67B56 /* audio_playlist_source.cc */; }; + 43AA838B194EEB2600A67B56 /* audio_playlist.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B6194EEB2600A67B56 /* audio_playlist.cc */; }; + 43AA838C194EEB2600A67B56 /* audio_port.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B7194EEB2600A67B56 /* audio_port.cc */; }; + 43AA838D194EEB2600A67B56 /* audio_region_importer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B8194EEB2600A67B56 /* audio_region_importer.cc */; }; + 43AA838E194EEB2600A67B56 /* audio_track_importer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82B9194EEB2600A67B56 /* audio_track_importer.cc */; }; + 43AA838F194EEB2600A67B56 /* audio_track.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82BA194EEB2600A67B56 /* audio_track.cc */; }; + 43AA8390194EEB2600A67B56 /* audio_unit.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82BB194EEB2600A67B56 /* audio_unit.cc */; }; + 43AA8391194EEB2600A67B56 /* audioanalyser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82BC194EEB2600A67B56 /* audioanalyser.cc */; }; + 43AA8392194EEB2600A67B56 /* audioengine.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82BD194EEB2600A67B56 /* audioengine.cc */; }; + 43AA8393194EEB2600A67B56 /* audiofile_tagger.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82BE194EEB2600A67B56 /* audiofile_tagger.cc */; }; + 43AA8394194EEB2600A67B56 /* audiofilesource.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82BF194EEB2600A67B56 /* audiofilesource.cc */; }; + 43AA8395194EEB2600A67B56 /* audioregion.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C0194EEB2600A67B56 /* audioregion.cc */; }; + 43AA8396194EEB2600A67B56 /* audiosource.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C1194EEB2600A67B56 /* audiosource.cc */; }; + 43AA8397194EEB2600A67B56 /* auditioner.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C2194EEB2600A67B56 /* auditioner.cc */; }; + 43AA8398194EEB2600A67B56 /* auto_bundle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C3194EEB2600A67B56 /* auto_bundle.cc */; }; + 43AA8399194EEB2600A67B56 /* automatable.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C4194EEB2600A67B56 /* automatable.cc */; }; + 43AA839A194EEB2600A67B56 /* automation_control.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C5194EEB2600A67B56 /* automation_control.cc */; }; + 43AA839B194EEB2600A67B56 /* automation_list.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C6194EEB2600A67B56 /* automation_list.cc */; }; + 43AA839C194EEB2600A67B56 /* automation_watch.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C7194EEB2600A67B56 /* automation_watch.cc */; }; + 43AA839D194EEB2600A67B56 /* automation.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C8194EEB2600A67B56 /* automation.cc */; }; + 43AA839E194EEB2600A67B56 /* beats_frames_converter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82C9194EEB2600A67B56 /* beats_frames_converter.cc */; }; + 43AA839F194EEB2600A67B56 /* broadcast_info.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82CA194EEB2600A67B56 /* broadcast_info.cc */; }; + 43AA83A0194EEB2600A67B56 /* buffer_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82CB194EEB2600A67B56 /* buffer_manager.cc */; }; + 43AA83A1194EEB2600A67B56 /* buffer_set.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82CC194EEB2600A67B56 /* buffer_set.cc */; }; + 43AA83A2194EEB2600A67B56 /* buffer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82CD194EEB2600A67B56 /* buffer.cc */; }; + 43AA83A3194EEB2600A67B56 /* bundle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82CE194EEB2600A67B56 /* bundle.cc */; }; + 43AA83A4194EEB2600A67B56 /* butler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82CF194EEB2600A67B56 /* butler.cc */; }; + 43AA83A5194EEB2600A67B56 /* caimportable.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D0194EEB2600A67B56 /* caimportable.cc */; }; + 43AA83A6194EEB2600A67B56 /* capturing_processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D1194EEB2600A67B56 /* capturing_processor.cc */; }; + 43AA83A7194EEB2600A67B56 /* chan_count.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D2194EEB2600A67B56 /* chan_count.cc */; }; + 43AA83A8194EEB2600A67B56 /* chan_mapping.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D3194EEB2600A67B56 /* chan_mapping.cc */; }; + 43AA83A9194EEB2600A67B56 /* config_text.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D4194EEB2600A67B56 /* config_text.cc */; }; + 43AA83AA194EEB2600A67B56 /* configuration.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D5194EEB2600A67B56 /* configuration.cc */; }; + 43AA83AB194EEB2600A67B56 /* control_protocol_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D6194EEB2600A67B56 /* control_protocol_manager.cc */; }; + 43AA83AC194EEB2600A67B56 /* coreaudiosource.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D7194EEB2600A67B56 /* coreaudiosource.cc */; }; + 43AA83AD194EEB2600A67B56 /* cycle_timer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D8194EEB2600A67B56 /* cycle_timer.cc */; }; + 43AA83AE194EEB2600A67B56 /* data_type.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82D9194EEB2600A67B56 /* data_type.cc */; }; + 43AA83AF194EEB2600A67B56 /* debug.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82DA194EEB2600A67B56 /* debug.cc */; }; + 43AA83B0194EEB2600A67B56 /* default_click.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82DB194EEB2600A67B56 /* default_click.cc */; }; + 43AA83B1194EEB2600A67B56 /* delivery.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82DC194EEB2600A67B56 /* delivery.cc */; }; + 43AA83B2194EEB2600A67B56 /* directory_names.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82DD194EEB2600A67B56 /* directory_names.cc */; }; + 43AA83B3194EEB2600A67B56 /* diskstream.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82DE194EEB2600A67B56 /* diskstream.cc */; }; + 43AA83B4194EEB2600A67B56 /* element_import_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82DF194EEB2600A67B56 /* element_import_handler.cc */; }; + 43AA83B5194EEB2600A67B56 /* element_importer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E0194EEB2600A67B56 /* element_importer.cc */; }; + 43AA83B6194EEB2600A67B56 /* engine_slave.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E1194EEB2600A67B56 /* engine_slave.cc */; }; + 43AA83B7194EEB2600A67B56 /* engine_state_controller.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E2194EEB2600A67B56 /* engine_state_controller.cc */; }; + 43AA83B8194EEB2600A67B56 /* enums.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E3194EEB2600A67B56 /* enums.cc */; }; + 43AA83B9194EEB2600A67B56 /* event_type_map.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E4194EEB2600A67B56 /* event_type_map.cc */; }; + 43AA83BA194EEB2600A67B56 /* export_channel_configuration.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E5194EEB2600A67B56 /* export_channel_configuration.cc */; }; + 43AA83BB194EEB2600A67B56 /* export_channel.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E6194EEB2600A67B56 /* export_channel.cc */; }; + 43AA83BC194EEB2600A67B56 /* export_failed.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E7194EEB2600A67B56 /* export_failed.cc */; }; + 43AA83BD194EEB2600A67B56 /* export_filename.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E8194EEB2600A67B56 /* export_filename.cc */; }; + 43AA83BE194EEB2600A67B56 /* export_format_base.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82E9194EEB2600A67B56 /* export_format_base.cc */; }; + 43AA83BF194EEB2600A67B56 /* export_format_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82EA194EEB2600A67B56 /* export_format_manager.cc */; }; + 43AA83C0194EEB2600A67B56 /* export_format_specification.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82EB194EEB2600A67B56 /* export_format_specification.cc */; }; + 43AA83C1194EEB2600A67B56 /* export_formats.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82EC194EEB2600A67B56 /* export_formats.cc */; }; + 43AA83C2194EEB2600A67B56 /* export_graph_builder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82ED194EEB2600A67B56 /* export_graph_builder.cc */; }; + 43AA83C3194EEB2600A67B56 /* export_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82EE194EEB2600A67B56 /* export_handler.cc */; }; + 43AA83C4194EEB2600A67B56 /* export_multiplication.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82EF194EEB2600A67B56 /* export_multiplication.cc */; }; + 43AA83C5194EEB2600A67B56 /* export_preset.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F0194EEB2600A67B56 /* export_preset.cc */; }; + 43AA83C6194EEB2600A67B56 /* export_profile_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F1194EEB2600A67B56 /* export_profile_manager.cc */; }; + 43AA83C7194EEB2600A67B56 /* export_status.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F2194EEB2600A67B56 /* export_status.cc */; }; + 43AA83C8194EEB2600A67B56 /* export_timespan.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F3194EEB2600A67B56 /* export_timespan.cc */; }; + 43AA83C9194EEB2600A67B56 /* file_source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F4194EEB2600A67B56 /* file_source.cc */; }; + 43AA83CA194EEB2600A67B56 /* filename_extensions.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F5194EEB2600A67B56 /* filename_extensions.cc */; }; + 43AA83CB194EEB2600A67B56 /* filesystem_paths.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F6194EEB2600A67B56 /* filesystem_paths.cc */; }; + 43AA83CC194EEB2600A67B56 /* filter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F7194EEB2600A67B56 /* filter.cc */; }; + 43AA83CD194EEB2600A67B56 /* find_session.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F8194EEB2600A67B56 /* find_session.cc */; }; + 43AA83CE194EEB2600A67B56 /* globals.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82F9194EEB2600A67B56 /* globals.cc */; }; + 43AA83CF194EEB2600A67B56 /* graph.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82FA194EEB2600A67B56 /* graph.cc */; }; + 43AA83D0194EEB2600A67B56 /* graphnode.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82FB194EEB2600A67B56 /* graphnode.cc */; }; + 43AA83D1194EEB2600A67B56 /* iec1ppmdsp.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82FC194EEB2600A67B56 /* iec1ppmdsp.cc */; }; + 43AA83D2194EEB2600A67B56 /* iec2ppmdsp.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82FD194EEB2600A67B56 /* iec2ppmdsp.cc */; }; + 43AA83D3194EEB2600A67B56 /* import.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82FE194EEB2600A67B56 /* import.cc */; }; + 43AA83D4194EEB2600A67B56 /* instrument_info.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA82FF194EEB2600A67B56 /* instrument_info.cc */; }; + 43AA83D5194EEB2600A67B56 /* internal_return.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8300194EEB2600A67B56 /* internal_return.cc */; }; + 43AA83D6194EEB2600A67B56 /* internal_send.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8301194EEB2600A67B56 /* internal_send.cc */; }; + 43AA83D7194EEB2600A67B56 /* interpolation.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8302194EEB2600A67B56 /* interpolation.cc */; }; + 43AA83D8194EEB2600A67B56 /* io_processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8303194EEB2600A67B56 /* io_processor.cc */; }; + 43AA83D9194EEB2600A67B56 /* io.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8304194EEB2600A67B56 /* io.cc */; }; + 43AA83DA194EEB2600A67B56 /* kmeterdsp.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8305194EEB2600A67B56 /* kmeterdsp.cc */; }; + 43AA83DB194EEB2600A67B56 /* ladspa_plugin.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8306194EEB2600A67B56 /* ladspa_plugin.cc */; }; + 43AA83DC194EEB2600A67B56 /* linux_vst_support.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8307194EEB2600A67B56 /* linux_vst_support.cc */; }; + 43AA83DD194EEB2600A67B56 /* location_importer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8308194EEB2600A67B56 /* location_importer.cc */; }; + 43AA83DE194EEB2600A67B56 /* location.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8309194EEB2600A67B56 /* location.cc */; }; + 43AA83DF194EEB2600A67B56 /* ltc_slave.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA830A194EEB2600A67B56 /* ltc_slave.cc */; }; + 43AA83E0194EEB2600A67B56 /* lv2_evbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 43AA830B194EEB2600A67B56 /* lv2_evbuf.c */; }; + 43AA83E1194EEB2600A67B56 /* lv2_plugin.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA830C194EEB2600A67B56 /* lv2_plugin.cc */; }; + 43AA83E2194EEB2600A67B56 /* lxvst_plugin.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA830D194EEB2600A67B56 /* lxvst_plugin.cc */; }; + 43AA83E3194EEB2600A67B56 /* meter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA830E194EEB2600A67B56 /* meter.cc */; }; + 43AA83E4194EEB2600A67B56 /* midi_automation_list_binder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA830F194EEB2600A67B56 /* midi_automation_list_binder.cc */; }; + 43AA83E5194EEB2600A67B56 /* midi_buffer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8310194EEB2600A67B56 /* midi_buffer.cc */; }; + 43AA83E6194EEB2600A67B56 /* midi_clock_slave.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8311194EEB2600A67B56 /* midi_clock_slave.cc */; }; + 43AA83E7194EEB2600A67B56 /* midi_diskstream.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8312194EEB2600A67B56 /* midi_diskstream.cc */; }; + 43AA83E8194EEB2600A67B56 /* midi_model.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8313194EEB2600A67B56 /* midi_model.cc */; }; + 43AA83E9194EEB2600A67B56 /* midi_patch_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8314194EEB2600A67B56 /* midi_patch_manager.cc */; }; + 43AA83EA194EEB2600A67B56 /* midi_playlist_source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8315194EEB2600A67B56 /* midi_playlist_source.cc */; }; + 43AA83EB194EEB2600A67B56 /* midi_playlist.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8316194EEB2600A67B56 /* midi_playlist.cc */; }; + 43AA83EC194EEB2600A67B56 /* midi_port.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8317194EEB2600A67B56 /* midi_port.cc */; }; + 43AA83ED194EEB2600A67B56 /* midi_region.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8318194EEB2600A67B56 /* midi_region.cc */; }; + 43AA83EE194EEB2600A67B56 /* midi_ring_buffer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8319194EEB2600A67B56 /* midi_ring_buffer.cc */; }; + 43AA83EF194EEB2600A67B56 /* midi_source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA831A194EEB2600A67B56 /* midi_source.cc */; }; + 43AA83F0194EEB2600A67B56 /* midi_state_tracker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA831B194EEB2600A67B56 /* midi_state_tracker.cc */; }; + 43AA83F1194EEB2600A67B56 /* midi_stretch.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA831C194EEB2600A67B56 /* midi_stretch.cc */; }; + 43AA83F2194EEB2600A67B56 /* midi_track.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA831D194EEB2600A67B56 /* midi_track.cc */; }; + 43AA83F3194EEB2600A67B56 /* midi_ui.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA831E194EEB2600A67B56 /* midi_ui.cc */; }; + 43AA83F4194EEB2600A67B56 /* midiport_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA831F194EEB2600A67B56 /* midiport_manager.cc */; }; + 43AA83F5194EEB2600A67B56 /* mix.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8320194EEB2600A67B56 /* mix.cc */; }; + 43AA83F6194EEB2600A67B56 /* monitor_processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8321194EEB2600A67B56 /* monitor_processor.cc */; }; + 43AA83F7194EEB2600A67B56 /* mtc_slave.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8322194EEB2600A67B56 /* mtc_slave.cc */; }; + 43AA83F8194EEB2600A67B56 /* mtdm.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8323194EEB2600A67B56 /* mtdm.cc */; }; + 43AA83F9194EEB2600A67B56 /* mute_master.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8324194EEB2600A67B56 /* mute_master.cc */; }; + 43AA83FA194EEB2600A67B56 /* onset_detector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8325194EEB2600A67B56 /* onset_detector.cc */; }; + 43AA83FB194EEB2600A67B56 /* operations.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8326194EEB2600A67B56 /* operations.cc */; }; + 43AA83FC194EEB2600A67B56 /* pan_controllable.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8327194EEB2600A67B56 /* pan_controllable.cc */; }; + 43AA83FD194EEB2600A67B56 /* pannable.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8328194EEB2600A67B56 /* pannable.cc */; }; + 43AA83FE194EEB2600A67B56 /* panner_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8329194EEB2600A67B56 /* panner_manager.cc */; }; + 43AA83FF194EEB2600A67B56 /* panner_shell.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA832A194EEB2600A67B56 /* panner_shell.cc */; }; + 43AA8400194EEB2600A67B56 /* panner.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA832B194EEB2600A67B56 /* panner.cc */; }; + 43AA8401194EEB2600A67B56 /* pcm_utils.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA832C194EEB2600A67B56 /* pcm_utils.cc */; }; + 43AA8402194EEB2600A67B56 /* pi_controller.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA832D194EEB2600A67B56 /* pi_controller.cc */; }; + 43AA8403194EEB2600A67B56 /* playlist_factory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA832E194EEB2600A67B56 /* playlist_factory.cc */; }; + 43AA8404194EEB2600A67B56 /* playlist_source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA832F194EEB2600A67B56 /* playlist_source.cc */; }; + 43AA8405194EEB2600A67B56 /* playlist.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8330194EEB2600A67B56 /* playlist.cc */; }; + 43AA8406194EEB2600A67B56 /* plugin_insert.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8331194EEB2600A67B56 /* plugin_insert.cc */; }; + 43AA8407194EEB2600A67B56 /* plugin_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8332194EEB2600A67B56 /* plugin_manager.cc */; }; + 43AA8408194EEB2600A67B56 /* plugin.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8333194EEB2600A67B56 /* plugin.cc */; }; + 43AA8409194EEB2600A67B56 /* port_insert.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8334194EEB2600A67B56 /* port_insert.cc */; }; + 43AA840A194EEB2600A67B56 /* port_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8335194EEB2600A67B56 /* port_manager.cc */; }; + 43AA840B194EEB2600A67B56 /* port_set.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8336194EEB2600A67B56 /* port_set.cc */; }; + 43AA840C194EEB2600A67B56 /* port.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8337194EEB2600A67B56 /* port.cc */; }; + 43AA840D194EEB2600A67B56 /* process_thread.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8338194EEB2600A67B56 /* process_thread.cc */; }; + 43AA840E194EEB2600A67B56 /* processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8339194EEB2600A67B56 /* processor.cc */; }; + 43AA840F194EEB2600A67B56 /* progress.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA833A194EEB2600A67B56 /* progress.cc */; }; + 43AA8410194EEB2600A67B56 /* quantize.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA833B194EEB2600A67B56 /* quantize.cc */; }; + 43AA8411194EEB2600A67B56 /* rb_effect.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA833C194EEB2600A67B56 /* rb_effect.cc */; }; + 43AA8412194EEB2600A67B56 /* rc_configuration.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA833D194EEB2600A67B56 /* rc_configuration.cc */; }; + 43AA8413194EEB2600A67B56 /* rdff.c in Sources */ = {isa = PBXBuildFile; fileRef = 43AA833E194EEB2600A67B56 /* rdff.c */; }; + 43AA8414194EEB2600A67B56 /* recent_sessions.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA833F194EEB2600A67B56 /* recent_sessions.cc */; }; + 43AA8415194EEB2600A67B56 /* region_factory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8340194EEB2600A67B56 /* region_factory.cc */; }; + 43AA8416194EEB2600A67B56 /* region.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8341194EEB2600A67B56 /* region.cc */; }; + 43AA8417194EEB2600A67B56 /* resampled_source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8342194EEB2600A67B56 /* resampled_source.cc */; }; + 43AA8418194EEB2600A67B56 /* return.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8343194EEB2600A67B56 /* return.cc */; }; + 43AA8419194EEB2600A67B56 /* reverse.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8344194EEB2600A67B56 /* reverse.cc */; }; + 43AA841A194EEB2600A67B56 /* revision.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8345194EEB2600A67B56 /* revision.cc */; }; + 43AA841B194EEB2600A67B56 /* route_graph.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8346194EEB2600A67B56 /* route_graph.cc */; }; + 43AA841C194EEB2600A67B56 /* route_group_member.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8347194EEB2600A67B56 /* route_group_member.cc */; }; + 43AA841D194EEB2600A67B56 /* route_group.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8348194EEB2600A67B56 /* route_group.cc */; }; + 43AA841E194EEB2600A67B56 /* route.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8349194EEB2600A67B56 /* route.cc */; }; + 43AA841F194EEB2600A67B56 /* search_paths.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA834A194EEB2600A67B56 /* search_paths.cc */; }; + 43AA8420194EEB2600A67B56 /* send.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA834B194EEB2600A67B56 /* send.cc */; }; + 43AA8421194EEB2600A67B56 /* session_butler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA834C194EEB2600A67B56 /* session_butler.cc */; }; + 43AA8422194EEB2600A67B56 /* session_click.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA834D194EEB2600A67B56 /* session_click.cc */; }; + 43AA8423194EEB2600A67B56 /* session_command.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA834E194EEB2600A67B56 /* session_command.cc */; }; + 43AA8424194EEB2600A67B56 /* session_configuration.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA834F194EEB2600A67B56 /* session_configuration.cc */; }; + 43AA8425194EEB2600A67B56 /* session_directory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8350194EEB2600A67B56 /* session_directory.cc */; }; + 43AA8426194EEB2600A67B56 /* session_events.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8351194EEB2600A67B56 /* session_events.cc */; }; + 43AA8427194EEB2600A67B56 /* session_export.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8352194EEB2600A67B56 /* session_export.cc */; }; + 43AA8428194EEB2600A67B56 /* session_handle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8353194EEB2600A67B56 /* session_handle.cc */; }; + 43AA8429194EEB2600A67B56 /* session_ltc.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8354194EEB2600A67B56 /* session_ltc.cc */; }; + 43AA842A194EEB2600A67B56 /* session_metadata.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8355194EEB2600A67B56 /* session_metadata.cc */; }; + 43AA842B194EEB2600A67B56 /* session_midi.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8356194EEB2600A67B56 /* session_midi.cc */; }; + 43AA842C194EEB2600A67B56 /* session_object.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8357194EEB2600A67B56 /* session_object.cc */; }; + 43AA842D194EEB2600A67B56 /* session_playlists.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8358194EEB2600A67B56 /* session_playlists.cc */; }; + 43AA842E194EEB2600A67B56 /* session_process.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8359194EEB2600A67B56 /* session_process.cc */; }; + 43AA842F194EEB2600A67B56 /* session_rtevents.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA835A194EEB2600A67B56 /* session_rtevents.cc */; }; + 43AA8430194EEB2600A67B56 /* session_state_utils.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA835B194EEB2600A67B56 /* session_state_utils.cc */; }; + 43AA8431194EEB2600A67B56 /* session_state.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA835C194EEB2600A67B56 /* session_state.cc */; }; + 43AA8432194EEB2600A67B56 /* session_time.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA835D194EEB2600A67B56 /* session_time.cc */; }; + 43AA8433194EEB2600A67B56 /* session_transport.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA835E194EEB2600A67B56 /* session_transport.cc */; }; + 43AA8434194EEB2600A67B56 /* session_vst.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA835F194EEB2600A67B56 /* session_vst.cc */; }; + 43AA8435194EEB2600A67B56 /* session.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8360194EEB2600A67B56 /* session.cc */; }; + 43AA8436194EEB2600A67B56 /* slave.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8361194EEB2600A67B56 /* slave.cc */; }; + 43AA8437194EEB2600A67B56 /* smf_source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8362194EEB2600A67B56 /* smf_source.cc */; }; + 43AA8438194EEB2600A67B56 /* sndfile_helpers.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8363194EEB2600A67B56 /* sndfile_helpers.cc */; }; + 43AA8439194EEB2600A67B56 /* sndfileimportable.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8364194EEB2600A67B56 /* sndfileimportable.cc */; }; + 43AA843A194EEB2600A67B56 /* sndfilesource.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8365194EEB2600A67B56 /* sndfilesource.cc */; }; + 43AA843B194EEB2600A67B56 /* source_factory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8366194EEB2600A67B56 /* source_factory.cc */; }; + 43AA843C194EEB2600A67B56 /* source.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8367194EEB2600A67B56 /* source.cc */; }; + 43AA843D194EEB2600A67B56 /* speakers.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8368194EEB2600A67B56 /* speakers.cc */; }; + 43AA843E194EEB2600A67B56 /* srcfilesource.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8369194EEB2600A67B56 /* srcfilesource.cc */; }; + 43AA843F194EEB2600A67B56 /* sse_functions_64bit.s in Sources */ = {isa = PBXBuildFile; fileRef = 43AA836A194EEB2600A67B56 /* sse_functions_64bit.s */; }; + 43AA8440194EEB2600A67B56 /* sse_functions_xmm.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA836B194EEB2600A67B56 /* sse_functions_xmm.cc */; }; + 43AA8441194EEB2600A67B56 /* sse_functions.s in Sources */ = {isa = PBXBuildFile; fileRef = 43AA836C194EEB2600A67B56 /* sse_functions.s */; }; + 43AA8442194EEB2600A67B56 /* st_pitch.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA836D194EEB2600A67B56 /* st_pitch.cc */; }; + 43AA8443194EEB2600A67B56 /* st_stretch.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA836E194EEB2600A67B56 /* st_stretch.cc */; }; + 43AA8444194EEB2600A67B56 /* strip_silence.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA836F194EEB2600A67B56 /* strip_silence.cc */; }; + 43AA8445194EEB2600A67B56 /* system_exec.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8370194EEB2600A67B56 /* system_exec.cc */; }; + 43AA8446194EEB2600A67B56 /* tape_file_matcher.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8371194EEB2600A67B56 /* tape_file_matcher.cc */; }; + 43AA8447194EEB2600A67B56 /* template_utils.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8372194EEB2600A67B56 /* template_utils.cc */; }; + 43AA8448194EEB2600A67B56 /* tempo_map_importer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8373194EEB2600A67B56 /* tempo_map_importer.cc */; }; + 43AA8449194EEB2600A67B56 /* tempo.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8374194EEB2600A67B56 /* tempo.cc */; }; + 43AA844A194EEB2600A67B56 /* thread_buffers.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8375194EEB2600A67B56 /* thread_buffers.cc */; }; + 43AA844B194EEB2600A67B56 /* ticker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8376194EEB2600A67B56 /* ticker.cc */; }; + 43AA844C194EEB2600A67B56 /* track.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8377194EEB2600A67B56 /* track.cc */; }; + 43AA844D194EEB2600A67B56 /* transient_detector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8378194EEB2600A67B56 /* transient_detector.cc */; }; + 43AA844E194EEB2600A67B56 /* unknown_processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8379194EEB2600A67B56 /* unknown_processor.cc */; }; + 43AA844F194EEB2600A67B56 /* uri_map.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA837A194EEB2600A67B56 /* uri_map.cc */; }; + 43AA8450194EEB2600A67B56 /* user_bundle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA837B194EEB2600A67B56 /* user_bundle.cc */; }; + 43AA8451194EEB2600A67B56 /* utils.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA837C194EEB2600A67B56 /* utils.cc */; }; + 43AA8452194EEB2600A67B56 /* version.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA837D194EEB2600A67B56 /* version.cc */; }; + 43AA8453194EEB2600A67B56 /* vst_info_file.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA837E194EEB2600A67B56 /* vst_info_file.cc */; }; + 43AA8454194EEB2600A67B56 /* vst_plugin.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA837F194EEB2600A67B56 /* vst_plugin.cc */; }; + 43AA8455194EEB2600A67B56 /* vumeterdsp.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8380194EEB2600A67B56 /* vumeterdsp.cc */; }; + 43AA8456194EEB2600A67B56 /* windows_vst_plugin.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8381194EEB2600A67B56 /* windows_vst_plugin.cc */; }; + 43AA8457194EEB2600A67B56 /* worker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8382194EEB2600A67B56 /* worker.cc */; }; + 43AA84B9194EEB5F00A67B56 /* audio_engine_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8459194EEB5F00A67B56 /* audio_engine_test.cc */; }; + 43AA84BA194EEB5F00A67B56 /* audio_engine_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA845A194EEB5F00A67B56 /* audio_engine_test.h */; }; + 43AA84BB194EEB5F00A67B56 /* audio_region_read_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA845B194EEB5F00A67B56 /* audio_region_read_test.cc */; }; + 43AA84BC194EEB5F00A67B56 /* audio_region_read_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA845C194EEB5F00A67B56 /* audio_region_read_test.h */; }; + 43AA84BD194EEB5F00A67B56 /* audio_region_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA845D194EEB5F00A67B56 /* audio_region_test.cc */; }; + 43AA84BE194EEB5F00A67B56 /* audio_region_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA845E194EEB5F00A67B56 /* audio_region_test.h */; }; + 43AA84BF194EEB5F00A67B56 /* automation_list_property_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA845F194EEB5F00A67B56 /* automation_list_property_test.cc */; }; + 43AA84C0194EEB5F00A67B56 /* automation_list_property_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8460194EEB5F00A67B56 /* automation_list_property_test.h */; }; + 43AA84C1194EEB5F00A67B56 /* bbt_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8461194EEB5F00A67B56 /* bbt_test.cc */; }; + 43AA84C2194EEB5F00A67B56 /* bbt_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8462194EEB5F00A67B56 /* bbt_test.h */; }; + 43AA84C3194EEB5F00A67B56 /* combine_regions_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8463194EEB5F00A67B56 /* combine_regions_test.cc */; }; + 43AA84C4194EEB5F00A67B56 /* combine_regions_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8464194EEB5F00A67B56 /* combine_regions_test.h */; }; + 43AA84C5194EEB5F00A67B56 /* control_surfaces_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8465194EEB5F00A67B56 /* control_surfaces_test.cc */; }; + 43AA84C6194EEB5F00A67B56 /* control_surfaces_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8466194EEB5F00A67B56 /* control_surfaces_test.h */; }; + 43AA84C7194EEB5F00A67B56 /* dummy_lxvst.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA847C194EEB5F00A67B56 /* dummy_lxvst.cc */; }; + 43AA84C8194EEB5F00A67B56 /* framepos_minus_beats_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA847D194EEB5F00A67B56 /* framepos_minus_beats_test.cc */; }; + 43AA84C9194EEB5F00A67B56 /* framepos_minus_beats_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA847E194EEB5F00A67B56 /* framepos_minus_beats_test.h */; }; + 43AA84CA194EEB5F00A67B56 /* framepos_plus_beats_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA847F194EEB5F00A67B56 /* framepos_plus_beats_test.cc */; }; + 43AA84CB194EEB5F00A67B56 /* framepos_plus_beats_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8480194EEB5F00A67B56 /* framepos_plus_beats_test.h */; }; + 43AA84CC194EEB5F00A67B56 /* framewalk_to_beats_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8481194EEB5F00A67B56 /* framewalk_to_beats_test.cc */; }; + 43AA84CD194EEB5F00A67B56 /* framewalk_to_beats_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8482194EEB5F00A67B56 /* framewalk_to_beats_test.h */; }; + 43AA84CE194EEB5F00A67B56 /* interpolation_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8483194EEB5F00A67B56 /* interpolation_test.cc */; }; + 43AA84CF194EEB5F00A67B56 /* interpolation_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8484194EEB5F00A67B56 /* interpolation_test.h */; }; + 43AA84D0194EEB5F00A67B56 /* jack_utils_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8485194EEB5F00A67B56 /* jack_utils_test.cc */; }; + 43AA84D1194EEB5F00A67B56 /* jack_utils_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8486194EEB5F00A67B56 /* jack_utils_test.h */; }; + 43AA84D2194EEB5F00A67B56 /* load_session.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8487194EEB5F00A67B56 /* load_session.cc */; }; + 43AA84D3194EEB5F00A67B56 /* load_sessions_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8488194EEB5F00A67B56 /* load_sessions_test.cc */; }; + 43AA84D4194EEB5F00A67B56 /* load_sessions_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8489194EEB5F00A67B56 /* load_sessions_test.h */; }; + 43AA84D5194EEB5F00A67B56 /* midi_clock_slave_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA848A194EEB5F00A67B56 /* midi_clock_slave_test.cc */; }; + 43AA84D6194EEB5F00A67B56 /* midi_clock_slave_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA848B194EEB5F00A67B56 /* midi_clock_slave_test.h */; }; + 43AA84D7194EEB5F00A67B56 /* mtdm_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA848C194EEB5F00A67B56 /* mtdm_test.cc */; }; + 43AA84D8194EEB5F00A67B56 /* mtdm_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA848D194EEB5F00A67B56 /* mtdm_test.h */; }; + 43AA84D9194EEB5F00A67B56 /* playlist_equivalent_regions_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA848E194EEB5F00A67B56 /* playlist_equivalent_regions_test.cc */; }; + 43AA84DA194EEB5F00A67B56 /* playlist_equivalent_regions_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA848F194EEB5F00A67B56 /* playlist_equivalent_regions_test.h */; }; + 43AA84DB194EEB5F00A67B56 /* playlist_layering_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8490194EEB5F00A67B56 /* playlist_layering_test.cc */; }; + 43AA84DC194EEB5F00A67B56 /* playlist_layering_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8491194EEB5F00A67B56 /* playlist_layering_test.h */; }; + 43AA84DD194EEB5F00A67B56 /* playlist_read_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8492194EEB5F00A67B56 /* playlist_read_test.cc */; }; + 43AA84DE194EEB5F00A67B56 /* playlist_read_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8493194EEB5F00A67B56 /* playlist_read_test.h */; }; + 43AA84DF194EEB5F00A67B56 /* plugins_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8494194EEB5F00A67B56 /* plugins_test.cc */; }; + 43AA84E0194EEB5F00A67B56 /* plugins_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8495194EEB5F00A67B56 /* plugins_test.h */; }; + 43AA84E1194EEB5F00A67B56 /* load_session.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8497194EEB5F00A67B56 /* load_session.cc */; }; + 43AA84E2194EEB5F00A67B56 /* lots_of_regions.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8498194EEB5F00A67B56 /* lots_of_regions.cc */; }; + 43AA84E3194EEB5F00A67B56 /* runpc.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA8499194EEB5F00A67B56 /* runpc.cc */; }; + 43AA84E4194EEB5F00A67B56 /* region_naming_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84AA194EEB5F00A67B56 /* region_naming_test.cc */; }; + 43AA84E5194EEB5F00A67B56 /* region_naming_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84AB194EEB5F00A67B56 /* region_naming_test.h */; }; + 43AA84E6194EEB5F00A67B56 /* resampled_source_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84AC194EEB5F00A67B56 /* resampled_source_test.cc */; }; + 43AA84E7194EEB5F00A67B56 /* resampled_source_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84AD194EEB5F00A67B56 /* resampled_source_test.h */; }; + 43AA84E8194EEB5F00A67B56 /* session_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84AE194EEB5F00A67B56 /* session_test.cc */; }; + 43AA84E9194EEB5F00A67B56 /* session_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84AF194EEB5F00A67B56 /* session_test.h */; }; + 43AA84EA194EEB5F00A67B56 /* tempo_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84B0194EEB5F00A67B56 /* tempo_test.cc */; }; + 43AA84EB194EEB5F00A67B56 /* tempo_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84B1194EEB5F00A67B56 /* tempo_test.h */; }; + 43AA84EC194EEB5F00A67B56 /* test_common.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84B2194EEB5F00A67B56 /* test_common.cc */; }; + 43AA84ED194EEB5F00A67B56 /* test_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84B3194EEB5F00A67B56 /* test_common.h */; }; + 43AA84EE194EEB5F00A67B56 /* test_needing_session.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84B4194EEB5F00A67B56 /* test_needing_session.cc */; }; + 43AA84EF194EEB5F00A67B56 /* test_needing_session.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84B5194EEB5F00A67B56 /* test_needing_session.h */; }; + 43AA84F0194EEB5F00A67B56 /* test_util.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84B6194EEB5F00A67B56 /* test_util.cc */; }; + 43AA84F1194EEB5F00A67B56 /* test_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84B7194EEB5F00A67B56 /* test_util.h */; }; + 43AA84F2194EEB5F00A67B56 /* testrunner.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA84B8194EEB5F00A67B56 /* testrunner.cc */; }; + 43AA85DC194EEB8B00A67B56 /* amp.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84F4194EEB8B00A67B56 /* amp.h */; }; + 43AA85DD194EEB8B00A67B56 /* analyser.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84F5194EEB8B00A67B56 /* analyser.h */; }; + 43AA85DE194EEB8B00A67B56 /* ardour.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84F6194EEB8B00A67B56 /* ardour.h */; }; + 43AA85DF194EEB8B00A67B56 /* async_midi_port.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84F7194EEB8B00A67B56 /* async_midi_port.h */; }; + 43AA85E0194EEB8B00A67B56 /* audio_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84F8194EEB8B00A67B56 /* audio_backend.h */; }; + 43AA85E1194EEB8B00A67B56 /* audio_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84F9194EEB8B00A67B56 /* audio_buffer.h */; }; + 43AA85E2194EEB8B00A67B56 /* audio_diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84FA194EEB8B00A67B56 /* audio_diskstream.h */; }; + 43AA85E3194EEB8B00A67B56 /* audio_library.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84FB194EEB8B00A67B56 /* audio_library.h */; }; + 43AA85E4194EEB8B00A67B56 /* audio_playlist_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84FC194EEB8B00A67B56 /* audio_playlist_importer.h */; }; + 43AA85E5194EEB8B00A67B56 /* audio_playlist_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84FD194EEB8B00A67B56 /* audio_playlist_source.h */; }; + 43AA85E6194EEB8B00A67B56 /* audio_port.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84FE194EEB8B00A67B56 /* audio_port.h */; }; + 43AA85E7194EEB8B00A67B56 /* audio_region_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA84FF194EEB8B00A67B56 /* audio_region_importer.h */; }; + 43AA85E8194EEB8B00A67B56 /* audio_track_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8500194EEB8B00A67B56 /* audio_track_importer.h */; }; + 43AA85E9194EEB8B00A67B56 /* audio_track.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8501194EEB8B00A67B56 /* audio_track.h */; }; + 43AA85EA194EEB8B00A67B56 /* audio_unit.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8502194EEB8B00A67B56 /* audio_unit.h */; }; + 43AA85EB194EEB8B00A67B56 /* audioanalyser.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8503194EEB8B00A67B56 /* audioanalyser.h */; }; + 43AA85EC194EEB8B00A67B56 /* audioengine.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8504194EEB8B00A67B56 /* audioengine.h */; }; + 43AA85ED194EEB8B00A67B56 /* audiofile_tagger.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8505194EEB8B00A67B56 /* audiofile_tagger.h */; }; + 43AA85EE194EEB8B00A67B56 /* audiofilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8506194EEB8B00A67B56 /* audiofilesource.h */; }; + 43AA85EF194EEB8B00A67B56 /* audioplaylist.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8507194EEB8B00A67B56 /* audioplaylist.h */; }; + 43AA85F0194EEB8B00A67B56 /* audioregion.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8508194EEB8B00A67B56 /* audioregion.h */; }; + 43AA85F1194EEB8B00A67B56 /* audiosource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8509194EEB8B00A67B56 /* audiosource.h */; }; + 43AA85F2194EEB8B00A67B56 /* auditioner.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA850A194EEB8B00A67B56 /* auditioner.h */; }; + 43AA85F3194EEB8B00A67B56 /* auto_bundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA850B194EEB8B00A67B56 /* auto_bundle.h */; }; + 43AA85F4194EEB8B00A67B56 /* automatable_sequence.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA850C194EEB8B00A67B56 /* automatable_sequence.h */; }; + 43AA85F5194EEB8B00A67B56 /* automatable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA850D194EEB8B00A67B56 /* automatable.h */; }; + 43AA85F6194EEB8B00A67B56 /* automation_control.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA850E194EEB8B00A67B56 /* automation_control.h */; }; + 43AA85F7194EEB8B00A67B56 /* automation_list.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA850F194EEB8B00A67B56 /* automation_list.h */; }; + 43AA85F8194EEB8B00A67B56 /* automation_watch.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8510194EEB8B00A67B56 /* automation_watch.h */; }; + 43AA85F9194EEB8B00A67B56 /* beats_frames_converter.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8511194EEB8B00A67B56 /* beats_frames_converter.h */; }; + 43AA85FA194EEB8B00A67B56 /* broadcast_info.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8512194EEB8B00A67B56 /* broadcast_info.h */; }; + 43AA85FB194EEB8B00A67B56 /* buffer_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8513194EEB8B00A67B56 /* buffer_manager.h */; }; + 43AA85FC194EEB8B00A67B56 /* buffer_set.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8514194EEB8B00A67B56 /* buffer_set.h */; }; + 43AA85FD194EEB8B00A67B56 /* buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8515194EEB8B00A67B56 /* buffer.h */; }; + 43AA85FE194EEB8B00A67B56 /* bundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8516194EEB8B00A67B56 /* bundle.h */; }; + 43AA85FF194EEB8B00A67B56 /* butler.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8517194EEB8B00A67B56 /* butler.h */; }; + 43AA8600194EEB8B00A67B56 /* caimportable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8518194EEB8B00A67B56 /* caimportable.h */; }; + 43AA8601194EEB8B00A67B56 /* capturing_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8519194EEB8B00A67B56 /* capturing_processor.h */; }; + 43AA8602194EEB8B00A67B56 /* chan_count.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA851A194EEB8B00A67B56 /* chan_count.h */; }; + 43AA8603194EEB8B00A67B56 /* chan_mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA851B194EEB8B00A67B56 /* chan_mapping.h */; }; + 43AA8604194EEB8B00A67B56 /* click.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA851C194EEB8B00A67B56 /* click.h */; }; + 43AA8605194EEB8B00A67B56 /* comparable_shared_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA851D194EEB8B00A67B56 /* comparable_shared_ptr.h */; }; + 43AA8606194EEB8B00A67B56 /* configuration_variable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA851E194EEB8B00A67B56 /* configuration_variable.h */; }; + 43AA8607194EEB8B00A67B56 /* configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA851F194EEB8B00A67B56 /* configuration.h */; }; + 43AA8608194EEB8B00A67B56 /* control_protocol_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8520194EEB8B00A67B56 /* control_protocol_manager.h */; }; + 43AA8609194EEB8B00A67B56 /* coreaudiosource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8521194EEB8B00A67B56 /* coreaudiosource.h */; }; + 43AA860A194EEB8B00A67B56 /* cycle_timer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8522194EEB8B00A67B56 /* cycle_timer.h */; }; + 43AA860B194EEB8B00A67B56 /* cycles.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8523194EEB8B00A67B56 /* cycles.h */; }; + 43AA860C194EEB8B00A67B56 /* data_type.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8524194EEB8B00A67B56 /* data_type.h */; }; + 43AA860D194EEB8B00A67B56 /* dB.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8525194EEB8B00A67B56 /* dB.h */; }; + 43AA860E194EEB8B00A67B56 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8526194EEB8B00A67B56 /* debug.h */; }; + 43AA860F194EEB8B00A67B56 /* delivery.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8527194EEB8B00A67B56 /* delivery.h */; }; + 43AA8610194EEB8B00A67B56 /* directory_names.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8528194EEB8B00A67B56 /* directory_names.h */; }; + 43AA8611194EEB8B00A67B56 /* diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8529194EEB8B00A67B56 /* diskstream.h */; }; + 43AA8612194EEB8B00A67B56 /* element_import_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA852A194EEB8B00A67B56 /* element_import_handler.h */; }; + 43AA8613194EEB8B00A67B56 /* element_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA852B194EEB8B00A67B56 /* element_importer.h */; }; + 43AA8614194EEB8B00A67B56 /* engine_state_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA852C194EEB8B00A67B56 /* engine_state_controller.h */; }; + 43AA8615194EEB8B00A67B56 /* event_type_map.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA852D194EEB8B00A67B56 /* event_type_map.h */; }; + 43AA8616194EEB8B00A67B56 /* export_channel_configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA852E194EEB8B00A67B56 /* export_channel_configuration.h */; }; + 43AA8617194EEB8B00A67B56 /* export_channel.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA852F194EEB8B00A67B56 /* export_channel.h */; }; + 43AA8618194EEB8B00A67B56 /* export_failed.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8530194EEB8B00A67B56 /* export_failed.h */; }; + 43AA8619194EEB8B00A67B56 /* export_filename.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8531194EEB8B00A67B56 /* export_filename.h */; }; + 43AA861A194EEB8B00A67B56 /* export_format_base.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8532194EEB8B00A67B56 /* export_format_base.h */; }; + 43AA861B194EEB8B00A67B56 /* export_format_compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8533194EEB8B00A67B56 /* export_format_compatibility.h */; }; + 43AA861C194EEB8B00A67B56 /* export_format_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8534194EEB8B00A67B56 /* export_format_manager.h */; }; + 43AA861D194EEB8B00A67B56 /* export_format_specification.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8535194EEB8B00A67B56 /* export_format_specification.h */; }; + 43AA861E194EEB8B00A67B56 /* export_formats.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8536194EEB8B00A67B56 /* export_formats.h */; }; + 43AA861F194EEB8B00A67B56 /* export_graph_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8537194EEB8B00A67B56 /* export_graph_builder.h */; }; + 43AA8620194EEB8B00A67B56 /* export_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8538194EEB8B00A67B56 /* export_handler.h */; }; + 43AA8621194EEB8B00A67B56 /* export_multiplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8539194EEB8B00A67B56 /* export_multiplication.h */; }; + 43AA8622194EEB8B00A67B56 /* export_pointers.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA853A194EEB8B00A67B56 /* export_pointers.h */; }; + 43AA8623194EEB8B00A67B56 /* export_preset.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA853B194EEB8B00A67B56 /* export_preset.h */; }; + 43AA8624194EEB8B00A67B56 /* export_profile_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA853C194EEB8B00A67B56 /* export_profile_manager.h */; }; + 43AA8625194EEB8B00A67B56 /* export_status.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA853D194EEB8B00A67B56 /* export_status.h */; }; + 43AA8626194EEB8B00A67B56 /* export_timespan.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA853E194EEB8B00A67B56 /* export_timespan.h */; }; + 43AA8627194EEB8B00A67B56 /* file_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA853F194EEB8B00A67B56 /* file_source.h */; }; + 43AA8628194EEB8B00A67B56 /* filename_extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8540194EEB8B00A67B56 /* filename_extensions.h */; }; + 43AA8629194EEB8B00A67B56 /* filesystem_paths.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8541194EEB8B00A67B56 /* filesystem_paths.h */; }; + 43AA862A194EEB8B00A67B56 /* filter.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8542194EEB8B00A67B56 /* filter.h */; }; + 43AA862B194EEB8B00A67B56 /* graph.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8543194EEB8B00A67B56 /* graph.h */; }; + 43AA862C194EEB8B00A67B56 /* graphnode.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8544194EEB8B00A67B56 /* graphnode.h */; }; + 43AA862D194EEB8B00A67B56 /* iec1ppmdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8545194EEB8B00A67B56 /* iec1ppmdsp.h */; }; + 43AA862E194EEB8B00A67B56 /* iec2ppmdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8546194EEB8B00A67B56 /* iec2ppmdsp.h */; }; + 43AA862F194EEB8B00A67B56 /* import_status.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8547194EEB8B00A67B56 /* import_status.h */; }; + 43AA8630194EEB8B00A67B56 /* importable_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8548194EEB8B00A67B56 /* importable_source.h */; }; + 43AA8631194EEB8B00A67B56 /* instrument_info.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8549194EEB8B00A67B56 /* instrument_info.h */; }; + 43AA8632194EEB8B00A67B56 /* internal_return.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA854A194EEB8B00A67B56 /* internal_return.h */; }; + 43AA8633194EEB8B00A67B56 /* internal_send.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA854B194EEB8B00A67B56 /* internal_send.h */; }; + 43AA8634194EEB8B00A67B56 /* interpolation.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA854C194EEB8B00A67B56 /* interpolation.h */; }; + 43AA8635194EEB8B00A67B56 /* interthread_info.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA854D194EEB8B00A67B56 /* interthread_info.h */; }; + 43AA8636194EEB8B00A67B56 /* io_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA854E194EEB8B00A67B56 /* io_processor.h */; }; + 43AA8637194EEB8B00A67B56 /* io.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA854F194EEB8B00A67B56 /* io.h */; }; + 43AA8638194EEB8B00A67B56 /* jack_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8550194EEB8B00A67B56 /* jack_utils.h */; }; + 43AA8639194EEB8B00A67B56 /* kmeterdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8551194EEB8B00A67B56 /* kmeterdsp.h */; }; + 43AA863A194EEB8B00A67B56 /* ladspa_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8552194EEB8B00A67B56 /* ladspa_plugin.h */; }; + 43AA863B194EEB8B00A67B56 /* ladspa.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8553194EEB8B00A67B56 /* ladspa.h */; }; + 43AA863C194EEB8B00A67B56 /* latent.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8554194EEB8B00A67B56 /* latent.h */; }; + 43AA863D194EEB8B00A67B56 /* libardour_visibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8555194EEB8B00A67B56 /* libardour_visibility.h */; }; + 43AA863E194EEB8B00A67B56 /* linux_vst_support.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8556194EEB8B00A67B56 /* linux_vst_support.h */; }; + 43AA863F194EEB8B00A67B56 /* location_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8557194EEB8B00A67B56 /* location_importer.h */; }; + 43AA8640194EEB8B00A67B56 /* location.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8558194EEB8B00A67B56 /* location.h */; }; + 43AA8641194EEB8B00A67B56 /* logcurve.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8559194EEB8B00A67B56 /* logcurve.h */; }; + 43AA8642194EEB8B00A67B56 /* lv2_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA855A194EEB8B00A67B56 /* lv2_plugin.h */; }; + 43AA8643194EEB8B00A67B56 /* lxvst_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA855B194EEB8B00A67B56 /* lxvst_plugin.h */; }; + 43AA8644194EEB8B00A67B56 /* meter.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA855C194EEB8B00A67B56 /* meter.h */; }; + 43AA8645194EEB8B00A67B56 /* midi_automation_list_binder.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA855D194EEB8B00A67B56 /* midi_automation_list_binder.h */; }; + 43AA8646194EEB8B00A67B56 /* midi_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA855E194EEB8B00A67B56 /* midi_buffer.h */; }; + 43AA8647194EEB8B00A67B56 /* midi_diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA855F194EEB8B00A67B56 /* midi_diskstream.h */; }; + 43AA8648194EEB8B00A67B56 /* midi_model.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8560194EEB8B00A67B56 /* midi_model.h */; }; + 43AA8649194EEB8B00A67B56 /* midi_operator.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8561194EEB8B00A67B56 /* midi_operator.h */; }; + 43AA864A194EEB8B00A67B56 /* midi_patch_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8562194EEB8B00A67B56 /* midi_patch_manager.h */; }; + 43AA864B194EEB8B00A67B56 /* midi_playlist_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8563194EEB8B00A67B56 /* midi_playlist_source.h */; }; + 43AA864C194EEB8B00A67B56 /* midi_playlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8564194EEB8B00A67B56 /* midi_playlist.h */; }; + 43AA864D194EEB8B00A67B56 /* midi_port.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8565194EEB8B00A67B56 /* midi_port.h */; }; + 43AA864E194EEB8B00A67B56 /* midi_region.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8566194EEB8B00A67B56 /* midi_region.h */; }; + 43AA864F194EEB8B00A67B56 /* midi_ring_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8567194EEB8B00A67B56 /* midi_ring_buffer.h */; }; + 43AA8650194EEB8B00A67B56 /* midi_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8568194EEB8B00A67B56 /* midi_source.h */; }; + 43AA8651194EEB8B00A67B56 /* midi_state_tracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8569194EEB8B00A67B56 /* midi_state_tracker.h */; }; + 43AA8652194EEB8B00A67B56 /* midi_stretch.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA856A194EEB8B00A67B56 /* midi_stretch.h */; }; + 43AA8653194EEB8B00A67B56 /* midi_track.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA856B194EEB8B00A67B56 /* midi_track.h */; }; + 43AA8654194EEB8B00A67B56 /* midi_ui.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA856C194EEB8B00A67B56 /* midi_ui.h */; }; + 43AA8655194EEB8B00A67B56 /* midiport_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA856D194EEB8B00A67B56 /* midiport_manager.h */; }; + 43AA8656194EEB8B00A67B56 /* mix.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA856E194EEB8B00A67B56 /* mix.h */; }; + 43AA8657194EEB8B00A67B56 /* monitor_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA856F194EEB8B00A67B56 /* monitor_processor.h */; }; + 43AA8658194EEB8B00A67B56 /* movable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8570194EEB8B00A67B56 /* movable.h */; }; + 43AA8659194EEB8B00A67B56 /* msvc_libardour.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8571194EEB8B00A67B56 /* msvc_libardour.h */; }; + 43AA865A194EEB8B00A67B56 /* mtdm.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8572194EEB8B00A67B56 /* mtdm.h */; }; + 43AA865B194EEB8B00A67B56 /* mute_master.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8573194EEB8B00A67B56 /* mute_master.h */; }; + 43AA865C194EEB8B00A67B56 /* noise.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8574194EEB8B00A67B56 /* noise.h */; }; + 43AA865D194EEB8B00A67B56 /* onset_detector.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8575194EEB8B00A67B56 /* onset_detector.h */; }; + 43AA865E194EEB8B00A67B56 /* operations.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8576194EEB8B00A67B56 /* operations.h */; }; + 43AA865F194EEB8B00A67B56 /* pan_controllable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8577194EEB8B00A67B56 /* pan_controllable.h */; }; + 43AA8660194EEB8B00A67B56 /* pannable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8578194EEB8B00A67B56 /* pannable.h */; }; + 43AA8661194EEB8B00A67B56 /* panner_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8579194EEB8B00A67B56 /* panner_manager.h */; }; + 43AA8662194EEB8B00A67B56 /* panner_shell.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA857A194EEB8B00A67B56 /* panner_shell.h */; }; + 43AA8663194EEB8B00A67B56 /* panner.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA857B194EEB8B00A67B56 /* panner.h */; }; + 43AA8664194EEB8B00A67B56 /* pcm_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA857C194EEB8B00A67B56 /* pcm_utils.h */; }; + 43AA8665194EEB8B00A67B56 /* peak.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA857D194EEB8B00A67B56 /* peak.h */; }; + 43AA8666194EEB8B00A67B56 /* pi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA857E194EEB8B00A67B56 /* pi_controller.h */; }; + 43AA8667194EEB8B00A67B56 /* pitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA857F194EEB8B00A67B56 /* pitch.h */; }; + 43AA8668194EEB8B00A67B56 /* playlist_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8580194EEB8B00A67B56 /* playlist_factory.h */; }; + 43AA8669194EEB8B00A67B56 /* playlist_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8581194EEB8B00A67B56 /* playlist_source.h */; }; + 43AA866A194EEB8B00A67B56 /* playlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8582194EEB8B00A67B56 /* playlist.h */; }; + 43AA866B194EEB8B00A67B56 /* plugin_insert.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8583194EEB8B00A67B56 /* plugin_insert.h */; }; + 43AA866C194EEB8B00A67B56 /* plugin_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8584194EEB8B00A67B56 /* plugin_manager.h */; }; + 43AA866D194EEB8B00A67B56 /* plugin_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8585194EEB8B00A67B56 /* plugin_types.h */; }; + 43AA866E194EEB8B00A67B56 /* plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8586194EEB8B00A67B56 /* plugin.h */; }; + 43AA866F194EEB8B00A67B56 /* port_engine.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8587194EEB8B00A67B56 /* port_engine.h */; }; + 43AA8670194EEB8B00A67B56 /* port_insert.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8588194EEB8B00A67B56 /* port_insert.h */; }; + 43AA8671194EEB8B00A67B56 /* port_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8589194EEB8B00A67B56 /* port_manager.h */; }; + 43AA8672194EEB8B00A67B56 /* port_set.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA858A194EEB8B00A67B56 /* port_set.h */; }; + 43AA8673194EEB8B00A67B56 /* port.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA858B194EEB8B00A67B56 /* port.h */; }; + 43AA8674194EEB8B00A67B56 /* process_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA858C194EEB8B00A67B56 /* process_thread.h */; }; + 43AA8675194EEB8B00A67B56 /* processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA858D194EEB8B00A67B56 /* processor.h */; }; + 43AA8676194EEB8B00A67B56 /* profile.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA858E194EEB8B00A67B56 /* profile.h */; }; + 43AA8677194EEB8B00A67B56 /* progress.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA858F194EEB8B00A67B56 /* progress.h */; }; + 43AA8678194EEB8B00A67B56 /* proxy_controllable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8590194EEB8B00A67B56 /* proxy_controllable.h */; }; + 43AA8679194EEB8B00A67B56 /* public_diskstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8591194EEB8B00A67B56 /* public_diskstream.h */; }; + 43AA867A194EEB8B00A67B56 /* quantize.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8592194EEB8B00A67B56 /* quantize.h */; }; + 43AA867B194EEB8B00A67B56 /* rb_effect.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8593194EEB8B00A67B56 /* rb_effect.h */; }; + 43AA867C194EEB8B00A67B56 /* rc_configuration_vars.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8594194EEB8B00A67B56 /* rc_configuration_vars.h */; }; + 43AA867D194EEB8B00A67B56 /* rc_configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8595194EEB8B00A67B56 /* rc_configuration.h */; }; + 43AA867E194EEB8B00A67B56 /* readable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8596194EEB8B00A67B56 /* readable.h */; }; + 43AA867F194EEB8B00A67B56 /* recent_sessions.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8597194EEB8B00A67B56 /* recent_sessions.h */; }; + 43AA8680194EEB8B00A67B56 /* region_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8598194EEB8B00A67B56 /* region_factory.h */; }; + 43AA8681194EEB8B00A67B56 /* region_sorters.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8599194EEB8B00A67B56 /* region_sorters.h */; }; + 43AA8682194EEB8B00A67B56 /* region.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA859A194EEB8B00A67B56 /* region.h */; }; + 43AA8683194EEB8B00A67B56 /* resampled_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA859B194EEB8B00A67B56 /* resampled_source.h */; }; + 43AA8684194EEB8B00A67B56 /* return.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA859C194EEB8B00A67B56 /* return.h */; }; + 43AA8685194EEB8B00A67B56 /* reverse.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA859D194EEB8B00A67B56 /* reverse.h */; }; + 43AA8686194EEB8B00A67B56 /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA859E194EEB8B00A67B56 /* revision.h */; }; + 43AA8687194EEB8B00A67B56 /* route_graph.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA859F194EEB8B00A67B56 /* route_graph.h */; }; + 43AA8688194EEB8B00A67B56 /* route_group_member.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A0194EEB8B00A67B56 /* route_group_member.h */; }; + 43AA8689194EEB8B00A67B56 /* route_group_specialized.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A1194EEB8B00A67B56 /* route_group_specialized.h */; }; + 43AA868A194EEB8B00A67B56 /* route_group.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A2194EEB8B00A67B56 /* route_group.h */; }; + 43AA868B194EEB8B00A67B56 /* route.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A3194EEB8B00A67B56 /* route.h */; }; + 43AA868C194EEB8B00A67B56 /* runtime_functions.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A4194EEB8B00A67B56 /* runtime_functions.h */; }; + 43AA868D194EEB8B00A67B56 /* search_paths.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A5194EEB8B00A67B56 /* search_paths.h */; }; + 43AA868E194EEB8B00A67B56 /* send.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A6194EEB8B00A67B56 /* send.h */; }; + 43AA868F194EEB8B00A67B56 /* session_configuration_vars.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A7194EEB8B00A67B56 /* session_configuration_vars.h */; }; + 43AA8690194EEB8B00A67B56 /* session_configuration.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A8194EEB8B00A67B56 /* session_configuration.h */; }; + 43AA8691194EEB8B00A67B56 /* session_directory.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85A9194EEB8B00A67B56 /* session_directory.h */; }; + 43AA8692194EEB8B00A67B56 /* session_event.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85AA194EEB8B00A67B56 /* session_event.h */; }; + 43AA8693194EEB8B00A67B56 /* session_handle.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85AB194EEB8B00A67B56 /* session_handle.h */; }; + 43AA8694194EEB8B00A67B56 /* session_metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85AC194EEB8B00A67B56 /* session_metadata.h */; }; + 43AA8695194EEB8B00A67B56 /* session_object.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85AD194EEB8B00A67B56 /* session_object.h */; }; + 43AA8696194EEB8B00A67B56 /* session_playlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85AE194EEB8B00A67B56 /* session_playlist.h */; }; + 43AA8697194EEB8B00A67B56 /* session_playlists.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85AF194EEB8B00A67B56 /* session_playlists.h */; }; + 43AA8698194EEB8B00A67B56 /* session_route.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B0194EEB8B00A67B56 /* session_route.h */; }; + 43AA8699194EEB8B00A67B56 /* session_state_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B1194EEB8B00A67B56 /* session_state_utils.h */; }; + 43AA869A194EEB8B00A67B56 /* session_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B2194EEB8B00A67B56 /* session_utils.h */; }; + 43AA869B194EEB8B00A67B56 /* session.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B3194EEB8B00A67B56 /* session.h */; }; + 43AA869C194EEB8B00A67B56 /* silentfilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B4194EEB8B00A67B56 /* silentfilesource.h */; }; + 43AA869D194EEB8B00A67B56 /* slave.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B5194EEB8B00A67B56 /* slave.h */; }; + 43AA869E194EEB8B00A67B56 /* smf_source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B6194EEB8B00A67B56 /* smf_source.h */; }; + 43AA869F194EEB8B00A67B56 /* sndfile_helpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B7194EEB8B00A67B56 /* sndfile_helpers.h */; }; + 43AA86A0194EEB8B00A67B56 /* sndfileimportable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B8194EEB8B00A67B56 /* sndfileimportable.h */; }; + 43AA86A1194EEB8B00A67B56 /* sndfilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85B9194EEB8B00A67B56 /* sndfilesource.h */; }; + 43AA86A2194EEB8B00A67B56 /* soundseq.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85BA194EEB8B00A67B56 /* soundseq.h */; }; + 43AA86A3194EEB8B00A67B56 /* source_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85BB194EEB8B00A67B56 /* source_factory.h */; }; + 43AA86A4194EEB8B00A67B56 /* source.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85BC194EEB8B00A67B56 /* source.h */; }; + 43AA86A5194EEB8B00A67B56 /* speaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85BD194EEB8B00A67B56 /* speaker.h */; }; + 43AA86A6194EEB8B00A67B56 /* speakers.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85BE194EEB8B00A67B56 /* speakers.h */; }; + 43AA86A7194EEB8B00A67B56 /* spline.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85BF194EEB8B00A67B56 /* spline.h */; }; + 43AA86A8194EEB8B00A67B56 /* srcfilesource.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C0194EEB8B00A67B56 /* srcfilesource.h */; }; + 43AA86A9194EEB8B00A67B56 /* stretch.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C1194EEB8B00A67B56 /* stretch.h */; }; + 43AA86AA194EEB8B00A67B56 /* strip_silence.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C2194EEB8B00A67B56 /* strip_silence.h */; }; + 43AA86AB194EEB8B00A67B56 /* system_exec.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C3194EEB8B00A67B56 /* system_exec.h */; }; + 43AA86AC194EEB8B00A67B56 /* tape_file_matcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C4194EEB8B00A67B56 /* tape_file_matcher.h */; }; + 43AA86AD194EEB8B00A67B56 /* template_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C5194EEB8B00A67B56 /* template_utils.h */; }; + 43AA86AE194EEB8B00A67B56 /* tempo_map_importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C6194EEB8B00A67B56 /* tempo_map_importer.h */; }; + 43AA86AF194EEB8B00A67B56 /* tempo.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C7194EEB8B00A67B56 /* tempo.h */; }; + 43AA86B0194EEB8B00A67B56 /* thread_buffers.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C8194EEB8B00A67B56 /* thread_buffers.h */; }; + 43AA86B1194EEB8B00A67B56 /* ticker.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85C9194EEB8B00A67B56 /* ticker.h */; }; + 43AA86B2194EEB8B00A67B56 /* timecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85CA194EEB8B00A67B56 /* timecode.h */; }; + 43AA86B3194EEB8B00A67B56 /* timefx_request.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85CB194EEB8B00A67B56 /* timefx_request.h */; }; + 43AA86B4194EEB8B00A67B56 /* timestamps.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85CC194EEB8B00A67B56 /* timestamps.h */; }; + 43AA86B5194EEB8B00A67B56 /* track.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85CD194EEB8B00A67B56 /* track.h */; }; + 43AA86B6194EEB8B00A67B56 /* transient_detector.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85CE194EEB8B00A67B56 /* transient_detector.h */; }; + 43AA86B7194EEB8B00A67B56 /* trimmable.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85CF194EEB8B00A67B56 /* trimmable.h */; }; + 43AA86B8194EEB8B00A67B56 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D0194EEB8B00A67B56 /* types.h */; }; + 43AA86B9194EEB8B00A67B56 /* unknown_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D1194EEB8B00A67B56 /* unknown_processor.h */; }; + 43AA86BA194EEB8B00A67B56 /* uri_map.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D2194EEB8B00A67B56 /* uri_map.h */; }; + 43AA86BB194EEB8B00A67B56 /* user_bundle.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D3194EEB8B00A67B56 /* user_bundle.h */; }; + 43AA86BC194EEB8B00A67B56 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D4194EEB8B00A67B56 /* utils.h */; }; + 43AA86BD194EEB8B00A67B56 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D5194EEB8B00A67B56 /* version.h */; }; + 43AA86BE194EEB8B00A67B56 /* vst_info_file.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D6194EEB8B00A67B56 /* vst_info_file.h */; }; + 43AA86BF194EEB8B00A67B56 /* vst_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D7194EEB8B00A67B56 /* vst_plugin.h */; }; + 43AA86C0194EEB8B00A67B56 /* vst_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D8194EEB8B00A67B56 /* vst_types.h */; }; + 43AA86C1194EEB8B00A67B56 /* vumeterdsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85D9194EEB8B00A67B56 /* vumeterdsp.h */; }; + 43AA86C2194EEB8B00A67B56 /* windows_vst_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85DA194EEB8B00A67B56 /* windows_vst_plugin.h */; }; + 43AA86C3194EEB8B00A67B56 /* worker.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA85DB194EEB8B00A67B56 /* worker.h */; }; + 43AA86C6194EEBAF00A67B56 /* aeffectx.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86C5194EEBAF00A67B56 /* aeffectx.h */; }; + 43AA86D0194EEC1400A67B56 /* gettext.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86CD194EEC1400A67B56 /* gettext.h */; }; + 43AA86D1194EEC1400A67B56 /* lv2_evbuf.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86CE194EEC1400A67B56 /* lv2_evbuf.h */; }; + 43AA86D2194EEC1400A67B56 /* rdff.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86CF194EEC1400A67B56 /* rdff.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 432652FC194EF73C00BEFB46 /* amp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = amp.h; sourceTree = "<group>"; }; + 432652FD194EF73C00BEFB46 /* analyser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = analyser.h; sourceTree = "<group>"; }; + 432652FE194EF73C00BEFB46 /* ardour.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ardour.h; sourceTree = "<group>"; }; + 432652FF194EF73C00BEFB46 /* async_midi_port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = async_midi_port.h; sourceTree = "<group>"; }; + 43265300194EF73C00BEFB46 /* audio_backend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_backend.h; sourceTree = "<group>"; }; + 43265301194EF73C00BEFB46 /* audio_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_buffer.h; sourceTree = "<group>"; }; + 43265302194EF73C00BEFB46 /* audio_diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_diskstream.h; sourceTree = "<group>"; }; + 43265303194EF73C00BEFB46 /* audio_library.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_library.h; sourceTree = "<group>"; }; + 43265304194EF73C00BEFB46 /* audio_playlist_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_playlist_importer.h; sourceTree = "<group>"; }; + 43265305194EF73C00BEFB46 /* audio_playlist_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_playlist_source.h; sourceTree = "<group>"; }; + 43265306194EF73C00BEFB46 /* audio_port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_port.h; sourceTree = "<group>"; }; + 43265307194EF73C00BEFB46 /* audio_region_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_region_importer.h; sourceTree = "<group>"; }; + 43265308194EF73C00BEFB46 /* audio_track.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_track.h; sourceTree = "<group>"; }; + 43265309194EF73C00BEFB46 /* audio_track_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_track_importer.h; sourceTree = "<group>"; }; + 4326530A194EF73C00BEFB46 /* audio_unit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_unit.h; sourceTree = "<group>"; }; + 4326530B194EF73C00BEFB46 /* audioanalyser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioanalyser.h; sourceTree = "<group>"; }; + 4326530C194EF73C00BEFB46 /* audioengine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioengine.h; sourceTree = "<group>"; }; + 4326530D194EF73C00BEFB46 /* audiofile_tagger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audiofile_tagger.h; sourceTree = "<group>"; }; + 4326530E194EF73C00BEFB46 /* audiofilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audiofilesource.h; sourceTree = "<group>"; }; + 4326530F194EF73C00BEFB46 /* audioplaylist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioplaylist.h; sourceTree = "<group>"; }; + 43265310194EF73C00BEFB46 /* audioregion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioregion.h; sourceTree = "<group>"; }; + 43265311194EF73C00BEFB46 /* audiosource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audiosource.h; sourceTree = "<group>"; }; + 43265312194EF73C00BEFB46 /* auditioner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = auditioner.h; sourceTree = "<group>"; }; + 43265313194EF73C00BEFB46 /* auto_bundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = auto_bundle.h; sourceTree = "<group>"; }; + 43265314194EF73C00BEFB46 /* automatable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automatable.h; sourceTree = "<group>"; }; + 43265315194EF73C00BEFB46 /* automatable_sequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automatable_sequence.h; sourceTree = "<group>"; }; + 43265316194EF73C00BEFB46 /* automation_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automation_control.h; sourceTree = "<group>"; }; + 43265317194EF73C00BEFB46 /* automation_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automation_list.h; sourceTree = "<group>"; }; + 43265318194EF73C00BEFB46 /* automation_watch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = automation_watch.h; sourceTree = "<group>"; }; + 43265319194EF73C00BEFB46 /* beats_frames_converter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = beats_frames_converter.h; sourceTree = "<group>"; }; + 4326531A194EF73C00BEFB46 /* broadcast_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = broadcast_info.h; sourceTree = "<group>"; }; + 4326531B194EF73C00BEFB46 /* buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer.h; sourceTree = "<group>"; }; + 4326531C194EF73C00BEFB46 /* buffer_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer_manager.h; sourceTree = "<group>"; }; + 4326531D194EF73C00BEFB46 /* buffer_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer_set.h; sourceTree = "<group>"; }; + 4326531E194EF73C00BEFB46 /* bundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bundle.h; sourceTree = "<group>"; }; + 4326531F194EF73C00BEFB46 /* butler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = butler.h; sourceTree = "<group>"; }; + 43265320194EF73C00BEFB46 /* caimportable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = caimportable.h; sourceTree = "<group>"; }; + 43265321194EF73C00BEFB46 /* capturing_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = capturing_processor.h; sourceTree = "<group>"; }; + 43265322194EF73C00BEFB46 /* chan_count.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = chan_count.h; sourceTree = "<group>"; }; + 43265323194EF73C00BEFB46 /* chan_mapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = chan_mapping.h; sourceTree = "<group>"; }; + 43265324194EF73C00BEFB46 /* click.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = click.h; sourceTree = "<group>"; }; + 43265325194EF73C00BEFB46 /* comparable_shared_ptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = comparable_shared_ptr.h; sourceTree = "<group>"; }; + 43265326194EF73C00BEFB46 /* configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = configuration.h; sourceTree = "<group>"; }; + 43265327194EF73C00BEFB46 /* configuration_variable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = configuration_variable.h; sourceTree = "<group>"; }; + 43265328194EF73C00BEFB46 /* control_protocol_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = control_protocol_manager.h; sourceTree = "<group>"; }; + 43265329194EF73C00BEFB46 /* coreaudiosource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = coreaudiosource.h; sourceTree = "<group>"; }; + 4326532A194EF73C00BEFB46 /* cycle_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cycle_timer.h; sourceTree = "<group>"; }; + 4326532B194EF73C00BEFB46 /* cycles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cycles.h; sourceTree = "<group>"; }; + 4326532C194EF73C00BEFB46 /* data_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = data_type.h; sourceTree = "<group>"; }; + 4326532D194EF73C00BEFB46 /* dB.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dB.h; sourceTree = "<group>"; }; + 4326532E194EF73C00BEFB46 /* debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = "<group>"; }; + 4326532F194EF73C00BEFB46 /* delivery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = delivery.h; sourceTree = "<group>"; }; + 43265330194EF73C00BEFB46 /* directory_names.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = directory_names.h; sourceTree = "<group>"; }; + 43265331194EF73C00BEFB46 /* diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = diskstream.h; sourceTree = "<group>"; }; + 43265332194EF73C00BEFB46 /* element_import_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = element_import_handler.h; sourceTree = "<group>"; }; + 43265333194EF73C00BEFB46 /* element_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = element_importer.h; sourceTree = "<group>"; }; + 43265334194EF73C00BEFB46 /* engine_state_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = engine_state_controller.h; sourceTree = "<group>"; }; + 43265335194EF73C00BEFB46 /* event_type_map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = event_type_map.h; sourceTree = "<group>"; }; + 43265336194EF73C00BEFB46 /* export_channel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_channel.h; sourceTree = "<group>"; }; + 43265337194EF73C00BEFB46 /* export_channel_configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_channel_configuration.h; sourceTree = "<group>"; }; + 43265338194EF73C00BEFB46 /* export_failed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_failed.h; sourceTree = "<group>"; }; + 43265339194EF73C00BEFB46 /* export_filename.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_filename.h; sourceTree = "<group>"; }; + 4326533A194EF73C00BEFB46 /* export_format_base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_format_base.h; sourceTree = "<group>"; }; + 4326533B194EF73C00BEFB46 /* export_format_compatibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_format_compatibility.h; sourceTree = "<group>"; }; + 4326533C194EF73C00BEFB46 /* export_format_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_format_manager.h; sourceTree = "<group>"; }; + 4326533D194EF73C00BEFB46 /* export_format_specification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_format_specification.h; sourceTree = "<group>"; }; + 4326533E194EF73C00BEFB46 /* export_formats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_formats.h; sourceTree = "<group>"; }; + 4326533F194EF73C00BEFB46 /* export_graph_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_graph_builder.h; sourceTree = "<group>"; }; + 43265340194EF73C00BEFB46 /* export_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_handler.h; sourceTree = "<group>"; }; + 43265341194EF73C00BEFB46 /* export_multiplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_multiplication.h; sourceTree = "<group>"; }; + 43265342194EF73C00BEFB46 /* export_pointers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_pointers.h; sourceTree = "<group>"; }; + 43265343194EF73C00BEFB46 /* export_preset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_preset.h; sourceTree = "<group>"; }; + 43265344194EF73C00BEFB46 /* export_profile_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_profile_manager.h; sourceTree = "<group>"; }; + 43265345194EF73C00BEFB46 /* export_status.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_status.h; sourceTree = "<group>"; }; + 43265346194EF73C00BEFB46 /* export_timespan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export_timespan.h; sourceTree = "<group>"; }; + 43265347194EF73C00BEFB46 /* file_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = file_source.h; sourceTree = "<group>"; }; + 43265348194EF73C00BEFB46 /* filename_extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filename_extensions.h; sourceTree = "<group>"; }; + 43265349194EF73C00BEFB46 /* filesystem_paths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filesystem_paths.h; sourceTree = "<group>"; }; + 4326534A194EF73C00BEFB46 /* filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filter.h; sourceTree = "<group>"; }; + 4326534B194EF73C00BEFB46 /* graph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = graph.h; sourceTree = "<group>"; }; + 4326534C194EF73C00BEFB46 /* graphnode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = graphnode.h; sourceTree = "<group>"; }; + 4326534D194EF73C00BEFB46 /* iec1ppmdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iec1ppmdsp.h; sourceTree = "<group>"; }; + 4326534E194EF73C00BEFB46 /* iec2ppmdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iec2ppmdsp.h; sourceTree = "<group>"; }; + 4326534F194EF73C00BEFB46 /* import_status.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = import_status.h; sourceTree = "<group>"; }; + 43265350194EF73C00BEFB46 /* importable_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = importable_source.h; sourceTree = "<group>"; }; + 43265351194EF73C00BEFB46 /* instrument_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = instrument_info.h; sourceTree = "<group>"; }; + 43265352194EF73C00BEFB46 /* internal_return.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = internal_return.h; sourceTree = "<group>"; }; + 43265353194EF73C00BEFB46 /* internal_send.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = internal_send.h; sourceTree = "<group>"; }; + 43265354194EF73C00BEFB46 /* interpolation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interpolation.h; sourceTree = "<group>"; }; + 43265355194EF73C00BEFB46 /* interthread_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interthread_info.h; sourceTree = "<group>"; }; + 43265356194EF73C00BEFB46 /* io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = io.h; sourceTree = "<group>"; }; + 43265357194EF73C00BEFB46 /* io_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = io_processor.h; sourceTree = "<group>"; }; + 43265358194EF73C00BEFB46 /* jack_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jack_utils.h; sourceTree = "<group>"; }; + 43265359194EF73C00BEFB46 /* kmeterdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kmeterdsp.h; sourceTree = "<group>"; }; + 4326535A194EF73C00BEFB46 /* ladspa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ladspa.h; sourceTree = "<group>"; }; + 4326535B194EF73C00BEFB46 /* ladspa_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ladspa_plugin.h; sourceTree = "<group>"; }; + 4326535C194EF73C00BEFB46 /* latent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = latent.h; sourceTree = "<group>"; }; + 4326535D194EF73C00BEFB46 /* libardour_visibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libardour_visibility.h; sourceTree = "<group>"; }; + 4326535E194EF73C00BEFB46 /* linux_vst_support.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = linux_vst_support.h; sourceTree = "<group>"; }; + 4326535F194EF73C00BEFB46 /* location.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = location.h; sourceTree = "<group>"; }; + 43265360194EF73C00BEFB46 /* location_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = location_importer.h; sourceTree = "<group>"; }; + 43265361194EF73C00BEFB46 /* logcurve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = logcurve.h; sourceTree = "<group>"; }; + 43265362194EF73C00BEFB46 /* lv2_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lv2_plugin.h; sourceTree = "<group>"; }; + 43265363194EF73C00BEFB46 /* lxvst_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lxvst_plugin.h; sourceTree = "<group>"; }; + 43265364194EF73C00BEFB46 /* meter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = meter.h; sourceTree = "<group>"; }; + 43265365194EF73C00BEFB46 /* midi_automation_list_binder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_automation_list_binder.h; sourceTree = "<group>"; }; + 43265366194EF73C00BEFB46 /* midi_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_buffer.h; sourceTree = "<group>"; }; + 43265367194EF73C00BEFB46 /* midi_diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_diskstream.h; sourceTree = "<group>"; }; + 43265368194EF73C00BEFB46 /* midi_model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_model.h; sourceTree = "<group>"; }; + 43265369194EF73C00BEFB46 /* midi_operator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_operator.h; sourceTree = "<group>"; }; + 4326536A194EF73C00BEFB46 /* midi_patch_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_patch_manager.h; sourceTree = "<group>"; }; + 4326536B194EF73C00BEFB46 /* midi_playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_playlist.h; sourceTree = "<group>"; }; + 4326536C194EF73C00BEFB46 /* midi_playlist_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_playlist_source.h; sourceTree = "<group>"; }; + 4326536D194EF73C00BEFB46 /* midi_port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_port.h; sourceTree = "<group>"; }; + 4326536E194EF73C00BEFB46 /* midi_region.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_region.h; sourceTree = "<group>"; }; + 4326536F194EF73C00BEFB46 /* midi_ring_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_ring_buffer.h; sourceTree = "<group>"; }; + 43265370194EF73C00BEFB46 /* midi_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_source.h; sourceTree = "<group>"; }; + 43265371194EF73C00BEFB46 /* midi_state_tracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_state_tracker.h; sourceTree = "<group>"; }; + 43265372194EF73C00BEFB46 /* midi_stretch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_stretch.h; sourceTree = "<group>"; }; + 43265373194EF73C00BEFB46 /* midi_track.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_track.h; sourceTree = "<group>"; }; + 43265374194EF73C00BEFB46 /* midi_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midi_ui.h; sourceTree = "<group>"; }; + 43265375194EF73C00BEFB46 /* midiport_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midiport_manager.h; sourceTree = "<group>"; }; + 43265376194EF73C00BEFB46 /* mix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mix.h; sourceTree = "<group>"; }; + 43265377194EF73C00BEFB46 /* monitor_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = monitor_processor.h; sourceTree = "<group>"; }; + 43265378194EF73C00BEFB46 /* movable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = movable.h; sourceTree = "<group>"; }; + 43265379194EF73C00BEFB46 /* msvc_libardour.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = msvc_libardour.h; sourceTree = "<group>"; }; + 4326537A194EF73C00BEFB46 /* mtdm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mtdm.h; sourceTree = "<group>"; }; + 4326537B194EF73C00BEFB46 /* mute_master.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mute_master.h; sourceTree = "<group>"; }; + 4326537C194EF73C00BEFB46 /* noise.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = noise.h; sourceTree = "<group>"; }; + 4326537D194EF73C00BEFB46 /* onset_detector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = onset_detector.h; sourceTree = "<group>"; }; + 4326537E194EF73C00BEFB46 /* operations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = operations.h; sourceTree = "<group>"; }; + 4326537F194EF73C00BEFB46 /* pan_controllable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pan_controllable.h; sourceTree = "<group>"; }; + 43265380194EF73C00BEFB46 /* pannable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pannable.h; sourceTree = "<group>"; }; + 43265381194EF73C00BEFB46 /* panner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = panner.h; sourceTree = "<group>"; }; + 43265382194EF73C00BEFB46 /* panner_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = panner_manager.h; sourceTree = "<group>"; }; + 43265383194EF73C00BEFB46 /* panner_shell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = panner_shell.h; sourceTree = "<group>"; }; + 43265384194EF73C00BEFB46 /* pcm_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pcm_utils.h; sourceTree = "<group>"; }; + 43265385194EF73C00BEFB46 /* peak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = peak.h; sourceTree = "<group>"; }; + 43265386194EF73C00BEFB46 /* pi_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pi_controller.h; sourceTree = "<group>"; }; + 43265387194EF73C00BEFB46 /* pitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pitch.h; sourceTree = "<group>"; }; + 43265388194EF73C00BEFB46 /* playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = playlist.h; sourceTree = "<group>"; }; + 43265389194EF73C00BEFB46 /* playlist_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = playlist_factory.h; sourceTree = "<group>"; }; + 4326538A194EF73C00BEFB46 /* playlist_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = playlist_source.h; sourceTree = "<group>"; }; + 4326538B194EF73C00BEFB46 /* plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plugin.h; sourceTree = "<group>"; }; + 4326538C194EF73C00BEFB46 /* plugin_insert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plugin_insert.h; sourceTree = "<group>"; }; + 4326538D194EF73C00BEFB46 /* plugin_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plugin_manager.h; sourceTree = "<group>"; }; + 4326538E194EF73C00BEFB46 /* plugin_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plugin_types.h; sourceTree = "<group>"; }; + 4326538F194EF73C00BEFB46 /* port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = port.h; sourceTree = "<group>"; }; + 43265390194EF73C00BEFB46 /* port_engine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = port_engine.h; sourceTree = "<group>"; }; + 43265391194EF73C00BEFB46 /* port_insert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = port_insert.h; sourceTree = "<group>"; }; + 43265392194EF73C00BEFB46 /* port_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = port_manager.h; sourceTree = "<group>"; }; + 43265393194EF73C00BEFB46 /* port_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = port_set.h; sourceTree = "<group>"; }; + 43265394194EF73C00BEFB46 /* process_thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = process_thread.h; sourceTree = "<group>"; }; + 43265395194EF73C00BEFB46 /* processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = processor.h; sourceTree = "<group>"; }; + 43265396194EF73C00BEFB46 /* profile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = profile.h; sourceTree = "<group>"; }; + 43265397194EF73C00BEFB46 /* progress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = progress.h; sourceTree = "<group>"; }; + 43265398194EF73C00BEFB46 /* proxy_controllable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = proxy_controllable.h; sourceTree = "<group>"; }; + 43265399194EF73C00BEFB46 /* public_diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = public_diskstream.h; sourceTree = "<group>"; }; + 4326539A194EF73C00BEFB46 /* quantize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quantize.h; sourceTree = "<group>"; }; + 4326539B194EF73C00BEFB46 /* rb_effect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rb_effect.h; sourceTree = "<group>"; }; + 4326539C194EF73C00BEFB46 /* rc_configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc_configuration.h; sourceTree = "<group>"; }; + 4326539D194EF73C00BEFB46 /* rc_configuration_vars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc_configuration_vars.h; sourceTree = "<group>"; }; + 4326539E194EF73C00BEFB46 /* readable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = readable.h; sourceTree = "<group>"; }; + 4326539F194EF73C00BEFB46 /* recent_sessions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = recent_sessions.h; sourceTree = "<group>"; }; + 432653A0194EF73C00BEFB46 /* region.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = region.h; sourceTree = "<group>"; }; + 432653A1194EF73C00BEFB46 /* region_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = region_factory.h; sourceTree = "<group>"; }; + 432653A2194EF73C00BEFB46 /* region_sorters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = region_sorters.h; sourceTree = "<group>"; }; + 432653A3194EF73C00BEFB46 /* resampled_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = resampled_source.h; sourceTree = "<group>"; }; + 432653A4194EF73C00BEFB46 /* return.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = return.h; sourceTree = "<group>"; }; + 432653A5194EF73C00BEFB46 /* reverse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reverse.h; sourceTree = "<group>"; }; + 432653A6194EF73C00BEFB46 /* revision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = revision.h; sourceTree = "<group>"; }; + 432653A7194EF73C00BEFB46 /* route.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = route.h; sourceTree = "<group>"; }; + 432653A8194EF73C00BEFB46 /* route_graph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = route_graph.h; sourceTree = "<group>"; }; + 432653A9194EF73C00BEFB46 /* route_group.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = route_group.h; sourceTree = "<group>"; }; + 432653AA194EF73C00BEFB46 /* route_group_member.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = route_group_member.h; sourceTree = "<group>"; }; + 432653AB194EF73C00BEFB46 /* route_group_specialized.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = route_group_specialized.h; sourceTree = "<group>"; }; + 432653AC194EF73C00BEFB46 /* runtime_functions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = runtime_functions.h; sourceTree = "<group>"; }; + 432653AD194EF73C00BEFB46 /* search_paths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = search_paths.h; sourceTree = "<group>"; }; + 432653AE194EF73C00BEFB46 /* send.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = send.h; sourceTree = "<group>"; }; + 432653AF194EF73C00BEFB46 /* session.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session.h; sourceTree = "<group>"; }; + 432653B0194EF73C00BEFB46 /* session_configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_configuration.h; sourceTree = "<group>"; }; + 432653B1194EF73C00BEFB46 /* session_configuration_vars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_configuration_vars.h; sourceTree = "<group>"; }; + 432653B2194EF73C00BEFB46 /* session_directory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_directory.h; sourceTree = "<group>"; }; + 432653B3194EF73C00BEFB46 /* session_event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_event.h; sourceTree = "<group>"; }; + 432653B4194EF73C00BEFB46 /* session_handle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_handle.h; sourceTree = "<group>"; }; + 432653B5194EF73C00BEFB46 /* session_metadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_metadata.h; sourceTree = "<group>"; }; + 432653B6194EF73C00BEFB46 /* session_object.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_object.h; sourceTree = "<group>"; }; + 432653B7194EF73C00BEFB46 /* session_playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_playlist.h; sourceTree = "<group>"; }; + 432653B8194EF73C00BEFB46 /* session_playlists.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_playlists.h; sourceTree = "<group>"; }; + 432653B9194EF73C00BEFB46 /* session_route.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_route.h; sourceTree = "<group>"; }; + 432653BA194EF73C00BEFB46 /* session_state_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_state_utils.h; sourceTree = "<group>"; }; + 432653BB194EF73C00BEFB46 /* session_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session_utils.h; sourceTree = "<group>"; }; + 432653BC194EF73C00BEFB46 /* silentfilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = silentfilesource.h; sourceTree = "<group>"; }; + 432653BD194EF73C00BEFB46 /* slave.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = slave.h; sourceTree = "<group>"; }; + 432653BE194EF73C00BEFB46 /* smf_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smf_source.h; sourceTree = "<group>"; }; + 432653BF194EF73C00BEFB46 /* sndfile_helpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sndfile_helpers.h; sourceTree = "<group>"; }; + 432653C0194EF73C00BEFB46 /* sndfileimportable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sndfileimportable.h; sourceTree = "<group>"; }; + 432653C1194EF73C00BEFB46 /* sndfilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sndfilesource.h; sourceTree = "<group>"; }; + 432653C2194EF73C00BEFB46 /* soundseq.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = soundseq.h; sourceTree = "<group>"; }; + 432653C3194EF73C00BEFB46 /* source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = source.h; sourceTree = "<group>"; }; + 432653C4194EF73C00BEFB46 /* source_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = source_factory.h; sourceTree = "<group>"; }; + 432653C5194EF73C00BEFB46 /* speaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speaker.h; sourceTree = "<group>"; }; + 432653C6194EF73C00BEFB46 /* speakers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speakers.h; sourceTree = "<group>"; }; + 432653C7194EF73C00BEFB46 /* spline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spline.h; sourceTree = "<group>"; }; + 432653C8194EF73C00BEFB46 /* srcfilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = srcfilesource.h; sourceTree = "<group>"; }; + 432653C9194EF73C00BEFB46 /* stretch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stretch.h; sourceTree = "<group>"; }; + 432653CA194EF73C00BEFB46 /* strip_silence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strip_silence.h; sourceTree = "<group>"; }; + 432653CB194EF73C00BEFB46 /* system_exec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = system_exec.h; sourceTree = "<group>"; }; + 432653CC194EF73C00BEFB46 /* tape_file_matcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tape_file_matcher.h; sourceTree = "<group>"; }; + 432653CD194EF73C00BEFB46 /* template_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = template_utils.h; sourceTree = "<group>"; }; + 432653CE194EF73C00BEFB46 /* tempo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tempo.h; sourceTree = "<group>"; }; + 432653CF194EF73C00BEFB46 /* tempo_map_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tempo_map_importer.h; sourceTree = "<group>"; }; + 432653D0194EF73C00BEFB46 /* thread_buffers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = thread_buffers.h; sourceTree = "<group>"; }; + 432653D1194EF73C00BEFB46 /* ticker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ticker.h; sourceTree = "<group>"; }; + 432653D2194EF73C00BEFB46 /* timecode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timecode.h; sourceTree = "<group>"; }; + 432653D3194EF73C00BEFB46 /* timefx_request.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timefx_request.h; sourceTree = "<group>"; }; + 432653D4194EF73C00BEFB46 /* timestamps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timestamps.h; sourceTree = "<group>"; }; + 432653D5194EF73C00BEFB46 /* track.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = track.h; sourceTree = "<group>"; }; + 432653D6194EF73C00BEFB46 /* transient_detector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = transient_detector.h; sourceTree = "<group>"; }; + 432653D7194EF73C00BEFB46 /* trimmable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = trimmable.h; sourceTree = "<group>"; }; + 432653D8194EF73C00BEFB46 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; }; + 432653D9194EF73C00BEFB46 /* unknown_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unknown_processor.h; sourceTree = "<group>"; }; + 432653DA194EF73C00BEFB46 /* uri_map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = uri_map.h; sourceTree = "<group>"; }; + 432653DB194EF73C00BEFB46 /* user_bundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = user_bundle.h; sourceTree = "<group>"; }; + 432653DC194EF73C00BEFB46 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = "<group>"; }; + 432653DD194EF73C00BEFB46 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; }; + 432653DF194EF73C00BEFB46 /* aeffectx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aeffectx.h; sourceTree = "<group>"; }; + 432653E0194EF73C00BEFB46 /* vst_info_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vst_info_file.h; sourceTree = "<group>"; }; + 432653E1194EF73C00BEFB46 /* vst_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vst_plugin.h; sourceTree = "<group>"; }; + 432653E2194EF73C00BEFB46 /* vst_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vst_types.h; sourceTree = "<group>"; }; + 432653E3194EF73C00BEFB46 /* vumeterdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vumeterdsp.h; sourceTree = "<group>"; }; + 432653E4194EF73C00BEFB46 /* windows_vst_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = windows_vst_plugin.h; sourceTree = "<group>"; }; + 432653E5194EF73C00BEFB46 /* worker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = worker.h; sourceTree = "<group>"; }; + 432859E21A10F415006C3E03 /* midi_scene_change.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_scene_change.h; path = ../ardour/midi_scene_change.h; sourceTree = "<group>"; }; + 432859E31A10F415006C3E03 /* midi_scene_changer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_scene_changer.h; path = ../ardour/midi_scene_changer.h; sourceTree = "<group>"; }; + 432859E41A10F415006C3E03 /* mididm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mididm.h; path = ../ardour/mididm.h; sourceTree = "<group>"; }; + 432859E51A10F415006C3E03 /* soundcloud_upload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = soundcloud_upload.h; path = ../ardour/soundcloud_upload.h; sourceTree = "<group>"; }; + 432859EB1A10F436006C3E03 /* libardour.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = libardour.xcodeproj; sourceTree = "<group>"; }; + 432859EE1A10F436006C3E03 /* midi_scene_change.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_scene_change.cc; path = ../midi_scene_change.cc; sourceTree = "<group>"; }; + 432859EF1A10F436006C3E03 /* midi_scene_changer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_scene_changer.cc; path = ../midi_scene_changer.cc; sourceTree = "<group>"; }; + 432859F01A10F436006C3E03 /* mididm.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mididm.cc; path = ../mididm.cc; sourceTree = "<group>"; }; + 432859F11A10F436006C3E03 /* scene_change.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = scene_change.cc; path = ../scene_change.cc; sourceTree = "<group>"; }; + 432859F21A10F436006C3E03 /* soundcloud_upload.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = soundcloud_upload.cc; path = ../soundcloud_upload.cc; sourceTree = "<group>"; }; + 43AA82A9194EEAAF00A67B56 /* liblibardour.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = liblibardour.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; + 43AA82AE194EEB2600A67B56 /* amp.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = amp.cc; path = ../amp.cc; sourceTree = SOURCE_ROOT; }; + 43AA82AF194EEB2600A67B56 /* analyser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = analyser.cc; path = ../analyser.cc; sourceTree = SOURCE_ROOT; }; + 43AA82B0194EEB2600A67B56 /* async_midi_port.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = async_midi_port.cc; path = ../async_midi_port.cc; sourceTree = SOURCE_ROOT; }; + 43AA82B1194EEB2600A67B56 /* audio_buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_buffer.cc; path = ../audio_buffer.cc; sourceTree = SOURCE_ROOT; }; + 43AA82B2194EEB2600A67B56 /* audio_diskstream.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_diskstream.cc; path = ../audio_diskstream.cc; sourceTree = SOURCE_ROOT; }; + 43AA82B3194EEB2600A67B56 /* audio_library.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_library.cc; path = ../audio_library.cc; sourceTree = SOURCE_ROOT; }; + 43AA82B4194EEB2600A67B56 /* audio_playlist_importer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_playlist_importer.cc; path = ../audio_playlist_importer.cc; sourceTree = SOURCE_ROOT; }; + 43AA82B5194EEB2600A67B56 /* audio_playlist_source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_playlist_source.cc; path = ../audio_playlist_source.cc; sourceTree = SOURCE_ROOT; }; + 43AA82B6194EEB2600A67B56 /* audio_playlist.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_playlist.cc; path = ../audio_playlist.cc; sourceTree = SOURCE_ROOT; }; + 43AA82B7194EEB2600A67B56 /* audio_port.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_port.cc; path = ../audio_port.cc; sourceTree = SOURCE_ROOT; }; + 43AA82B8194EEB2600A67B56 /* audio_region_importer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_region_importer.cc; path = ../audio_region_importer.cc; sourceTree = SOURCE_ROOT; }; + 43AA82B9194EEB2600A67B56 /* audio_track_importer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_track_importer.cc; path = ../audio_track_importer.cc; sourceTree = SOURCE_ROOT; }; + 43AA82BA194EEB2600A67B56 /* audio_track.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_track.cc; path = ../audio_track.cc; sourceTree = SOURCE_ROOT; }; + 43AA82BB194EEB2600A67B56 /* audio_unit.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_unit.cc; path = ../audio_unit.cc; sourceTree = SOURCE_ROOT; }; + 43AA82BC194EEB2600A67B56 /* audioanalyser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audioanalyser.cc; path = ../audioanalyser.cc; sourceTree = SOURCE_ROOT; }; + 43AA82BD194EEB2600A67B56 /* audioengine.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audioengine.cc; path = ../audioengine.cc; sourceTree = SOURCE_ROOT; }; + 43AA82BE194EEB2600A67B56 /* audiofile_tagger.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audiofile_tagger.cc; path = ../audiofile_tagger.cc; sourceTree = SOURCE_ROOT; }; + 43AA82BF194EEB2600A67B56 /* audiofilesource.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audiofilesource.cc; path = ../audiofilesource.cc; sourceTree = SOURCE_ROOT; }; + 43AA82C0194EEB2600A67B56 /* audioregion.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audioregion.cc; path = ../audioregion.cc; sourceTree = SOURCE_ROOT; }; + 43AA82C1194EEB2600A67B56 /* audiosource.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audiosource.cc; path = ../audiosource.cc; sourceTree = SOURCE_ROOT; }; + 43AA82C2194EEB2600A67B56 /* auditioner.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = auditioner.cc; path = ../auditioner.cc; sourceTree = SOURCE_ROOT; }; + 43AA82C3194EEB2600A67B56 /* auto_bundle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = auto_bundle.cc; path = ../auto_bundle.cc; sourceTree = SOURCE_ROOT; }; + 43AA82C4194EEB2600A67B56 /* automatable.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = automatable.cc; path = ../automatable.cc; sourceTree = SOURCE_ROOT; }; + 43AA82C5194EEB2600A67B56 /* automation_control.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = automation_control.cc; path = ../automation_control.cc; sourceTree = SOURCE_ROOT; }; + 43AA82C6194EEB2600A67B56 /* automation_list.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = automation_list.cc; path = ../automation_list.cc; sourceTree = SOURCE_ROOT; }; + 43AA82C7194EEB2600A67B56 /* automation_watch.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = automation_watch.cc; path = ../automation_watch.cc; sourceTree = SOURCE_ROOT; }; + 43AA82C8194EEB2600A67B56 /* automation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = automation.cc; path = ../automation.cc; sourceTree = SOURCE_ROOT; }; + 43AA82C9194EEB2600A67B56 /* beats_frames_converter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = beats_frames_converter.cc; path = ../beats_frames_converter.cc; sourceTree = SOURCE_ROOT; }; + 43AA82CA194EEB2600A67B56 /* broadcast_info.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = broadcast_info.cc; path = ../broadcast_info.cc; sourceTree = SOURCE_ROOT; }; + 43AA82CB194EEB2600A67B56 /* buffer_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = buffer_manager.cc; path = ../buffer_manager.cc; sourceTree = SOURCE_ROOT; }; + 43AA82CC194EEB2600A67B56 /* buffer_set.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = buffer_set.cc; path = ../buffer_set.cc; sourceTree = SOURCE_ROOT; }; + 43AA82CD194EEB2600A67B56 /* buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = buffer.cc; path = ../buffer.cc; sourceTree = SOURCE_ROOT; }; + 43AA82CE194EEB2600A67B56 /* bundle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bundle.cc; path = ../bundle.cc; sourceTree = SOURCE_ROOT; }; + 43AA82CF194EEB2600A67B56 /* butler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = butler.cc; path = ../butler.cc; sourceTree = SOURCE_ROOT; }; + 43AA82D0194EEB2600A67B56 /* caimportable.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = caimportable.cc; path = ../caimportable.cc; sourceTree = SOURCE_ROOT; }; + 43AA82D1194EEB2600A67B56 /* capturing_processor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = capturing_processor.cc; path = ../capturing_processor.cc; sourceTree = SOURCE_ROOT; }; + 43AA82D2194EEB2600A67B56 /* chan_count.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = chan_count.cc; path = ../chan_count.cc; sourceTree = SOURCE_ROOT; }; + 43AA82D3194EEB2600A67B56 /* chan_mapping.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = chan_mapping.cc; path = ../chan_mapping.cc; sourceTree = SOURCE_ROOT; }; + 43AA82D4194EEB2600A67B56 /* config_text.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = config_text.cc; path = ../config_text.cc; sourceTree = SOURCE_ROOT; }; + 43AA82D5194EEB2600A67B56 /* configuration.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = configuration.cc; path = ../configuration.cc; sourceTree = SOURCE_ROOT; }; + 43AA82D6194EEB2600A67B56 /* control_protocol_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = control_protocol_manager.cc; path = ../control_protocol_manager.cc; sourceTree = SOURCE_ROOT; }; + 43AA82D7194EEB2600A67B56 /* coreaudiosource.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = coreaudiosource.cc; path = ../coreaudiosource.cc; sourceTree = SOURCE_ROOT; }; + 43AA82D8194EEB2600A67B56 /* cycle_timer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cycle_timer.cc; path = ../cycle_timer.cc; sourceTree = SOURCE_ROOT; }; + 43AA82D9194EEB2600A67B56 /* data_type.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = data_type.cc; path = ../data_type.cc; sourceTree = SOURCE_ROOT; }; + 43AA82DA194EEB2600A67B56 /* debug.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = debug.cc; path = ../debug.cc; sourceTree = SOURCE_ROOT; }; + 43AA82DB194EEB2600A67B56 /* default_click.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = default_click.cc; path = ../default_click.cc; sourceTree = SOURCE_ROOT; }; + 43AA82DC194EEB2600A67B56 /* delivery.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = delivery.cc; path = ../delivery.cc; sourceTree = SOURCE_ROOT; }; + 43AA82DD194EEB2600A67B56 /* directory_names.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = directory_names.cc; path = ../directory_names.cc; sourceTree = SOURCE_ROOT; }; + 43AA82DE194EEB2600A67B56 /* diskstream.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = diskstream.cc; path = ../diskstream.cc; sourceTree = SOURCE_ROOT; }; + 43AA82DF194EEB2600A67B56 /* element_import_handler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = element_import_handler.cc; path = ../element_import_handler.cc; sourceTree = SOURCE_ROOT; }; + 43AA82E0194EEB2600A67B56 /* element_importer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = element_importer.cc; path = ../element_importer.cc; sourceTree = SOURCE_ROOT; }; + 43AA82E1194EEB2600A67B56 /* engine_slave.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = engine_slave.cc; path = ../engine_slave.cc; sourceTree = SOURCE_ROOT; }; + 43AA82E2194EEB2600A67B56 /* engine_state_controller.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = engine_state_controller.cc; path = ../engine_state_controller.cc; sourceTree = SOURCE_ROOT; }; + 43AA82E3194EEB2600A67B56 /* enums.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = enums.cc; path = ../enums.cc; sourceTree = SOURCE_ROOT; }; + 43AA82E4194EEB2600A67B56 /* event_type_map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = event_type_map.cc; path = ../event_type_map.cc; sourceTree = SOURCE_ROOT; }; + 43AA82E5194EEB2600A67B56 /* export_channel_configuration.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_channel_configuration.cc; path = ../export_channel_configuration.cc; sourceTree = SOURCE_ROOT; }; + 43AA82E6194EEB2600A67B56 /* export_channel.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_channel.cc; path = ../export_channel.cc; sourceTree = SOURCE_ROOT; }; + 43AA82E7194EEB2600A67B56 /* export_failed.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_failed.cc; path = ../export_failed.cc; sourceTree = SOURCE_ROOT; }; + 43AA82E8194EEB2600A67B56 /* export_filename.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_filename.cc; path = ../export_filename.cc; sourceTree = SOURCE_ROOT; }; + 43AA82E9194EEB2600A67B56 /* export_format_base.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_format_base.cc; path = ../export_format_base.cc; sourceTree = SOURCE_ROOT; }; + 43AA82EA194EEB2600A67B56 /* export_format_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_format_manager.cc; path = ../export_format_manager.cc; sourceTree = SOURCE_ROOT; }; + 43AA82EB194EEB2600A67B56 /* export_format_specification.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_format_specification.cc; path = ../export_format_specification.cc; sourceTree = SOURCE_ROOT; }; + 43AA82EC194EEB2600A67B56 /* export_formats.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_formats.cc; path = ../export_formats.cc; sourceTree = SOURCE_ROOT; }; + 43AA82ED194EEB2600A67B56 /* export_graph_builder.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_graph_builder.cc; path = ../export_graph_builder.cc; sourceTree = SOURCE_ROOT; }; + 43AA82EE194EEB2600A67B56 /* export_handler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_handler.cc; path = ../export_handler.cc; sourceTree = SOURCE_ROOT; }; + 43AA82EF194EEB2600A67B56 /* export_multiplication.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_multiplication.cc; path = ../export_multiplication.cc; sourceTree = SOURCE_ROOT; }; + 43AA82F0194EEB2600A67B56 /* export_preset.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_preset.cc; path = ../export_preset.cc; sourceTree = SOURCE_ROOT; }; + 43AA82F1194EEB2600A67B56 /* export_profile_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_profile_manager.cc; path = ../export_profile_manager.cc; sourceTree = SOURCE_ROOT; }; + 43AA82F2194EEB2600A67B56 /* export_status.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_status.cc; path = ../export_status.cc; sourceTree = SOURCE_ROOT; }; + 43AA82F3194EEB2600A67B56 /* export_timespan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = export_timespan.cc; path = ../export_timespan.cc; sourceTree = SOURCE_ROOT; }; + 43AA82F4194EEB2600A67B56 /* file_source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = file_source.cc; path = ../file_source.cc; sourceTree = SOURCE_ROOT; }; + 43AA82F5194EEB2600A67B56 /* filename_extensions.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_extensions.cc; path = ../filename_extensions.cc; sourceTree = SOURCE_ROOT; }; + 43AA82F6194EEB2600A67B56 /* filesystem_paths.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filesystem_paths.cc; path = ../filesystem_paths.cc; sourceTree = SOURCE_ROOT; }; + 43AA82F7194EEB2600A67B56 /* filter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filter.cc; path = ../filter.cc; sourceTree = SOURCE_ROOT; }; + 43AA82F8194EEB2600A67B56 /* find_session.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = find_session.cc; path = ../find_session.cc; sourceTree = SOURCE_ROOT; }; + 43AA82F9194EEB2600A67B56 /* globals.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = globals.cc; path = ../globals.cc; sourceTree = SOURCE_ROOT; }; + 43AA82FA194EEB2600A67B56 /* graph.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = graph.cc; path = ../graph.cc; sourceTree = SOURCE_ROOT; }; + 43AA82FB194EEB2600A67B56 /* graphnode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = graphnode.cc; path = ../graphnode.cc; sourceTree = SOURCE_ROOT; }; + 43AA82FC194EEB2600A67B56 /* iec1ppmdsp.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = iec1ppmdsp.cc; path = ../iec1ppmdsp.cc; sourceTree = SOURCE_ROOT; }; + 43AA82FD194EEB2600A67B56 /* iec2ppmdsp.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = iec2ppmdsp.cc; path = ../iec2ppmdsp.cc; sourceTree = SOURCE_ROOT; }; + 43AA82FE194EEB2600A67B56 /* import.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = import.cc; path = ../import.cc; sourceTree = SOURCE_ROOT; }; + 43AA82FF194EEB2600A67B56 /* instrument_info.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = instrument_info.cc; path = ../instrument_info.cc; sourceTree = SOURCE_ROOT; }; + 43AA8300194EEB2600A67B56 /* internal_return.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = internal_return.cc; path = ../internal_return.cc; sourceTree = SOURCE_ROOT; }; + 43AA8301194EEB2600A67B56 /* internal_send.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = internal_send.cc; path = ../internal_send.cc; sourceTree = SOURCE_ROOT; }; + 43AA8302194EEB2600A67B56 /* interpolation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = interpolation.cc; path = ../interpolation.cc; sourceTree = SOURCE_ROOT; }; + 43AA8303194EEB2600A67B56 /* io_processor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = io_processor.cc; path = ../io_processor.cc; sourceTree = SOURCE_ROOT; }; + 43AA8304194EEB2600A67B56 /* io.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = io.cc; path = ../io.cc; sourceTree = SOURCE_ROOT; }; + 43AA8305194EEB2600A67B56 /* kmeterdsp.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = kmeterdsp.cc; path = ../kmeterdsp.cc; sourceTree = SOURCE_ROOT; }; + 43AA8306194EEB2600A67B56 /* ladspa_plugin.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ladspa_plugin.cc; path = ../ladspa_plugin.cc; sourceTree = SOURCE_ROOT; }; + 43AA8307194EEB2600A67B56 /* linux_vst_support.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = linux_vst_support.cc; path = ../linux_vst_support.cc; sourceTree = SOURCE_ROOT; }; + 43AA8308194EEB2600A67B56 /* location_importer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = location_importer.cc; path = ../location_importer.cc; sourceTree = SOURCE_ROOT; }; + 43AA8309194EEB2600A67B56 /* location.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = location.cc; path = ../location.cc; sourceTree = SOURCE_ROOT; }; + 43AA830A194EEB2600A67B56 /* ltc_slave.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ltc_slave.cc; path = ../ltc_slave.cc; sourceTree = SOURCE_ROOT; }; + 43AA830B194EEB2600A67B56 /* lv2_evbuf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lv2_evbuf.c; path = ../lv2_evbuf.c; sourceTree = SOURCE_ROOT; }; + 43AA830C194EEB2600A67B56 /* lv2_plugin.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lv2_plugin.cc; path = ../lv2_plugin.cc; sourceTree = SOURCE_ROOT; }; + 43AA830D194EEB2600A67B56 /* lxvst_plugin.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lxvst_plugin.cc; path = ../lxvst_plugin.cc; sourceTree = SOURCE_ROOT; }; + 43AA830E194EEB2600A67B56 /* meter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = meter.cc; path = ../meter.cc; sourceTree = SOURCE_ROOT; }; + 43AA830F194EEB2600A67B56 /* midi_automation_list_binder.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_automation_list_binder.cc; path = ../midi_automation_list_binder.cc; sourceTree = SOURCE_ROOT; }; + 43AA8310194EEB2600A67B56 /* midi_buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_buffer.cc; path = ../midi_buffer.cc; sourceTree = SOURCE_ROOT; }; + 43AA8311194EEB2600A67B56 /* midi_clock_slave.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_clock_slave.cc; path = ../midi_clock_slave.cc; sourceTree = SOURCE_ROOT; }; + 43AA8312194EEB2600A67B56 /* midi_diskstream.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_diskstream.cc; path = ../midi_diskstream.cc; sourceTree = SOURCE_ROOT; }; + 43AA8313194EEB2600A67B56 /* midi_model.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_model.cc; path = ../midi_model.cc; sourceTree = SOURCE_ROOT; }; + 43AA8314194EEB2600A67B56 /* midi_patch_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_patch_manager.cc; path = ../midi_patch_manager.cc; sourceTree = SOURCE_ROOT; }; + 43AA8315194EEB2600A67B56 /* midi_playlist_source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_playlist_source.cc; path = ../midi_playlist_source.cc; sourceTree = SOURCE_ROOT; }; + 43AA8316194EEB2600A67B56 /* midi_playlist.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_playlist.cc; path = ../midi_playlist.cc; sourceTree = SOURCE_ROOT; }; + 43AA8317194EEB2600A67B56 /* midi_port.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_port.cc; path = ../midi_port.cc; sourceTree = SOURCE_ROOT; }; + 43AA8318194EEB2600A67B56 /* midi_region.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_region.cc; path = ../midi_region.cc; sourceTree = SOURCE_ROOT; }; + 43AA8319194EEB2600A67B56 /* midi_ring_buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_ring_buffer.cc; path = ../midi_ring_buffer.cc; sourceTree = SOURCE_ROOT; }; + 43AA831A194EEB2600A67B56 /* midi_source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_source.cc; path = ../midi_source.cc; sourceTree = SOURCE_ROOT; }; + 43AA831B194EEB2600A67B56 /* midi_state_tracker.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_state_tracker.cc; path = ../midi_state_tracker.cc; sourceTree = SOURCE_ROOT; }; + 43AA831C194EEB2600A67B56 /* midi_stretch.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_stretch.cc; path = ../midi_stretch.cc; sourceTree = SOURCE_ROOT; }; + 43AA831D194EEB2600A67B56 /* midi_track.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_track.cc; path = ../midi_track.cc; sourceTree = SOURCE_ROOT; }; + 43AA831E194EEB2600A67B56 /* midi_ui.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_ui.cc; path = ../midi_ui.cc; sourceTree = SOURCE_ROOT; }; + 43AA831F194EEB2600A67B56 /* midiport_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midiport_manager.cc; path = ../midiport_manager.cc; sourceTree = SOURCE_ROOT; }; + 43AA8320194EEB2600A67B56 /* mix.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mix.cc; path = ../mix.cc; sourceTree = SOURCE_ROOT; }; + 43AA8321194EEB2600A67B56 /* monitor_processor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = monitor_processor.cc; path = ../monitor_processor.cc; sourceTree = SOURCE_ROOT; }; + 43AA8322194EEB2600A67B56 /* mtc_slave.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mtc_slave.cc; path = ../mtc_slave.cc; sourceTree = SOURCE_ROOT; }; + 43AA8323194EEB2600A67B56 /* mtdm.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mtdm.cc; path = ../mtdm.cc; sourceTree = SOURCE_ROOT; }; + 43AA8324194EEB2600A67B56 /* mute_master.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mute_master.cc; path = ../mute_master.cc; sourceTree = SOURCE_ROOT; }; + 43AA8325194EEB2600A67B56 /* onset_detector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = onset_detector.cc; path = ../onset_detector.cc; sourceTree = SOURCE_ROOT; }; + 43AA8326194EEB2600A67B56 /* operations.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = operations.cc; path = ../operations.cc; sourceTree = SOURCE_ROOT; }; + 43AA8327194EEB2600A67B56 /* pan_controllable.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pan_controllable.cc; path = ../pan_controllable.cc; sourceTree = SOURCE_ROOT; }; + 43AA8328194EEB2600A67B56 /* pannable.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pannable.cc; path = ../pannable.cc; sourceTree = SOURCE_ROOT; }; + 43AA8329194EEB2600A67B56 /* panner_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = panner_manager.cc; path = ../panner_manager.cc; sourceTree = SOURCE_ROOT; }; + 43AA832A194EEB2600A67B56 /* panner_shell.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = panner_shell.cc; path = ../panner_shell.cc; sourceTree = SOURCE_ROOT; }; + 43AA832B194EEB2600A67B56 /* panner.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = panner.cc; path = ../panner.cc; sourceTree = SOURCE_ROOT; }; + 43AA832C194EEB2600A67B56 /* pcm_utils.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pcm_utils.cc; path = ../pcm_utils.cc; sourceTree = SOURCE_ROOT; }; + 43AA832D194EEB2600A67B56 /* pi_controller.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pi_controller.cc; path = ../pi_controller.cc; sourceTree = SOURCE_ROOT; }; + 43AA832E194EEB2600A67B56 /* playlist_factory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = playlist_factory.cc; path = ../playlist_factory.cc; sourceTree = SOURCE_ROOT; }; + 43AA832F194EEB2600A67B56 /* playlist_source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = playlist_source.cc; path = ../playlist_source.cc; sourceTree = SOURCE_ROOT; }; + 43AA8330194EEB2600A67B56 /* playlist.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = playlist.cc; path = ../playlist.cc; sourceTree = SOURCE_ROOT; }; + 43AA8331194EEB2600A67B56 /* plugin_insert.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = plugin_insert.cc; path = ../plugin_insert.cc; sourceTree = SOURCE_ROOT; }; + 43AA8332194EEB2600A67B56 /* plugin_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = plugin_manager.cc; path = ../plugin_manager.cc; sourceTree = SOURCE_ROOT; }; + 43AA8333194EEB2600A67B56 /* plugin.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = plugin.cc; path = ../plugin.cc; sourceTree = SOURCE_ROOT; }; + 43AA8334194EEB2600A67B56 /* port_insert.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = port_insert.cc; path = ../port_insert.cc; sourceTree = SOURCE_ROOT; }; + 43AA8335194EEB2600A67B56 /* port_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = port_manager.cc; path = ../port_manager.cc; sourceTree = SOURCE_ROOT; }; + 43AA8336194EEB2600A67B56 /* port_set.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = port_set.cc; path = ../port_set.cc; sourceTree = SOURCE_ROOT; }; + 43AA8337194EEB2600A67B56 /* port.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = port.cc; path = ../port.cc; sourceTree = SOURCE_ROOT; }; + 43AA8338194EEB2600A67B56 /* process_thread.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = process_thread.cc; path = ../process_thread.cc; sourceTree = SOURCE_ROOT; }; + 43AA8339194EEB2600A67B56 /* processor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = processor.cc; path = ../processor.cc; sourceTree = SOURCE_ROOT; }; + 43AA833A194EEB2600A67B56 /* progress.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = progress.cc; path = ../progress.cc; sourceTree = SOURCE_ROOT; }; + 43AA833B194EEB2600A67B56 /* quantize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = quantize.cc; path = ../quantize.cc; sourceTree = SOURCE_ROOT; }; + 43AA833C194EEB2600A67B56 /* rb_effect.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rb_effect.cc; path = ../rb_effect.cc; sourceTree = SOURCE_ROOT; }; + 43AA833D194EEB2600A67B56 /* rc_configuration.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rc_configuration.cc; path = ../rc_configuration.cc; sourceTree = SOURCE_ROOT; }; + 43AA833E194EEB2600A67B56 /* rdff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rdff.c; path = ../rdff.c; sourceTree = SOURCE_ROOT; }; + 43AA833F194EEB2600A67B56 /* recent_sessions.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = recent_sessions.cc; path = ../recent_sessions.cc; sourceTree = SOURCE_ROOT; }; + 43AA8340194EEB2600A67B56 /* region_factory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = region_factory.cc; path = ../region_factory.cc; sourceTree = SOURCE_ROOT; }; + 43AA8341194EEB2600A67B56 /* region.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = region.cc; path = ../region.cc; sourceTree = SOURCE_ROOT; }; + 43AA8342194EEB2600A67B56 /* resampled_source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = resampled_source.cc; path = ../resampled_source.cc; sourceTree = SOURCE_ROOT; }; + 43AA8343194EEB2600A67B56 /* return.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = return.cc; path = ../return.cc; sourceTree = SOURCE_ROOT; }; + 43AA8344194EEB2600A67B56 /* reverse.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = reverse.cc; path = ../reverse.cc; sourceTree = SOURCE_ROOT; }; + 43AA8345194EEB2600A67B56 /* revision.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = revision.cc; path = ../revision.cc; sourceTree = SOURCE_ROOT; }; + 43AA8346194EEB2600A67B56 /* route_graph.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = route_graph.cc; path = ../route_graph.cc; sourceTree = SOURCE_ROOT; }; + 43AA8347194EEB2600A67B56 /* route_group_member.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = route_group_member.cc; path = ../route_group_member.cc; sourceTree = SOURCE_ROOT; }; + 43AA8348194EEB2600A67B56 /* route_group.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = route_group.cc; path = ../route_group.cc; sourceTree = SOURCE_ROOT; }; + 43AA8349194EEB2600A67B56 /* route.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = route.cc; path = ../route.cc; sourceTree = SOURCE_ROOT; }; + 43AA834A194EEB2600A67B56 /* search_paths.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = search_paths.cc; path = ../search_paths.cc; sourceTree = SOURCE_ROOT; }; + 43AA834B194EEB2600A67B56 /* send.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = send.cc; path = ../send.cc; sourceTree = SOURCE_ROOT; }; + 43AA834C194EEB2600A67B56 /* session_butler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_butler.cc; path = ../session_butler.cc; sourceTree = SOURCE_ROOT; }; + 43AA834D194EEB2600A67B56 /* session_click.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_click.cc; path = ../session_click.cc; sourceTree = SOURCE_ROOT; }; + 43AA834E194EEB2600A67B56 /* session_command.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_command.cc; path = ../session_command.cc; sourceTree = SOURCE_ROOT; }; + 43AA834F194EEB2600A67B56 /* session_configuration.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_configuration.cc; path = ../session_configuration.cc; sourceTree = SOURCE_ROOT; }; + 43AA8350194EEB2600A67B56 /* session_directory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_directory.cc; path = ../session_directory.cc; sourceTree = SOURCE_ROOT; }; + 43AA8351194EEB2600A67B56 /* session_events.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_events.cc; path = ../session_events.cc; sourceTree = SOURCE_ROOT; }; + 43AA8352194EEB2600A67B56 /* session_export.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_export.cc; path = ../session_export.cc; sourceTree = SOURCE_ROOT; }; + 43AA8353194EEB2600A67B56 /* session_handle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_handle.cc; path = ../session_handle.cc; sourceTree = SOURCE_ROOT; }; + 43AA8354194EEB2600A67B56 /* session_ltc.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_ltc.cc; path = ../session_ltc.cc; sourceTree = SOURCE_ROOT; }; + 43AA8355194EEB2600A67B56 /* session_metadata.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_metadata.cc; path = ../session_metadata.cc; sourceTree = SOURCE_ROOT; }; + 43AA8356194EEB2600A67B56 /* session_midi.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_midi.cc; path = ../session_midi.cc; sourceTree = SOURCE_ROOT; }; + 43AA8357194EEB2600A67B56 /* session_object.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_object.cc; path = ../session_object.cc; sourceTree = SOURCE_ROOT; }; + 43AA8358194EEB2600A67B56 /* session_playlists.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_playlists.cc; path = ../session_playlists.cc; sourceTree = SOURCE_ROOT; }; + 43AA8359194EEB2600A67B56 /* session_process.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_process.cc; path = ../session_process.cc; sourceTree = SOURCE_ROOT; }; + 43AA835A194EEB2600A67B56 /* session_rtevents.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_rtevents.cc; path = ../session_rtevents.cc; sourceTree = SOURCE_ROOT; }; + 43AA835B194EEB2600A67B56 /* session_state_utils.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_state_utils.cc; path = ../session_state_utils.cc; sourceTree = SOURCE_ROOT; }; + 43AA835C194EEB2600A67B56 /* session_state.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_state.cc; path = ../session_state.cc; sourceTree = SOURCE_ROOT; }; + 43AA835D194EEB2600A67B56 /* session_time.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_time.cc; path = ../session_time.cc; sourceTree = SOURCE_ROOT; }; + 43AA835E194EEB2600A67B56 /* session_transport.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_transport.cc; path = ../session_transport.cc; sourceTree = SOURCE_ROOT; }; + 43AA835F194EEB2600A67B56 /* session_vst.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_vst.cc; path = ../session_vst.cc; sourceTree = SOURCE_ROOT; }; + 43AA8360194EEB2600A67B56 /* session.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session.cc; path = ../session.cc; sourceTree = SOURCE_ROOT; }; + 43AA8361194EEB2600A67B56 /* slave.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = slave.cc; path = ../slave.cc; sourceTree = SOURCE_ROOT; }; + 43AA8362194EEB2600A67B56 /* smf_source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = smf_source.cc; path = ../smf_source.cc; sourceTree = SOURCE_ROOT; }; + 43AA8363194EEB2600A67B56 /* sndfile_helpers.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sndfile_helpers.cc; path = ../sndfile_helpers.cc; sourceTree = SOURCE_ROOT; }; + 43AA8364194EEB2600A67B56 /* sndfileimportable.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sndfileimportable.cc; path = ../sndfileimportable.cc; sourceTree = SOURCE_ROOT; }; + 43AA8365194EEB2600A67B56 /* sndfilesource.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sndfilesource.cc; path = ../sndfilesource.cc; sourceTree = SOURCE_ROOT; }; + 43AA8366194EEB2600A67B56 /* source_factory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = source_factory.cc; path = ../source_factory.cc; sourceTree = SOURCE_ROOT; }; + 43AA8367194EEB2600A67B56 /* source.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = source.cc; path = ../source.cc; sourceTree = SOURCE_ROOT; }; + 43AA8368194EEB2600A67B56 /* speakers.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = speakers.cc; path = ../speakers.cc; sourceTree = SOURCE_ROOT; }; + 43AA8369194EEB2600A67B56 /* srcfilesource.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srcfilesource.cc; path = ../srcfilesource.cc; sourceTree = SOURCE_ROOT; }; + 43AA836A194EEB2600A67B56 /* sse_functions_64bit.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = sse_functions_64bit.s; path = ../sse_functions_64bit.s; sourceTree = SOURCE_ROOT; }; + 43AA836B194EEB2600A67B56 /* sse_functions_xmm.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sse_functions_xmm.cc; path = ../sse_functions_xmm.cc; sourceTree = SOURCE_ROOT; }; + 43AA836C194EEB2600A67B56 /* sse_functions.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; name = sse_functions.s; path = ../sse_functions.s; sourceTree = SOURCE_ROOT; }; + 43AA836D194EEB2600A67B56 /* st_pitch.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = st_pitch.cc; path = ../st_pitch.cc; sourceTree = SOURCE_ROOT; }; + 43AA836E194EEB2600A67B56 /* st_stretch.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = st_stretch.cc; path = ../st_stretch.cc; sourceTree = SOURCE_ROOT; }; + 43AA836F194EEB2600A67B56 /* strip_silence.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = strip_silence.cc; path = ../strip_silence.cc; sourceTree = SOURCE_ROOT; }; + 43AA8370194EEB2600A67B56 /* system_exec.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = system_exec.cc; path = ../system_exec.cc; sourceTree = SOURCE_ROOT; }; + 43AA8371194EEB2600A67B56 /* tape_file_matcher.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tape_file_matcher.cc; path = ../tape_file_matcher.cc; sourceTree = SOURCE_ROOT; }; + 43AA8372194EEB2600A67B56 /* template_utils.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = template_utils.cc; path = ../template_utils.cc; sourceTree = SOURCE_ROOT; }; + 43AA8373194EEB2600A67B56 /* tempo_map_importer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tempo_map_importer.cc; path = ../tempo_map_importer.cc; sourceTree = SOURCE_ROOT; }; + 43AA8374194EEB2600A67B56 /* tempo.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tempo.cc; path = ../tempo.cc; sourceTree = SOURCE_ROOT; }; + 43AA8375194EEB2600A67B56 /* thread_buffers.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = thread_buffers.cc; path = ../thread_buffers.cc; sourceTree = SOURCE_ROOT; }; + 43AA8376194EEB2600A67B56 /* ticker.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ticker.cc; path = ../ticker.cc; sourceTree = SOURCE_ROOT; }; + 43AA8377194EEB2600A67B56 /* track.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = track.cc; path = ../track.cc; sourceTree = SOURCE_ROOT; }; + 43AA8378194EEB2600A67B56 /* transient_detector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = transient_detector.cc; path = ../transient_detector.cc; sourceTree = SOURCE_ROOT; }; + 43AA8379194EEB2600A67B56 /* unknown_processor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = unknown_processor.cc; path = ../unknown_processor.cc; sourceTree = SOURCE_ROOT; }; + 43AA837A194EEB2600A67B56 /* uri_map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = uri_map.cc; path = ../uri_map.cc; sourceTree = SOURCE_ROOT; }; + 43AA837B194EEB2600A67B56 /* user_bundle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = user_bundle.cc; path = ../user_bundle.cc; sourceTree = SOURCE_ROOT; }; + 43AA837C194EEB2600A67B56 /* utils.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utils.cc; path = ../utils.cc; sourceTree = SOURCE_ROOT; }; + 43AA837D194EEB2600A67B56 /* version.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = version.cc; path = ../version.cc; sourceTree = SOURCE_ROOT; }; + 43AA837E194EEB2600A67B56 /* vst_info_file.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = vst_info_file.cc; path = ../vst_info_file.cc; sourceTree = SOURCE_ROOT; }; + 43AA837F194EEB2600A67B56 /* vst_plugin.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = vst_plugin.cc; path = ../vst_plugin.cc; sourceTree = SOURCE_ROOT; }; + 43AA8380194EEB2600A67B56 /* vumeterdsp.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = vumeterdsp.cc; path = ../vumeterdsp.cc; sourceTree = SOURCE_ROOT; }; + 43AA8381194EEB2600A67B56 /* windows_vst_plugin.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = windows_vst_plugin.cc; path = ../windows_vst_plugin.cc; sourceTree = SOURCE_ROOT; }; + 43AA8382194EEB2600A67B56 /* worker.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = worker.cc; path = ../worker.cc; sourceTree = SOURCE_ROOT; }; + 43AA8459194EEB5F00A67B56 /* audio_engine_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_engine_test.cc; path = ../test/audio_engine_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA845A194EEB5F00A67B56 /* audio_engine_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_engine_test.h; path = ../test/audio_engine_test.h; sourceTree = SOURCE_ROOT; }; + 43AA845B194EEB5F00A67B56 /* audio_region_read_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_region_read_test.cc; path = ../test/audio_region_read_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA845C194EEB5F00A67B56 /* audio_region_read_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_region_read_test.h; path = ../test/audio_region_read_test.h; sourceTree = SOURCE_ROOT; }; + 43AA845D194EEB5F00A67B56 /* audio_region_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_region_test.cc; path = ../test/audio_region_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA845E194EEB5F00A67B56 /* audio_region_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_region_test.h; path = ../test/audio_region_test.h; sourceTree = SOURCE_ROOT; }; + 43AA845F194EEB5F00A67B56 /* automation_list_property_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = automation_list_property_test.cc; path = ../test/automation_list_property_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA8460194EEB5F00A67B56 /* automation_list_property_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_list_property_test.h; path = ../test/automation_list_property_test.h; sourceTree = SOURCE_ROOT; }; + 43AA8461194EEB5F00A67B56 /* bbt_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bbt_test.cc; path = ../test/bbt_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA8462194EEB5F00A67B56 /* bbt_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bbt_test.h; path = ../test/bbt_test.h; sourceTree = SOURCE_ROOT; }; + 43AA8463194EEB5F00A67B56 /* combine_regions_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = combine_regions_test.cc; path = ../test/combine_regions_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA8464194EEB5F00A67B56 /* combine_regions_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = combine_regions_test.h; path = ../test/combine_regions_test.h; sourceTree = SOURCE_ROOT; }; + 43AA8465194EEB5F00A67B56 /* control_surfaces_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = control_surfaces_test.cc; path = ../test/control_surfaces_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA8466194EEB5F00A67B56 /* control_surfaces_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = control_surfaces_test.h; path = ../test/control_surfaces_test.h; sourceTree = SOURCE_ROOT; }; + 43AA8469194EEB5F00A67B56 = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = folder; sourceTree = "<group>"; }; + 43AA846A194EEB5F00A67B56 /* automation_list_property_test1.ref */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = automation_list_property_test1.ref; path = ../test/data/automation_list_property_test1.ref; sourceTree = SOURCE_ROOT; }; + 43AA846B194EEB5F00A67B56 /* automation_list_property_test2.ref */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = automation_list_property_test2.ref; path = ../test/data/automation_list_property_test2.ref; sourceTree = SOURCE_ROOT; }; + 43AA846C194EEB5F00A67B56 /* automation_list_property_test3.ref */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = automation_list_property_test3.ref; path = ../test/data/automation_list_property_test3.ref; sourceTree = SOURCE_ROOT; }; + 43AA846D194EEB5F00A67B56 /* automation_list_property_test4.ref */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = automation_list_property_test4.ref; path = ../test/data/automation_list_property_test4.ref; sourceTree = SOURCE_ROOT; }; + 43AA846F194EEB5F00A67B56 /* instant.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = instant.xml; path = ../test/data/mantis_3356/instant.xml; sourceTree = SOURCE_ROOT; }; + 43AA8473194EEB5F00A67B56 /* Midi 1-1.mid */ = {isa = PBXFileReference; lastKnownFileType = audio.midi; path = "Midi 1-1.mid"; sourceTree = "<group>"; }; + 43AA8474194EEB5F00A67B56 /* mantis_3356.ardour */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = mantis_3356.ardour; path = ../test/data/mantis_3356/mantis_3356.ardour; sourceTree = SOURCE_ROOT; }; + 43AA8475194EEB5F00A67B56 /* mantis_3356.ref */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = mantis_3356.ref; path = ../test/data/mantis_3356.ref; sourceTree = SOURCE_ROOT; }; + 43AA8478194EEB5F00A67B56 /* instant.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = instant.xml; sourceTree = "<group>"; }; + 43AA8479194EEB5F00A67B56 /* rec_enabled.ardour */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = rec_enabled.ardour; sourceTree = "<group>"; }; + 43AA847A194EEB5F00A67B56 /* rec_enabled.history */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = rec_enabled.history; sourceTree = "<group>"; }; + 43AA847B194EEB5F00A67B56 /* test.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = test.wav; sourceTree = "<group>"; }; + 43AA847C194EEB5F00A67B56 /* dummy_lxvst.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dummy_lxvst.cc; path = ../test/dummy_lxvst.cc; sourceTree = SOURCE_ROOT; }; + 43AA847D194EEB5F00A67B56 /* framepos_minus_beats_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = framepos_minus_beats_test.cc; path = ../test/framepos_minus_beats_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA847E194EEB5F00A67B56 /* framepos_minus_beats_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = framepos_minus_beats_test.h; path = ../test/framepos_minus_beats_test.h; sourceTree = SOURCE_ROOT; }; + 43AA847F194EEB5F00A67B56 /* framepos_plus_beats_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = framepos_plus_beats_test.cc; path = ../test/framepos_plus_beats_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA8480194EEB5F00A67B56 /* framepos_plus_beats_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = framepos_plus_beats_test.h; path = ../test/framepos_plus_beats_test.h; sourceTree = SOURCE_ROOT; }; + 43AA8481194EEB5F00A67B56 /* framewalk_to_beats_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = framewalk_to_beats_test.cc; path = ../test/framewalk_to_beats_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA8482194EEB5F00A67B56 /* framewalk_to_beats_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = framewalk_to_beats_test.h; path = ../test/framewalk_to_beats_test.h; sourceTree = SOURCE_ROOT; }; + 43AA8483194EEB5F00A67B56 /* interpolation_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = interpolation_test.cc; path = ../test/interpolation_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA8484194EEB5F00A67B56 /* interpolation_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = interpolation_test.h; path = ../test/interpolation_test.h; sourceTree = SOURCE_ROOT; }; + 43AA8485194EEB5F00A67B56 /* jack_utils_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = jack_utils_test.cc; path = ../test/jack_utils_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA8486194EEB5F00A67B56 /* jack_utils_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jack_utils_test.h; path = ../test/jack_utils_test.h; sourceTree = SOURCE_ROOT; }; + 43AA8487194EEB5F00A67B56 /* load_session.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = load_session.cc; path = ../test/load_session.cc; sourceTree = SOURCE_ROOT; }; + 43AA8488194EEB5F00A67B56 /* load_sessions_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = load_sessions_test.cc; path = ../test/load_sessions_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA8489194EEB5F00A67B56 /* load_sessions_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = load_sessions_test.h; path = ../test/load_sessions_test.h; sourceTree = SOURCE_ROOT; }; + 43AA848A194EEB5F00A67B56 /* midi_clock_slave_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = midi_clock_slave_test.cc; path = ../test/midi_clock_slave_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA848B194EEB5F00A67B56 /* midi_clock_slave_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_clock_slave_test.h; path = ../test/midi_clock_slave_test.h; sourceTree = SOURCE_ROOT; }; + 43AA848C194EEB5F00A67B56 /* mtdm_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mtdm_test.cc; path = ../test/mtdm_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA848D194EEB5F00A67B56 /* mtdm_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mtdm_test.h; path = ../test/mtdm_test.h; sourceTree = SOURCE_ROOT; }; + 43AA848E194EEB5F00A67B56 /* playlist_equivalent_regions_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = playlist_equivalent_regions_test.cc; path = ../test/playlist_equivalent_regions_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA848F194EEB5F00A67B56 /* playlist_equivalent_regions_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist_equivalent_regions_test.h; path = ../test/playlist_equivalent_regions_test.h; sourceTree = SOURCE_ROOT; }; + 43AA8490194EEB5F00A67B56 /* playlist_layering_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = playlist_layering_test.cc; path = ../test/playlist_layering_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA8491194EEB5F00A67B56 /* playlist_layering_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist_layering_test.h; path = ../test/playlist_layering_test.h; sourceTree = SOURCE_ROOT; }; + 43AA8492194EEB5F00A67B56 /* playlist_read_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = playlist_read_test.cc; path = ../test/playlist_read_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA8493194EEB5F00A67B56 /* playlist_read_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist_read_test.h; path = ../test/playlist_read_test.h; sourceTree = SOURCE_ROOT; }; + 43AA8494194EEB5F00A67B56 /* plugins_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = plugins_test.cc; path = ../test/plugins_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA8495194EEB5F00A67B56 /* plugins_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugins_test.h; path = ../test/plugins_test.h; sourceTree = SOURCE_ROOT; }; + 43AA8497194EEB5F00A67B56 /* load_session.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = load_session.cc; sourceTree = "<group>"; }; + 43AA8498194EEB5F00A67B56 /* lots_of_regions.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lots_of_regions.cc; sourceTree = "<group>"; }; + 43AA8499194EEB5F00A67B56 /* runpc.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = runpc.cc; sourceTree = "<group>"; }; + 43AA849C194EEB5F00A67B56 /* 0tracks.ardour */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = 0tracks.ardour; sourceTree = "<group>"; }; + 43AA849D194EEB5F00A67B56 /* 0tracks.history */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = 0tracks.history; sourceTree = "<group>"; }; + 43AA849F194EEB5F00A67B56 /* 1region.ardour */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = 1region.ardour; sourceTree = "<group>"; }; + 43AA84A0194EEB5F00A67B56 /* 1region.history */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = 1region.history; sourceTree = "<group>"; }; + 43AA84A1194EEB5F00A67B56 /* instant.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = instant.xml; sourceTree = "<group>"; }; + 43AA84A5194EEB5F00A67B56 /* MIDI 1-1.mid */ = {isa = PBXFileReference; lastKnownFileType = audio.midi; path = "MIDI 1-1.mid"; sourceTree = "<group>"; }; + 43AA84A7194EEB5F00A67B56 /* 32tracks.ardour */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = 32tracks.ardour; sourceTree = "<group>"; }; + 43AA84A8194EEB5F00A67B56 /* 32tracks.history */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = 32tracks.history; sourceTree = "<group>"; }; + 43AA84A9194EEB5F00A67B56 /* instant.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = instant.xml; sourceTree = "<group>"; }; + 43AA84AA194EEB5F00A67B56 /* region_naming_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = region_naming_test.cc; path = ../test/region_naming_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA84AB194EEB5F00A67B56 /* region_naming_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_naming_test.h; path = ../test/region_naming_test.h; sourceTree = SOURCE_ROOT; }; + 43AA84AC194EEB5F00A67B56 /* resampled_source_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = resampled_source_test.cc; path = ../test/resampled_source_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA84AD194EEB5F00A67B56 /* resampled_source_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = resampled_source_test.h; path = ../test/resampled_source_test.h; sourceTree = SOURCE_ROOT; }; + 43AA84AE194EEB5F00A67B56 /* session_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = session_test.cc; path = ../test/session_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA84AF194EEB5F00A67B56 /* session_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_test.h; path = ../test/session_test.h; sourceTree = SOURCE_ROOT; }; + 43AA84B0194EEB5F00A67B56 /* tempo_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tempo_test.cc; path = ../test/tempo_test.cc; sourceTree = SOURCE_ROOT; }; + 43AA84B1194EEB5F00A67B56 /* tempo_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tempo_test.h; path = ../test/tempo_test.h; sourceTree = SOURCE_ROOT; }; + 43AA84B2194EEB5F00A67B56 /* test_common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = test_common.cc; path = ../test/test_common.cc; sourceTree = SOURCE_ROOT; }; + 43AA84B3194EEB5F00A67B56 /* test_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_common.h; path = ../test/test_common.h; sourceTree = SOURCE_ROOT; }; + 43AA84B4194EEB5F00A67B56 /* test_needing_session.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = test_needing_session.cc; path = ../test/test_needing_session.cc; sourceTree = SOURCE_ROOT; }; + 43AA84B5194EEB5F00A67B56 /* test_needing_session.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_needing_session.h; path = ../test/test_needing_session.h; sourceTree = SOURCE_ROOT; }; + 43AA84B6194EEB5F00A67B56 /* test_util.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = test_util.cc; path = ../test/test_util.cc; sourceTree = SOURCE_ROOT; }; + 43AA84B7194EEB5F00A67B56 /* test_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = test_util.h; path = ../test/test_util.h; sourceTree = SOURCE_ROOT; }; + 43AA84B8194EEB5F00A67B56 /* testrunner.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testrunner.cc; path = ../test/testrunner.cc; sourceTree = SOURCE_ROOT; }; + 43AA84F4194EEB8B00A67B56 /* amp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = amp.h; path = ../ardour/amp.h; sourceTree = SOURCE_ROOT; }; + 43AA84F5194EEB8B00A67B56 /* analyser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = analyser.h; path = ../ardour/analyser.h; sourceTree = SOURCE_ROOT; }; + 43AA84F6194EEB8B00A67B56 /* ardour.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ardour.h; path = ../ardour/ardour.h; sourceTree = SOURCE_ROOT; }; + 43AA84F7194EEB8B00A67B56 /* async_midi_port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = async_midi_port.h; path = ../ardour/async_midi_port.h; sourceTree = SOURCE_ROOT; }; + 43AA84F8194EEB8B00A67B56 /* audio_backend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_backend.h; path = ../ardour/audio_backend.h; sourceTree = SOURCE_ROOT; }; + 43AA84F9194EEB8B00A67B56 /* audio_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_buffer.h; path = ../ardour/audio_buffer.h; sourceTree = SOURCE_ROOT; }; + 43AA84FA194EEB8B00A67B56 /* audio_diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_diskstream.h; path = ../ardour/audio_diskstream.h; sourceTree = SOURCE_ROOT; }; + 43AA84FB194EEB8B00A67B56 /* audio_library.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_library.h; path = ../ardour/audio_library.h; sourceTree = SOURCE_ROOT; }; + 43AA84FC194EEB8B00A67B56 /* audio_playlist_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_playlist_importer.h; path = ../ardour/audio_playlist_importer.h; sourceTree = SOURCE_ROOT; }; + 43AA84FD194EEB8B00A67B56 /* audio_playlist_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_playlist_source.h; path = ../ardour/audio_playlist_source.h; sourceTree = SOURCE_ROOT; }; + 43AA84FE194EEB8B00A67B56 /* audio_port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_port.h; path = ../ardour/audio_port.h; sourceTree = SOURCE_ROOT; }; + 43AA84FF194EEB8B00A67B56 /* audio_region_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_region_importer.h; path = ../ardour/audio_region_importer.h; sourceTree = SOURCE_ROOT; }; + 43AA8500194EEB8B00A67B56 /* audio_track_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_track_importer.h; path = ../ardour/audio_track_importer.h; sourceTree = SOURCE_ROOT; }; + 43AA8501194EEB8B00A67B56 /* audio_track.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_track.h; path = ../ardour/audio_track.h; sourceTree = SOURCE_ROOT; }; + 43AA8502194EEB8B00A67B56 /* audio_unit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_unit.h; path = ../ardour/audio_unit.h; sourceTree = SOURCE_ROOT; }; + 43AA8503194EEB8B00A67B56 /* audioanalyser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audioanalyser.h; path = ../ardour/audioanalyser.h; sourceTree = SOURCE_ROOT; }; + 43AA8504194EEB8B00A67B56 /* audioengine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audioengine.h; path = ../ardour/audioengine.h; sourceTree = SOURCE_ROOT; }; + 43AA8505194EEB8B00A67B56 /* audiofile_tagger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audiofile_tagger.h; path = ../ardour/audiofile_tagger.h; sourceTree = SOURCE_ROOT; }; + 43AA8506194EEB8B00A67B56 /* audiofilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audiofilesource.h; path = ../ardour/audiofilesource.h; sourceTree = SOURCE_ROOT; }; + 43AA8507194EEB8B00A67B56 /* audioplaylist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audioplaylist.h; path = ../ardour/audioplaylist.h; sourceTree = SOURCE_ROOT; }; + 43AA8508194EEB8B00A67B56 /* audioregion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audioregion.h; path = ../ardour/audioregion.h; sourceTree = SOURCE_ROOT; }; + 43AA8509194EEB8B00A67B56 /* audiosource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audiosource.h; path = ../ardour/audiosource.h; sourceTree = SOURCE_ROOT; }; + 43AA850A194EEB8B00A67B56 /* auditioner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = auditioner.h; path = ../ardour/auditioner.h; sourceTree = SOURCE_ROOT; }; + 43AA850B194EEB8B00A67B56 /* auto_bundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = auto_bundle.h; path = ../ardour/auto_bundle.h; sourceTree = SOURCE_ROOT; }; + 43AA850C194EEB8B00A67B56 /* automatable_sequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automatable_sequence.h; path = ../ardour/automatable_sequence.h; sourceTree = SOURCE_ROOT; }; + 43AA850D194EEB8B00A67B56 /* automatable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automatable.h; path = ../ardour/automatable.h; sourceTree = SOURCE_ROOT; }; + 43AA850E194EEB8B00A67B56 /* automation_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_control.h; path = ../ardour/automation_control.h; sourceTree = SOURCE_ROOT; }; + 43AA850F194EEB8B00A67B56 /* automation_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_list.h; path = ../ardour/automation_list.h; sourceTree = SOURCE_ROOT; }; + 43AA8510194EEB8B00A67B56 /* automation_watch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = automation_watch.h; path = ../ardour/automation_watch.h; sourceTree = SOURCE_ROOT; }; + 43AA8511194EEB8B00A67B56 /* beats_frames_converter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = beats_frames_converter.h; path = ../ardour/beats_frames_converter.h; sourceTree = SOURCE_ROOT; }; + 43AA8512194EEB8B00A67B56 /* broadcast_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = broadcast_info.h; path = ../ardour/broadcast_info.h; sourceTree = SOURCE_ROOT; }; + 43AA8513194EEB8B00A67B56 /* buffer_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = buffer_manager.h; path = ../ardour/buffer_manager.h; sourceTree = SOURCE_ROOT; }; + 43AA8514194EEB8B00A67B56 /* buffer_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = buffer_set.h; path = ../ardour/buffer_set.h; sourceTree = SOURCE_ROOT; }; + 43AA8515194EEB8B00A67B56 /* buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = buffer.h; path = ../ardour/buffer.h; sourceTree = SOURCE_ROOT; }; + 43AA8516194EEB8B00A67B56 /* bundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bundle.h; path = ../ardour/bundle.h; sourceTree = SOURCE_ROOT; }; + 43AA8517194EEB8B00A67B56 /* butler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = butler.h; path = ../ardour/butler.h; sourceTree = SOURCE_ROOT; }; + 43AA8518194EEB8B00A67B56 /* caimportable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = caimportable.h; path = ../ardour/caimportable.h; sourceTree = SOURCE_ROOT; }; + 43AA8519194EEB8B00A67B56 /* capturing_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = capturing_processor.h; path = ../ardour/capturing_processor.h; sourceTree = SOURCE_ROOT; }; + 43AA851A194EEB8B00A67B56 /* chan_count.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = chan_count.h; path = ../ardour/chan_count.h; sourceTree = SOURCE_ROOT; }; + 43AA851B194EEB8B00A67B56 /* chan_mapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = chan_mapping.h; path = ../ardour/chan_mapping.h; sourceTree = SOURCE_ROOT; }; + 43AA851C194EEB8B00A67B56 /* click.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = click.h; path = ../ardour/click.h; sourceTree = SOURCE_ROOT; }; + 43AA851D194EEB8B00A67B56 /* comparable_shared_ptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = comparable_shared_ptr.h; path = ../ardour/comparable_shared_ptr.h; sourceTree = SOURCE_ROOT; }; + 43AA851E194EEB8B00A67B56 /* configuration_variable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = configuration_variable.h; path = ../ardour/configuration_variable.h; sourceTree = SOURCE_ROOT; }; + 43AA851F194EEB8B00A67B56 /* configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = configuration.h; path = ../ardour/configuration.h; sourceTree = SOURCE_ROOT; }; + 43AA8520194EEB8B00A67B56 /* control_protocol_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = control_protocol_manager.h; path = ../ardour/control_protocol_manager.h; sourceTree = SOURCE_ROOT; }; + 43AA8521194EEB8B00A67B56 /* coreaudiosource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = coreaudiosource.h; path = ../ardour/coreaudiosource.h; sourceTree = SOURCE_ROOT; }; + 43AA8522194EEB8B00A67B56 /* cycle_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cycle_timer.h; path = ../ardour/cycle_timer.h; sourceTree = SOURCE_ROOT; }; + 43AA8523194EEB8B00A67B56 /* cycles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cycles.h; path = ../ardour/cycles.h; sourceTree = SOURCE_ROOT; }; + 43AA8524194EEB8B00A67B56 /* data_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = data_type.h; path = ../ardour/data_type.h; sourceTree = SOURCE_ROOT; }; + 43AA8525194EEB8B00A67B56 /* dB.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dB.h; path = ../ardour/dB.h; sourceTree = SOURCE_ROOT; }; + 43AA8526194EEB8B00A67B56 /* debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = debug.h; path = ../ardour/debug.h; sourceTree = SOURCE_ROOT; }; + 43AA8527194EEB8B00A67B56 /* delivery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = delivery.h; path = ../ardour/delivery.h; sourceTree = SOURCE_ROOT; }; + 43AA8528194EEB8B00A67B56 /* directory_names.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = directory_names.h; path = ../ardour/directory_names.h; sourceTree = SOURCE_ROOT; }; + 43AA8529194EEB8B00A67B56 /* diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = diskstream.h; path = ../ardour/diskstream.h; sourceTree = SOURCE_ROOT; }; + 43AA852A194EEB8B00A67B56 /* element_import_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = element_import_handler.h; path = ../ardour/element_import_handler.h; sourceTree = SOURCE_ROOT; }; + 43AA852B194EEB8B00A67B56 /* element_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = element_importer.h; path = ../ardour/element_importer.h; sourceTree = SOURCE_ROOT; }; + 43AA852C194EEB8B00A67B56 /* engine_state_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = engine_state_controller.h; path = ../ardour/engine_state_controller.h; sourceTree = SOURCE_ROOT; }; + 43AA852D194EEB8B00A67B56 /* event_type_map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = event_type_map.h; path = ../ardour/event_type_map.h; sourceTree = SOURCE_ROOT; }; + 43AA852E194EEB8B00A67B56 /* export_channel_configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_channel_configuration.h; path = ../ardour/export_channel_configuration.h; sourceTree = SOURCE_ROOT; }; + 43AA852F194EEB8B00A67B56 /* export_channel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_channel.h; path = ../ardour/export_channel.h; sourceTree = SOURCE_ROOT; }; + 43AA8530194EEB8B00A67B56 /* export_failed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_failed.h; path = ../ardour/export_failed.h; sourceTree = SOURCE_ROOT; }; + 43AA8531194EEB8B00A67B56 /* export_filename.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_filename.h; path = ../ardour/export_filename.h; sourceTree = SOURCE_ROOT; }; + 43AA8532194EEB8B00A67B56 /* export_format_base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_format_base.h; path = ../ardour/export_format_base.h; sourceTree = SOURCE_ROOT; }; + 43AA8533194EEB8B00A67B56 /* export_format_compatibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_format_compatibility.h; path = ../ardour/export_format_compatibility.h; sourceTree = SOURCE_ROOT; }; + 43AA8534194EEB8B00A67B56 /* export_format_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_format_manager.h; path = ../ardour/export_format_manager.h; sourceTree = SOURCE_ROOT; }; + 43AA8535194EEB8B00A67B56 /* export_format_specification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_format_specification.h; path = ../ardour/export_format_specification.h; sourceTree = SOURCE_ROOT; }; + 43AA8536194EEB8B00A67B56 /* export_formats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_formats.h; path = ../ardour/export_formats.h; sourceTree = SOURCE_ROOT; }; + 43AA8537194EEB8B00A67B56 /* export_graph_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_graph_builder.h; path = ../ardour/export_graph_builder.h; sourceTree = SOURCE_ROOT; }; + 43AA8538194EEB8B00A67B56 /* export_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_handler.h; path = ../ardour/export_handler.h; sourceTree = SOURCE_ROOT; }; + 43AA8539194EEB8B00A67B56 /* export_multiplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_multiplication.h; path = ../ardour/export_multiplication.h; sourceTree = SOURCE_ROOT; }; + 43AA853A194EEB8B00A67B56 /* export_pointers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_pointers.h; path = ../ardour/export_pointers.h; sourceTree = SOURCE_ROOT; }; + 43AA853B194EEB8B00A67B56 /* export_preset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_preset.h; path = ../ardour/export_preset.h; sourceTree = SOURCE_ROOT; }; + 43AA853C194EEB8B00A67B56 /* export_profile_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_profile_manager.h; path = ../ardour/export_profile_manager.h; sourceTree = SOURCE_ROOT; }; + 43AA853D194EEB8B00A67B56 /* export_status.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_status.h; path = ../ardour/export_status.h; sourceTree = SOURCE_ROOT; }; + 43AA853E194EEB8B00A67B56 /* export_timespan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = export_timespan.h; path = ../ardour/export_timespan.h; sourceTree = SOURCE_ROOT; }; + 43AA853F194EEB8B00A67B56 /* file_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = file_source.h; path = ../ardour/file_source.h; sourceTree = SOURCE_ROOT; }; + 43AA8540194EEB8B00A67B56 /* filename_extensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filename_extensions.h; path = ../ardour/filename_extensions.h; sourceTree = SOURCE_ROOT; }; + 43AA8541194EEB8B00A67B56 /* filesystem_paths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filesystem_paths.h; path = ../ardour/filesystem_paths.h; sourceTree = SOURCE_ROOT; }; + 43AA8542194EEB8B00A67B56 /* filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = filter.h; path = ../ardour/filter.h; sourceTree = SOURCE_ROOT; }; + 43AA8543194EEB8B00A67B56 /* graph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = graph.h; path = ../ardour/graph.h; sourceTree = SOURCE_ROOT; }; + 43AA8544194EEB8B00A67B56 /* graphnode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = graphnode.h; path = ../ardour/graphnode.h; sourceTree = SOURCE_ROOT; }; + 43AA8545194EEB8B00A67B56 /* iec1ppmdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iec1ppmdsp.h; path = ../ardour/iec1ppmdsp.h; sourceTree = SOURCE_ROOT; }; + 43AA8546194EEB8B00A67B56 /* iec2ppmdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iec2ppmdsp.h; path = ../ardour/iec2ppmdsp.h; sourceTree = SOURCE_ROOT; }; + 43AA8547194EEB8B00A67B56 /* import_status.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = import_status.h; path = ../ardour/import_status.h; sourceTree = SOURCE_ROOT; }; + 43AA8548194EEB8B00A67B56 /* importable_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = importable_source.h; path = ../ardour/importable_source.h; sourceTree = SOURCE_ROOT; }; + 43AA8549194EEB8B00A67B56 /* instrument_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = instrument_info.h; path = ../ardour/instrument_info.h; sourceTree = SOURCE_ROOT; }; + 43AA854A194EEB8B00A67B56 /* internal_return.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = internal_return.h; path = ../ardour/internal_return.h; sourceTree = SOURCE_ROOT; }; + 43AA854B194EEB8B00A67B56 /* internal_send.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = internal_send.h; path = ../ardour/internal_send.h; sourceTree = SOURCE_ROOT; }; + 43AA854C194EEB8B00A67B56 /* interpolation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = interpolation.h; path = ../ardour/interpolation.h; sourceTree = SOURCE_ROOT; }; + 43AA854D194EEB8B00A67B56 /* interthread_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = interthread_info.h; path = ../ardour/interthread_info.h; sourceTree = SOURCE_ROOT; }; + 43AA854E194EEB8B00A67B56 /* io_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = io_processor.h; path = ../ardour/io_processor.h; sourceTree = SOURCE_ROOT; }; + 43AA854F194EEB8B00A67B56 /* io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = io.h; path = ../ardour/io.h; sourceTree = SOURCE_ROOT; }; + 43AA8550194EEB8B00A67B56 /* jack_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jack_utils.h; path = ../ardour/jack_utils.h; sourceTree = SOURCE_ROOT; }; + 43AA8551194EEB8B00A67B56 /* kmeterdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = kmeterdsp.h; path = ../ardour/kmeterdsp.h; sourceTree = SOURCE_ROOT; }; + 43AA8552194EEB8B00A67B56 /* ladspa_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ladspa_plugin.h; path = ../ardour/ladspa_plugin.h; sourceTree = SOURCE_ROOT; }; + 43AA8553194EEB8B00A67B56 /* ladspa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ladspa.h; path = ../ardour/ladspa.h; sourceTree = SOURCE_ROOT; }; + 43AA8554194EEB8B00A67B56 /* latent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = latent.h; path = ../ardour/latent.h; sourceTree = SOURCE_ROOT; }; + 43AA8555194EEB8B00A67B56 /* libardour_visibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libardour_visibility.h; path = ../ardour/libardour_visibility.h; sourceTree = SOURCE_ROOT; }; + 43AA8556194EEB8B00A67B56 /* linux_vst_support.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = linux_vst_support.h; path = ../ardour/linux_vst_support.h; sourceTree = SOURCE_ROOT; }; + 43AA8557194EEB8B00A67B56 /* location_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = location_importer.h; path = ../ardour/location_importer.h; sourceTree = SOURCE_ROOT; }; + 43AA8558194EEB8B00A67B56 /* location.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = location.h; path = ../ardour/location.h; sourceTree = SOURCE_ROOT; }; + 43AA8559194EEB8B00A67B56 /* logcurve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = logcurve.h; path = ../ardour/logcurve.h; sourceTree = SOURCE_ROOT; }; + 43AA855A194EEB8B00A67B56 /* lv2_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lv2_plugin.h; path = ../ardour/lv2_plugin.h; sourceTree = SOURCE_ROOT; }; + 43AA855B194EEB8B00A67B56 /* lxvst_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lxvst_plugin.h; path = ../ardour/lxvst_plugin.h; sourceTree = SOURCE_ROOT; }; + 43AA855C194EEB8B00A67B56 /* meter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = meter.h; path = ../ardour/meter.h; sourceTree = SOURCE_ROOT; }; + 43AA855D194EEB8B00A67B56 /* midi_automation_list_binder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_automation_list_binder.h; path = ../ardour/midi_automation_list_binder.h; sourceTree = SOURCE_ROOT; }; + 43AA855E194EEB8B00A67B56 /* midi_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_buffer.h; path = ../ardour/midi_buffer.h; sourceTree = SOURCE_ROOT; }; + 43AA855F194EEB8B00A67B56 /* midi_diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_diskstream.h; path = ../ardour/midi_diskstream.h; sourceTree = SOURCE_ROOT; }; + 43AA8560194EEB8B00A67B56 /* midi_model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_model.h; path = ../ardour/midi_model.h; sourceTree = SOURCE_ROOT; }; + 43AA8561194EEB8B00A67B56 /* midi_operator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_operator.h; path = ../ardour/midi_operator.h; sourceTree = SOURCE_ROOT; }; + 43AA8562194EEB8B00A67B56 /* midi_patch_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_patch_manager.h; path = ../ardour/midi_patch_manager.h; sourceTree = SOURCE_ROOT; }; + 43AA8563194EEB8B00A67B56 /* midi_playlist_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_playlist_source.h; path = ../ardour/midi_playlist_source.h; sourceTree = SOURCE_ROOT; }; + 43AA8564194EEB8B00A67B56 /* midi_playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_playlist.h; path = ../ardour/midi_playlist.h; sourceTree = SOURCE_ROOT; }; + 43AA8565194EEB8B00A67B56 /* midi_port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_port.h; path = ../ardour/midi_port.h; sourceTree = SOURCE_ROOT; }; + 43AA8566194EEB8B00A67B56 /* midi_region.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_region.h; path = ../ardour/midi_region.h; sourceTree = SOURCE_ROOT; }; + 43AA8567194EEB8B00A67B56 /* midi_ring_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_ring_buffer.h; path = ../ardour/midi_ring_buffer.h; sourceTree = SOURCE_ROOT; }; + 43AA8568194EEB8B00A67B56 /* midi_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_source.h; path = ../ardour/midi_source.h; sourceTree = SOURCE_ROOT; }; + 43AA8569194EEB8B00A67B56 /* midi_state_tracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_state_tracker.h; path = ../ardour/midi_state_tracker.h; sourceTree = SOURCE_ROOT; }; + 43AA856A194EEB8B00A67B56 /* midi_stretch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_stretch.h; path = ../ardour/midi_stretch.h; sourceTree = SOURCE_ROOT; }; + 43AA856B194EEB8B00A67B56 /* midi_track.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_track.h; path = ../ardour/midi_track.h; sourceTree = SOURCE_ROOT; }; + 43AA856C194EEB8B00A67B56 /* midi_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midi_ui.h; path = ../ardour/midi_ui.h; sourceTree = SOURCE_ROOT; }; + 43AA856D194EEB8B00A67B56 /* midiport_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = midiport_manager.h; path = ../ardour/midiport_manager.h; sourceTree = SOURCE_ROOT; }; + 43AA856E194EEB8B00A67B56 /* mix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mix.h; path = ../ardour/mix.h; sourceTree = SOURCE_ROOT; }; + 43AA856F194EEB8B00A67B56 /* monitor_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = monitor_processor.h; path = ../ardour/monitor_processor.h; sourceTree = SOURCE_ROOT; }; + 43AA8570194EEB8B00A67B56 /* movable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = movable.h; path = ../ardour/movable.h; sourceTree = SOURCE_ROOT; }; + 43AA8571194EEB8B00A67B56 /* msvc_libardour.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = msvc_libardour.h; path = ../ardour/msvc_libardour.h; sourceTree = SOURCE_ROOT; }; + 43AA8572194EEB8B00A67B56 /* mtdm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mtdm.h; path = ../ardour/mtdm.h; sourceTree = SOURCE_ROOT; }; + 43AA8573194EEB8B00A67B56 /* mute_master.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mute_master.h; path = ../ardour/mute_master.h; sourceTree = SOURCE_ROOT; }; + 43AA8574194EEB8B00A67B56 /* noise.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = noise.h; path = ../ardour/noise.h; sourceTree = SOURCE_ROOT; }; + 43AA8575194EEB8B00A67B56 /* onset_detector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = onset_detector.h; path = ../ardour/onset_detector.h; sourceTree = SOURCE_ROOT; }; + 43AA8576194EEB8B00A67B56 /* operations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = operations.h; path = ../ardour/operations.h; sourceTree = SOURCE_ROOT; }; + 43AA8577194EEB8B00A67B56 /* pan_controllable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pan_controllable.h; path = ../ardour/pan_controllable.h; sourceTree = SOURCE_ROOT; }; + 43AA8578194EEB8B00A67B56 /* pannable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pannable.h; path = ../ardour/pannable.h; sourceTree = SOURCE_ROOT; }; + 43AA8579194EEB8B00A67B56 /* panner_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = panner_manager.h; path = ../ardour/panner_manager.h; sourceTree = SOURCE_ROOT; }; + 43AA857A194EEB8B00A67B56 /* panner_shell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = panner_shell.h; path = ../ardour/panner_shell.h; sourceTree = SOURCE_ROOT; }; + 43AA857B194EEB8B00A67B56 /* panner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = panner.h; path = ../ardour/panner.h; sourceTree = SOURCE_ROOT; }; + 43AA857C194EEB8B00A67B56 /* pcm_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pcm_utils.h; path = ../ardour/pcm_utils.h; sourceTree = SOURCE_ROOT; }; + 43AA857D194EEB8B00A67B56 /* peak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = peak.h; path = ../ardour/peak.h; sourceTree = SOURCE_ROOT; }; + 43AA857E194EEB8B00A67B56 /* pi_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pi_controller.h; path = ../ardour/pi_controller.h; sourceTree = SOURCE_ROOT; }; + 43AA857F194EEB8B00A67B56 /* pitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pitch.h; path = ../ardour/pitch.h; sourceTree = SOURCE_ROOT; }; + 43AA8580194EEB8B00A67B56 /* playlist_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist_factory.h; path = ../ardour/playlist_factory.h; sourceTree = SOURCE_ROOT; }; + 43AA8581194EEB8B00A67B56 /* playlist_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist_source.h; path = ../ardour/playlist_source.h; sourceTree = SOURCE_ROOT; }; + 43AA8582194EEB8B00A67B56 /* playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = playlist.h; path = ../ardour/playlist.h; sourceTree = SOURCE_ROOT; }; + 43AA8583194EEB8B00A67B56 /* plugin_insert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin_insert.h; path = ../ardour/plugin_insert.h; sourceTree = SOURCE_ROOT; }; + 43AA8584194EEB8B00A67B56 /* plugin_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin_manager.h; path = ../ardour/plugin_manager.h; sourceTree = SOURCE_ROOT; }; + 43AA8585194EEB8B00A67B56 /* plugin_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin_types.h; path = ../ardour/plugin_types.h; sourceTree = SOURCE_ROOT; }; + 43AA8586194EEB8B00A67B56 /* plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plugin.h; path = ../ardour/plugin.h; sourceTree = SOURCE_ROOT; }; + 43AA8587194EEB8B00A67B56 /* port_engine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_engine.h; path = ../ardour/port_engine.h; sourceTree = SOURCE_ROOT; }; + 43AA8588194EEB8B00A67B56 /* port_insert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_insert.h; path = ../ardour/port_insert.h; sourceTree = SOURCE_ROOT; }; + 43AA8589194EEB8B00A67B56 /* port_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_manager.h; path = ../ardour/port_manager.h; sourceTree = SOURCE_ROOT; }; + 43AA858A194EEB8B00A67B56 /* port_set.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port_set.h; path = ../ardour/port_set.h; sourceTree = SOURCE_ROOT; }; + 43AA858B194EEB8B00A67B56 /* port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = port.h; path = ../ardour/port.h; sourceTree = SOURCE_ROOT; }; + 43AA858C194EEB8B00A67B56 /* process_thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = process_thread.h; path = ../ardour/process_thread.h; sourceTree = SOURCE_ROOT; }; + 43AA858D194EEB8B00A67B56 /* processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = processor.h; path = ../ardour/processor.h; sourceTree = SOURCE_ROOT; }; + 43AA858E194EEB8B00A67B56 /* profile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = profile.h; path = ../ardour/profile.h; sourceTree = SOURCE_ROOT; }; + 43AA858F194EEB8B00A67B56 /* progress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = progress.h; path = ../ardour/progress.h; sourceTree = SOURCE_ROOT; }; + 43AA8590194EEB8B00A67B56 /* proxy_controllable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = proxy_controllable.h; path = ../ardour/proxy_controllable.h; sourceTree = SOURCE_ROOT; }; + 43AA8591194EEB8B00A67B56 /* public_diskstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = public_diskstream.h; path = ../ardour/public_diskstream.h; sourceTree = SOURCE_ROOT; }; + 43AA8592194EEB8B00A67B56 /* quantize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = quantize.h; path = ../ardour/quantize.h; sourceTree = SOURCE_ROOT; }; + 43AA8593194EEB8B00A67B56 /* rb_effect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rb_effect.h; path = ../ardour/rb_effect.h; sourceTree = SOURCE_ROOT; }; + 43AA8594194EEB8B00A67B56 /* rc_configuration_vars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rc_configuration_vars.h; path = ../ardour/rc_configuration_vars.h; sourceTree = SOURCE_ROOT; }; + 43AA8595194EEB8B00A67B56 /* rc_configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rc_configuration.h; path = ../ardour/rc_configuration.h; sourceTree = SOURCE_ROOT; }; + 43AA8596194EEB8B00A67B56 /* readable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = readable.h; path = ../ardour/readable.h; sourceTree = SOURCE_ROOT; }; + 43AA8597194EEB8B00A67B56 /* recent_sessions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = recent_sessions.h; path = ../ardour/recent_sessions.h; sourceTree = SOURCE_ROOT; }; + 43AA8598194EEB8B00A67B56 /* region_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_factory.h; path = ../ardour/region_factory.h; sourceTree = SOURCE_ROOT; }; + 43AA8599194EEB8B00A67B56 /* region_sorters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region_sorters.h; path = ../ardour/region_sorters.h; sourceTree = SOURCE_ROOT; }; + 43AA859A194EEB8B00A67B56 /* region.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = region.h; path = ../ardour/region.h; sourceTree = SOURCE_ROOT; }; + 43AA859B194EEB8B00A67B56 /* resampled_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = resampled_source.h; path = ../ardour/resampled_source.h; sourceTree = SOURCE_ROOT; }; + 43AA859C194EEB8B00A67B56 /* return.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = return.h; path = ../ardour/return.h; sourceTree = SOURCE_ROOT; }; + 43AA859D194EEB8B00A67B56 /* reverse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = reverse.h; path = ../ardour/reverse.h; sourceTree = SOURCE_ROOT; }; + 43AA859E194EEB8B00A67B56 /* revision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = revision.h; path = ../ardour/revision.h; sourceTree = SOURCE_ROOT; }; + 43AA859F194EEB8B00A67B56 /* route_graph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_graph.h; path = ../ardour/route_graph.h; sourceTree = SOURCE_ROOT; }; + 43AA85A0194EEB8B00A67B56 /* route_group_member.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_group_member.h; path = ../ardour/route_group_member.h; sourceTree = SOURCE_ROOT; }; + 43AA85A1194EEB8B00A67B56 /* route_group_specialized.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_group_specialized.h; path = ../ardour/route_group_specialized.h; sourceTree = SOURCE_ROOT; }; + 43AA85A2194EEB8B00A67B56 /* route_group.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route_group.h; path = ../ardour/route_group.h; sourceTree = SOURCE_ROOT; }; + 43AA85A3194EEB8B00A67B56 /* route.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route.h; path = ../ardour/route.h; sourceTree = SOURCE_ROOT; }; + 43AA85A4194EEB8B00A67B56 /* runtime_functions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = runtime_functions.h; path = ../ardour/runtime_functions.h; sourceTree = SOURCE_ROOT; }; + 43AA85A5194EEB8B00A67B56 /* search_paths.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = search_paths.h; path = ../ardour/search_paths.h; sourceTree = SOURCE_ROOT; }; + 43AA85A6194EEB8B00A67B56 /* send.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = send.h; path = ../ardour/send.h; sourceTree = SOURCE_ROOT; }; + 43AA85A7194EEB8B00A67B56 /* session_configuration_vars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_configuration_vars.h; path = ../ardour/session_configuration_vars.h; sourceTree = SOURCE_ROOT; }; + 43AA85A8194EEB8B00A67B56 /* session_configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_configuration.h; path = ../ardour/session_configuration.h; sourceTree = SOURCE_ROOT; }; + 43AA85A9194EEB8B00A67B56 /* session_directory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_directory.h; path = ../ardour/session_directory.h; sourceTree = SOURCE_ROOT; }; + 43AA85AA194EEB8B00A67B56 /* session_event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_event.h; path = ../ardour/session_event.h; sourceTree = SOURCE_ROOT; }; + 43AA85AB194EEB8B00A67B56 /* session_handle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_handle.h; path = ../ardour/session_handle.h; sourceTree = SOURCE_ROOT; }; + 43AA85AC194EEB8B00A67B56 /* session_metadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_metadata.h; path = ../ardour/session_metadata.h; sourceTree = SOURCE_ROOT; }; + 43AA85AD194EEB8B00A67B56 /* session_object.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_object.h; path = ../ardour/session_object.h; sourceTree = SOURCE_ROOT; }; + 43AA85AE194EEB8B00A67B56 /* session_playlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_playlist.h; path = ../ardour/session_playlist.h; sourceTree = SOURCE_ROOT; }; + 43AA85AF194EEB8B00A67B56 /* session_playlists.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_playlists.h; path = ../ardour/session_playlists.h; sourceTree = SOURCE_ROOT; }; + 43AA85B0194EEB8B00A67B56 /* session_route.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_route.h; path = ../ardour/session_route.h; sourceTree = SOURCE_ROOT; }; + 43AA85B1194EEB8B00A67B56 /* session_state_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_state_utils.h; path = ../ardour/session_state_utils.h; sourceTree = SOURCE_ROOT; }; + 43AA85B2194EEB8B00A67B56 /* session_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session_utils.h; path = ../ardour/session_utils.h; sourceTree = SOURCE_ROOT; }; + 43AA85B3194EEB8B00A67B56 /* session.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = session.h; path = ../ardour/session.h; sourceTree = SOURCE_ROOT; }; + 43AA85B4194EEB8B00A67B56 /* silentfilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = silentfilesource.h; path = ../ardour/silentfilesource.h; sourceTree = SOURCE_ROOT; }; + 43AA85B5194EEB8B00A67B56 /* slave.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = slave.h; path = ../ardour/slave.h; sourceTree = SOURCE_ROOT; }; + 43AA85B6194EEB8B00A67B56 /* smf_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = smf_source.h; path = ../ardour/smf_source.h; sourceTree = SOURCE_ROOT; }; + 43AA85B7194EEB8B00A67B56 /* sndfile_helpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sndfile_helpers.h; path = ../ardour/sndfile_helpers.h; sourceTree = SOURCE_ROOT; }; + 43AA85B8194EEB8B00A67B56 /* sndfileimportable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sndfileimportable.h; path = ../ardour/sndfileimportable.h; sourceTree = SOURCE_ROOT; }; + 43AA85B9194EEB8B00A67B56 /* sndfilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sndfilesource.h; path = ../ardour/sndfilesource.h; sourceTree = SOURCE_ROOT; }; + 43AA85BA194EEB8B00A67B56 /* soundseq.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = soundseq.h; path = ../ardour/soundseq.h; sourceTree = SOURCE_ROOT; }; + 43AA85BB194EEB8B00A67B56 /* source_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = source_factory.h; path = ../ardour/source_factory.h; sourceTree = SOURCE_ROOT; }; + 43AA85BC194EEB8B00A67B56 /* source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = source.h; path = ../ardour/source.h; sourceTree = SOURCE_ROOT; }; + 43AA85BD194EEB8B00A67B56 /* speaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = speaker.h; path = ../ardour/speaker.h; sourceTree = SOURCE_ROOT; }; + 43AA85BE194EEB8B00A67B56 /* speakers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = speakers.h; path = ../ardour/speakers.h; sourceTree = SOURCE_ROOT; }; + 43AA85BF194EEB8B00A67B56 /* spline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spline.h; path = ../ardour/spline.h; sourceTree = SOURCE_ROOT; }; + 43AA85C0194EEB8B00A67B56 /* srcfilesource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = srcfilesource.h; path = ../ardour/srcfilesource.h; sourceTree = SOURCE_ROOT; }; + 43AA85C1194EEB8B00A67B56 /* stretch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stretch.h; path = ../ardour/stretch.h; sourceTree = SOURCE_ROOT; }; + 43AA85C2194EEB8B00A67B56 /* strip_silence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = strip_silence.h; path = ../ardour/strip_silence.h; sourceTree = SOURCE_ROOT; }; + 43AA85C3194EEB8B00A67B56 /* system_exec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = system_exec.h; path = ../ardour/system_exec.h; sourceTree = SOURCE_ROOT; }; + 43AA85C4194EEB8B00A67B56 /* tape_file_matcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tape_file_matcher.h; path = ../ardour/tape_file_matcher.h; sourceTree = SOURCE_ROOT; }; + 43AA85C5194EEB8B00A67B56 /* template_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = template_utils.h; path = ../ardour/template_utils.h; sourceTree = SOURCE_ROOT; }; + 43AA85C6194EEB8B00A67B56 /* tempo_map_importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tempo_map_importer.h; path = ../ardour/tempo_map_importer.h; sourceTree = SOURCE_ROOT; }; + 43AA85C7194EEB8B00A67B56 /* tempo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tempo.h; path = ../ardour/tempo.h; sourceTree = SOURCE_ROOT; }; + 43AA85C8194EEB8B00A67B56 /* thread_buffers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = thread_buffers.h; path = ../ardour/thread_buffers.h; sourceTree = SOURCE_ROOT; }; + 43AA85C9194EEB8B00A67B56 /* ticker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ticker.h; path = ../ardour/ticker.h; sourceTree = SOURCE_ROOT; }; + 43AA85CA194EEB8B00A67B56 /* timecode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = timecode.h; path = ../ardour/timecode.h; sourceTree = SOURCE_ROOT; }; + 43AA85CB194EEB8B00A67B56 /* timefx_request.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = timefx_request.h; path = ../ardour/timefx_request.h; sourceTree = SOURCE_ROOT; }; + 43AA85CC194EEB8B00A67B56 /* timestamps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = timestamps.h; path = ../ardour/timestamps.h; sourceTree = SOURCE_ROOT; }; + 43AA85CD194EEB8B00A67B56 /* track.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = track.h; path = ../ardour/track.h; sourceTree = SOURCE_ROOT; }; + 43AA85CE194EEB8B00A67B56 /* transient_detector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = transient_detector.h; path = ../ardour/transient_detector.h; sourceTree = SOURCE_ROOT; }; + 43AA85CF194EEB8B00A67B56 /* trimmable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = trimmable.h; path = ../ardour/trimmable.h; sourceTree = SOURCE_ROOT; }; + 43AA85D0194EEB8B00A67B56 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../ardour/types.h; sourceTree = SOURCE_ROOT; }; + 43AA85D1194EEB8B00A67B56 /* unknown_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = unknown_processor.h; path = ../ardour/unknown_processor.h; sourceTree = SOURCE_ROOT; }; + 43AA85D2194EEB8B00A67B56 /* uri_map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = uri_map.h; path = ../ardour/uri_map.h; sourceTree = SOURCE_ROOT; }; + 43AA85D3194EEB8B00A67B56 /* user_bundle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = user_bundle.h; path = ../ardour/user_bundle.h; sourceTree = SOURCE_ROOT; }; + 43AA85D4194EEB8B00A67B56 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utils.h; path = ../ardour/utils.h; sourceTree = SOURCE_ROOT; }; + 43AA85D5194EEB8B00A67B56 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = version.h; path = ../ardour/version.h; sourceTree = SOURCE_ROOT; }; + 43AA85D6194EEB8B00A67B56 /* vst_info_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vst_info_file.h; path = ../ardour/vst_info_file.h; sourceTree = SOURCE_ROOT; }; + 43AA85D7194EEB8B00A67B56 /* vst_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vst_plugin.h; path = ../ardour/vst_plugin.h; sourceTree = SOURCE_ROOT; }; + 43AA85D8194EEB8B00A67B56 /* vst_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vst_types.h; path = ../ardour/vst_types.h; sourceTree = SOURCE_ROOT; }; + 43AA85D9194EEB8B00A67B56 /* vumeterdsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vumeterdsp.h; path = ../ardour/vumeterdsp.h; sourceTree = SOURCE_ROOT; }; + 43AA85DA194EEB8B00A67B56 /* windows_vst_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = windows_vst_plugin.h; path = ../ardour/windows_vst_plugin.h; sourceTree = SOURCE_ROOT; }; + 43AA85DB194EEB8B00A67B56 /* worker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = worker.h; path = ../ardour/worker.h; sourceTree = SOURCE_ROOT; }; + 43AA86C5194EEBAF00A67B56 /* aeffectx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = aeffectx.h; path = ../ardour/vestige/aeffectx.h; sourceTree = SOURCE_ROOT; }; + 43AA86C8194EEBF100A67B56 /* run-profiling.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "run-profiling.sh"; path = "../run-profiling.sh"; sourceTree = SOURCE_ROOT; }; + 43AA86C9194EEBF100A67B56 /* run-session-tests.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "run-session-tests.sh"; path = "../run-session-tests.sh"; sourceTree = SOURCE_ROOT; }; + 43AA86CA194EEBF100A67B56 /* run-tests.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "run-tests.sh"; path = "../run-tests.sh"; sourceTree = SOURCE_ROOT; }; + 43AA86CB194EEBF100A67B56 /* test-env.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "test-env.sh"; path = "../test-env.sh"; sourceTree = SOURCE_ROOT; }; + 43AA86CC194EEBF100A67B56 /* wscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = wscript; path = ../wscript; sourceTree = SOURCE_ROOT; }; + 43AA86CD194EEC1400A67B56 /* gettext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gettext.h; path = ../gettext.h; sourceTree = SOURCE_ROOT; }; + 43AA86CE194EEC1400A67B56 /* lv2_evbuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lv2_evbuf.h; path = ../lv2_evbuf.h; sourceTree = SOURCE_ROOT; }; + 43AA86CF194EEC1400A67B56 /* rdff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rdff.h; path = ../rdff.h; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 43AA82A6194EEAAF00A67B56 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 432652FB194EF72700BEFB46 /* ardour */ = { + isa = PBXGroup; + children = ( + 432652FC194EF73C00BEFB46 /* amp.h */, + 432652FD194EF73C00BEFB46 /* analyser.h */, + 432652FE194EF73C00BEFB46 /* ardour.h */, + 432652FF194EF73C00BEFB46 /* async_midi_port.h */, + 43265300194EF73C00BEFB46 /* audio_backend.h */, + 43265301194EF73C00BEFB46 /* audio_buffer.h */, + 43265302194EF73C00BEFB46 /* audio_diskstream.h */, + 43265303194EF73C00BEFB46 /* audio_library.h */, + 43265304194EF73C00BEFB46 /* audio_playlist_importer.h */, + 43265305194EF73C00BEFB46 /* audio_playlist_source.h */, + 43265306194EF73C00BEFB46 /* audio_port.h */, + 43265307194EF73C00BEFB46 /* audio_region_importer.h */, + 43265308194EF73C00BEFB46 /* audio_track.h */, + 43265309194EF73C00BEFB46 /* audio_track_importer.h */, + 4326530A194EF73C00BEFB46 /* audio_unit.h */, + 4326530B194EF73C00BEFB46 /* audioanalyser.h */, + 4326530C194EF73C00BEFB46 /* audioengine.h */, + 4326530D194EF73C00BEFB46 /* audiofile_tagger.h */, + 4326530E194EF73C00BEFB46 /* audiofilesource.h */, + 4326530F194EF73C00BEFB46 /* audioplaylist.h */, + 43265310194EF73C00BEFB46 /* audioregion.h */, + 43265311194EF73C00BEFB46 /* audiosource.h */, + 43265312194EF73C00BEFB46 /* auditioner.h */, + 43265313194EF73C00BEFB46 /* auto_bundle.h */, + 43265314194EF73C00BEFB46 /* automatable.h */, + 43265315194EF73C00BEFB46 /* automatable_sequence.h */, + 43265316194EF73C00BEFB46 /* automation_control.h */, + 43265317194EF73C00BEFB46 /* automation_list.h */, + 43265318194EF73C00BEFB46 /* automation_watch.h */, + 43265319194EF73C00BEFB46 /* beats_frames_converter.h */, + 4326531A194EF73C00BEFB46 /* broadcast_info.h */, + 4326531B194EF73C00BEFB46 /* buffer.h */, + 4326531C194EF73C00BEFB46 /* buffer_manager.h */, + 4326531D194EF73C00BEFB46 /* buffer_set.h */, + 4326531E194EF73C00BEFB46 /* bundle.h */, + 4326531F194EF73C00BEFB46 /* butler.h */, + 43265320194EF73C00BEFB46 /* caimportable.h */, + 43265321194EF73C00BEFB46 /* capturing_processor.h */, + 43265322194EF73C00BEFB46 /* chan_count.h */, + 43265323194EF73C00BEFB46 /* chan_mapping.h */, + 43265324194EF73C00BEFB46 /* click.h */, + 43265325194EF73C00BEFB46 /* comparable_shared_ptr.h */, + 43265326194EF73C00BEFB46 /* configuration.h */, + 43265327194EF73C00BEFB46 /* configuration_variable.h */, + 43265328194EF73C00BEFB46 /* control_protocol_manager.h */, + 43265329194EF73C00BEFB46 /* coreaudiosource.h */, + 4326532A194EF73C00BEFB46 /* cycle_timer.h */, + 4326532B194EF73C00BEFB46 /* cycles.h */, + 4326532C194EF73C00BEFB46 /* data_type.h */, + 4326532D194EF73C00BEFB46 /* dB.h */, + 4326532E194EF73C00BEFB46 /* debug.h */, + 4326532F194EF73C00BEFB46 /* delivery.h */, + 43265330194EF73C00BEFB46 /* directory_names.h */, + 43265331194EF73C00BEFB46 /* diskstream.h */, + 43265332194EF73C00BEFB46 /* element_import_handler.h */, + 43265333194EF73C00BEFB46 /* element_importer.h */, + 43265334194EF73C00BEFB46 /* engine_state_controller.h */, + 43265335194EF73C00BEFB46 /* event_type_map.h */, + 43265336194EF73C00BEFB46 /* export_channel.h */, + 43265337194EF73C00BEFB46 /* export_channel_configuration.h */, + 43265338194EF73C00BEFB46 /* export_failed.h */, + 43265339194EF73C00BEFB46 /* export_filename.h */, + 4326533A194EF73C00BEFB46 /* export_format_base.h */, + 4326533B194EF73C00BEFB46 /* export_format_compatibility.h */, + 4326533C194EF73C00BEFB46 /* export_format_manager.h */, + 4326533D194EF73C00BEFB46 /* export_format_specification.h */, + 4326533E194EF73C00BEFB46 /* export_formats.h */, + 4326533F194EF73C00BEFB46 /* export_graph_builder.h */, + 43265340194EF73C00BEFB46 /* export_handler.h */, + 43265341194EF73C00BEFB46 /* export_multiplication.h */, + 43265342194EF73C00BEFB46 /* export_pointers.h */, + 43265343194EF73C00BEFB46 /* export_preset.h */, + 43265344194EF73C00BEFB46 /* export_profile_manager.h */, + 43265345194EF73C00BEFB46 /* export_status.h */, + 43265346194EF73C00BEFB46 /* export_timespan.h */, + 43265347194EF73C00BEFB46 /* file_source.h */, + 43265348194EF73C00BEFB46 /* filename_extensions.h */, + 43265349194EF73C00BEFB46 /* filesystem_paths.h */, + 4326534A194EF73C00BEFB46 /* filter.h */, + 4326534B194EF73C00BEFB46 /* graph.h */, + 4326534C194EF73C00BEFB46 /* graphnode.h */, + 4326534D194EF73C00BEFB46 /* iec1ppmdsp.h */, + 4326534E194EF73C00BEFB46 /* iec2ppmdsp.h */, + 4326534F194EF73C00BEFB46 /* import_status.h */, + 43265350194EF73C00BEFB46 /* importable_source.h */, + 43265351194EF73C00BEFB46 /* instrument_info.h */, + 43265352194EF73C00BEFB46 /* internal_return.h */, + 43265353194EF73C00BEFB46 /* internal_send.h */, + 43265354194EF73C00BEFB46 /* interpolation.h */, + 43265355194EF73C00BEFB46 /* interthread_info.h */, + 43265356194EF73C00BEFB46 /* io.h */, + 43265357194EF73C00BEFB46 /* io_processor.h */, + 43265358194EF73C00BEFB46 /* jack_utils.h */, + 43265359194EF73C00BEFB46 /* kmeterdsp.h */, + 4326535A194EF73C00BEFB46 /* ladspa.h */, + 4326535B194EF73C00BEFB46 /* ladspa_plugin.h */, + 4326535C194EF73C00BEFB46 /* latent.h */, + 4326535D194EF73C00BEFB46 /* libardour_visibility.h */, + 4326535E194EF73C00BEFB46 /* linux_vst_support.h */, + 4326535F194EF73C00BEFB46 /* location.h */, + 43265360194EF73C00BEFB46 /* location_importer.h */, + 43265361194EF73C00BEFB46 /* logcurve.h */, + 43265362194EF73C00BEFB46 /* lv2_plugin.h */, + 43265363194EF73C00BEFB46 /* lxvst_plugin.h */, + 43265364194EF73C00BEFB46 /* meter.h */, + 43265365194EF73C00BEFB46 /* midi_automation_list_binder.h */, + 43265366194EF73C00BEFB46 /* midi_buffer.h */, + 43265367194EF73C00BEFB46 /* midi_diskstream.h */, + 43265368194EF73C00BEFB46 /* midi_model.h */, + 43265369194EF73C00BEFB46 /* midi_operator.h */, + 4326536A194EF73C00BEFB46 /* midi_patch_manager.h */, + 4326536B194EF73C00BEFB46 /* midi_playlist.h */, + 4326536C194EF73C00BEFB46 /* midi_playlist_source.h */, + 4326536D194EF73C00BEFB46 /* midi_port.h */, + 4326536E194EF73C00BEFB46 /* midi_region.h */, + 4326536F194EF73C00BEFB46 /* midi_ring_buffer.h */, + 43265370194EF73C00BEFB46 /* midi_source.h */, + 43265371194EF73C00BEFB46 /* midi_state_tracker.h */, + 43265372194EF73C00BEFB46 /* midi_stretch.h */, + 43265373194EF73C00BEFB46 /* midi_track.h */, + 43265374194EF73C00BEFB46 /* midi_ui.h */, + 43265375194EF73C00BEFB46 /* midiport_manager.h */, + 43265376194EF73C00BEFB46 /* mix.h */, + 43265377194EF73C00BEFB46 /* monitor_processor.h */, + 43265378194EF73C00BEFB46 /* movable.h */, + 43265379194EF73C00BEFB46 /* msvc_libardour.h */, + 4326537A194EF73C00BEFB46 /* mtdm.h */, + 4326537B194EF73C00BEFB46 /* mute_master.h */, + 4326537C194EF73C00BEFB46 /* noise.h */, + 4326537D194EF73C00BEFB46 /* onset_detector.h */, + 4326537E194EF73C00BEFB46 /* operations.h */, + 4326537F194EF73C00BEFB46 /* pan_controllable.h */, + 43265380194EF73C00BEFB46 /* pannable.h */, + 43265381194EF73C00BEFB46 /* panner.h */, + 43265382194EF73C00BEFB46 /* panner_manager.h */, + 43265383194EF73C00BEFB46 /* panner_shell.h */, + 43265384194EF73C00BEFB46 /* pcm_utils.h */, + 43265385194EF73C00BEFB46 /* peak.h */, + 43265386194EF73C00BEFB46 /* pi_controller.h */, + 43265387194EF73C00BEFB46 /* pitch.h */, + 43265388194EF73C00BEFB46 /* playlist.h */, + 43265389194EF73C00BEFB46 /* playlist_factory.h */, + 4326538A194EF73C00BEFB46 /* playlist_source.h */, + 4326538B194EF73C00BEFB46 /* plugin.h */, + 4326538C194EF73C00BEFB46 /* plugin_insert.h */, + 4326538D194EF73C00BEFB46 /* plugin_manager.h */, + 4326538E194EF73C00BEFB46 /* plugin_types.h */, + 4326538F194EF73C00BEFB46 /* port.h */, + 43265390194EF73C00BEFB46 /* port_engine.h */, + 43265391194EF73C00BEFB46 /* port_insert.h */, + 43265392194EF73C00BEFB46 /* port_manager.h */, + 43265393194EF73C00BEFB46 /* port_set.h */, + 43265394194EF73C00BEFB46 /* process_thread.h */, + 43265395194EF73C00BEFB46 /* processor.h */, + 43265396194EF73C00BEFB46 /* profile.h */, + 43265397194EF73C00BEFB46 /* progress.h */, + 43265398194EF73C00BEFB46 /* proxy_controllable.h */, + 43265399194EF73C00BEFB46 /* public_diskstream.h */, + 4326539A194EF73C00BEFB46 /* quantize.h */, + 4326539B194EF73C00BEFB46 /* rb_effect.h */, + 4326539C194EF73C00BEFB46 /* rc_configuration.h */, + 4326539D194EF73C00BEFB46 /* rc_configuration_vars.h */, + 4326539E194EF73C00BEFB46 /* readable.h */, + 4326539F194EF73C00BEFB46 /* recent_sessions.h */, + 432653A0194EF73C00BEFB46 /* region.h */, + 432653A1194EF73C00BEFB46 /* region_factory.h */, + 432653A2194EF73C00BEFB46 /* region_sorters.h */, + 432653A3194EF73C00BEFB46 /* resampled_source.h */, + 432653A4194EF73C00BEFB46 /* return.h */, + 432653A5194EF73C00BEFB46 /* reverse.h */, + 432653A6194EF73C00BEFB46 /* revision.h */, + 432653A7194EF73C00BEFB46 /* route.h */, + 432653A8194EF73C00BEFB46 /* route_graph.h */, + 432653A9194EF73C00BEFB46 /* route_group.h */, + 432653AA194EF73C00BEFB46 /* route_group_member.h */, + 432653AB194EF73C00BEFB46 /* route_group_specialized.h */, + 432653AC194EF73C00BEFB46 /* runtime_functions.h */, + 432653AD194EF73C00BEFB46 /* search_paths.h */, + 432653AE194EF73C00BEFB46 /* send.h */, + 432653AF194EF73C00BEFB46 /* session.h */, + 432653B0194EF73C00BEFB46 /* session_configuration.h */, + 432653B1194EF73C00BEFB46 /* session_configuration_vars.h */, + 432653B2194EF73C00BEFB46 /* session_directory.h */, + 432653B3194EF73C00BEFB46 /* session_event.h */, + 432653B4194EF73C00BEFB46 /* session_handle.h */, + 432653B5194EF73C00BEFB46 /* session_metadata.h */, + 432653B6194EF73C00BEFB46 /* session_object.h */, + 432653B7194EF73C00BEFB46 /* session_playlist.h */, + 432653B8194EF73C00BEFB46 /* session_playlists.h */, + 432653B9194EF73C00BEFB46 /* session_route.h */, + 432653BA194EF73C00BEFB46 /* session_state_utils.h */, + 432653BB194EF73C00BEFB46 /* session_utils.h */, + 432653BC194EF73C00BEFB46 /* silentfilesource.h */, + 432653BD194EF73C00BEFB46 /* slave.h */, + 432653BE194EF73C00BEFB46 /* smf_source.h */, + 432653BF194EF73C00BEFB46 /* sndfile_helpers.h */, + 432653C0194EF73C00BEFB46 /* sndfileimportable.h */, + 432653C1194EF73C00BEFB46 /* sndfilesource.h */, + 432653C2194EF73C00BEFB46 /* soundseq.h */, + 432653C3194EF73C00BEFB46 /* source.h */, + 432653C4194EF73C00BEFB46 /* source_factory.h */, + 432653C5194EF73C00BEFB46 /* speaker.h */, + 432653C6194EF73C00BEFB46 /* speakers.h */, + 432653C7194EF73C00BEFB46 /* spline.h */, + 432653C8194EF73C00BEFB46 /* srcfilesource.h */, + 432653C9194EF73C00BEFB46 /* stretch.h */, + 432653CA194EF73C00BEFB46 /* strip_silence.h */, + 432653CB194EF73C00BEFB46 /* system_exec.h */, + 432653CC194EF73C00BEFB46 /* tape_file_matcher.h */, + 432653CD194EF73C00BEFB46 /* template_utils.h */, + 432653CE194EF73C00BEFB46 /* tempo.h */, + 432653CF194EF73C00BEFB46 /* tempo_map_importer.h */, + 432653D0194EF73C00BEFB46 /* thread_buffers.h */, + 432653D1194EF73C00BEFB46 /* ticker.h */, + 432653D2194EF73C00BEFB46 /* timecode.h */, + 432653D3194EF73C00BEFB46 /* timefx_request.h */, + 432653D4194EF73C00BEFB46 /* timestamps.h */, + 432653D5194EF73C00BEFB46 /* track.h */, + 432653D6194EF73C00BEFB46 /* transient_detector.h */, + 432653D7194EF73C00BEFB46 /* trimmable.h */, + 432653D8194EF73C00BEFB46 /* types.h */, + 432653D9194EF73C00BEFB46 /* unknown_processor.h */, + 432653DA194EF73C00BEFB46 /* uri_map.h */, + 432653DB194EF73C00BEFB46 /* user_bundle.h */, + 432653DC194EF73C00BEFB46 /* utils.h */, + 432653DD194EF73C00BEFB46 /* version.h */, + 432653DE194EF73C00BEFB46 /* vestige */, + 432653E0194EF73C00BEFB46 /* vst_info_file.h */, + 432653E1194EF73C00BEFB46 /* vst_plugin.h */, + 432653E2194EF73C00BEFB46 /* vst_types.h */, + 432653E3194EF73C00BEFB46 /* vumeterdsp.h */, + 432653E4194EF73C00BEFB46 /* windows_vst_plugin.h */, + 432653E5194EF73C00BEFB46 /* worker.h */, + ); + name = ardour; + path = ../ardour; + sourceTree = "<group>"; + }; + 432653DE194EF73C00BEFB46 /* vestige */ = { + isa = PBXGroup; + children = ( + 432653DF194EF73C00BEFB46 /* aeffectx.h */, + ); + path = vestige; + sourceTree = "<group>"; + }; + 432859EA1A10F436006C3E03 /* macosx */ = { + isa = PBXGroup; + children = ( + 432859EB1A10F436006C3E03 /* libardour.xcodeproj */, + ); + name = macosx; + sourceTree = "<group>"; + }; + 432859EC1A10F436006C3E03 /* Products */ = { + isa = PBXGroup; + name = Products; + sourceTree = "<group>"; + }; + 43AA8295194EEA6F00A67B56 = { + isa = PBXGroup; + children = ( + 43AA86C7194EEBC300A67B56 /* scripts */, + 43AA84F3194EEB6F00A67B56 /* headers */, + 43AA8458194EEB5F00A67B56 /* test */, + 43AA82AD194EEACB00A67B56 /* source */, + 43AA829F194EEA6F00A67B56 /* Products */, + ); + sourceTree = "<group>"; + }; + 43AA829F194EEA6F00A67B56 /* Products */ = { + isa = PBXGroup; + children = ( + 43AA82A9194EEAAF00A67B56 /* liblibardour.dylib */, + ); + name = Products; + sourceTree = "<group>"; + }; + 43AA82AD194EEACB00A67B56 /* source */ = { + isa = PBXGroup; + children = ( + 432859EA1A10F436006C3E03 /* macosx */, + 432859EE1A10F436006C3E03 /* midi_scene_change.cc */, + 432859EF1A10F436006C3E03 /* midi_scene_changer.cc */, + 432859F01A10F436006C3E03 /* mididm.cc */, + 432859F11A10F436006C3E03 /* scene_change.cc */, + 432859F21A10F436006C3E03 /* soundcloud_upload.cc */, + 43AA82AE194EEB2600A67B56 /* amp.cc */, + 43AA82AF194EEB2600A67B56 /* analyser.cc */, + 43AA82B0194EEB2600A67B56 /* async_midi_port.cc */, + 43AA82B1194EEB2600A67B56 /* audio_buffer.cc */, + 43AA82B2194EEB2600A67B56 /* audio_diskstream.cc */, + 43AA82B3194EEB2600A67B56 /* audio_library.cc */, + 43AA82B4194EEB2600A67B56 /* audio_playlist_importer.cc */, + 43AA82B5194EEB2600A67B56 /* audio_playlist_source.cc */, + 43AA82B6194EEB2600A67B56 /* audio_playlist.cc */, + 43AA82B7194EEB2600A67B56 /* audio_port.cc */, + 43AA82B8194EEB2600A67B56 /* audio_region_importer.cc */, + 43AA82B9194EEB2600A67B56 /* audio_track_importer.cc */, + 43AA82BA194EEB2600A67B56 /* audio_track.cc */, + 43AA82BB194EEB2600A67B56 /* audio_unit.cc */, + 43AA82BC194EEB2600A67B56 /* audioanalyser.cc */, + 43AA82BD194EEB2600A67B56 /* audioengine.cc */, + 43AA82BE194EEB2600A67B56 /* audiofile_tagger.cc */, + 43AA82BF194EEB2600A67B56 /* audiofilesource.cc */, + 43AA82C0194EEB2600A67B56 /* audioregion.cc */, + 43AA82C1194EEB2600A67B56 /* audiosource.cc */, + 43AA82C2194EEB2600A67B56 /* auditioner.cc */, + 43AA82C3194EEB2600A67B56 /* auto_bundle.cc */, + 43AA82C4194EEB2600A67B56 /* automatable.cc */, + 43AA82C5194EEB2600A67B56 /* automation_control.cc */, + 43AA82C6194EEB2600A67B56 /* automation_list.cc */, + 43AA82C7194EEB2600A67B56 /* automation_watch.cc */, + 43AA82C8194EEB2600A67B56 /* automation.cc */, + 43AA82C9194EEB2600A67B56 /* beats_frames_converter.cc */, + 43AA82CA194EEB2600A67B56 /* broadcast_info.cc */, + 43AA82CB194EEB2600A67B56 /* buffer_manager.cc */, + 43AA82CC194EEB2600A67B56 /* buffer_set.cc */, + 43AA82CD194EEB2600A67B56 /* buffer.cc */, + 43AA82CE194EEB2600A67B56 /* bundle.cc */, + 43AA82CF194EEB2600A67B56 /* butler.cc */, + 43AA82D0194EEB2600A67B56 /* caimportable.cc */, + 43AA82D1194EEB2600A67B56 /* capturing_processor.cc */, + 43AA82D2194EEB2600A67B56 /* chan_count.cc */, + 43AA82D3194EEB2600A67B56 /* chan_mapping.cc */, + 43AA82D4194EEB2600A67B56 /* config_text.cc */, + 43AA82D5194EEB2600A67B56 /* configuration.cc */, + 43AA82D6194EEB2600A67B56 /* control_protocol_manager.cc */, + 43AA82D7194EEB2600A67B56 /* coreaudiosource.cc */, + 43AA82D8194EEB2600A67B56 /* cycle_timer.cc */, + 43AA82D9194EEB2600A67B56 /* data_type.cc */, + 43AA82DA194EEB2600A67B56 /* debug.cc */, + 43AA82DB194EEB2600A67B56 /* default_click.cc */, + 43AA82DC194EEB2600A67B56 /* delivery.cc */, + 43AA82DD194EEB2600A67B56 /* directory_names.cc */, + 43AA82DE194EEB2600A67B56 /* diskstream.cc */, + 43AA82DF194EEB2600A67B56 /* element_import_handler.cc */, + 43AA82E0194EEB2600A67B56 /* element_importer.cc */, + 43AA82E1194EEB2600A67B56 /* engine_slave.cc */, + 43AA82E2194EEB2600A67B56 /* engine_state_controller.cc */, + 43AA82E3194EEB2600A67B56 /* enums.cc */, + 43AA82E4194EEB2600A67B56 /* event_type_map.cc */, + 43AA82E5194EEB2600A67B56 /* export_channel_configuration.cc */, + 43AA82E6194EEB2600A67B56 /* export_channel.cc */, + 43AA82E7194EEB2600A67B56 /* export_failed.cc */, + 43AA82E8194EEB2600A67B56 /* export_filename.cc */, + 43AA82E9194EEB2600A67B56 /* export_format_base.cc */, + 43AA82EA194EEB2600A67B56 /* export_format_manager.cc */, + 43AA82EB194EEB2600A67B56 /* export_format_specification.cc */, + 43AA82EC194EEB2600A67B56 /* export_formats.cc */, + 43AA82ED194EEB2600A67B56 /* export_graph_builder.cc */, + 43AA82EE194EEB2600A67B56 /* export_handler.cc */, + 43AA82EF194EEB2600A67B56 /* export_multiplication.cc */, + 43AA82F0194EEB2600A67B56 /* export_preset.cc */, + 43AA82F1194EEB2600A67B56 /* export_profile_manager.cc */, + 43AA82F2194EEB2600A67B56 /* export_status.cc */, + 43AA82F3194EEB2600A67B56 /* export_timespan.cc */, + 43AA82F4194EEB2600A67B56 /* file_source.cc */, + 43AA82F5194EEB2600A67B56 /* filename_extensions.cc */, + 43AA82F6194EEB2600A67B56 /* filesystem_paths.cc */, + 43AA82F7194EEB2600A67B56 /* filter.cc */, + 43AA82F8194EEB2600A67B56 /* find_session.cc */, + 43AA82F9194EEB2600A67B56 /* globals.cc */, + 43AA82FA194EEB2600A67B56 /* graph.cc */, + 43AA82FB194EEB2600A67B56 /* graphnode.cc */, + 43AA82FC194EEB2600A67B56 /* iec1ppmdsp.cc */, + 43AA82FD194EEB2600A67B56 /* iec2ppmdsp.cc */, + 43AA82FE194EEB2600A67B56 /* import.cc */, + 43AA82FF194EEB2600A67B56 /* instrument_info.cc */, + 43AA8300194EEB2600A67B56 /* internal_return.cc */, + 43AA8301194EEB2600A67B56 /* internal_send.cc */, + 43AA8302194EEB2600A67B56 /* interpolation.cc */, + 43AA8303194EEB2600A67B56 /* io_processor.cc */, + 43AA8304194EEB2600A67B56 /* io.cc */, + 43AA8305194EEB2600A67B56 /* kmeterdsp.cc */, + 43AA8306194EEB2600A67B56 /* ladspa_plugin.cc */, + 43AA8307194EEB2600A67B56 /* linux_vst_support.cc */, + 43AA8308194EEB2600A67B56 /* location_importer.cc */, + 43AA8309194EEB2600A67B56 /* location.cc */, + 43AA830A194EEB2600A67B56 /* ltc_slave.cc */, + 43AA830B194EEB2600A67B56 /* lv2_evbuf.c */, + 43AA830C194EEB2600A67B56 /* lv2_plugin.cc */, + 43AA830D194EEB2600A67B56 /* lxvst_plugin.cc */, + 43AA830E194EEB2600A67B56 /* meter.cc */, + 43AA830F194EEB2600A67B56 /* midi_automation_list_binder.cc */, + 43AA8310194EEB2600A67B56 /* midi_buffer.cc */, + 43AA8311194EEB2600A67B56 /* midi_clock_slave.cc */, + 43AA8312194EEB2600A67B56 /* midi_diskstream.cc */, + 43AA8313194EEB2600A67B56 /* midi_model.cc */, + 43AA8314194EEB2600A67B56 /* midi_patch_manager.cc */, + 43AA8315194EEB2600A67B56 /* midi_playlist_source.cc */, + 43AA8316194EEB2600A67B56 /* midi_playlist.cc */, + 43AA8317194EEB2600A67B56 /* midi_port.cc */, + 43AA8318194EEB2600A67B56 /* midi_region.cc */, + 43AA8319194EEB2600A67B56 /* midi_ring_buffer.cc */, + 43AA831A194EEB2600A67B56 /* midi_source.cc */, + 43AA831B194EEB2600A67B56 /* midi_state_tracker.cc */, + 43AA831C194EEB2600A67B56 /* midi_stretch.cc */, + 43AA831D194EEB2600A67B56 /* midi_track.cc */, + 43AA831E194EEB2600A67B56 /* midi_ui.cc */, + 43AA831F194EEB2600A67B56 /* midiport_manager.cc */, + 43AA8320194EEB2600A67B56 /* mix.cc */, + 43AA8321194EEB2600A67B56 /* monitor_processor.cc */, + 43AA8322194EEB2600A67B56 /* mtc_slave.cc */, + 43AA8323194EEB2600A67B56 /* mtdm.cc */, + 43AA8324194EEB2600A67B56 /* mute_master.cc */, + 43AA8325194EEB2600A67B56 /* onset_detector.cc */, + 43AA8326194EEB2600A67B56 /* operations.cc */, + 43AA8327194EEB2600A67B56 /* pan_controllable.cc */, + 43AA8328194EEB2600A67B56 /* pannable.cc */, + 43AA8329194EEB2600A67B56 /* panner_manager.cc */, + 43AA832A194EEB2600A67B56 /* panner_shell.cc */, + 43AA832B194EEB2600A67B56 /* panner.cc */, + 43AA832C194EEB2600A67B56 /* pcm_utils.cc */, + 43AA832D194EEB2600A67B56 /* pi_controller.cc */, + 43AA832E194EEB2600A67B56 /* playlist_factory.cc */, + 43AA832F194EEB2600A67B56 /* playlist_source.cc */, + 43AA8330194EEB2600A67B56 /* playlist.cc */, + 43AA8331194EEB2600A67B56 /* plugin_insert.cc */, + 43AA8332194EEB2600A67B56 /* plugin_manager.cc */, + 43AA8333194EEB2600A67B56 /* plugin.cc */, + 43AA8334194EEB2600A67B56 /* port_insert.cc */, + 43AA8335194EEB2600A67B56 /* port_manager.cc */, + 43AA8336194EEB2600A67B56 /* port_set.cc */, + 43AA8337194EEB2600A67B56 /* port.cc */, + 43AA8338194EEB2600A67B56 /* process_thread.cc */, + 43AA8339194EEB2600A67B56 /* processor.cc */, + 43AA833A194EEB2600A67B56 /* progress.cc */, + 43AA833B194EEB2600A67B56 /* quantize.cc */, + 43AA833C194EEB2600A67B56 /* rb_effect.cc */, + 43AA833D194EEB2600A67B56 /* rc_configuration.cc */, + 43AA833E194EEB2600A67B56 /* rdff.c */, + 43AA833F194EEB2600A67B56 /* recent_sessions.cc */, + 43AA8340194EEB2600A67B56 /* region_factory.cc */, + 43AA8341194EEB2600A67B56 /* region.cc */, + 43AA8342194EEB2600A67B56 /* resampled_source.cc */, + 43AA8343194EEB2600A67B56 /* return.cc */, + 43AA8344194EEB2600A67B56 /* reverse.cc */, + 43AA8345194EEB2600A67B56 /* revision.cc */, + 43AA8346194EEB2600A67B56 /* route_graph.cc */, + 43AA8347194EEB2600A67B56 /* route_group_member.cc */, + 43AA8348194EEB2600A67B56 /* route_group.cc */, + 43AA8349194EEB2600A67B56 /* route.cc */, + 43AA834A194EEB2600A67B56 /* search_paths.cc */, + 43AA834B194EEB2600A67B56 /* send.cc */, + 43AA834C194EEB2600A67B56 /* session_butler.cc */, + 43AA834D194EEB2600A67B56 /* session_click.cc */, + 43AA834E194EEB2600A67B56 /* session_command.cc */, + 43AA834F194EEB2600A67B56 /* session_configuration.cc */, + 43AA8350194EEB2600A67B56 /* session_directory.cc */, + 43AA8351194EEB2600A67B56 /* session_events.cc */, + 43AA8352194EEB2600A67B56 /* session_export.cc */, + 43AA8353194EEB2600A67B56 /* session_handle.cc */, + 43AA8354194EEB2600A67B56 /* session_ltc.cc */, + 43AA8355194EEB2600A67B56 /* session_metadata.cc */, + 43AA8356194EEB2600A67B56 /* session_midi.cc */, + 43AA8357194EEB2600A67B56 /* session_object.cc */, + 43AA8358194EEB2600A67B56 /* session_playlists.cc */, + 43AA8359194EEB2600A67B56 /* session_process.cc */, + 43AA835A194EEB2600A67B56 /* session_rtevents.cc */, + 43AA835B194EEB2600A67B56 /* session_state_utils.cc */, + 43AA835C194EEB2600A67B56 /* session_state.cc */, + 43AA835D194EEB2600A67B56 /* session_time.cc */, + 43AA835E194EEB2600A67B56 /* session_transport.cc */, + 43AA835F194EEB2600A67B56 /* session_vst.cc */, + 43AA8360194EEB2600A67B56 /* session.cc */, + 43AA8361194EEB2600A67B56 /* slave.cc */, + 43AA8362194EEB2600A67B56 /* smf_source.cc */, + 43AA8363194EEB2600A67B56 /* sndfile_helpers.cc */, + 43AA8364194EEB2600A67B56 /* sndfileimportable.cc */, + 43AA8365194EEB2600A67B56 /* sndfilesource.cc */, + 43AA8366194EEB2600A67B56 /* source_factory.cc */, + 43AA8367194EEB2600A67B56 /* source.cc */, + 43AA8368194EEB2600A67B56 /* speakers.cc */, + 43AA8369194EEB2600A67B56 /* srcfilesource.cc */, + 43AA836A194EEB2600A67B56 /* sse_functions_64bit.s */, + 43AA836B194EEB2600A67B56 /* sse_functions_xmm.cc */, + 43AA836C194EEB2600A67B56 /* sse_functions.s */, + 43AA836D194EEB2600A67B56 /* st_pitch.cc */, + 43AA836E194EEB2600A67B56 /* st_stretch.cc */, + 43AA836F194EEB2600A67B56 /* strip_silence.cc */, + 43AA8370194EEB2600A67B56 /* system_exec.cc */, + 43AA8371194EEB2600A67B56 /* tape_file_matcher.cc */, + 43AA8372194EEB2600A67B56 /* template_utils.cc */, + 43AA8373194EEB2600A67B56 /* tempo_map_importer.cc */, + 43AA8374194EEB2600A67B56 /* tempo.cc */, + 43AA8375194EEB2600A67B56 /* thread_buffers.cc */, + 43AA8376194EEB2600A67B56 /* ticker.cc */, + 43AA8377194EEB2600A67B56 /* track.cc */, + 43AA8378194EEB2600A67B56 /* transient_detector.cc */, + 43AA8379194EEB2600A67B56 /* unknown_processor.cc */, + 43AA837A194EEB2600A67B56 /* uri_map.cc */, + 43AA837B194EEB2600A67B56 /* user_bundle.cc */, + 43AA837C194EEB2600A67B56 /* utils.cc */, + 43AA837D194EEB2600A67B56 /* version.cc */, + 43AA837E194EEB2600A67B56 /* vst_info_file.cc */, + 43AA837F194EEB2600A67B56 /* vst_plugin.cc */, + 43AA8380194EEB2600A67B56 /* vumeterdsp.cc */, + 43AA8381194EEB2600A67B56 /* windows_vst_plugin.cc */, + 43AA8382194EEB2600A67B56 /* worker.cc */, + ); + name = source; + sourceTree = "<group>"; + }; + 43AA8458194EEB5F00A67B56 /* test */ = { + isa = PBXGroup; + children = ( + 43AA8459194EEB5F00A67B56 /* audio_engine_test.cc */, + 43AA845A194EEB5F00A67B56 /* audio_engine_test.h */, + 43AA845B194EEB5F00A67B56 /* audio_region_read_test.cc */, + 43AA845C194EEB5F00A67B56 /* audio_region_read_test.h */, + 43AA845D194EEB5F00A67B56 /* audio_region_test.cc */, + 43AA845E194EEB5F00A67B56 /* audio_region_test.h */, + 43AA845F194EEB5F00A67B56 /* automation_list_property_test.cc */, + 43AA8460194EEB5F00A67B56 /* automation_list_property_test.h */, + 43AA8461194EEB5F00A67B56 /* bbt_test.cc */, + 43AA8462194EEB5F00A67B56 /* bbt_test.h */, + 43AA8463194EEB5F00A67B56 /* combine_regions_test.cc */, + 43AA8464194EEB5F00A67B56 /* combine_regions_test.h */, + 43AA8465194EEB5F00A67B56 /* control_surfaces_test.cc */, + 43AA8466194EEB5F00A67B56 /* control_surfaces_test.h */, + 43AA8467194EEB5F00A67B56 /* data */, + 43AA847C194EEB5F00A67B56 /* dummy_lxvst.cc */, + 43AA847D194EEB5F00A67B56 /* framepos_minus_beats_test.cc */, + 43AA847E194EEB5F00A67B56 /* framepos_minus_beats_test.h */, + 43AA847F194EEB5F00A67B56 /* framepos_plus_beats_test.cc */, + 43AA8480194EEB5F00A67B56 /* framepos_plus_beats_test.h */, + 43AA8481194EEB5F00A67B56 /* framewalk_to_beats_test.cc */, + 43AA8482194EEB5F00A67B56 /* framewalk_to_beats_test.h */, + 43AA8483194EEB5F00A67B56 /* interpolation_test.cc */, + 43AA8484194EEB5F00A67B56 /* interpolation_test.h */, + 43AA8485194EEB5F00A67B56 /* jack_utils_test.cc */, + 43AA8486194EEB5F00A67B56 /* jack_utils_test.h */, + 43AA8487194EEB5F00A67B56 /* load_session.cc */, + 43AA8488194EEB5F00A67B56 /* load_sessions_test.cc */, + 43AA8489194EEB5F00A67B56 /* load_sessions_test.h */, + 43AA848A194EEB5F00A67B56 /* midi_clock_slave_test.cc */, + 43AA848B194EEB5F00A67B56 /* midi_clock_slave_test.h */, + 43AA848C194EEB5F00A67B56 /* mtdm_test.cc */, + 43AA848D194EEB5F00A67B56 /* mtdm_test.h */, + 43AA848E194EEB5F00A67B56 /* playlist_equivalent_regions_test.cc */, + 43AA848F194EEB5F00A67B56 /* playlist_equivalent_regions_test.h */, + 43AA8490194EEB5F00A67B56 /* playlist_layering_test.cc */, + 43AA8491194EEB5F00A67B56 /* playlist_layering_test.h */, + 43AA8492194EEB5F00A67B56 /* playlist_read_test.cc */, + 43AA8493194EEB5F00A67B56 /* playlist_read_test.h */, + 43AA8494194EEB5F00A67B56 /* plugins_test.cc */, + 43AA8495194EEB5F00A67B56 /* plugins_test.h */, + 43AA8496194EEB5F00A67B56 /* profiling */, + 43AA84AA194EEB5F00A67B56 /* region_naming_test.cc */, + 43AA84AB194EEB5F00A67B56 /* region_naming_test.h */, + 43AA84AC194EEB5F00A67B56 /* resampled_source_test.cc */, + 43AA84AD194EEB5F00A67B56 /* resampled_source_test.h */, + 43AA84AE194EEB5F00A67B56 /* session_test.cc */, + 43AA84AF194EEB5F00A67B56 /* session_test.h */, + 43AA84B0194EEB5F00A67B56 /* tempo_test.cc */, + 43AA84B1194EEB5F00A67B56 /* tempo_test.h */, + 43AA84B2194EEB5F00A67B56 /* test_common.cc */, + 43AA84B3194EEB5F00A67B56 /* test_common.h */, + 43AA84B4194EEB5F00A67B56 /* test_needing_session.cc */, + 43AA84B5194EEB5F00A67B56 /* test_needing_session.h */, + 43AA84B6194EEB5F00A67B56 /* test_util.cc */, + 43AA84B7194EEB5F00A67B56 /* test_util.h */, + 43AA84B8194EEB5F00A67B56 /* testrunner.cc */, + ); + name = test; + path = ../../../libs/ardour/test; + sourceTree = "<group>"; + }; + 43AA8467194EEB5F00A67B56 /* data */ = { + isa = PBXGroup; + children = ( + 43AA8468194EEB5F00A67B56 /* 2 Track-template */, + 43AA846A194EEB5F00A67B56 /* automation_list_property_test1.ref */, + 43AA846B194EEB5F00A67B56 /* automation_list_property_test2.ref */, + 43AA846C194EEB5F00A67B56 /* automation_list_property_test3.ref */, + 43AA846D194EEB5F00A67B56 /* automation_list_property_test4.ref */, + 43AA846E194EEB5F00A67B56 /* mantis_3356 */, + 43AA8475194EEB5F00A67B56 /* mantis_3356.ref */, + 43AA8476194EEB5F00A67B56 /* sessions */, + 43AA847B194EEB5F00A67B56 /* test.wav */, + ); + path = data; + sourceTree = "<group>"; + }; + 43AA8468194EEB5F00A67B56 /* 2 Track-template */ = { + isa = PBXGroup; + children = ( + 43AA8469194EEB5F00A67B56, + ); + path = "2 Track-template"; + sourceTree = "<group>"; + }; + 43AA846E194EEB5F00A67B56 /* mantis_3356 */ = { + isa = PBXGroup; + children = ( + 43AA846F194EEB5F00A67B56 /* instant.xml */, + 43AA8470194EEB5F00A67B56 /* interchange */, + 43AA8474194EEB5F00A67B56 /* mantis_3356.ardour */, + ); + path = mantis_3356; + sourceTree = "<group>"; + }; + 43AA8470194EEB5F00A67B56 /* interchange */ = { + isa = PBXGroup; + children = ( + 43AA8471194EEB5F00A67B56 /* mantis_3356 */, + ); + path = interchange; + sourceTree = "<group>"; + }; + 43AA8471194EEB5F00A67B56 /* mantis_3356 */ = { + isa = PBXGroup; + children = ( + 43AA8472194EEB5F00A67B56 /* midifiles */, + ); + path = mantis_3356; + sourceTree = "<group>"; + }; + 43AA8472194EEB5F00A67B56 /* midifiles */ = { + isa = PBXGroup; + children = ( + 43AA8473194EEB5F00A67B56 /* Midi 1-1.mid */, + ); + path = midifiles; + sourceTree = "<group>"; + }; + 43AA8476194EEB5F00A67B56 /* sessions */ = { + isa = PBXGroup; + children = ( + 43AA8477194EEB5F00A67B56 /* rec_enabled */, + ); + path = sessions; + sourceTree = "<group>"; + }; + 43AA8477194EEB5F00A67B56 /* rec_enabled */ = { + isa = PBXGroup; + children = ( + 43AA8478194EEB5F00A67B56 /* instant.xml */, + 43AA8479194EEB5F00A67B56 /* rec_enabled.ardour */, + 43AA847A194EEB5F00A67B56 /* rec_enabled.history */, + ); + path = rec_enabled; + sourceTree = "<group>"; + }; + 43AA8496194EEB5F00A67B56 /* profiling */ = { + isa = PBXGroup; + children = ( + 43AA8497194EEB5F00A67B56 /* load_session.cc */, + 43AA8498194EEB5F00A67B56 /* lots_of_regions.cc */, + 43AA8499194EEB5F00A67B56 /* runpc.cc */, + 43AA849A194EEB5F00A67B56 /* sessions */, + ); + path = profiling; + sourceTree = "<group>"; + }; + 43AA849A194EEB5F00A67B56 /* sessions */ = { + isa = PBXGroup; + children = ( + 43AA849B194EEB5F00A67B56 /* 0tracks */, + 43AA849E194EEB5F00A67B56 /* 1region */, + 43AA84A6194EEB5F00A67B56 /* 32tracks */, + ); + path = sessions; + sourceTree = "<group>"; + }; + 43AA849B194EEB5F00A67B56 /* 0tracks */ = { + isa = PBXGroup; + children = ( + 43AA849C194EEB5F00A67B56 /* 0tracks.ardour */, + 43AA849D194EEB5F00A67B56 /* 0tracks.history */, + ); + path = 0tracks; + sourceTree = "<group>"; + }; + 43AA849E194EEB5F00A67B56 /* 1region */ = { + isa = PBXGroup; + children = ( + 43AA849F194EEB5F00A67B56 /* 1region.ardour */, + 43AA84A0194EEB5F00A67B56 /* 1region.history */, + 43AA84A1194EEB5F00A67B56 /* instant.xml */, + 43AA84A2194EEB5F00A67B56 /* interchange */, + ); + path = 1region; + sourceTree = "<group>"; + }; + 43AA84A2194EEB5F00A67B56 /* interchange */ = { + isa = PBXGroup; + children = ( + 43AA84A3194EEB5F00A67B56 /* 1region */, + ); + path = interchange; + sourceTree = "<group>"; + }; + 43AA84A3194EEB5F00A67B56 /* 1region */ = { + isa = PBXGroup; + children = ( + 43AA84A4194EEB5F00A67B56 /* midifiles */, + ); + path = 1region; + sourceTree = "<group>"; + }; + 43AA84A4194EEB5F00A67B56 /* midifiles */ = { + isa = PBXGroup; + children = ( + 43AA84A5194EEB5F00A67B56 /* MIDI 1-1.mid */, + ); + path = midifiles; + sourceTree = "<group>"; + }; + 43AA84A6194EEB5F00A67B56 /* 32tracks */ = { + isa = PBXGroup; + children = ( + 43AA84A7194EEB5F00A67B56 /* 32tracks.ardour */, + 43AA84A8194EEB5F00A67B56 /* 32tracks.history */, + 43AA84A9194EEB5F00A67B56 /* instant.xml */, + ); + path = 32tracks; + sourceTree = "<group>"; + }; + 43AA84F3194EEB6F00A67B56 /* headers */ = { + isa = PBXGroup; + children = ( + 432859E21A10F415006C3E03 /* midi_scene_change.h */, + 432859E31A10F415006C3E03 /* midi_scene_changer.h */, + 432859E41A10F415006C3E03 /* mididm.h */, + 432859E51A10F415006C3E03 /* soundcloud_upload.h */, + 43AA86CD194EEC1400A67B56 /* gettext.h */, + 43AA86CE194EEC1400A67B56 /* lv2_evbuf.h */, + 43AA86CF194EEC1400A67B56 /* rdff.h */, + 43AA86C4194EEBAF00A67B56 /* vestige */, + 43AA84F4194EEB8B00A67B56 /* amp.h */, + 43AA84F5194EEB8B00A67B56 /* analyser.h */, + 43AA84F6194EEB8B00A67B56 /* ardour.h */, + 43AA84F7194EEB8B00A67B56 /* async_midi_port.h */, + 43AA84F8194EEB8B00A67B56 /* audio_backend.h */, + 43AA84F9194EEB8B00A67B56 /* audio_buffer.h */, + 432652FB194EF72700BEFB46 /* ardour */, + 43AA84FA194EEB8B00A67B56 /* audio_diskstream.h */, + 43AA84FB194EEB8B00A67B56 /* audio_library.h */, + 43AA84FC194EEB8B00A67B56 /* audio_playlist_importer.h */, + 43AA84FD194EEB8B00A67B56 /* audio_playlist_source.h */, + 43AA84FE194EEB8B00A67B56 /* audio_port.h */, + 43AA84FF194EEB8B00A67B56 /* audio_region_importer.h */, + 43AA8500194EEB8B00A67B56 /* audio_track_importer.h */, + 43AA8501194EEB8B00A67B56 /* audio_track.h */, + 43AA8502194EEB8B00A67B56 /* audio_unit.h */, + 43AA8503194EEB8B00A67B56 /* audioanalyser.h */, + 43AA8504194EEB8B00A67B56 /* audioengine.h */, + 43AA8505194EEB8B00A67B56 /* audiofile_tagger.h */, + 43AA8506194EEB8B00A67B56 /* audiofilesource.h */, + 43AA8507194EEB8B00A67B56 /* audioplaylist.h */, + 43AA8508194EEB8B00A67B56 /* audioregion.h */, + 43AA8509194EEB8B00A67B56 /* audiosource.h */, + 43AA850A194EEB8B00A67B56 /* auditioner.h */, + 43AA850B194EEB8B00A67B56 /* auto_bundle.h */, + 43AA850C194EEB8B00A67B56 /* automatable_sequence.h */, + 43AA850D194EEB8B00A67B56 /* automatable.h */, + 43AA850E194EEB8B00A67B56 /* automation_control.h */, + 43AA850F194EEB8B00A67B56 /* automation_list.h */, + 43AA8510194EEB8B00A67B56 /* automation_watch.h */, + 43AA8511194EEB8B00A67B56 /* beats_frames_converter.h */, + 43AA8512194EEB8B00A67B56 /* broadcast_info.h */, + 43AA8513194EEB8B00A67B56 /* buffer_manager.h */, + 43AA8514194EEB8B00A67B56 /* buffer_set.h */, + 43AA8515194EEB8B00A67B56 /* buffer.h */, + 43AA8516194EEB8B00A67B56 /* bundle.h */, + 43AA8517194EEB8B00A67B56 /* butler.h */, + 43AA8518194EEB8B00A67B56 /* caimportable.h */, + 43AA8519194EEB8B00A67B56 /* capturing_processor.h */, + 43AA851A194EEB8B00A67B56 /* chan_count.h */, + 43AA851B194EEB8B00A67B56 /* chan_mapping.h */, + 43AA851C194EEB8B00A67B56 /* click.h */, + 43AA851D194EEB8B00A67B56 /* comparable_shared_ptr.h */, + 43AA851E194EEB8B00A67B56 /* configuration_variable.h */, + 43AA851F194EEB8B00A67B56 /* configuration.h */, + 43AA8520194EEB8B00A67B56 /* control_protocol_manager.h */, + 43AA8521194EEB8B00A67B56 /* coreaudiosource.h */, + 43AA8522194EEB8B00A67B56 /* cycle_timer.h */, + 43AA8523194EEB8B00A67B56 /* cycles.h */, + 43AA8524194EEB8B00A67B56 /* data_type.h */, + 43AA8525194EEB8B00A67B56 /* dB.h */, + 43AA8526194EEB8B00A67B56 /* debug.h */, + 43AA8527194EEB8B00A67B56 /* delivery.h */, + 43AA8528194EEB8B00A67B56 /* directory_names.h */, + 43AA8529194EEB8B00A67B56 /* diskstream.h */, + 43AA852A194EEB8B00A67B56 /* element_import_handler.h */, + 43AA852B194EEB8B00A67B56 /* element_importer.h */, + 43AA852C194EEB8B00A67B56 /* engine_state_controller.h */, + 43AA852D194EEB8B00A67B56 /* event_type_map.h */, + 43AA852E194EEB8B00A67B56 /* export_channel_configuration.h */, + 43AA852F194EEB8B00A67B56 /* export_channel.h */, + 43AA8530194EEB8B00A67B56 /* export_failed.h */, + 43AA8531194EEB8B00A67B56 /* export_filename.h */, + 43AA8532194EEB8B00A67B56 /* export_format_base.h */, + 43AA8533194EEB8B00A67B56 /* export_format_compatibility.h */, + 43AA8534194EEB8B00A67B56 /* export_format_manager.h */, + 43AA8535194EEB8B00A67B56 /* export_format_specification.h */, + 43AA8536194EEB8B00A67B56 /* export_formats.h */, + 43AA8537194EEB8B00A67B56 /* export_graph_builder.h */, + 43AA8538194EEB8B00A67B56 /* export_handler.h */, + 43AA8539194EEB8B00A67B56 /* export_multiplication.h */, + 43AA853A194EEB8B00A67B56 /* export_pointers.h */, + 43AA853B194EEB8B00A67B56 /* export_preset.h */, + 43AA853C194EEB8B00A67B56 /* export_profile_manager.h */, + 43AA853D194EEB8B00A67B56 /* export_status.h */, + 43AA853E194EEB8B00A67B56 /* export_timespan.h */, + 43AA853F194EEB8B00A67B56 /* file_source.h */, + 43AA8540194EEB8B00A67B56 /* filename_extensions.h */, + 43AA8541194EEB8B00A67B56 /* filesystem_paths.h */, + 43AA8542194EEB8B00A67B56 /* filter.h */, + 43AA8543194EEB8B00A67B56 /* graph.h */, + 43AA8544194EEB8B00A67B56 /* graphnode.h */, + 43AA8545194EEB8B00A67B56 /* iec1ppmdsp.h */, + 43AA8546194EEB8B00A67B56 /* iec2ppmdsp.h */, + 43AA8547194EEB8B00A67B56 /* import_status.h */, + 43AA8548194EEB8B00A67B56 /* importable_source.h */, + 43AA8549194EEB8B00A67B56 /* instrument_info.h */, + 43AA854A194EEB8B00A67B56 /* internal_return.h */, + 43AA854B194EEB8B00A67B56 /* internal_send.h */, + 43AA854C194EEB8B00A67B56 /* interpolation.h */, + 43AA854D194EEB8B00A67B56 /* interthread_info.h */, + 43AA854E194EEB8B00A67B56 /* io_processor.h */, + 43AA854F194EEB8B00A67B56 /* io.h */, + 43AA8550194EEB8B00A67B56 /* jack_utils.h */, + 43AA8551194EEB8B00A67B56 /* kmeterdsp.h */, + 43AA8552194EEB8B00A67B56 /* ladspa_plugin.h */, + 43AA8553194EEB8B00A67B56 /* ladspa.h */, + 43AA8554194EEB8B00A67B56 /* latent.h */, + 43AA8555194EEB8B00A67B56 /* libardour_visibility.h */, + 43AA8556194EEB8B00A67B56 /* linux_vst_support.h */, + 43AA8557194EEB8B00A67B56 /* location_importer.h */, + 43AA8558194EEB8B00A67B56 /* location.h */, + 43AA8559194EEB8B00A67B56 /* logcurve.h */, + 43AA855A194EEB8B00A67B56 /* lv2_plugin.h */, + 43AA855B194EEB8B00A67B56 /* lxvst_plugin.h */, + 43AA855C194EEB8B00A67B56 /* meter.h */, + 43AA855D194EEB8B00A67B56 /* midi_automation_list_binder.h */, + 43AA855E194EEB8B00A67B56 /* midi_buffer.h */, + 43AA855F194EEB8B00A67B56 /* midi_diskstream.h */, + 43AA8560194EEB8B00A67B56 /* midi_model.h */, + 43AA8561194EEB8B00A67B56 /* midi_operator.h */, + 43AA8562194EEB8B00A67B56 /* midi_patch_manager.h */, + 43AA8563194EEB8B00A67B56 /* midi_playlist_source.h */, + 43AA8564194EEB8B00A67B56 /* midi_playlist.h */, + 43AA8565194EEB8B00A67B56 /* midi_port.h */, + 43AA8566194EEB8B00A67B56 /* midi_region.h */, + 43AA8567194EEB8B00A67B56 /* midi_ring_buffer.h */, + 43AA8568194EEB8B00A67B56 /* midi_source.h */, + 43AA8569194EEB8B00A67B56 /* midi_state_tracker.h */, + 43AA856A194EEB8B00A67B56 /* midi_stretch.h */, + 43AA856B194EEB8B00A67B56 /* midi_track.h */, + 43AA856C194EEB8B00A67B56 /* midi_ui.h */, + 43AA856D194EEB8B00A67B56 /* midiport_manager.h */, + 43AA856E194EEB8B00A67B56 /* mix.h */, + 43AA856F194EEB8B00A67B56 /* monitor_processor.h */, + 43AA8570194EEB8B00A67B56 /* movable.h */, + 43AA8571194EEB8B00A67B56 /* msvc_libardour.h */, + 43AA8572194EEB8B00A67B56 /* mtdm.h */, + 43AA8573194EEB8B00A67B56 /* mute_master.h */, + 43AA8574194EEB8B00A67B56 /* noise.h */, + 43AA8575194EEB8B00A67B56 /* onset_detector.h */, + 43AA8576194EEB8B00A67B56 /* operations.h */, + 43AA8577194EEB8B00A67B56 /* pan_controllable.h */, + 43AA8578194EEB8B00A67B56 /* pannable.h */, + 43AA8579194EEB8B00A67B56 /* panner_manager.h */, + 43AA857A194EEB8B00A67B56 /* panner_shell.h */, + 43AA857B194EEB8B00A67B56 /* panner.h */, + 43AA857C194EEB8B00A67B56 /* pcm_utils.h */, + 43AA857D194EEB8B00A67B56 /* peak.h */, + 43AA857E194EEB8B00A67B56 /* pi_controller.h */, + 43AA857F194EEB8B00A67B56 /* pitch.h */, + 43AA8580194EEB8B00A67B56 /* playlist_factory.h */, + 43AA8581194EEB8B00A67B56 /* playlist_source.h */, + 43AA8582194EEB8B00A67B56 /* playlist.h */, + 43AA8583194EEB8B00A67B56 /* plugin_insert.h */, + 43AA8584194EEB8B00A67B56 /* plugin_manager.h */, + 43AA8585194EEB8B00A67B56 /* plugin_types.h */, + 43AA8586194EEB8B00A67B56 /* plugin.h */, + 43AA8587194EEB8B00A67B56 /* port_engine.h */, + 43AA8588194EEB8B00A67B56 /* port_insert.h */, + 43AA8589194EEB8B00A67B56 /* port_manager.h */, + 43AA858A194EEB8B00A67B56 /* port_set.h */, + 43AA858B194EEB8B00A67B56 /* port.h */, + 43AA858C194EEB8B00A67B56 /* process_thread.h */, + 43AA858D194EEB8B00A67B56 /* processor.h */, + 43AA858E194EEB8B00A67B56 /* profile.h */, + 43AA858F194EEB8B00A67B56 /* progress.h */, + 43AA8590194EEB8B00A67B56 /* proxy_controllable.h */, + 43AA8591194EEB8B00A67B56 /* public_diskstream.h */, + 43AA8592194EEB8B00A67B56 /* quantize.h */, + 43AA8593194EEB8B00A67B56 /* rb_effect.h */, + 43AA8594194EEB8B00A67B56 /* rc_configuration_vars.h */, + 43AA8595194EEB8B00A67B56 /* rc_configuration.h */, + 43AA8596194EEB8B00A67B56 /* readable.h */, + 43AA8597194EEB8B00A67B56 /* recent_sessions.h */, + 43AA8598194EEB8B00A67B56 /* region_factory.h */, + 43AA8599194EEB8B00A67B56 /* region_sorters.h */, + 43AA859A194EEB8B00A67B56 /* region.h */, + 43AA859B194EEB8B00A67B56 /* resampled_source.h */, + 43AA859C194EEB8B00A67B56 /* return.h */, + 43AA859D194EEB8B00A67B56 /* reverse.h */, + 43AA859E194EEB8B00A67B56 /* revision.h */, + 43AA859F194EEB8B00A67B56 /* route_graph.h */, + 43AA85A0194EEB8B00A67B56 /* route_group_member.h */, + 43AA85A1194EEB8B00A67B56 /* route_group_specialized.h */, + 43AA85A2194EEB8B00A67B56 /* route_group.h */, + 43AA85A3194EEB8B00A67B56 /* route.h */, + 43AA85A4194EEB8B00A67B56 /* runtime_functions.h */, + 43AA85A5194EEB8B00A67B56 /* search_paths.h */, + 43AA85A6194EEB8B00A67B56 /* send.h */, + 43AA85A7194EEB8B00A67B56 /* session_configuration_vars.h */, + 43AA85A8194EEB8B00A67B56 /* session_configuration.h */, + 43AA85A9194EEB8B00A67B56 /* session_directory.h */, + 43AA85AA194EEB8B00A67B56 /* session_event.h */, + 43AA85AB194EEB8B00A67B56 /* session_handle.h */, + 43AA85AC194EEB8B00A67B56 /* session_metadata.h */, + 43AA85AD194EEB8B00A67B56 /* session_object.h */, + 43AA85AE194EEB8B00A67B56 /* session_playlist.h */, + 43AA85AF194EEB8B00A67B56 /* session_playlists.h */, + 43AA85B0194EEB8B00A67B56 /* session_route.h */, + 43AA85B1194EEB8B00A67B56 /* session_state_utils.h */, + 43AA85B2194EEB8B00A67B56 /* session_utils.h */, + 43AA85B3194EEB8B00A67B56 /* session.h */, + 43AA85B4194EEB8B00A67B56 /* silentfilesource.h */, + 43AA85B5194EEB8B00A67B56 /* slave.h */, + 43AA85B6194EEB8B00A67B56 /* smf_source.h */, + 43AA85B7194EEB8B00A67B56 /* sndfile_helpers.h */, + 43AA85B8194EEB8B00A67B56 /* sndfileimportable.h */, + 43AA85B9194EEB8B00A67B56 /* sndfilesource.h */, + 43AA85BA194EEB8B00A67B56 /* soundseq.h */, + 43AA85BB194EEB8B00A67B56 /* source_factory.h */, + 43AA85BC194EEB8B00A67B56 /* source.h */, + 43AA85BD194EEB8B00A67B56 /* speaker.h */, + 43AA85BE194EEB8B00A67B56 /* speakers.h */, + 43AA85BF194EEB8B00A67B56 /* spline.h */, + 43AA85C0194EEB8B00A67B56 /* srcfilesource.h */, + 43AA85C1194EEB8B00A67B56 /* stretch.h */, + 43AA85C2194EEB8B00A67B56 /* strip_silence.h */, + 43AA85C3194EEB8B00A67B56 /* system_exec.h */, + 43AA85C4194EEB8B00A67B56 /* tape_file_matcher.h */, + 43AA85C5194EEB8B00A67B56 /* template_utils.h */, + 43AA85C6194EEB8B00A67B56 /* tempo_map_importer.h */, + 43AA85C7194EEB8B00A67B56 /* tempo.h */, + 43AA85C8194EEB8B00A67B56 /* thread_buffers.h */, + 43AA85C9194EEB8B00A67B56 /* ticker.h */, + 43AA85CA194EEB8B00A67B56 /* timecode.h */, + 43AA85CB194EEB8B00A67B56 /* timefx_request.h */, + 43AA85CC194EEB8B00A67B56 /* timestamps.h */, + 43AA85CD194EEB8B00A67B56 /* track.h */, + 43AA85CE194EEB8B00A67B56 /* transient_detector.h */, + 43AA85CF194EEB8B00A67B56 /* trimmable.h */, + 43AA85D0194EEB8B00A67B56 /* types.h */, + 43AA85D1194EEB8B00A67B56 /* unknown_processor.h */, + 43AA85D2194EEB8B00A67B56 /* uri_map.h */, + 43AA85D3194EEB8B00A67B56 /* user_bundle.h */, + 43AA85D4194EEB8B00A67B56 /* utils.h */, + 43AA85D5194EEB8B00A67B56 /* version.h */, + 43AA85D6194EEB8B00A67B56 /* vst_info_file.h */, + 43AA85D7194EEB8B00A67B56 /* vst_plugin.h */, + 43AA85D8194EEB8B00A67B56 /* vst_types.h */, + 43AA85D9194EEB8B00A67B56 /* vumeterdsp.h */, + 43AA85DA194EEB8B00A67B56 /* windows_vst_plugin.h */, + 43AA85DB194EEB8B00A67B56 /* worker.h */, + ); + name = headers; + sourceTree = "<group>"; + }; + 43AA86C4194EEBAF00A67B56 /* vestige */ = { + isa = PBXGroup; + children = ( + 43AA86C5194EEBAF00A67B56 /* aeffectx.h */, + ); + name = vestige; + path = ../../../libs/ardour/ardour/vestige; + sourceTree = "<group>"; + }; + 43AA86C7194EEBC300A67B56 /* scripts */ = { + isa = PBXGroup; + children = ( + 43AA86C8194EEBF100A67B56 /* run-profiling.sh */, + 43AA86C9194EEBF100A67B56 /* run-session-tests.sh */, + 43AA86CA194EEBF100A67B56 /* run-tests.sh */, + 43AA86CB194EEBF100A67B56 /* test-env.sh */, + 43AA86CC194EEBF100A67B56 /* wscript */, + ); + name = scripts; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 43AA82A7194EEAAF00A67B56 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 43AA84BA194EEB5F00A67B56 /* audio_engine_test.h in Headers */, + 43AA84BC194EEB5F00A67B56 /* audio_region_read_test.h in Headers */, + 43AA84BE194EEB5F00A67B56 /* audio_region_test.h in Headers */, + 43AA84C0194EEB5F00A67B56 /* automation_list_property_test.h in Headers */, + 43AA84C2194EEB5F00A67B56 /* bbt_test.h in Headers */, + 43AA84C4194EEB5F00A67B56 /* combine_regions_test.h in Headers */, + 43AA84C6194EEB5F00A67B56 /* control_surfaces_test.h in Headers */, + 43AA84C9194EEB5F00A67B56 /* framepos_minus_beats_test.h in Headers */, + 43AA84CB194EEB5F00A67B56 /* framepos_plus_beats_test.h in Headers */, + 43AA84CD194EEB5F00A67B56 /* framewalk_to_beats_test.h in Headers */, + 43AA84CF194EEB5F00A67B56 /* interpolation_test.h in Headers */, + 43AA84D1194EEB5F00A67B56 /* jack_utils_test.h in Headers */, + 43AA84D4194EEB5F00A67B56 /* load_sessions_test.h in Headers */, + 43AA84D6194EEB5F00A67B56 /* midi_clock_slave_test.h in Headers */, + 43AA84D8194EEB5F00A67B56 /* mtdm_test.h in Headers */, + 43AA84DA194EEB5F00A67B56 /* playlist_equivalent_regions_test.h in Headers */, + 43AA84DC194EEB5F00A67B56 /* playlist_layering_test.h in Headers */, + 43AA84DE194EEB5F00A67B56 /* playlist_read_test.h in Headers */, + 43AA84E0194EEB5F00A67B56 /* plugins_test.h in Headers */, + 43AA84E5194EEB5F00A67B56 /* region_naming_test.h in Headers */, + 43AA84E7194EEB5F00A67B56 /* resampled_source_test.h in Headers */, + 43AA84E9194EEB5F00A67B56 /* session_test.h in Headers */, + 43AA84EB194EEB5F00A67B56 /* tempo_test.h in Headers */, + 43AA84ED194EEB5F00A67B56 /* test_common.h in Headers */, + 43AA84EF194EEB5F00A67B56 /* test_needing_session.h in Headers */, + 43AA84F1194EEB5F00A67B56 /* test_util.h in Headers */, + 43AA85DC194EEB8B00A67B56 /* amp.h in Headers */, + 43AA85DD194EEB8B00A67B56 /* analyser.h in Headers */, + 43AA85DE194EEB8B00A67B56 /* ardour.h in Headers */, + 43AA85DF194EEB8B00A67B56 /* async_midi_port.h in Headers */, + 43AA85E0194EEB8B00A67B56 /* audio_backend.h in Headers */, + 43AA85E1194EEB8B00A67B56 /* audio_buffer.h in Headers */, + 43AA85E2194EEB8B00A67B56 /* audio_diskstream.h in Headers */, + 43AA85E3194EEB8B00A67B56 /* audio_library.h in Headers */, + 43AA85E4194EEB8B00A67B56 /* audio_playlist_importer.h in Headers */, + 43AA85E5194EEB8B00A67B56 /* audio_playlist_source.h in Headers */, + 43AA85E6194EEB8B00A67B56 /* audio_port.h in Headers */, + 43AA85E7194EEB8B00A67B56 /* audio_region_importer.h in Headers */, + 43AA85E8194EEB8B00A67B56 /* audio_track_importer.h in Headers */, + 43AA85E9194EEB8B00A67B56 /* audio_track.h in Headers */, + 43AA85EA194EEB8B00A67B56 /* audio_unit.h in Headers */, + 43AA85EB194EEB8B00A67B56 /* audioanalyser.h in Headers */, + 43AA85EC194EEB8B00A67B56 /* audioengine.h in Headers */, + 43AA85ED194EEB8B00A67B56 /* audiofile_tagger.h in Headers */, + 43AA85EE194EEB8B00A67B56 /* audiofilesource.h in Headers */, + 43AA85EF194EEB8B00A67B56 /* audioplaylist.h in Headers */, + 43AA85F0194EEB8B00A67B56 /* audioregion.h in Headers */, + 43AA85F1194EEB8B00A67B56 /* audiosource.h in Headers */, + 43AA85F2194EEB8B00A67B56 /* auditioner.h in Headers */, + 43AA85F3194EEB8B00A67B56 /* auto_bundle.h in Headers */, + 43AA85F4194EEB8B00A67B56 /* automatable_sequence.h in Headers */, + 43AA85F5194EEB8B00A67B56 /* automatable.h in Headers */, + 43AA85F6194EEB8B00A67B56 /* automation_control.h in Headers */, + 43AA85F7194EEB8B00A67B56 /* automation_list.h in Headers */, + 43AA85F8194EEB8B00A67B56 /* automation_watch.h in Headers */, + 43AA85F9194EEB8B00A67B56 /* beats_frames_converter.h in Headers */, + 43AA85FA194EEB8B00A67B56 /* broadcast_info.h in Headers */, + 43AA85FB194EEB8B00A67B56 /* buffer_manager.h in Headers */, + 43AA85FC194EEB8B00A67B56 /* buffer_set.h in Headers */, + 43AA85FD194EEB8B00A67B56 /* buffer.h in Headers */, + 43AA85FE194EEB8B00A67B56 /* bundle.h in Headers */, + 43AA85FF194EEB8B00A67B56 /* butler.h in Headers */, + 43AA8600194EEB8B00A67B56 /* caimportable.h in Headers */, + 43AA8601194EEB8B00A67B56 /* capturing_processor.h in Headers */, + 43AA8602194EEB8B00A67B56 /* chan_count.h in Headers */, + 43AA8603194EEB8B00A67B56 /* chan_mapping.h in Headers */, + 43AA8604194EEB8B00A67B56 /* click.h in Headers */, + 43AA8605194EEB8B00A67B56 /* comparable_shared_ptr.h in Headers */, + 43AA8606194EEB8B00A67B56 /* configuration_variable.h in Headers */, + 43AA8607194EEB8B00A67B56 /* configuration.h in Headers */, + 43AA8608194EEB8B00A67B56 /* control_protocol_manager.h in Headers */, + 43AA8609194EEB8B00A67B56 /* coreaudiosource.h in Headers */, + 43AA860A194EEB8B00A67B56 /* cycle_timer.h in Headers */, + 43AA860B194EEB8B00A67B56 /* cycles.h in Headers */, + 43AA860C194EEB8B00A67B56 /* data_type.h in Headers */, + 43AA860D194EEB8B00A67B56 /* dB.h in Headers */, + 43AA860E194EEB8B00A67B56 /* debug.h in Headers */, + 43AA860F194EEB8B00A67B56 /* delivery.h in Headers */, + 43AA8610194EEB8B00A67B56 /* directory_names.h in Headers */, + 43AA8611194EEB8B00A67B56 /* diskstream.h in Headers */, + 43AA8612194EEB8B00A67B56 /* element_import_handler.h in Headers */, + 43AA8613194EEB8B00A67B56 /* element_importer.h in Headers */, + 43AA8614194EEB8B00A67B56 /* engine_state_controller.h in Headers */, + 43AA8615194EEB8B00A67B56 /* event_type_map.h in Headers */, + 43AA8616194EEB8B00A67B56 /* export_channel_configuration.h in Headers */, + 43AA8617194EEB8B00A67B56 /* export_channel.h in Headers */, + 43AA8618194EEB8B00A67B56 /* export_failed.h in Headers */, + 43AA8619194EEB8B00A67B56 /* export_filename.h in Headers */, + 43AA861A194EEB8B00A67B56 /* export_format_base.h in Headers */, + 43AA861B194EEB8B00A67B56 /* export_format_compatibility.h in Headers */, + 43AA861C194EEB8B00A67B56 /* export_format_manager.h in Headers */, + 43AA861D194EEB8B00A67B56 /* export_format_specification.h in Headers */, + 43AA861E194EEB8B00A67B56 /* export_formats.h in Headers */, + 43AA861F194EEB8B00A67B56 /* export_graph_builder.h in Headers */, + 43AA8620194EEB8B00A67B56 /* export_handler.h in Headers */, + 43AA8621194EEB8B00A67B56 /* export_multiplication.h in Headers */, + 43AA8622194EEB8B00A67B56 /* export_pointers.h in Headers */, + 43AA8623194EEB8B00A67B56 /* export_preset.h in Headers */, + 43AA8624194EEB8B00A67B56 /* export_profile_manager.h in Headers */, + 43AA8625194EEB8B00A67B56 /* export_status.h in Headers */, + 43AA8626194EEB8B00A67B56 /* export_timespan.h in Headers */, + 43AA8627194EEB8B00A67B56 /* file_source.h in Headers */, + 43AA8628194EEB8B00A67B56 /* filename_extensions.h in Headers */, + 43AA8629194EEB8B00A67B56 /* filesystem_paths.h in Headers */, + 43AA862A194EEB8B00A67B56 /* filter.h in Headers */, + 43AA862B194EEB8B00A67B56 /* graph.h in Headers */, + 43AA862C194EEB8B00A67B56 /* graphnode.h in Headers */, + 43AA862D194EEB8B00A67B56 /* iec1ppmdsp.h in Headers */, + 43AA862E194EEB8B00A67B56 /* iec2ppmdsp.h in Headers */, + 43AA862F194EEB8B00A67B56 /* import_status.h in Headers */, + 432859E61A10F415006C3E03 /* midi_scene_change.h in Headers */, + 43AA8630194EEB8B00A67B56 /* importable_source.h in Headers */, + 43AA8631194EEB8B00A67B56 /* instrument_info.h in Headers */, + 43AA8632194EEB8B00A67B56 /* internal_return.h in Headers */, + 432859E81A10F415006C3E03 /* mididm.h in Headers */, + 43AA8633194EEB8B00A67B56 /* internal_send.h in Headers */, + 43AA8634194EEB8B00A67B56 /* interpolation.h in Headers */, + 43AA8635194EEB8B00A67B56 /* interthread_info.h in Headers */, + 43AA8636194EEB8B00A67B56 /* io_processor.h in Headers */, + 43AA8637194EEB8B00A67B56 /* io.h in Headers */, + 43AA8638194EEB8B00A67B56 /* jack_utils.h in Headers */, + 43AA8639194EEB8B00A67B56 /* kmeterdsp.h in Headers */, + 43AA863A194EEB8B00A67B56 /* ladspa_plugin.h in Headers */, + 43AA863B194EEB8B00A67B56 /* ladspa.h in Headers */, + 43AA863C194EEB8B00A67B56 /* latent.h in Headers */, + 43AA863D194EEB8B00A67B56 /* libardour_visibility.h in Headers */, + 43AA863E194EEB8B00A67B56 /* linux_vst_support.h in Headers */, + 43AA863F194EEB8B00A67B56 /* location_importer.h in Headers */, + 43AA8640194EEB8B00A67B56 /* location.h in Headers */, + 43AA8641194EEB8B00A67B56 /* logcurve.h in Headers */, + 43AA8642194EEB8B00A67B56 /* lv2_plugin.h in Headers */, + 43AA8643194EEB8B00A67B56 /* lxvst_plugin.h in Headers */, + 43AA8644194EEB8B00A67B56 /* meter.h in Headers */, + 43AA8645194EEB8B00A67B56 /* midi_automation_list_binder.h in Headers */, + 43AA8646194EEB8B00A67B56 /* midi_buffer.h in Headers */, + 43AA8647194EEB8B00A67B56 /* midi_diskstream.h in Headers */, + 43AA8648194EEB8B00A67B56 /* midi_model.h in Headers */, + 43AA8649194EEB8B00A67B56 /* midi_operator.h in Headers */, + 43AA864A194EEB8B00A67B56 /* midi_patch_manager.h in Headers */, + 43AA864B194EEB8B00A67B56 /* midi_playlist_source.h in Headers */, + 43AA864C194EEB8B00A67B56 /* midi_playlist.h in Headers */, + 43AA864D194EEB8B00A67B56 /* midi_port.h in Headers */, + 43AA864E194EEB8B00A67B56 /* midi_region.h in Headers */, + 43AA864F194EEB8B00A67B56 /* midi_ring_buffer.h in Headers */, + 43AA8650194EEB8B00A67B56 /* midi_source.h in Headers */, + 43AA8651194EEB8B00A67B56 /* midi_state_tracker.h in Headers */, + 43AA8652194EEB8B00A67B56 /* midi_stretch.h in Headers */, + 43AA8653194EEB8B00A67B56 /* midi_track.h in Headers */, + 43AA8654194EEB8B00A67B56 /* midi_ui.h in Headers */, + 43AA8655194EEB8B00A67B56 /* midiport_manager.h in Headers */, + 43AA8656194EEB8B00A67B56 /* mix.h in Headers */, + 43AA8657194EEB8B00A67B56 /* monitor_processor.h in Headers */, + 43AA8658194EEB8B00A67B56 /* movable.h in Headers */, + 43AA8659194EEB8B00A67B56 /* msvc_libardour.h in Headers */, + 43AA865A194EEB8B00A67B56 /* mtdm.h in Headers */, + 43AA865B194EEB8B00A67B56 /* mute_master.h in Headers */, + 43AA865C194EEB8B00A67B56 /* noise.h in Headers */, + 43AA865D194EEB8B00A67B56 /* onset_detector.h in Headers */, + 43AA865E194EEB8B00A67B56 /* operations.h in Headers */, + 43AA865F194EEB8B00A67B56 /* pan_controllable.h in Headers */, + 432859E71A10F415006C3E03 /* midi_scene_changer.h in Headers */, + 43AA8660194EEB8B00A67B56 /* pannable.h in Headers */, + 43AA8661194EEB8B00A67B56 /* panner_manager.h in Headers */, + 43AA8662194EEB8B00A67B56 /* panner_shell.h in Headers */, + 43AA8663194EEB8B00A67B56 /* panner.h in Headers */, + 43AA8664194EEB8B00A67B56 /* pcm_utils.h in Headers */, + 43AA8665194EEB8B00A67B56 /* peak.h in Headers */, + 43AA8666194EEB8B00A67B56 /* pi_controller.h in Headers */, + 43AA8667194EEB8B00A67B56 /* pitch.h in Headers */, + 43AA8668194EEB8B00A67B56 /* playlist_factory.h in Headers */, + 43AA8669194EEB8B00A67B56 /* playlist_source.h in Headers */, + 43AA866A194EEB8B00A67B56 /* playlist.h in Headers */, + 43AA866B194EEB8B00A67B56 /* plugin_insert.h in Headers */, + 43AA866C194EEB8B00A67B56 /* plugin_manager.h in Headers */, + 43AA866D194EEB8B00A67B56 /* plugin_types.h in Headers */, + 43AA866E194EEB8B00A67B56 /* plugin.h in Headers */, + 43AA866F194EEB8B00A67B56 /* port_engine.h in Headers */, + 43AA8670194EEB8B00A67B56 /* port_insert.h in Headers */, + 43AA8671194EEB8B00A67B56 /* port_manager.h in Headers */, + 43AA8672194EEB8B00A67B56 /* port_set.h in Headers */, + 43AA8673194EEB8B00A67B56 /* port.h in Headers */, + 43AA8674194EEB8B00A67B56 /* process_thread.h in Headers */, + 43AA8675194EEB8B00A67B56 /* processor.h in Headers */, + 43AA8676194EEB8B00A67B56 /* profile.h in Headers */, + 43AA8677194EEB8B00A67B56 /* progress.h in Headers */, + 43AA8678194EEB8B00A67B56 /* proxy_controllable.h in Headers */, + 43AA8679194EEB8B00A67B56 /* public_diskstream.h in Headers */, + 43AA867A194EEB8B00A67B56 /* quantize.h in Headers */, + 43AA867B194EEB8B00A67B56 /* rb_effect.h in Headers */, + 43AA867C194EEB8B00A67B56 /* rc_configuration_vars.h in Headers */, + 43AA867D194EEB8B00A67B56 /* rc_configuration.h in Headers */, + 43AA867E194EEB8B00A67B56 /* readable.h in Headers */, + 43AA867F194EEB8B00A67B56 /* recent_sessions.h in Headers */, + 43AA8680194EEB8B00A67B56 /* region_factory.h in Headers */, + 43AA8681194EEB8B00A67B56 /* region_sorters.h in Headers */, + 43AA8682194EEB8B00A67B56 /* region.h in Headers */, + 43AA8683194EEB8B00A67B56 /* resampled_source.h in Headers */, + 43AA8684194EEB8B00A67B56 /* return.h in Headers */, + 43AA8685194EEB8B00A67B56 /* reverse.h in Headers */, + 43AA8686194EEB8B00A67B56 /* revision.h in Headers */, + 43AA8687194EEB8B00A67B56 /* route_graph.h in Headers */, + 43AA8688194EEB8B00A67B56 /* route_group_member.h in Headers */, + 43AA8689194EEB8B00A67B56 /* route_group_specialized.h in Headers */, + 43AA868A194EEB8B00A67B56 /* route_group.h in Headers */, + 43AA868B194EEB8B00A67B56 /* route.h in Headers */, + 43AA868C194EEB8B00A67B56 /* runtime_functions.h in Headers */, + 43AA868D194EEB8B00A67B56 /* search_paths.h in Headers */, + 43AA868E194EEB8B00A67B56 /* send.h in Headers */, + 43AA868F194EEB8B00A67B56 /* session_configuration_vars.h in Headers */, + 43AA8690194EEB8B00A67B56 /* session_configuration.h in Headers */, + 43AA8691194EEB8B00A67B56 /* session_directory.h in Headers */, + 43AA8692194EEB8B00A67B56 /* session_event.h in Headers */, + 43AA8693194EEB8B00A67B56 /* session_handle.h in Headers */, + 43AA8694194EEB8B00A67B56 /* session_metadata.h in Headers */, + 43AA8695194EEB8B00A67B56 /* session_object.h in Headers */, + 43AA8696194EEB8B00A67B56 /* session_playlist.h in Headers */, + 43AA8697194EEB8B00A67B56 /* session_playlists.h in Headers */, + 43AA8698194EEB8B00A67B56 /* session_route.h in Headers */, + 43AA8699194EEB8B00A67B56 /* session_state_utils.h in Headers */, + 43AA869A194EEB8B00A67B56 /* session_utils.h in Headers */, + 43AA869B194EEB8B00A67B56 /* session.h in Headers */, + 43AA869C194EEB8B00A67B56 /* silentfilesource.h in Headers */, + 43AA869D194EEB8B00A67B56 /* slave.h in Headers */, + 43AA869E194EEB8B00A67B56 /* smf_source.h in Headers */, + 43AA869F194EEB8B00A67B56 /* sndfile_helpers.h in Headers */, + 43AA86A0194EEB8B00A67B56 /* sndfileimportable.h in Headers */, + 43AA86A1194EEB8B00A67B56 /* sndfilesource.h in Headers */, + 43AA86A2194EEB8B00A67B56 /* soundseq.h in Headers */, + 43AA86A3194EEB8B00A67B56 /* source_factory.h in Headers */, + 43AA86A4194EEB8B00A67B56 /* source.h in Headers */, + 43AA86A5194EEB8B00A67B56 /* speaker.h in Headers */, + 43AA86A6194EEB8B00A67B56 /* speakers.h in Headers */, + 43AA86A7194EEB8B00A67B56 /* spline.h in Headers */, + 43AA86A8194EEB8B00A67B56 /* srcfilesource.h in Headers */, + 43AA86A9194EEB8B00A67B56 /* stretch.h in Headers */, + 43AA86AA194EEB8B00A67B56 /* strip_silence.h in Headers */, + 43AA86AB194EEB8B00A67B56 /* system_exec.h in Headers */, + 43AA86AC194EEB8B00A67B56 /* tape_file_matcher.h in Headers */, + 43AA86AD194EEB8B00A67B56 /* template_utils.h in Headers */, + 43AA86AE194EEB8B00A67B56 /* tempo_map_importer.h in Headers */, + 43AA86AF194EEB8B00A67B56 /* tempo.h in Headers */, + 43AA86B0194EEB8B00A67B56 /* thread_buffers.h in Headers */, + 43AA86B1194EEB8B00A67B56 /* ticker.h in Headers */, + 43AA86B2194EEB8B00A67B56 /* timecode.h in Headers */, + 43AA86B3194EEB8B00A67B56 /* timefx_request.h in Headers */, + 43AA86B4194EEB8B00A67B56 /* timestamps.h in Headers */, + 43AA86B5194EEB8B00A67B56 /* track.h in Headers */, + 43AA86B6194EEB8B00A67B56 /* transient_detector.h in Headers */, + 43AA86B7194EEB8B00A67B56 /* trimmable.h in Headers */, + 43AA86B8194EEB8B00A67B56 /* types.h in Headers */, + 43AA86B9194EEB8B00A67B56 /* unknown_processor.h in Headers */, + 43AA86BA194EEB8B00A67B56 /* uri_map.h in Headers */, + 43AA86BB194EEB8B00A67B56 /* user_bundle.h in Headers */, + 43AA86BC194EEB8B00A67B56 /* utils.h in Headers */, + 43AA86BD194EEB8B00A67B56 /* version.h in Headers */, + 43AA86BE194EEB8B00A67B56 /* vst_info_file.h in Headers */, + 43AA86BF194EEB8B00A67B56 /* vst_plugin.h in Headers */, + 43AA86C0194EEB8B00A67B56 /* vst_types.h in Headers */, + 43AA86C1194EEB8B00A67B56 /* vumeterdsp.h in Headers */, + 43AA86C2194EEB8B00A67B56 /* windows_vst_plugin.h in Headers */, + 43AA86C3194EEB8B00A67B56 /* worker.h in Headers */, + 43AA86C6194EEBAF00A67B56 /* aeffectx.h in Headers */, + 43AA86D0194EEC1400A67B56 /* gettext.h in Headers */, + 43AA86D1194EEC1400A67B56 /* lv2_evbuf.h in Headers */, + 43AA86D2194EEC1400A67B56 /* rdff.h in Headers */, + 432653E6194EF73C00BEFB46 /* amp.h in Headers */, + 432653E7194EF73C00BEFB46 /* analyser.h in Headers */, + 432653E8194EF73C00BEFB46 /* ardour.h in Headers */, + 432653E9194EF73C00BEFB46 /* async_midi_port.h in Headers */, + 432653EA194EF73C00BEFB46 /* audio_backend.h in Headers */, + 432653EB194EF73C00BEFB46 /* audio_buffer.h in Headers */, + 432653EC194EF73C00BEFB46 /* audio_diskstream.h in Headers */, + 432653ED194EF73C00BEFB46 /* audio_library.h in Headers */, + 432653EE194EF73C00BEFB46 /* audio_playlist_importer.h in Headers */, + 432653EF194EF73C00BEFB46 /* audio_playlist_source.h in Headers */, + 432653F0194EF73C00BEFB46 /* audio_port.h in Headers */, + 432653F1194EF73C00BEFB46 /* audio_region_importer.h in Headers */, + 432653F2194EF73C00BEFB46 /* audio_track.h in Headers */, + 432653F3194EF73C00BEFB46 /* audio_track_importer.h in Headers */, + 432653F4194EF73C00BEFB46 /* audio_unit.h in Headers */, + 432653F5194EF73C00BEFB46 /* audioanalyser.h in Headers */, + 432653F6194EF73C00BEFB46 /* audioengine.h in Headers */, + 432653F7194EF73C00BEFB46 /* audiofile_tagger.h in Headers */, + 432653F8194EF73C00BEFB46 /* audiofilesource.h in Headers */, + 432653F9194EF73C00BEFB46 /* audioplaylist.h in Headers */, + 432653FA194EF73C00BEFB46 /* audioregion.h in Headers */, + 432653FB194EF73C00BEFB46 /* audiosource.h in Headers */, + 432653FC194EF73C00BEFB46 /* auditioner.h in Headers */, + 432653FD194EF73C00BEFB46 /* auto_bundle.h in Headers */, + 432653FE194EF73C00BEFB46 /* automatable.h in Headers */, + 432653FF194EF73C00BEFB46 /* automatable_sequence.h in Headers */, + 43265400194EF73C00BEFB46 /* automation_control.h in Headers */, + 43265401194EF73C00BEFB46 /* automation_list.h in Headers */, + 43265402194EF73C00BEFB46 /* automation_watch.h in Headers */, + 43265403194EF73C00BEFB46 /* beats_frames_converter.h in Headers */, + 43265404194EF73C00BEFB46 /* broadcast_info.h in Headers */, + 43265405194EF73C00BEFB46 /* buffer.h in Headers */, + 43265406194EF73C00BEFB46 /* buffer_manager.h in Headers */, + 43265407194EF73C00BEFB46 /* buffer_set.h in Headers */, + 43265408194EF73C00BEFB46 /* bundle.h in Headers */, + 43265409194EF73C00BEFB46 /* butler.h in Headers */, + 4326540A194EF73C00BEFB46 /* caimportable.h in Headers */, + 4326540B194EF73C00BEFB46 /* capturing_processor.h in Headers */, + 4326540C194EF73C00BEFB46 /* chan_count.h in Headers */, + 4326540D194EF73D00BEFB46 /* chan_mapping.h in Headers */, + 4326540E194EF73D00BEFB46 /* click.h in Headers */, + 4326540F194EF73D00BEFB46 /* comparable_shared_ptr.h in Headers */, + 43265410194EF73D00BEFB46 /* configuration.h in Headers */, + 43265411194EF73D00BEFB46 /* configuration_variable.h in Headers */, + 43265412194EF73D00BEFB46 /* control_protocol_manager.h in Headers */, + 43265413194EF73D00BEFB46 /* coreaudiosource.h in Headers */, + 43265414194EF73D00BEFB46 /* cycle_timer.h in Headers */, + 43265415194EF73D00BEFB46 /* cycles.h in Headers */, + 43265416194EF73D00BEFB46 /* data_type.h in Headers */, + 43265417194EF73D00BEFB46 /* dB.h in Headers */, + 43265418194EF73D00BEFB46 /* debug.h in Headers */, + 43265419194EF73D00BEFB46 /* delivery.h in Headers */, + 4326541A194EF73D00BEFB46 /* directory_names.h in Headers */, + 4326541B194EF73D00BEFB46 /* diskstream.h in Headers */, + 4326541C194EF73D00BEFB46 /* element_import_handler.h in Headers */, + 4326541D194EF73D00BEFB46 /* element_importer.h in Headers */, + 4326541E194EF73D00BEFB46 /* engine_state_controller.h in Headers */, + 4326541F194EF73D00BEFB46 /* event_type_map.h in Headers */, + 43265420194EF73D00BEFB46 /* export_channel.h in Headers */, + 43265421194EF73D00BEFB46 /* export_channel_configuration.h in Headers */, + 43265422194EF73D00BEFB46 /* export_failed.h in Headers */, + 43265423194EF73D00BEFB46 /* export_filename.h in Headers */, + 43265424194EF73D00BEFB46 /* export_format_base.h in Headers */, + 43265425194EF73D00BEFB46 /* export_format_compatibility.h in Headers */, + 43265426194EF73D00BEFB46 /* export_format_manager.h in Headers */, + 43265427194EF73D00BEFB46 /* export_format_specification.h in Headers */, + 43265428194EF73D00BEFB46 /* export_formats.h in Headers */, + 43265429194EF73D00BEFB46 /* export_graph_builder.h in Headers */, + 4326542A194EF73D00BEFB46 /* export_handler.h in Headers */, + 4326542B194EF73D00BEFB46 /* export_multiplication.h in Headers */, + 4326542C194EF73D00BEFB46 /* export_pointers.h in Headers */, + 4326542D194EF73D00BEFB46 /* export_preset.h in Headers */, + 4326542E194EF73D00BEFB46 /* export_profile_manager.h in Headers */, + 4326542F194EF73D00BEFB46 /* export_status.h in Headers */, + 43265430194EF73D00BEFB46 /* export_timespan.h in Headers */, + 43265431194EF73D00BEFB46 /* file_source.h in Headers */, + 43265432194EF73D00BEFB46 /* filename_extensions.h in Headers */, + 43265433194EF73D00BEFB46 /* filesystem_paths.h in Headers */, + 43265434194EF73D00BEFB46 /* filter.h in Headers */, + 43265435194EF73D00BEFB46 /* graph.h in Headers */, + 43265436194EF73D00BEFB46 /* graphnode.h in Headers */, + 43265437194EF73D00BEFB46 /* iec1ppmdsp.h in Headers */, + 43265438194EF73D00BEFB46 /* iec2ppmdsp.h in Headers */, + 43265439194EF73D00BEFB46 /* import_status.h in Headers */, + 4326543A194EF73D00BEFB46 /* importable_source.h in Headers */, + 4326543B194EF73D00BEFB46 /* instrument_info.h in Headers */, + 4326543C194EF73D00BEFB46 /* internal_return.h in Headers */, + 4326543D194EF73D00BEFB46 /* internal_send.h in Headers */, + 4326543E194EF73D00BEFB46 /* interpolation.h in Headers */, + 4326543F194EF73D00BEFB46 /* interthread_info.h in Headers */, + 43265440194EF73D00BEFB46 /* io.h in Headers */, + 43265441194EF73D00BEFB46 /* io_processor.h in Headers */, + 43265442194EF73D00BEFB46 /* jack_utils.h in Headers */, + 43265443194EF73D00BEFB46 /* kmeterdsp.h in Headers */, + 43265444194EF73D00BEFB46 /* ladspa.h in Headers */, + 43265445194EF73D00BEFB46 /* ladspa_plugin.h in Headers */, + 43265446194EF73D00BEFB46 /* latent.h in Headers */, + 43265447194EF73D00BEFB46 /* libardour_visibility.h in Headers */, + 43265448194EF73D00BEFB46 /* linux_vst_support.h in Headers */, + 43265449194EF73D00BEFB46 /* location.h in Headers */, + 4326544A194EF73D00BEFB46 /* location_importer.h in Headers */, + 4326544B194EF73D00BEFB46 /* logcurve.h in Headers */, + 4326544C194EF73D00BEFB46 /* lv2_plugin.h in Headers */, + 4326544D194EF73D00BEFB46 /* lxvst_plugin.h in Headers */, + 4326544E194EF73D00BEFB46 /* meter.h in Headers */, + 4326544F194EF73D00BEFB46 /* midi_automation_list_binder.h in Headers */, + 43265450194EF73D00BEFB46 /* midi_buffer.h in Headers */, + 43265451194EF73D00BEFB46 /* midi_diskstream.h in Headers */, + 43265452194EF73D00BEFB46 /* midi_model.h in Headers */, + 43265453194EF73D00BEFB46 /* midi_operator.h in Headers */, + 43265454194EF73D00BEFB46 /* midi_patch_manager.h in Headers */, + 43265455194EF73D00BEFB46 /* midi_playlist.h in Headers */, + 43265456194EF73D00BEFB46 /* midi_playlist_source.h in Headers */, + 43265457194EF73D00BEFB46 /* midi_port.h in Headers */, + 43265458194EF73D00BEFB46 /* midi_region.h in Headers */, + 43265459194EF73D00BEFB46 /* midi_ring_buffer.h in Headers */, + 4326545A194EF73D00BEFB46 /* midi_source.h in Headers */, + 4326545B194EF73D00BEFB46 /* midi_state_tracker.h in Headers */, + 4326545C194EF73D00BEFB46 /* midi_stretch.h in Headers */, + 4326545D194EF73D00BEFB46 /* midi_track.h in Headers */, + 4326545E194EF73D00BEFB46 /* midi_ui.h in Headers */, + 4326545F194EF73D00BEFB46 /* midiport_manager.h in Headers */, + 43265460194EF73D00BEFB46 /* mix.h in Headers */, + 43265461194EF73D00BEFB46 /* monitor_processor.h in Headers */, + 43265462194EF73D00BEFB46 /* movable.h in Headers */, + 43265463194EF73D00BEFB46 /* msvc_libardour.h in Headers */, + 43265464194EF73D00BEFB46 /* mtdm.h in Headers */, + 43265465194EF73D00BEFB46 /* mute_master.h in Headers */, + 43265466194EF73D00BEFB46 /* noise.h in Headers */, + 43265467194EF73D00BEFB46 /* onset_detector.h in Headers */, + 43265468194EF73D00BEFB46 /* operations.h in Headers */, + 43265469194EF73D00BEFB46 /* pan_controllable.h in Headers */, + 4326546A194EF73D00BEFB46 /* pannable.h in Headers */, + 4326546B194EF73D00BEFB46 /* panner.h in Headers */, + 4326546C194EF73D00BEFB46 /* panner_manager.h in Headers */, + 4326546D194EF73D00BEFB46 /* panner_shell.h in Headers */, + 4326546E194EF73D00BEFB46 /* pcm_utils.h in Headers */, + 4326546F194EF73D00BEFB46 /* peak.h in Headers */, + 43265470194EF73D00BEFB46 /* pi_controller.h in Headers */, + 43265471194EF73D00BEFB46 /* pitch.h in Headers */, + 43265472194EF73D00BEFB46 /* playlist.h in Headers */, + 43265473194EF73D00BEFB46 /* playlist_factory.h in Headers */, + 43265474194EF73D00BEFB46 /* playlist_source.h in Headers */, + 43265475194EF73D00BEFB46 /* plugin.h in Headers */, + 43265476194EF73D00BEFB46 /* plugin_insert.h in Headers */, + 43265477194EF73D00BEFB46 /* plugin_manager.h in Headers */, + 43265478194EF73D00BEFB46 /* plugin_types.h in Headers */, + 43265479194EF73D00BEFB46 /* port.h in Headers */, + 4326547A194EF73D00BEFB46 /* port_engine.h in Headers */, + 4326547B194EF73D00BEFB46 /* port_insert.h in Headers */, + 4326547C194EF73D00BEFB46 /* port_manager.h in Headers */, + 4326547D194EF73D00BEFB46 /* port_set.h in Headers */, + 4326547E194EF73D00BEFB46 /* process_thread.h in Headers */, + 4326547F194EF73D00BEFB46 /* processor.h in Headers */, + 43265480194EF73D00BEFB46 /* profile.h in Headers */, + 43265481194EF73D00BEFB46 /* progress.h in Headers */, + 43265482194EF73D00BEFB46 /* proxy_controllable.h in Headers */, + 43265483194EF73D00BEFB46 /* public_diskstream.h in Headers */, + 43265484194EF73D00BEFB46 /* quantize.h in Headers */, + 43265485194EF73D00BEFB46 /* rb_effect.h in Headers */, + 43265486194EF73D00BEFB46 /* rc_configuration.h in Headers */, + 43265487194EF73D00BEFB46 /* rc_configuration_vars.h in Headers */, + 43265488194EF73D00BEFB46 /* readable.h in Headers */, + 43265489194EF73D00BEFB46 /* recent_sessions.h in Headers */, + 4326548A194EF73D00BEFB46 /* region.h in Headers */, + 4326548B194EF73D00BEFB46 /* region_factory.h in Headers */, + 4326548C194EF73D00BEFB46 /* region_sorters.h in Headers */, + 4326548D194EF73D00BEFB46 /* resampled_source.h in Headers */, + 4326548E194EF73D00BEFB46 /* return.h in Headers */, + 4326548F194EF73D00BEFB46 /* reverse.h in Headers */, + 43265490194EF73D00BEFB46 /* revision.h in Headers */, + 43265491194EF73D00BEFB46 /* route.h in Headers */, + 43265492194EF73D00BEFB46 /* route_graph.h in Headers */, + 43265493194EF73D00BEFB46 /* route_group.h in Headers */, + 43265494194EF73D00BEFB46 /* route_group_member.h in Headers */, + 43265495194EF73D00BEFB46 /* route_group_specialized.h in Headers */, + 43265496194EF73D00BEFB46 /* runtime_functions.h in Headers */, + 43265497194EF73D00BEFB46 /* search_paths.h in Headers */, + 43265498194EF73D00BEFB46 /* send.h in Headers */, + 43265499194EF73D00BEFB46 /* session.h in Headers */, + 4326549A194EF73D00BEFB46 /* session_configuration.h in Headers */, + 4326549B194EF73D00BEFB46 /* session_configuration_vars.h in Headers */, + 4326549C194EF73D00BEFB46 /* session_directory.h in Headers */, + 4326549D194EF73D00BEFB46 /* session_event.h in Headers */, + 4326549E194EF73D00BEFB46 /* session_handle.h in Headers */, + 4326549F194EF73D00BEFB46 /* session_metadata.h in Headers */, + 432654A0194EF73D00BEFB46 /* session_object.h in Headers */, + 432859E91A10F415006C3E03 /* soundcloud_upload.h in Headers */, + 432654A1194EF73D00BEFB46 /* session_playlist.h in Headers */, + 432654A2194EF73D00BEFB46 /* session_playlists.h in Headers */, + 432654A3194EF73D00BEFB46 /* session_route.h in Headers */, + 432654A4194EF73D00BEFB46 /* session_state_utils.h in Headers */, + 432654A5194EF73D00BEFB46 /* session_utils.h in Headers */, + 432654A6194EF73D00BEFB46 /* silentfilesource.h in Headers */, + 432654A7194EF73D00BEFB46 /* slave.h in Headers */, + 432654A8194EF73D00BEFB46 /* smf_source.h in Headers */, + 432654A9194EF73D00BEFB46 /* sndfile_helpers.h in Headers */, + 432654AA194EF73D00BEFB46 /* sndfileimportable.h in Headers */, + 432654AB194EF73D00BEFB46 /* sndfilesource.h in Headers */, + 432654AC194EF73D00BEFB46 /* soundseq.h in Headers */, + 432654AD194EF73D00BEFB46 /* source.h in Headers */, + 432654AE194EF73D00BEFB46 /* source_factory.h in Headers */, + 432654AF194EF73D00BEFB46 /* speaker.h in Headers */, + 432654B0194EF73D00BEFB46 /* speakers.h in Headers */, + 432654B1194EF73D00BEFB46 /* spline.h in Headers */, + 432654B2194EF73D00BEFB46 /* srcfilesource.h in Headers */, + 432654B3194EF73D00BEFB46 /* stretch.h in Headers */, + 432654B4194EF73D00BEFB46 /* strip_silence.h in Headers */, + 432654B5194EF73D00BEFB46 /* system_exec.h in Headers */, + 432654B6194EF73D00BEFB46 /* tape_file_matcher.h in Headers */, + 432654B7194EF73D00BEFB46 /* template_utils.h in Headers */, + 432654B8194EF73D00BEFB46 /* tempo.h in Headers */, + 432654B9194EF73D00BEFB46 /* tempo_map_importer.h in Headers */, + 432654BA194EF73D00BEFB46 /* thread_buffers.h in Headers */, + 432654BB194EF73D00BEFB46 /* ticker.h in Headers */, + 432654BC194EF73D00BEFB46 /* timecode.h in Headers */, + 432654BD194EF73D00BEFB46 /* timefx_request.h in Headers */, + 432654BE194EF73D00BEFB46 /* timestamps.h in Headers */, + 432654BF194EF73D00BEFB46 /* track.h in Headers */, + 432654C0194EF73D00BEFB46 /* transient_detector.h in Headers */, + 432654C1194EF73D00BEFB46 /* trimmable.h in Headers */, + 432654C2194EF73D00BEFB46 /* types.h in Headers */, + 432654C3194EF73D00BEFB46 /* unknown_processor.h in Headers */, + 432654C4194EF73D00BEFB46 /* uri_map.h in Headers */, + 432654C5194EF73D00BEFB46 /* user_bundle.h in Headers */, + 432654C6194EF73D00BEFB46 /* utils.h in Headers */, + 432654C7194EF73D00BEFB46 /* version.h in Headers */, + 432654C8194EF73D00BEFB46 /* aeffectx.h in Headers */, + 432654C9194EF73D00BEFB46 /* vst_info_file.h in Headers */, + 432654CA194EF73D00BEFB46 /* vst_plugin.h in Headers */, + 432654CB194EF73D00BEFB46 /* vst_types.h in Headers */, + 432654CC194EF73D00BEFB46 /* vumeterdsp.h in Headers */, + 432654CD194EF73D00BEFB46 /* windows_vst_plugin.h in Headers */, + 432654CE194EF73D00BEFB46 /* worker.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 43AA82A8194EEAAF00A67B56 /* libardour */ = { + isa = PBXNativeTarget; + buildConfigurationList = 43AA82AA194EEAAF00A67B56 /* Build configuration list for PBXNativeTarget "libardour" */; + buildPhases = ( + 43AA82A5194EEAAF00A67B56 /* Sources */, + 43AA82A6194EEAAF00A67B56 /* Frameworks */, + 43AA82A7194EEAAF00A67B56 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = libardour; + productName = ardour; + productReference = 43AA82A9194EEAAF00A67B56 /* liblibardour.dylib */; + productType = "com.apple.product-type.library.dynamic"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 43AA8296194EEA6F00A67B56 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0460; + ORGANIZATIONNAME = Waves; + }; + buildConfigurationList = 43AA8299194EEA6F00A67B56 /* Build configuration list for PBXProject "libardour" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 43AA8295194EEA6F00A67B56; + productRefGroup = 43AA829F194EEA6F00A67B56 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 432859EC1A10F436006C3E03 /* Products */; + ProjectRef = 432859EB1A10F436006C3E03 /* libardour.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 43AA82A8194EEAAF00A67B56 /* libardour */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 43AA82A5194EEAAF00A67B56 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 43AA8383194EEB2600A67B56 /* amp.cc in Sources */, + 43AA8384194EEB2600A67B56 /* analyser.cc in Sources */, + 43AA8385194EEB2600A67B56 /* async_midi_port.cc in Sources */, + 43AA8386194EEB2600A67B56 /* audio_buffer.cc in Sources */, + 43AA8387194EEB2600A67B56 /* audio_diskstream.cc in Sources */, + 43AA8388194EEB2600A67B56 /* audio_library.cc in Sources */, + 43AA8389194EEB2600A67B56 /* audio_playlist_importer.cc in Sources */, + 43AA838A194EEB2600A67B56 /* audio_playlist_source.cc in Sources */, + 43AA838B194EEB2600A67B56 /* audio_playlist.cc in Sources */, + 43AA838C194EEB2600A67B56 /* audio_port.cc in Sources */, + 43AA838D194EEB2600A67B56 /* audio_region_importer.cc in Sources */, + 43AA838E194EEB2600A67B56 /* audio_track_importer.cc in Sources */, + 43AA838F194EEB2600A67B56 /* audio_track.cc in Sources */, + 43AA8390194EEB2600A67B56 /* audio_unit.cc in Sources */, + 43AA8391194EEB2600A67B56 /* audioanalyser.cc in Sources */, + 43AA8392194EEB2600A67B56 /* audioengine.cc in Sources */, + 43AA8393194EEB2600A67B56 /* audiofile_tagger.cc in Sources */, + 43AA8394194EEB2600A67B56 /* audiofilesource.cc in Sources */, + 43AA8395194EEB2600A67B56 /* audioregion.cc in Sources */, + 43AA8396194EEB2600A67B56 /* audiosource.cc in Sources */, + 43AA8397194EEB2600A67B56 /* auditioner.cc in Sources */, + 43AA8398194EEB2600A67B56 /* auto_bundle.cc in Sources */, + 43AA8399194EEB2600A67B56 /* automatable.cc in Sources */, + 43AA839A194EEB2600A67B56 /* automation_control.cc in Sources */, + 43AA839B194EEB2600A67B56 /* automation_list.cc in Sources */, + 43AA839C194EEB2600A67B56 /* automation_watch.cc in Sources */, + 43AA839D194EEB2600A67B56 /* automation.cc in Sources */, + 43AA839E194EEB2600A67B56 /* beats_frames_converter.cc in Sources */, + 43AA839F194EEB2600A67B56 /* broadcast_info.cc in Sources */, + 43AA83A0194EEB2600A67B56 /* buffer_manager.cc in Sources */, + 43AA83A1194EEB2600A67B56 /* buffer_set.cc in Sources */, + 43AA83A2194EEB2600A67B56 /* buffer.cc in Sources */, + 43AA83A3194EEB2600A67B56 /* bundle.cc in Sources */, + 43AA83A4194EEB2600A67B56 /* butler.cc in Sources */, + 43AA83A5194EEB2600A67B56 /* caimportable.cc in Sources */, + 43AA83A6194EEB2600A67B56 /* capturing_processor.cc in Sources */, + 43AA83A7194EEB2600A67B56 /* chan_count.cc in Sources */, + 43AA83A8194EEB2600A67B56 /* chan_mapping.cc in Sources */, + 43AA83A9194EEB2600A67B56 /* config_text.cc in Sources */, + 43AA83AA194EEB2600A67B56 /* configuration.cc in Sources */, + 43AA83AB194EEB2600A67B56 /* control_protocol_manager.cc in Sources */, + 43AA83AC194EEB2600A67B56 /* coreaudiosource.cc in Sources */, + 43AA83AD194EEB2600A67B56 /* cycle_timer.cc in Sources */, + 43AA83AE194EEB2600A67B56 /* data_type.cc in Sources */, + 43AA83AF194EEB2600A67B56 /* debug.cc in Sources */, + 43AA83B0194EEB2600A67B56 /* default_click.cc in Sources */, + 43AA83B1194EEB2600A67B56 /* delivery.cc in Sources */, + 43AA83B2194EEB2600A67B56 /* directory_names.cc in Sources */, + 43AA83B3194EEB2600A67B56 /* diskstream.cc in Sources */, + 43AA83B4194EEB2600A67B56 /* element_import_handler.cc in Sources */, + 43AA83B5194EEB2600A67B56 /* element_importer.cc in Sources */, + 43AA83B6194EEB2600A67B56 /* engine_slave.cc in Sources */, + 43AA83B7194EEB2600A67B56 /* engine_state_controller.cc in Sources */, + 43AA83B8194EEB2600A67B56 /* enums.cc in Sources */, + 43AA83B9194EEB2600A67B56 /* event_type_map.cc in Sources */, + 43AA83BA194EEB2600A67B56 /* export_channel_configuration.cc in Sources */, + 43AA83BB194EEB2600A67B56 /* export_channel.cc in Sources */, + 43AA83BC194EEB2600A67B56 /* export_failed.cc in Sources */, + 43AA83BD194EEB2600A67B56 /* export_filename.cc in Sources */, + 43AA83BE194EEB2600A67B56 /* export_format_base.cc in Sources */, + 43AA83BF194EEB2600A67B56 /* export_format_manager.cc in Sources */, + 43AA83C0194EEB2600A67B56 /* export_format_specification.cc in Sources */, + 43AA83C1194EEB2600A67B56 /* export_formats.cc in Sources */, + 43AA83C2194EEB2600A67B56 /* export_graph_builder.cc in Sources */, + 43AA83C3194EEB2600A67B56 /* export_handler.cc in Sources */, + 43AA83C4194EEB2600A67B56 /* export_multiplication.cc in Sources */, + 43AA83C5194EEB2600A67B56 /* export_preset.cc in Sources */, + 43AA83C6194EEB2600A67B56 /* export_profile_manager.cc in Sources */, + 432859F71A10F436006C3E03 /* soundcloud_upload.cc in Sources */, + 43AA83C7194EEB2600A67B56 /* export_status.cc in Sources */, + 43AA83C8194EEB2600A67B56 /* export_timespan.cc in Sources */, + 43AA83C9194EEB2600A67B56 /* file_source.cc in Sources */, + 432859F31A10F436006C3E03 /* midi_scene_change.cc in Sources */, + 43AA83CA194EEB2600A67B56 /* filename_extensions.cc in Sources */, + 43AA83CB194EEB2600A67B56 /* filesystem_paths.cc in Sources */, + 43AA83CC194EEB2600A67B56 /* filter.cc in Sources */, + 43AA83CD194EEB2600A67B56 /* find_session.cc in Sources */, + 43AA83CE194EEB2600A67B56 /* globals.cc in Sources */, + 43AA83CF194EEB2600A67B56 /* graph.cc in Sources */, + 43AA83D0194EEB2600A67B56 /* graphnode.cc in Sources */, + 43AA83D1194EEB2600A67B56 /* iec1ppmdsp.cc in Sources */, + 43AA83D2194EEB2600A67B56 /* iec2ppmdsp.cc in Sources */, + 43AA83D3194EEB2600A67B56 /* import.cc in Sources */, + 43AA83D4194EEB2600A67B56 /* instrument_info.cc in Sources */, + 43AA83D5194EEB2600A67B56 /* internal_return.cc in Sources */, + 43AA83D6194EEB2600A67B56 /* internal_send.cc in Sources */, + 43AA83D7194EEB2600A67B56 /* interpolation.cc in Sources */, + 43AA83D8194EEB2600A67B56 /* io_processor.cc in Sources */, + 43AA83D9194EEB2600A67B56 /* io.cc in Sources */, + 43AA83DA194EEB2600A67B56 /* kmeterdsp.cc in Sources */, + 43AA83DB194EEB2600A67B56 /* ladspa_plugin.cc in Sources */, + 43AA83DC194EEB2600A67B56 /* linux_vst_support.cc in Sources */, + 43AA83DD194EEB2600A67B56 /* location_importer.cc in Sources */, + 43AA83DE194EEB2600A67B56 /* location.cc in Sources */, + 43AA83DF194EEB2600A67B56 /* ltc_slave.cc in Sources */, + 43AA83E0194EEB2600A67B56 /* lv2_evbuf.c in Sources */, + 43AA83E1194EEB2600A67B56 /* lv2_plugin.cc in Sources */, + 43AA83E2194EEB2600A67B56 /* lxvst_plugin.cc in Sources */, + 43AA83E3194EEB2600A67B56 /* meter.cc in Sources */, + 43AA83E4194EEB2600A67B56 /* midi_automation_list_binder.cc in Sources */, + 43AA83E5194EEB2600A67B56 /* midi_buffer.cc in Sources */, + 43AA83E6194EEB2600A67B56 /* midi_clock_slave.cc in Sources */, + 43AA83E7194EEB2600A67B56 /* midi_diskstream.cc in Sources */, + 43AA83E8194EEB2600A67B56 /* midi_model.cc in Sources */, + 43AA83E9194EEB2600A67B56 /* midi_patch_manager.cc in Sources */, + 43AA83EA194EEB2600A67B56 /* midi_playlist_source.cc in Sources */, + 43AA83EB194EEB2600A67B56 /* midi_playlist.cc in Sources */, + 43AA83EC194EEB2600A67B56 /* midi_port.cc in Sources */, + 43AA83ED194EEB2600A67B56 /* midi_region.cc in Sources */, + 43AA83EE194EEB2600A67B56 /* midi_ring_buffer.cc in Sources */, + 43AA83EF194EEB2600A67B56 /* midi_source.cc in Sources */, + 43AA83F0194EEB2600A67B56 /* midi_state_tracker.cc in Sources */, + 43AA83F1194EEB2600A67B56 /* midi_stretch.cc in Sources */, + 43AA83F2194EEB2600A67B56 /* midi_track.cc in Sources */, + 43AA83F3194EEB2600A67B56 /* midi_ui.cc in Sources */, + 43AA83F4194EEB2600A67B56 /* midiport_manager.cc in Sources */, + 43AA83F5194EEB2600A67B56 /* mix.cc in Sources */, + 43AA83F6194EEB2600A67B56 /* monitor_processor.cc in Sources */, + 43AA83F7194EEB2600A67B56 /* mtc_slave.cc in Sources */, + 43AA83F8194EEB2600A67B56 /* mtdm.cc in Sources */, + 43AA83F9194EEB2600A67B56 /* mute_master.cc in Sources */, + 43AA83FA194EEB2600A67B56 /* onset_detector.cc in Sources */, + 43AA83FB194EEB2600A67B56 /* operations.cc in Sources */, + 43AA83FC194EEB2600A67B56 /* pan_controllable.cc in Sources */, + 43AA83FD194EEB2600A67B56 /* pannable.cc in Sources */, + 43AA83FE194EEB2600A67B56 /* panner_manager.cc in Sources */, + 43AA83FF194EEB2600A67B56 /* panner_shell.cc in Sources */, + 43AA8400194EEB2600A67B56 /* panner.cc in Sources */, + 43AA8401194EEB2600A67B56 /* pcm_utils.cc in Sources */, + 43AA8402194EEB2600A67B56 /* pi_controller.cc in Sources */, + 43AA8403194EEB2600A67B56 /* playlist_factory.cc in Sources */, + 43AA8404194EEB2600A67B56 /* playlist_source.cc in Sources */, + 43AA8405194EEB2600A67B56 /* playlist.cc in Sources */, + 43AA8406194EEB2600A67B56 /* plugin_insert.cc in Sources */, + 43AA8407194EEB2600A67B56 /* plugin_manager.cc in Sources */, + 43AA8408194EEB2600A67B56 /* plugin.cc in Sources */, + 43AA8409194EEB2600A67B56 /* port_insert.cc in Sources */, + 43AA840A194EEB2600A67B56 /* port_manager.cc in Sources */, + 43AA840B194EEB2600A67B56 /* port_set.cc in Sources */, + 43AA840C194EEB2600A67B56 /* port.cc in Sources */, + 43AA840D194EEB2600A67B56 /* process_thread.cc in Sources */, + 43AA840E194EEB2600A67B56 /* processor.cc in Sources */, + 43AA840F194EEB2600A67B56 /* progress.cc in Sources */, + 43AA8410194EEB2600A67B56 /* quantize.cc in Sources */, + 43AA8411194EEB2600A67B56 /* rb_effect.cc in Sources */, + 43AA8412194EEB2600A67B56 /* rc_configuration.cc in Sources */, + 43AA8413194EEB2600A67B56 /* rdff.c in Sources */, + 43AA8414194EEB2600A67B56 /* recent_sessions.cc in Sources */, + 43AA8415194EEB2600A67B56 /* region_factory.cc in Sources */, + 43AA8416194EEB2600A67B56 /* region.cc in Sources */, + 43AA8417194EEB2600A67B56 /* resampled_source.cc in Sources */, + 43AA8418194EEB2600A67B56 /* return.cc in Sources */, + 43AA8419194EEB2600A67B56 /* reverse.cc in Sources */, + 43AA841A194EEB2600A67B56 /* revision.cc in Sources */, + 43AA841B194EEB2600A67B56 /* route_graph.cc in Sources */, + 43AA841C194EEB2600A67B56 /* route_group_member.cc in Sources */, + 43AA841D194EEB2600A67B56 /* route_group.cc in Sources */, + 43AA841E194EEB2600A67B56 /* route.cc in Sources */, + 43AA841F194EEB2600A67B56 /* search_paths.cc in Sources */, + 43AA8420194EEB2600A67B56 /* send.cc in Sources */, + 43AA8421194EEB2600A67B56 /* session_butler.cc in Sources */, + 43AA8422194EEB2600A67B56 /* session_click.cc in Sources */, + 43AA8423194EEB2600A67B56 /* session_command.cc in Sources */, + 43AA8424194EEB2600A67B56 /* session_configuration.cc in Sources */, + 43AA8425194EEB2600A67B56 /* session_directory.cc in Sources */, + 43AA8426194EEB2600A67B56 /* session_events.cc in Sources */, + 43AA8427194EEB2600A67B56 /* session_export.cc in Sources */, + 43AA8428194EEB2600A67B56 /* session_handle.cc in Sources */, + 43AA8429194EEB2600A67B56 /* session_ltc.cc in Sources */, + 43AA842A194EEB2600A67B56 /* session_metadata.cc in Sources */, + 43AA842B194EEB2600A67B56 /* session_midi.cc in Sources */, + 43AA842C194EEB2600A67B56 /* session_object.cc in Sources */, + 43AA842D194EEB2600A67B56 /* session_playlists.cc in Sources */, + 43AA842E194EEB2600A67B56 /* session_process.cc in Sources */, + 43AA842F194EEB2600A67B56 /* session_rtevents.cc in Sources */, + 43AA8430194EEB2600A67B56 /* session_state_utils.cc in Sources */, + 43AA8431194EEB2600A67B56 /* session_state.cc in Sources */, + 43AA8432194EEB2600A67B56 /* session_time.cc in Sources */, + 43AA8433194EEB2600A67B56 /* session_transport.cc in Sources */, + 43AA8434194EEB2600A67B56 /* session_vst.cc in Sources */, + 43AA8435194EEB2600A67B56 /* session.cc in Sources */, + 43AA8436194EEB2600A67B56 /* slave.cc in Sources */, + 43AA8437194EEB2600A67B56 /* smf_source.cc in Sources */, + 43AA8438194EEB2600A67B56 /* sndfile_helpers.cc in Sources */, + 43AA8439194EEB2600A67B56 /* sndfileimportable.cc in Sources */, + 43AA843A194EEB2600A67B56 /* sndfilesource.cc in Sources */, + 43AA843B194EEB2600A67B56 /* source_factory.cc in Sources */, + 43AA843C194EEB2600A67B56 /* source.cc in Sources */, + 43AA843D194EEB2600A67B56 /* speakers.cc in Sources */, + 432859F61A10F436006C3E03 /* scene_change.cc in Sources */, + 43AA843E194EEB2600A67B56 /* srcfilesource.cc in Sources */, + 43AA843F194EEB2600A67B56 /* sse_functions_64bit.s in Sources */, + 43AA8440194EEB2600A67B56 /* sse_functions_xmm.cc in Sources */, + 43AA8441194EEB2600A67B56 /* sse_functions.s in Sources */, + 43AA8442194EEB2600A67B56 /* st_pitch.cc in Sources */, + 43AA8443194EEB2600A67B56 /* st_stretch.cc in Sources */, + 43AA8444194EEB2600A67B56 /* strip_silence.cc in Sources */, + 43AA8445194EEB2600A67B56 /* system_exec.cc in Sources */, + 43AA8446194EEB2600A67B56 /* tape_file_matcher.cc in Sources */, + 43AA8447194EEB2600A67B56 /* template_utils.cc in Sources */, + 43AA8448194EEB2600A67B56 /* tempo_map_importer.cc in Sources */, + 43AA8449194EEB2600A67B56 /* tempo.cc in Sources */, + 43AA844A194EEB2600A67B56 /* thread_buffers.cc in Sources */, + 43AA844B194EEB2600A67B56 /* ticker.cc in Sources */, + 43AA844C194EEB2600A67B56 /* track.cc in Sources */, + 43AA844D194EEB2600A67B56 /* transient_detector.cc in Sources */, + 43AA844E194EEB2600A67B56 /* unknown_processor.cc in Sources */, + 43AA844F194EEB2600A67B56 /* uri_map.cc in Sources */, + 43AA8450194EEB2600A67B56 /* user_bundle.cc in Sources */, + 43AA8451194EEB2600A67B56 /* utils.cc in Sources */, + 43AA8452194EEB2600A67B56 /* version.cc in Sources */, + 43AA8453194EEB2600A67B56 /* vst_info_file.cc in Sources */, + 43AA8454194EEB2600A67B56 /* vst_plugin.cc in Sources */, + 43AA8455194EEB2600A67B56 /* vumeterdsp.cc in Sources */, + 43AA8456194EEB2600A67B56 /* windows_vst_plugin.cc in Sources */, + 43AA8457194EEB2600A67B56 /* worker.cc in Sources */, + 43AA84B9194EEB5F00A67B56 /* audio_engine_test.cc in Sources */, + 43AA84BB194EEB5F00A67B56 /* audio_region_read_test.cc in Sources */, + 43AA84BD194EEB5F00A67B56 /* audio_region_test.cc in Sources */, + 432859F51A10F436006C3E03 /* mididm.cc in Sources */, + 43AA84BF194EEB5F00A67B56 /* automation_list_property_test.cc in Sources */, + 43AA84C1194EEB5F00A67B56 /* bbt_test.cc in Sources */, + 43AA84C3194EEB5F00A67B56 /* combine_regions_test.cc in Sources */, + 43AA84C5194EEB5F00A67B56 /* control_surfaces_test.cc in Sources */, + 43AA84C7194EEB5F00A67B56 /* dummy_lxvst.cc in Sources */, + 43AA84C8194EEB5F00A67B56 /* framepos_minus_beats_test.cc in Sources */, + 43AA84CA194EEB5F00A67B56 /* framepos_plus_beats_test.cc in Sources */, + 43AA84CC194EEB5F00A67B56 /* framewalk_to_beats_test.cc in Sources */, + 43AA84CE194EEB5F00A67B56 /* interpolation_test.cc in Sources */, + 43AA84D0194EEB5F00A67B56 /* jack_utils_test.cc in Sources */, + 43AA84D2194EEB5F00A67B56 /* load_session.cc in Sources */, + 43AA84D3194EEB5F00A67B56 /* load_sessions_test.cc in Sources */, + 43AA84D5194EEB5F00A67B56 /* midi_clock_slave_test.cc in Sources */, + 43AA84D7194EEB5F00A67B56 /* mtdm_test.cc in Sources */, + 43AA84D9194EEB5F00A67B56 /* playlist_equivalent_regions_test.cc in Sources */, + 43AA84DB194EEB5F00A67B56 /* playlist_layering_test.cc in Sources */, + 43AA84DD194EEB5F00A67B56 /* playlist_read_test.cc in Sources */, + 43AA84DF194EEB5F00A67B56 /* plugins_test.cc in Sources */, + 43AA84E1194EEB5F00A67B56 /* load_session.cc in Sources */, + 43AA84E2194EEB5F00A67B56 /* lots_of_regions.cc in Sources */, + 432859F41A10F436006C3E03 /* midi_scene_changer.cc in Sources */, + 43AA84E3194EEB5F00A67B56 /* runpc.cc in Sources */, + 43AA84E4194EEB5F00A67B56 /* region_naming_test.cc in Sources */, + 43AA84E6194EEB5F00A67B56 /* resampled_source_test.cc in Sources */, + 43AA84E8194EEB5F00A67B56 /* session_test.cc in Sources */, + 43AA84EA194EEB5F00A67B56 /* tempo_test.cc in Sources */, + 43AA84EC194EEB5F00A67B56 /* test_common.cc in Sources */, + 43AA84EE194EEB5F00A67B56 /* test_needing_session.cc in Sources */, + 43AA84F0194EEB5F00A67B56 /* test_util.cc in Sources */, + 43AA84F2194EEB5F00A67B56 /* testrunner.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 43AA82A0194EEA6F00A67B56 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.8; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 43AA82A1194EEA6F00A67B56 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.8; + SDKROOT = macosx; + }; + name = Release; + }; + 43AA82AB194EEAAF00A67B56 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + EXECUTABLE_PREFIX = lib; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 43AA82AC194EEAAF00A67B56 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + EXECUTABLE_PREFIX = lib; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 43AA8299194EEA6F00A67B56 /* Build configuration list for PBXProject "libardour" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 43AA82A0194EEA6F00A67B56 /* Debug */, + 43AA82A1194EEA6F00A67B56 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 43AA82AA194EEAAF00A67B56 /* Build configuration list for PBXNativeTarget "libardour" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 43AA82AB194EEAAF00A67B56 /* Debug */, + 43AA82AC194EEAAF00A67B56 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 43AA8296194EEA6F00A67B56 /* Project object */; +} diff --git a/libs/ardour/midi_buffer.cc b/libs/ardour/midi_buffer.cc index b1b09e4c98..50ff7b728f 100644 --- a/libs/ardour/midi_buffer.cc +++ b/libs/ardour/midi_buffer.cc @@ -44,7 +44,7 @@ MidiBuffer::MidiBuffer(size_t capacity) MidiBuffer::~MidiBuffer() { - free(_data); + cache_aligned_free(_data); } void @@ -60,7 +60,7 @@ MidiBuffer::resize(size_t size) return; } - free (_data); + cache_aligned_free (_data); cache_aligned_malloc ((void**) &_data, size); diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc index a2a80f780b..229c0ad768 100644 --- a/libs/ardour/midi_diskstream.cc +++ b/libs/ardour/midi_diskstream.cc @@ -784,7 +784,7 @@ MidiDiskstream::read (framepos_t& start, framecnt_t dur, bool reversed) } int -MidiDiskstream::do_refill_with_alloc () +MidiDiskstream::_do_refill_with_alloc (bool /* partial_fill */) { return do_refill(); } diff --git a/libs/ardour/midi_scene_change.cc b/libs/ardour/midi_scene_change.cc index 5e9394d2db..c10ca74904 100644 --- a/libs/ardour/midi_scene_change.cc +++ b/libs/ardour/midi_scene_change.cc @@ -156,3 +156,23 @@ MIDISceneChange::operator==(const MIDISceneChange& other) const _bank == other._bank && _channel == other._channel; } + +void +MIDISceneChange::set_channel (int channel) +{ + _channel = channel; +} + +void +MIDISceneChange::set_program (int program) +{ + _program = program; +} + +void +MIDISceneChange::set_bank (int bank) +{ + _bank = bank; +} + + diff --git a/libs/ardour/midi_scene_changer.cc b/libs/ardour/midi_scene_changer.cc index 8e2347ab2e..75d5581ce5 100644 --- a/libs/ardour/midi_scene_changer.cc +++ b/libs/ardour/midi_scene_changer.cc @@ -96,6 +96,10 @@ MIDISceneChanger::gather (const Locations::LocationList& locations) void MIDISceneChanger::rt_deliver (MidiBuffer& mbuf, framepos_t when, boost::shared_ptr<MIDISceneChange> msc) { + if (!msc->active()) { + return; + } + uint8_t buf[4]; size_t cnt; @@ -121,6 +125,10 @@ MIDISceneChanger::rt_deliver (MidiBuffer& mbuf, framepos_t when, boost::shared_p void MIDISceneChanger::non_rt_deliver (boost::shared_ptr<MIDISceneChange> msc) { + if (!msc->active()) { + return; + } + uint8_t buf[4]; size_t cnt; boost::shared_ptr<AsyncMIDIPort> aport = boost::dynamic_pointer_cast<AsyncMIDIPort>(output_port); @@ -273,19 +281,25 @@ MIDISceneChanger::program_change_input (MIDI::Parser& parser, MIDI::byte program last_program_message_time = time; if (!recording()) { + MIDIInputActivity (); /* EMIT SIGNAL */ - jump_to (input_port->channel (channel)->bank(), program); + + int bank = -1; + if (have_seen_bank_changes) { + bank = input_port->channel (channel)->bank(); + } + + jump_to (bank, program); return; } Locations* locations (_session.locations ()); Location* loc; bool new_mark = false; - framecnt_t slop = (framecnt_t) floor ((Config->get_inter_scene_gap_msecs() / 1000.0) * _session.frame_rate()); /* check for marker at current location */ - loc = locations->mark_at (time, slop); + loc = locations->mark_at (time, Config->get_inter_scene_gap_frames()); if (!loc) { /* create a new marker at the desired position */ @@ -301,12 +315,9 @@ MIDISceneChanger::program_change_input (MIDI::Parser& parser, MIDI::byte program new_mark = true; } - unsigned short bank; - + int bank = -1; if (have_seen_bank_changes) { bank = input_port->channel (channel)->bank(); - } else { - bank = -1; } MIDISceneChange* msc =new MIDISceneChange (channel, bank, program & 0x7f); diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc index 487eb2025c..4883e8a781 100644 --- a/libs/ardour/midi_track.cc +++ b/libs/ardour/midi_track.cc @@ -47,6 +47,7 @@ #include "ardour/parameter_types.h" #include "ardour/port.h" #include "ardour/processor.h" +#include "ardour/profile.h" #include "ardour/session.h" #include "ardour/session_playlists.h" #include "ardour/utils.h" @@ -135,7 +136,11 @@ MidiTrack::set_diskstream (boost::shared_ptr<Diskstream> ds) mds->reset_tracker (); _diskstream->set_track (this); - _diskstream->set_destructive (_mode == Destructive); + if (Profile->get_trx()) { + _diskstream->set_destructive (false); + } else { + _diskstream->set_destructive (_mode == Destructive); + } _diskstream->set_record_enabled (false); _diskstream_data_recorded_connection.disconnect (); diff --git a/libs/ardour/mix.cc b/libs/ardour/mix.cc index adae68ae7f..96ae624487 100644 --- a/libs/ardour/mix.cc +++ b/libs/ardour/mix.cc @@ -136,6 +136,12 @@ default_mix_buffers_no_gain (ARDOUR::Sample * dst, const ARDOUR::Sample * src, p } } +void +default_copy_vector (ARDOUR::Sample * dst, const ARDOUR::Sample * src, pframes_t nframes) +{ + memcpy(dst, src, nframes*sizeof(ARDOUR::Sample)); +} + #if defined (__APPLE__) && defined (BUILD_VECLIB_OPTIMIZATIONS) #include <Accelerate/Accelerate.h> diff --git a/libs/ardour/mtc_slave.cc b/libs/ardour/mtc_slave.cc index 1a1c5f2bec..83d61163c9 100644 --- a/libs/ardour/mtc_slave.cc +++ b/libs/ardour/mtc_slave.cc @@ -213,6 +213,7 @@ MTC_Slave::reset (bool with_position) window_end = 0; transport_direction = 1; current_delta = 0; + ActiveChanged(false); } void @@ -468,6 +469,7 @@ MTC_Slave::update_mtc_time (const MIDI::byte *msg, bool was_full, framepos_t now first_mtc_timestamp = now; init_mtc_dll(mtc_frame, qtr); mtc_frame_dll = mtc_frame; + ActiveChanged (true); // emit signal } current.guard1++; current.position = mtc_frame; @@ -626,6 +628,7 @@ MTC_Slave::speed_and_position (double& speed, framepos_t& pos) session.request_transport_speed (0); engine_dll_initstate = 0; queue_reset (false); + ActiveChanged (false); DEBUG_TRACE (DEBUG::MTC, "MTC not seen for 2 frames - reset pending\n"); return false; } diff --git a/libs/ardour/parameter_descriptor.cc b/libs/ardour/parameter_descriptor.cc index 67ea267bfa..9a6f5506dc 100644 --- a/libs/ardour/parameter_descriptor.cc +++ b/libs/ardour/parameter_descriptor.cc @@ -149,7 +149,7 @@ ParameterDescriptor::update_steps() step = step / logf(30.0f); largestep = largestep / logf(30.0f); } else if (integer_step) { - smallstep = std::max(1.0, rint(smallstep)); + smallstep = 1.0; step = std::max(1.0, rint(step)); largestep = std::max(1.0, rint(largestep)); } diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index 20a2ef0197..8862c633ab 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -1642,6 +1642,8 @@ Playlist::region_bounds_changed (const PropertyChange& what_changed, boost::shar save = true; } + mark_session_dirty (); + return save; } diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 8da0abb00f..b490646ffc 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -1146,6 +1146,15 @@ PluginInsert::set_state(const XMLNode& node, int version) } void +PluginInsert::update_id (PBD::ID id) +{ + set_id (id.to_s()); + for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) { + (*i)->set_insert_id (id); + } +} + +void PluginInsert::set_parameter_state_2X (const XMLNode& node, int version) { XMLNodeList nlist = node.children(); diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc index 37eb61ef3b..04652a36c7 100644 --- a/libs/ardour/plugin_manager.cc +++ b/libs/ardour/plugin_manager.cc @@ -225,6 +225,12 @@ PluginManager::~PluginManager() void PluginManager::refresh (bool cache_only) { + Glib::Threads::Mutex::Lock lm (_lock, Glib::Threads::TRY_LOCK); + + if (!lm.locked()) { + return; + } + DEBUG_TRACE (DEBUG::PluginManager, "PluginManager::refresh\n"); _cancel_scan = false; @@ -236,20 +242,32 @@ PluginManager::refresh (bool cache_only) #endif #ifdef WINDOWS_VST_SUPPORT if (Config->get_use_windows_vst()) { - BootMessage (_("Scanning Windows VST Plugins")); + if (cache_only) { + BootMessage (_("Scanning Windows VST Plugins")); + } else { + BootMessage (_("Discovering Windows VST Plugins")); + } windows_vst_refresh (cache_only); } #endif // WINDOWS_VST_SUPPORT #ifdef LXVST_SUPPORT if(Config->get_use_lxvst()) { - BootMessage (_("Scanning Linux VST Plugins")); + if (cache_only) { + BootMessage (_("Scanning Linux VST Plugins")); + } else { + BootMessage (_("Discovering Linux VST Plugins")); + } lxvst_refresh(cache_only); } #endif //Native linuxVST SUPPORT #ifdef AUDIOUNIT_SUPPORT - BootMessage (_("Scanning AU Plugins")); + if (cache_only) { + BootMessage (_("Scanning AU Plugins")); + } else { + BootMessage (_("Discovering AU Plugins")); + } au_refresh (cache_only); #endif @@ -313,7 +331,7 @@ PluginManager::clear_vst_blacklist () #ifdef WINDOWS_VST_SUPPORT { vector<string> fsi_files; - find_files_matching_regex (fsi_files, Config->get_plugin_path_vst(), "\\.fsb$", true); + find_files_matching_regex (fsi_files, Config->get_plugin_path_vst(), "\\" VST_EXT_BLACKLIST "$", true); for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) { ::g_unlink(i->c_str()); } @@ -323,7 +341,7 @@ PluginManager::clear_vst_blacklist () #ifdef LXVST_SUPPORT { vector<string> fsi_files; - find_files_matching_regex (fsi_files, Config->get_plugin_path_lxvst(), "\\.fsb$", true); + find_files_matching_regex (fsi_files, Config->get_plugin_path_lxvst(), "\\" VST_EXT_BLACKLIST "$", true); for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) { ::g_unlink(i->c_str()); } @@ -335,7 +353,7 @@ PluginManager::clear_vst_blacklist () string personal = get_personal_vst_blacklist_dir(); vector<string> fsi_files; - find_files_matching_regex (fsi_files, personal, "\\.fsb$", /* flat user cache */ false); + find_files_matching_regex (fsi_files, personal, "\\" VST_EXT_BLACKLIST "$", /* flat user cache */ false); for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) { ::g_unlink(i->c_str()); } @@ -639,31 +657,17 @@ void PluginManager::au_refresh (bool cache_only) { DEBUG_TRACE (DEBUG::PluginManager, "AU: refresh\n"); - if (cache_only && !Config->get_discover_audio_units ()) { - return; - } - delete _au_plugin_info; - _au_plugin_info = AUPluginInfo::discover(); - // disable automatic scan in case we crash + // disable automatic discovery in case we crash + bool discover_at_start = Config->get_discover_audio_units (); Config->set_discover_audio_units (false); Config->save_state(); - /* note: AU require a CAComponentDescription pointer provided by the OS. - * Ardour only caches port and i/o config. It can't just 'scan' without - * 'discovering' (like we do for VST). - * - * So in case discovery fails, we assume the worst: the Description - * is broken (malicious plugins) and even a simple 'scan' would always - * crash ardour on startup. Hence we disable Auto-Scan on start. - * - * If the crash happens at any later time (description is available), - * Ardour will blacklist the plugin in question -- unless - * the crash happens during realtime-run. - */ + delete _au_plugin_info; + _au_plugin_info = AUPluginInfo::discover(cache_only && !discover_at_start); - // successful scan re-enabled automatic discovery - Config->set_discover_audio_units (true); + // successful scan re-enabled automatic discovery if it was set + Config->set_discover_audio_units (discover_at_start); Config->save_state(); } @@ -696,7 +700,11 @@ PluginManager::windows_vst_discover_from_path (string path, bool cache_only) vector<string>::iterator x; int ret = 0; - DEBUG_TRACE (DEBUG::PluginManager, string_compose ("detecting Windows VST plugins along %1\n", path)); + DEBUG_TRACE (DEBUG::PluginManager, string_compose ("Discovering Windows VST plugins along %1\n", path)); + + if (Config->get_verbose_plugin_scan()) { + info << string_compose (_("--- Windows VST plugins Scan: %1"), path) << endmsg; + } find_files_matching_filter (plugin_objects, Config->get_plugin_path_vst(), windows_vst_filter, 0, false, true, true); @@ -705,6 +713,10 @@ PluginManager::windows_vst_discover_from_path (string path, bool cache_only) windows_vst_discover (*x, cache_only || cancelled()); } + if (Config->get_verbose_plugin_scan()) { + info << _("--- Windows VST plugins Scan Done") << endmsg; + } + return ret; } @@ -713,12 +725,22 @@ PluginManager::windows_vst_discover (string path, bool cache_only) { DEBUG_TRACE (DEBUG::PluginManager, string_compose ("windows_vst_discover '%1'\n", path)); + if (Config->get_verbose_plugin_scan()) { + info << string_compose (_(" * %1 %2"), path, (cache_only ? _(" (cache only)") : "")) << endmsg; + } + _cancel_timeout = false; vector<VSTInfo*> * finfos = vstfx_get_info_fst (const_cast<char *> (path.c_str()), cache_only ? VST_SCAN_CACHE_ONLY : VST_SCAN_USE_APP); + // TODO get extended error messae from vstfx_get_info_fst() e.g blacklisted, 32/64bit compat, + // .err file scanner output etc. + if (finfos->empty()) { DEBUG_TRACE (DEBUG::PluginManager, string_compose ("Cannot get Windows VST information from '%1'\n", path)); + if (Config->get_verbose_plugin_scan()) { + info << _(" -> Cannot get Windows VST information, plugin ignored.") << endmsg; + } return -1; } @@ -728,7 +750,7 @@ PluginManager::windows_vst_discover (string path, bool cache_only) char buf[32]; if (!finfo->canProcessReplacing) { - warning << string_compose (_("VST plugin %1 does not support processReplacing, and so cannot be used in %2 at this time"), + warning << string_compose (_("VST plugin %1 does not support processReplacing, and cannot be used in %2 at this time"), finfo->name, PROGRAM_NAME) << endl; continue; @@ -762,8 +784,8 @@ PluginManager::windows_vst_discover (string path, bool cache_only) if (!_windows_vst_plugin_info->empty()) { for (PluginInfoList::iterator i =_windows_vst_plugin_info->begin(); i != _windows_vst_plugin_info->end(); ++i) { - if ((info->type == (*i)->type)&&(info->unique_id == (*i)->unique_id)) { - warning << "Ignoring duplicate Windows VST plugin " << info->name << "\n"; + if ((info->type == (*i)->type) && (info->unique_id == (*i)->unique_id)) { + warning << string_compose (_("Ignoring duplicate Windows VST plugin \"%1\""), info->name) << endmsg; duplicate = true; break; } @@ -774,6 +796,9 @@ PluginManager::windows_vst_discover (string path, bool cache_only) DEBUG_TRACE (DEBUG::PluginManager, string_compose ("Windows VST plugin ID '%1'\n", info->unique_id)); _windows_vst_plugin_info->push_back (info); discovered++; + if (Config->get_verbose_plugin_scan()) { + PBD::info << string_compose (_(" -> OK. (VST Plugin \"%1\" added)."), info->name) << endmsg; + } } } diff --git a/libs/ardour/port.cc b/libs/ardour/port.cc index 3252134ac3..70c6a604d7 100644 --- a/libs/ardour/port.cc +++ b/libs/ardour/port.cc @@ -165,7 +165,12 @@ Port::get_connections (std::vector<std::string> & c) const return c.size(); } - return port_engine.get_connections (_port_handle, c); + if (_port_handle) { + return port_engine.get_connections (_port_handle, c); + return c.size(); + } + + return 0; } int diff --git a/libs/ardour/port_insert.cc b/libs/ardour/port_insert.cc index fa09ea05ac..04796993e4 100644 --- a/libs/ardour/port_insert.cc +++ b/libs/ardour/port_insert.cc @@ -60,6 +60,13 @@ PortInsert::~PortInsert () } void +PortInsert::set_pre_fader (bool p) +{ + Processor::set_pre_fader (p); + _out->set_pre_fader (p); +} + +void PortInsert::start_latency_detection () { delete _mtdm; diff --git a/libs/ardour/port_manager.cc b/libs/ardour/port_manager.cc index f2f2334c27..a1a4397551 100644 --- a/libs/ardour/port_manager.cc +++ b/libs/ardour/port_manager.cc @@ -26,6 +26,7 @@ #include "ardour/midi_port.h" #include "ardour/midiport_manager.h" #include "ardour/port_manager.h" +#include "ardour/profile.h" #include "i18n.h" @@ -489,12 +490,14 @@ PortManager::reconnect_ports () { boost::shared_ptr<Ports> p = ports.reader (); - /* re-establish connections */ - - DEBUG_TRACE (DEBUG::Ports, string_compose ("reconnect %1 ports\n", p->size())); - - for (Ports::iterator i = p->begin(); i != p->end(); ++i) { - i->second->reconnect (); + if (!Profile->get_trx()) { + /* re-establish connections */ + + DEBUG_TRACE (DEBUG::Ports, string_compose ("reconnect %1 ports\n", p->size())); + + for (Ports::iterator i = p->begin(); i != p->end(); ++i) { + i->second->reconnect (); + } } return 0; diff --git a/libs/ardour/quantize.cc b/libs/ardour/quantize.cc index 6604469007..bcce41c96d 100644 --- a/libs/ardour/quantize.cc +++ b/libs/ardour/quantize.cc @@ -52,6 +52,63 @@ Quantize::~Quantize () { } +static double +swing_position (double pos, double grid, double swing, double offset) +{ + /* beats start out numbered at zero. + * + * every other position on the start-quantize-grid is + * optionally swung, meaning that its position is moved + * somewhere between its natural position and 2/3 of + * the way to the next start-quantize-grid position. + * + * so, if the _start grid is 0.5, the beat at 0 isn't + * swung, but something at 0.5 is, the beat at 1 isn't + * swung, but something at 1.5 is. + * + * if the start grid is 1.0, the beat at 0 isn't swung, + * but the beat at 1.0 is. the beat at 2.0 isn't swung, + * but the beat at 3.0 is. and so on. + * + * so the criterion for a position being swung is + * whether or not ((possible_grid_position / grid) % 2) != 0 + */ + + const bool swing_quantize_grid_position = pos > 0.0 && fmod ((pos/grid), 2.0) != 0; + const bool swing_previous_grid_position = pos > grid && fmod ((pos-grid)/grid, 2.0) != 0; + + /* one of these will not be subject to swing */ + + double swung_pos = pos; + double swung_previous_grid_position; + + if (pos > grid) { + swung_previous_grid_position = pos - grid; + } else { + swung_previous_grid_position = 0.0; + } + + if (swing_previous_grid_position) { + swung_previous_grid_position = swung_previous_grid_position + (2.0/3.0 * swing * grid); + } + + if (swing_quantize_grid_position) { + swung_pos = swung_pos + (2.0/3.0 * swing * grid); + } + + /* now correct for start-of-model offset */ + + pos += offset; + + if (fabs (pos - swung_pos) > fabs (pos - swung_previous_grid_position)) { + pos = swung_previous_grid_position; + } else { + pos = swung_pos; + } + + return pos; +} + Command* Quantize::operator () (boost::shared_ptr<MidiModel> model, Evoral::Beats position, @@ -66,47 +123,38 @@ Quantize::operator () (boost::shared_ptr<MidiModel> model, const double round_pos = round(position.to_double() / _start_grid) * _start_grid; const double offset = round_pos - position.to_double(); - bool even; MidiModel::NoteDiffCommand* cmd = new MidiModel::NoteDiffCommand (model, "quantize"); for (std::vector<Evoral::Sequence<Evoral::Beats>::Notes>::iterator s = seqs.begin(); s != seqs.end(); ++s) { - even = false; - - /* TODO 'swing' probably requires a 2nd iteration: - * first quantize notes to the grid, then apply beat shift - */ for (Evoral::Sequence<MidiModel::TimeType>::Notes::iterator i = (*s).begin(); i != (*s).end(); ++i) { - double new_start = round (((*i)->time().to_double() - offset) / _start_grid) * _start_grid + offset; - double new_end = round (((*i)->end_time().to_double() - offset) / _end_grid) * _end_grid + offset; - - if (_swing > 0.0 && !even) { - - double next_grid = new_start + _start_grid; + /* compute new start + end points WITHOUT the offset + * caused by the start of the model (see above). + * + * these versions of new_start and new_end are + * guaranteed to precisely align with the quantize grid(s). + */ + + double new_start = round (((*i)->time().to_double() - offset) / _start_grid) * _start_grid; + double new_end = round (((*i)->end_time().to_double() - offset) / _end_grid) * _end_grid; - /* find a spot 2/3 (* swing factor) of the way between the grid point - we would put this note at, and the nominal position of the next note. - */ + if (_swing) { - new_start = new_start + (2.0/3.0 * _swing * (next_grid - new_start)); - new_end = new_end + (2.0/3.0 * _swing * (next_grid - new_start)); + new_start = swing_position (new_start, _start_grid, _swing, offset); + new_end = swing_position (new_end, _end_grid, _swing, offset); + + } else { - } else if (_swing < 0.0 && !even) { - - double prev_grid = new_start - _start_grid; - - /* find a spot 2/3 (* swing factor) of the way between the grid point - we would put this note at, and the nominal position of the previous note. - */ - - new_start = new_start - (2.0/3.0 * _swing * (new_start - prev_grid)); - new_end = new_end - (2.0/3.0 * _swing * (new_start - prev_grid)); + /* now correct for start-of-model offset */ + new_start += offset; + new_end += offset; } - + double delta = new_start - (*i)->time().to_double(); + if (fabs (delta) >= _threshold) { if (_snap_start) { delta *= _strength; @@ -128,8 +176,6 @@ Quantize::operator () (boost::shared_ptr<MidiModel> model, cmd->change ((*i), MidiModel::NoteDiffCommand::Length, new_dur); } } - - even = !even; } } diff --git a/libs/ardour/rc_configuration.cc b/libs/ardour/rc_configuration.cc index 9fdd6aa1ad..452d8eb1a8 100644 --- a/libs/ardour/rc_configuration.cc +++ b/libs/ardour/rc_configuration.cc @@ -26,6 +26,7 @@ #include "pbd/xml++.h" #include "pbd/file_utils.h" +#include "pbd/replace_all.h" #include "ardour/audioengine.h" #include "ardour/control_protocol_manager.h" diff --git a/libs/ardour/recent_sessions.cc b/libs/ardour/recent_sessions.cc index 7c2297448b..7458c32ff8 100644 --- a/libs/ardour/recent_sessions.cc +++ b/libs/ardour/recent_sessions.cc @@ -39,6 +39,7 @@ using namespace PBD; namespace { const char * const recent_file_name = "recent"; + const char * const recent_templates_file_name = "recent_templates"; } // anonymous @@ -85,6 +86,38 @@ ARDOUR::read_recent_sessions (RecentSessions& rs) } int +ARDOUR::read_recent_templates (std::deque<std::string>& rt) +{ + std::string path = Glib::build_filename (user_config_directory(), recent_templates_file_name); + + ifstream recent (path.c_str()); + + if (!recent) { + if (errno != ENOENT) { + error << string_compose (_("cannot open recent template file %1 (%2)"), path, strerror (errno)) << endmsg; + return -1; + } else { + return 1; + } + } + + while (true) { + + std::string session_template_full_name; + + getline(recent, session_template_full_name); + + if (!recent.good()) { + break; + } + + rt.push_back (session_template_full_name); + } + + return 0; +} + +int ARDOUR::write_recent_sessions (RecentSessions& rs) { std::string path = Glib::build_filename (user_config_directory(), recent_file_name); @@ -103,6 +136,24 @@ ARDOUR::write_recent_sessions (RecentSessions& rs) } int +ARDOUR::write_recent_templates (std::deque<std::string>& rt) +{ + std::string path = Glib::build_filename (user_config_directory(), recent_templates_file_name); + + std::ofstream recent (path.c_str()); + + if (!recent) { + return -1; + } + + for (std::deque<std::string>::const_iterator i = rt.begin(); i != rt.end(); ++i) { + recent << (*i) << std::endl; + } + + return 0; +} + +int ARDOUR::store_recent_sessions (string name, string path) { RecentSessions rs; @@ -130,6 +181,28 @@ ARDOUR::store_recent_sessions (string name, string path) } int +ARDOUR::store_recent_templates (const std::string& session_template_full_name) +{ + std::deque<std::string> rt; + + if (ARDOUR::read_recent_templates (rt) < 0) { + return -1; + } + + rt.erase(remove (rt.begin(), rt.end(), session_template_full_name), rt.end()); + + rt.push_front (session_template_full_name); + + uint32_t max_recent_templates = Config->get_max_recent_templates (); + + if (rt.size() > max_recent_templates) { + rt.erase( rt.begin() + max_recent_templates, rt.end ()); + } + + return ARDOUR::write_recent_templates (rt); +} + +int ARDOUR::remove_recent_sessions (const string& path) { RecentSessions rs; diff --git a/libs/ardour/reverse.cc b/libs/ardour/reverse.cc index 06fafb0ca4..b2189cf67e 100644 --- a/libs/ardour/reverse.cc +++ b/libs/ardour/reverse.cc @@ -56,7 +56,7 @@ Reverse::run (boost::shared_ptr<Region> r, Progress*) /* create new sources */ - if (make_new_sources (region, nsrcs)) { + if (make_new_sources (region, nsrcs, "", false)) { goto out; } diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index be7174f240..34d92b7a7e 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -60,6 +60,7 @@ #include "ardour/port.h" #include "ardour/port_insert.h" #include "ardour/processor.h" +#include "ardour/profile.h" #include "ardour/route.h" #include "ardour/route_group.h" #include "ardour/send.h" @@ -96,6 +97,7 @@ Route::Route (Session& sess, string name, Flag flg, DataType default_type) , _soloed_by_others_upstream (0) , _soloed_by_others_downstream (0) , _solo_isolated (0) + , _solo_isolated_by_upstream (0) , _denormal_protection (false) , _recordable (true) , _silent (false) @@ -112,15 +114,22 @@ Route::Route (Session& sess, string name, Flag flg, DataType default_type) , _initial_io_setup (false) , _custom_meter_position_noted (false) { - if (is_master()) { - _meter_type = MeterK20; - } processor_max_streams.reset(); } int Route::init () { + /* set default meter type */ + if (is_master()) { + _meter_type = Config->get_meter_type_master (); + } + else if (dynamic_cast<Track*>(this)) { + _meter_type = Config->get_meter_type_track (); + } else { + _meter_type = Config->get_meter_type_bus (); + } + /* add standard controls */ _solo_control.reset (new SoloControllable (X_("solo"), shared_from_this ())); @@ -833,6 +842,14 @@ Route::set_solo (bool yn, void *src) solo_changed (true, src); /* EMIT SIGNAL */ _solo_control->Changed (); /* EMIT SIGNAL */ } + + /* XXX TRACKS DEVELOPERS: THIS LOGIC SUGGESTS THAT YOU ARE NOT AWARE OF + Config->get_solo_mute_overrride(). + */ + + if (yn && Profile->get_trx()) { + set_mute (false, src); + } } void @@ -936,6 +953,28 @@ Route::set_mute_master_solo () } void +Route::mod_solo_isolated_by_upstream (bool yn, void* src) +{ + bool old = solo_isolated (); + + if (!yn) { + if (_solo_isolated_by_upstream >= 1) { + _solo_isolated_by_upstream--; + } else { + _solo_isolated_by_upstream = 0; + } + } else { + _solo_isolated_by_upstream++; + } + + if (solo_isolated() != old) { + /* solo isolated status changed */ + _mute_master->set_solo_ignore (yn); + solo_isolated_changed (src); + } +} + +void Route::set_solo_isolated (bool yn, void *src) { if (is_master() || is_monitor() || is_auditioner()) { @@ -947,25 +986,6 @@ Route::set_solo_isolated (bool yn, void *src) return; } - /* forward propagate solo-isolate status to everything fed by this route, but not those via sends only */ - - boost::shared_ptr<RouteList> routes = _session.get_routes (); - for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) { - - if ((*i).get() == this || (*i)->is_master() || (*i)->is_monitor() || (*i)->is_auditioner()) { - continue; - } - - bool sends_only; - bool does_feed = direct_feeds_according_to_graph (*i, &sends_only); // we will recurse anyway, so don't use ::feeds() - - if (does_feed && !sends_only) { - (*i)->set_solo_isolated (yn, (*i)->route_group()); - } - } - - /* XXX should we back-propagate as well? (April 2010: myself and chris goddard think not) */ - bool changed = false; if (yn) { @@ -984,15 +1004,37 @@ Route::set_solo_isolated (bool yn, void *src) } } - if (changed) { - solo_isolated_changed (src); + + if (!changed) { + return; } + + /* forward propagate solo-isolate status to everything fed by this route, but not those via sends only */ + + boost::shared_ptr<RouteList> routes = _session.get_routes (); + for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) { + + if ((*i).get() == this || (*i)->is_master() || (*i)->is_monitor() || (*i)->is_auditioner()) { + continue; + } + + bool sends_only; + bool does_feed = feeds (*i, &sends_only); + + if (does_feed && !sends_only) { + (*i)->mod_solo_isolated_by_upstream (yn, src); + } + } + + /* XXX should we back-propagate as well? (April 2010: myself and chris goddard think not) */ + + solo_isolated_changed (src); } bool Route::solo_isolated () const { - return _solo_isolated > 0; + return (_solo_isolated > 0) || (_solo_isolated_by_upstream > 0); } void @@ -1199,7 +1241,7 @@ Route::add_processor (boost::shared_ptr<Processor> processor, boost::shared_ptr< } - if (activation_allowed && !_session.get_disable_all_loaded_plugins()) { + if (activation_allowed && (!_session.get_disable_all_loaded_plugins () || !processor->display_to_user ())) { processor->activate (); } @@ -1279,7 +1321,7 @@ Route::add_processor_from_xml_2X (const XMLNode& node, int version) //A2 uses the "active" flag in the toplevel redirect node, not in the child plugin/IO if (i != children.end()) { if ((prop = (*i)->property (X_("active"))) != 0) { - if ( string_is_affirmative (prop->value()) && !_session.get_disable_all_loaded_plugins() ) + if ( string_is_affirmative (prop->value()) && (!_session.get_disable_all_loaded_plugins () || !processor->display_to_user () ) ) processor->activate(); else processor->deactivate(); @@ -4159,7 +4201,7 @@ Route::set_processor_positions () bool had_amp = false; for (ProcessorList::const_iterator i = _processors.begin(); i != _processors.end(); ++i) { (*i)->set_pre_fader (!had_amp); - if (boost::dynamic_pointer_cast<Amp> (*i)) { + if (*i == _amp) { had_amp = true; } } @@ -4354,7 +4396,7 @@ Route::setup_invisible_processors () /* find the amp */ ProcessorList::iterator amp = new_processors.begin (); - while (amp != new_processors.end() && boost::dynamic_pointer_cast<Amp> (*amp) == 0) { + while (amp != new_processors.end() && *amp != _amp) { ++amp; } @@ -4487,6 +4529,12 @@ Route::setup_invisible_processors () _processors = new_processors; + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { + if (!(*i)->display_to_user () && !(*i)->active ()) { + (*i)->activate (); + } + } + DEBUG_TRACE (DEBUG::Processors, string_compose ("%1: setup_invisible_processors\n", _name)); for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { DEBUG_TRACE (DEBUG::Processors, string_compose ("\t%1\n", (*i)->name ())); diff --git a/libs/ardour/scene_change.cc b/libs/ardour/scene_change.cc index 6560a7ca2f..322b37a195 100644 --- a/libs/ardour/scene_change.cc +++ b/libs/ardour/scene_change.cc @@ -41,6 +41,7 @@ SceneChange::factory (const XMLNode& node, int version) SceneChange::SceneChange () : _color (out_of_bound_color) + , _active (true) { } @@ -56,3 +57,12 @@ SceneChange::color() const { return _color; } + +void +SceneChange::set_active (bool yn) +{ + if (_active != yn) { + _active = yn; + ActiveChanged (); /* EMIT SIGNAL */ + } +} diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 71ad0bd705..9ef3633819 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -46,6 +46,7 @@ #include "pbd/search_path.h" #include "pbd/stacktrace.h" #include "pbd/stl_delete.h" +#include "pbd/replace_all.h" #include "pbd/unwind.h" #include "ardour/amp.h" @@ -67,6 +68,9 @@ #include "ardour/data_type.h" #include "ardour/debug.h" #include "ardour/directory_names.h" +#ifdef USE_TRACKS_CODE_FEATURES +#include "ardour/engine_state_controller.h" +#endif #include "ardour/filename_extensions.h" #include "ardour/graph.h" #include "ardour/midiport_manager.h" @@ -78,6 +82,7 @@ #include "ardour/plugin.h" #include "ardour/plugin_insert.h" #include "ardour/process_thread.h" +#include "ardour/profile.h" #include "ardour/rc_configuration.h" #include "ardour/recent_sessions.h" #include "ardour/region.h" @@ -134,6 +139,13 @@ const framecnt_t Session::bounce_chunk_size = 65536; static void clean_up_session_event (SessionEvent* ev) { delete ev; } const SessionEvent::RTeventCallback Session::rt_cleanup (clean_up_session_event); +// seconds should be added after the region exceeds end marker +#ifdef USE_TRACKS_CODE_FEATURES +const uint32_t Session::session_end_shift = 5; +#else +const uint32_t Session::session_end_shift = 0; +#endif + /** @param snapshot_name Snapshot name, without .ardour suffix */ Session::Session (AudioEngine &eng, const string& fullpath, @@ -179,6 +191,8 @@ Session::Session (AudioEngine &eng, , average_dir (0) , have_first_delta_accumulator (false) , _slave_state (Stopped) + , _mtc_active (false) + , _ltc_active (false) , post_export_sync (false) , post_export_position (0) , _exporting (false) @@ -243,6 +257,8 @@ Session::Session (AudioEngine &eng, , _all_route_group (new RouteGroup (*this, "all")) , routes (new RouteList) , _adding_routes_in_progress (false) + , _reconnecting_routes_in_progress (false) + , _route_deletion_in_progress (false) , destructive_index (0) , _track_number_decimals(1) , solo_update_disabled (false) @@ -263,11 +279,14 @@ Session::Session (AudioEngine &eng, , click_emphasis_length (0) , _clicks_cleared (0) , _play_range (false) + , _range_selection (-1,-1) + , _object_selection (-1,-1) , main_outs (0) , first_file_data_format_reset (true) , first_file_header_format_reset (true) , have_looped (false) , _have_rec_enabled_track (false) + , _have_rec_disabled_track (true) , _step_editors (0) , _suspend_timecode_transmission (0) , _speakers (new Speakers) @@ -285,6 +304,10 @@ Session::Session (AudioEngine &eng, pre_engine_init (fullpath); if (_is_new) { + +#ifdef USE_TRACKS_CODE_FEATURES + sr = EngineStateController::instance()->get_current_sample_rate(); +#endif if (ensure_engine (sr)) { destroy (); throw failed_constructor (); @@ -306,8 +329,11 @@ Session::Session (AudioEngine &eng, * of a template. */ - if (!mix_template.empty() && load_state (_current_snapshot_name)) { - throw failed_constructor (); + if (!mix_template.empty()) { + if (load_state (_current_snapshot_name)) { + throw failed_constructor (); + } + store_recent_templates (mix_template); } /* load default session properties - if any */ @@ -358,8 +384,6 @@ Session::Session (AudioEngine &eng, StartTimeChanged.connect_same_thread (*this, boost::bind (&Session::start_time_changed, this, _1)); EndTimeChanged.connect_same_thread (*this, boost::bind (&Session::end_time_changed, this, _1)); - _is_new = false; - emit_thread_start (); /* hook us up to the engine since we are now completely constructed */ @@ -369,8 +393,53 @@ Session::Session (AudioEngine &eng, _engine.set_session (this); _engine.reset_timebase (); - BootMessage (_("Session loading complete")); +#ifdef USE_TRACKS_CODE_FEATURES + + EngineStateController::instance()->set_session(this); + + if (_is_new ) { + if ( ARDOUR::Profile->get_trx () ) { + + /* Waves Tracks: fill session with tracks basing on the amount of inputs. + * each available input must have corresponding track when session starts. + */ + + uint32_t how_many (0); + + std::vector<std::string> inputs; + EngineStateController::instance()->get_physical_audio_inputs(inputs); + + how_many = inputs.size(); + + list<boost::shared_ptr<AudioTrack> > tracks; + + // Track names after driver + if (Config->get_tracks_auto_naming() == NameAfterDriver) { + string track_name = ""; + for (std::vector<string>::size_type i = 0; i < inputs.size(); ++i) { + string track_name; + track_name = inputs[i]; + replace_all (track_name, "system:capture", ""); + + list<boost::shared_ptr<AudioTrack> > single_track = new_audio_track (1, 1, Normal, 0, 1, track_name); + tracks.insert(tracks.begin(), single_track.front()); + } + } else { // Default track names + tracks = new_audio_track (1, 1, Normal, 0, how_many, string()); + } + + if (tracks.size() != how_many) { + destroy (); + throw failed_constructor (); + } + } + } +#endif + + _is_new = false; + session_loaded (); + BootMessage (_("Session loading complete")); } Session::~Session () @@ -479,6 +548,10 @@ Session::destroy () _engine.remove_session (); +#ifdef USE_TRACKS_CODE_FEATURES + EngineStateController::instance()->remove_session(); +#endif + /* deregister all ports - there will be no process or any other * callbacks from the engine any more. */ @@ -846,7 +919,13 @@ Session::auto_connect_master_bus () if (!_master_out || !Config->get_auto_connect_standard_busses() || _monitor_out) { return; } - + + // Waves Tracks: Do not connect master bas for Tracks if AutoConnectMaster option is not set + // In this case it means "Multi Out" output mode + if (ARDOUR::Profile->get_trx() && !(Config->get_output_auto_connect() & AutoConnectMaster) ) { + return; + } + /* if requested auto-connect the outputs to the first N physical ports. */ @@ -877,7 +956,7 @@ Session::auto_connect_master_bus () void Session::remove_monitor_section () { - if (!_monitor_out) { + if (!_monitor_out || Profile->get_trx()) { return; } @@ -931,7 +1010,7 @@ Session::add_monitor_section () { RouteList rl; - if (_monitor_out || !_master_out) { + if (_monitor_out || !_master_out || Profile->get_trx()) { return; } @@ -1079,7 +1158,7 @@ Session::reset_monitor_section () { /* Process lock should be held by the caller.*/ - if (!_monitor_out) { + if (!_monitor_out || Profile->get_trx()) { return; } @@ -1378,6 +1457,19 @@ Session::auto_loop_changed (Location* location) clear_events (SessionEvent::AutoLoop); } + /* possibly move playhead if not rolling; if we are rolling we'll move + to the loop start on stop if that is appropriate. + */ + + framepos_t pos; + + if (!transport_rolling() && select_playhead_priority_target (pos)) { + if (pos == location->start()) { + request_locate (pos); + } + } + + last_loopend = location->end(); set_dirty (); } @@ -1472,9 +1564,21 @@ Session::set_auto_loop_location (Location* location) location->StartChanged.connect_same_thread (loop_connections, boost::bind (&Session::auto_loop_changed, this, location)); location->EndChanged.connect_same_thread (loop_connections, boost::bind (&Session::auto_loop_changed, this, location)); location->Changed.connect_same_thread (loop_connections, boost::bind (&Session::auto_loop_changed, this, location)); + location->FlagsChanged.connect_same_thread (loop_connections, boost::bind (&Session::auto_loop_changed, this, location)); location->set_auto_loop (true, this); + if (Config->get_loop_is_mode() && play_loop && Config->get_seamless_loop()) { + // set all tracks to use internal looping + boost::shared_ptr<RouteList> rl = routes.reader (); + for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) { + boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i); + if (tr && !tr->hidden()) { + tr->set_loop (location); + } + } + } + /* take care of our stuff first */ auto_loop_changed (location); @@ -1485,12 +1589,6 @@ Session::set_auto_loop_location (Location* location) } void -Session::update_loop (Location*) -{ - set_dirty (); -} - -void Session::update_marks (Location*) { set_dirty (); @@ -1499,10 +1597,10 @@ Session::update_marks (Location*) void Session::update_skips (Location* loc, bool consolidate) { - if (_ignore_skips_updates) { - return; - } - + if (_ignore_skips_updates) { + return; + } + Locations::LocationList skips; if (consolidate) { @@ -1601,6 +1699,15 @@ Session::location_added (Location *location) _session_range_location = location; } + if (location->is_mark()) { + /* listen for per-location signals that require us to do any * global updates for marks */ + + location->StartChanged.connect_same_thread (skip_update_connections, boost::bind (&Session::update_marks, this, location)); + location->EndChanged.connect_same_thread (skip_update_connections, boost::bind (&Session::update_marks, this, location)); + location->Changed.connect_same_thread (skip_update_connections, boost::bind (&Session::update_marks, this, location)); + location->FlagsChanged.connect_same_thread (skip_update_connections, boost::bind (&Session::update_marks, this, location)); + } + if (location->is_skip()) { /* listen for per-location signals that require us to update skip-locate events */ @@ -1611,7 +1718,7 @@ Session::location_added (Location *location) update_skips (location, true); } - + set_dirty (); } @@ -1654,10 +1761,15 @@ Session::_locations_changed (const Locations::LocationList& locations) We might be re-adding a location here but it doesn't actually matter for all the locations that the Session takes an interest in. */ - - for (Locations::LocationList::const_iterator i = locations.begin(); i != locations.end(); ++i) { - location_added (*i); - } + + { + PBD::Unwinder<bool> protect_ignore_skip_updates (_ignore_skips_updates, true); + for (Locations::LocationList::const_iterator i = locations.begin(); i != locations.end(); ++i) { + location_added (*i); + } + } + + update_skips (NULL, false); } void @@ -1748,6 +1860,11 @@ Session::maybe_enable_record () save_state ("", true); + if (Config->get_loop_is_mode()) { + /* makes no sense to use loop play as mode when recording */ + request_play_loop (false); + } + if (_transport_speed) { if (!config.get_punch_in()) { enable_record (); @@ -1835,7 +1952,8 @@ Session::set_frame_rate (framecnt_t frames_per_second) sync_time_vars(); clear_clicks (); - + reset_write_sources (false); + // XXX we need some equivalent to this, somehow // SndFileSource::setup_standard_crossfades (frames_per_second); @@ -2073,16 +2191,16 @@ Session::resort_routes_using (boost::shared_ptr<RouteList> r) * and \a id do not reflect a free route name. */ bool -Session::find_route_name (string const & base, uint32_t& id, char* name, size_t name_len, bool definitely_add_number) +Session::find_route_name (string const & base, uint32_t& id, string& name, bool definitely_add_number) { if (!definitely_add_number && route_by_name (base) == 0) { /* juse use the base */ - snprintf (name, name_len, "%s", base.c_str()); + name = base; return true; } do { - snprintf (name, name_len, "%s %" PRIu32, base.c_str(), id); + name = string_compose ("%1 %2", base, id); if (route_by_name (name) == 0) { return true; @@ -2113,6 +2231,25 @@ Session::count_existing_track_channels (ChanCount& in, ChanCount& out) } } +string +Session::default_track_name_pattern (DataType t) +{ + switch (t) { + case DataType::AUDIO: + if (Profile->get_trx()) { + return _("Track "); + } else { + return _("Audio "); + } + break; + + case DataType::MIDI: + return _("MIDI "); + } + + return ""; +} + /** Caller must not hold process lock * @param name_template string to use for the start of the name, or "" to use "MIDI". * @param instrument plugin info for the instrument to insert pre-fader, if any @@ -2121,16 +2258,17 @@ list<boost::shared_ptr<MidiTrack> > Session::new_midi_track (const ChanCount& input, const ChanCount& output, boost::shared_ptr<PluginInfo> instrument, TrackMode mode, RouteGroup* route_group, uint32_t how_many, string name_template) { - char track_name[32]; + string track_name; uint32_t track_id = 0; string port; RouteList new_routes; list<boost::shared_ptr<MidiTrack> > ret; - bool const use_number = (how_many != 1) || name_template.empty () || name_template == _("MIDI"); + const string name_pattern = default_track_name_pattern (DataType::MIDI); + bool const use_number = (how_many != 1) || name_template.empty () || (name_template == name_pattern); while (how_many) { - if (!find_route_name (name_template.empty() ? _("MIDI") : name_template, ++track_id, track_name, sizeof(track_name), use_number)) { + if (!find_route_name (name_template.empty() ? _("MIDI") : name_template, ++track_id, track_name, use_number)) { error << "cannot find name for new midi track" << endmsg; goto failed; } @@ -2176,6 +2314,8 @@ Session::new_midi_track (const ChanCount& input, const ChanCount& output, boost: new_routes.push_back (track); ret.push_back (track); + + RouteAddedOrRemoved (true); /* EMIT SIGNAL */ } catch (failed_constructor &err) { @@ -2195,7 +2335,11 @@ Session::new_midi_track (const ChanCount& input, const ChanCount& output, boost: failed: if (!new_routes.empty()) { StateProtector sp (this); - add_routes (new_routes, true, true, true); + if (Profile->get_trx()) { + add_routes (new_routes, false, false, false); + } else { + add_routes (new_routes, true, true, false); + } if (instrument) { for (RouteList::iterator r = new_routes.begin(); r != new_routes.end(); ++r) { @@ -2325,6 +2469,17 @@ Session::auto_connect_route (boost::shared_ptr<Route> route, ChanCount& existing for (uint32_t i = output_start.get(*t); i < route->n_outputs().get(*t); ++i) { string port; + /* Waves Tracks: + * do not create new connections if we reached the limit of physical outputs + * in Multi Out mode + */ + + if (!(Config->get_output_auto_connect() & AutoConnectMaster) && + ARDOUR::Profile->get_trx () && + existing_outputs.get(*t) == nphysical_out ) { + break; + } + if ((*t) == DataType::MIDI && (Config->get_output_auto_connect() & AutoConnectPhysical)) { port = physoutputs[(out_offset.get(*t) + i) % nphysical_out]; } else if ((*t) == DataType::AUDIO && (Config->get_output_auto_connect() & AutoConnectMaster)) { @@ -2350,13 +2505,289 @@ Session::auto_connect_route (boost::shared_ptr<Route> route, ChanCount& existing } } +#ifdef USE_TRACKS_CODE_FEATURES + +static bool +compare_routes_by_remote_id (const boost::shared_ptr<Route>& route1, const boost::shared_ptr<Route>& route2) +{ + return route1->remote_control_id() < route2->remote_control_id(); +} + void Session::reconnect_existing_routes (bool withLock, bool reconnect_master, bool reconnect_inputs, bool reconnect_outputs) { - /* TRX does stuff here, ardour does not (but probably should). This is called after an engine reset (in particular). - */ + // it is not allowed to perform connection + if (!IO::connecting_legal) { + return; + } + + // if we are deleting routes we will call this once at the end + if (_route_deletion_in_progress) { + return; + } + + Glib::Threads::Mutex::Lock lm (AudioEngine::instance()->process_lock (), Glib::Threads::NOT_LOCK); + + if (withLock) { + lm.acquire (); + } + + // We need to disconnect the route's inputs and outputs first + // basing on autoconnect configuration + bool reconnectIputs = !(Config->get_input_auto_connect() & ManualConnect) && reconnect_inputs; + bool reconnectOutputs = !(Config->get_output_auto_connect() & ManualConnect) && reconnect_outputs; + + ChanCount existing_inputs; + ChanCount existing_outputs; + count_existing_track_channels (existing_inputs, existing_outputs); + + //ChanCount inputs = ChanCount::ZERO; + //ChanCount outputs = ChanCount::ZERO; + + RouteList existing_routes = *routes.reader (); + existing_routes.sort (compare_routes_by_remote_id); + + { + PBD::Unwinder<bool> protect_ignore_changes (_reconnecting_routes_in_progress, true); + + vector<string> physinputs; + vector<string> physoutputs; + + EngineStateController::instance()->get_physical_audio_outputs(physoutputs); + EngineStateController::instance()->get_physical_audio_inputs(physinputs); + + uint32_t input_n = 0; + uint32_t output_n = 0; + RouteList::iterator rIter = existing_routes.begin(); + const AutoConnectOption current_input_auto_connection (Config->get_input_auto_connect()); + const AutoConnectOption current_output_auto_connection (Config->get_output_auto_connect()); + for (; rIter != existing_routes.end(); ++rIter) { + if (*rIter == _master_out || *rIter == _monitor_out ) { + continue; + } + + if (current_output_auto_connection == AutoConnectPhysical) { + (*rIter)->amp()->deactivate(); + } else if (current_output_auto_connection == AutoConnectMaster) { + (*rIter)->amp()->activate(); + } + + if (reconnectIputs) { + (*rIter)->input()->disconnect (this); //GZ: check this; could be heavy + + for (uint32_t route_input_n = 0; route_input_n < (*rIter)->n_inputs().get(DataType::AUDIO); ++route_input_n) { + + if (current_input_auto_connection & AutoConnectPhysical) { + + if ( input_n == physinputs.size() ) { + break; + } + + string port = physinputs[input_n]; + + if (port.empty() ) { + error << "Physical Input number "<< input_n << " is unavailable and cannot be connected" << endmsg; + } + + //GZ: check this; could be heavy + (*rIter)->input()->connect ((*rIter)->input()->ports().port(DataType::AUDIO, route_input_n), port, this); + ++input_n; + } + } + } + + if (reconnectOutputs) { + + //normalize route ouptuts: reduce the amount outputs to be equal to the amount of inputs + if (current_output_auto_connection & AutoConnectPhysical) { + + //GZ: check this; could be heavy + (*rIter)->output()->disconnect (this); + size_t route_inputs_count = (*rIter)->n_inputs().get(DataType::AUDIO); + + //GZ: check this; could be heavy + (*rIter)->output()->ensure_io(ChanCount(DataType::AUDIO, route_inputs_count), false, this ); + + } else if (current_output_auto_connection & AutoConnectMaster){ + + if (!reconnect_master) { + continue; + } + + //GZ: check this; could be heavy + (*rIter)->output()->disconnect (this); + + if (_master_out) { + uint32_t master_inputs_count = _master_out->n_inputs().get(DataType::AUDIO); + (*rIter)->output()->ensure_io(ChanCount(DataType::AUDIO, master_inputs_count), false, this ); + } else { + error << error << "Master bus is not available" << endmsg; + break; + } + } + + for (uint32_t route_output_n = 0; route_output_n < (*rIter)->n_outputs().get(DataType::AUDIO); ++route_output_n) { + if (current_output_auto_connection & AutoConnectPhysical) { + + if ( output_n == physoutputs.size() ) { + break; + } + + string port = physoutputs[output_n]; + + if (port.empty() ) { + error << "Physical Output number "<< output_n << " is unavailable and cannot be connected" << endmsg; + } + + //GZ: check this; could be heavy + (*rIter)->output()->connect ((*rIter)->output()->ports().port(DataType::AUDIO, route_output_n), port, this); + ++output_n; + + } else if (current_output_auto_connection & AutoConnectMaster) { + + if ( route_output_n == _master_out->n_inputs().get(DataType::AUDIO) ) { + break; + } + + // connect to master bus + string port = _master_out->input()->ports().port(DataType::AUDIO, route_output_n)->name(); + + if (port.empty() ) { + error << "MasterBus Input number "<< route_output_n << " is unavailable and cannot be connected" << endmsg; + } + + + //GZ: check this; could be heavy + (*rIter)->output()->connect ((*rIter)->output()->ports().port(DataType::AUDIO, route_output_n), port, this); + + } + } + } + + //auto_connect_route (*rIter, inputs, outputs, false, reconnectIputs); + } + + _master_out->output()->disconnect (this); + auto_connect_master_bus (); + } + + graph_reordered (); + + session_routes_reconnected (); /* EMIT SIGNAL */ } +void +Session::reconnect_midi_scene_ports(bool inputs) +{ + if (inputs ) { + + boost::shared_ptr<MidiPort> scene_in_ptr = scene_in(); + if (scene_in_ptr) { + scene_in_ptr->disconnect_all (); + + std::vector<EngineStateController::MidiPortState> midi_port_states; + EngineStateController::instance()->get_physical_midi_input_states (midi_port_states); + + std::vector<EngineStateController::MidiPortState>::iterator state_iter = midi_port_states.begin(); + + for (; state_iter != midi_port_states.end(); ++state_iter) { + if (state_iter->active && state_iter->available && state_iter->scene_connected) { + scene_in_ptr->connect (state_iter->name); + } + } + } + + } else { + + boost::shared_ptr<MidiPort> scene_out_ptr = scene_out(); + + if (scene_out_ptr ) { + scene_out_ptr->disconnect_all (); + + std::vector<EngineStateController::MidiPortState> midi_port_states; + EngineStateController::instance()->get_physical_midi_output_states (midi_port_states); + + std::vector<EngineStateController::MidiPortState>::iterator state_iter = midi_port_states.begin(); + + for (; state_iter != midi_port_states.end(); ++state_iter) { + if (state_iter->active && state_iter->available && state_iter->scene_connected) { + scene_out_ptr->connect (state_iter->name); + } + } + } + } +} + +void +Session::reconnect_mtc_ports () +{ + boost::shared_ptr<MidiPort> mtc_in_ptr = _midi_ports->mtc_input_port(); + + if (!mtc_in_ptr) { + return; + } + + mtc_in_ptr->disconnect_all (); + + std::vector<EngineStateController::MidiPortState> midi_port_states; + EngineStateController::instance()->get_physical_midi_input_states (midi_port_states); + + std::vector<EngineStateController::MidiPortState>::iterator state_iter = midi_port_states.begin(); + + for (; state_iter != midi_port_states.end(); ++state_iter) { + if (state_iter->available && state_iter->mtc_in) { + mtc_in_ptr->connect (state_iter->name); + } + } + + if (!_midi_ports->mtc_input_port ()->connected () && + config.get_external_sync () && + (Config->get_sync_source () == MTC) ) { + config.set_external_sync (false); + } + + if ( ARDOUR::Profile->get_trx () ) { + // Tracks need this signal to update timecode_source_dropdown + MtcOrLtcInputPortChanged (); //emit signal + } +} + +void +Session::reconnect_mmc_ports(bool inputs) +{ + if (inputs ) { // get all enabled midi input ports + + boost::shared_ptr<MidiPort> mmc_in_ptr = _midi_ports->mmc_in(); + if (mmc_in_ptr) { + mmc_in_ptr->disconnect_all (); + std::vector<std::string> enabled_midi_inputs; + EngineStateController::instance()->get_physical_midi_inputs (enabled_midi_inputs); + + std::vector<std::string>::iterator port_iter = enabled_midi_inputs.begin(); + + for (; port_iter != enabled_midi_inputs.end(); ++port_iter) { + mmc_in_ptr->connect (*port_iter); + } + + } + } else { // get all enabled midi output ports + + boost::shared_ptr<MidiPort> mmc_out_ptr = _midi_ports->mmc_out(); + if (mmc_out_ptr ) { + mmc_out_ptr->disconnect_all (); + std::vector<std::string> enabled_midi_outputs; + EngineStateController::instance()->get_physical_midi_outputs (enabled_midi_outputs); + + std::vector<std::string>::iterator port_iter = enabled_midi_outputs.begin(); + + for (; port_iter != enabled_midi_outputs.end(); ++port_iter) { + mmc_out_ptr->connect (*port_iter); + } + } + } +} + +#endif /** Caller must not hold process lock * @param name_template string to use for the start of the name, or "" to use "Audio". @@ -2365,16 +2796,18 @@ list< boost::shared_ptr<AudioTrack> > Session::new_audio_track (int input_channels, int output_channels, TrackMode mode, RouteGroup* route_group, uint32_t how_many, string name_template) { - char track_name[32]; + string track_name; uint32_t track_id = 0; string port; RouteList new_routes; list<boost::shared_ptr<AudioTrack> > ret; - bool const use_number = (how_many != 1) || name_template.empty () || name_template == _("Audio"); - + const string name_pattern = default_track_name_pattern (DataType::AUDIO); + bool const use_number = (how_many != 1) || name_template.empty () || (name_template == name_pattern); + while (how_many) { - if (!find_route_name (name_template.empty() ? _("Audio") : name_template, ++track_id, track_name, sizeof(track_name), use_number)) { + + if (!find_route_name (name_template.empty() ? _(name_pattern.c_str()) : name_template, ++track_id, track_name, use_number)) { error << "cannot find name for new audio track" << endmsg; goto failed; } @@ -2388,6 +2821,20 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod goto failed; } + if (ARDOUR::Profile->get_trx ()) { + // TRACKS considers it's not a USE CASE, it's + // a piece of behavior of the session model: + // + // Gain for a newly created route depends on + // the current output_auto_connect mode: + // + // 0 for Stereo Out mode + // 0 Multi Out mode + if (Config->get_output_auto_connect() & AutoConnectMaster) { + track->set_gain (dB_to_coefficient (0), 0); + } + } + track->use_new_diskstream(); #ifdef BOOST_SP_ENABLE_DEBUG_HOOKS @@ -2426,6 +2873,8 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod new_routes.push_back (track); ret.push_back (track); + + RouteAddedOrRemoved (true); /* EMIT SIGNAL */ } catch (failed_constructor &err) { @@ -2445,7 +2894,11 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod failed: if (!new_routes.empty()) { StateProtector sp (this); - add_routes (new_routes, true, true, true); + if (Profile->get_trx()) { + add_routes (new_routes, false, false, false); + } else { + add_routes (new_routes, true, true, false); + } } return ret; @@ -2457,7 +2910,7 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod RouteList Session::new_audio_route (int input_channels, int output_channels, RouteGroup* route_group, uint32_t how_many, string name_template) { - char bus_name[32]; + string bus_name; uint32_t bus_id = 0; string port; RouteList ret; @@ -2465,7 +2918,7 @@ Session::new_audio_route (int input_channels, int output_channels, RouteGroup* r bool const use_number = (how_many != 1) || name_template.empty () || name_template == _("Bus"); while (how_many) { - if (!find_route_name (name_template.empty () ? _("Bus") : name_template, ++bus_id, bus_name, sizeof(bus_name), use_number)) { + if (!find_route_name (name_template.empty () ? _("Bus") : name_template, ++bus_id, bus_name, use_number)) { error << "cannot find name for new audio bus" << endmsg; goto failure; } @@ -2510,6 +2963,8 @@ Session::new_audio_route (int input_channels, int output_channels, RouteGroup* r ret.push_back (bus); + RouteAddedOrRemoved (true); /* EMIT SIGNAL */ + ARDOUR::GUIIdle (); } @@ -2531,7 +2986,11 @@ Session::new_audio_route (int input_channels, int output_channels, RouteGroup* r failure: if (!ret.empty()) { StateProtector sp (this); - add_routes (ret, false, true, true); // autoconnect outputs only + if (Profile->get_trx()) { + add_routes (ret, false, false, false); + } else { + add_routes (ret, false, true, true); // autoconnect // outputs only + } } return ret; @@ -2565,7 +3024,7 @@ Session::new_route_from_template (uint32_t how_many, const std::string& template node_copy.remove_property_recursively (X_("id")); try { - char name[32]; + string name; if (!name_base.empty()) { @@ -2574,7 +3033,7 @@ Session::new_route_from_template (uint32_t how_many, const std::string& template * numbered, via the final parameter. */ - if (!find_route_name (name_base.c_str(), ++number, name, sizeof(name), (being_added > 1))) { + if (!find_route_name (name_base.c_str(), ++number, name, (being_added > 1))) { fatal << _("Session: UINT_MAX routes? impossible!") << endmsg; /*NOTREACHDE*/ } @@ -2584,7 +3043,7 @@ Session::new_route_from_template (uint32_t how_many, const std::string& template string const route_name = node_copy.property(X_("name"))->value (); /* generate a new name by adding a number to the end of the template name */ - if (!find_route_name (route_name.c_str(), ++number, name, sizeof(name), true)) { + if (!find_route_name (route_name.c_str(), ++number, name, true)) { fatal << _("Session: UINT_MAX routes? impossible!") << endmsg; abort(); /*NOTREACHED*/ } @@ -2630,6 +3089,8 @@ Session::new_route_from_template (uint32_t how_many, const std::string& template ++control_id; ret.push_back (route); + + RouteAddedOrRemoved (true); /* EMIT SIGNAL */ } catch (failed_constructor &err) { @@ -2648,7 +3109,11 @@ Session::new_route_from_template (uint32_t how_many, const std::string& template out: if (!ret.empty()) { StateProtector sp (this); - add_routes (ret, true, true, true); + if (Profile->get_trx()) { + add_routes (ret, false, false, false); + } else { + add_routes (ret, true, true, false); + } IO::enable_connecting (); } @@ -2679,6 +3144,8 @@ Session::add_routes (RouteList& new_routes, bool input_auto_connect, bool output reassign_track_numbers(); + update_route_record_state (); + RouteAdded (new_routes); /* EMIT SIGNAL */ } @@ -2736,7 +3203,7 @@ Session::add_routes_inner (RouteList& new_routes, bool input_auto_connect, bool if (tr) { tr->PlaylistChanged.connect_same_thread (*this, boost::bind (&Session::track_playlist_changed, this, boost::weak_ptr<Track> (tr))); track_playlist_changed (boost::weak_ptr<Track> (tr)); - tr->RecordEnableChanged.connect_same_thread (*this, boost::bind (&Session::update_have_rec_enabled_track, this)); + tr->RecordEnableChanged.connect_same_thread (*this, boost::bind (&Session::update_route_record_state, this)); boost::shared_ptr<MidiTrack> mt = boost::dynamic_pointer_cast<MidiTrack> (tr); if (mt) { @@ -2870,100 +3337,128 @@ Session::add_internal_send (boost::shared_ptr<Route> dest, boost::shared_ptr<Pro graph_reordered (); } + void -Session::remove_route (boost::shared_ptr<Route> route) +Session::remove_routes (boost::shared_ptr<RouteList> routes_to_remove) { - if (route == _master_out) { - return; - } - - route->set_solo (false, this); - - { + { // RCU Writer scope RCUWriter<RouteList> writer (routes); boost::shared_ptr<RouteList> rs = writer.get_copy (); - - rs->remove (route); - - /* deleting the master out seems like a dumb - idea, but its more of a UI policy issue - than our concern. - */ - - if (route == _master_out) { - _master_out = boost::shared_ptr<Route> (); - } - - if (route == _monitor_out) { - _monitor_out.reset (); - } - - /* writer goes out of scope, forces route list update */ - } - - update_route_solo_state (); - - // We need to disconnect the route's inputs and outputs - - route->input()->disconnect (0); - route->output()->disconnect (0); - - /* if the route had internal sends sending to it, remove them */ - if (route->internal_return()) { - - boost::shared_ptr<RouteList> r = routes.reader (); - for (RouteList::iterator i = r->begin(); i != r->end(); ++i) { - boost::shared_ptr<Send> s = (*i)->internal_send_for (route); - if (s) { - (*i)->remove_processor (s); + + + for (RouteList::iterator iter = routes_to_remove->begin(); iter != routes_to_remove->end(); ++iter) { + + if (*iter == _master_out) { + continue; + } + + (*iter)->set_solo (false, this); + + rs->remove (*iter); + + /* deleting the master out seems like a dumb + idea, but its more of a UI policy issue + than our concern. + */ + + if (*iter == _master_out) { + _master_out = boost::shared_ptr<Route> (); + } + + if (*iter == _monitor_out) { + _monitor_out.reset (); } - } - } - /* if the monitoring section had a pointer to this route, remove it */ - if (_monitor_out && !route->is_master() && !route->is_monitor()) { - Glib::Threads::Mutex::Lock lm (AudioEngine::instance()->process_lock ()); - PBD::Unwinder<bool> uw (ignore_route_processor_changes, true); - route->remove_aux_or_listen (_monitor_out); - } + update_route_solo_state (); + + // We need to disconnect the route's inputs and outputs + + (*iter)->input()->disconnect (0); + (*iter)->output()->disconnect (0); + + /* if the route had internal sends sending to it, remove them */ + if ((*iter)->internal_return()) { + + boost::shared_ptr<RouteList> r = routes.reader (); + for (RouteList::iterator i = r->begin(); i != r->end(); ++i) { + boost::shared_ptr<Send> s = (*i)->internal_send_for (*iter); + if (s) { + (*i)->remove_processor (s); + } + } + } + + /* if the monitoring section had a pointer to this route, remove it */ + if (_monitor_out && !(*iter)->is_master() && !(*iter)->is_monitor()) { + Glib::Threads::Mutex::Lock lm (AudioEngine::instance()->process_lock ()); + PBD::Unwinder<bool> uw (ignore_route_processor_changes, true); + (*iter)->remove_aux_or_listen (_monitor_out); + } + + boost::shared_ptr<MidiTrack> mt = boost::dynamic_pointer_cast<MidiTrack> (*iter); + if (mt && mt->step_editing()) { + if (_step_editors > 0) { + _step_editors--; + } + } - boost::shared_ptr<MidiTrack> mt = boost::dynamic_pointer_cast<MidiTrack> (route); - if (mt && mt->step_editing()) { - if (_step_editors > 0) { - _step_editors--; + RouteAddedOrRemoved (false); /* EMIT SIGNAL */ } - } + + /* writer goes out of scope, forces route list update */ + } // end of RCU Writer scope + update_latency_compensation (); set_dirty(); - + /* Re-sort routes to remove the graph's current references to the one that is * going away, then flush old references out of the graph. + * Wave Tracks: reconnect routes */ - resort_routes (); +#ifdef USE_TRACKS_CODE_FEATURES + reconnect_existing_routes(true, false); +#else + resort_routes (); +#endif + if (_process_graph) { _process_graph->clear_other_chain (); } - + /* get rid of it from the dead wood collection in the route list manager */ - /* XXX i think this is unsafe as it currently stands, but i am not sure. (pd, october 2nd, 2006) */ - + routes.flush (); + + /* try to cause everyone to drop their references + * and unregister ports from the backend + */ + PBD::Unwinder<bool> uw_flag (_route_deletion_in_progress, true); - /* try to cause everyone to drop their references */ - - route->drop_references (); - + for (RouteList::iterator iter = routes_to_remove->begin(); iter != routes_to_remove->end(); ++iter) { + (*iter)->drop_references (); + } + Route::RemoteControlIDChange(); /* EMIT SIGNAL */ - + /* save the new state of the world */ - + if (save_state (_current_snapshot_name)) { save_history (_current_snapshot_name); } + reassign_track_numbers(); + update_route_record_state (); +} + +void +Session::remove_route (boost::shared_ptr<Route> route) +{ + boost::shared_ptr<RouteList> rl (new RouteList); + rl->push_back (route); + remove_routes (rl); } void @@ -3468,9 +3963,11 @@ Session::maybe_update_session_range (framepos_t a, framepos_t b) return; } + framepos_t session_end_marker_shift_samples = session_end_shift * _nominal_frame_rate; + if (_session_range_location == 0) { - add_session_range_location (a, b); + set_session_range_location (a, b + session_end_marker_shift_samples); } else { @@ -3907,7 +4404,7 @@ Session::format_audio_source_name (const string& legalized_base, uint32_t nchan, ostringstream sstr; const string ext = native_header_format_extension (config.get_native_file_header_format(), DataType::AUDIO); - if (destructive) { + if (Profile->get_trx() && destructive) { sstr << 'T'; sstr << setfill ('0') << setw (4) << cnt; sstr << legalized_base; @@ -4237,7 +4734,7 @@ Session::graph_reordered () from a set_state() call or creating new tracks. Ditto for deletion. */ - if ((_state_of_the_state & (InitialConnecting|Deletion)) || _adding_routes_in_progress) { + if ((_state_of_the_state & (InitialConnecting|Deletion)) || _adding_routes_in_progress || _reconnecting_routes_in_progress) { return; } @@ -4560,12 +5057,12 @@ void Session::reset_native_file_format () { boost::shared_ptr<RouteList> rl = routes.reader (); + for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) { boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i); if (tr) { /* don't save state as we do this, there's no point */ - _state_of_the_state = StateOfTheState (_state_of_the_state|InCleanup); tr->reset_write_sources (false); _state_of_the_state = StateOfTheState (_state_of_the_state & ~InCleanup); @@ -4948,9 +5445,15 @@ Session::have_rec_enabled_track () const return g_atomic_int_get (const_cast<gint*>(&_have_rec_enabled_track)) == 1; } +bool +Session::have_rec_disabled_track () const +{ + return g_atomic_int_get (const_cast<gint*>(&_have_rec_disabled_track)) == 1; +} + /** Update the state of our rec-enabled tracks flag */ void -Session::update_have_rec_enabled_track () +Session::update_route_record_state () { boost::shared_ptr<RouteList> rl = routes.reader (); RouteList::iterator i = rl->begin(); @@ -4971,6 +5474,22 @@ Session::update_have_rec_enabled_track () if (g_atomic_int_get (&_have_rec_enabled_track) != old) { RecordStateChanged (); /* EMIT SIGNAL */ } + + for (i = rl->begin(); i != rl->end (); ++i) { + boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i); + if (tr && !tr->record_enabled ()) { + break; + } + } + + g_atomic_int_set (&_have_rec_disabled_track, i != rl->end () ? 1 : 0); + + bool record_arm_state_changed = (old != g_atomic_int_get (&_have_rec_enabled_track) ); + + if (record_status() == Recording && record_arm_state_changed ) { + RecordArmStateChanged (); + } + } void @@ -5013,7 +5532,8 @@ Session::route_added_to_route_group (RouteGroup* rg, boost::weak_ptr<Route> r) void Session::route_removed_from_route_group (RouteGroup* rg, boost::weak_ptr<Route> r) { - RouteRemovedFromRouteGroup (rg, r); + update_route_record_state (); + RouteRemovedFromRouteGroup (rg, r); /* EMIT SIGNAL */ } boost::shared_ptr<RouteList> @@ -5090,7 +5610,7 @@ Session::current_end_frame () const } void -Session::add_session_range_location (framepos_t start, framepos_t end) +Session::set_session_range_location (framepos_t start, framepos_t end) { _session_range_location = new Location (*this, start, end, _("session"), Location::IsSessionRange); _locations->add (_session_range_location); @@ -5526,6 +6046,12 @@ Session::next_control_id () const subtract++; } + /* the same about masterbus in Waves Tracks */ + + if (Profile->get_trx() && _master_out) { + subtract++; + } + return nroutes() - subtract; } @@ -5543,6 +6069,14 @@ Session::notify_remote_id_change () default: break; } + +#ifdef USE_TRACKS_CODE_FEATURES + /* Waves Tracks: for Waves Tracks session it's required to reconnect their IOs + * if track order has been changed by user + */ + reconnect_existing_routes(true, true); +#endif + } void @@ -5597,6 +6131,11 @@ Session::reconnect_ltc_input () if (src != _("None") && !src.empty()) { _ltc_input->nth (0)->connect (src); } + + if ( ARDOUR::Profile->get_trx () ) { + // Tracks need this signal to update timecode_source_dropdown + MtcOrLtcInputPortChanged (); //emit signal + } } } @@ -5605,14 +6144,40 @@ Session::reconnect_ltc_output () { if (_ltc_output) { -#if 0 - string src = Config->get_ltc_sink_port(); + string src = Config->get_ltc_output_port(); _ltc_output->disconnect (this); if (src != _("None") && !src.empty()) { _ltc_output->nth (0)->connect (src); } -#endif } } + +void +Session::set_range_selection (framepos_t start, framepos_t end) +{ + _range_selection = Evoral::Range<framepos_t> (start, end); + follow_playhead_priority (); +} + +void +Session::set_object_selection (framepos_t start, framepos_t end) +{ + _object_selection = Evoral::Range<framepos_t> (start, end); + follow_playhead_priority (); +} + +void +Session::clear_range_selection () +{ + _range_selection = Evoral::Range<framepos_t> (-1,-1); + follow_playhead_priority (); +} + +void +Session::clear_object_selection () +{ + _object_selection = Evoral::Range<framepos_t> (-1,-1); + follow_playhead_priority (); +} diff --git a/libs/ardour/session_events.cc b/libs/ardour/session_events.cc index 53a26363b0..7d8cbdc274 100644 --- a/libs/ardour/session_events.cc +++ b/libs/ardour/session_events.cc @@ -42,6 +42,12 @@ SessionEvent::init_event_pool () pool = new PerThreadPool; } +bool +SessionEvent::has_per_thread_pool () +{ + return pool->has_per_thread_pool (); +} + void SessionEvent::create_per_thread_pool (const std::string& name, uint32_t nitems) { diff --git a/libs/ardour/session_midi.cc b/libs/ardour/session_midi.cc index 7becd9c667..19fb39ba14 100644 --- a/libs/ardour/session_midi.cc +++ b/libs/ardour/session_midi.cc @@ -43,6 +43,7 @@ #include "ardour/midi_port.h" #include "ardour/midi_track.h" #include "ardour/midi_ui.h" +#include "ardour/profile.h" #include "ardour/session.h" #include "ardour/slave.h" #include "ardour/ticker.h" @@ -129,6 +130,19 @@ Session::mmc_record_pause (MIDI::MachineControl &/*mmc*/) void Session::mmc_record_strobe (MIDI::MachineControl &/*mmc*/) { + if (Profile->get_trx()) { + + /* In Tracks Live, there is no concept of punch, so we just + treat RecordStrobe like RecordPause. This violates the MMC + specification. + */ + + if (Config->get_mmc_control()) { + maybe_enable_record(); + } + return; + } + if (!Config->get_mmc_control() || (_step_editors > 0)) { return; } diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index f11ba77a2a..0edff32535 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -100,6 +100,7 @@ #include "ardour/playlist_source.h" #include "ardour/port.h" #include "ardour/processor.h" +#include "ardour/profile.h" #include "ardour/proxy_controllable.h" #include "ardour/recent_sessions.h" #include "ardour/region_factory.h" @@ -141,8 +142,18 @@ Session::pre_engine_init (string fullpath) _path = canonical_path(fullpath); /* is it new ? */ + if (Profile->get_trx() ) { + // Waves TracksLive has a usecase of session replacement with a new one. + // We should check session state file (<session_name>.ardour) existance + // to determine if the session is new or not - _is_new = !Glib::file_test (_path, Glib::FileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)); + string full_session_name = Glib::build_filename( fullpath, _name ); + full_session_name += statefile_suffix; + + _is_new = !Glib::file_test (full_session_name, Glib::FileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)); + } else { + _is_new = !Glib::file_test (_path, Glib::FileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)); + } /* finish initialization that can't be done in a normal C++ constructor definition. @@ -270,6 +281,7 @@ Session::post_engine_init () Config->map_parameters (ff); config.map_parameters (ft); + _butler->map_parameters (); /* Reset all panners */ @@ -351,9 +363,44 @@ Session::post_engine_init () state_was_pending = false; } + /* Now, finally, we can fill the playback buffers */ + + BootMessage (_("Filling playback buffers")); + + boost::shared_ptr<RouteList> rl = routes.reader(); + for (RouteList::iterator r = rl->begin(); r != rl->end(); ++r) { + boost::shared_ptr<Track> trk = boost::dynamic_pointer_cast<Track> (*r); + if (trk && !trk->hidden()) { + trk->seek (_transport_frame, true); + } + } + return 0; } +void +Session::session_loaded () +{ + SessionLoaded(); + + _state_of_the_state = Clean; + + DirtyChanged (); /* EMIT SIGNAL */ + + if (_is_new) { + save_state (""); + } else if (state_was_pending) { + save_state (""); + remove_pending_capture_state (); + state_was_pending = false; + } + + /* Now, finally, we can fill the playback buffers */ + + BootMessage (_("Filling playback buffers")); + force_locate (_transport_frame, false); +} + string Session::raid_path () const { @@ -490,7 +537,7 @@ Session::create (const string& session_template, BusProfile* bus_profile) _writable = exists_and_writable (_path); if (!session_template.empty()) { - std::string in_path = session_template_dir_to_file (session_template); + std::string in_path = (ARDOUR::Profile->get_trx () ? session_template : session_template_dir_to_file (session_template)); ifstream in(in_path.c_str()); @@ -506,10 +553,12 @@ Session::create (const string& session_template, BusProfile* bus_profile) out << in.rdbuf(); _is_new = false; - /* Copy plugin state files from template to new session */ - std::string template_plugins = Glib::build_filename (session_template, X_("plugins")); - copy_recurse (template_plugins, plugins_dir ()); - + if (!ARDOUR::Profile->get_trx()) { + /* Copy plugin state files from template to new session */ + std::string template_plugins = Glib::build_filename (session_template, X_("plugins")); + copy_recurse (template_plugins, plugins_dir ()); + } + return 0; } else { @@ -526,7 +575,21 @@ Session::create (const string& session_template, BusProfile* bus_profile) } - /* set initial start + end point */ + if (Profile->get_trx()) { + + /* set initial start + end point : ARDOUR::Session::session_end_shift long. + Remember that this is a brand new session. Sessions + loaded from saved state will get this range from the saved state. + */ + + set_session_range_location (0, 0); + + /* Initial loop location, from absolute zero, length 10 seconds */ + + Location* loc = new Location (*this, 0, 10.0 * _engine.sample_rate(), _("Loop"), Location::IsAutoLoop); + _locations->add (loc, true); + set_auto_loop_location (loc); + } _state_of_the_state = Clean; @@ -537,8 +600,9 @@ Session::create (const string& session_template, BusProfile* bus_profile) RouteList rl; ChanCount count(DataType::AUDIO, bus_profile->master_out_channels); - if (bus_profile->master_out_channels) { - boost::shared_ptr<Route> r (new Route (*this, _("Master"), Route::MasterOut, DataType::AUDIO)); + // Waves Tracks: always create master bus for Tracks + if (ARDOUR::Profile->get_trx() || bus_profile->master_out_channels) { + boost::shared_ptr<Route> r (new Route (*this, _("Master"), Route::MasterOut, DataType::AUDIO)); if (r->init ()) { return -1; } @@ -562,16 +626,20 @@ Session::create (const string& session_template, BusProfile* bus_profile) add_routes (rl, false, false, false); } - /* this allows the user to override settings with an environment variable. - */ - - if (no_auto_connect()) { - bus_profile->input_ac = AutoConnectOption (0); - bus_profile->output_ac = AutoConnectOption (0); - } - - Config->set_input_auto_connect (bus_profile->input_ac); - Config->set_output_auto_connect (bus_profile->output_ac); + // Waves Tracks: Skip this. Always use autoconnection for Tracks + if (!ARDOUR::Profile->get_trx()) { + + /* this allows the user to override settings with an environment variable. + */ + + if (no_auto_connect()) { + bus_profile->input_ac = AutoConnectOption (0); + bus_profile->output_ac = AutoConnectOption (0); + } + + Config->set_input_auto_connect (bus_profile->input_ac); + Config->set_output_auto_connect (bus_profile->output_ac); + } } if (Config->get_use_monitor_bus() && bus_profile) { @@ -1045,17 +1113,32 @@ Session::state (bool full_state) } } } + + if (full_state) { - node->add_child_nocopy (_locations->get_state()); + + if (_locations) { + node->add_child_nocopy (_locations->get_state()); + } } else { + Locations loc (*this); // for a template, just create a new Locations, populate it // with the default start and end, and get the state for that. - Locations loc (*this); Location* range = new Location (*this, 0, 0, _("session"), Location::IsSessionRange); range->set (max_framepos, 0); loc.add (range); - node->add_child_nocopy (loc.get_state()); + XMLNode& locations_state = loc.get_state(); + + if (ARDOUR::Profile->get_trx() && _locations) { + // For tracks we need stored the Auto Loop Range and all MIDI markers. + for (Locations::LocationList::const_iterator i = _locations->list ().begin (); i != _locations->list ().end (); ++i) { + if ((*i)->is_mark () || (*i)->is_auto_loop ()) { + locations_state.add_child_nocopy ((*i)->get_state ()); + } + } + } + node->add_child_nocopy (locations_state); } child = node->add_child ("Bundles"); @@ -1076,12 +1159,12 @@ Session::state (bool full_state) RoutePublicOrderSorter cmp; RouteList public_order (*r); public_order.sort (cmp); - - /* the sort should have put control outs first */ - - if (_monitor_out) { - assert (_monitor_out == public_order.front()); - } + + /* the sort should have put control outs first */ + + if (_monitor_out) { + assert (_monitor_out == public_order.front()); + } for (RouteList::iterator i = public_order.begin(); i != public_order.end(); ++i) { if (!(*i)->is_auditioner()) { @@ -1335,7 +1418,7 @@ Session::set_state (const XMLNode& node, int version) ControlProtocolManager::instance().set_state (*child, version); } - update_have_rec_enabled_track (); + update_route_record_state (); /* here beginneth the second phase ... */ @@ -1856,17 +1939,15 @@ Session::get_sources_as_xml () void Session::reset_write_sources (bool mark_write_complete, bool force) { - boost::shared_ptr<RouteList> rl = routes.reader(); - for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) { - boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i); - if (tr) { - - // block state saving + boost::shared_ptr<RouteList> rl = routes.reader(); + for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) { + boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i); + if (tr) { _state_of_the_state = StateOfTheState (_state_of_the_state|InCleanup); tr->reset_write_sources(mark_write_complete, force); _state_of_the_state = StateOfTheState (_state_of_the_state & ~InCleanup); - } - } + } + } } int @@ -1985,60 +2066,80 @@ Session::XMLSourceFactory (const XMLNode& node) int Session::save_template (string template_name) { - XMLTree tree; - - if (_state_of_the_state & CannotSave) { + if ((_state_of_the_state & CannotSave) || template_name.empty ()) { return -1; } - std::string user_template_dir(user_template_directory()); + bool absolute_path = Glib::path_is_absolute (template_name); - if (g_mkdir_with_parents (user_template_dir.c_str(), 0755) != 0) { - error << string_compose(_("Could not create templates directory \"%1\" (%2)"), - user_template_dir, g_strerror (errno)) << endmsg; - return -1; - } + /* directory to put the template in */ + std::string template_dir_path; - tree.set_root (&get_template()); + if (!absolute_path) { + std::string user_template_dir(user_template_directory()); - std::string template_dir_path(user_template_dir); - - /* directory to put the template in */ - template_dir_path = Glib::build_filename (template_dir_path, template_name); + if (g_mkdir_with_parents (user_template_dir.c_str(), 0755) != 0) { + error << string_compose(_("Could not create templates directory \"%1\" (%2)"), + user_template_dir, g_strerror (errno)) << endmsg; + return -1; + } - if (Glib::file_test (template_dir_path, Glib::FILE_TEST_EXISTS)) { - warning << string_compose(_("Template \"%1\" already exists - new version not created"), - template_dir_path) << endmsg; - return -1; + template_dir_path = Glib::build_filename (user_template_dir, template_name); + } else { + template_dir_path = template_name; } - - if (g_mkdir_with_parents (template_dir_path.c_str(), 0755) != 0) { - error << string_compose(_("Could not create directory for Session template\"%1\" (%2)"), - template_dir_path, g_strerror (errno)) << endmsg; - return -1; + + if (!ARDOUR::Profile->get_trx()) { + if (Glib::file_test (template_dir_path, Glib::FILE_TEST_EXISTS)) { + warning << string_compose(_("Template \"%1\" already exists - new version not created"), + template_dir_path) << endmsg; + return -1; + } + + if (g_mkdir_with_parents (template_dir_path.c_str(), 0755) != 0) { + error << string_compose(_("Could not create directory for Session template\"%1\" (%2)"), + template_dir_path, g_strerror (errno)) << endmsg; + return -1; + } } /* file to write */ - std::string template_file_path(template_dir_path); - template_file_path = Glib::build_filename (template_file_path, template_name + template_suffix); + std::string template_file_path; + + if (ARDOUR::Profile->get_trx()) { + template_file_path = template_name; + } else { + if (absolute_path) { + template_file_path = Glib::build_filename (template_dir_path, Glib::path_get_basename (template_dir_path) + template_suffix); + } else { + template_file_path = Glib::build_filename (template_dir_path, template_name + template_suffix); + } + } + SessionSaveUnderway (); /* EMIT SIGNAL */ + + XMLTree tree; + + tree.set_root (&get_template()); if (!tree.write (template_file_path)) { error << _("template not saved") << endmsg; return -1; } - /* copy plugin state directory */ + if (!ARDOUR::Profile->get_trx()) { + /* copy plugin state directory */ - std::string template_plugin_state_path(template_dir_path); - template_plugin_state_path = Glib::build_filename (template_plugin_state_path, X_("plugins")); + std::string template_plugin_state_path (Glib::build_filename (template_dir_path, X_("plugins"))); - if (g_mkdir_with_parents (template_plugin_state_path.c_str(), 0755) != 0) { - error << string_compose(_("Could not create directory for Session template plugin state\"%1\" (%2)"), - template_plugin_state_path, g_strerror (errno)) << endmsg; - return -1; + if (g_mkdir_with_parents (template_plugin_state_path.c_str(), 0755) != 0) { + error << string_compose(_("Could not create directory for Session template plugin state\"%1\" (%2)"), + template_plugin_state_path, g_strerror (errno)) << endmsg; + return -1; + } + copy_files (plugins_dir(), template_plugin_state_path); } - copy_recurse (plugins_dir(), template_plugin_state_path); + store_recent_templates (template_file_path); return 0; } @@ -2241,25 +2342,25 @@ Session::get_best_session_directory_for_new_audio () string Session::automation_dir () const { - return Glib::build_filename (_path, "automation"); + return Glib::build_filename (_path, automation_dir_name); } string Session::analysis_dir () const { - return Glib::build_filename (_path, "analysis"); + return Glib::build_filename (_path, analysis_dir_name); } string Session::plugins_dir () const { - return Glib::build_filename (_path, "plugins"); + return Glib::build_filename (_path, plugins_dir_name); } string Session::externals_dir () const { - return Glib::build_filename (_path, "externals"); + return Glib::build_filename (_path, externals_dir_name); } int @@ -2788,17 +2889,18 @@ Session::cleanup_sources (CleanupReport& rep) */ RegionFactory::remove_regions_using_source (i->second); - sources.erase (i); // also remove source from all_sources for (set<string>::iterator j = all_sources.begin(); j != all_sources.end(); ++j) { spath = Glib::path_get_basename (*j); - if ( spath == i->second->name () ) { + if (spath == i->second->name()) { all_sources.erase (j); break; } } + + sources.erase (i); } } } @@ -3561,6 +3663,8 @@ Session::config_changed (std::string p, bool ours) reconnect_ltc_output (); } else if (p == "timecode-generator-offset") { ltc_tx_parse_offset(); + } else if (p == "auto-return-target-list") { + follow_playhead_priority (); } set_dirty (); @@ -4152,7 +4256,15 @@ Session::save_as (SaveAs& saveas) std::string from = *i; - if ((*i).find (audiofile_dir_string) != string::npos) { +#ifdef __APPLE__ + string filename = Glib::path_get_basename (from); + std::transform (filename.begin(), filename.end(), filename.begin(), ::toupper); + if (filename == ".DS_STORE") { + continue; + } +#endif + + if (from.find (audiofile_dir_string) != string::npos) { /* audio file: only copy if asked */ @@ -4163,7 +4275,8 @@ Session::save_as (SaveAs& saveas) info << "media file copying from " << from << " to " << to << endmsg; if (!copy_file (from, to)) { - throw Glib::FileError (Glib::FileError::IO_ERROR, "copy failed"); + throw Glib::FileError (Glib::FileError::IO_ERROR, + string_compose(_("\ncopying \"%1\" failed !"), from)); } } @@ -4171,7 +4284,7 @@ Session::save_as (SaveAs& saveas) internal_file_cnt++; - } else if ((*i).find (midifile_dir_string) != string::npos) { + } else if (from.find (midifile_dir_string) != string::npos) { /* midi file: always copy unless * creating an empty new session @@ -4192,7 +4305,7 @@ Session::save_as (SaveAs& saveas) internal_file_cnt++; - } else if ((*i).find (analysis_dir_string) != string::npos) { + } else if (from.find (analysis_dir_string) != string::npos) { /* make sure analysis dir exists in * new session folder, but we're not @@ -4211,14 +4324,14 @@ Session::save_as (SaveAs& saveas) bool do_copy = true; for (vector<string>::iterator v = do_not_copy_extensions.begin(); v != do_not_copy_extensions.end(); ++v) { - if (((*i).length() > (*v).length()) && ((*i).find (*v) == (*i).length() - (*v).length())) { + if ((from.length() > (*v).length()) && (from.find (*v) == from.length() - (*v).length())) { /* end of filename matches extension, do not copy file */ do_copy = false; break; } } - if (!saveas.copy_media && (*i).find (peakfile_suffix) != string::npos) { + if (!saveas.copy_media && from.find (peakfile_suffix) != string::npos) { /* don't copy peakfiles if * we're not copying media */ @@ -4226,7 +4339,7 @@ Session::save_as (SaveAs& saveas) } if (do_copy) { - string to = Glib::build_filename (to_dir, (*i).substr (prefix_len)); + string to = Glib::build_filename (to_dir, from.substr (prefix_len)); info << "attempting to make directory/folder " << to << endmsg; @@ -4237,7 +4350,8 @@ Session::save_as (SaveAs& saveas) info << "attempting to copy " << from << " to " << to << endmsg; if (!copy_file (from, to)) { - throw Glib::FileError (Glib::FileError::IO_ERROR, "copy failed"); + throw Glib::FileError (Glib::FileError::IO_ERROR, + string_compose(_("\ncopying \"%1\" failed !"), from)); } } } @@ -4248,7 +4362,7 @@ Session::save_as (SaveAs& saveas) */ GStatBuf gsb; - g_stat ((*i).c_str(), &gsb); + g_stat (from.c_str(), &gsb); copied += gsb.st_size; cnt++; @@ -4343,6 +4457,7 @@ Session::save_as (SaveAs& saveas) if (internal_file_cnt) { for (vector<string>::iterator s = old_search_path[DataType::AUDIO].begin(); s != old_search_path[DataType::AUDIO].end(); ++s) { ensure_search_path_includes (*s, DataType::AUDIO); + cerr << "be sure to include " << *s << " for audio" << endl; } /* we do not do this for MIDI because we copy @@ -4364,6 +4479,8 @@ Session::save_as (SaveAs& saveas) } saveas.final_session_folder_name = _path; + + store_recent_sessions (_name, _path); if (!saveas.switch_to) { diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index d5adbc5b45..51734a06c0 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -314,12 +314,13 @@ Session::butler_transport_work () bool finished; PostTransportWork ptw; boost::shared_ptr<RouteList> r = routes.reader (); - + uint64_t before; + int on_entry = g_atomic_int_get (&_butler->should_do_transport_work); finished = true; ptw = post_transport_work(); - DEBUG_TRACE (DEBUG::Transport, string_compose ("Butler transport work, todo = %1\n", enum_2_string (ptw))); + DEBUG_TRACE (DEBUG::Transport, string_compose ("Butler transport work, todo = %1 at %2\n", enum_2_string (ptw), (before = g_get_monotonic_time()))); if (ptw & PostTransportAdjustPlaybackBuffering) { for (RouteList::iterator i = r->begin(); i != r->end(); ++i) { @@ -410,7 +411,7 @@ Session::butler_transport_work () g_atomic_int_dec_and_test (&_butler->should_do_transport_work); - DEBUG_TRACE (DEBUG::Transport, X_("Butler transport work all done\n")); + DEBUG_TRACE (DEBUG::Transport, string_compose (X_("Butler transport work all done after %1 usecs\n"), g_get_monotonic_time() - before)); DEBUG_TRACE (DEBUG::Transport, X_(string_compose ("Frame %1\n", _transport_frame))); } @@ -493,6 +494,106 @@ Session::non_realtime_locate () clear_clicks (); } +#ifdef USE_TRACKS_CODE_FEATURES +bool +Session::select_playhead_priority_target (framepos_t& jump_to) +{ + jump_to = -1; + + AutoReturnTarget autoreturn = Config->get_auto_return_target_list (); + + if (!autoreturn) { + return false; + } + + if (Profile->get_trx() && transport_rolling() ) { + // We're playing, so do nothing. + // Next stop will put us where we need to be. + return false; + } + + /* Note that the order of checking each AutoReturnTarget flag defines + the priority each flag. + + Ardour/Mixbus: Last Locate + Range Selection + Loop Range + Region Selection + + Tracks: Range Selection + Loop Range + Region Selection + Last Locate + */ + + if (autoreturn & RangeSelectionStart) { + if (!_range_selection.empty()) { + jump_to = _range_selection.from; + } else { + if (transport_rolling ()) { + /* Range selection no longer exists, but we're playing, + so do nothing. Next stop will put us where + we need to be. + */ + return false; + } + } + } + + if (jump_to < 0 && (autoreturn & Loop) && get_play_loop()) { + /* don't try to handle loop play when synced to JACK */ + + if (!synced_to_engine()) { + Location *location = _locations->auto_loop_location(); + + if (location) { + jump_to = location->start(); + + if (Config->get_seamless_loop()) { + /* need to get track buffers reloaded */ + set_track_loop (true); + } + } + } + } + + if (jump_to < 0 && (autoreturn & RegionSelectionStart)) { + if (!_object_selection.empty()) { + jump_to = _object_selection.from; + } + } + + if (jump_to < 0 && (autoreturn & LastLocate)) { + jump_to = _last_roll_location; + } + + return jump_to >= 0; +} +#else + +bool +Session::select_playhead_priority_target (framepos_t& jump_to) +{ + if (!config.get_auto_return()) { + return false; + } + + jump_to = _last_roll_location; + return jump_to >= 0; +} + +#endif + +void +Session::follow_playhead_priority () +{ + framepos_t target; + + if (select_playhead_priority_target (target)) { + request_locate (target); + } +} + void Session::non_realtime_stop (bool abort, int on_entry, bool& finished) { @@ -575,8 +676,7 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished) update_latency_compensation (); } - bool const auto_return_enabled = - (!config.get_external_sync() && (config.get_auto_return() || abort)); + bool const auto_return_enabled = (!config.get_external_sync() && (Config->get_auto_return_target_list() || abort)); if (auto_return_enabled || (ptw & PostTransportLocate) || @@ -602,40 +702,13 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished) do_locate = true; } else { - if (config.get_auto_return()) { - - if (play_loop) { - - /* don't try to handle loop play when synced to JACK */ + framepos_t jump_to; - if (!synced_to_engine()) { + if (select_playhead_priority_target (jump_to)) { - Location *location = _locations->auto_loop_location(); - - if (location != 0) { - _transport_frame = location->start(); - } else { - _transport_frame = _last_roll_location; - } - do_locate = true; - } - - } else if (_play_range) { - - /* return to start of range */ - - if (!current_audio_range.empty()) { - _transport_frame = current_audio_range.front().start; - do_locate = true; - } - - } else { - - /* regular auto-return */ + _transport_frame = jump_to; + do_locate = true; - _transport_frame = _last_roll_location; - do_locate = true; - } } else if (abort) { _transport_frame = _last_roll_location; @@ -1035,8 +1108,9 @@ Session::locate (framepos_t target_frame, bool with_roll, bool with_flush, bool */ bool transport_was_stopped = !transport_rolling(); - - if (transport_was_stopped && (!auto_play_legal || !config.get_auto_play()) && !with_roll && !(synced_to_engine() && play_loop)) { + + if (transport_was_stopped && (!auto_play_legal || !config.get_auto_play()) && !with_roll && !(synced_to_engine() && play_loop) && + (!Profile->get_trx() || !(config.get_external_sync() && !synced_to_engine()))) { realtime_stop (false, true); // XXX paul - check if the 2nd arg is really correct transport_was_stopped = true; } else { @@ -1216,7 +1290,7 @@ Session::set_transport_speed (double speed, framepos_t destination_frame, bool a } _engine.transport_stop (); } else { - bool const auto_return_enabled = (!config.get_external_sync() && (config.get_auto_return() || abort)); + bool const auto_return_enabled = (!config.get_external_sync() && (Config->get_auto_return_target_list() || abort)); if (!auto_return_enabled) { _requested_return_frame = destination_frame; @@ -1543,6 +1617,20 @@ Session::reset_rf_scale (framecnt_t motion) } void +Session::mtc_status_changed (bool yn) +{ + g_atomic_int_set (&_mtc_active, yn); + MTCSyncStateChanged( yn ); +} + +void +Session::ltc_status_changed (bool yn) +{ + g_atomic_int_set (&_ltc_active, yn); + LTCSyncStateChanged( yn ); +} + +void Session::use_sync_source (Slave* new_slave) { /* Runs in process() context */ @@ -1554,6 +1642,30 @@ Session::use_sync_source (Slave* new_slave) delete _slave; _slave = new_slave; + MTC_Slave* mtc_slave = dynamic_cast<MTC_Slave*>(_slave); + if (mtc_slave) { + mtc_slave->ActiveChanged.connect_same_thread (mtc_status_connection, boost::bind (&Session::mtc_status_changed, this, _1)); + MTCSyncStateChanged(mtc_slave->locked() ); + } else { + if (g_atomic_int_get (&_mtc_active) ){ + g_atomic_int_set (&_mtc_active, 0); + MTCSyncStateChanged( false ); + } + mtc_status_connection.disconnect (); + } + + LTC_Slave* ltc_slave = dynamic_cast<LTC_Slave*> (_slave); + if (ltc_slave) { + ltc_slave->ActiveChanged.connect_same_thread (ltc_status_connection, boost::bind (&Session::ltc_status_changed, this, _1)); + LTCSyncStateChanged (ltc_slave->locked() ); + } else { + if (g_atomic_int_get (&_ltc_active) ){ + g_atomic_int_set (&_ltc_active, 0); + LTCSyncStateChanged( false ); + } + ltc_status_connection.disconnect (); + } + DEBUG_TRACE (DEBUG::Slave, string_compose ("set new slave to %1\n", _slave)); // need to queue this for next process() cycle @@ -1789,8 +1901,6 @@ Session::engine_halted () */ if (_butler) { - g_atomic_int_set (&_butler->should_do_transport_work, 0); - set_post_transport_work (PostTransportWork (0)); _butler->stop (); } diff --git a/libs/ardour/source.cc b/libs/ardour/source.cc index 03039fea5b..ef0538b4d7 100644 --- a/libs/ardour/source.cc +++ b/libs/ardour/source.cc @@ -35,6 +35,7 @@ #include "pbd/enumwriter.h" #include "ardour/debug.h" +#include "ardour/profile.h" #include "ardour/session.h" #include "ardour/source.h" #include "ardour/transient_detector.h" @@ -144,6 +145,11 @@ Source::set_state (const XMLNode& node, int version) _flags = Flag (_flags | Destructive); } + if (Profile->get_trx() && (_flags & Destructive)) { + error << string_compose (_("%1: this session uses destructive tracks, which are not supported"), PROGRAM_NAME) << endmsg; + return -1; + } + if (version < 3000) { /* a source with an XML node must necessarily already exist, and therefore cannot be removable/writable etc. etc.; 2.X diff --git a/libs/ardour/sse_avx_functions_64bit_win.s b/libs/ardour/sse_avx_functions_64bit_win.s new file mode 100644 index 0000000000..2e82ab8728 --- /dev/null +++ b/libs/ardour/sse_avx_functions_64bit_win.s @@ -0,0 +1,600 @@ +/* + Copyright (C) 2005-2006 Paul Davis, John Rigg + + 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. + + Author: Sampo Savolainen + 64-bit conversion: John Rigg + + $Id$ +*/ + +#; Microsoft version of AVX sample processing functions + +#; void x86_sse_avx_mix_buffers_with_gain (float *dst, float *src, unsigned int nframes, float gain); + +.globl x86_sse_avx_mix_buffers_with_gain + .def x86_sse_avx_mix_buffers_with_gain; .scl 2; .type 32; +.endef + +x86_sse_avx_mix_buffers_with_gain: + +#; due to Microsoft calling convention +#; %rcx float *dst +#; %rdx float *src +#; %r8 unsigned int nframes +#; %xmm3 float gain + + pushq %rbp + movq %rsp, %rbp + + #; save the registers + pushq %rbx #; must be preserved + + #; move current max to %xmm0 for convenience + movss %xmm3, %xmm0 + + #; if nframes == 0, go to end + cmp $0, %r8 + je .MBWG_END + + #; Check for alignment + + movq %rcx, %rax + andq $28, %rax #; mask alignment offset + + movq %rdx, %rbx + andq $28, %rbx #; mask alignment offset + + cmp %rax, %rbx + jne .MBWG_NONALIGN #; if buffer are not aligned between each other, calculate manually + + #; if we are aligned + cmp $0, %rbx + jz .MBWG_AVX + + #; Pre-loop, we need to run 1-7 frames "manually" without + #; SSE instructions + +.MBWG_PRELOOP: + + #; gain is already in %xmm0 + movss (%rdx), %xmm1 + mulss %xmm0, %xmm1 + addss (%rcx), %xmm1 + movss %xmm1, (%rcx) + + addq $4, %rcx #; dst++ + addq $4, %rdx #; src++ + decq %r8 #; nframes-- + jz .MBWG_END + + addq $4, %rbx + + cmp $32, %rbx #; test if we've reached 32 byte alignment + jne .MBWG_PRELOOP + +.MBWG_AVX: + + cmp $8, %r8 #; we know it's not zero, but if it's not >=4, then + jl .MBWG_NONALIGN #; we jump straight to the "normal" code + + #; set up the gain buffer (gain is already in %xmm0) + vshufps $0x00, %ymm0, %ymm0, %ymm0 #; spread single float value to the first 128 bits of ymm0 register + vperm2f128 $0x00, %ymm0, %ymm0, %ymm0 #; extend the first 128 bits of ymm0 register to higher 128 bits + +.MBWG_AVXLOOP: + + vmovaps (%rdx), %ymm1 #; source => xmm0 + vmulps %ymm0, %ymm1, %ymm2 #; apply gain to source + vaddps (%rcx), %ymm2, %ymm1 #; mix with destination + vmovaps %ymm1, (%rcx) #; copy result to destination + + addq $32, %rcx #; dst+=8 + addq $32, %rdx #; src+=8 + + subq $8, %r8 #; nframes-=8 + cmp $8, %r8 + jge .MBWG_AVXLOOP + + #; zero upper 128 bits of all ymm registers to proceed with SSE operations without penalties + vzeroupper + + cmp $0, %r8 + je .MBWG_END + + #; if there are remaining frames, the nonalign code will do nicely + #; for the rest 1-7 frames. + +.MBWG_NONALIGN: + #; not aligned! + + #; gain is already in %xmm0 + +.MBWG_NONALIGNLOOP: + + movss (%rdx), %xmm1 + mulss %xmm0, %xmm1 + addss (%rcx), %xmm1 + movss %xmm1, (%rcx) + + addq $4, %rcx + addq $4, %rdx + + decq %r8 + jnz .MBWG_NONALIGNLOOP + +.MBWG_END: + + popq %rbx + + #; return + leave + ret + + +#; void x86_sse_avx_mix_buffers_no_gain (float *dst, float *src, unsigned int nframes); + +.globl x86_sse_avx_mix_buffers_no_gain + .def x86_sse_avx_mix_buffers_no_gain; .scl 2; .type 32; +.endef + +x86_sse_avx_mix_buffers_no_gain: + +#; due to Microsoft calling convention +#; %rcx float *dst +#; %rdx float *src +#; %r8 unsigned int nframes + + pushq %rbp + movq %rsp, %rbp + + #; save the registers + pushq %rbx #; must be preserved + + #; the real function + + #; if nframes == 0, go to end + cmp $0, %r8 + je .MBNG_END + + #; Check for alignment + + movq %rcx, %rax + andq $28, %rax #; mask alignment offset + + movq %rdx, %rbx + andq $28, %rbx #; mask alignment offset + + cmp %rax, %rbx + jne .MBNG_NONALIGN #; if not buffers are not aligned btween each other, calculate manually + + cmp $0, %rbx + je .MBNG_AVX #; aligned at 32, rpoceed to AVX + + #; Pre-loop, we need to run 1-7 frames "manually" without + #; AVX instructions + +.MBNG_PRELOOP: + + movss (%rdx), %xmm0 + addss (%rcx), %xmm0 + movss %xmm0, (%rcx) + + addq $4, %rcx #; dst++ + addq $4, %rdx #; src++ + + decq %r8 #; nframes-- + jz .MBNG_END + + addq $4, %rbx #; one non-aligned byte less + + cmp $32, %rbx #; test if we've reached 32 byte alignment + jne .MBNG_PRELOOP + +.MBNG_AVX: + + cmp $8, %r8 #; if there are frames left, but less than 8 + jl .MBNG_NONALIGN #; we can't run AVX + +.MBNG_AVXLOOP: + + vmovaps (%rdx), %ymm0 #; source => xmm0 + vaddps (%rcx), %ymm0, %ymm1 #; mix with destination + vmovaps %ymm1, (%rcx) #; copy result to destination + + addq $32, %rcx #; dst+=8 + addq $32, %rdx #; src+=8 + + subq $8, %r8 #; nframes-=8 + cmp $8, %r8 + jge .MBNG_AVXLOOP + + #; zero upper 128 bits of all ymm registers to proceed with SSE operations without penalties + vzeroupper + + cmp $0, %r8 + je .MBNG_END + + #; if there are remaining frames, the nonalign code will do nicely + #; for the rest 1-7 frames. + +.MBNG_NONALIGN: + #; not aligned! + #; + + movss (%rdx), %xmm0 #; src => xmm0 + addss (%rcx), %xmm0 #; xmm0 += dst + movss %xmm0, (%rcx) #; xmm0 => dst + + addq $4, %rcx + addq $4, %rdx + + decq %r8 + jnz .MBNG_NONALIGN + +.MBNG_END: + + popq %rbx + + #; return + leave + ret + + +#; void x86_sse_avx_copy_vector (float *dst, float *src, unsigned int nframes); + +.globl x86_sse_avx_copy_vector + .def x86_sse_avx_copy_vector; .scl 2; .type 32; +.endef + +x86_sse_avx_copy_vector: + +#; due to Microsoft calling convention +#; %rcx float *dst +#; %rdx float *src +#; %r8 unsigned int nframes + + pushq %rbp + movq %rsp, %rbp + + #; save the registers + pushq %rbx #; must be preserved + + #; the real function + + #; if nframes == 0, go to end + cmp $0, %r8 + je .CB_END + + #; Check for alignment + + movq %rcx, %rax + andq $28, %rax #; mask alignment offset + + movq %rdx, %rbx + andq $28, %rbx #; mask alignment offset + + cmp %rax, %rbx + jne .CB_NONALIGN #; if not buffers are not aligned btween each other, calculate manually + + cmp $0, %rbx + je .CB_AVX #; aligned at 32, rpoceed to AVX + + #; Pre-loop, we need to run 1-7 frames "manually" without + #; AVX instructions + +.CB_PRELOOP: + + movss (%rdx), %xmm0 + movss %xmm0, (%rcx) + + addq $4, %rcx #; dst++ + addq $4, %rdx #; src++ + + decq %r8 #; nframes-- + jz .CB_END + + addq $4, %rbx #; one non-aligned byte less + + cmp $32, %rbx #; test if we've reached 32 byte alignment + jne .CB_PRELOOP + +.CB_AVX: + + cmp $8, %r8 #; if there are frames left, but less than 8 + jl .CB_NONALIGN #; we can't run AVX + +.CB_AVXLOOP: + + vmovaps (%rdx), %ymm0 #; source => xmm0 + vmovaps %ymm0, (%rcx) #; copy result to destination + + addq $32, %rcx #; dst+=8 + addq $32, %rdx #; src+=8 + + subq $8, %r8 #; nframes-=8 + cmp $8, %r8 + jge .CB_AVXLOOP + + #; zero upper 128 bits of all ymm registers to proceed with SSE operations without penalties + vzeroupper + + cmp $0, %r8 + je .CB_END + + #; if there are remaining frames, the nonalign code will do nicely + #; for the rest 1-7 frames. + +.CB_NONALIGN: + #; not aligned! + #; + + movss (%rdx), %xmm0 #; src => xmm0 + movss %xmm0, (%rcx) #; xmm0 => dst + + addq $4, %rcx + addq $4, %rdx + + decq %r8 + jnz .CB_NONALIGN + +.CB_END: + + popq %rbx + + #; return + leave + ret + + +#; void x86_sse_avx_apply_gain_to_buffer (float *buf, unsigned int nframes, float gain); + +.globl x86_sse_avx_apply_gain_to_buffer + .def x86_sse_avx_apply_gain_to_buffer; .scl 2; .type 32; +.endef + +x86_sse_avx_apply_gain_to_buffer: + +#; due to Microsoft calling convention +#; %rcx float *buf 32(%rbp) +#; %rdx unsigned int nframes +#; %xmm2 float gain avx specific register + + pushq %rbp + movq %rsp, %rbp + + #; move current max to %xmm0 for convenience + movss %xmm2, %xmm0 + + #; the real function + + #; if nframes == 0, go to end + cmp $0, %rdx + je .AG_END + + #; Check for alignment + + movq %rcx, %r8 #; buf => %rdx + andq $28, %r8 #; check alignment with mask 11100 + jz .AG_AVX #; if buffer IS aligned + + #; PRE-LOOP + #; we iterate 1-7 times, doing normal x87 float comparison + #; so we reach a 32 byte aligned "buf" (=%rdi) value + +.AGLP_START: + + #; Load next value from the buffer into %xmm1 + movss (%rcx), %xmm1 + mulss %xmm0, %xmm1 + movss %xmm1, (%rcx) + + #; increment buffer, decrement counter + addq $4, %rcx #; buf++; + + decq %rdx #; nframes-- + jz .AG_END #; if we run out of frames, we go to the end + + addq $4, %r8 #; one non-aligned byte less + cmp $16, %r8 + jne .AGLP_START #; if more non-aligned frames exist, we do a do-over + +.AG_AVX: + + #; We have reached the 32 byte aligned "buf" ("rcx") value + #; use AVX instructions + + #; Figure out how many loops we should do + movq %rdx, %rax #; copy remaining nframes to %rax for division + + shr $3, %rax #; unsigned divide by 8 + + #; %rax = AVX iterations + cmp $0, %rax + je .AGPOST_START + + #; set up the gain buffer (gain is already in %xmm0) + vshufps $0x00, %ymm0, %ymm0, %ymm0 #; spread single float value to the first 128 bits of ymm0 register + vperm2f128 $0x00, %ymm0, %ymm0, %ymm0 #; extend the first 128 bits of ymm0 register to higher 128 bits + +.AGLP_AVX: + + vmovaps (%rcx), %ymm1 + vmulps %ymm0, %ymm1, %ymm2 + vmovaps %ymm2, (%rcx) + + addq $32, %rcx #; buf + 8 + subq $8, %rdx #; nframes-=8 + + decq %rax + jnz .AGLP_AVX + + #; zero upper 128 bits of all ymm registers to proceed with SSE operations without penalties + vzeroupper + + #; Next we need to post-process all remaining frames + #; the remaining frame count is in %rcx + cmpq $0, %rdx #; + jz .AG_END + +.AGPOST_START: + + movss (%rcx), %xmm1 + mulss %xmm0, %xmm1 + movss %xmm1, (%rcx) + + #; increment buffer, decrement counter + addq $4, %rcx #; buf++; + + decq %rdx #; nframes-- + jnz .AGPOST_START #; if we run out of frames, we go to the end + +.AG_END: + + #; return + leave + ret + +#; end proc + + +#; float x86_sse_avx_compute_peak(float *buf, long nframes, float current); + +.globl x86_sse_avx_compute_peak + .def x86_sse_avx_compute_peak; .scl 2; .type 32; +.endef + +x86_sse_avx_compute_peak: + +#; due to Microsoft calling convention +#; %rcx float* buf 32(%rbp) +#; %rdx unsigned int nframes +#; %xmm2 float current + + pushq %rbp + movq %rsp, %rbp + + #; move current max to %xmm0 for convenience + movss %xmm2, %xmm0 + + #; if nframes == 0, go to end + cmp $0, %rdx + je .CP_END + + #; create the "abs" mask in %xmm3 + #; if will be used to discard sign bit + pushq $2147483647 + movss (%rsp), %xmm3 + addq $8, %rsp + + #; Check for alignment + movq %rcx, %r8 #; buf => %rdx + andq $28, %r8 #; mask bits 1 & 2 + jz .CP_AVX #; if buffer IS aligned + + #; PRE-LOOP + #; we iterate 1-7 times, doing normal x87 float comparison + #; so we reach a 32 byte aligned "buf" (=%rcx) value + +.LP_START: + + #; Load next value from the buffer + movss (%rcx), %xmm1 + andps %xmm3, %xmm1 #; mask out sign bit + maxss %xmm1, %xmm0 + + #; increment buffer, decrement counter + addq $4, %rcx #; buf++; + + decq %rdx #; nframes-- + jz .CP_END #; if we run out of frames, we go to the end + + addq $4, %r8 #; one non-aligned byte less + cmp $32, %r8 + jne .LP_START #; if more non-aligned frames exist, we do a do-over + +.CP_AVX: + + #; We have reached the 32 byte aligned "buf" ("rdi") value + + #; Figure out how many loops we should do + movq %rdx, %rax #; copy remaining nframes to %rax for division + + shr $3, %rax #; unsigned divide by 8 + jz .POST_START + + #; %rax = AVX iterations + + #; current maximum is at %xmm0, but we need to broadcast it to the whole ymm0 register.. + vshufps $0x00, %ymm0, %ymm0, %ymm0 #; spread single float value to the all 128 bits of xmm0 register + vperm2f128 $0x00, %ymm0, %ymm0, %ymm0 #; extend the first 128 bits of ymm0 register to higher 128 bits + + #; broadcast sign mask to the whole ymm3 register + vshufps $0x00, %ymm3, %ymm3, %ymm3 #; spread single float value to the all 128 bits of xmm3 register + vperm2f128 $0x00, %ymm3, %ymm3, %ymm3 #; extend the first 128 bits of ymm3 register to higher 128 bits + +.LP_AVX: + + vmovaps (%rcx), %ymm1 + vandps %ymm3, %ymm1, %ymm1 #; mask out sign bit + vmaxps %ymm1, %ymm0, %ymm0 + + addq $32, %rcx #; buf+=8 + subq $8, %rdx #; nframes-=8 + + decq %rax + jnz .LP_AVX + + #; Calculate the maximum value contained in the 4 FP's in %ymm0 + vshufps $0x4e, %ymm0, %ymm0, %ymm1 #; shuffle left & right pairs (1234 => 3412) in each 128 bit half + vmaxps %ymm1, %ymm0, %ymm0 #; maximums of the four pairs, if each of 8 elements was unique, 4 unique elements left now + vshufps $0xb1, %ymm0, %ymm0, %ymm1 #; shuffle the floats inside pairs (1234 => 2143) in each 128 bit half + vmaxps %ymm1, %ymm0, %ymm0 #; maximums of the four pairs, we had up to 4 unique elements was unique, 2 unique elements left now + vperm2f128 $0x01, %ymm0, %ymm0, %ymm1 #; swap 128 bit halfs + vmaxps %ymm1, %ymm0, %ymm0 #; the result will be - all 8 elemens are maximums + + #; now every float in %ymm0 is the same value, current maximum value + + #; Next we need to post-process all remaining frames + #; the remaining frame count is in %rcx + + #; zero upper 128 bits of all ymm registers to proceed with SSE operations without penalties + vzeroupper + + #; if no remaining frames, jump to the end + cmp $0, %rdx + je .CP_END + +.POST_START: + + movss (%rcx), %xmm1 + andps %xmm3, %xmm1 #; mask out sign bit + maxss %xmm1, %xmm0 + + addq $4, %rcx #; buf++; + + decq %rdx #; nframes--; + jnz .POST_START + +.CP_END: + + #; return value is in xmm0 + + #; return + leave + ret + +#; end proc
\ No newline at end of file diff --git a/libs/ardour/sse_functions_avx.cc b/libs/ardour/sse_functions_avx.cc new file mode 100644 index 0000000000..89cb91f2ea --- /dev/null +++ b/libs/ardour/sse_functions_avx.cc @@ -0,0 +1,119 @@ +/* + Copyright (C) 2007 Paul sDavis + Written by Sampo Savolainen + + 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. + +*/ + +#include <xmmintrin.h> +#include <immintrin.h> +#include <stdint.h> + + +void +x86_sse_avx_find_peaks(const float* buf, uint32_t nframes, float *min, float *max) +{ + __m256 current_max, current_min, work; + + // Load max and min values into all eight slots of the YMM registers + current_min = _mm256_set1_ps(*min); + current_max = _mm256_set1_ps(*max); + + // Work input until "buf" reaches 16 byte alignment + while ( ((intptr_t)buf) % 32 != 0 && nframes > 0) { + + // Load the next float into the work buffer + work = _mm256_set1_ps(*buf); + + current_min = _mm256_min_ps(current_min, work); + current_max = _mm256_max_ps(current_max, work); + + buf++; + nframes--; + } + + // use 64 byte prefetch for quadruple quads: + // load each 64 bytes into cash before processing + while (nframes >= 16) { +#if defined(COMPILER_MSVC) || defined(COMPILER_MINGW) + _mm_prefetch(((char*)buf+64), _mm_hint(0) ); +#else + __builtin_prefetch(buf+64,0,0); +#endif + work = _mm256_load_ps(buf); + current_min = _mm256_min_ps(current_min, work); + current_max = _mm256_max_ps(current_max, work); + buf+=8; + work = _mm256_load_ps(buf); + current_min = _mm256_min_ps(current_min, work); + current_max = _mm256_max_ps(current_max, work); + buf+=8; + + nframes-=16; + } + + // work through 32 bytes aligned buffers + while (nframes >= 8) { + + work = _mm256_load_ps(buf); + + current_min = _mm256_min_ps(current_min, work); + current_max = _mm256_max_ps(current_max, work); + + buf+=8; + nframes-=8; + } + + // work through the rest < 4 samples + while ( nframes > 0) { + + // Load the next float into the work buffer + work = _mm256_set1_ps(*buf); + + current_min = _mm256_min_ps(current_min, work); + current_max = _mm256_max_ps(current_max, work); + + buf++; + nframes--; + } + + // Find min & max value in current_max through shuffle tricks + + work = current_min; + work = _mm256_shuffle_ps (current_min, current_min, _MM_SHUFFLE(2, 3, 0, 1)); + current_min = _mm256_min_ps (work, current_min); + work = _mm256_shuffle_ps (current_min, current_min, _MM_SHUFFLE(1, 0, 3, 2)); + current_min = _mm256_min_ps (work, current_min); + work = _mm256_permute2f128_ps( current_min, current_min, 1); + current_min = _mm256_min_ps (work, current_min); + + *min = current_min[0]; + + work = current_max; + work = _mm256_shuffle_ps(current_max, current_max, _MM_SHUFFLE(2, 3, 0, 1)); + current_max = _mm256_max_ps (work, current_max); + work = _mm256_shuffle_ps(current_max, current_max, _MM_SHUFFLE(1, 0, 3, 2)); + current_max = _mm256_max_ps (work, current_max); + work = _mm256_permute2f128_ps( current_max, current_max, 1); + current_max = _mm256_max_ps (work, current_max); + + *max = current_max[0]; + + // zero upper 128 bit of 256 bit ymm register to avoid penalties using non-AVX instructions + _mm256_zeroupper (); +} + + diff --git a/libs/ardour/sse_functions_avx_linux.cc b/libs/ardour/sse_functions_avx_linux.cc new file mode 100644 index 0000000000..9f56595e4e --- /dev/null +++ b/libs/ardour/sse_functions_avx_linux.cc @@ -0,0 +1,56 @@ +/* + Copyright (C) 2015 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. + +*/ + +#include "ardour/mix.h" + +float +x86_sse_avx_compute_peak (const float * buf, uint32_t nsamples, float current) +{ + return default_compute_peak (buf, nsamples, current); +} + +void +x86_sse_avx_apply_gain_to_buffer (float * buf, uint32_t nframes, float gain) +{ + default_apply_gain_to_buffer (buf, nframes, gain); +} + +void +x86_sse_avx_mix_buffers_with_gain (float * dst, const float * src, uint32_t nframes, float gain) +{ + default_mix_buffers_with_gain (dst, src, nframes, gain); +} + +void +x86_sse_avx_mix_buffers_no_gain (float * dst, const float * src, uint32_t nframes) +{ + default_mix_buffers_no_gain (dst, src, nframes); +} + +void +x86_sse_avx_copy_vector (float * dst, const float * src, uint32_t nframes) +{ + default_copy_vector (dst, src, nframes); +} + +void +x86_sse_avx_find_peaks (const float * buf, uint32_t nsamples, float *min, float *max) +{ + default_find_peaks (buf, nsamples, min, max); +} diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc index b9ad1be682..82520c19ea 100644 --- a/libs/ardour/tempo.cc +++ b/libs/ardour/tempo.cc @@ -1737,11 +1737,13 @@ TempoMap::set_state (const XMLNode& node, int /*version*/) if (prev != metrics.end()) { if (dynamic_cast<MeterSection*>(*prev) && dynamic_cast<MeterSection*>(*i)) { if ((*prev)->start() == (*i)->start()) { + cerr << string_compose (_("Multiple meter definitions found at %1"), (*prev)->start()) << endmsg; error << string_compose (_("Multiple meter definitions found at %1"), (*prev)->start()) << endmsg; return -1; } } else if (dynamic_cast<TempoSection*>(*prev) && dynamic_cast<TempoSection*>(*i)) { if ((*prev)->start() == (*i)->start()) { + cerr << string_compose (_("Multiple tempo definitions found at %1"), (*prev)->start()) << endmsg; error << string_compose (_("Multiple tempo definitions found at %1"), (*prev)->start()) << endmsg; return -1; } @@ -1901,7 +1903,7 @@ TempoMap::insert_time (framepos_t where, framecnt_t amount) PropertyChanged (PropertyChange ()); } bool -TempoMap::cut_time (framepos_t where, framecnt_t amount) +TempoMap::remove_time (framepos_t where, framecnt_t amount) { bool moved = false; @@ -1909,6 +1911,8 @@ TempoMap::cut_time (framepos_t where, framecnt_t amount) TempoSection* last_tempo = NULL; MeterSection* last_meter = NULL; + bool tempo_after = false; // is there a tempo marker at the first sample after the removed range? + bool meter_after = false; // is there a meter marker likewise? { Glib::Threads::RWLock::WriterLock lm (lock); for (Metrics::iterator i = metrics.begin(); i != metrics.end(); ++i) { @@ -1922,18 +1926,24 @@ TempoMap::cut_time (framepos_t where, framecnt_t amount) last_meter = lm; } else if ((*i)->frame() >= where) { + // TODO: make sure that moved tempo/meter markers are rounded to beat/bar boundaries (*i)->set_frame ((*i)->frame() - amount); + if ((*i)->frame() == where) { + // marker was immediately after end of range + tempo_after = dynamic_cast<TempoSection*> (*i); + meter_after = dynamic_cast<MeterSection*> (*i); + } moved = true; } } //find the last TEMPO and METER metric (if any) and move it to the cut point so future stuff is correct - if (last_tempo) { + if (last_tempo && !tempo_after) { metric_kill_list.remove(last_tempo); last_tempo->set_frame(where); moved = true; } - if (last_meter) { + if (last_meter && !meter_after) { metric_kill_list.remove(last_meter); last_meter->set_frame(where); moved = true; diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index 92ea993470..2d46c60132 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -930,6 +930,65 @@ Track::adjust_capture_buffering () } } +#ifdef USE_TRACKS_CODE_FEATURES + +/* This is the Tracks version of Track::monitoring_state(). + * + * Ardour developers: try to flag or fix issues if parts of the libardour API + * change in ways that invalidate this + */ + +MonitorState +Track::monitoring_state () const +{ + /* Explicit requests */ + + if (_monitoring & MonitorInput) { + return MonitoringInput; + } + + if (_monitoring & MonitorDisk) { + return MonitoringDisk; + } + + /* This is an implementation of the truth table in doc/monitor_modes.pdf; + I don't think it's ever going to be too pretty too look at. + */ + + // GZ: NOT USED IN TRACKS + //bool const auto_input = _session.config.get_auto_input (); + //bool const software_monitor = Config->get_monitoring_model() == SoftwareMonitoring; + //bool const tape_machine_mode = Config->get_tape_machine_mode (); + + bool const roll = _session.transport_rolling (); + bool const track_rec = _diskstream->record_enabled (); + bool session_rec = _session.actively_recording (); + + if (track_rec) { + + if (!session_rec && roll) { + return MonitoringDisk; + } else { + return MonitoringInput; + } + + } else { + + if (roll) { + return MonitoringDisk; + } + } + + return MonitoringSilence; +} + +#else + +/* This is the Ardour/Mixbus version of Track::monitoring_state(). + * + * Tracks developers: do NOT modify this method under any circumstances. + */ + MonitorState Track::monitoring_state () const { @@ -995,6 +1054,8 @@ Track::monitoring_state () const return MonitoringSilence; } +#endif + void Track::maybe_declick (BufferSet& bufs, framecnt_t nframes, int declick) { diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc index 6d6511bb9f..270aaa37fd 100644 --- a/libs/ardour/utils.cc +++ b/libs/ardour/utils.cc @@ -467,6 +467,10 @@ ARDOUR::string_to_sync_source (string str) return Engine; } + if (str == _("LTC")) { + return LTC; + } + fatal << string_compose (_("programming error: unknown sync source string \"%1\""), str) << endmsg; abort(); /*NOTREACHED*/ return Engine; @@ -521,11 +525,8 @@ ARDOUR::meter_falloff_to_float (MeterFalloff falloff) case MeterFalloffModerate: return METER_FALLOFF_MODERATE; case MeterFalloffFast: - return METER_FALLOFF_FAST; - case MeterFalloffFaster: - return METER_FALLOFF_FASTER; + case MeterFalloffFaster: // backwards compat enum MeterFalloff case MeterFalloffFastest: - return METER_FALLOFF_FASTEST; default: return METER_FALLOFF_FAST; } @@ -552,14 +553,8 @@ ARDOUR::meter_falloff_from_float (float val) else if (val <= METER_FALLOFF_MEDIUM) { return MeterFalloffMedium; } - else if (val <= METER_FALLOFF_FAST) { - return MeterFalloffFast; - } - else if (val <= METER_FALLOFF_FASTER) { - return MeterFalloffFaster; - } else { - return MeterFalloffFastest; + return MeterFalloffFast; } } diff --git a/libs/ardour/vst_info_file.cc b/libs/ardour/vst_info_file.cc index 3b56876494..b45a285f9b 100644 --- a/libs/ardour/vst_info_file.cc +++ b/libs/ardour/vst_info_file.cc @@ -55,12 +55,6 @@ #define MAX_STRING_LEN 256 #define PLUGIN_SCAN_TIMEOUT (Config->get_vst_scan_timeout()) // in deciseconds - -/* CACHE FILE PATHS */ -#define EXT_BLACKLIST ".fsb" -#define EXT_ERRORFILE ".err" -#define EXT_INFOFILE ".fsi" - #ifdef PLATFORM_WINDOWS #define PFX_DOTFILE "" #else @@ -118,21 +112,21 @@ vstfx_blacklist_path (const char* dllpath, int personal) } stringstream s; - s << PFX_DOTFILE << Glib::path_get_basename (dllpath) << EXT_BLACKLIST; + s << PFX_DOTFILE << Glib::path_get_basename (dllpath) << VST_EXT_BLACKLIST; return Glib::build_filename (dir, s.str ()); } static string vstfx_infofile_path (const char* dllpath, int personal) { - return vstfx_cache_file(dllpath, personal, EXT_INFOFILE); + return vstfx_cache_file(dllpath, personal, VST_EXT_INFOFILE); } #ifndef VST_SCANNER_APP static string vstfx_errorfile_path (const char* dllpath, int personal) { - return vstfx_cache_file(dllpath, personal, EXT_ERRORFILE); + return vstfx_cache_file(dllpath, personal, VST_EXT_ERRORFILE); } #endif diff --git a/libs/ardour/wscript b/libs/ardour/wscript index 918408c06d..b2bbf432a2 100644 --- a/libs/ardour/wscript +++ b/libs/ardour/wscript @@ -331,15 +331,19 @@ def build(bld): # micro increment <=> no interface changes LIBARDOUR_LIB_VERSION = "3.0.0" + sources = libardour_sources + if bld.is_tracks_build(): + sources += [ 'engine_state_controller.cc' ] + # Library if bld.is_defined ('INTERNAL_SHARED_LIBS'): - obj = bld.shlib(features = 'c cxx cshlib cxxshlib', source=libardour_sources) + obj = bld.shlib(features = 'c cxx cshlib cxxshlib', source=sources) # macros for this shared library obj.defines = [ 'LIBARDOUR_DLL_EXPORTS=1' ] else: - obj = bld.stlib(features = 'c cxx cstlib cxxstlib', source=libardour_sources) - obj.cxxflags = [ '-fPIC' ] - obj.cflags = [ '-fPIC' ] + obj = bld.stlib(features = 'c cxx cstlib cxxstlib', source=sources) + obj.cxxflags = [ bld.env['compiler_flags_dict']['pic'] ] + obj.cflags = [ bld.env['compiler_flags_dict']['pic'] ] obj.defines = [] obj.export_includes = ['.'] @@ -403,18 +407,39 @@ def build(bld): if bld.is_defined('AUDIOUNIT_SUPPORT'): obj.source += [ 'audio_unit.cc' ] + avx_sources = [] + if Options.options.fpu_optimization: if (bld.env['build_target'] == 'i386' or bld.env['build_target'] == 'i686'): - obj.source += [ 'sse_functions_xmm.cc', 'sse_functions.s' ] + obj.source += [ 'sse_functions_xmm.cc', 'sse_functions.s', ] + avx_sources = [ 'sse_functions_avx_linux.cc' ] elif bld.env['build_target'] == 'x86_64': - obj.source += [ 'sse_functions_xmm.cc', 'sse_functions_64bit.s' ] + obj.source += [ 'sse_functions_xmm.cc', 'sse_functions_64bit.s', ] + avx_sources = [ 'sse_functions_avx_linux.cc' ] elif bld.env['build_target'] == 'mingw': - # usability of the 64 bit windows assembler depends on the compiler target, - # not the build host, which in turn can only be inferred from the name - # of the compiler. - if re.search ('/^x86_64/', str(bld.env['CC'])): - obj.source += [ 'sse_functions_xmm.cc', 'sse_functions_64bit_win.s' ] - + # usability of the 64 bit windows assembler depends on the compiler target, + # not the build host, which in turn can only be inferred from the name + # of the compiler. + if re.search ('/^x86_64/', str(bld.env['CC'])): + obj.source += [ 'sse_functions_xmm.cc' ] + obj.source += [ 'sse_functions_64bit_win.s', 'sse_avx_functions_64bit_win.s' ] + avx_sources = [ 'sse_functions_avx.cc' ] + + if avx_sources: + # as long as we want to use AVX intrinsics in this file, + # compile it with -mavx flag - append avx flag to the existing + avx_cxxflags = list(bld.env['CXXFLAGS']) + avx_cxxflags.append (bld.env['compiler_flags_dict']['avx']) + avx_cxxflags.append (bld.env['compiler_flags_dict']['pic']) + bld(features = 'cxx', + source = avx_sources, + cxxflags = avx_cxxflags, + includes = [ '.' ], + use = [ 'libtimecode', 'libpbd', 'libevoral', ], + target = 'sse_avx_functions') + + obj.use += ['sse_avx_functions' ] + # i18n if bld.is_defined('ENABLE_NLS'): mo_files = bld.path.ant_glob('po/*.mo') diff --git a/libs/audiographer/macos/audiographer/audiographer.xcodeproj/project.pbxproj b/libs/audiographer/macos/audiographer/audiographer.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..650b7e1ad7 --- /dev/null +++ b/libs/audiographer/macos/audiographer/audiographer.xcodeproj/project.pbxproj @@ -0,0 +1,166 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXFileReference section */ + 435E66801A4AB63D00472D50 /* broadcast_info.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = broadcast_info.h; path = ../../audiographer/broadcast_info.h; sourceTree = "<group>"; }; + 435E66811A4AB63D00472D50 /* debug_utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = debug_utils.h; path = ../../audiographer/debug_utils.h; sourceTree = "<group>"; }; + 435E66821A4AB63D00472D50 /* debuggable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = debuggable.h; path = ../../audiographer/debuggable.h; sourceTree = "<group>"; }; + 435E66831A4AB63D00472D50 /* exception.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = exception.h; path = ../../audiographer/exception.h; sourceTree = "<group>"; }; + 435E66841A4AB63D00472D50 /* flag_debuggable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flag_debuggable.h; path = ../../audiographer/flag_debuggable.h; sourceTree = "<group>"; }; + 435E66851A4AB63D00472D50 /* flag_field.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flag_field.h; path = ../../audiographer/flag_field.h; sourceTree = "<group>"; }; + 435E66861A4AB63D00472D50 /* process_context.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = process_context.h; path = ../../audiographer/process_context.h; sourceTree = "<group>"; }; + 435E66871A4AB63D00472D50 /* routines.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = routines.h; path = ../../audiographer/routines.h; sourceTree = "<group>"; }; + 435E66881A4AB63D00472D50 /* sink.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sink.h; path = ../../audiographer/sink.h; sourceTree = "<group>"; }; + 435E66891A4AB63D00472D50 /* source.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = source.h; path = ../../audiographer/source.h; sourceTree = "<group>"; }; + 435E668A1A4AB63D00472D50 /* throwing.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = throwing.h; path = ../../audiographer/throwing.h; sourceTree = "<group>"; }; + 435E668B1A4AB63D00472D50 /* type_utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = type_utils.h; path = ../../audiographer/type_utils.h; sourceTree = "<group>"; }; + 435E668C1A4AB63D00472D50 /* types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../../audiographer/types.h; sourceTree = "<group>"; }; + 435E668D1A4AB63D00472D50 /* visibility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = visibility.h; path = ../../audiographer/visibility.h; sourceTree = "<group>"; }; + 435E668E1A4AB64B00472D50 /* chunker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = chunker.h; path = ../../audiographer/general/chunker.h; sourceTree = "<group>"; }; + 435E668F1A4AB64B00472D50 /* deinterleaver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = deinterleaver.h; path = ../../audiographer/general/deinterleaver.h; sourceTree = "<group>"; }; + 435E66901A4AB64B00472D50 /* interleaver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = interleaver.h; path = ../../audiographer/general/interleaver.h; sourceTree = "<group>"; }; + 435E66911A4AB64B00472D50 /* normalizer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = normalizer.h; path = ../../audiographer/general/normalizer.h; sourceTree = "<group>"; }; + 435E66921A4AB64B00472D50 /* peak_reader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = peak_reader.h; path = ../../audiographer/general/peak_reader.h; sourceTree = "<group>"; }; + 435E66931A4AB64B00472D50 /* sample_format_converter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sample_format_converter.h; path = ../../audiographer/general/sample_format_converter.h; sourceTree = "<group>"; }; + 435E66941A4AB64B00472D50 /* silence_trimmer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = silence_trimmer.h; path = ../../audiographer/general/silence_trimmer.h; sourceTree = "<group>"; }; + 435E66951A4AB64B00472D50 /* sr_converter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sr_converter.h; path = ../../audiographer/general/sr_converter.h; sourceTree = "<group>"; }; + 435E66961A4AB64B00472D50 /* threader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = threader.h; path = ../../audiographer/general/threader.h; sourceTree = "<group>"; }; + 435E66981A4AB66B00472D50 /* sndfile_base.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sndfile_base.h; path = ../../audiographer/sndfile/sndfile_base.h; sourceTree = "<group>"; }; + 435E66991A4AB66B00472D50 /* sndfile_reader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sndfile_reader.h; path = ../../audiographer/sndfile/sndfile_reader.h; sourceTree = "<group>"; }; + 435E669A1A4AB66B00472D50 /* sndfile_writer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sndfile_writer.h; path = ../../audiographer/sndfile/sndfile_writer.h; sourceTree = "<group>"; }; + 435E669B1A4AB66B00472D50 /* sndfile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sndfile.h; path = ../../audiographer/sndfile/sndfile.h; sourceTree = "<group>"; }; + 435E669C1A4AB66B00472D50 /* tmp_file.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = tmp_file.h; path = ../../audiographer/sndfile/tmp_file.h; sourceTree = "<group>"; }; + 435E669D1A4AB67A00472D50 /* identity_vertex.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = identity_vertex.h; path = ../../audiographer/utils/identity_vertex.h; sourceTree = "<group>"; }; + 435E669E1A4AB67A00472D50 /* listed_source.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = listed_source.h; path = ../../audiographer/utils/listed_source.h; sourceTree = "<group>"; }; + 435E669F1A4AB69E00472D50 /* debug_utils.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = debug_utils.cc; path = ../../src/debug_utils.cc; sourceTree = "<group>"; }; + 435E66A01A4AB69E00472D50 /* routines.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = routines.cc; path = ../../src/routines.cc; sourceTree = "<group>"; }; + 435E66A11A4AB6A800472D50 /* broadcast_info.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = broadcast_info.cc; path = ../../src/general/broadcast_info.cc; sourceTree = "<group>"; }; + 435E66A21A4AB6A800472D50 /* normalizer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = normalizer.cc; path = ../../src/general/normalizer.cc; sourceTree = "<group>"; }; + 435E66A31A4AB6A800472D50 /* sample_format_converter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sample_format_converter.cc; path = ../../src/general/sample_format_converter.cc; sourceTree = "<group>"; }; + 435E66A41A4AB6A800472D50 /* sr_converter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sr_converter.cc; path = ../../src/general/sr_converter.cc; sourceTree = "<group>"; }; +/* End PBXFileReference section */ + +/* Begin PBXGroup section */ + 435E66711A4AB60C00472D50 = { + isa = PBXGroup; + children = ( + 435E667F1A4AB61C00472D50 /* headers */, + 435E667E1A4AB61400472D50 /* src */, + ); + sourceTree = "<group>"; + }; + 435E667E1A4AB61400472D50 /* src */ = { + isa = PBXGroup; + children = ( + 435E66A11A4AB6A800472D50 /* broadcast_info.cc */, + 435E66A21A4AB6A800472D50 /* normalizer.cc */, + 435E66A31A4AB6A800472D50 /* sample_format_converter.cc */, + 435E66A41A4AB6A800472D50 /* sr_converter.cc */, + 435E669F1A4AB69E00472D50 /* debug_utils.cc */, + 435E66A01A4AB69E00472D50 /* routines.cc */, + ); + name = src; + sourceTree = "<group>"; + }; + 435E667F1A4AB61C00472D50 /* headers */ = { + isa = PBXGroup; + children = ( + 435E66971A4AB65700472D50 /* SND */, + 435E668E1A4AB64B00472D50 /* chunker.h */, + 435E668F1A4AB64B00472D50 /* deinterleaver.h */, + 435E66901A4AB64B00472D50 /* interleaver.h */, + 435E669D1A4AB67A00472D50 /* identity_vertex.h */, + 435E669E1A4AB67A00472D50 /* listed_source.h */, + 435E66911A4AB64B00472D50 /* normalizer.h */, + 435E66921A4AB64B00472D50 /* peak_reader.h */, + 435E66931A4AB64B00472D50 /* sample_format_converter.h */, + 435E66941A4AB64B00472D50 /* silence_trimmer.h */, + 435E66951A4AB64B00472D50 /* sr_converter.h */, + 435E66961A4AB64B00472D50 /* threader.h */, + 435E66801A4AB63D00472D50 /* broadcast_info.h */, + 435E66811A4AB63D00472D50 /* debug_utils.h */, + 435E66821A4AB63D00472D50 /* debuggable.h */, + 435E66831A4AB63D00472D50 /* exception.h */, + 435E66841A4AB63D00472D50 /* flag_debuggable.h */, + 435E66851A4AB63D00472D50 /* flag_field.h */, + 435E66861A4AB63D00472D50 /* process_context.h */, + 435E66871A4AB63D00472D50 /* routines.h */, + 435E66881A4AB63D00472D50 /* sink.h */, + 435E66891A4AB63D00472D50 /* source.h */, + 435E668A1A4AB63D00472D50 /* throwing.h */, + 435E668B1A4AB63D00472D50 /* type_utils.h */, + 435E668C1A4AB63D00472D50 /* types.h */, + 435E668D1A4AB63D00472D50 /* visibility.h */, + ); + name = headers; + sourceTree = "<group>"; + }; + 435E66971A4AB65700472D50 /* SND */ = { + isa = PBXGroup; + children = ( + 435E66981A4AB66B00472D50 /* sndfile_base.h */, + 435E66991A4AB66B00472D50 /* sndfile_reader.h */, + 435E669A1A4AB66B00472D50 /* sndfile_writer.h */, + 435E669B1A4AB66B00472D50 /* sndfile.h */, + 435E669C1A4AB66B00472D50 /* tmp_file.h */, + ); + name = SND; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXProject section */ + 435E66721A4AB60C00472D50 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + }; + buildConfigurationList = 435E66751A4AB60C00472D50 /* Build configuration list for PBXProject "audiographer" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 435E66711A4AB60C00472D50; + projectDirPath = ""; + projectRoot = ""; + targets = ( + ); + }; +/* End PBXProject section */ + +/* Begin XCBuildConfiguration section */ + 435E66761A4AB60C00472D50 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Debug; + }; + 435E66771A4AB60C00472D50 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 435E66751A4AB60C00472D50 /* Build configuration list for PBXProject "audiographer" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 435E66761A4AB60C00472D50 /* Debug */, + 435E66771A4AB60C00472D50 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 435E66721A4AB60C00472D50 /* Project object */; +} diff --git a/libs/audiographer/wscript b/libs/audiographer/wscript index 2fe2739741..d3efbf59ef 100644 --- a/libs/audiographer/wscript +++ b/libs/audiographer/wscript @@ -70,7 +70,7 @@ def build(bld): # macros for this shared library audiographer.defines = [ 'LIBAUDIOGRAPHER_DLL_EXPORTS=1' ] else: - audiographer = bld.stlib(features = 'c cxx cstlib cxxstlib', source=libardour_sources) + audiographer = bld.stlib(features = 'c cxx cstlib cxxstlib', source=audiographer_sources) audiographer.cxxflags = [ '-fPIC' ] audiographer.cflags = [ '-fPIC' ] audiographer.defines = [] diff --git a/libs/backends/coreaudio/coreaudio_backend.cc b/libs/backends/coreaudio/coreaudio_backend.cc index 09bab52469..85bd2355bc 100644 --- a/libs/backends/coreaudio/coreaudio_backend.cc +++ b/libs/backends/coreaudio/coreaudio_backend.cc @@ -17,6 +17,21 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/* use an additional midi message parser + * + * coreaudio does packetize midi. every packet includes a timestamp. + * With any real midi-device with a phyical layer + * 1 packet = 1 event (no concurrent events are possible on a cable) + * + * Howver, some USB-midi keyboards manage to send concurrent events + * which end up in the same packet (eg. 6 byte message: 2 note-on). + * + * An additional parser is needed to separate them + */ +#define USE_MIDI_PARSER + + #include <regex.h> #include <sys/mman.h> #include <sys/time.h> @@ -104,6 +119,13 @@ CoreAudioBackend::CoreAudioBackend (AudioEngine& e, AudioBackendInfo& info) , _dsp_load (0) , _processed_samples (0) , _port_change_flag (false) +#ifdef USE_MIDI_PARSER + , _unbuffered_bytes(0) + , _total_bytes(0) + , _expected_bytes(0) + , _status_byte(0) + , _parser_bytes(0) +#endif { _instance_name = s_instance_name; pthread_mutex_init (&_port_callback_mutex, 0); @@ -1559,6 +1581,100 @@ CoreAudioBackend::freewheel_thread () return 0; } +#ifdef USE_MIDI_PARSER +bool +CoreAudioBackend::midi_process_byte (const uint8_t byte) +{ + if (byte >= 0xf8) { + // Realtime + if (byte == 0xfd) { + // undefined + return false; + } + midi_prepare_byte_event (byte); + return true; + } + if (byte == 0xf7) { + // Sysex end + if (_status_byte == 0xf0) { + midi_record_byte (byte); + return midi_prepare_buffered_event (); + } + _total_bytes = 0; + _unbuffered_bytes = 0; + _expected_bytes = 0; + _status_byte = 0; + return false; + } + if (byte >= 0x80) { + // Non-realtime status byte + if (_total_bytes) { + _total_bytes = 0; + _unbuffered_bytes = 0; + } + _status_byte = byte; + switch (byte & 0xf0) { + case 0x80: + case 0x90: + case 0xa0: + case 0xb0: + case 0xe0: + // Note On, Note Off, Aftertouch, Control Change, Pitch Wheel + _expected_bytes = 3; + break; + case 0xc0: + case 0xd0: + // Program Change, Channel Pressure + _expected_bytes = 2; + break; + case 0xf0: + switch (byte) { + case 0xf0: + // Sysex + _expected_bytes = 0; + break; + case 0xf1: + case 0xf3: + // MTC Quarter Frame, Song Select + _expected_bytes = 2; + break; + case 0xf2: + // Song Position + _expected_bytes = 3; + break; + case 0xf4: + case 0xf5: + // Undefined + _expected_bytes = 0; + _status_byte = 0; + return false; + case 0xf6: + // Tune Request + midi_prepare_byte_event (byte); + _expected_bytes = 0; + _status_byte = 0; + return true; + } + } + midi_record_byte (byte); + return false; + } + // Data byte + if (! _status_byte) { + // Data bytes without a status will be discarded. + _total_bytes++; + _unbuffered_bytes++; + return false; + } + if (! _total_bytes) { + midi_record_byte (_status_byte); + } + midi_record_byte(byte); + return (_total_bytes == _expected_bytes) ? midi_prepare_buffered_event() : false; +} +#endif + + int CoreAudioBackend::process_callback (const uint32_t n_samples, const uint64_t host_time) { @@ -1614,7 +1730,29 @@ CoreAudioBackend::process_callback (const uint32_t n_samples, const uint64_t hos while (_midiio->recv_event (i, nominal_time, time_ns, data, size)) { pframes_t time = floor((float) time_ns * _samplerate * 1e-9); assert (time < n_samples); +#ifndef USE_MIDI_PARSER midi_event_put((void*)mbuf, time, data, size); +#else + assert (size < 128);// coremidi limit per packet + bool first_time = true; // this would need to be rememberd per port. + for (size_t mb = 0; mb < size; ++mb) { + if (first_time && !(data[mb] & 0x80)) { + /* expect a status byte at the beginning or every Packet. + * + * This parser drops messages spanning multiple packets + * (sysex > 127 bytes). + * see also libs/backends/alsa/alsa_rawmidi.cc + * which implements a complete parser per port without this limit. + */ + continue; + } + first_time = false; + + if (midi_process_byte (data[mb])) { + midi_event_put ((void*)mbuf, time, _parser_buffer, _parser_bytes); + } + } +#endif size = sizeof(data); } } diff --git a/libs/backends/coreaudio/coreaudio_backend.h b/libs/backends/coreaudio/coreaudio_backend.h index 3300fc4216..0d598f586a 100644 --- a/libs/backends/coreaudio/coreaudio_backend.h +++ b/libs/backends/coreaudio/coreaudio_backend.h @@ -445,6 +445,46 @@ class CoreAudioBackend : public AudioBackend { return NULL; } +#ifdef USE_MIDI_PARSER + + bool midi_process_byte (const uint8_t); + + void midi_record_byte (uint8_t byte) { + if (_total_bytes < sizeof (_parser_buffer)) { + _parser_buffer[_total_bytes] = byte; + } else { + ++_unbuffered_bytes; + } + ++_total_bytes; + } + + void midi_prepare_byte_event (const uint8_t byte) { + _parser_buffer[0] = byte; + _parser_bytes = 1; + } + + bool midi_prepare_buffered_event () { + const bool result = _unbuffered_bytes == 0; + if (result) { + _parser_bytes = _total_bytes; + } + _total_bytes = 0; + _unbuffered_bytes = 0; + if (_status_byte >= 0xf0) { + _expected_bytes = 0; + _status_byte = 0; + } + return result; + } + + size_t _unbuffered_bytes; + size_t _total_bytes; + size_t _expected_bytes; + uint8_t _status_byte; + uint8_t _parser_buffer[128]; + uint8_t _parser_bytes; +#endif + }; // class CoreAudioBackend } // namespace diff --git a/libs/backends/coreaudio/coremidi_io.cc b/libs/backends/coreaudio/coremidi_io.cc index 0cef589b89..a64fade8e3 100644 --- a/libs/backends/coreaudio/coremidi_io.cc +++ b/libs/backends/coreaudio/coremidi_io.cc @@ -24,28 +24,71 @@ using namespace ARDOUR; +#ifndef NDEBUG +static int _debug_mode = 0; +#endif + static void notifyProc (const MIDINotification *message, void *refCon) { CoreMidiIo *self = static_cast<CoreMidiIo*>(refCon); self->notify_proc(message); } +#ifndef NDEBUG +static void print_packet (const MIDIPacket *p) { + fprintf (stderr, "CoreMIDI: Packet %d bytes [ ", p->length); + for (int bb = 0; bb < p->length; ++bb) { + fprintf (stderr, "%02x ", ((uint8_t*)p->data)[bb]); + } + fprintf (stderr, "]\n"); +} + +static void dump_packet_list (const UInt32 numPackets, MIDIPacket const *p) { + for (UInt32 i = 0; i < numPackets; ++i) { + print_packet (p); + p = MIDIPacketNext (p); + } +} +#endif + static void midiInputCallback(const MIDIPacketList *list, void *procRef, void *srcRef) { CoreMidiIo *self = static_cast<CoreMidiIo*> (procRef); if (!self || !self->enabled()) { // skip while freewheeling +#ifndef NDEBUG + if (_debug_mode & 2) { + fprintf (stderr, "Ignored Midi Packet while freewheeling:\n"); + dump_packet_list (list->numPackets, &list->packet[0]); + } +#endif return; } RingBuffer<uint8_t> * rb = static_cast<RingBuffer < uint8_t > *> (srcRef); - if (!rb) return; + if (!rb) { +#ifndef NDEBUG + if (_debug_mode & 4) { + fprintf (stderr, "Ignored Midi Packet - no ringbuffer:\n"); + dump_packet_list (list->numPackets, &list->packet[0]); + } +#endif + return; + } MIDIPacket const *p = &list->packet[0]; for (UInt32 i = 0; i < list->numPackets; ++i) { uint32_t len = ((p->length + 3)&~3) + sizeof(MIDITimeStamp) + sizeof(UInt16); - if (rb->write_space() < sizeof(uint32_t) + len) { - fprintf(stderr, "CoreMIDI: dropped MIDI event\n"); - continue; +#ifndef NDEBUG + if (_debug_mode & 1) { + print_packet (p); } - rb->write ((uint8_t*)&len, sizeof(uint32_t)); - rb->write ((uint8_t*)p, len); +#endif + if (rb->write_space() > sizeof(uint32_t) + len) { + rb->write ((uint8_t*)&len, sizeof(uint32_t)); + rb->write ((uint8_t*)p, len); + } +#ifndef NDEBUG + else { + fprintf (stderr, "CoreMIDI: dropped MIDI event\n"); + } +#endif p = MIDIPacketNext (p); } } @@ -88,6 +131,11 @@ CoreMidiIo::CoreMidiIo() , _changed_arg (0) { pthread_mutex_init (&_discovery_lock, 0); + +#ifndef NDEBUG + const char *p = getenv ("COREMIDIDEBUG"); + if (p && *p) _debug_mode = atoi (p); +#endif } CoreMidiIo::~CoreMidiIo() diff --git a/libs/backends/dummy/dummy_audiobackend.cc b/libs/backends/dummy/dummy_audiobackend.cc index 680c5a6873..8765aba5cb 100644 --- a/libs/backends/dummy/dummy_audiobackend.cc +++ b/libs/backends/dummy/dummy_audiobackend.cc @@ -1737,7 +1737,7 @@ void DummyAudioPort::generate (const pframes_t n_samples) { const float vols = 2.f / (float)_gen_perio2; for (pframes_t i = 0; i < n_samples; ++i) { - const float g = fabsf (_gen_count2 * vols - 1.0); + const float g = fabsf (_gen_count2 * vols - 1.f); _buffer[i] = g * _wavetable[_gen_offset]; _gen_offset = (_gen_offset + 1) % _gen_period; _gen_count2 = (_gen_count2 + 1) % _gen_perio2; diff --git a/libs/backends/jack/jack_audiobackend.cc b/libs/backends/jack/jack_audiobackend.cc index d66055d6ee..c3ce0b0d6c 100644 --- a/libs/backends/jack/jack_audiobackend.cc +++ b/libs/backends/jack/jack_audiobackend.cc @@ -838,7 +838,7 @@ JACKAudioBackend::join_process_threads () for (std::vector<jack_native_thread_t>::const_iterator i = _jack_threads.begin (); i != _jack_threads.end(); i++) { -#if defined(USING_JACK2_EXPANSION_OF_JACK_API) || defined(PLATFORM_WINDOWS) +#if defined(USING_JACK2_EXPANSION_OF_JACK_API) || defined __jack_systemdeps_h__ // jack_client is not used by JACK2's implementation // also jack_client_close() leaves threads active if (jack_client_stop_thread (NULL, *i) != 0) @@ -860,7 +860,7 @@ JACKAudioBackend::join_process_threads () bool JACKAudioBackend::in_process_thread () { -#ifdef COMPILER_MINGW +#if defined COMPILER_MINGW && (!defined PTW32_VERSION || defined __jack_systemdeps_h__) if (_main_thread == GetCurrentThread()) { return true; } @@ -873,7 +873,7 @@ JACKAudioBackend::in_process_thread () for (std::vector<jack_native_thread_t>::const_iterator i = _jack_threads.begin (); i != _jack_threads.end(); i++) { -#ifdef COMPILER_MINGW +#if defined COMPILER_MINGW && (!defined PTW32_VERSION || defined __jack_systemdeps_h__) if (*i == GetCurrentThread()) { return true; } @@ -917,7 +917,7 @@ JACKAudioBackend::process_thread () /* JACK doesn't do this for us when we use the wait API */ -#ifdef COMPILER_MINGW +#if defined COMPILER_MINGW && (!defined PTW32_VERSION || defined __jack_systemdeps_h__) _main_thread = GetCurrentThread(); #else _main_thread = pthread_self (); diff --git a/libs/backends/jack/jack_portengine.cc b/libs/backends/jack/jack_portengine.cc index 1f0515b0e8..8aa489dbca 100644 --- a/libs/backends/jack/jack_portengine.cc +++ b/libs/backends/jack/jack_portengine.cc @@ -106,7 +106,16 @@ JACKAudioBackend::when_connected_to_jack () int JACKAudioBackend::set_port_name (PortHandle port, const std::string& name) { +#if HAVE_JACK_PORT_RENAME + jack_client_t* client = _jack_connection->jack(); + if (client) { + return jack_port_rename (client, (jack_port_t*) port, name.c_str()); + } else { + return -1; + } +#else return jack_port_set_name ((jack_port_t*) port, name.c_str()); +#endif } string diff --git a/libs/backends/jack/weak_libjack.def b/libs/backends/jack/weak_libjack.def index 5a3e080691..8f6a6cdb77 100644 --- a/libs/backends/jack/weak_libjack.def +++ b/libs/backends/jack/weak_libjack.def @@ -36,6 +36,7 @@ JCFUN(1, jack_nframes_t, get_buffer_size, 0) JPFUN(1, jack_nframes_t, frames_since_cycle_start, (const jack_client_t *c), (c), 0) JPFUN(1, jack_nframes_t, frame_time, (const jack_client_t *c), (c), 0) JPFUN(1, jack_nframes_t, last_frame_time, (const jack_client_t *c), (c), 0) +JPFUN(1, jack_time_t, get_time, (void), (), 0) JCFUN(1, float, cpu_load, 0) JCFUN(1, int, is_realtime, 0) @@ -53,6 +54,7 @@ JPFUN(1, int, port_ensure_monitor, (jack_port_t *p, int o), (p,o), 0) JPFUN(1, int, port_monitoring_input, (jack_port_t *p), (p), 0) JPFUN(1, const char*, port_name, (const jack_port_t *p), (p), NULL) +JPFUN(1, const char*, port_short_name, (const jack_port_t *p), (p), NULL) JPFUN(1, int, port_flags, (const jack_port_t *p), (p), 0) JPFUN(1, const char**, get_ports,(jack_client_t *c, const char *p, const char *t, unsigned long f), (c,p,t,f), NULL) JPFUN(1, int, port_name_size, (void), (), 0) @@ -65,7 +67,9 @@ JPFUN(1, int, port_unregister, (jack_client_t *c, jack_port_t *p), (c JPFUN(1, const char *, port_type, (const jack_port_t *p), (p), 0) JPFUN(1, const char **, port_get_connections, (const jack_port_t *p), (p), 0) JPFUN(1, const char **, port_get_all_connections, (const jack_client_t *c, const jack_port_t *p), (c,p), 0) -JPFUN(1, int, port_set_name, (jack_port_t *p, const char *n), (p,n), 0) +JPFUN(1, int, port_set_name, (jack_port_t *p, const char *n), (p,n), -1) +JXFUN(0, int, port_rename, (jack_client_t *c, jack_port_t *p, const char *n), (c,p,n), return jack_port_set_name (p,n);) +JPFUN(1, int, port_get_aliases, (const jack_port_t *port, char* const aliases[2]), (port,aliases), 0) JPFUN(1, int, port_disconnect, (jack_client_t *c, jack_port_t *p), (c,p), 0) JPFUN(1, int, connect, (jack_client_t *c, const char *s, const char *d), (c,s,d), -1) JPFUN(1, int, disconnect, (jack_client_t *c, const char *s, const char *d), (c,s,d), -1) @@ -141,4 +145,9 @@ JPFUN(0, int, remove_all_properties, (jack_client_t* c), (c), -1) JPFUN(0, int, set_property_change_callback, (jack_client_t *c, JackPropertyChangeCallback s, void *a), (c,s,a), -1) #endif +/* <jack/statistics.h> */ +JCFUN(1, float, get_max_delayed_usecs, 0.0) +JCFUN(1, float, get_xrun_delayed_usecs, 0.0) +JVFUN(0, reset_max_delayed_usecs, (jack_client_t *c), (c),) + #endif // end USE_WEAK_JACK diff --git a/libs/backends/jack/weak_libjack.h b/libs/backends/jack/weak_libjack.h index abfe3af8a8..0f98de3e51 100644 --- a/libs/backends/jack/weak_libjack.h +++ b/libs/backends/jack/weak_libjack.h @@ -55,6 +55,7 @@ int have_libjack(void); #define jack_frames_since_cycle_start WJACK_frames_since_cycle_start #define jack_frame_time WJACK_frame_time #define jack_last_frame_time WJACK_last_frame_time +#define jack_get_time WJACK_get_time #define jack_cpu_load WJACK_cpu_load #define jack_is_realtime WJACK_is_realtime @@ -87,6 +88,7 @@ int have_libjack(void); #define jack_port_monitoring_input WJACK_port_monitoring_input #define jack_port_name WJACK_port_name +#define jack_port_short_name WJACK_port_short_name #define jack_port_flags WJACK_port_flags #define jack_get_ports WJACK_get_ports #define jack_port_name_size WJACK_port_name_size @@ -95,6 +97,8 @@ int have_libjack(void); #define jack_port_by_name WJACK_port_by_name #define jack_port_by_id WJACK_port_by_id #define jack_port_set_name WJACK_port_set_name +#define jack_port_get_aliases WJACK_port_get_aliases +#define jack_port_rename WJACK_port_rename #define jack_port_disconnect WJACK_port_disconnect #define jack_port_register WJACK_port_register #define jack_port_unregister WJACK_port_unregister @@ -172,6 +176,11 @@ int have_libjack(void); #define jack_set_property_change_callback WJACK_set_property_change_callback #endif +/* <jack/statistics.h> */ +#define jack_get_max_delayed_usecs WJACK_get_max_delayed_usecs +#define jack_get_xrun_delayed_usecs WJACK_get_xrun_delayed_usecs +#define jack_reset_max_delayed_usecs WJACK_reset_max_delayed_usecs + #endif // end USE_WEAK_JACK #include <jack/jack.h> @@ -185,6 +194,9 @@ int have_libjack(void); #include <jack/metadata.h> #endif +// prototype for function currently only available in jack1 headers +int jack_port_rename (jack_client_t* client, jack_port_t *port, const char *port_name); + #ifdef USE_WEAK_JACK #undef jack_client_open diff --git a/libs/backends/jack/wscript b/libs/backends/jack/wscript index fca22300da..b2a12b5f66 100644 --- a/libs/backends/jack/wscript +++ b/libs/backends/jack/wscript @@ -41,11 +41,24 @@ def configure(conf): conf.check_cxx(fragment = "#include <jack/jack.h>\n#include <jack/metadata.h>\nint main(void) { jack_port_uuid(NULL); return 0; }\n", mandatory = False, msg = 'Checking for JACK metadata API', + execute = False, + features = ['cxx'], okmsg = 'ok', errmsg = 'not found (or broken). JACK metadata API will not be used', define_name = 'HAVE_JACK_METADATA', uselib = 'JACK') - + + # Check to see if jack_port_rename() is available and working + conf.check_cxx(fragment = "#include <jack/jack.h>\nint main(void) { jack_client_t* c; jack_port_t* p; jack_port_rename (c, p, \"foo\"); return 0; }\n", + mandatory = False, + execute = False, + features = ['cxx'], + msg = 'Checking for jack_port_rename()', + okmsg = 'ok', + errmsg = 'not found (or broken). jack_port_rename() will not be used, and jack_port_set_name() will be used instead', + define_name = 'HAVE_JACK_PORT_RENAME', + uselib = 'JACK') + def build(bld): obj = bld(features = 'c cxx cxxshlib') obj.source = [ @@ -68,11 +81,18 @@ def build(bld): if bld.env['build_target'] != 'mingw': obj.cxxflags = [ '-fPIC' ] obj.cflags = [ '-fPIC' ] + else: + obj.cxxflags = [ ] + obj.cflags = [ ] if bld.is_defined ('HAVE_JACK_METADATA'): obj.cxxflags += [ '-DHAVE_JACK_METADATA' ] obj.cflags += [ '-DHAVE_JACK_METADATA' ] + if bld.is_defined ('HAVE_JACK_PORT_RENAME'): + obj.cxxflags += [ '-DHAVE_JACK_PORT_RENAME' ] + obj.cflags += [ '-DHAVE_JACK_PORT_RENAME' ] + if (bld.env['build_target'] == 'mingw'): obj.uselib = [ 'PORTAUDIO' ] else: diff --git a/libs/backends/portaudio/portaudio_io.cc b/libs/backends/portaudio/portaudio_io.cc index 18a676f7a9..d8a7fc9cf1 100644 --- a/libs/backends/portaudio/portaudio_io.cc +++ b/libs/backends/portaudio/portaudio_io.cc @@ -20,6 +20,7 @@ #include <stdlib.h> #include <string.h> #include <assert.h> +#include <glibmm.h> #include "portaudio_io.h" #define INTERLEAVED_INPUT @@ -128,7 +129,7 @@ void PortAudioIO::device_list (std::map<int, std::string> &devices) const { devices.clear(); for (std::map<int, paDevice*>::const_iterator i = _devices.begin (); i != _devices.end(); ++i) { - devices.insert (std::pair<int, std::string> (i->first, i->second->name)); + devices.insert (std::pair<int, std::string> (i->first, Glib::locale_to_utf8(i->second->name))); } } diff --git a/libs/backends/wavesaudio/macosx/waves_audiobackend.xcodeproj/project.pbxproj b/libs/backends/wavesaudio/macosx/waves_audiobackend.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..ac127735e8 --- /dev/null +++ b/libs/backends/wavesaudio/macosx/waves_audiobackend.xcodeproj/project.pbxproj @@ -0,0 +1,517 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 43278FF0194EFB30003C9FEA /* basics.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43278FC8194EFB30003C9FEA /* basics.hpp */; }; + 43278FF1194EFB30003C9FEA /* compiletime_functions.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43278FC9194EFB30003C9FEA /* compiletime_functions.hpp */; }; + 43278FF2194EFB30003C9FEA /* atomic_ops.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43278FCB194EFB30003C9FEA /* atomic_ops.hpp */; }; + 43278FF3194EFB30003C9FEA /* atomic_ops_gcc_x86.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43278FCC194EFB30003C9FEA /* atomic_ops_gcc_x86.hpp */; }; + 43278FF4194EFB30003C9FEA /* WCFourCC.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FCE194EFB30003C9FEA /* WCFourCC.h */; }; + 43278FF5194EFB30003C9FEA /* WTByteOrder.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FCF194EFB30003C9FEA /* WTByteOrder.h */; }; + 43278FF6194EFB30003C9FEA /* WUComPtr.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FD0194EFB30003C9FEA /* WUComPtr.h */; }; + 43278FF7194EFB30003C9FEA /* WUDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FD1194EFB30003C9FEA /* WUDefines.h */; }; + 43278FF8194EFB30003C9FEA /* WUMathConsts.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FD2194EFB30003C9FEA /* WUMathConsts.h */; }; + 43278FF9194EFB30003C9FEA /* WUTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FD3194EFB30003C9FEA /* WUTypes.h */; }; + 43278FFA194EFB30003C9FEA /* IncludeWindows.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FD5194EFB30003C9FEA /* IncludeWindows.h */; }; + 43278FFB194EFB30003C9FEA /* WCMRAudioDeviceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43278FD6194EFB30003C9FEA /* WCMRAudioDeviceManager.cpp */; }; + 43278FFC194EFB30003C9FEA /* WCMRAudioDeviceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FD7194EFB30003C9FEA /* WCMRAudioDeviceManager.h */; }; + 43278FFD194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43278FD8194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.cpp */; }; + 43278FFE194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FD9194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.h */; }; + 43278FFF194EFB30003C9FEA /* WCMRNativeAudio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43278FDA194EFB30003C9FEA /* WCMRNativeAudio.cpp */; }; + 43279000194EFB30003C9FEA /* WCMRNativeAudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FDB194EFB30003C9FEA /* WCMRNativeAudio.h */; }; + 43279001194EFB30003C9FEA /* WCMRPortAudioDeviceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43278FDC194EFB30003C9FEA /* WCMRPortAudioDeviceManager.cpp */; }; + 43279002194EFB30003C9FEA /* WCMRPortAudioDeviceManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FDD194EFB30003C9FEA /* WCMRPortAudioDeviceManager.h */; }; + 43279003194EFB30003C9FEA /* MinMaxUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FDF194EFB30003C9FEA /* MinMaxUtilities.h */; }; + 43279004194EFB30003C9FEA /* safe_delete.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FE0194EFB30003C9FEA /* safe_delete.h */; }; + 43279005194EFB30003C9FEA /* UMicroseconds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43278FE1194EFB30003C9FEA /* UMicroseconds.cpp */; }; + 43279006194EFB30003C9FEA /* UMicroseconds.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FE2194EFB30003C9FEA /* UMicroseconds.h */; }; + 43279007194EFB30003C9FEA /* WCFixedString.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FE3194EFB30003C9FEA /* WCFixedString.h */; }; + 43279008194EFB30003C9FEA /* WUErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FE4194EFB30003C9FEA /* WUErrors.h */; }; + 43279009194EFB30003C9FEA /* WCRefManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43278FE6194EFB30003C9FEA /* WCRefManager.cpp */; }; + 4327900A194EFB30003C9FEA /* WCRefManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FE7194EFB30003C9FEA /* WCRefManager.h */; }; + 4327900B194EFB30003C9FEA /* WCThreadSafe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43278FE9194EFB30003C9FEA /* WCThreadSafe.cpp */; }; + 4327900C194EFB30003C9FEA /* WCThreadSafe.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FEA194EFB30003C9FEA /* WCThreadSafe.h */; }; + 4327900D194EFB30003C9FEA /* WavesPublicAPI_Defines.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FED194EFB30003C9FEA /* WavesPublicAPI_Defines.h */; }; + 4327900E194EFB30003C9FEA /* wstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FEE194EFB30003C9FEA /* wstdint.h */; }; + 4327900F194EFB30003C9FEA /* WTErr.h in Headers */ = {isa = PBXBuildFile; fileRef = 43278FEF194EFB30003C9FEA /* WTErr.h */; }; + 43AA86F0194EED8900A67B56 /* waves_audiobackend.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86E5194EED8900A67B56 /* waves_audiobackend.cc */; }; + 43AA86F1194EED8900A67B56 /* waves_audiobackend.latency.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86E6194EED8900A67B56 /* waves_audiobackend.latency.cc */; }; + 43AA86F2194EED8900A67B56 /* waves_audiobackend.midi.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86E7194EED8900A67B56 /* waves_audiobackend.midi.cc */; }; + 43AA86F3194EED8900A67B56 /* waves_audiobackend.port_engine.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86E8194EED8900A67B56 /* waves_audiobackend.port_engine.cc */; }; + 43AA86F4194EED8900A67B56 /* waves_audioport.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86E9194EED8900A67B56 /* waves_audioport.cc */; }; + 43AA86F5194EED8900A67B56 /* waves_dataport.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86EA194EED8900A67B56 /* waves_dataport.cc */; }; + 43AA86F6194EED8900A67B56 /* waves_midi_buffer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86EB194EED8900A67B56 /* waves_midi_buffer.cc */; }; + 43AA86F7194EED8900A67B56 /* waves_midi_device_manager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86EC194EED8900A67B56 /* waves_midi_device_manager.cc */; }; + 43AA86F8194EED8900A67B56 /* waves_midi_device.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86ED194EED8900A67B56 /* waves_midi_device.cc */; }; + 43AA86F9194EED8900A67B56 /* waves_midi_event.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86EE194EED8900A67B56 /* waves_midi_event.cc */; }; + 43AA86FA194EED8900A67B56 /* waves_midiport.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43AA86EF194EED8900A67B56 /* waves_midiport.cc */; }; + 43AA8703194EEDAC00A67B56 /* waves_audiobackend.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86FB194EEDAC00A67B56 /* waves_audiobackend.h */; }; + 43AA8704194EEDAC00A67B56 /* waves_audioport.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86FC194EEDAC00A67B56 /* waves_audioport.h */; }; + 43AA8705194EEDAC00A67B56 /* waves_dataport.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86FD194EEDAC00A67B56 /* waves_dataport.h */; }; + 43AA8706194EEDAC00A67B56 /* waves_midi_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86FE194EEDAC00A67B56 /* waves_midi_buffer.h */; }; + 43AA8707194EEDAC00A67B56 /* waves_midi_device_manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA86FF194EEDAC00A67B56 /* waves_midi_device_manager.h */; }; + 43AA8708194EEDAC00A67B56 /* waves_midi_device.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8700194EEDAC00A67B56 /* waves_midi_device.h */; }; + 43AA8709194EEDAC00A67B56 /* waves_midi_event.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8701194EEDAC00A67B56 /* waves_midi_event.h */; }; + 43AA870A194EEDAC00A67B56 /* waves_midiport.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AA8702194EEDAC00A67B56 /* waves_midiport.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 43278FC8194EFB30003C9FEA /* basics.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = basics.hpp; path = ../wavesapi/akupara/basics.hpp; sourceTree = SOURCE_ROOT; }; + 43278FC9194EFB30003C9FEA /* compiletime_functions.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = compiletime_functions.hpp; path = ../wavesapi/akupara/compiletime_functions.hpp; sourceTree = SOURCE_ROOT; }; + 43278FCB194EFB30003C9FEA /* atomic_ops.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = atomic_ops.hpp; path = ../wavesapi/akupara/threading/atomic_ops.hpp; sourceTree = SOURCE_ROOT; }; + 43278FCC194EFB30003C9FEA /* atomic_ops_gcc_x86.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = atomic_ops_gcc_x86.hpp; path = ../wavesapi/akupara/threading/atomic_ops_gcc_x86.hpp; sourceTree = SOURCE_ROOT; }; + 43278FCE194EFB30003C9FEA /* WCFourCC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCFourCC.h; path = ../wavesapi/BasicTypes/WCFourCC.h; sourceTree = SOURCE_ROOT; }; + 43278FCF194EFB30003C9FEA /* WTByteOrder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WTByteOrder.h; path = ../wavesapi/BasicTypes/WTByteOrder.h; sourceTree = SOURCE_ROOT; }; + 43278FD0194EFB30003C9FEA /* WUComPtr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WUComPtr.h; path = ../wavesapi/BasicTypes/WUComPtr.h; sourceTree = SOURCE_ROOT; }; + 43278FD1194EFB30003C9FEA /* WUDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WUDefines.h; path = ../wavesapi/BasicTypes/WUDefines.h; sourceTree = SOURCE_ROOT; }; + 43278FD2194EFB30003C9FEA /* WUMathConsts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WUMathConsts.h; path = ../wavesapi/BasicTypes/WUMathConsts.h; sourceTree = SOURCE_ROOT; }; + 43278FD3194EFB30003C9FEA /* WUTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WUTypes.h; path = ../wavesapi/BasicTypes/WUTypes.h; sourceTree = SOURCE_ROOT; }; + 43278FD5194EFB30003C9FEA /* IncludeWindows.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IncludeWindows.h; path = ../wavesapi/devicemanager/IncludeWindows.h; sourceTree = SOURCE_ROOT; }; + 43278FD6194EFB30003C9FEA /* WCMRAudioDeviceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WCMRAudioDeviceManager.cpp; path = ../wavesapi/devicemanager/WCMRAudioDeviceManager.cpp; sourceTree = SOURCE_ROOT; }; + 43278FD7194EFB30003C9FEA /* WCMRAudioDeviceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCMRAudioDeviceManager.h; path = ../wavesapi/devicemanager/WCMRAudioDeviceManager.h; sourceTree = SOURCE_ROOT; }; + 43278FD8194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WCMRCoreAudioDeviceManager.cpp; path = ../wavesapi/devicemanager/WCMRCoreAudioDeviceManager.cpp; sourceTree = SOURCE_ROOT; }; + 43278FD9194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCMRCoreAudioDeviceManager.h; path = ../wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h; sourceTree = SOURCE_ROOT; }; + 43278FDA194EFB30003C9FEA /* WCMRNativeAudio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WCMRNativeAudio.cpp; path = ../wavesapi/devicemanager/WCMRNativeAudio.cpp; sourceTree = SOURCE_ROOT; }; + 43278FDB194EFB30003C9FEA /* WCMRNativeAudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCMRNativeAudio.h; path = ../wavesapi/devicemanager/WCMRNativeAudio.h; sourceTree = SOURCE_ROOT; }; + 43278FDC194EFB30003C9FEA /* WCMRPortAudioDeviceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WCMRPortAudioDeviceManager.cpp; path = ../wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp; sourceTree = SOURCE_ROOT; }; + 43278FDD194EFB30003C9FEA /* WCMRPortAudioDeviceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCMRPortAudioDeviceManager.h; path = ../wavesapi/devicemanager/WCMRPortAudioDeviceManager.h; sourceTree = SOURCE_ROOT; }; + 43278FDF194EFB30003C9FEA /* MinMaxUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MinMaxUtilities.h; path = ../wavesapi/miscutils/MinMaxUtilities.h; sourceTree = SOURCE_ROOT; }; + 43278FE0194EFB30003C9FEA /* safe_delete.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = safe_delete.h; path = ../wavesapi/miscutils/safe_delete.h; sourceTree = SOURCE_ROOT; }; + 43278FE1194EFB30003C9FEA /* UMicroseconds.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UMicroseconds.cpp; path = ../wavesapi/miscutils/UMicroseconds.cpp; sourceTree = SOURCE_ROOT; }; + 43278FE2194EFB30003C9FEA /* UMicroseconds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UMicroseconds.h; path = ../wavesapi/miscutils/UMicroseconds.h; sourceTree = SOURCE_ROOT; }; + 43278FE3194EFB30003C9FEA /* WCFixedString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCFixedString.h; path = ../wavesapi/miscutils/WCFixedString.h; sourceTree = SOURCE_ROOT; }; + 43278FE4194EFB30003C9FEA /* WUErrors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WUErrors.h; path = ../wavesapi/miscutils/WUErrors.h; sourceTree = SOURCE_ROOT; }; + 43278FE6194EFB30003C9FEA /* WCRefManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WCRefManager.cpp; path = ../wavesapi/refmanager/WCRefManager.cpp; sourceTree = SOURCE_ROOT; }; + 43278FE7194EFB30003C9FEA /* WCRefManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCRefManager.h; path = ../wavesapi/refmanager/WCRefManager.h; sourceTree = SOURCE_ROOT; }; + 43278FE9194EFB30003C9FEA /* WCThreadSafe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WCThreadSafe.cpp; path = ../wavesapi/threads/WCThreadSafe.cpp; sourceTree = SOURCE_ROOT; }; + 43278FEA194EFB30003C9FEA /* WCThreadSafe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WCThreadSafe.h; path = ../wavesapi/threads/WCThreadSafe.h; sourceTree = SOURCE_ROOT; }; + 43278FED194EFB30003C9FEA /* WavesPublicAPI_Defines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WavesPublicAPI_Defines.h; path = ../wavesapi/wavespublicapi/1.0/WavesPublicAPI_Defines.h; sourceTree = SOURCE_ROOT; }; + 43278FEE194EFB30003C9FEA /* wstdint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wstdint.h; path = ../wavesapi/wavespublicapi/wstdint.h; sourceTree = SOURCE_ROOT; }; + 43278FEF194EFB30003C9FEA /* WTErr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WTErr.h; path = ../wavesapi/wavespublicapi/WTErr.h; sourceTree = SOURCE_ROOT; }; + 43AA86DC194EECE000A67B56 /* libwaves_audiobackend.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libwaves_audiobackend.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; + 43AA86E5194EED8900A67B56 /* waves_audiobackend.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_audiobackend.cc; path = ../waves_audiobackend.cc; sourceTree = SOURCE_ROOT; }; + 43AA86E6194EED8900A67B56 /* waves_audiobackend.latency.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_audiobackend.latency.cc; path = ../waves_audiobackend.latency.cc; sourceTree = SOURCE_ROOT; }; + 43AA86E7194EED8900A67B56 /* waves_audiobackend.midi.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_audiobackend.midi.cc; path = ../waves_audiobackend.midi.cc; sourceTree = SOURCE_ROOT; }; + 43AA86E8194EED8900A67B56 /* waves_audiobackend.port_engine.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_audiobackend.port_engine.cc; path = ../waves_audiobackend.port_engine.cc; sourceTree = SOURCE_ROOT; }; + 43AA86E9194EED8900A67B56 /* waves_audioport.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_audioport.cc; path = ../waves_audioport.cc; sourceTree = SOURCE_ROOT; }; + 43AA86EA194EED8900A67B56 /* waves_dataport.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_dataport.cc; path = ../waves_dataport.cc; sourceTree = SOURCE_ROOT; }; + 43AA86EB194EED8900A67B56 /* waves_midi_buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_midi_buffer.cc; path = ../waves_midi_buffer.cc; sourceTree = SOURCE_ROOT; }; + 43AA86EC194EED8900A67B56 /* waves_midi_device_manager.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_midi_device_manager.cc; path = ../waves_midi_device_manager.cc; sourceTree = SOURCE_ROOT; }; + 43AA86ED194EED8900A67B56 /* waves_midi_device.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_midi_device.cc; path = ../waves_midi_device.cc; sourceTree = SOURCE_ROOT; }; + 43AA86EE194EED8900A67B56 /* waves_midi_event.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_midi_event.cc; path = ../waves_midi_event.cc; sourceTree = SOURCE_ROOT; }; + 43AA86EF194EED8900A67B56 /* waves_midiport.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = waves_midiport.cc; path = ../waves_midiport.cc; sourceTree = SOURCE_ROOT; }; + 43AA86FB194EEDAC00A67B56 /* waves_audiobackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_audiobackend.h; path = ../waves_audiobackend.h; sourceTree = SOURCE_ROOT; }; + 43AA86FC194EEDAC00A67B56 /* waves_audioport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_audioport.h; path = ../waves_audioport.h; sourceTree = SOURCE_ROOT; }; + 43AA86FD194EEDAC00A67B56 /* waves_dataport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_dataport.h; path = ../waves_dataport.h; sourceTree = SOURCE_ROOT; }; + 43AA86FE194EEDAC00A67B56 /* waves_midi_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_midi_buffer.h; path = ../waves_midi_buffer.h; sourceTree = SOURCE_ROOT; }; + 43AA86FF194EEDAC00A67B56 /* waves_midi_device_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_midi_device_manager.h; path = ../waves_midi_device_manager.h; sourceTree = SOURCE_ROOT; }; + 43AA8700194EEDAC00A67B56 /* waves_midi_device.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_midi_device.h; path = ../waves_midi_device.h; sourceTree = SOURCE_ROOT; }; + 43AA8701194EEDAC00A67B56 /* waves_midi_event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_midi_event.h; path = ../waves_midi_event.h; sourceTree = SOURCE_ROOT; }; + 43AA8702194EEDAC00A67B56 /* waves_midiport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = waves_midiport.h; path = ../waves_midiport.h; sourceTree = SOURCE_ROOT; }; + 43AA870B194EEDC600A67B56 /* wscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = wscript; path = ../wscript; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 43AA86D9194EECE000A67B56 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 43278FC6194EFB30003C9FEA /* wavesapi */ = { + isa = PBXGroup; + children = ( + 43278FC7194EFB30003C9FEA /* akupara */, + 43278FCD194EFB30003C9FEA /* BasicTypes */, + 43278FD4194EFB30003C9FEA /* devicemanager */, + 43278FDE194EFB30003C9FEA /* miscutils */, + 43278FE5194EFB30003C9FEA /* refmanager */, + 43278FE8194EFB30003C9FEA /* threads */, + 43278FEB194EFB30003C9FEA /* wavespublicapi */, + ); + name = wavesapi; + path = ../wavesapi; + sourceTree = SOURCE_ROOT; + }; + 43278FC7194EFB30003C9FEA /* akupara */ = { + isa = PBXGroup; + children = ( + 43278FC8194EFB30003C9FEA /* basics.hpp */, + 43278FC9194EFB30003C9FEA /* compiletime_functions.hpp */, + 43278FCA194EFB30003C9FEA /* threading */, + ); + path = akupara; + sourceTree = "<group>"; + }; + 43278FCA194EFB30003C9FEA /* threading */ = { + isa = PBXGroup; + children = ( + 43278FCB194EFB30003C9FEA /* atomic_ops.hpp */, + 43278FCC194EFB30003C9FEA /* atomic_ops_gcc_x86.hpp */, + ); + path = threading; + sourceTree = "<group>"; + }; + 43278FCD194EFB30003C9FEA /* BasicTypes */ = { + isa = PBXGroup; + children = ( + 43278FCE194EFB30003C9FEA /* WCFourCC.h */, + 43278FCF194EFB30003C9FEA /* WTByteOrder.h */, + 43278FD0194EFB30003C9FEA /* WUComPtr.h */, + 43278FD1194EFB30003C9FEA /* WUDefines.h */, + 43278FD2194EFB30003C9FEA /* WUMathConsts.h */, + 43278FD3194EFB30003C9FEA /* WUTypes.h */, + ); + path = BasicTypes; + sourceTree = "<group>"; + }; + 43278FD4194EFB30003C9FEA /* devicemanager */ = { + isa = PBXGroup; + children = ( + 43278FD5194EFB30003C9FEA /* IncludeWindows.h */, + 43278FD6194EFB30003C9FEA /* WCMRAudioDeviceManager.cpp */, + 43278FD7194EFB30003C9FEA /* WCMRAudioDeviceManager.h */, + 43278FD8194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.cpp */, + 43278FD9194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.h */, + 43278FDA194EFB30003C9FEA /* WCMRNativeAudio.cpp */, + 43278FDB194EFB30003C9FEA /* WCMRNativeAudio.h */, + 43278FDC194EFB30003C9FEA /* WCMRPortAudioDeviceManager.cpp */, + 43278FDD194EFB30003C9FEA /* WCMRPortAudioDeviceManager.h */, + ); + path = devicemanager; + sourceTree = "<group>"; + }; + 43278FDE194EFB30003C9FEA /* miscutils */ = { + isa = PBXGroup; + children = ( + 43278FDF194EFB30003C9FEA /* MinMaxUtilities.h */, + 43278FE0194EFB30003C9FEA /* safe_delete.h */, + 43278FE1194EFB30003C9FEA /* UMicroseconds.cpp */, + 43278FE2194EFB30003C9FEA /* UMicroseconds.h */, + 43278FE3194EFB30003C9FEA /* WCFixedString.h */, + 43278FE4194EFB30003C9FEA /* WUErrors.h */, + ); + path = miscutils; + sourceTree = "<group>"; + }; + 43278FE5194EFB30003C9FEA /* refmanager */ = { + isa = PBXGroup; + children = ( + 43278FE6194EFB30003C9FEA /* WCRefManager.cpp */, + 43278FE7194EFB30003C9FEA /* WCRefManager.h */, + ); + path = refmanager; + sourceTree = "<group>"; + }; + 43278FE8194EFB30003C9FEA /* threads */ = { + isa = PBXGroup; + children = ( + 43278FE9194EFB30003C9FEA /* WCThreadSafe.cpp */, + 43278FEA194EFB30003C9FEA /* WCThreadSafe.h */, + ); + path = threads; + sourceTree = "<group>"; + }; + 43278FEB194EFB30003C9FEA /* wavespublicapi */ = { + isa = PBXGroup; + children = ( + 43278FEC194EFB30003C9FEA /* 1.0 */, + 43278FEE194EFB30003C9FEA /* wstdint.h */, + 43278FEF194EFB30003C9FEA /* WTErr.h */, + ); + path = wavespublicapi; + sourceTree = "<group>"; + }; + 43278FEC194EFB30003C9FEA /* 1.0 */ = { + isa = PBXGroup; + children = ( + 43278FED194EFB30003C9FEA /* WavesPublicAPI_Defines.h */, + ); + path = 1.0; + sourceTree = "<group>"; + }; + 43AA86D3194EECE000A67B56 = { + isa = PBXGroup; + children = ( + 43278FC6194EFB30003C9FEA /* wavesapi */, + 43AA870C194EEDCA00A67B56 /* scripts */, + 43AA86E4194EECF300A67B56 /* headers */, + 43AA86E3194EECEB00A67B56 /* source */, + 43AA86DD194EECE000A67B56 /* Products */, + ); + sourceTree = "<group>"; + }; + 43AA86DD194EECE000A67B56 /* Products */ = { + isa = PBXGroup; + children = ( + 43AA86DC194EECE000A67B56 /* libwaves_audiobackend.dylib */, + ); + name = Products; + sourceTree = SOURCE_ROOT; + }; + 43AA86E3194EECEB00A67B56 /* source */ = { + isa = PBXGroup; + children = ( + 43AA86E5194EED8900A67B56 /* waves_audiobackend.cc */, + 43AA86E6194EED8900A67B56 /* waves_audiobackend.latency.cc */, + 43AA86E7194EED8900A67B56 /* waves_audiobackend.midi.cc */, + 43AA86E8194EED8900A67B56 /* waves_audiobackend.port_engine.cc */, + 43AA86E9194EED8900A67B56 /* waves_audioport.cc */, + 43AA86EA194EED8900A67B56 /* waves_dataport.cc */, + 43AA86EB194EED8900A67B56 /* waves_midi_buffer.cc */, + 43AA86EC194EED8900A67B56 /* waves_midi_device_manager.cc */, + 43AA86ED194EED8900A67B56 /* waves_midi_device.cc */, + 43AA86EE194EED8900A67B56 /* waves_midi_event.cc */, + 43AA86EF194EED8900A67B56 /* waves_midiport.cc */, + ); + name = source; + sourceTree = SOURCE_ROOT; + }; + 43AA86E4194EECF300A67B56 /* headers */ = { + isa = PBXGroup; + children = ( + 43AA86FB194EEDAC00A67B56 /* waves_audiobackend.h */, + 43AA86FC194EEDAC00A67B56 /* waves_audioport.h */, + 43AA86FD194EEDAC00A67B56 /* waves_dataport.h */, + 43AA86FE194EEDAC00A67B56 /* waves_midi_buffer.h */, + 43AA86FF194EEDAC00A67B56 /* waves_midi_device_manager.h */, + 43AA8700194EEDAC00A67B56 /* waves_midi_device.h */, + 43AA8701194EEDAC00A67B56 /* waves_midi_event.h */, + 43AA8702194EEDAC00A67B56 /* waves_midiport.h */, + ); + name = headers; + sourceTree = SOURCE_ROOT; + }; + 43AA870C194EEDCA00A67B56 /* scripts */ = { + isa = PBXGroup; + children = ( + 43AA870B194EEDC600A67B56 /* wscript */, + ); + name = scripts; + sourceTree = SOURCE_ROOT; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 43AA86DA194EECE000A67B56 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 43AA8703194EEDAC00A67B56 /* waves_audiobackend.h in Headers */, + 43AA8704194EEDAC00A67B56 /* waves_audioport.h in Headers */, + 43AA8705194EEDAC00A67B56 /* waves_dataport.h in Headers */, + 43AA8706194EEDAC00A67B56 /* waves_midi_buffer.h in Headers */, + 43AA8707194EEDAC00A67B56 /* waves_midi_device_manager.h in Headers */, + 43AA8708194EEDAC00A67B56 /* waves_midi_device.h in Headers */, + 43AA8709194EEDAC00A67B56 /* waves_midi_event.h in Headers */, + 43AA870A194EEDAC00A67B56 /* waves_midiport.h in Headers */, + 43278FF0194EFB30003C9FEA /* basics.hpp in Headers */, + 43278FF1194EFB30003C9FEA /* compiletime_functions.hpp in Headers */, + 43278FF2194EFB30003C9FEA /* atomic_ops.hpp in Headers */, + 43278FF3194EFB30003C9FEA /* atomic_ops_gcc_x86.hpp in Headers */, + 43278FF4194EFB30003C9FEA /* WCFourCC.h in Headers */, + 43278FF5194EFB30003C9FEA /* WTByteOrder.h in Headers */, + 43278FF6194EFB30003C9FEA /* WUComPtr.h in Headers */, + 43278FF7194EFB30003C9FEA /* WUDefines.h in Headers */, + 43278FF8194EFB30003C9FEA /* WUMathConsts.h in Headers */, + 43278FF9194EFB30003C9FEA /* WUTypes.h in Headers */, + 43278FFA194EFB30003C9FEA /* IncludeWindows.h in Headers */, + 43278FFC194EFB30003C9FEA /* WCMRAudioDeviceManager.h in Headers */, + 43278FFE194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.h in Headers */, + 43279000194EFB30003C9FEA /* WCMRNativeAudio.h in Headers */, + 43279002194EFB30003C9FEA /* WCMRPortAudioDeviceManager.h in Headers */, + 43279003194EFB30003C9FEA /* MinMaxUtilities.h in Headers */, + 43279004194EFB30003C9FEA /* safe_delete.h in Headers */, + 43279006194EFB30003C9FEA /* UMicroseconds.h in Headers */, + 43279007194EFB30003C9FEA /* WCFixedString.h in Headers */, + 43279008194EFB30003C9FEA /* WUErrors.h in Headers */, + 4327900A194EFB30003C9FEA /* WCRefManager.h in Headers */, + 4327900C194EFB30003C9FEA /* WCThreadSafe.h in Headers */, + 4327900D194EFB30003C9FEA /* WavesPublicAPI_Defines.h in Headers */, + 4327900E194EFB30003C9FEA /* wstdint.h in Headers */, + 4327900F194EFB30003C9FEA /* WTErr.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 43AA86DB194EECE000A67B56 /* waves_audiobackend */ = { + isa = PBXNativeTarget; + buildConfigurationList = 43AA86E0194EECE000A67B56 /* Build configuration list for PBXNativeTarget "waves_audiobackend" */; + buildPhases = ( + 43AA86D8194EECE000A67B56 /* Sources */, + 43AA86D9194EECE000A67B56 /* Frameworks */, + 43AA86DA194EECE000A67B56 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = waves_audiobackend; + productName = waves_audiobackend; + productReference = 43AA86DC194EECE000A67B56 /* libwaves_audiobackend.dylib */; + productType = "com.apple.product-type.library.dynamic"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 43AA86D4194EECE000A67B56 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0460; + ORGANIZATIONNAME = Waves; + }; + buildConfigurationList = 43AA86D7194EECE000A67B56 /* Build configuration list for PBXProject "waves_audiobackend" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 43AA86D3194EECE000A67B56; + productRefGroup = 43AA86DD194EECE000A67B56 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 43AA86DB194EECE000A67B56 /* waves_audiobackend */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 43AA86D8194EECE000A67B56 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 43AA86F0194EED8900A67B56 /* waves_audiobackend.cc in Sources */, + 43AA86F1194EED8900A67B56 /* waves_audiobackend.latency.cc in Sources */, + 43AA86F2194EED8900A67B56 /* waves_audiobackend.midi.cc in Sources */, + 43AA86F3194EED8900A67B56 /* waves_audiobackend.port_engine.cc in Sources */, + 43AA86F4194EED8900A67B56 /* waves_audioport.cc in Sources */, + 43AA86F5194EED8900A67B56 /* waves_dataport.cc in Sources */, + 43AA86F6194EED8900A67B56 /* waves_midi_buffer.cc in Sources */, + 43AA86F7194EED8900A67B56 /* waves_midi_device_manager.cc in Sources */, + 43AA86F8194EED8900A67B56 /* waves_midi_device.cc in Sources */, + 43AA86F9194EED8900A67B56 /* waves_midi_event.cc in Sources */, + 43AA86FA194EED8900A67B56 /* waves_midiport.cc in Sources */, + 43278FFB194EFB30003C9FEA /* WCMRAudioDeviceManager.cpp in Sources */, + 43278FFD194EFB30003C9FEA /* WCMRCoreAudioDeviceManager.cpp in Sources */, + 43278FFF194EFB30003C9FEA /* WCMRNativeAudio.cpp in Sources */, + 43279001194EFB30003C9FEA /* WCMRPortAudioDeviceManager.cpp in Sources */, + 43279005194EFB30003C9FEA /* UMicroseconds.cpp in Sources */, + 43279009194EFB30003C9FEA /* WCRefManager.cpp in Sources */, + 4327900B194EFB30003C9FEA /* WCThreadSafe.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 43AA86DE194EECE000A67B56 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.8; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 43AA86DF194EECE000A67B56 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.8; + SDKROOT = macosx; + }; + name = Release; + }; + 43AA86E1194EECE000A67B56 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + EXECUTABLE_PREFIX = lib; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 43AA86E2194EECE000A67B56 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + EXECUTABLE_PREFIX = lib; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 43AA86D7194EECE000A67B56 /* Build configuration list for PBXProject "waves_audiobackend" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 43AA86DE194EECE000A67B56 /* Debug */, + 43AA86DF194EECE000A67B56 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 43AA86E0194EECE000A67B56 /* Build configuration list for PBXNativeTarget "waves_audiobackend" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 43AA86E1194EECE000A67B56 /* Debug */, + 43AA86E2194EECE000A67B56 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 43AA86D4194EECE000A67B56 /* Project object */; +} diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.pbxproj b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..0d06e565ea --- /dev/null +++ b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.pbxproj @@ -0,0 +1,594 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 44; + objects = { + +/* Begin PBXAggregateTarget section */ + 3D634CAB1247805C0020F829 /* JPortMidiHeaders */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 3D634CAE1247807A0020F829 /* Build configuration list for PBXAggregateTarget "JPortMidiHeaders" */; + buildPhases = ( + 3D634CAA1247805C0020F829 /* ShellScript */, + ); + dependencies = ( + 3D634CB0124781580020F829 /* PBXTargetDependency */, + ); + name = JPortMidiHeaders; + productName = JPortMidiHeaders; + }; + 3DE2142D124662AA0033C839 /* CopyJavaSources */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 3DE21434124662FF0033C839 /* Build configuration list for PBXAggregateTarget "CopyJavaSources" */; + buildPhases = ( + 3DE2142C124662AA0033C839 /* CopyFiles */, + ); + comments = "The reason for copying files here is that the Compile Java target looks in a particular place for sources. It would be much better to simply have Compile Java look in the original location for all sources, but I don't know how to do that. -RBD\n"; + dependencies = ( + ); + name = CopyJavaSources; + productName = CopyJavaSources; + }; + 89D0F1C90F3B704E007831A7 /* PmDefaults */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 89D0F1D20F3B7080007831A7 /* Build configuration list for PBXAggregateTarget "PmDefaults" */; + buildPhases = ( + ); + dependencies = ( + 89D0F1D10F3B7062007831A7 /* PBXTargetDependency */, + 89D0F1CD0F3B7062007831A7 /* PBXTargetDependency */, + 3DE21431124662C50033C839 /* PBXTargetDependency */, + ); + name = PmDefaults; + productName = pmdefaults; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 3DE2137F124653FB0033C839 /* portmusic_logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE2137E124653FB0033C839 /* portmusic_logo.png */; }; + 3DE21435124663860033C839 /* PmDefaultsFrame.java in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3DE2137D124653CB0033C839 /* PmDefaultsFrame.java */; }; + 3DE214361246638A0033C839 /* PmDefaults.java in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3DE2137B1246538B0033C839 /* PmDefaults.java */; }; + 3DE214371246638F0033C839 /* JPortMidiException.java in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3DE21382124654DE0033C839 /* JPortMidiException.java */; }; + 3DE214381246638F0033C839 /* JPortMidiApi.java in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3DE21381124654CF0033C839 /* JPortMidiApi.java */; }; + 3DE214391246638F0033C839 /* JPortMidi.java in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3DE21380124654BC0033C839 /* JPortMidi.java */; }; + 3DE216131246AC0E0033C839 /* libpmjni.dylib in Copy Java Resources */ = {isa = PBXBuildFile; fileRef = 3DE216101246ABE30033C839 /* libpmjni.dylib */; }; + 3DE216951246D57A0033C839 /* pmdefaults.icns in Resources */ = {isa = PBXBuildFile; fileRef = 3DE216901246C6410033C839 /* pmdefaults.icns */; }; + 89C3F2920F5250A300B0048E /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 89C3F2900F5250A300B0048E /* Credits.rtf */; }; + 89D0F0240F392F20007831A7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 89D0F0210F392F20007831A7 /* InfoPlist.strings */; }; + 89D0F0410F39306C007831A7 /* JavaApplicationStub in Copy Executable */ = {isa = PBXBuildFile; fileRef = 89D0F03E0F39304A007831A7 /* JavaApplicationStub */; }; + 89D0F16A0F3A124E007831A7 /* pmdefaults.jar in Copy Java Resources */ = {isa = PBXBuildFile; fileRef = 89D0F15D0F3A0FF7007831A7 /* pmdefaults.jar */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 3D634CAF124781580020F829 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 89D0F1C90F3B704E007831A7; + remoteInfo = PmDefaults; + }; + 3DE21430124662C50033C839 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3DE2142D124662AA0033C839; + remoteInfo = CopyJavaSources; + }; + 3DE2145D124666900033C839 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3DE2142D124662AA0033C839; + remoteInfo = CopyJavaSources; + }; + 89D0F1CC0F3B7062007831A7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8D1107260486CEB800E47090; + remoteInfo = "Assemble Application"; + }; + 89D0F1D00F3B7062007831A7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 89D0F0480F393A6F007831A7; + remoteInfo = "Compile Java"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 3DE2142C124662AA0033C839 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "${PROJECT_DIR}/pmdefaults/src/java"; + dstSubfolderSpec = 0; + files = ( + 3DE21435124663860033C839 /* PmDefaultsFrame.java in CopyFiles */, + 3DE214361246638A0033C839 /* PmDefaults.java in CopyFiles */, + 3DE214371246638F0033C839 /* JPortMidiException.java in CopyFiles */, + 3DE214381246638F0033C839 /* JPortMidiApi.java in CopyFiles */, + 3DE214391246638F0033C839 /* JPortMidi.java in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 89D0F0440F393070007831A7 /* Copy Executable */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 6; + files = ( + 89D0F0410F39306C007831A7 /* JavaApplicationStub in Copy Executable */, + ); + name = "Copy Executable"; + runOnlyForDeploymentPostprocessing = 0; + }; + 89D0F11F0F394189007831A7 /* Copy Java Resources */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 15; + files = ( + 89D0F16A0F3A124E007831A7 /* pmdefaults.jar in Copy Java Resources */, + 3DE216131246AC0E0033C839 /* libpmjni.dylib in Copy Java Resources */, + ); + name = "Copy Java Resources"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 3DE2137B1246538B0033C839 /* PmDefaults.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; name = PmDefaults.java; path = ../pm_java/pmdefaults/PmDefaults.java; sourceTree = SOURCE_ROOT; }; + 3DE2137D124653CB0033C839 /* PmDefaultsFrame.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; name = PmDefaultsFrame.java; path = ../pm_java/pmdefaults/PmDefaultsFrame.java; sourceTree = SOURCE_ROOT; }; + 3DE2137E124653FB0033C839 /* portmusic_logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = portmusic_logo.png; path = ../pm_java/pmdefaults/portmusic_logo.png; sourceTree = SOURCE_ROOT; }; + 3DE21380124654BC0033C839 /* JPortMidi.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; name = JPortMidi.java; path = ../pm_java/jportmidi/JPortMidi.java; sourceTree = SOURCE_ROOT; }; + 3DE21381124654CF0033C839 /* JPortMidiApi.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; name = JPortMidiApi.java; path = ../pm_java/jportmidi/JPortMidiApi.java; sourceTree = SOURCE_ROOT; }; + 3DE21382124654DE0033C839 /* JPortMidiException.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; name = JPortMidiException.java; path = ../pm_java/jportmidi/JPortMidiException.java; sourceTree = SOURCE_ROOT; }; + 3DE213841246555A0033C839 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = /System/Library/Frameworks/CoreMIDI.framework; sourceTree = "<absolute>"; }; + 3DE21390124655760033C839 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; }; + 3DE213BE1246557F0033C839 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; }; + 3DE216101246ABE30033C839 /* libpmjni.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libpmjni.dylib; path = ../Release/libpmjni.dylib; sourceTree = SOURCE_ROOT; }; + 3DE216901246C6410033C839 /* pmdefaults.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = pmdefaults.icns; path = ../pm_java/pmdefaults/pmdefaults.icns; sourceTree = SOURCE_ROOT; }; + 89C3F2910F5250A300B0048E /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Credits.rtf; sourceTree = "<group>"; }; + 89D0F0220F392F20007831A7 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; + 89D0F0230F392F20007831A7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; + 89D0F03E0F39304A007831A7 /* JavaApplicationStub */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; name = JavaApplicationStub; path = /System/Library/Frameworks/JavaVM.framework/Versions/A/Resources/MacOS/JavaApplicationStub; sourceTree = "<absolute>"; }; + 89D0F0840F394066007831A7 /* JavaNativeFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaNativeFoundation.framework; path = /System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaNativeFoundation.framework; sourceTree = "<absolute>"; }; + 89D0F1390F3948A9007831A7 /* pmdefaults/make */ = {isa = PBXFileReference; lastKnownFileType = folder; path = pmdefaults/make; sourceTree = "<group>"; }; + 89D0F15D0F3A0FF7007831A7 /* pmdefaults.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; name = pmdefaults.jar; path = build/Release/pmdefaults.jar; sourceTree = SOURCE_ROOT; }; + 89D0F1860F3A2442007831A7 /* JavaVM.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaVM.framework; path = /System/Library/Frameworks/JavaVM.framework; sourceTree = "<absolute>"; }; + 8D1107320486CEB800E47090 /* PmDefaults.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PmDefaults.app; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXGroup section */ + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 3DE213841246555A0033C839 /* CoreMIDI.framework */, + 3DE21390124655760033C839 /* CoreFoundation.framework */, + 3DE213BE1246557F0033C839 /* CoreAudio.framework */, + 89D0F1860F3A2442007831A7 /* JavaVM.framework */, + 89D0F0840F394066007831A7 /* JavaNativeFoundation.framework */, + ); + name = "Linked Frameworks"; + sourceTree = "<group>"; + }; + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = "Other Frameworks"; + sourceTree = "<group>"; + }; + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 89D0F15D0F3A0FF7007831A7 /* pmdefaults.jar */, + 8D1107320486CEB800E47090 /* PmDefaults.app */, + ); + name = Products; + sourceTree = "<group>"; + }; + 29B97314FDCFA39411CA2CEA /* pmdefaults */ = { + isa = PBXGroup; + children = ( + 3DE216101246ABE30033C839 /* libpmjni.dylib */, + 89D0F0260F392F48007831A7 /* Source */, + 89D0F0200F392F20007831A7 /* Resources */, + 89D0F1390F3948A9007831A7 /* pmdefaults/make */, + 29B97323FDCFA39411CA2CEA /* Frameworks */, + 19C28FACFE9D520D11CA2CBB /* Products */, + ); + name = pmdefaults; + sourceTree = "<group>"; + }; + 29B97323FDCFA39411CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = "<group>"; + }; + 3DE2136A124652E20033C839 /* pm_java */ = { + isa = PBXGroup; + children = ( + 3DE21379124653150033C839 /* pmdefaults */, + 3DE2137A1246531D0033C839 /* jportmidi */, + ); + name = pm_java; + path = ..; + sourceTree = "<group>"; + }; + 3DE21379124653150033C839 /* pmdefaults */ = { + isa = PBXGroup; + children = ( + 3DE2137D124653CB0033C839 /* PmDefaultsFrame.java */, + 3DE2137B1246538B0033C839 /* PmDefaults.java */, + ); + name = pmdefaults; + sourceTree = "<group>"; + }; + 3DE2137A1246531D0033C839 /* jportmidi */ = { + isa = PBXGroup; + children = ( + 3DE21382124654DE0033C839 /* JPortMidiException.java */, + 3DE21381124654CF0033C839 /* JPortMidiApi.java */, + 3DE21380124654BC0033C839 /* JPortMidi.java */, + ); + name = jportmidi; + sourceTree = "<group>"; + }; + 89D0F0200F392F20007831A7 /* Resources */ = { + isa = PBXGroup; + children = ( + 3DE216901246C6410033C839 /* pmdefaults.icns */, + 3DE2137E124653FB0033C839 /* portmusic_logo.png */, + 89C3F2900F5250A300B0048E /* Credits.rtf */, + 89D0F0230F392F20007831A7 /* Info.plist */, + 89D0F0210F392F20007831A7 /* InfoPlist.strings */, + 89D0F03E0F39304A007831A7 /* JavaApplicationStub */, + ); + name = Resources; + path = pmdefaults/resources; + sourceTree = "<group>"; + }; + 89D0F0260F392F48007831A7 /* Source */ = { + isa = PBXGroup; + children = ( + 3DE2136A124652E20033C839 /* pm_java */, + ); + name = Source; + path = pmdefaults/src; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXLegacyTarget section */ + 89D0F0480F393A6F007831A7 /* Compile Java */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "-e -f \"${SRCROOT}/make/build.xml\" -debug \"$ACTION\""; + buildConfigurationList = 89D0F04B0F393AB7007831A7 /* Build configuration list for PBXLegacyTarget "Compile Java" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/ant; + buildWorkingDirectory = ""; + dependencies = ( + 3DE2145E124666900033C839 /* PBXTargetDependency */, + ); + name = "Compile Java"; + passBuildSettingsInEnvironment = 1; + productName = "Compile Java"; + }; +/* End PBXLegacyTarget section */ + +/* Begin PBXNativeTarget section */ + 8D1107260486CEB800E47090 /* Assemble Application */ = { + isa = PBXNativeTarget; + buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Assemble Application" */; + buildPhases = ( + 89D0F0440F393070007831A7 /* Copy Executable */, + 89D0F11F0F394189007831A7 /* Copy Java Resources */, + 8D1107290486CEB800E47090 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Assemble Application"; + productInstallPath = "$(HOME)/Applications"; + productName = pmdefaults; + productReference = 8D1107320486CEB800E47090 /* PmDefaults.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "pm_mac" */; + compatibilityVersion = "Xcode 3.0"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = 29B97314FDCFA39411CA2CEA /* pmdefaults */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 3D634CAB1247805C0020F829 /* JPortMidiHeaders */, + 89D0F1C90F3B704E007831A7 /* PmDefaults */, + 3DE2142D124662AA0033C839 /* CopyJavaSources */, + 89D0F0480F393A6F007831A7 /* Compile Java */, + 8D1107260486CEB800E47090 /* Assemble Application */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D1107290486CEB800E47090 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3DE216951246D57A0033C839 /* pmdefaults.icns in Resources */, + 89D0F0240F392F20007831A7 /* InfoPlist.strings in Resources */, + 89C3F2920F5250A300B0048E /* Credits.rtf in Resources */, + 3DE2137F124653FB0033C839 /* portmusic_logo.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3D634CAA1247805C0020F829 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo BUILT_PRODUCTS_DIR is ${BUILT_PRODUCTS_DIR}\njavah -classpath \"${BUILT_PRODUCTS_DIR}/pmdefaults.jar\" -force -o \"${BUILT_PRODUCTS_DIR}/jportmidi_JportMidiApi.h\" \"jportmidi.JPortMidiApi\"\nmv \"${BUILT_PRODUCTS_DIR}/jportmidi_JportMidiApi.h\" ../pm_java/pmjni/\necho \"Created ../pm_java/pmjni/jportmidi_JportMidiApi.h\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 3D634CB0124781580020F829 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 89D0F1C90F3B704E007831A7 /* PmDefaults */; + targetProxy = 3D634CAF124781580020F829 /* PBXContainerItemProxy */; + }; + 3DE21431124662C50033C839 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3DE2142D124662AA0033C839 /* CopyJavaSources */; + targetProxy = 3DE21430124662C50033C839 /* PBXContainerItemProxy */; + }; + 3DE2145E124666900033C839 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 3DE2142D124662AA0033C839 /* CopyJavaSources */; + targetProxy = 3DE2145D124666900033C839 /* PBXContainerItemProxy */; + }; + 89D0F1CD0F3B7062007831A7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8D1107260486CEB800E47090 /* Assemble Application */; + targetProxy = 89D0F1CC0F3B7062007831A7 /* PBXContainerItemProxy */; + }; + 89D0F1D10F3B7062007831A7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 89D0F0480F393A6F007831A7 /* Compile Java */; + targetProxy = 89D0F1D00F3B7062007831A7 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 89C3F2900F5250A300B0048E /* Credits.rtf */ = { + isa = PBXVariantGroup; + children = ( + 89C3F2910F5250A300B0048E /* English */, + ); + name = Credits.rtf; + sourceTree = "<group>"; + }; + 89D0F0210F392F20007831A7 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 89D0F0220F392F20007831A7 /* English */, + ); + name = InfoPlist.strings; + sourceTree = "<group>"; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 3D634CAC1247805C0020F829 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = JPortMidiHeaders; + }; + name = Debug; + }; + 3D634CAD1247805C0020F829 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + PRODUCT_NAME = JPortMidiHeaders; + ZERO_LINK = NO; + }; + name = Release; + }; + 3DE2142E124662AB0033C839 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = CopyJavaSources; + }; + name = Debug; + }; + 3DE2142F124662AB0033C839 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + PRODUCT_NAME = CopyJavaSources; + ZERO_LINK = NO; + }; + name = Release; + }; + 89D0F0490F393A6F007831A7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = pmdefaults; + SRCROOT = ./pmdefaults; + }; + name = Debug; + }; + 89D0F04A0F393A6F007831A7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = pmdefaults; + SRCROOT = ./pmdefaults; + }; + name = Release; + }; + 89D0F1CA0F3B704F007831A7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = pmdefaults; + }; + name = Debug; + }; + 89D0F1CB0F3B704F007831A7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = pmdefaults; + }; + name = Release; + }; + C01FCF4B08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; + COPY_PHASE_STRIP = NO; + INFOPLIST_FILE = pmdefaults/resources/Info.plist; + INSTALL_PATH = "$(HOME)/Applications"; + PRODUCT_NAME = pmdefaults; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + C01FCF4C08A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + INFOPLIST_FILE = pmdefaults/resources/Info.plist; + INSTALL_PATH = "$(HOME)/Applications"; + PRODUCT_NAME = PmDefaults; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + C01FCF4F08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + }; + name = Debug; + }; + C01FCF5008A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)"; + ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3D634CAE1247807A0020F829 /* Build configuration list for PBXAggregateTarget "JPortMidiHeaders" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3D634CAC1247805C0020F829 /* Debug */, + 3D634CAD1247805C0020F829 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3DE21434124662FF0033C839 /* Build configuration list for PBXAggregateTarget "CopyJavaSources" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3DE2142E124662AB0033C839 /* Debug */, + 3DE2142F124662AB0033C839 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 89D0F04B0F393AB7007831A7 /* Build configuration list for PBXLegacyTarget "Compile Java" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 89D0F0490F393A6F007831A7 /* Debug */, + 89D0F04A0F393A6F007831A7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 89D0F1D20F3B7080007831A7 /* Build configuration list for PBXAggregateTarget "PmDefaults" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 89D0F1CA0F3B704F007831A7 /* Debug */, + 89D0F1CB0F3B704F007831A7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Assemble Application" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4B08A954540054247B /* Debug */, + C01FCF4C08A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "pm_mac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4F08A954540054247B /* Debug */, + C01FCF5008A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..570e6faa82 --- /dev/null +++ b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Workspace + version = "1.0"> + <FileRef + location = "self:pm_mac.xcodeproj"> + </FileRef> +</Workspace> diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.xcworkspace/xcuserdata/VKamyshniy.xcuserdatad/UserInterfaceState.xcuserstate b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.xcworkspace/xcuserdata/VKamyshniy.xcuserdatad/UserInterfaceState.xcuserstate Binary files differnew file mode 100644 index 0000000000..104c0fe910 --- /dev/null +++ b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.xcworkspace/xcuserdata/VKamyshniy.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Assemble Application.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Assemble Application.xcscheme new file mode 100644 index 0000000000..b2051a67b0 --- /dev/null +++ b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Assemble Application.xcscheme @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "0460" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "8D1107260486CEB800E47090" + BuildableName = "PmDefaults.app" + BlueprintName = "Assemble Application" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Debug"> + <Testables> + </Testables> + <MacroExpansion> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "8D1107260486CEB800E47090" + BuildableName = "PmDefaults.app" + BlueprintName = "Assemble Application" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </MacroExpansion> + </TestAction> + <LaunchAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Debug" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + allowLocationSimulation = "YES"> + <BuildableProductRunnable> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "8D1107260486CEB800E47090" + BuildableName = "PmDefaults.app" + BlueprintName = "Assemble Application" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Release" + debugDocumentVersioning = "YES"> + <BuildableProductRunnable> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "8D1107260486CEB800E47090" + BuildableName = "PmDefaults.app" + BlueprintName = "Assemble Application" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Compile Java.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Compile Java.xcscheme new file mode 100644 index 0000000000..415b487914 --- /dev/null +++ b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Compile Java.xcscheme @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "0460" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "89D0F0480F393A6F007831A7" + BuildableName = "Compile Java" + BlueprintName = "Compile Java" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Debug"> + <Testables> + </Testables> + </TestAction> + <LaunchAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Debug" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + allowLocationSimulation = "YES"> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Release" + debugDocumentVersioning = "YES"> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/CopyJavaSources.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/CopyJavaSources.xcscheme new file mode 100644 index 0000000000..ad37276ccc --- /dev/null +++ b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/CopyJavaSources.xcscheme @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "0460" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "3DE2142D124662AA0033C839" + BuildableName = "CopyJavaSources" + BlueprintName = "CopyJavaSources" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Debug"> + <Testables> + </Testables> + </TestAction> + <LaunchAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Debug" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + allowLocationSimulation = "YES"> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Release" + debugDocumentVersioning = "YES"> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme new file mode 100644 index 0000000000..de0f0bcef7 --- /dev/null +++ b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "0460" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "3D634CAB1247805C0020F829" + BuildableName = "JPortMidiHeaders" + BlueprintName = "JPortMidiHeaders" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Debug"> + <Testables> + </Testables> + </TestAction> + <LaunchAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Debug" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + allowLocationSimulation = "YES"> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Release" + debugDocumentVersioning = "YES"> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/PmDefaults.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/PmDefaults.xcscheme new file mode 100644 index 0000000000..23d63e9bac --- /dev/null +++ b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/PmDefaults.xcscheme @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "0460" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "89D0F1C90F3B704E007831A7" + BuildableName = "PmDefaults" + BlueprintName = "PmDefaults" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Debug"> + <Testables> + </Testables> + </TestAction> + <LaunchAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Debug" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + allowLocationSimulation = "YES"> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Release" + debugDocumentVersioning = "YES"> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/xcschememanagement.plist b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000000..a57f870bb5 --- /dev/null +++ b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>SchemeUserState</key> + <dict> + <key>Assemble Application.xcscheme</key> + <dict> + <key>orderHint</key> + <integer>4</integer> + </dict> + <key>Compile Java.xcscheme</key> + <dict> + <key>orderHint</key> + <integer>3</integer> + </dict> + <key>CopyJavaSources.xcscheme</key> + <dict> + <key>orderHint</key> + <integer>2</integer> + </dict> + <key>JPortMidiHeaders.xcscheme</key> + <dict> + <key>orderHint</key> + <integer>0</integer> + </dict> + <key>PmDefaults.xcscheme</key> + <dict> + <key>orderHint</key> + <integer>1</integer> + </dict> + </dict> + <key>SuppressBuildableAutocreation</key> + <dict> + <key>3D634CAB1247805C0020F829</key> + <dict> + <key>primary</key> + <true/> + </dict> + <key>3DE2142D124662AA0033C839</key> + <dict> + <key>primary</key> + <true/> + </dict> + <key>89D0F0480F393A6F007831A7</key> + <dict> + <key>primary</key> + <true/> + </dict> + <key>89D0F1C90F3B704E007831A7</key> + <dict> + <key>primary</key> + <true/> + </dict> + <key>8D1107260486CEB800E47090</key> + <dict> + <key>primary</key> + <true/> + </dict> + </dict> +</dict> +</plist> diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/Assemble Application.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/Assemble Application.xcscheme new file mode 100644 index 0000000000..b2051a67b0 --- /dev/null +++ b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/Assemble Application.xcscheme @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "0460" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "8D1107260486CEB800E47090" + BuildableName = "PmDefaults.app" + BlueprintName = "Assemble Application" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Debug"> + <Testables> + </Testables> + <MacroExpansion> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "8D1107260486CEB800E47090" + BuildableName = "PmDefaults.app" + BlueprintName = "Assemble Application" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </MacroExpansion> + </TestAction> + <LaunchAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Debug" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + allowLocationSimulation = "YES"> + <BuildableProductRunnable> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "8D1107260486CEB800E47090" + BuildableName = "PmDefaults.app" + BlueprintName = "Assemble Application" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Release" + debugDocumentVersioning = "YES"> + <BuildableProductRunnable> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "8D1107260486CEB800E47090" + BuildableName = "PmDefaults.app" + BlueprintName = "Assemble Application" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/Compile Java.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/Compile Java.xcscheme new file mode 100644 index 0000000000..415b487914 --- /dev/null +++ b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/Compile Java.xcscheme @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "0460" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "89D0F0480F393A6F007831A7" + BuildableName = "Compile Java" + BlueprintName = "Compile Java" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Debug"> + <Testables> + </Testables> + </TestAction> + <LaunchAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Debug" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + allowLocationSimulation = "YES"> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Release" + debugDocumentVersioning = "YES"> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/CopyJavaSources.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/CopyJavaSources.xcscheme new file mode 100644 index 0000000000..ad37276ccc --- /dev/null +++ b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/CopyJavaSources.xcscheme @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "0460" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "3DE2142D124662AA0033C839" + BuildableName = "CopyJavaSources" + BlueprintName = "CopyJavaSources" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Debug"> + <Testables> + </Testables> + </TestAction> + <LaunchAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Debug" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + allowLocationSimulation = "YES"> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Release" + debugDocumentVersioning = "YES"> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme new file mode 100644 index 0000000000..de0f0bcef7 --- /dev/null +++ b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "0460" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "3D634CAB1247805C0020F829" + BuildableName = "JPortMidiHeaders" + BlueprintName = "JPortMidiHeaders" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Debug"> + <Testables> + </Testables> + </TestAction> + <LaunchAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Debug" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + allowLocationSimulation = "YES"> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Release" + debugDocumentVersioning = "YES"> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/PmDefaults.xcscheme b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/PmDefaults.xcscheme new file mode 100644 index 0000000000..23d63e9bac --- /dev/null +++ b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/PmDefaults.xcscheme @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "0460" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "89D0F1C90F3B704E007831A7" + BuildableName = "PmDefaults" + BlueprintName = "PmDefaults" + ReferencedContainer = "container:pm_mac.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Debug"> + <Testables> + </Testables> + </TestAction> + <LaunchAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Debug" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + allowLocationSimulation = "YES"> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Release" + debugDocumentVersioning = "YES"> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/xcschememanagement.plist b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000000..4c011dee54 --- /dev/null +++ b/libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>SchemeUserState</key> + <dict> + <key>Assemble Application.xcscheme</key> + <dict> + <key>orderHint</key> + <integer>5</integer> + </dict> + <key>Compile Java.xcscheme</key> + <dict> + <key>orderHint</key> + <integer>4</integer> + </dict> + <key>CopyJavaSources.xcscheme</key> + <dict> + <key>orderHint</key> + <integer>3</integer> + </dict> + <key>JPortMidiHeaders.xcscheme</key> + <dict> + <key>orderHint</key> + <integer>1</integer> + </dict> + <key>PmDefaults.xcscheme</key> + <dict> + <key>orderHint</key> + <integer>2</integer> + </dict> + </dict> + <key>SuppressBuildableAutocreation</key> + <dict> + <key>3D634CAB1247805C0020F829</key> + <dict> + <key>primary</key> + <true/> + </dict> + <key>3DE2142D124662AA0033C839</key> + <dict> + <key>primary</key> + <true/> + </dict> + <key>89D0F0480F393A6F007831A7</key> + <dict> + <key>primary</key> + <true/> + </dict> + <key>89D0F1C90F3B704E007831A7</key> + <dict> + <key>primary</key> + <true/> + </dict> + <key>8D1107260486CEB800E47090</key> + <dict> + <key>primary</key> + <true/> + </dict> + </dict> +</dict> +</plist> diff --git a/libs/backends/wavesaudio/waves_audiobackend.cc b/libs/backends/wavesaudio/waves_audiobackend.cc index 8a1661b580..8cd94c4e34 100644 --- a/libs/backends/wavesaudio/waves_audiobackend.cc +++ b/libs/backends/wavesaudio/waves_audiobackend.cc @@ -21,6 +21,15 @@ #include "waves_audioport.h" #include "waves_midiport.h" +#include "ardour/runtime_functions.h" + +#ifdef COMPILER_MSVC +#include <windows.h> +#define sleep(X) Sleep((X) * 1000) +// JE - Perhaps we should be using Glib::usleep() here, rather than sleep()?? But +// that would make the Waves backend dependent on Glib (which is isn't, currently). +#endif + using namespace ARDOUR; #if defined __MINGW64__ || defined __MINGW32__ @@ -40,8 +49,8 @@ void WavesAudioBackend::AudioDeviceManagerNotification (NotificationReason reaso std::cout << "------------------------------- WCMRAudioDeviceManagerClient::DeviceDebugInfo -- " << (char*)parameter << std::endl; break; case WCMRAudioDeviceManagerClient::BufferSizeChanged: - std::cout << "------------------------------- WCMRAudioDeviceManagerClient::BufferSizeChanged: " << *(uint32_t*)parameter << std::endl; - _buffer_size_change(*(uint32_t*)parameter); + std::cout << "------------------------------- WCMRAudioDeviceManagerClient::BufferSizeChanged: " << *(int*)parameter << std::endl; + _buffer_size_change(*(int*)parameter); break; case WCMRAudioDeviceManagerClient::RequestReset: std::cout << "------------------------------- WCMRAudioDeviceManagerClient::RequestReset" << std::endl; @@ -52,7 +61,7 @@ void WavesAudioBackend::AudioDeviceManagerNotification (NotificationReason reaso break; case WCMRAudioDeviceManagerClient::SamplingRateChanged: std::cout << "------------------------------- WCMRAudioDeviceManagerClient::SamplingRateChanged: " << *(float*)parameter << std::endl; - set_sample_rate(*(float*)parameter); + _sample_rate_change(*(float*)parameter); break; case WCMRAudioDeviceManagerClient::Dropout: std::cout << "------------------------------- WCMRAudioDeviceManagerClient::Dropout: " << std::endl; @@ -75,7 +84,7 @@ void WavesAudioBackend::AudioDeviceManagerNotification (NotificationReason reaso engine.request_device_list_update(); break; case WCMRAudioDeviceManagerClient::IODeviceDisconnected: - std::cout << "------------------------------- WCMRAudioDeviceManagerClient::DeviceListChanged" << std::endl; + std::cout << "------------------------------- WCMRAudioDeviceManagerClient::IODeviceDisconnected" << std::endl; engine.request_device_list_update(); break; case WCMRAudioDeviceManagerClient::AudioCallback: @@ -221,23 +230,6 @@ float WavesAudioBackend::default_sample_rate () const return AudioBackend::default_sample_rate (); } -uint32_t -WavesAudioBackend::default_buffer_size (const std::string& device_name) const -{ -#ifdef __APPLE__ - return AudioBackend::default_buffer_size (device_name); -#else - DeviceInfo devInfo; - WTErr err = _audio_device_manager.GetDeviceInfoByName(device_name, devInfo); - - if (err != eNoErr) { - std::cerr << "WavesAudioBackend::default_buffer_size (): Failed to get buffer size for device [" << device_name << "]" << std::endl; - return AudioBackend::default_buffer_size (device_name); - } - - return devInfo.m_DefaultBufferSize; -#endif -} std::vector<uint32_t> WavesAudioBackend::available_buffer_sizes (const std::string& device_name) const @@ -418,11 +410,14 @@ WavesAudioBackend::set_sample_rate (float sample_rate) return -1; } - _sample_rate_change(sample_rate); + // if call to set sample rate is successful + // but device sample rate differs from the value we tried to set + // this means we are driven by device for buffer size + sample_rate = _device->CurrentSamplingRate (); + _sample_rate_change(sample_rate); if (device_needs_restart) { // COMMENTED DBG LOGS */ std::cout << "\t\t[" << _device->DeviceName() << "]->SetStreaming (true);"<< std::endl; - _call_thread_init_callback = true; retVal = _device->SetStreaming (true); if (retVal != eNoErr) { std::cerr << "WavesAudioBackend::set_sample_rate (): [" << _device->DeviceName () << "]->SetStreaming (true) failed (" << retVal << ") !" << std::endl; @@ -471,7 +466,6 @@ WavesAudioBackend::set_buffer_size (uint32_t buffer_size) if (device_needs_restart) { // COMMENTED DBG LOGS */ std::cout << "\t\t[" << _device->DeviceName() << "]->SetStreaming (true);"<< std::endl; - _call_thread_init_callback = true; retVal = _device->SetStreaming (true); if (retVal != eNoErr) { std::cerr << "WavesAudioBackend::set_buffer_size (): [" << _device->DeviceName () << "]->SetStreaming (true) failed (" << retVal << ") !" << std::endl; @@ -497,8 +491,6 @@ WavesAudioBackend::reset_device () { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::_reset_device ():" << std::endl; - WTErr retVal = eNoErr; - if (!_device) { std::cerr << "WavesAudioBackend::set_buffer_size (): No device is set!" << std::endl; return -1; @@ -707,7 +699,6 @@ WavesAudioBackend::_start (bool for_latency_measurement) manager.registration_callback (); - _call_thread_init_callback = true; WTErr retVal = _device->SetStreaming (true); if (retVal != eNoErr) { std::cerr << "WavesAudioBackend::_start (): [" << _device->DeviceName () << "]->SetStreaming () failed!" << std::endl; @@ -738,11 +729,6 @@ WavesAudioBackend::_audio_device_callback (const float* input_buffer, // COMMENTED FREQUENT DBG LOGS */ std::cout << "WavesAudioBackend::_audio_device_callback ():" << _device->DeviceName () << std::endl; _sample_time_at_cycle_start = sample_time; _cycle_start_time_nanos = cycle_start_time_nanos; - - /* There is the possibility that the thread this runs in may change from - * callback to callback, so do it every time. - */ - _main_thread = pthread_self (); if (_buffer_size != nframes) { // COMMENTED DBG LOGS */ std::cout << "\tAudioEngine::thread_init_callback() buffer size and nframes are not equal: " << _buffer_size << "!=" << nframes << std::endl; @@ -755,9 +741,30 @@ WavesAudioBackend::_audio_device_callback (const float* input_buffer, if (_call_thread_init_callback) { _call_thread_init_callback = false; // COMMENTED DBG LOGS */ std::cout << "\tAudioEngine::thread_init_callback() invoked for " << std::hex << pthread_self() << std::dec << " !" << std::endl; + + /* There is the possibility that the thread this runs in may change from + * callback to callback, so do it every time. + */ + _main_thread = pthread_self (); + AudioEngine::thread_init_callback (this); } + if ( !engine.thread_initialised_for_audio_processing () ) { + std::cerr << "\tWavesAudioBackend::_audio_device_callback (): It's an attempt to call process callback from the thread which didn't initialize it " << std::endl; + + AudioEngine::thread_init_callback (this); + } + + if (pthread_equal (_main_thread, pthread_self()) == 0) { +#ifdef PTW32_VERSION + std::cerr << "Process thread ID has changed. Expected thread: " << _main_thread.p << " current thread: " << pthread_self().p << std::dec << " !" << std::endl; +#else + std::cerr << "Process thread ID has changed. Expected thread: " << _main_thread << " current thread: " << pthread_self() << std::dec << " !" << std::endl; +#endif + _main_thread = pthread_self(); + } + engine.process_callback (nframes); _write_audio_data_to_device (output_buffer, nframes); @@ -815,11 +822,23 @@ WavesAudioBackend::freewheel (bool start_stop) } _call_thread_init_callback = true; _freewheel_thread (); - engine.freewheel_callback (start_stop); + + while (!engine.freewheeling()) { + sleep(0); + } + + // freewheel thread was not activated successfully + if (_freewheel_thread_active == false) { + engine.freewheel_callback(false); + } } else { _freewheel_thread_active = false; // stop _freewheel_thread () - engine.freewheel_callback (start_stop); + + while (engine.freewheeling()) { + sleep(0); + } + _call_thread_init_callback = true; WTErr retval = _device->SetStreaming (true); if (retval != eNoErr) { @@ -859,6 +878,10 @@ WavesAudioBackend::_freewheel_thread () _freewheel_thread_active = true; if ((pthread_create (&thread_id, &attributes, __start_process_thread, thread_data))) { _freewheel_thread_active = false; + + // release invoking thread + engine.freewheel_callback(true); + std::cerr << "WavesAudioBackend::freewheel_thread (): pthread_create () failed!" << std::endl; return; } @@ -867,6 +890,9 @@ WavesAudioBackend::_freewheel_thread () return; } + // notify angine that freewheeling is started + engine.freewheel_callback(true); + if (_call_thread_init_callback) { _call_thread_init_callback = false; AudioEngine::thread_init_callback (this); @@ -875,6 +901,10 @@ WavesAudioBackend::_freewheel_thread () while (_freewheel_thread_active) { engine.process_callback (_buffer_size); } + + // notify angine that freewheeling is stopped + engine.freewheel_callback(false); + // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::_freewheel_thread (): FINISHED" << std::endl; return; } @@ -1158,13 +1188,12 @@ WavesAudioBackend::_read_audio_data_from_device (const float* input_buffer, pfra { #if defined(PLATFORM_WINDOWS) const float **buffer = (const float**)input_buffer; - size_t copied_bytes = nframes*sizeof(float); for(std::vector<WavesAudioPort*>::iterator it = _physical_audio_inputs.begin (); it != _physical_audio_inputs.end(); ++it) { - memcpy((*it)->buffer(), *buffer, copied_bytes); + ARDOUR::copy_vector ((*it)->buffer(), *buffer, nframes); ++buffer; } #else @@ -1247,7 +1276,6 @@ WavesAudioBackend::__instantiate (const std::string& arg1, const std::string& ar LARGE_INTEGER Frequency; QueryPerformanceFrequency(&Frequency); __performance_counter_frequency = Frequency.QuadPart; - std::cout << "__performance_counter_frequency:" << __performance_counter_frequency << std::endl; #endif return 0; diff --git a/libs/backends/wavesaudio/waves_audiobackend.h b/libs/backends/wavesaudio/waves_audiobackend.h index ad40d094df..74322b1084 100644 --- a/libs/backends/wavesaudio/waves_audiobackend.h +++ b/libs/backends/wavesaudio/waves_audiobackend.h @@ -93,8 +93,6 @@ class WavesMidiPort; virtual std::vector<uint32_t> available_buffer_sizes (const std::string& device) const; - virtual uint32_t default_buffer_size (const std::string& device) const; - virtual uint32_t available_input_channel_count (const std::string& device) const; virtual uint32_t available_output_channel_count (const std::string& device) const; diff --git a/libs/backends/wavesaudio/waves_audioport.cc b/libs/backends/wavesaudio/waves_audioport.cc index 4ded37d906..4918025bea 100644 --- a/libs/backends/wavesaudio/waves_audioport.cc +++ b/libs/backends/wavesaudio/waves_audioport.cc @@ -18,13 +18,21 @@ */ #include "waves_audioport.h" +#include "ardour/runtime_functions.h" +#include "pbd/malign.h" using namespace ARDOUR; WavesAudioPort::WavesAudioPort (const std::string& port_name, PortFlags flags) : WavesDataPort (port_name, flags) { - memset (_buffer, 0, sizeof (_buffer)); + aligned_malloc ((void**)&_buffer, MAX_BUFFER_SIZE_BYTES, 32 /*32 byte alignment*/); + memset (_buffer, 0, MAX_BUFFER_SIZE_BYTES); +} + +WavesAudioPort::~WavesAudioPort () +{ + aligned_free (_buffer); } @@ -40,14 +48,19 @@ void* WavesAudioPort::get_buffer (pframes_t nframes) * Base class WavesDataPort takes is supposed to provide enough consistentcy * of the connections. */ - for (memcpy (_buffer, ((const WavesAudioPort*)*it)->const_buffer (), nframes * sizeof (Sample)), ++it; - it != get_connections ().end (); - ++it) { - Sample* tgt = buffer (); - const Sample* src = ((const WavesAudioPort*)*it)->const_buffer (); - for (uint32_t frame = 0; frame < nframes; ++frame, ++tgt, ++src) { - *tgt += *src; - } + + // get first buffer data + // use optimized function to fill the buffer intialy + ARDOUR::copy_vector (_buffer, ((const WavesAudioPort*)*it)->const_buffer (), nframes); + ++it; + + // mix the rest + for (; it != get_connections ().end (); ++it) { + Sample* tgt = buffer (); + const Sample* src = ((const WavesAudioPort*)*it)->const_buffer (); + + // use otimized function to mix the buffers + ARDOUR::mix_buffers_no_gain (tgt, src, nframes); } } } @@ -59,4 +72,4 @@ void WavesAudioPort::_wipe_buffer() { memset (_buffer, 0, sizeof (_buffer)); -}
\ No newline at end of file +} diff --git a/libs/backends/wavesaudio/waves_audioport.h b/libs/backends/wavesaudio/waves_audioport.h index 5b4ab52449..d658dba868 100644 --- a/libs/backends/wavesaudio/waves_audioport.h +++ b/libs/backends/wavesaudio/waves_audioport.h @@ -35,7 +35,7 @@ public: WavesAudioPort (const std::string& port_name, PortFlags flags); - virtual ~WavesAudioPort () { }; + virtual ~WavesAudioPort (); virtual DataType type () const { return DataType::AUDIO; }; @@ -49,7 +49,7 @@ protected: private: - Sample _buffer[MAX_BUFFER_SIZE_SAMPLES]; + Sample *_buffer; }; } // namespace diff --git a/libs/backends/wavesaudio/waves_dataport.cc b/libs/backends/wavesaudio/waves_dataport.cc index d1dacc90eb..b5485ac2b3 100644 --- a/libs/backends/wavesaudio/waves_dataport.cc +++ b/libs/backends/wavesaudio/waves_dataport.cc @@ -35,7 +35,7 @@ WavesDataPort::WavesDataPort (const std::string& inport_name, PortFlags inflags) WavesDataPort::~WavesDataPort () { - disconnect_all (); + _disconnect_all (); } @@ -67,7 +67,7 @@ int WavesDataPort::connect (WavesDataPort *port) } if (is_connected (port)) { - std::cerr << "WavesDataPort::connect (): the ports are already connected!" << std::endl; + // std::cerr << "WavesDataPort::connect (): the ports are already connected!" << std::endl; return -1; } @@ -115,8 +115,7 @@ void WavesDataPort::_disconnect (WavesDataPort *port, bool api_call) port->_disconnect (this, false); } - if (is_input() && _connections.empty()) - { + if (is_input() && _connections.empty()) { _wipe_buffer(); } } @@ -124,13 +123,21 @@ void WavesDataPort::_disconnect (WavesDataPort *port, bool api_call) void WavesDataPort::disconnect_all () { + _disconnect_all (); + + if (is_input()) { + _wipe_buffer(); + } +} + +void WavesDataPort::_disconnect_all () +{ while (!_connections.empty ()) { _connections.back ()->_disconnect (this, false); _connections.pop_back (); } } - bool WavesDataPort::is_physically_connected () const { for (std::vector<WavesDataPort*>::const_iterator it = _connections.begin (); it != _connections.end (); ++it) { diff --git a/libs/backends/wavesaudio/waves_dataport.h b/libs/backends/wavesaudio/waves_dataport.h index 1b2f26f3f1..a5b8243bbe 100644 --- a/libs/backends/wavesaudio/waves_dataport.h +++ b/libs/backends/wavesaudio/waves_dataport.h @@ -106,6 +106,7 @@ private: std::vector<WavesDataPort*> _connections; void _connect (WavesDataPort* port, bool api_call); + void _disconnect_all (); void _disconnect (WavesDataPort* port, bool api_call); }; diff --git a/libs/backends/wavesaudio/waves_midi_device.cc b/libs/backends/wavesaudio/waves_midi_device.cc index 25d06da481..9bb6661136 100644 --- a/libs/backends/wavesaudio/waves_midi_device.cc +++ b/libs/backends/wavesaudio/waves_midi_device.cc @@ -18,6 +18,12 @@ */ #include <iostream> + +#include "pbd/error.h" +#include "pbd/debug.h" +#include "pbd/compose.h" +#include "pbd/stacktrace.h" + #include "waves_midi_device.h" #include "waves_midi_event.h" @@ -27,6 +33,7 @@ #define QUEUE_LENGTH 1024 using namespace ARDOUR; +using namespace PBD; WavesMidiDevice::WavesMidiDevice (const std::string& device_name) : _pm_input_id (pmNoDevice) @@ -61,14 +68,16 @@ WavesMidiDevice::WavesMidiDevice (const std::string& device_name) WavesMidiDevice::~WavesMidiDevice () { - // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::~WavesMidiDevice ():" << name () << std::endl; - close (); + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::~WavesMidiDevice (): %1\n", name())); + close (); } int WavesMidiDevice::open (PmTimeProcPtr time_proc, void* time_info) { - if (is_input () ) { + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::open (): %1", name ())); + + if (is_input () ) { // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::open (): INPUT" << _pm_input_id << "-[" << name () << "]" << std::endl; if (!_input_pm_stream) { @@ -78,26 +87,26 @@ WavesMidiDevice::open (PmTimeProcPtr time_proc, void* time_info) _input_queue = Pm_QueueCreate (QUEUE_LENGTH, sizeof (const WavesMidiEvent*)); // COMMENTED DBG LOGS */ std::cout << " DONE : " << std::endl; if (NULL == _input_queue) { - std::cerr << "WavesMidiDevice::open (): _input_queue = Pm_QueueCreate () failed for " << _pm_input_id << "-[" << name () << "]!" << std::endl; - return -1; + std::cerr << "WavesMidiDevice::open (): _input_queue = Pm_QueueCreate () failed for " << _pm_input_id << "-[" << name () << "]!" << std::endl; + return -1; } } // create stream // COMMENTED DBG LOGS */ std::cout << " going to Pm_OpenInput : " << std::endl; - if (pmNoError != Pm_OpenInput (&_input_pm_stream, - _pm_input_id, - NULL, - 1024, - time_proc, - time_info)) { - // COMMENTED DBG LOGS */ std::cout << " DONE : " << std::endl; - char* err_msg = new char[256]; - Pm_GetHostErrorText(err_msg, 256); - std::cerr << "WavesMidiDevice::open (): Pm_OpenInput () failed for " << _pm_input_id << "-[" << name () << "]!" << std::endl; - std::cerr << " Port Midi Host Error: " << err_msg << std::endl; - close (); - return -1; - } + if (pmNoError != Pm_OpenInput (&_input_pm_stream, + _pm_input_id, + NULL, + 1024, + time_proc, + time_info)) { + // COMMENTED DBG LOGS */ std::cout << " DONE : " << std::endl; + char* err_msg = new char[256]; + Pm_GetHostErrorText(err_msg, 256); + std::cerr << "WavesMidiDevice::open (): Pm_OpenInput () failed for " << _pm_input_id << "-[" << name () << "]!" << std::endl; + std::cerr << " Port Midi Host Error: " << err_msg << std::endl; + close (); + return -1; + } // COMMENTED DBG LOGS */ std::cout << " DONE : " << std::endl; } } @@ -142,6 +151,7 @@ WavesMidiDevice::open (PmTimeProcPtr time_proc, void* time_info) void WavesMidiDevice::close () { + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::close (): %1\n", name ())); WavesMidiEvent *waves_midi_event; // save _input_pm_stream and _output_pm_stream to local buf @@ -197,114 +207,123 @@ WavesMidiDevice::close () void WavesMidiDevice::do_io () { - read_midi (); - write_midi (); + read_midi (); + write_midi (); } void WavesMidiDevice::read_midi () { - if (NULL == _input_pm_stream) { - return; - } - - // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_read_midi (): " << _pm_device_id << "-[" << name () << "]" << std::endl; - - while (Pm_Poll (_input_pm_stream) > 0) { - PmEvent pm_event; // just one message at a time - int result = Pm_Read (_input_pm_stream, &pm_event, 1); - if (result < 0) { - std::cerr << "WavesMidiDevice::_read_midi (): Pm_Read () failed (" << result << ") for [" << name () << "]!" << std::endl; - break; - } - // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_read_midi (): " << _pm_device_id << "-[" << name () << "] evt-tm:" << pm_event.timestamp << std::endl; - if (_incomplete_waves_midi_event == NULL ) { - // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_read_midi (): " << _pm_device_id << "-[" << name () << "] : new _incomplete_waves_midi_event" << std::endl; - _incomplete_waves_midi_event = new WavesMidiEvent (pm_event.timestamp); + if (NULL == _input_pm_stream) { + return; } - WavesMidiEvent *nested_pm_event = _incomplete_waves_midi_event->append_data (pm_event); - if (nested_pm_event) { - Pm_Enqueue (_input_queue, &nested_pm_event); - // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_read_midi (): " << _pm_device_id << "-[" << name () << "] : Pm_Enqueue (_input_queue, nested_pm_event)" << std::endl; + while (Pm_Poll (_input_pm_stream) > 0) { + + PmEvent pm_event; // just one message at a time + int result = Pm_Read (_input_pm_stream, &pm_event, 1); + + if (result < 0) { + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("Pm_Read failed for (): [%1]\n", name())); + break; + } + + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::_read_midi (): [%1] evt-tm: %2\n", name(), pm_event.timestamp)); + + if (_incomplete_waves_midi_event == NULL ) { + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::_read_midi (): [%1] new incomplete_waves_midi_event\n", name())); + _incomplete_waves_midi_event = new WavesMidiEvent (pm_event.timestamp); + } + + WavesMidiEvent *nested_pm_event = _incomplete_waves_midi_event->append_data (pm_event); + + if (nested_pm_event) { + Pm_Enqueue (_input_queue, &nested_pm_event); + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::_read_midi (): [%1] : Pm_Enqueue (_input_queue, nested_pm_event)\n", name())); + } + + switch ( _incomplete_waves_midi_event->state ()) { + case WavesMidiEvent::BROKEN: + delete _incomplete_waves_midi_event; + _incomplete_waves_midi_event = NULL; + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::_read_midi (): [%1] : case WavesMidiEvent::BROKEN:\n", name())); + break; + case WavesMidiEvent::COMPLETE: + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::_read_midi (): [%1] : Pm_Enqueue (_input_queue, _incomplete_waves_midi_event); %3\n", name (), _incomplete_waves_midi_event)); + + if (pmNoError != Pm_Enqueue (_input_queue, &_incomplete_waves_midi_event) ) { + char* err_msg = new char[256]; + Pm_GetHostErrorText(err_msg, 256); + std::cerr << "WavesMidiDevice::read_midi (): Pm_Enqueue () failed for [" << name () << "]!" << std::endl; + std::cerr << "Error: " << err_msg << std::endl; + } + + _incomplete_waves_midi_event = NULL; + break; + default: + break; + } } - switch ( _incomplete_waves_midi_event->state ()) { - case WavesMidiEvent::BROKEN: - delete _incomplete_waves_midi_event; - _incomplete_waves_midi_event = NULL; - // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_read_midi (): " << _pm_device_id << "-[" << name () << "] : case WavesMidiEvent::BROKEN:" << std::endl; - break; - case WavesMidiEvent::COMPLETE: - // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_read_midi (): " << _pm_device_id << "-[" << name () << "] : Pm_Enqueue (_input_queue, _incomplete_waves_midi_event); " << std::hex << (void*)_incomplete_waves_midi_event << std::dec << std::endl; - Pm_Enqueue (_input_queue, &_incomplete_waves_midi_event); - _incomplete_waves_midi_event = NULL; - break; - default: - break; - } - } } - void WavesMidiDevice::write_midi () { - if (NULL == _output_pm_stream) { - return; - } - // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_write_midi (): " << _pm_device_id << "-[" << name () << "]" << std::endl; - - PmError err; - WavesMidiEvent *waves_midi_event; - - while (1 == Pm_Dequeue (_output_queue, &waves_midi_event)) { - if (waves_midi_event->sysex ()) { - // LATENCY compensation - err = Pm_WriteSysEx (_output_pm_stream, waves_midi_event->timestamp () - LATENCY, waves_midi_event->data ()); - if (0 > err) { - std::cout << "WavesMidiDevice::write_event_to_device (): [" << name () << "] Pm_WriteSysEx () failed (" << err << ")!" << std::endl; - }; - // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_write_midi (): SYSEX used, ev->tm:" << waves_midi_event->timestamp () - LATENCY << std::endl; + if (NULL == _output_pm_stream) { + return; } - else - { - err = Pm_WriteShort (_output_pm_stream, waves_midi_event->timestamp () - LATENCY, * (PmMessage*)waves_midi_event->data ()); - if (0 > err) { - std::cout << "WavesMidiDevice::write_event_to_device (): [" << name () << "] Pm_WriteShort () failed (" << err << ")!" << std::endl; - } - // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::_write_midi (): SHORTMSG used, ev->tm:" << waves_midi_event->timestamp () - LATENCY << std::endl; + + PmError err; + WavesMidiEvent *waves_midi_event; + + while (1 == Pm_Dequeue (_output_queue, &waves_midi_event)) { + if (waves_midi_event->sysex ()) { + // LATENCY compensation + err = Pm_WriteSysEx (_output_pm_stream, waves_midi_event->timestamp () - LATENCY, waves_midi_event->data ()); + if (0 > err) { + std::cerr << "WavesMidiDevice::write_event_to_device (): [" << name () << "] Pm_WriteSysEx () failed (" << err << ")!" << std::endl; + }; + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::_write_midi (): SYSEX used, ev->tm: %1", waves_midi_event->timestamp () - LATENCY)); + } + else + { + err = Pm_WriteShort (_output_pm_stream, waves_midi_event->timestamp () - LATENCY, * (PmMessage*)waves_midi_event->data ()); + if (0 > err) { + error << "WavesMidiDevice::write_event_to_device (): [" << name () << "] Pm_WriteShort () failed (" << err << ")!" << endmsg; + } + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::_write_midi (): SHORTMSG used, ev->tm: %1\n", waves_midi_event->timestamp () - LATENCY)); + } } - } - return; -} + return; +} + int WavesMidiDevice::enqueue_output_waves_midi_event (const WavesMidiEvent* waves_midi_event) { - // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::enqueue_output_waves_midi_event (): " << _pm_device_id << "-[" << name () << "]" << std::endl; - - if (waves_midi_event == NULL) { - std::cerr << "WavesMidiDevice::put_event_to_callback (): 'waves_midi_event' is NULL!" << std::endl; - return -1; - } - - PmError err = Pm_Enqueue (_output_queue, &waves_midi_event); - - if (0 > err) { - std::cerr << "WavesMidiDevice::put_event_to_callback (): Pm_Enqueue () failed (" << err << ")!" << std::endl; - return -1; - }; - - return 0; + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::enqueue_output_waves_midi_event () [%1]\n", name())); + + if (waves_midi_event == NULL) { + error << "WavesMidiDevice::put_event_to_callback (): 'waves_midi_event' is NULL!" << endmsg; + return -1; + } + + PmError err = Pm_Enqueue (_output_queue, &waves_midi_event); + + if (0 > err) { + error << "WavesMidiDevice::put_event_to_callback (): Pm_Enqueue () failed (" << err << ")!" << endmsg; + return -1; + }; + + return 0; } WavesMidiEvent* WavesMidiDevice::dequeue_input_waves_midi_event () { - WavesMidiEvent* waves_midi_event; - if (Pm_Dequeue (_input_queue, &waves_midi_event) == 1) { - return waves_midi_event; - } - return NULL; + WavesMidiEvent* waves_midi_event; + if (Pm_Dequeue (_input_queue, &waves_midi_event) == 1) { + return waves_midi_event; + } + return NULL; } - diff --git a/libs/backends/wavesaudio/waves_midi_device_manager.cc b/libs/backends/wavesaudio/waves_midi_device_manager.cc index dcc5fa0f03..344deeeea9 100644 --- a/libs/backends/wavesaudio/waves_midi_device_manager.cc +++ b/libs/backends/wavesaudio/waves_midi_device_manager.cc @@ -54,7 +54,7 @@ WavesMidiDeviceManager::~WavesMidiDeviceManager () int WavesMidiDeviceManager::start () { - // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::stream ():" << std::endl; + // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::start ():" << std::endl; if ( _active == true ) { return -1; } @@ -77,7 +77,7 @@ WavesMidiDeviceManager::start () int WavesMidiDeviceManager::stream (bool yn) { - // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::stream ():" << std::endl; + // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::stream (" << (yn?"true":"false") << "):" << std::endl; if (!_active) { std::cerr << "WavesMidiDeviceManager::stream (): the midi device manager is not started up !" << std::endl; return -1; @@ -88,7 +88,8 @@ WavesMidiDeviceManager::stream (bool yn) } if (yn) { - if ( Pt_Start (1, __portmidi_callback, this) != ptNoError) { + // __portmidi_callback will be called once per 50 msec + if ( Pt_Start (50, __portmidi_callback, this) != ptNoError) { std::cerr << "WavesMidiDeviceManager::stream (): Pt_Start () failed!" << std::endl; return -1; } @@ -130,7 +131,7 @@ WavesMidiDeviceManager::stop () void WavesMidiDeviceManager::__portmidi_callback (PtTimestamp timestamp, void * userData) { - // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::__portmidi_callback ():" << std::endl; + // COMMENTED FREQUENT DBG LOGS */ std::cout << "WavesMidiDeviceManager::__portmidi_callback ():" << std::endl; WavesMidiDeviceManager *dm = (WavesMidiDeviceManager *)userData; if (dm == NULL) { @@ -149,8 +150,10 @@ WavesMidiDeviceManager::_portmidi_callback (PtTimestamp timestamp) if ((_input_device_count != midiInGetNumDevs ()) || (_output_device_count != midiOutGetNumDevs ())) { _audiobackend._changed_midi_devices (); - return; - } + // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::_portmidi_callback ():" << std::endl; + // COMMENTED DBG LOGS */ std::cout << " _input_device_count ?= midiInGetNumDevs () :" << _input_device_count << " ?= " << midiInGetNumDevs () << std::endl; + // COMMENTED DBG LOGS */ std::cout << " _output_device_count ?= midiOutGetNumDevs () :" << _output_device_count << " ?= " << midiOutGetNumDevs () << std::endl; + } } void WavesMidiDeviceManager::do_read () @@ -178,6 +181,7 @@ WavesMidiDeviceManager::__get_time_ms (void *time_info) WavesMidiDevice* WavesMidiDeviceManager::_get_device (const std::string& name) { + // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::_get_device ():" << std::endl; for (size_t i = 0; i < _devices.size (); i++) { if (name == _devices[i]->name ()) { return _devices[i]; @@ -190,12 +194,23 @@ WavesMidiDevice* WavesMidiDeviceManager::_get_device (const std::string& name) int WavesMidiDeviceManager::_create_devices () { + // COMMENTED DBG LOGS */ std::cout << "WavesMidiDeviceManager::_create_devices () :" << std::endl; int count = Pm_CountDevices (); for (int i = 0; i < count; i++) { const PmDeviceInfo* pm_device_info = Pm_GetDeviceInfo (i); - + // COMMENTED DBG LOGS */ std::cout << " interf : " << pm_device_info->interf << std::endl; + // COMMENTED DBG LOGS */ std::cout << " name : " << pm_device_info->name << std::endl; + // COMMENTED DBG LOGS */ std::cout << " input : " << pm_device_info->input << std::endl; + // COMMENTED DBG LOGS */ std::cout << " output : " << pm_device_info->output << std::endl; + // COMMENTED DBG LOGS */ std::cout << " opened : " << pm_device_info->opened << std::endl; +#if defined (PLATFORM_WINDOWS) + if (strncmp (pm_device_info->name, "Microsoft", strlen ("Microsoft")) == 0) { + // COMMENTED DBG LOGS */ std::cout << " skipping anything from Microsoft :" << pm_device_info->name << std::endl; + continue; + } +#endif if (pm_device_info == NULL) { std::cerr << "WavesMidiDeviceManager::_create_devices (): Pm_GetDeviceInfo (" << i << ") failed!" << std::endl; continue; diff --git a/libs/backends/wavesaudio/waves_midi_event.cc b/libs/backends/wavesaudio/waves_midi_event.cc index 7960cb4871..f75946c6a4 100644 --- a/libs/backends/wavesaudio/waves_midi_event.cc +++ b/libs/backends/wavesaudio/waves_midi_event.cc @@ -16,10 +16,15 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include "pbd/debug.h" +#include "pbd/compose.h" + #include "memory.h" #include "waves_midi_event.h" using namespace ARDOUR; +using namespace PBD; WavesMidiEvent::WavesMidiEvent (PmTimestamp timestamp) : _size (0) @@ -37,13 +42,27 @@ WavesMidiEvent::WavesMidiEvent (PmTimestamp timestamp, const uint8_t* data, size , _data (data && datalen ? new uint8_t[ (datalen < sizeof (PmMessage)) ? sizeof (PmMessage) : datalen] : NULL) , _state (data && datalen ? COMPLETE : BROKEN) { - // COMMENTED DBG LOGS */ std::cout << "WavesMidiEvent::WavesMidiEvent (const WavesMidiEvent& source) : Size=" << _size << "---" << datalen << std::endl; - if (_state == COMPLETE) { - // COMMENTED DBG LOGS */ std::cout << "\t\t\t Allocated Size=" << ((datalen < sizeof (PmMessage)) ? sizeof (PmMessage) : datalen) << std::endl; - memcpy (_data, data, datalen); - } -} + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ( "WavesMidiEvent::WavesMidiEvent (const WavesMidiEvent& source) : Size=%1---%2\n", _size, datalen)); + if (_state == COMPLETE) { + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ( "\t\t\t Allocated Size=%1\n", ((datalen < sizeof (PmMessage)) ? sizeof (PmMessage) : datalen))); + memcpy (_data, data, datalen); + +#ifndef NDEBUG + if (DEBUG_ENABLED (DEBUG::WavesMIDI)) { + DEBUG_STR_DECL(a); + for (size_t i=0; i < datalen; ++i) { + DEBUG_STR_APPEND(a,std::hex); + DEBUG_STR_APPEND(a,"0x"); + DEBUG_STR_APPEND(a,(int)data[i]); + DEBUG_STR_APPEND(a,' '); + } + DEBUG_STR_APPEND(a,'\n'); + DEBUG_TRACE (DEBUG::WavesMIDI, DEBUG_STR(a).str()); + } +#endif + } +} WavesMidiEvent::WavesMidiEvent (const WavesMidiEvent& source) : _size (source.size ()) @@ -51,11 +70,25 @@ WavesMidiEvent::WavesMidiEvent (const WavesMidiEvent& source) , _data ((source.size () && source.const_data ()) ? new uint8_t[ (source.size () < sizeof (PmMessage)) ? sizeof (PmMessage) : source.size ()] : NULL) , _state (source.state () ) { - // COMMENTED DBG LOGS */ std::cout << "WavesMidiEvent::WavesMidiEvent (const WavesMidiEvent& source) : Size=" << _size << "---" << source.size () << std::endl; - // COMMENTED DBG LOGS */ std::cout << "\t\t\t Allocated Size=" << ((source.size () < sizeof (PmMessage)) ? sizeof (PmMessage) : source.size ()) << std::endl; - if (_data && source.const_data ()) { - memcpy (_data, source.const_data (), source.size ()); - } + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ( "WavesMidiEvent::WavesMidiEvent (const WavesMidiEvent& source) : Size=%1---%2\n", _size, source.size ())); + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ( "\t\t\t Allocated Size=%1\n", ((source.size () < sizeof (PmMessage)) ? sizeof (PmMessage) : source.size ()))); + if (_data && source.const_data ()) { + memcpy (_data, source.const_data (), source.size ()); + +#ifndef NDEBUG + if (DEBUG_ENABLED (DEBUG::WavesMIDI)) { + DEBUG_STR_DECL(a); + for (size_t i=0; i < source.size(); ++i) { + DEBUG_STR_APPEND(a,std::hex); + DEBUG_STR_APPEND(a,"0x"); + DEBUG_STR_APPEND(a,(int)source.const_data()[i]); + DEBUG_STR_APPEND(a,' '); + } + DEBUG_STR_APPEND(a,'\n'); + DEBUG_TRACE (DEBUG::WavesMIDI, DEBUG_STR(a).str()); + } +#endif + } } @@ -67,74 +100,78 @@ WavesMidiEvent::~WavesMidiEvent () WavesMidiEvent *WavesMidiEvent::append_data (const PmEvent &midi_event) { - switch ( _state ) { + switch ( _state ) { case INCOMPLETE: - break; - default: - // COMMENTED DBG LOGS */ std::cout << "WavesMidiEvent::append_data (): NO case INCOMPLETE" << std::endl; - _state = BROKEN; - return NULL; - } - - size_t message_size = _midi_message_size (midi_event.message); - uint8_t message_status = Pm_MessageStatus (midi_event.message); - - if (_data == NULL) { // This is a first event to add - bool sysex = (message_status == SYSEX); - _data = new unsigned char [sysex ? PM_DEFAULT_SYSEX_BUFFER_SIZE : sizeof (PmMessage)]; - if (!sysex) - { - // COMMENTED DBG LOGS */ std::cout << "WavesMidiEvent::append_data (): SHORT MSG" << std::endl; - * (PmMessage*)_data = 0; - switch (message_size) { - case 1: - case 3: - _size = message_size; - // COMMENTED DBG LOGS */ std::cout << "WavesMidiEvent::append_data (): size = " << _size << std::endl; break; - default: - // COMMENTED DBG LOGS */ std::cout << "WavesMidiEvent::append_data (): WRONG MESSAGE SIZE (" << message_size << ") in the message: "; - // COMMENTED DBG LOGS */ std::cout << std::hex << (int) ((unsigned char*)&midi_event)[0] << " " << (int) ((unsigned char*)&midi_event)[1] << " " << (int) ((unsigned char*)&midi_event)[2] << " " << (int) ((unsigned char*)&midi_event)[3] << std::dec << std::endl; - _state = BROKEN; + default: + DEBUG_TRACE (DEBUG::WavesMIDI, "WavesMidiEvent::append_data (): NO case INCOMPLETE\n"); + _state = BROKEN; return NULL; - } - // COMMENTED DBG LOGS */ std::cout << "\t size = " << _size << std::endl; - memcpy (_data, &midi_event.message, _size); - // COMMENTED DBG LOGS */ std::cout << "\t\t size = " << _size << std::endl; - _state = COMPLETE; - // COMMENTED DBG LOGS */ std::cout << "\t\t\t size = " << _size << std::endl; - return NULL; } - } - - // Now let's parse to sysex msg - if (message_status >= REAL_TIME_FIRST) { // Nested Real Time MIDI event - WavesMidiEvent *waves_midi_message = new WavesMidiEvent (midi_event.timestamp); - waves_midi_message->append_data (midi_event); - return waves_midi_message; - } - - if (message_status >= STATUS_FIRST && (message_status != EOX) && _size) { // Certainly it's a broken SYSEX case - WavesMidiEvent *waves_midi_message = new WavesMidiEvent (midi_event.timestamp); - waves_midi_message->append_data (midi_event); - return waves_midi_message; - } + + size_t message_size = _midi_message_size (midi_event.message); + uint8_t message_status = Pm_MessageStatus (midi_event.message); + + if (_data == NULL) { // This is a first event to add + bool sysex = (message_status == SYSEX); + _data = new unsigned char [sysex ? PM_DEFAULT_SYSEX_BUFFER_SIZE : sizeof (PmMessage)]; + if (!sysex) + { + DEBUG_TRACE (DEBUG::WavesMIDI, "WavesMidiEvent::append_data (): SHORT MSG\n"); + * (PmMessage*)_data = 0; + switch (message_size) { + case 1: + case 2: + case 3: + _size = message_size; + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ( "WavesMidiEvent::append_data (): size = %1\n", _size)); + break; + default: + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ( "WavesMidiEvent::append_data (): WRONG MESSAGE SIZE (%1 not %2) %3 [%4 %5 %6 %7] %8\n", + message_size, + std::hex, + (int) ((unsigned char*)&midi_event)[0], + (int) ((unsigned char*)&midi_event)[1], + (int) ((unsigned char*)&midi_event)[2], + (int) ((unsigned char*)&midi_event)[3], + std::dec)); + _state = BROKEN; + return NULL; + } + memcpy (_data, &midi_event.message, _size); + _state = COMPLETE; + DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ( "\t\t\t size = %1\n", _size)); + return NULL; + } + } + + // Now let's parse to sysex msg + if (message_status >= REAL_TIME_FIRST) { // Nested Real Time MIDI event + WavesMidiEvent *waves_midi_message = new WavesMidiEvent (midi_event.timestamp); + waves_midi_message->append_data (midi_event); + return waves_midi_message; + } + + if (message_status >= STATUS_FIRST && (message_status != EOX) && _size) { // Certainly it's a broken SYSEX case + WavesMidiEvent *waves_midi_message = new WavesMidiEvent (midi_event.timestamp); + waves_midi_message->append_data (midi_event); + return waves_midi_message; + } - const uint8_t* source_data ((uint8_t*)&midi_event.message); - - for (size_t i = 0; i < sizeof (midi_event.message); ++i) { - _data[_size] = source_data[i]; - _size++; + const uint8_t* source_data ((uint8_t*)&midi_event.message); - if (source_data[i] == EOX) { // Ended SYSEX message - _state = COMPLETE; - return NULL; + for (size_t i = 0; i < sizeof (midi_event.message); ++i) { + _data[_size] = source_data[i]; + _size++; + + if (source_data[i] == EOX) { // Ended SYSEX message + _state = COMPLETE; + return NULL; + } } - } - return NULL; + return NULL; } - size_t WavesMidiEvent::_midi_message_size (PmMessage midi_message) { static int high_lengths[] = { diff --git a/libs/backends/wavesaudio/wavesapi/BasicTypes/WUDefines.h b/libs/backends/wavesaudio/wavesapi/BasicTypes/WUDefines.h index 3bfb1d7805..1279b33905 100644 --- a/libs/backends/wavesaudio/wavesapi/BasicTypes/WUDefines.h +++ b/libs/backends/wavesaudio/wavesapi/BasicTypes/WUDefines.h @@ -63,7 +63,7 @@ #define WIN_ONLY(__Something_only_for_windows__) #define MAC_ONLY(__Something_only_for_mac__) __Something_only_for_mac__ - #if defined(i386) || defined(__i386) || defined(__i386__) || defined (__ppc__) + #if defined(i386) || defined(__i386) || defined(__i386__) #define kNumArchBits 32 #endif #if defined(__x86_64) || defined(__x86_64__) diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.cpp b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.cpp index cddc218df6..138810f55f 100644 --- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.cpp +++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.cpp @@ -339,6 +339,12 @@ bool WCMRAudioDevice::Streaming () //********************************************************************************************** WTErr WCMRAudioDevice::SetStreaming (bool newState) { + // We must notify angine about our intention to start streming + // so Engine will provide all the initializations in the first audio callback + if (newState) { + m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceStartsStreaming); + } + //This will most likely be overridden, the base class simply //changes the member. m_IsStreaming = newState; @@ -355,10 +361,10 @@ WTErr WCMRAudioDevice::ResetDevice () WTErr err = SetStreaming(false); if (err == eNoErr) - SetActive(false); + err = SetActive(false); if (err == eNoErr && wasActive) - SetActive(true); + err = SetActive(true); if (err == eNoErr && wasStreaming) SetStreaming(true); diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h index 99aba05179..6821f25f58 100644 --- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h +++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h @@ -57,9 +57,9 @@ struct DeviceInfo DeviceID m_DeviceId; std::string m_DeviceName; std::vector<int> m_AvailableSampleRates; + std::vector<int> m_AvailableBufferSizes; unsigned int m_MaxInputChannels; unsigned int m_MaxOutputChannels; - unsigned int m_DefaultBufferSize; DeviceInfo(): m_DeviceId(-1), m_DeviceName("Unknown"), m_MaxInputChannels(0), m_MaxOutputChannels(0) @@ -127,7 +127,7 @@ class WCMRAudioDeviceManagerClient float *acdOutputBuffer; size_t acdFrames; int64_t acdSampleTime; - int64_t acdCycleStartTimeNanos; + uint64_t acdCycleStartTimeNanos; }; virtual void AudioDeviceManagerNotification (NotificationReason WCUNUSEDPARAM(reason), void *WCUNUSEDPARAM(pParam)) {} @@ -199,7 +199,6 @@ protected: std::vector<std::string> m_OutputChannels; ///< List of output channel names. std::vector<int> m_SamplingRates; ///< List of available sampling rates. std::vector<int> m_BufferSizes; ///< List of available buffer sizes. - int m_DefaultBufferSize; ///soundcard preferred buffer size int m_CurrentSamplingRate; ///< Currently selected sampling rate. int m_CurrentBufferSize; ///< Currently selected buffer size. diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.cpp b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.cpp index 8cfa096c2a..f7f05d7f45 100644 --- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.cpp +++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.cpp @@ -39,7 +39,7 @@ static const int gAllBufferSizes[] = ///< The default SR. static const int DEFAULT_SR = 44100; ///< The default buffer size. -static const int DEFAULT_BUFFERSIZE = 128; +static const int DEFAULT_BUFFERSIZE = 1024; static const int NONE_DEVICE_ID = -1; @@ -115,7 +115,6 @@ WCMRCoreAudioDevice::WCMRCoreAudioDevice (WCMRCoreAudioDeviceManager *pManager, m_CurrentSamplingRate = DEFAULT_SR; m_CurrentBufferSize = DEFAULT_BUFFERSIZE; - m_DefaultBufferSize = DEFAULT_BUFFERSIZE; m_StopRequested = true; m_pInputData = NULL; @@ -248,6 +247,9 @@ WTErr WCMRCoreAudioDevice::UpdateDeviceInfo () WTErr retVal = eNoErr; + // Some devices change the ID during restart + WTErr errId = UpdateDeviceId(); + // Update all devices parts regardless of errors WTErr errName = UpdateDeviceName(); WTErr errIn = UpdateDeviceInputs(); @@ -258,7 +260,7 @@ WTErr WCMRCoreAudioDevice::UpdateDeviceInfo () errSR = UpdateDeviceSampleRates(); errBS = UpdateDeviceBufferSizes(); - if(errName != eNoErr || errIn != eNoErr || errOut != eNoErr || errSR != eNoErr || errBS != eNoErr) + if(errId != eNoErr || errName != eNoErr || errIn != eNoErr || errOut != eNoErr || errSR != eNoErr || errBS != eNoErr) { retVal = eCoreAudioFailed; } @@ -266,6 +268,70 @@ WTErr WCMRCoreAudioDevice::UpdateDeviceInfo () return retVal; } + +WTErr WCMRCoreAudioDevice::UpdateDeviceId() +{ + //Get device count... + UInt32 propSize = 0; + WTErr retVal = eNoErr; + OSStatus osErr = AudioHardwareGetPropertyInfo (kAudioHardwarePropertyDevices, &propSize, NULL); + ASSERT_ERROR(osErr, "AudioHardwareGetProperty 1"); + if (WUIsError(osErr)) + throw osErr; + + size_t numDevices = propSize / sizeof (AudioDeviceID); + AudioDeviceID* deviceIDs = new AudioDeviceID[numDevices]; + + //retrieve the device IDs + propSize = numDevices * sizeof (AudioDeviceID); + osErr = AudioHardwareGetProperty (kAudioHardwarePropertyDevices, &propSize, deviceIDs); + ASSERT_ERROR(osErr, "Error while getting audio devices: AudioHardwareGetProperty 2"); + if (WUIsError(osErr)) + throw osErr; + + //now add the ones that are not there... + for (size_t deviceIndex = 0; deviceIndex < numDevices; deviceIndex++) + { + DeviceInfo* pDevInfo = 0; + + //Get device name and create new DeviceInfo entry + //Get property name size. + osErr = AudioDeviceGetPropertyInfo(deviceIDs[deviceIndex], 0, 0, kAudioDevicePropertyDeviceName, &propSize, NULL); + if (osErr == kAudioHardwareNoError) + { + //Get property: name. + char* deviceName = new char[propSize]; + osErr = AudioDeviceGetProperty(deviceIDs[deviceIndex], 0, 0, kAudioDevicePropertyDeviceName, &propSize, deviceName); + if (osErr == kAudioHardwareNoError) + { + if ( (m_DeviceName == deviceName) && + (m_DeviceID != deviceIDs[deviceIndex]) ) { + + m_DeviceID = deviceIDs[deviceIndex]; + + m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceDebugInfo, (void *)"Current device has changed it's id."); + } + } + else + { + retVal = eCoreAudioFailed; + DEBUG_MSG("Failed to get device name. Device ID: " << m_DeviceID); + } + + delete [] deviceName; + } + else + { + retVal = eCoreAudioFailed; + DEBUG_MSG("Failed to get device name prop Info. Device ID: " << m_DeviceID); + } + } + + delete [] deviceIDs; + return retVal; +} + + //********************************************************************************************** // WCMRCoreAudioDevice::UpdateDeviceName // @@ -881,8 +947,6 @@ WTErr WCMRCoreAudioDevice::SetAndCheckCurrentSamplingRate (int newRate) propSize = sizeof (Float64); err = AudioDeviceSetProperty(m_DeviceID, NULL, 0, 0, kAudioDevicePropertyNominalSampleRate, propSize, &newNominalRate); - m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceDebugInfo, (void *)"Changed the Sampling Rate."); - if (err != kAudioHardwareNoError) { retVal = eCoreAudioFailed; @@ -926,6 +990,8 @@ WTErr WCMRCoreAudioDevice::SetAndCheckCurrentSamplingRate (int newRate) // If sample rate actually changed if (tryAgain != 0) { + m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceDebugInfo, (void *)"Changed the Sampling Rate."); + // Update member with new rate m_CurrentSamplingRate = newRate; @@ -936,12 +1002,28 @@ WTErr WCMRCoreAudioDevice::SetAndCheckCurrentSamplingRate (int newRate) // If sample rate did not change after time out else { - // Update member with last read value - m_CurrentSamplingRate = static_cast<int>(actualSamplingRate); + // Check if current device sample rate is supported + bool found = false; + for(int i = 0; gAllSampleRates[i] > 0; i++) + { + if (fabs(gAllSampleRates[i] - actualSamplingRate) < 0.01) { + found = true; + } + } - char debugMsg[128]; - snprintf (debugMsg, sizeof(debugMsg), "Unable to change SR, even after waiting for %d milliseconds", actualWait * PROPERTY_CHANGE_SLEEP_TIME_MILLISECONDS); - m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceDebugInfo, (void *)debugMsg); + if (found) { + // Update member with last read value + m_CurrentSamplingRate = static_cast<int>(actualSamplingRate); + + char debugMsg[128]; + snprintf (debugMsg, sizeof(debugMsg), "Unable to change SR, even after waiting for %d milliseconds", actualWait * PROPERTY_CHANGE_SLEEP_TIME_MILLISECONDS); + m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceDebugInfo, (void *)debugMsg); + + float sample_rate_update = actualSamplingRate; + m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::SamplingRateChanged, (void *)&sample_rate_update); + } else { + retVal = eGenericErr; + } } } @@ -1731,7 +1813,6 @@ WTErr WCMRCoreAudioDevice::TearDownAUHAL() } - //********************************************************************************************** // WCMRCoreAudioDevice::SetActive // @@ -1799,7 +1880,6 @@ WTErr WCMRCoreAudioDevice::SetActive (bool newState) m_IgnoreThisDrop = true; UpdateDeviceInfo(); - } m_IsActive = newState; @@ -1909,6 +1989,9 @@ WTErr WCMRCoreAudioDevice::SetStreaming (bool newState) m_IOProcThreadPort = 0; m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceDebugInfo, (void *)"Starting AUHAL."); + // Prepare for streaming - tell Engine to do the initialization for process callback + m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceStartsStreaming); + if (m_UseMultithreading) { //set thread constraints... @@ -1924,6 +2007,7 @@ WTErr WCMRCoreAudioDevice::SetStreaming (bool newState) if(err) { DEBUG_MSG( "Failed to start AudioUnit, err " << err ); + m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceDebugInfo, (void *)"Failed to start AudioUnit."); retVal = eGenericErr; goto Exit; } @@ -2554,7 +2638,7 @@ WTErr WCMRCoreAudioDeviceManager::getDeviceAvailableSampleRates(DeviceID deviceI return retVal; } - + WTErr WCMRCoreAudioDeviceManager::getDeviceMaxInputChannels(DeviceID deviceId, unsigned int& inputChannels) { @@ -2862,7 +2946,6 @@ WTErr WCMRCoreAudioDeviceManager::updateDeviceListImpl() if (eNoErr != err) { std::cout << "API::PortAudioDeviceManager::updateDeviceListImpl: Device list update error: "<< err << std::endl; - return err; } if (m_CurrentDevice) @@ -2876,6 +2959,15 @@ WTErr WCMRCoreAudioDeviceManager::updateDeviceListImpl() NotifyClient (WCMRAudioDeviceManagerClient::IODeviceDisconnected); return err; } + + WCMRCoreAudioDevice* current_device = dynamic_cast<WCMRCoreAudioDevice*>(m_CurrentDevice); + + if ( current_device && + (current_device->DeviceID() != devInfo.m_DeviceId ) ) + { + NotifyClient (WCMRAudioDeviceManagerClient::RequestReset); + return err; + } } NotifyClient (WCMRAudioDeviceManagerClient::DeviceListChanged); diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h index a3269f63fb..8bbd7d8eff 100644 --- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h +++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h @@ -138,6 +138,7 @@ protected: #endif //WV_USE_TONE_GEN WTErr UpdateDeviceInfo (); + WTErr UpdateDeviceId (); WTErr UpdateDeviceName(); WTErr UpdateDeviceInputs(); WTErr UpdateDeviceOutputs(); @@ -167,8 +168,7 @@ protected: static OSStatus StaticPropertyChangeProc (AudioDeviceID inDevice, UInt32 inChannel, Boolean isInput, AudioDevicePropertyID inPropertyID, void *inClientData); void PropertyChangeProc (AudioDevicePropertyID inPropertyID); - - void resetAudioDevice(); + private: }; diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRNativeAudio.cpp b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRNativeAudio.cpp index 7bea0b3f04..2e0490b02e 100644 --- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRNativeAudio.cpp +++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRNativeAudio.cpp @@ -35,6 +35,9 @@ //********************************************************************************************** WCMRNativeAudioNoneDevice::WCMRNativeAudioNoneDevice (WCMRAudioDeviceManager *pManager) : WCMRNativeAudioDevice (pManager, false /*useMultiThreading*/) +#ifndef PTW32_VERSION + , m_SilenceThread(0) +#endif #if defined (PLATFORM_WINDOWS) , _waitableTimerForUsleep (CreateWaitableTimer(NULL, TRUE, NULL)) #endif @@ -64,7 +67,6 @@ WCMRNativeAudioNoneDevice::WCMRNativeAudioNoneDevice (WCMRAudioDeviceManager *pM } _m_inputBuffer = new float[__m_NumInputChannels * m_BufferSizes.back()]; _m_outputBuffer = new float[__m_NumOutputChannels * m_BufferSizes.back()]; - m_DefaultBufferSize = m_BufferSizes.back(); m_CurrentBufferSize = m_BufferSizes.back(); } diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp index 7816fcb470..35ac18c044 100644 --- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp +++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp @@ -118,7 +118,6 @@ WCMRPortAudioDevice::WCMRPortAudioDevice (WCMRPortAudioDeviceManager *pManager, m_PortAudioStream = NULL; m_CurrentSamplingRate = DEFAULT_SR; m_CurrentBufferSize = DEFAULT_BUFFERSIZE; - m_DefaultBufferSize = DEFAULT_BUFFERSIZE; m_StopRequested = true; m_pInputData = NULL; @@ -362,7 +361,6 @@ void WCMRPortAudioDevice::updateDeviceInfo (bool callerIsWaiting/*=false*/) { std::cout << "API::Device " << m_DeviceName << " Buffers: " << minSize << " " << maxSize << " " << preferredSize << std::endl; - m_DefaultBufferSize = preferredSize; m_BufferSizes.push_back (preferredSize); useDefaultBuffers = false; } @@ -901,6 +899,9 @@ void WCMRPortAudioDevice::startStreaming (bool callerIsWaiting/*=false*/) unsigned int inChannelCount = pDeviceInfo->maxInputChannels; unsigned int outChannelCount = pDeviceInfo->maxOutputChannels; + // Prepare for streaming - tell Engine to do the initialization for process callback + m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceStartsStreaming); + paErr = Pa_StartStream( m_PortAudioStream ); if(paErr == paNoError) @@ -1043,8 +1044,7 @@ void WCMRPortAudioDevice::resetDevice (bool callerIsWaiting /*=false*/ ) // Resume streaming if the device was streaming before if(wasStreaming && m_lastErr == eNoErr && m_ConnectionStatus == DeviceAvailable) { - // Notify the Application to prepare for the stream start - m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::DeviceStartsStreaming); + // start streaming startStreaming(); } } else { @@ -1076,24 +1076,29 @@ long WCMRPortAudioDevice::ASIOMessageHook (long selector, long WCUNUSEDPARAM(val case kAsioResyncRequest: m_ResyncRequested++; std::cout << "\t\t\tWCMRPortAudioDevice::ASIOMessageHook -- kAsioResyncRequest" << std::endl; - m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::RequestReset); break; case kAsioLatenciesChanged: m_BufferSizeChangeRequested++; std::cout << "\t\t\tWCMRPortAudioDevice::ASIOMessageHook -- kAsioLatenciesChanged" << std::endl; - m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::RequestReset); + if (m_ResetRequested == 0) { + m_ResetRequested++; + m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::RequestReset); + } break; case kAsioBufferSizeChange: m_BufferSizeChangeRequested++; std::cout << "\t\t\tWCMRPortAudioDevice::ASIOMessageHook -- m_BufferSizeChangeRequested" << std::endl; - m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::RequestReset); + if (m_ResetRequested == 0) { + m_ResetRequested++; + m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::RequestReset); + } break; case kAsioResetRequest: - m_ResetRequested++; std::cout << "\t\t\tWCMRPortAudioDevice::ASIOMessageHook -- kAsioResetRequest" << std::endl; + m_ResetRequested++; m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::RequestReset); break; @@ -1540,6 +1545,32 @@ WTErr WCMRPortAudioDeviceManager::getDeviceAvailableSampleRates(DeviceID deviceI } +WTErr WCMRPortAudioDeviceManager::getDeviceAvailableBufferSizes(DeviceID deviceId, std::vector<int>& buffers) +{ + WTErr retVal = eNoErr; + + buffers.clear(); + + //make PA request to get actual device buffer sizes + long minSize, maxSize, preferredSize, granularity; + + PaError paErr = PaAsio_GetAvailableBufferSizes(deviceId, &minSize, &maxSize, &preferredSize, &granularity); + + //for Windows ASIO devices we always use prefferes buffer size ONLY + if (paNoError == paErr ) + { + buffers.push_back(preferredSize); + } + else + { + retVal = eAsioFailed; + std::cout << "API::PortAudioDeviceManager::GetBufferSizes: error: " << Pa_GetErrorText (paErr) << " getting buffer sizes for device: "<< deviceId << std::endl; + } + + return retVal; +} + + WTErr WCMRPortAudioDeviceManager::generateDeviceListImpl() { std::cout << "API::PortAudioDeviceManager::Generating device list" << std::endl; @@ -1586,6 +1617,7 @@ WTErr WCMRPortAudioDeviceManager::generateDeviceListImpl() DeviceInfo *pDevInfo = new DeviceInfo(thisDeviceID, pPaDeviceInfo->name); if (pDevInfo) { + //Get available sample rates std::vector<int> availableSampleRates; WTErr wErr = WCMRPortAudioDeviceManager::getDeviceAvailableSampleRates(thisDeviceID, availableSampleRates); @@ -1600,6 +1632,19 @@ WTErr WCMRPortAudioDeviceManager::generateDeviceListImpl() pDevInfo->m_MaxInputChannels = pPaDeviceInfo->maxInputChannels; pDevInfo->m_MaxOutputChannels = pPaDeviceInfo->maxOutputChannels; + //Get available buffer sizes + std::vector<int> availableBuffers; + wErr = getDeviceAvailableBufferSizes(thisDeviceID, availableBuffers); + + if (wErr != eNoErr) + { + DEBUG_MSG ("Failed to get device available buffer sizes. Device ID: " << m_DeviceID); + delete pDevInfo; + continue; //proceed to the next device + } + + pDevInfo->m_AvailableBufferSizes = availableBuffers; + //Now check if this device is acceptable according to current input/output settings bool bRejectDevice = false; switch(m_eAudioDeviceFilter) @@ -1681,7 +1726,7 @@ WTErr WCMRPortAudioDeviceManager::getDeviceSampleRatesImpl(const std::string & d if (m_CurrentDevice && deviceName == m_CurrentDevice->DeviceName() ) { - sampleRates.assign(m_CurrentDevice->SamplingRates().begin(), m_CurrentDevice->SamplingRates().end() ); + sampleRates=m_CurrentDevice->SamplingRates(); return retVal; } @@ -1690,7 +1735,7 @@ WTErr WCMRPortAudioDeviceManager::getDeviceSampleRatesImpl(const std::string & d if (eNoErr == retVal) { - sampleRates.assign(devInfo.m_AvailableSampleRates.begin(), devInfo.m_AvailableSampleRates.end() ); + sampleRates=devInfo.m_AvailableSampleRates; } else { @@ -1710,44 +1755,28 @@ WTErr WCMRPortAudioDeviceManager::getDeviceBufferSizesImpl(const std::string & d //first check if the request has been made for None device if (deviceName == m_NoneDevice->DeviceName() ) { - buffers.assign(m_NoneDevice->BufferSizes().begin(), m_NoneDevice->BufferSizes().end() ); + buffers=m_NoneDevice->BufferSizes(); return retVal; } if (m_CurrentDevice && deviceName == m_CurrentDevice->DeviceName() ) { - buffers.assign(m_CurrentDevice->BufferSizes().begin(), m_CurrentDevice->BufferSizes().end() ); + buffers=m_CurrentDevice->BufferSizes(); return retVal; } - Pa_Initialize(); - DeviceInfo devInfo; retVal = GetDeviceInfoByName(deviceName, devInfo); if (eNoErr == retVal) { - //make PA request to get actual device buffer sizes - long minSize, maxSize, preferredSize, granularity; - PaError paErr = PaAsio_GetAvailableBufferSizes(devInfo.m_DeviceId, &minSize, &maxSize, &preferredSize, &granularity); - - //for Windows ASIO devices we always use prefferes buffer size ONLY - if (paNoError == paErr ) - { - buffers.push_back(preferredSize); - } - else - { - retVal = eAsioFailed; - std::cout << "API::PortAudioDeviceManager::GetBufferSizes: error: " << Pa_GetErrorText (paErr) << " getting buffer sizes for device: "<< deviceName << std::endl; - } + std::cout << "API::PortAudioDeviceManager::GetBufferSizes: got buffer :"<< devInfo.m_AvailableBufferSizes.front() << std::endl; + buffers = devInfo.m_AvailableBufferSizes; } else { std::cout << "API::PortAudioDeviceManager::GetBufferSizes: Device not found: "<< deviceName << std::endl; } - Pa_Terminate(); - return retVal; } diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.h b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.h index 8f099ec9b5..da2027466e 100644 --- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.h +++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.h @@ -172,6 +172,7 @@ protected: private: // helper functions for this class only WTErr getDeviceAvailableSampleRates(DeviceID deviceId, std::vector<int>& sampleRates); + WTErr getDeviceAvailableBufferSizes(DeviceID deviceId, std::vector<int>& buffers); WCMRAudioDevice* m_NoneDevice; }; diff --git a/libs/backends/wavesaudio/wscript b/libs/backends/wavesaudio/wscript index 1303791817..89fe65b7a0 100644 --- a/libs/backends/wavesaudio/wscript +++ b/libs/backends/wavesaudio/wscript @@ -88,10 +88,10 @@ def build(bld): obj.use = 'libardour libpbd' if bld.env['build_target'] == 'mingw': obj.uselib = ['PORTAUDIO'] - obj.cxxflags = [ '-fPIC' ] - obj.cflags = [ '-fPIC', '-fms-extensions' ] + obj.cxxflags = [ bld.env['compiler_flags_dict']['pic'] ] + obj.cflags = [ bld.env['compiler_flags_dict']['pic'], bld.env['compiler_flags_dict']['c-anonymous-union'] ] else: - obj.cflags = ['-fms-extensions' ] + obj.cflags = [ bld.env['compiler_flags_dict']['c-anonymous-union'] ] obj.install_path = os.path.join(bld.env['LIBDIR'], 'backends') if bld.env['build_target']== 'mingw': diff --git a/libs/canvas/canvas/wave_view.h b/libs/canvas/canvas/wave_view.h index 55d82022af..c4e19ec7bb 100644 --- a/libs/canvas/canvas/wave_view.h +++ b/libs/canvas/canvas/wave_view.h @@ -56,7 +56,7 @@ struct LIBCANVAS_API WaveViewThreadRequest WaveViewThreadRequest () : stop (0) {} - bool should_stop () const { return (bool) g_atomic_int_get (&stop); } + bool should_stop () const { return (bool) g_atomic_int_get (const_cast<gint*>(&stop)); } void cancel() { g_atomic_int_set (&stop, 1); } RequestType type; @@ -66,7 +66,7 @@ struct LIBCANVAS_API WaveViewThreadRequest double height; double samples_per_pixel; uint16_t channel; - double region_amplitude; + double amplitude; Color fill_color; boost::weak_ptr<const ARDOUR::Region> region; @@ -164,7 +164,6 @@ class LIBCANVAS_API WaveViewCache */ typedef std::pair<boost::shared_ptr<ARDOUR::AudioSource>,boost::shared_ptr<Entry> > ListEntry; typedef std::vector<ListEntry> CacheList; - CacheList cache_list; struct SortByTimestamp { bool operator() (const WaveViewCache::ListEntry& a, const WaveViewCache::ListEntry& b) { @@ -276,6 +275,8 @@ public: static void start_drawing_thread (); static void stop_drawing_thread (); + static void set_image_cache_size (uint64_t); + #ifdef CANVAS_COMPATIBILITY void*& property_gain_src () { return _foo_void; @@ -310,7 +311,6 @@ public: double _amplitude_above_axis; float _region_amplitude; double _start_shift; - mutable bool idle_queued; /** The `start' value to use for the region; we can't use the region's * value as the crossfade editor needs to alter it. @@ -364,7 +364,21 @@ public: boost::shared_ptr<WaveViewCache::Entry> get_image (framepos_t start, framepos_t end, bool& full_image) const; boost::shared_ptr<WaveViewCache::Entry> get_image_from_cache (framepos_t start, framepos_t end, bool& full_image) const; - ArdourCanvas::Coord y_extent (double, bool) const; + struct LineTips { + double top; + double bot; + double spread; + bool clip_max; + bool clip_min; + + LineTips() : top (0.0), bot (0.0), clip_max (false), clip_min (false) {} + }; + + ArdourCanvas::Coord y_extent (double) const; + void compute_tips (ARDOUR::PeakData const & peak, LineTips& tips) const; + + ARDOUR::framecnt_t desired_image_width () const; + void draw_image (Cairo::RefPtr<Cairo::ImageSurface>&, ARDOUR::PeakData*, int n_peaks, boost::shared_ptr<WaveViewThreadRequest>) const; void draw_absent_image (Cairo::RefPtr<Cairo::ImageSurface>&, ARDOUR::PeakData*, int) const; @@ -379,7 +393,6 @@ public: mutable boost::shared_ptr<WaveViewCache::Entry> _current_image; mutable boost::shared_ptr<WaveViewThreadRequest> current_request; - bool idle_send_request () const; static WaveViewCache* images; diff --git a/libs/canvas/macosx/canvas/canvas.xcodeproj/project.pbxproj b/libs/canvas/macosx/canvas/canvas.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..868d680916 --- /dev/null +++ b/libs/canvas/macosx/canvas/canvas.xcodeproj/project.pbxproj @@ -0,0 +1,224 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXFileReference section */ + 4397596719CADB4300740098 /* arc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = arc.h; path = ../../canvas/arc.h; sourceTree = "<group>"; }; + 4397596819CADB4300740098 /* arrow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = arrow.h; path = ../../canvas/arrow.h; sourceTree = "<group>"; }; + 4397596919CADB4300740098 /* canvas.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = canvas.h; path = ../../canvas/canvas.h; sourceTree = "<group>"; }; + 4397596A19CADB4300740098 /* circle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = circle.h; path = ../../canvas/circle.h; sourceTree = "<group>"; }; + 4397596B19CADB4300740098 /* container.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = container.h; path = ../../canvas/container.h; sourceTree = "<group>"; }; + 4397596C19CADB4300740098 /* curve.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = curve.h; path = ../../canvas/curve.h; sourceTree = "<group>"; }; + 4397596D19CADB4300740098 /* debug.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = debug.h; path = ../../canvas/debug.h; sourceTree = "<group>"; }; + 4397596E19CADB4300740098 /* fill.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fill.h; path = ../../canvas/fill.h; sourceTree = "<group>"; }; + 4397596F19CADB4300740098 /* flag.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = flag.h; path = ../../canvas/flag.h; sourceTree = "<group>"; }; + 4397597019CADB4300740098 /* fwd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fwd.h; path = ../../canvas/fwd.h; sourceTree = "<group>"; }; + 4397597119CADB4300740098 /* image.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = image.h; path = ../../canvas/image.h; sourceTree = "<group>"; }; + 4397597219CADB4300740098 /* interpolated_curve.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = interpolated_curve.h; path = ../../canvas/interpolated_curve.h; sourceTree = "<group>"; }; + 4397597319CADB4300740098 /* item.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = item.h; path = ../../canvas/item.h; sourceTree = "<group>"; }; + 4397597419CADB4300740098 /* line_set.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = line_set.h; path = ../../canvas/line_set.h; sourceTree = "<group>"; }; + 4397597519CADB4300740098 /* line.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = line.h; path = ../../canvas/line.h; sourceTree = "<group>"; }; + 4397597619CADB4300740098 /* lookup_table.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = lookup_table.h; path = ../../canvas/lookup_table.h; sourceTree = "<group>"; }; + 4397597719CADB4300740098 /* outline.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = outline.h; path = ../../canvas/outline.h; sourceTree = "<group>"; }; + 4397597819CADB4300740098 /* pixbuf.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pixbuf.h; path = ../../canvas/pixbuf.h; sourceTree = "<group>"; }; + 4397597919CADB4300740098 /* poly_item.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = poly_item.h; path = ../../canvas/poly_item.h; sourceTree = "<group>"; }; + 4397597A19CADB4300740098 /* poly_line.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = poly_line.h; path = ../../canvas/poly_line.h; sourceTree = "<group>"; }; + 4397597B19CADB4300740098 /* polygon.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = polygon.h; path = ../../canvas/polygon.h; sourceTree = "<group>"; }; + 4397597C19CADB4300740098 /* rectangle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = rectangle.h; path = ../../canvas/rectangle.h; sourceTree = "<group>"; }; + 4397597D19CADB4300740098 /* root_group.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = root_group.h; path = ../../canvas/root_group.h; sourceTree = "<group>"; }; + 4397597E19CADB4300740098 /* ruler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ruler.h; path = ../../canvas/ruler.h; sourceTree = "<group>"; }; + 4397597F19CADB4300740098 /* scroll_group.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scroll_group.h; path = ../../canvas/scroll_group.h; sourceTree = "<group>"; }; + 4397598019CADB4300740098 /* stateful_image.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = stateful_image.h; path = ../../canvas/stateful_image.h; sourceTree = "<group>"; }; + 4397598119CADB4300740098 /* text.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = text.h; path = ../../canvas/text.h; sourceTree = "<group>"; }; + 4397598219CADB4300740098 /* tracking_text.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = tracking_text.h; path = ../../canvas/tracking_text.h; sourceTree = "<group>"; }; + 4397598319CADB4300740098 /* types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = types.h; path = ../../canvas/types.h; sourceTree = "<group>"; }; + 4397598419CADB4300740098 /* utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = utils.h; path = ../../canvas/utils.h; sourceTree = "<group>"; }; + 4397598519CADB4300740098 /* version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = version.h; path = ../../canvas/version.h; sourceTree = "<group>"; }; + 4397598619CADB4300740098 /* visibility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = visibility.h; path = ../../canvas/visibility.h; sourceTree = "<group>"; }; + 4397598719CADB4300740098 /* wave_view.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = wave_view.h; path = ../../canvas/wave_view.h; sourceTree = "<group>"; }; + 4397598819CADB4300740098 /* widget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = widget.h; path = ../../canvas/widget.h; sourceTree = "<group>"; }; + 4397598919CADB4300740098 /* xfade_curve.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = xfade_curve.h; path = ../../canvas/xfade_curve.h; sourceTree = "<group>"; }; + 4397598A19CADB4300740098 /* xml_ui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = xml_ui.h; path = ../../canvas/xml_ui.h; sourceTree = "<group>"; }; + 43A0170F19D56040007D3CE8 /* arc.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = arc.cc; path = ../../arc.cc; sourceTree = "<group>"; }; + 43A0171019D56040007D3CE8 /* arrow.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = arrow.cc; path = ../../arrow.cc; sourceTree = "<group>"; }; + 43A0171119D56040007D3CE8 /* canvas.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = canvas.cc; path = ../../canvas.cc; sourceTree = "<group>"; }; + 43A0171219D56040007D3CE8 /* circle.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = circle.cc; path = ../../circle.cc; sourceTree = "<group>"; }; + 43A0171319D56040007D3CE8 /* container.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = container.cc; path = ../../container.cc; sourceTree = "<group>"; }; + 43A0171419D56040007D3CE8 /* curve.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = curve.cc; path = ../../curve.cc; sourceTree = "<group>"; }; + 43A0171519D56040007D3CE8 /* debug.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = debug.cc; path = ../../debug.cc; sourceTree = "<group>"; }; + 43A0171619D56040007D3CE8 /* fill.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fill.cc; path = ../../fill.cc; sourceTree = "<group>"; }; + 43A0171719D56040007D3CE8 /* flag.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = flag.cc; path = ../../flag.cc; sourceTree = "<group>"; }; + 43A0171819D56040007D3CE8 /* image.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = image.cc; path = ../../image.cc; sourceTree = "<group>"; }; + 43A0171919D56040007D3CE8 /* item.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = item.cc; path = ../../item.cc; sourceTree = "<group>"; }; + 43A0171A19D56040007D3CE8 /* line_set.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = line_set.cc; path = ../../line_set.cc; sourceTree = "<group>"; }; + 43A0171B19D56040007D3CE8 /* line.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = line.cc; path = ../../line.cc; sourceTree = "<group>"; }; + 43A0171C19D56040007D3CE8 /* lookup_table.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = lookup_table.cc; path = ../../lookup_table.cc; sourceTree = "<group>"; }; + 43A0171D19D56040007D3CE8 /* outline.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = outline.cc; path = ../../outline.cc; sourceTree = "<group>"; }; + 43A0171E19D56040007D3CE8 /* pixbuf.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = pixbuf.cc; path = ../../pixbuf.cc; sourceTree = "<group>"; }; + 43A0171F19D56040007D3CE8 /* poly_item.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = poly_item.cc; path = ../../poly_item.cc; sourceTree = "<group>"; }; + 43A0172019D56040007D3CE8 /* poly_line.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = poly_line.cc; path = ../../poly_line.cc; sourceTree = "<group>"; }; + 43A0172119D56040007D3CE8 /* polygon.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = polygon.cc; path = ../../polygon.cc; sourceTree = "<group>"; }; + 43A0172219D56040007D3CE8 /* rectangle.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = rectangle.cc; path = ../../rectangle.cc; sourceTree = "<group>"; }; + 43A0172319D56040007D3CE8 /* root_group.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = root_group.cc; path = ../../root_group.cc; sourceTree = "<group>"; }; + 43A0172419D56040007D3CE8 /* ruler.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ruler.cc; path = ../../ruler.cc; sourceTree = "<group>"; }; + 43A0172519D56040007D3CE8 /* scroll_group.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = scroll_group.cc; path = ../../scroll_group.cc; sourceTree = "<group>"; }; + 43A0172619D56040007D3CE8 /* stateful_image.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = stateful_image.cc; path = ../../stateful_image.cc; sourceTree = "<group>"; }; + 43A0172719D56040007D3CE8 /* text.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = text.cc; path = ../../text.cc; sourceTree = "<group>"; }; + 43A0172819D56040007D3CE8 /* tracking_text.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = tracking_text.cc; path = ../../tracking_text.cc; sourceTree = "<group>"; }; + 43A0172919D56040007D3CE8 /* types.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = types.cc; path = ../../types.cc; sourceTree = "<group>"; }; + 43A0172A19D56040007D3CE8 /* utils.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = utils.cc; path = ../../utils.cc; sourceTree = "<group>"; }; + 43A0172B19D56040007D3CE8 /* version.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = version.cc; path = ../../version.cc; sourceTree = "<group>"; }; + 43A0172C19D56040007D3CE8 /* wave_view.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = wave_view.cc; path = ../../wave_view.cc; sourceTree = "<group>"; }; + 43A0172D19D56040007D3CE8 /* widget.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = widget.cc; path = ../../widget.cc; sourceTree = "<group>"; }; + 43A0172E19D56040007D3CE8 /* xfade_curve.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = xfade_curve.cc; path = ../../xfade_curve.cc; sourceTree = "<group>"; }; + 43A0172F19D56040007D3CE8 /* xml_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = xml_ui.cc; path = ../../xml_ui.cc; sourceTree = "<group>"; }; +/* End PBXFileReference section */ + +/* Begin PBXGroup section */ + 4397594919CADAFC00740098 = { + isa = PBXGroup; + children = ( + 4397595719CADB1200740098 /* headers */, + 4397595619CADB0600740098 /* source */, + ); + sourceTree = "<group>"; + }; + 4397595619CADB0600740098 /* source */ = { + isa = PBXGroup; + children = ( + 43A0170F19D56040007D3CE8 /* arc.cc */, + 43A0171019D56040007D3CE8 /* arrow.cc */, + 43A0171119D56040007D3CE8 /* canvas.cc */, + 43A0171219D56040007D3CE8 /* circle.cc */, + 43A0171319D56040007D3CE8 /* container.cc */, + 43A0171419D56040007D3CE8 /* curve.cc */, + 43A0171519D56040007D3CE8 /* debug.cc */, + 43A0171619D56040007D3CE8 /* fill.cc */, + 43A0171719D56040007D3CE8 /* flag.cc */, + 43A0171819D56040007D3CE8 /* image.cc */, + 43A0171919D56040007D3CE8 /* item.cc */, + 43A0171A19D56040007D3CE8 /* line_set.cc */, + 43A0171B19D56040007D3CE8 /* line.cc */, + 43A0171C19D56040007D3CE8 /* lookup_table.cc */, + 43A0171D19D56040007D3CE8 /* outline.cc */, + 43A0171E19D56040007D3CE8 /* pixbuf.cc */, + 43A0171F19D56040007D3CE8 /* poly_item.cc */, + 43A0172019D56040007D3CE8 /* poly_line.cc */, + 43A0172119D56040007D3CE8 /* polygon.cc */, + 43A0172219D56040007D3CE8 /* rectangle.cc */, + 43A0172319D56040007D3CE8 /* root_group.cc */, + 43A0172419D56040007D3CE8 /* ruler.cc */, + 43A0172519D56040007D3CE8 /* scroll_group.cc */, + 43A0172619D56040007D3CE8 /* stateful_image.cc */, + 43A0172719D56040007D3CE8 /* text.cc */, + 43A0172819D56040007D3CE8 /* tracking_text.cc */, + 43A0172919D56040007D3CE8 /* types.cc */, + 43A0172A19D56040007D3CE8 /* utils.cc */, + 43A0172B19D56040007D3CE8 /* version.cc */, + 43A0172C19D56040007D3CE8 /* wave_view.cc */, + 43A0172D19D56040007D3CE8 /* widget.cc */, + 43A0172E19D56040007D3CE8 /* xfade_curve.cc */, + 43A0172F19D56040007D3CE8 /* xml_ui.cc */, + ); + name = source; + sourceTree = "<group>"; + }; + 4397595719CADB1200740098 /* headers */ = { + isa = PBXGroup; + children = ( + 4397596719CADB4300740098 /* arc.h */, + 4397596819CADB4300740098 /* arrow.h */, + 4397596919CADB4300740098 /* canvas.h */, + 4397596A19CADB4300740098 /* circle.h */, + 4397596B19CADB4300740098 /* container.h */, + 4397596C19CADB4300740098 /* curve.h */, + 4397596D19CADB4300740098 /* debug.h */, + 4397596E19CADB4300740098 /* fill.h */, + 4397596F19CADB4300740098 /* flag.h */, + 4397597019CADB4300740098 /* fwd.h */, + 4397597119CADB4300740098 /* image.h */, + 4397597219CADB4300740098 /* interpolated_curve.h */, + 4397597319CADB4300740098 /* item.h */, + 4397597419CADB4300740098 /* line_set.h */, + 4397597519CADB4300740098 /* line.h */, + 4397597619CADB4300740098 /* lookup_table.h */, + 4397597719CADB4300740098 /* outline.h */, + 4397597819CADB4300740098 /* pixbuf.h */, + 4397597919CADB4300740098 /* poly_item.h */, + 4397597A19CADB4300740098 /* poly_line.h */, + 4397597B19CADB4300740098 /* polygon.h */, + 4397597C19CADB4300740098 /* rectangle.h */, + 4397597D19CADB4300740098 /* root_group.h */, + 4397597E19CADB4300740098 /* ruler.h */, + 4397597F19CADB4300740098 /* scroll_group.h */, + 4397598019CADB4300740098 /* stateful_image.h */, + 4397598119CADB4300740098 /* text.h */, + 4397598219CADB4300740098 /* tracking_text.h */, + 4397598319CADB4300740098 /* types.h */, + 4397598419CADB4300740098 /* utils.h */, + 4397598519CADB4300740098 /* version.h */, + 4397598619CADB4300740098 /* visibility.h */, + 4397598719CADB4300740098 /* wave_view.h */, + 4397598819CADB4300740098 /* widget.h */, + 4397598919CADB4300740098 /* xfade_curve.h */, + 4397598A19CADB4300740098 /* xml_ui.h */, + ); + name = headers; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXProject section */ + 4397594A19CADAFC00740098 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0510; + }; + buildConfigurationList = 4397594D19CADAFC00740098 /* Build configuration list for PBXProject "canvas" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 4397594919CADAFC00740098; + projectDirPath = ""; + projectRoot = ""; + targets = ( + ); + }; +/* End PBXProject section */ + +/* Begin XCBuildConfiguration section */ + 4397594E19CADAFC00740098 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Debug; + }; + 4397594F19CADAFC00740098 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4397594D19CADAFC00740098 /* Build configuration list for PBXProject "canvas" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4397594E19CADAFC00740098 /* Debug */, + 4397594F19CADAFC00740098 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 4397594A19CADAFC00740098 /* Project object */; +} diff --git a/libs/canvas/wave_view.cc b/libs/canvas/wave_view.cc index 52f6ee9f33..e8db7d8c6a 100644 --- a/libs/canvas/wave_view.cc +++ b/libs/canvas/wave_view.cc @@ -37,6 +37,7 @@ #include "ardour/lmath.h" #include "ardour/audioregion.h" #include "ardour/audiosource.h" +#include "ardour/session.h" #include "canvas/canvas.h" #include "canvas/colors.h" @@ -44,6 +45,8 @@ #include "canvas/utils.h" #include "canvas/wave_view.h" +#include "evoral/Range.hpp" + #include <gdkmm/general.h> #include "gtkmm2ext/gui_thread.h" @@ -87,12 +90,15 @@ WaveView::WaveView (Canvas* c, boost::shared_ptr<ARDOUR::AudioRegion> region) , _amplitude_above_axis (1.0) , _region_amplitude (region->scale_amplitude ()) , _start_shift (0.0) - , idle_queued (false) , _region_start (region->start()) , get_image_in_thread (false) , always_get_image_in_thread (false) , rendered (false) { + if (!images) { + images = new WaveViewCache; + } + VisualPropertiesChanged.connect_same_thread (invalidation_connection, boost::bind (&WaveView::handle_visual_property_change, this)); ClipLevelChanged.connect_same_thread (invalidation_connection, boost::bind (&WaveView::handle_clip_level_change, this)); @@ -117,12 +123,15 @@ WaveView::WaveView (Item* parent, boost::shared_ptr<ARDOUR::AudioRegion> region) , _amplitude_above_axis (1.0) , _region_amplitude (region->scale_amplitude ()) , _start_shift (0.0) - , idle_queued (false) , _region_start (region->start()) , get_image_in_thread (false) , always_get_image_in_thread (false) , rendered (false) { + if (!images) { + images = new WaveViewCache; + } + VisualPropertiesChanged.connect_same_thread (invalidation_connection, boost::bind (&WaveView::handle_visual_property_change, this)); ClipLevelChanged.connect_same_thread (invalidation_connection, boost::bind (&WaveView::handle_clip_level_change, this)); @@ -143,6 +152,7 @@ WaveView::debug_name() const void WaveView::image_ready () { + DEBUG_TRACE (DEBUG::WaveView, string_compose ("queue draw for %1 at %2 (vis = %3 CR %4)\n", this, g_get_monotonic_time(), visible(), current_request)); redraw (); } @@ -248,45 +258,71 @@ WaveView::set_clip_level (double dB) void WaveView::invalidate_image_cache () { + DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1 invalidates image cache and cancels current request\n", this)); cancel_my_render_request (); _current_image.reset (); } -Coord -WaveView::y_extent (double s, bool /*round_to_lower_edge*/) const +void +WaveView::compute_tips (PeakData const & peak, WaveView::LineTips& tips) const { - /* it is important that this returns an integral value, so that we - * can ensure correct single pixel behaviour. - * - * we need (_height - max(wave_line_width)) - * wave_line_width == 1 IFF top==bottom (1 sample per pixel or flat line) - * wave_line_width == 2 otherwise - * then round away from the zero line, towards peak - */ - if (_shape == Rectified) { - // we only ever have 1 point and align to the bottom (not center) - return floor ((1.0 - s) * (_height - 2.0)); - } else { - /* currently canvas rectangle is off-by-one and we - * cannot draw a pixel at 0 (-.5 .. +.5) without it being - * clipped. A value 1.0 (ideally one point at y=0) ends - * up a pixel down. and a value of -1.0 (ideally y = _height-1) - * currently is on the bottom separator line :( - * So to make the complete waveform appear centered in - * a region, we translate by +.5 (instead of -.5) - * and waste two pixel of height: -4 (instad of -2) - * - * This needs fixing in canvas/rectangle the intersect - * functions and probably a couple of other places as well... + const double effective_height = _height; + + /* remember: canvas (and cairo) coordinate space puts the origin at the upper left. + + So, a sample value of 1.0 (0dbFS) will be computed as: + + (1.0 - 1.0) * 0.5 * effective_height + + which evaluates to 0, or the top of the image. + + A sample value of -1.0 will be computed as + + (1.0 + 1.0) * 0.5 * effective height + + which evaluates to effective height, or the bottom of the image. + */ + + const double pmax = (1.0 - peak.max) * 0.5 * effective_height; + const double pmin = (1.0 - peak.min) * 0.5 * effective_height; + + /* remember that the bottom of the image (pmin) has larger y-coordinates + than the top (pmax). + */ + + double spread = (pmin - pmax) * 0.5; + + /* find the nearest pixel to the nominal center. */ + const double center = round (pmin - spread); + + if (spread < 1.0) { + /* minimum distance between line ends is 1 pixel, and we want it "centered" on a pixel, + as per cairo single-pixel line issues. + + NOTE: the caller will not draw a line between these two points if the spread is + less than 2 pixels. So only the tips.top value matters, which is where we will + draw a single pixel as part of the outline. */ - Coord pos; - if (s < 0) { - pos = ceil ((1.0 - s) * .5 * (_height - 4.0)); - } else { - pos = floor ((1.0 - s) * .5 * (_height - 4.0)); - } - return min (_height - 4.0, (max (0.0, pos))); + tips.top = center; + tips.bot = center + 1.0; + } else { + /* round spread above and below center to an integer number of pixels */ + spread = round (spread); + /* top and bottom are located equally either side of the center */ + tips.top = center - spread; + tips.bot = center + spread; } + + tips.top = min (effective_height, max (0.0, tips.top)); + tips.bot = min (effective_height, max (0.0, tips.bot)); +} + + +Coord +WaveView::y_extent (double s) const +{ + assert (_shape == Rectified); + return floor ((1.0 - s) * _height); } void @@ -321,16 +357,6 @@ WaveView::draw_absent_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData context->fill (); } -struct LineTips { - double top; - double bot; - double spread; - bool clip_max; - bool clip_min; - - LineTips() : top (0.0), bot (0.0), clip_max (false), clip_min (false) {} -}; - struct ImageSet { Cairo::RefPtr<Cairo::ImageSurface> wave; Cairo::RefPtr<Cairo::ImageSurface> outline; @@ -387,8 +413,8 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak tips[i].bot = height() - 1.0; const double p = alt_log_meter (fast_coefficient_to_dB (max (fabs (_peaks[i].max), fabs (_peaks[i].min)))); - tips[i].top = y_extent (p, false); - tips[i].spread = p * (_height - 1.0); + tips[i].top = y_extent (p); + tips[i].spread = p * _height; if (_peaks[i].max >= clip_level) { tips[i].clip_max = true; @@ -404,8 +430,8 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak tips[i].bot = height() - 1.0; const double p = max(fabs (_peaks[i].max), fabs (_peaks[i].min)); - tips[i].top = y_extent (p, false); - tips[i].spread = p * (_height - 2.0); + tips[i].top = y_extent (p); + tips[i].spread = p * _height; if (p >= clip_level) { tips[i].clip_max = true; } @@ -417,34 +443,34 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak if (_logscaled) { for (int i = 0; i < n_peaks; ++i) { - double top = _peaks[i].max; - double bot = _peaks[i].min; + PeakData p; + p.max = _peaks[i].max; + p.min = _peaks[i].min; if (_peaks[i].max >= clip_level) { - tips[i].clip_max = true; + tips[i].clip_max = true; } if (-(_peaks[i].min) >= clip_level) { tips[i].clip_min = true; } - if (top > 0.0) { - top = alt_log_meter (fast_coefficient_to_dB (top)); - } else if (top < 0.0) { - top =-alt_log_meter (fast_coefficient_to_dB (-top)); + if (p.max > 0.0) { + p.max = alt_log_meter (fast_coefficient_to_dB (p.max)); + } else if (p.max < 0.0) { + p.max =-alt_log_meter (fast_coefficient_to_dB (-p.max)); } else { - top = 0.0; + p.max = 0.0; } - if (bot > 0.0) { - bot = alt_log_meter (fast_coefficient_to_dB (bot)); - } else if (bot < 0.0) { - bot = -alt_log_meter (fast_coefficient_to_dB (-bot)); + if (p.min > 0.0) { + p.min = alt_log_meter (fast_coefficient_to_dB (p.min)); + } else if (p.min < 0.0) { + p.min = -alt_log_meter (fast_coefficient_to_dB (-p.min)); } else { - bot = 0.0; + p.min = 0.0; } - - tips[i].top = y_extent (top, false); - tips[i].bot = y_extent (bot, true); + + compute_tips (p, tips[i]); tips[i].spread = tips[i].bot - tips[i].top; } @@ -457,8 +483,7 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak tips[i].clip_min = true; } - tips[i].top = y_extent (_peaks[i].max, false); - tips[i].bot = y_extent (_peaks[i].min, true); + compute_tips (_peaks[i], tips[i]); tips[i].spread = tips[i].bot - tips[i].top; } @@ -479,16 +504,16 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak /* ensure single-pixel lines */ wave_context->set_line_width (1.0); - wave_context->translate (0.5, +1.5); + wave_context->translate (0.5, 0.5); outline_context->set_line_width (1.0); - outline_context->translate (0.5, +1.5); + outline_context->translate (0.5, 0.5); clip_context->set_line_width (1.0); - clip_context->translate (0.5, +1.5); + clip_context->translate (0.5, 0.5); zero_context->set_line_width (1.0); - zero_context->translate (0.5, +1.5); + zero_context->translate (0.5, 0.5); /* the height of the clip-indicator should be at most 7 pixels, * or 5% of the height of the waveview item. @@ -550,7 +575,7 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak outline_context->stroke (); } else { - const double height_2 = (_height - 2.5) * .5; + const int height_zero = floor( _height * .5); for (int i = 0; i < n_peaks; ++i) { @@ -560,6 +585,7 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak wave_context->move_to (i, tips[i].top); wave_context->line_to (i, tips[i].bot); } + /* draw square waves and other discontiguous points clearly */ if (i > 0) { if (tips[i-1].top + 2 < tips[i].top) { @@ -575,10 +601,11 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak } } - /* zero line */ + /* zero line, show only if there is enough spread + or the waveform line does not cross zero line */ - if (tips[i].spread >= 5.0 && show_zero_line()) { - zero_context->move_to (i, floor(height_2)); + if (show_zero_line() && ((tips[i].spread >= 5.0) || (tips[i].top > height_zero ) || (tips[i].bot < height_zero)) ) { + zero_context->move_to (i, height_zero); zero_context->rel_line_to (1.0, 0); } @@ -599,13 +626,17 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak clipped = true; } - if (!clipped) { - outline_context->move_to (i, tips[i].bot + 1.0); - /* normal lower terminal dot */ + if (!clipped && tips[i].spread > 2.0) { + /* only draw the outline if the spread + implies 3 or more pixels (so that we see 1 + white pixel in the middle). + */ + outline_context->move_to (i, tips[i].bot); + /* normal lower terminal dot; line moves up */ outline_context->rel_line_to (0, -1.0); - outline_context->move_to (i, tips[i].top - 1.0); - /* normal upper terminal dot */ + outline_context->move_to (i, tips[i].top); + /* normal upper terminal dot, line moves down */ outline_context->rel_line_to (0, 1.0); } } else { @@ -619,10 +650,15 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak } if (!clipped) { + /* special case where only 1 pixel of + * the waveform line is drawn (and + * nothing else). + * + * we draw a 1px "line", pretending + * that the span is 1.0 (whether it is + * zero or 1.0) + */ wave_context->move_to (i, tips[i].top); - /* special case where outline only is drawn. - * we draw a 1px "line", pretending that the span is 1.0 - */ wave_context->rel_line_to (0, 1.0); } } @@ -701,18 +737,15 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak boost::shared_ptr<WaveViewCache::Entry> WaveView::cache_request_result (boost::shared_ptr<WaveViewThreadRequest> req) const { + boost::shared_ptr<WaveViewCache::Entry> ret (new WaveViewCache::Entry (req->channel, req->height, - req->region_amplitude, + req->amplitude, req->fill_color, req->samples_per_pixel, req->start, req->end, req->image)); - if (!images) { - images = new WaveViewCache; - } - images->add (_region->audio_source (_channel), ret); /* consolidate cache first (removes fully-contained @@ -720,8 +753,8 @@ WaveView::cache_request_result (boost::shared_ptr<WaveViewThreadRequest> req) co */ images->consolidate_image_cache (_region->audio_source (_channel), - _channel, _height, _region_amplitude, - _fill_color, _samples_per_pixel); + req->channel, req->height, req->amplitude, + req->fill_color, req->samples_per_pixel); return ret; } @@ -747,6 +780,10 @@ WaveView::get_image (framepos_t start, framepos_t end, bool& full_image) const * have an image there. if so, use it (and put it in the cache * while we're here. */ + + DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1 CR %2 stop? %3 image %4\n", this, current_request, + (current_request ? current_request->should_stop() : false), + (current_request ? current_request->image : 0))); if (current_request && !current_request->should_stop() && current_request->image) { @@ -758,7 +795,7 @@ WaveView::get_image (framepos_t start, framepos_t end, bool& full_image) const ret.reset (new WaveViewCache::Entry (current_request->channel, current_request->height, - current_request->region_amplitude, + current_request->amplitude, current_request->fill_color, current_request->samples_per_pixel, current_request->start, @@ -790,7 +827,7 @@ WaveView::get_image (framepos_t start, framepos_t end, bool& full_image) const if (!ret || !full_image) { if ((rendered && get_image_in_thread) || always_get_image_in_thread) { - + DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1: generating image in caller thread\n", name)); boost::shared_ptr<WaveViewThreadRequest> req (new WaveViewThreadRequest); @@ -801,10 +838,10 @@ WaveView::get_image (framepos_t start, framepos_t end, bool& full_image) const req->samples_per_pixel = _samples_per_pixel; req->region = _region; /* weak ptr, to avoid storing a reference in the request queue */ req->channel = _channel; - req->width = _canvas->visible_area().width(); req->height = _height; req->fill_color = _fill_color; - req->region_amplitude = _region_amplitude; + req->amplitude = _region_amplitude * _amplitude_above_axis; + req->width = desired_image_width (); /* draw image in this (the GUI thread) */ @@ -842,7 +879,27 @@ WaveView::get_image_from_cache (framepos_t start, framepos_t end, bool& full) co } return images->lookup_image (_region->audio_source (_channel), start, end, _channel, - _height, _region_amplitude, _fill_color, _samples_per_pixel, full); + _height, _region_amplitude * _amplitude_above_axis, _fill_color, _samples_per_pixel, full); +} + +framecnt_t +WaveView::desired_image_width () const +{ + /* compute how wide the image should be, in samples. + * + * We want at least 1 canvas width's worth, but if that + * represents less than 1/10th of a second, use 1/10th of + * a second instead. + */ + + framecnt_t canvas_width_samples = _canvas->visible_area().width() * _samples_per_pixel; + const framecnt_t one_tenth_of_second = _region->session().frame_rate() / 10; + + if (canvas_width_samples > one_tenth_of_second) { + return canvas_width_samples; + } + + return one_tenth_of_second; } void @@ -856,10 +913,10 @@ WaveView::queue_get_image (boost::shared_ptr<const ARDOUR::Region> region, frame req->samples_per_pixel = _samples_per_pixel; req->region = _region; /* weak ptr, to avoid storing a reference in the request queue */ req->channel = _channel; - req->width = _canvas->visible_area().width(); req->height = _height; req->fill_color = _fill_color; - req->region_amplitude = _region_amplitude; + req->amplitude = _region_amplitude * _amplitude_above_axis; + req->width = desired_image_width (); if (current_request) { /* this will stop rendering in progress (which might otherwise @@ -875,44 +932,31 @@ WaveView::queue_get_image (boost::shared_ptr<const ARDOUR::Region> region, frame { Glib::Threads::Mutex::Lock lm (request_queue_lock); current_request = req; - } - /* this is always called from the GUI thread (there is only one), and - * the same thread runs the idle callback chain. thus we do not need - * any locks to protect idle_queued - it is only ever set or read in - * the unitary GUI thread. - */ - - if (!idle_queued) { - Glib::signal_idle().connect (sigc::mem_fun (*this, &WaveView::idle_send_request)); - idle_queued = true; - } -} - -bool -WaveView::idle_send_request () const -{ - Glib::Threads::Mutex::Lock lm (request_queue_lock); + DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1 now has current request %2\n", this, req)); - request_queue.insert (this); - request_cond.signal (); /* wake thread - must be done while holding lock */ - idle_queued = false; - - return false; /* do not call from idle again */ + if (request_queue.insert (this).second) { + /* this waveview was not already in the request queue, make sure we wake + the rendering thread in case it is asleep. + */ + request_cond.signal (); + } + } } - void WaveView::generate_image (boost::shared_ptr<WaveViewThreadRequest> req, bool in_render_thread) const { if (!req->should_stop()) { /* sample position is canonical here, and we want to generate - * an image that spans about twice the canvas width + * an image that spans about 3x the canvas width. We get to that + * width by using an image sample count of the screen width added + * on each side of the desired image center. */ const framepos_t center = req->start + ((req->end - req->start) / 2); - const framecnt_t image_samples = req->width * req->samples_per_pixel; /* one canvas width */ + const framecnt_t image_samples = req->width; /* we can request data from anywhere in the Source, between 0 and its length */ @@ -933,8 +977,6 @@ WaveView::generate_image (boost::shared_ptr<WaveViewThreadRequest> req, bool in_ req->channel, req->samples_per_pixel); - // apply waveform amplitude zoom multiplier - req->image = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, n_peaks, req->height); /* make sure we record the sample positions that were actually used */ req->start = sample_start; @@ -942,9 +984,17 @@ WaveView::generate_image (boost::shared_ptr<WaveViewThreadRequest> req, bool in_ if (peaks_read > 0) { - for (framecnt_t i = 0; i < n_peaks; ++i) { - peaks[i].max *= _amplitude_above_axis; - peaks[i].min *= _amplitude_above_axis; + /* region amplitude will have been used to generate the + * peak values already, but not the visual-only + * amplitude_above_axis. So apply that here before + * rendering. + */ + + if (_amplitude_above_axis != 1.0) { + for (framecnt_t i = 0; i < n_peaks; ++i) { + peaks[i].max *= _amplitude_above_axis; + peaks[i].min *= _amplitude_above_axis; + } } draw_image (req->image, peaks.get(), n_peaks, req); @@ -954,6 +1004,7 @@ WaveView::generate_image (boost::shared_ptr<WaveViewThreadRequest> req, bool in_ } if (in_render_thread && !req->should_stop()) { + DEBUG_TRACE (DEBUG::WaveView, string_compose ("done with request for %1 at %2 CR %3 req %4 range %5 .. %6\n", this, g_get_monotonic_time(), current_request, req, req->start, req->end)); const_cast<WaveView*>(this)->ImageReady (); /* emit signal */ } @@ -983,6 +1034,8 @@ WaveView::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) cons return; } + DEBUG_TRACE (DEBUG::WaveView, string_compose ("render %1 at %2\n", this, g_get_monotonic_time())); + /* a WaveView is intimately connected to an AudioRegion. It will * display the waveform within the region, anywhere from the start of * the region to its end. @@ -1233,6 +1286,7 @@ WaveView::gain_changed () begin_visual_change (); invalidate_image_cache (); _region_amplitude = _region->scale_amplitude (); + get_image_in_thread = true; end_visual_change (); } @@ -1287,6 +1341,7 @@ WaveView::set_amplitude_above_axis (double a) begin_visual_change (); invalidate_image_cache (); _amplitude_above_axis = a; + get_image_in_thread = true; end_visual_change (); } } @@ -1407,6 +1462,18 @@ WaveView::cancel_my_render_request () const request_queue.erase (this); current_request.reset (); + DEBUG_TRACE (DEBUG::WaveView, string_compose ("%1 now has no request %2\n", this)); + +} + +void +WaveView::set_image_cache_size (uint64_t sz) +{ + if (!images) { + images = new WaveViewCache; + } + + images->set_image_cache_threshold (sz); } /*-------------------------------------------------*/ @@ -1457,6 +1524,8 @@ WaveView::drawing_thread () requestor = *(request_queue.begin()); request_queue.erase (request_queue.begin()); + DEBUG_TRACE (DEBUG::WaveView, string_compose ("start request for %1 at %2\n", requestor, g_get_monotonic_time())); + boost::shared_ptr<WaveViewThreadRequest> req = requestor->current_request; if (!req) { @@ -1534,25 +1603,25 @@ WaveViewCache::lookup_image (boost::shared_ptr<ARDOUR::AudioSource> src, continue; } - if (end <= e->end && start >= e->start) { - /* found an image that covers the range we need */ + switch (Evoral::coverage (start, end, e->start, e->end)) { + case Evoral::OverlapExternal: /* required range is inside image range */ DEBUG_TRACE (DEBUG::WaveView, string_compose ("found image spanning %1..%2 covers %3..%4\n", e->start, e->end, start, end)); use (src, e); - full_coverage = true; - return e; - } - - if (start >= e->start) { - /* found an image that covers the start, but not the - * end. See if it is longer than any other similar - * partial image that we've found so far. - */ - - if ((e->end - e->start) > max_coverage) { - best_partial = e; - max_coverage = e->end - e->start; - } + full_coverage = true; + return e; + + case Evoral::OverlapStart: /* required range start is covered by image range */ + if ((e->end - start) > max_coverage) { + best_partial = e; + max_coverage = e->end - start; + } + break; + + case Evoral::OverlapNone: + case Evoral::OverlapEnd: + case Evoral::OverlapInternal: + break; } } @@ -1637,8 +1706,11 @@ WaveViewCache::consolidate_image_cache (boost::shared_ptr<ARDOUR::AudioSource> s if (e2->start >= e1->start && e2->end <= e1->end) { /* c2 is fully contained by c1, so delete it */ - c2 = caches.erase (c2); - continue; + caches.erase (c2); + + /* and re-start the whole iteration */ + nxt = caches.begin (); + break; } c2 = nxt2; @@ -1670,7 +1742,6 @@ WaveViewCache::add (boost::shared_ptr<ARDOUR::AudioSource> src, boost::shared_pt ce->timestamp = g_get_monotonic_time (); cache_map[src].push_back (ce); - cache_list.push_back (make_pair (src, ce)); } uint64_t @@ -1696,51 +1767,62 @@ WaveViewCache::cache_full() void WaveViewCache::cache_flush () { - SortByTimestamp sorter; + /* Build a sortable list of all cache entries */ + + CacheList cache_list; + for (ImageCache::const_iterator cm = cache_map.begin(); cm != cache_map.end(); ++cm) { + for (CacheLine::const_iterator cl = cm->second.begin(); cl != cm->second.end(); ++cl) { + cache_list.push_back (make_pair (cm->first, *cl)); + } + } + /* sort list in LRU order */ - + SortByTimestamp sorter; sort (cache_list.begin(), cache_list.end(), sorter); - while (image_cache_size > _image_cache_threshold) { + while (image_cache_size > _image_cache_threshold && !cache_map.empty() && !cache_list.empty()) { ListEntry& le (cache_list.front()); ImageCache::iterator x; - if ((x = cache_map.find (le.first)) == cache_map.end ()) { - /* wierd ... no entry for this AudioSource */ - continue; - } + if ((x = cache_map.find (le.first)) != cache_map.end ()) { - CacheLine& cl = x->second; - - for (CacheLine::iterator c = cl.begin(); c != cl.end(); ++c) { - - if (*c == le.second) { - - /* Remove this entry from this cache line */ - cl.erase (c); - - if (cl.empty()) { - /* remove cache line from main cache: no more entries */ - cache_map.erase (x); + CacheLine& cl = x->second; + + for (CacheLine::iterator c = cl.begin(); c != cl.end(); ++c) { + + if (*c == le.second) { + + DEBUG_TRACE (DEBUG::WaveView, string_compose ("Removing cache line entry for %1\n", x->first->name())); + + /* Remove this entry from this cache line */ + cl.erase (c); + + if (cl.empty()) { + /* remove cache line from main cache: no more entries */ + cache_map.erase (x); + } + + break; } - - break; } - } - - Cairo::RefPtr<Cairo::ImageSurface> img (le.second->image); - uint64_t size = img->get_height() * img->get_width() * 4; /* 4 = bytes per FORMAT_ARGB32 pixel */ - - if (image_cache_size > size) { - image_cache_size -= size; - } else { - image_cache_size = 0; + + Cairo::RefPtr<Cairo::ImageSurface> img (le.second->image); + uint64_t size = img->get_height() * img->get_width() * 4; /* 4 = bytes per FORMAT_ARGB32 pixel */ + + if (image_cache_size > size) { + image_cache_size -= size; + } else { + image_cache_size = 0; + } + DEBUG_TRACE (DEBUG::WaveView, string_compose ("cache shrunk to %1\n", image_cache_size)); } - /* Remove from the linear list */ + /* Remove from the linear list, even if we didn't find it in + * the actual cache_mao + */ cache_list.erase (cache_list.begin()); } } @@ -1748,6 +1830,7 @@ WaveViewCache::cache_flush () void WaveViewCache::set_image_cache_threshold (uint64_t sz) { + DEBUG_TRACE (DEBUG::WaveView, string_compose ("new image cache size \n", sz)); _image_cache_threshold = sz; cache_flush (); } diff --git a/libs/canvas/wscript b/libs/canvas/wscript index 2c4cca850e..67d26ea381 100644 --- a/libs/canvas/wscript +++ b/libs/canvas/wscript @@ -80,11 +80,12 @@ def build(bld): obj = bld.stlib(features = 'cxx cxxstlib', source=canvas_sources) obj.cxxflags = [ '-fPIC' ] obj.cflags = [ '-fPIC' ] - + obj.defines = [ ] + obj.export_includes = ['.'] obj.includes = ['.'] obj.uselib = 'SIGCPP CAIROMM GTKMM BOOST' - obj.use = [ 'libpbd', 'libevoral', 'libardour', 'libgtkmm2ext' ] + obj.use = [ 'libpbd', 'libevoral', 'libardour', 'libgtkmm2ext', 'libevoral' ] obj.name = 'libcanvas' obj.target = 'canvas' obj.vnum = CANVAS_LIB_VERSION diff --git a/libs/canvas/xfade_curve.cc b/libs/canvas/xfade_curve.cc index d82e6ab973..0d7d7a5245 100644 --- a/libs/canvas/xfade_curve.cc +++ b/libs/canvas/xfade_curve.cc @@ -30,13 +30,19 @@ using namespace ArdourCanvas; using std::min; using std::max; +#ifdef USE_TRACKS_CODE_FEATURES +static const bool show_bg_fades = false; +#else +static const bool show_bg_fades = true; +#endif + XFadeCurve::XFadeCurve (Canvas* c) : Item (c) , points_per_segment (32) , _xfadeposition (Start) , _outline_color (0x000000ff) , _fill_color (0x22448880) - , show_background_fade (true) + , show_background_fade (show_bg_fades) { } @@ -46,7 +52,7 @@ XFadeCurve::XFadeCurve (Canvas* c, XFadePosition pos) , _xfadeposition (pos) , _outline_color (0x000000ff) , _fill_color (0x22448880) - , show_background_fade (true) + , show_background_fade (show_bg_fades) { } @@ -56,7 +62,7 @@ XFadeCurve::XFadeCurve (Item* parent) , _xfadeposition (Start) , _outline_color (0x000000ff) , _fill_color (0x22448880) - , show_background_fade (true) + , show_background_fade (show_bg_fades) { } @@ -66,7 +72,7 @@ XFadeCurve::XFadeCurve (Item* parent, XFadePosition pos) , _xfadeposition (pos) , _outline_color (0x000000ff) , _fill_color (0x22448880) - , show_background_fade (true) + , show_background_fade (show_bg_fades) { } diff --git a/libs/evoral/src/libsmf/smf.h b/libs/evoral/src/libsmf/smf.h index cbc7035f91..e5b76eedab 100644 --- a/libs/evoral/src/libsmf/smf.h +++ b/libs/evoral/src/libsmf/smf.h @@ -394,7 +394,7 @@ int smf_extract_vlq(const unsigned char *buf, const size_t buffer_length, uint32 /* Routines for loading SMF files. */ smf_t *smf_load(FILE *) WARN_UNUSED_RESULT; -smf_t *smf_load_from_memory(const void *buffer, const size_t buffer_length) WARN_UNUSED_RESULT; +smf_t *smf_load_from_memory(void *buffer, const size_t buffer_length) WARN_UNUSED_RESULT; /* Routine for writing SMF files. */ int smf_save(smf_t *smf, FILE *file) WARN_UNUSED_RESULT; diff --git a/libs/evoral/src/libsmf/smf_load.c b/libs/evoral/src/libsmf/smf_load.c index 1db09a7a45..eeedcc3da9 100644 --- a/libs/evoral/src/libsmf/smf_load.c +++ b/libs/evoral/src/libsmf/smf_load.c @@ -873,14 +873,14 @@ load_file_into_buffer(void **file_buffer, size_t *file_buffer_length, FILE* stre * \return SMF or NULL, if loading failed. */ smf_t * -smf_load_from_memory(const void *buffer, const size_t buffer_length) +smf_load_from_memory(void *buffer, const size_t buffer_length) { int i; int ret; smf_t *smf = smf_new(); - smf->file_buffer = (void *)buffer; + smf->file_buffer = (void *) buffer; smf->file_buffer_length = buffer_length; smf->next_chunk_offset = 0; diff --git a/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj b/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj index 00513e6f11..0fe12e1304 100644 --- a/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj +++ b/libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj @@ -342,6 +342,10 @@ > </File> <File + RelativePath="..\fader.cc" + > + </File> + <File RelativePath="..\fastmeter.cc" > </File> @@ -548,6 +552,10 @@ > </File> <File + RelativePath="..\gtkmm2ext\fader.h" + > + </File> + <File RelativePath="..\gtkmm2ext\fastmeter.h" > </File> diff --git a/libs/gtkmm2ext/actions.cc b/libs/gtkmm2ext/actions.cc index 666ac29c5c..60ca2f0910 100644 --- a/libs/gtkmm2ext/actions.cc +++ b/libs/gtkmm2ext/actions.cc @@ -139,11 +139,11 @@ ActionManager::lookup_entry (const ustring accel_path, Gtk::AccelKey& key) } struct SortActionsByLabel { - bool operator() (Glib::RefPtr<Gtk::Action> a, Glib::RefPtr<Gtk::Action> b) { - ustring astr = a->get_accel_path(); - ustring bstr = b->get_accel_path(); - return astr < bstr; - } + bool operator() (Glib::RefPtr<Gtk::Action> a, Glib::RefPtr<Gtk::Action> b) { + ustring astr = a->get_accel_path(); + ustring bstr = b->get_accel_path(); + return astr < bstr; + } }; void @@ -289,71 +289,63 @@ struct ActionState { typedef std::vector<ActionState> ActionStates; -static std::stack<boost::shared_ptr<ActionStates> > state_stack; +static ActionStates action_states_to_restore; +static bool actions_disabled = false; -static boost::shared_ptr<ActionStates> -get_action_state () +void +ActionManager::save_action_states () { - boost::shared_ptr<ActionStates> state = boost::shared_ptr<ActionStates>(new ActionStates); - /* the C++ API for functions used here appears to be broken in gtkmm2.6, so we fall back to the C level. */ - GList* list = gtk_ui_manager_get_action_groups (ActionManager::ui_manager->gobj()); GList* node; GList* acts; for (node = list; node; node = g_list_next (node)) { - + GtkActionGroup* group = (GtkActionGroup*) node->data; - - /* first pass: collect them all */ - - typedef std::list<Glib::RefPtr<Gtk::Action> > action_list; - action_list the_acts; - + for (acts = gtk_action_group_list_actions (group); acts; acts = g_list_next (acts)) { GtkAction* action = (GtkAction*) acts->data; - - state->push_back (ActionState (action, gtk_action_get_sensitive (action))); + action_states_to_restore.push_back (ActionState (action, gtk_action_get_sensitive (action))); } } - - return state; } void -ActionManager::push_action_state () +ActionManager::enable_active_actions () { - state_stack.push (get_action_state()); -} - -void -ActionManager::pop_action_state () -{ - if (state_stack.empty()) { - warning << string_compose (_("programming error: %1"), X_("ActionManager::pop_action_state called with empty stack")) << endmsg; - return; + if (!actions_disabled) { + return ; } - boost::shared_ptr<ActionStates> as = state_stack.top (); - state_stack.pop (); - - for (ActionStates::iterator i = as->begin(); i != as->end(); ++i) { - gtk_action_set_sensitive ((*i).action, (*i).sensitive); + for (ActionStates::iterator i = action_states_to_restore.begin(); i != action_states_to_restore.end(); ++i) { + if ((*i).action && (*i).sensitive) { + gtk_action_set_sensitive ((*i).action, true); + } } + + action_states_to_restore.clear (); + actions_disabled = false; } void -ActionManager::disable_all_actions () +ActionManager::disable_active_actions () { - push_action_state (); - boost::shared_ptr<ActionStates> as = state_stack.top (); + if (actions_disabled == true ) { + return ; + } + // save all action's states to action_states_to_restore + save_action_states (); - for (ActionStates::iterator i = as->begin(); i != as->end(); ++i) { - gtk_action_set_sensitive ((*i).action, false); + // set all action's states disabled + for (ActionStates::iterator i = action_states_to_restore.begin(); i != action_states_to_restore.end(); ++i) { + if ((*i).sensitive) { + gtk_action_set_sensitive ((*i).action, false); + } } + actions_disabled = true; } void @@ -464,8 +456,24 @@ ActionManager::get_action_from_name (const char* name) void ActionManager::set_sensitive (vector<RefPtr<Action> >& actions, bool state) { - for (vector<RefPtr<Action> >::iterator i = actions.begin(); i != actions.end(); ++i) { - (*i)->set_sensitive (state); + // if actions weren't disabled + if (!actions_disabled) { + for (vector<RefPtr<Action> >::iterator i = actions.begin(); i != actions.end(); ++i) { + (*i)->set_sensitive (state); + } + } + else { + // actions were disabled + // so we should just set necessary action's states in action_states_to_restore + for (vector<RefPtr<Action> >::iterator i = actions.begin(); i != actions.end(); ++i) { + // go through action_states_to_restore and set state of actions + for (ActionStates::iterator j = action_states_to_restore.begin(); j != action_states_to_restore.end(); ++j) { + // all actions should have their individual name, so we can use it for comparison + if (gtk_action_get_name ((*j).action) == (*i)->get_name ()) { + (*j).sensitive = state; + } + } + } } } @@ -503,10 +511,10 @@ ActionManager::set_toggleaction_state (string n, bool s) const char* action_name = last_slash + 1; - RefPtr<Action> act = get_action (group_name, action_name); + RefPtr<Action> act = get_action (group_name, action_name); if (act) { - RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act); - tact->set_active (s); + RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act); + tact->set_active (s); } else { error << string_compose (_("Unknown action name: %1"), name) << endmsg; } diff --git a/libs/gtkmm2ext/application.cc b/libs/gtkmm2ext/application.cc index 54efb4773f..eb1cea1b5f 100644 --- a/libs/gtkmm2ext/application.cc +++ b/libs/gtkmm2ext/application.cc @@ -59,6 +59,12 @@ Application::ready () } void +Application::hide () +{ + gtk_application_hide (); +} + +void Application::cleanup () { gtk_application_cleanup (); diff --git a/libs/gtkmm2ext/auto_spin.cc b/libs/gtkmm2ext/auto_spin.cc index 0f4c371a09..2c70cb4293 100644 --- a/libs/gtkmm2ext/auto_spin.cc +++ b/libs/gtkmm2ext/auto_spin.cc @@ -143,6 +143,30 @@ AutoSpin::button_press (GdkEventButton *ev) return TRUE; } +gint +AutoSpin::scroll_event (GdkEventScroll *ev) +{ + stop_spinning (0); + + gfloat increment = step_increment; + + if (ev->state & Keyboard::TertiaryModifier) { + increment = page_increment; + } + + switch (ev->direction) { + case GDK_SCROLL_DOWN: + case GDK_SCROLL_LEFT: + adjust_value (-increment); + break; + case GDK_SCROLL_RIGHT: + case GDK_SCROLL_UP: + adjust_value (increment); + break; + } + return TRUE; +} + void AutoSpin::start_spinning (bool decrement, bool page) { diff --git a/libs/gtkmm2ext/cairo_widget.cc b/libs/gtkmm2ext/cairo_widget.cc index 2ffb2b47f3..aa8f883a7d 100644 --- a/libs/gtkmm2ext/cairo_widget.cc +++ b/libs/gtkmm2ext/cairo_widget.cc @@ -65,6 +65,99 @@ CairoWidget::on_button_press_event (GdkEventButton*) return false; } + +#ifdef USE_TRACKS_CODE_FEATURES + +/* This is Tracks version of this method. + + The use of get_visible_window() in this method is an abuse of the GDK/GTK + semantics. It can and may break on different GDK backends, and uses a + side-effect/unintended behaviour in GDK/GTK to try to accomplish something + which should be done differently. I (Paul) have confirmed this with the GTK + development team. + + For this reason, this code is not acceptable for ordinary merging into the Ardour libraries. + + Ardour Developers: you are not obligated to maintain the internals of this + implementation in the face of build-time environment changes (e.g. -D + defines etc). +*/ + +bool +CairoWidget::on_expose_event (GdkEventExpose *ev) +{ + cairo_rectangle_t expose_area; + expose_area.width = ev->area.width; + expose_area.height = ev->area.height; + +#ifdef USE_CAIRO_IMAGE_SURFACE_FOR_CAIRO_WIDGET + Cairo::RefPtr<Cairo::Context> cr; + if (get_visible_window ()) { + expose_area.x = 0; + expose_area.y = 0; + if (!_image_surface) { + _image_surface = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, get_width(), get_height()); + } + cr = Cairo::Context::create (_image_surface); + } else { + expose_area.x = ev->area.x; + expose_area.y = ev->area.y; + cr = get_window()->create_cairo_context (); + } +#else + expose_area.x = ev->area.x; + expose_area.y = ev->area.y; + Cairo::RefPtr<Cairo::Context> cr = get_window()->create_cairo_context (); +#endif + + cr->rectangle (expose_area.x, expose_area.y, expose_area.width, expose_area.height); + cr->clip (); + + /* paint expose area the color of the parent window bg + */ + + if (get_visible_window ()) { + Gdk::Color bg (get_parent_bg()); + cr->rectangle (expose_area.x, expose_area.y, expose_area.width, expose_area.height); + cr->set_source_rgb (bg.get_red_p(), bg.get_green_p(), bg.get_blue_p()); + cr->fill (); + } + + render (cr->cobj(), &expose_area); + +#ifdef USE_CAIRO_IMAGE_SURFACE_FOR_CAIRO_WIDGET + if(get_visible_window ()) { + _image_surface->flush(); + /* now blit our private surface back to the GDK one */ + + Cairo::RefPtr<Cairo::Context> cairo_context = get_window()->create_cairo_context (); + + cairo_context->rectangle (ev->area.x, ev->area.y, ev->area.width, ev->area.height); + cairo_context->clip (); + cairo_context->set_source (_image_surface, ev->area.x, ev->area.y); + cairo_context->set_operator (Cairo::OPERATOR_OVER); + cairo_context->paint (); + } +#endif + + Gtk::Widget* child = get_child (); + + if (child) { + propagate_expose (*child, ev); + } + + return true; +} + +#else + +/* Ardour mainline: not using Tracks code features. + + Tracks Developers: please do not modify this version of + ::on_expose_event(). The version used by Tracks is before the preceding + #else and contains hacks required for the Tracks GUI to work. +*/ + bool CairoWidget::on_expose_event (GdkEventExpose *ev) { @@ -126,10 +219,12 @@ CairoWidget::on_expose_event (GdkEventExpose *ev) #ifdef OPTIONAL_CAIRO_IMAGE_SURFACE } #endif - + return true; } +#endif + /** Marks the widget as dirty, so that render () will be called on * the next GTK expose event. */ diff --git a/libs/gtkmm2ext/click_box.cc b/libs/gtkmm2ext/click_box.cc index 63ab3db7ba..383fa6e583 100644 --- a/libs/gtkmm2ext/click_box.cc +++ b/libs/gtkmm2ext/click_box.cc @@ -63,6 +63,13 @@ ClickBox::button_press_handler (GdkEventButton* ev) } bool +ClickBox::on_scroll_event (GdkEventScroll* ev) +{ + AutoSpin::scroll_event (ev); + return true; +} + +bool ClickBox::button_release_handler (GdkEventButton* ev) { switch (ev->button) { diff --git a/libs/gtkmm2ext/fader.cc b/libs/gtkmm2ext/fader.cc new file mode 100755 index 0000000000..0fedd33696 --- /dev/null +++ b/libs/gtkmm2ext/fader.cc @@ -0,0 +1,448 @@ +/* + Copyright (C) 2014 Waves Audio Ltd. + + 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. + + $Id: fastmeter.h 570 2006-06-07 21:21:21Z sampo $ +*/ + + +#include <iostream> + +#include "pbd/stacktrace.h" + +#include "gtkmm2ext/fader.h" +#include "gtkmm2ext/keyboard.h" +#include "gtkmm2ext/rgb_macros.h" +#include "gtkmm2ext/utils.h" +#include "pbd/failed_constructor.h" +#include "pbd/file_utils.h" +#include "ardour/filesystem_paths.h" + +using namespace Gtkmm2ext; +using namespace Gtk; +using namespace std; + +#define CORNER_RADIUS 4 +#define CORNER_SIZE 2 +#define CORNER_OFFSET 1 +#define FADER_RESERVE 5 + + +static void get_closest_point_on_line(double xa, double ya, double xb, double yb, double xp, double yp, double& xl, double& yl ) +{ + // Storing vector A->B + double a_to_b_x = xb - xa; + double a_to_b_y = yb - ya; + + // Storing vector A->P + double a_to_p_x = xp - xa; + double a_to_p_y = yp - ya; + + + // Basically finding the squared magnitude + // of a_to_b + double atb2 = a_to_b_x * a_to_b_x + a_to_b_y * a_to_b_y; + + // The dot product of a_to_p and a_to_b + double atp_dot_atb = a_to_p_x * a_to_b_x + a_to_p_y * a_to_b_y; + + // The normalized "distance" from a to + // your closest point + double t = atp_dot_atb / atb2; + + // Add the distance to A, moving + // towards B + double x = xa + a_to_b_x * t; + double y = ya + a_to_b_y * t; + + if ((xa != xb)) { + if ((x < xa) && (x < xb)) { + if (xa < xb) { + x = xa; + y = ya; + } else { + x = xb; + y = yb; + } + } else if ((x > xa) && (x > xb)) { + if (xb > xa) { + x = xb; + y = yb; + } else { + x = xa; + y = ya; + } + } + } else { + if ((y < ya) && (y < yb)) { + if (ya < yb) { + x = xa; + y = ya; + } else { + x = xb; + y = yb; + } + } else if ((y > ya) && (y > yb)) { + if (yb > ya) { + x = xb; + y = yb; + } else { + x = xa; + y = ya; + } + } + } + + xl = x; + yl = y; +} + +Fader::Fader (Gtk::Adjustment& adj, + const Glib::RefPtr<Gdk::Pixbuf>& face_pixbuf, + const Glib::RefPtr<Gdk::Pixbuf>& active_face_pixbuf, + const Glib::RefPtr<Gdk::Pixbuf>& underlay_pixbuf, + const Glib::RefPtr<Gdk::Pixbuf>& handle_pixbuf, + const Glib::RefPtr<Gdk::Pixbuf>& active_handle_pixbuf, + int min_pos_x, + int min_pos_y, + int max_pos_x, + int max_pos_y, + bool read_only) + : adjustment (adj) + , _face_pixbuf (face_pixbuf) + , _active_face_pixbuf (active_face_pixbuf) + , _underlay_pixbuf (underlay_pixbuf) + , _handle_pixbuf (handle_pixbuf) + , _active_handle_pixbuf (active_handle_pixbuf) + , _min_pos_x (min_pos_x) + , _min_pos_y (min_pos_y) + , _max_pos_x (max_pos_x) + , _max_pos_y (max_pos_y) + , _grab_window (0) + , _touch_cursor (0) + , _dragging (false) + , _default_value (adjustment.get_value()) + , _read_only (read_only) +{ + update_unity_position (); + + if (!_read_only) { + add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::SCROLL_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK); + } + + adjustment.signal_value_changed().connect (mem_fun (*this, &Fader::adjustment_changed)); + adjustment.signal_changed().connect (mem_fun (*this, &Fader::adjustment_changed)); + CairoWidget::set_size_request(_face_pixbuf->get_width(), _face_pixbuf->get_height()); +} + +Fader::~Fader () +{ + if (_touch_cursor) { + delete _touch_cursor; + } +} + +void +Fader::get_image_scales (double &x_scale, double &y_scale) +{ + int pbwidth = _face_pixbuf->get_width (); + int pbheight = _face_pixbuf->get_height (); + int width = get_width (); + int height = get_height (); + + if ((width != pbwidth) || (height != pbheight)) { + x_scale = double (width) / double (pbwidth); + if (x_scale == 0.0) { + x_scale = 1.0; + } + y_scale = double (height) / double (pbheight); + if (y_scale == 0.0) { + y_scale = 1.0; + } + } else { + x_scale = y_scale = 1.0; + } +} + +void +Fader::set_touch_cursor (const Glib::RefPtr<Gdk::Pixbuf>& touch_cursor) +{ + _touch_cursor = new Gdk::Cursor (Gdk::Display::get_default(), touch_cursor, 12, 12); +} + +void +Fader::render (cairo_t* cr, cairo_rectangle_t*) +{ + + double xscale = 1.0; + double yscale = 1.0; + + get_image_scales (xscale, yscale); + + cairo_matrix_t matrix; + cairo_get_matrix (cr, &matrix); + cairo_matrix_scale (&matrix, xscale, yscale); + cairo_set_matrix (cr, &matrix); + + get_handle_position (_last_drawn_x, _last_drawn_y); + + if (_underlay_pixbuf != 0) { + gdk_cairo_set_source_pixbuf (cr, + _underlay_pixbuf->gobj(), + (_last_drawn_x - (int)((_underlay_pixbuf->get_width() * xscale) / 2.0 + 0.5)) / xscale, + (_last_drawn_y - (int)((_underlay_pixbuf->get_height() * yscale) / 2.0 + 0.5)) / yscale); + cairo_paint (cr); + } + + gdk_cairo_set_source_pixbuf (cr, + ((get_state () == Gtk::STATE_ACTIVE) && (_active_face_pixbuf != 0)) ? + _active_face_pixbuf->gobj() : + _face_pixbuf->gobj(), + 0, + 0); + cairo_paint (cr); + + const Glib::RefPtr<Gdk::Pixbuf> handle_pixbuf (_dragging ? _active_handle_pixbuf : _handle_pixbuf); + gdk_cairo_set_source_pixbuf (cr, + handle_pixbuf->gobj(), + (_last_drawn_x - (int)((handle_pixbuf->get_width() * xscale) / 2.0 + 0.5)) / xscale, + (_last_drawn_y - (int)((handle_pixbuf->get_height() * yscale) / 2.0 + 0.5)) / yscale); + cairo_paint (cr); +} + +void +Fader::on_size_request (GtkRequisition* req) +{ + req->width = _face_pixbuf->get_width(); + req->height = _face_pixbuf->get_height(); +} + +void +Fader::on_size_allocate (Gtk::Allocation& alloc) +{ + CairoWidget::on_size_allocate(alloc); + update_unity_position (); +} + +bool +Fader::on_button_press_event (GdkEventButton* ev) +{ + focus_handler(); + + if (_read_only) { + return false; + } + + if (ev->type != GDK_BUTTON_PRESS) { + return false; + } + + if (ev->button != 1 && ev->button != 2) { + return false; + } + + if (_touch_cursor) { + get_window()->set_cursor (*_touch_cursor); + } + + _grab_start_mouse_x = ev->x; + _grab_start_mouse_y = ev->y; + get_handle_position (_grab_start_handle_x, _grab_start_handle_y); + + double xscale = 1.0; + double yscale = 1.0; + + get_image_scales (xscale, yscale); + + double hw = _handle_pixbuf->get_width() * xscale; + double hh = _handle_pixbuf->get_height() * yscale; + + if ((ev->x < (_grab_start_handle_x - hw/2)) || (ev->x > (_grab_start_handle_x + hw/2)) || (ev->y < (_grab_start_handle_y - hh/2)) || (ev->y > (_grab_start_handle_y + hh/2))) { + return false; + } + + double ev_pos_x; + double ev_pos_y; + + get_closest_point_on_line(_min_pos_x, _min_pos_y, + _max_pos_x, _max_pos_y, + ev->x, ev->y, + ev_pos_x, ev_pos_y ); + add_modal_grab (); + + _grab_window = ev->window; + _dragging = true; + + gdk_pointer_grab(ev->window,false, + GdkEventMask (Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK), + NULL, + NULL, + ev->time); + + queue_draw(); + + return true; +} + +bool +Fader::on_button_release_event (GdkEventButton* ev) +{ + if (_read_only) { + return false; + } + + if (_touch_cursor) { + get_window()->set_cursor (); + } + + if (_dragging) { //temp + remove_modal_grab(); + _dragging = false; + gdk_pointer_ungrab (GDK_CURRENT_TIME); + queue_draw (); + } + return false; +} + +bool +Fader::on_scroll_event (GdkEventScroll* ev) +{ + if (_read_only) { + return false; + } + + int step_factor = 1; + + switch (ev->direction) { + case GDK_SCROLL_RIGHT: + case GDK_SCROLL_UP: +#ifdef __APPLE__ + if ( ev->state & GDK_SHIFT_MASK ) { + step_factor = -1; + } else { + step_factor = 1; + } +#else + step_factor = 1; +#endif + break; + case GDK_SCROLL_LEFT: + case GDK_SCROLL_DOWN: +#ifdef __APPLE__ + if ( ev->state & GDK_SHIFT_MASK ) { + step_factor = 1; + } else { + step_factor = -1; + } +#else + step_factor = -1; +#endif + break; + default: + return false; + } + adjustment.set_value (adjustment.get_value() + step_factor * (adjustment.get_step_increment() )); + return true; +} + +bool +Fader::on_motion_notify_event (GdkEventMotion* ev) +{ + if (_read_only) { + return false; + } + + if (_dragging) { + double ev_pos_x; + double ev_pos_y; + + if (ev->window != _grab_window) { + _grab_window = ev->window; + return true; + } + + get_closest_point_on_line(_min_pos_x, _min_pos_y, + _max_pos_x, _max_pos_y, + _grab_start_handle_x + (ev->x - _grab_start_mouse_x), _grab_start_handle_y + (ev->y - _grab_start_mouse_y), + ev_pos_x, ev_pos_y ); + + double const fract = sqrt((ev_pos_x - _min_pos_x) * (ev_pos_x - _min_pos_x) + + (ev_pos_y - _min_pos_y) * (ev_pos_y - _min_pos_y)) / + sqrt((double)((_max_pos_x - _min_pos_x) * (_max_pos_x - _min_pos_x) + + (_max_pos_y - _min_pos_y) * (_max_pos_y - _min_pos_y))); + + adjustment.set_value (adjustment.get_lower() + (adjustment.get_upper() - adjustment.get_lower()) * fract); + } + return true; +} + +void +Fader::adjustment_changed () +{ + double handle_x; + double handle_y; + get_handle_position (handle_x, handle_y); + + if ((handle_x != _last_drawn_x) || (handle_y != _last_drawn_y)) { + queue_draw (); + } +} + +/** @return pixel offset of the current value from the right or bottom of the fader */ +void +Fader::get_handle_position (double& x, double& y) +{ + double fract = (adjustment.get_value () - adjustment.get_lower()) / ((adjustment.get_upper() - adjustment.get_lower())); + + x = (int)(_min_pos_x + (_max_pos_x - _min_pos_x) * fract); + y = (int)(_min_pos_y + (_max_pos_y - _min_pos_y) * fract); +} + +bool +Fader::on_enter_notify_event (GdkEventCrossing*) +{ + _hovering = true; + Keyboard::magic_widget_grab_focus (); + queue_draw (); + return false; +} + +bool +Fader::on_leave_notify_event (GdkEventCrossing*) +{ + if (_read_only) { + return false; + } + + if (!_dragging) { + _hovering = false; + Keyboard::magic_widget_drop_focus(); + queue_draw (); + } + return false; +} + +void +Fader::set_default_value (float d) +{ + _default_value = d; + update_unity_position (); +} + +void +Fader::update_unity_position () +{ +} diff --git a/libs/gtkmm2ext/gtk_ui.cc b/libs/gtkmm2ext/gtk_ui.cc index b5319fbea7..c4df2b7d5c 100644 --- a/libs/gtkmm2ext/gtk_ui.cc +++ b/libs/gtkmm2ext/gtk_ui.cc @@ -482,8 +482,40 @@ UI::do_request (UIRequest* req) ======================================================================*/ void +UI::dump_errors (std::ostream& ostr) +{ + Glib::Threads::Mutex::Lock lm (error_lock); + ostr << endl << X_("Errors/Messages:") << endl; + for (list<string>::const_iterator i = error_stack.begin(); i != error_stack.end(); ++i) { + ostr << *i << endl; + } + ostr << endl; +} + +void UI::receive (Transmitter::Channel chn, const char *str) { + { + Glib::Threads::Mutex::Lock lm (error_lock); + switch (chn) { + case Transmitter::Fatal: + error_stack.push_back (string (X_("FATAL: ")) + str); + break; + case Transmitter::Error: + error_stack.push_back (string (X_("ERROR: ")) + str); + break; + case Transmitter::Warning: + error_stack.push_back (string (X_("WARNING: ")) + str); + break; + case Transmitter::Info: + error_stack.push_back (string (X_("INFO: ")) + str); + break; + case Transmitter::Throw: + error_stack.push_back (string (X_("THROW: ")) + str); + break; + } + } + if (caller_is_ui_thread()) { process_error_message (chn, str); } else { diff --git a/libs/gtkmm2ext/gtkapplication_quartz.mm b/libs/gtkmm2ext/gtkapplication_quartz.mm index 932eaa71c9..5809355ad9 100644 --- a/libs/gtkmm2ext/gtkapplication_quartz.mm +++ b/libs/gtkmm2ext/gtkapplication_quartz.mm @@ -573,7 +573,9 @@ idle_call_activate (gpointer data) - (void) activate:(id) sender { UNUSED_PARAMETER(sender); - g_idle_add (idle_call_activate, gtk_menu_item); + // Hot Fix. Increase Priority. + g_idle_add_full (G_PRIORITY_HIGH_IDLE, idle_call_activate, gtk_menu_item, NULL); +// g_idle_add (idle_call_activate, gtk_menu_item); } @end @@ -1221,7 +1223,7 @@ create_apple_menu () [menuitem release]; [_app_menu addItem: [NSMenuItem separatorItem]]; menuitem = [[NSMenuItem alloc] initWithTitle:@"Hide" - action:@selector(hide:) keyEquivalent:@""]; + action:@selector(hide:) keyEquivalent:@"h"]; [menuitem setTarget: NSApp]; [_app_menu addItem: menuitem]; [menuitem release]; @@ -1424,9 +1426,10 @@ namespace Gtk { @end -@interface GtkApplicationDelegate : NSObject +@interface GtkApplicationDelegate : NSObject -(BOOL) application:(NSApplication*) app openFile:(NSString*) file; - (NSApplicationTerminateReply) applicationShouldTerminate:(NSApplication *) app; +- (void) startApp; @end @implementation GtkApplicationDelegate @@ -1476,6 +1479,12 @@ gtk_application_ready () } extern "C" void +gtk_application_hide () +{ + [NSApp performSelector:@selector(hide:)]; +} + +extern "C" void gtk_application_cleanup() { _exiting = 1; diff --git a/libs/gtkmm2ext/gtkapplication_win32.c b/libs/gtkmm2ext/gtkapplication_win32.c index 78d538b334..7dd9db4a8d 100644 --- a/libs/gtkmm2ext/gtkapplication_win32.c +++ b/libs/gtkmm2ext/gtkapplication_win32.c @@ -47,3 +47,8 @@ void gtk_application_ready (void) { } + +void +gtk_application_hide (void) +{ +} diff --git a/libs/gtkmm2ext/gtkapplication_x11.c b/libs/gtkmm2ext/gtkapplication_x11.c index 2b85677073..6cf1055c5c 100644 --- a/libs/gtkmm2ext/gtkapplication_x11.c +++ b/libs/gtkmm2ext/gtkapplication_x11.c @@ -50,3 +50,8 @@ void gtk_application_ready (void) { } + +void +gtk_application_hide (void) +{ +} diff --git a/libs/gtkmm2ext/gtkmm2ext/actions.h b/libs/gtkmm2ext/gtkmm2ext/actions.h index d13a16f2d5..9ed1480546 100644 --- a/libs/gtkmm2ext/gtkmm2ext/actions.h +++ b/libs/gtkmm2ext/gtkmm2ext/actions.h @@ -94,9 +94,9 @@ namespace ActionManager { LIBGTKMM2EXT_API extern void set_toggleaction_state (std::string, bool); - LIBGTKMM2EXT_API extern void push_action_state (); - LIBGTKMM2EXT_API extern void pop_action_state (); - LIBGTKMM2EXT_API extern void disable_all_actions (); + LIBGTKMM2EXT_API extern void save_action_states (); + LIBGTKMM2EXT_API extern void enable_active_actions (); + LIBGTKMM2EXT_API extern void disable_active_actions (); }; #endif /* __libgtkmm2ext_actions_h__ */ diff --git a/libs/gtkmm2ext/gtkmm2ext/application.h b/libs/gtkmm2ext/gtkmm2ext/application.h index f0d029d3e7..e66b6ea2ff 100644 --- a/libs/gtkmm2ext/gtkmm2ext/application.h +++ b/libs/gtkmm2ext/gtkmm2ext/application.h @@ -45,6 +45,7 @@ public: ~Application (); void ready (); + void hide (); void cleanup (); void set_menu_bar (Gtk::MenuShell&); GtkApplicationMenuGroup* add_app_menu_group (); diff --git a/libs/gtkmm2ext/gtkmm2ext/auto_spin.h b/libs/gtkmm2ext/gtkmm2ext/auto_spin.h index 8a6c9ab3b0..0f5a9467c6 100644 --- a/libs/gtkmm2ext/gtkmm2ext/auto_spin.h +++ b/libs/gtkmm2ext/gtkmm2ext/auto_spin.h @@ -47,6 +47,7 @@ class LIBGTKMM2EXT_API AutoSpin gint button_press (GdkEventButton *); gint stop_spinning (GdkEventButton *ignored_but_here_for_clicked); void start_spinning (bool decrementing, bool use_page); + gint scroll_event (GdkEventScroll *); private: Gtk::Adjustment &adjustment; diff --git a/libs/gtkmm2ext/gtkmm2ext/click_box.h b/libs/gtkmm2ext/gtkmm2ext/click_box.h index c2afa2dd12..3b7fd0f498 100644 --- a/libs/gtkmm2ext/gtkmm2ext/click_box.h +++ b/libs/gtkmm2ext/gtkmm2ext/click_box.h @@ -57,6 +57,7 @@ class LIBGTKMM2EXT_API ClickBox : public Gtk::DrawingArea, public AutoSpin void style_changed (const Glib::RefPtr<Gtk::Style> &); bool button_press_handler (GdkEventButton *); bool button_release_handler (GdkEventButton *); + bool on_scroll_event (GdkEventScroll*); sigc::slot<bool, char *, Gtk::Adjustment &> _printer; }; diff --git a/libs/gtkmm2ext/gtkmm2ext/fader.h b/libs/gtkmm2ext/gtkmm2ext/fader.h new file mode 100755 index 0000000000..84175d5942 --- /dev/null +++ b/libs/gtkmm2ext/gtkmm2ext/fader.h @@ -0,0 +1,111 @@ +/* + Copyright (C) 2006 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 __gtkmm2ext_fader_h__ +#define __gtkmm2ext_fader_h__ + +#include <cmath> +#include <stdint.h> + +#include <gtkmm/adjustment.h> +#include <gdkmm.h> +#include <gtkmm2ext/binding_proxy.h> +#include "gtkmm2ext/cairo_widget.h" + +#include <boost/shared_ptr.hpp> + +#include "gtkmm2ext/visibility.h" + +namespace Gtkmm2ext { + +class LIBGTKMM2EXT_API Fader : public CairoWidget +{ + public: + Fader (Gtk::Adjustment& adjustment, + const Glib::RefPtr<Gdk::Pixbuf>& face_pixbuf, + const Glib::RefPtr<Gdk::Pixbuf>& active_face_pixbuf, + const Glib::RefPtr<Gdk::Pixbuf>& underlay_pixbuf, + const Glib::RefPtr<Gdk::Pixbuf>& handle_pixbuf, + const Glib::RefPtr<Gdk::Pixbuf>& active_handle_pixbuf, + int min_pos_x, + int min_pos_y, + int max_pos_x, + int max_pos_y, + bool read_only); + + virtual ~Fader (); + + void set_controllable (boost::shared_ptr<PBD::Controllable> c) { binding_proxy.set_controllable (c); } + void set_default_value (float); + void set_touch_cursor (const Glib::RefPtr<Gdk::Pixbuf>& touch_cursor); + void get_image_scales (double &x_scale, double &y_scale); + + protected: + void get_handle_position (double& x, double& y); + + void on_size_request (GtkRequisition*); + void on_size_allocate (Gtk::Allocation& alloc); + + void render (cairo_t* cr, cairo_rectangle_t*); + bool on_button_press_event (GdkEventButton*); + bool on_button_release_event (GdkEventButton*); + bool on_motion_notify_event (GdkEventMotion*); + bool on_scroll_event (GdkEventScroll* ev); + bool on_enter_notify_event (GdkEventCrossing* ev); + bool on_leave_notify_event (GdkEventCrossing* ev); + + protected: + Gtk::Adjustment& adjustment; + BindingProxy binding_proxy; + + private: + + const Glib::RefPtr<Gdk::Pixbuf> _face_pixbuf; + const Glib::RefPtr<Gdk::Pixbuf> _active_face_pixbuf; + const Glib::RefPtr<Gdk::Pixbuf> _underlay_pixbuf; + const Glib::RefPtr<Gdk::Pixbuf> _handle_pixbuf; + const Glib::RefPtr<Gdk::Pixbuf> _active_handle_pixbuf; + int _min_pos_x; + int _min_pos_y; + int _max_pos_x; + int _max_pos_y; + + bool _hovering; + + GdkWindow* _grab_window; + Gdk::Cursor *_touch_cursor; + + double _grab_start_mouse_x; + double _grab_start_mouse_y; + double _grab_start_handle_x; + double _grab_start_handle_y; + double _last_drawn_x; + double _last_drawn_y; + bool _dragging; + float _default_value; + bool _read_only; + + void adjustment_changed (); + void update_unity_position (); +}; + + +} /* namespace */ + +#endif /* __gtkmm2ext_fader_h__ */ diff --git a/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h b/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h index 0a66accaef..177adb00ff 100644 --- a/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h +++ b/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h @@ -138,6 +138,7 @@ class LIBGTKMM2EXT_API UI : public AbstractUI<UIRequest> void flush_pending (); void toggle_errors (); void show_errors (); + void dump_errors (std::ostream&); void touch_display (Touchable *); void set_tip (Gtk::Widget &w, const gchar *tip); void set_tip (Gtk::Widget &w, const std::string &tip); @@ -166,7 +167,7 @@ class LIBGTKMM2EXT_API UI : public AbstractUI<UIRequest> sigc::signal<void> theme_changed; static bool just_hide_it (GdkEventAny *, Gtk::Window *); - + protected: virtual void handle_fatal (const char *); virtual void display_message (const char *prefix, gint prefix_len, @@ -195,6 +196,9 @@ class LIBGTKMM2EXT_API UI : public AbstractUI<UIRequest> void process_error_message (Transmitter::Channel, const char *); void do_quit (); + Glib::Threads::Mutex error_lock; + std::list<std::string> error_stack; + void color_selection_done (bool status); bool color_selection_deleted (GdkEventAny *); bool color_picked; diff --git a/libs/gtkmm2ext/gtkmm2ext/gtkapplication.h b/libs/gtkmm2ext/gtkmm2ext/gtkapplication.h index 83594fefbe..4e977de8a9 100644 --- a/libs/gtkmm2ext/gtkmm2ext/gtkapplication.h +++ b/libs/gtkmm2ext/gtkmm2ext/gtkapplication.h @@ -34,6 +34,7 @@ typedef struct _GtkApplicationMenuGroup GtkApplicationMenuGroup; LIBGTKMM2EXT_API int gtk_application_init (void); LIBGTKMM2EXT_API void gtk_application_ready (void); +LIBGTKMM2EXT_API void gtk_application_hide (void); LIBGTKMM2EXT_API void gtk_application_cleanup (void); LIBGTKMM2EXT_API void gtk_application_set_menu_bar (GtkMenuShell *menu_shell); diff --git a/libs/gtkmm2ext/gtkmm2ext/persistent_tooltip.h b/libs/gtkmm2ext/gtkmm2ext/persistent_tooltip.h index 6507bbb479..9df2614095 100644 --- a/libs/gtkmm2ext/gtkmm2ext/persistent_tooltip.h +++ b/libs/gtkmm2ext/gtkmm2ext/persistent_tooltip.h @@ -31,15 +31,17 @@ namespace Gtkmm2ext { */ class LIBGTKMM2EXT_API PersistentTooltip : public sigc::trackable { -public: - PersistentTooltip (Gtk::Widget *, int margin_y = 0); + public: + PersistentTooltip (Gtk::Widget *, bool draggable = false, int margin_y = 0); virtual ~PersistentTooltip (); void set_tip (std::string); - + void set_font (Pango::FontDescription font); + void set_center_alignment (bool align_to_center); + virtual bool dragging () const; -private: + private: bool timeout (); void show (); void hide (); @@ -54,6 +56,10 @@ private: Gtk::Window* _window; /** Our label */ Gtk::Label* _label; + + /** allow to drag + */ + bool _draggable; /** true if we are `dragging', in the sense that button 1 is being held over _target. */ @@ -62,6 +68,8 @@ private: sigc::connection _timeout; /** The tip text */ std::string _tip; + Pango::FontDescription _font; + bool _align_to_center; int _margin_y; }; diff --git a/libs/gtkmm2ext/gtkmm2ext/utils.h b/libs/gtkmm2ext/gtkmm2ext/utils.h index 5832c914f6..ab70464ea0 100644 --- a/libs/gtkmm2ext/gtkmm2ext/utils.h +++ b/libs/gtkmm2ext/gtkmm2ext/utils.h @@ -54,6 +54,7 @@ namespace Gtkmm2ext { LIBGTKMM2EXT_API std::string fit_to_pixels (const std::string&, int pixel_width, Pango::FontDescription& font, int& actual_width, bool with_ellipses = false); LIBGTKMM2EXT_API std::pair<std::string, double> fit_to_pixels (cairo_t *, std::string, double); LIBGTKMM2EXT_API int pixel_width (const std::string& str, Pango::FontDescription& font); + LIBGTKMM2EXT_API void pixel_size (const std::string& str, Pango::FontDescription& font, int& width, int& height); LIBGTKMM2EXT_API void get_ink_pixel_size (Glib::RefPtr<Pango::Layout>, int& width, int& height); diff --git a/libs/gtkmm2ext/macosx/gtkmm2ext/gtkmm2ext.xcodeproj/project.pbxproj b/libs/gtkmm2ext/macosx/gtkmm2ext/gtkmm2ext.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..c7d75400a3 --- /dev/null +++ b/libs/gtkmm2ext/macosx/gtkmm2ext/gtkmm2ext.xcodeproj/project.pbxproj @@ -0,0 +1,254 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXFileReference section */ + 4397599D19CB06D100740098 /* actions.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = actions.cc; path = ../../actions.cc; sourceTree = "<group>"; }; + 4397599E19CB06D100740098 /* application.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = application.cc; path = ../../application.cc; sourceTree = "<group>"; }; + 4397599F19CB06D100740098 /* auto_spin.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = auto_spin.cc; path = ../../auto_spin.cc; sourceTree = "<group>"; }; + 439759A019CB06D100740098 /* barcontroller.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = barcontroller.cc; path = ../../barcontroller.cc; sourceTree = "<group>"; }; + 439759A119CB06D100740098 /* bindable_button.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = bindable_button.cc; path = ../../bindable_button.cc; sourceTree = "<group>"; }; + 439759A219CB06D100740098 /* binding_proxy.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = binding_proxy.cc; path = ../../binding_proxy.cc; sourceTree = "<group>"; }; + 439759A319CB06D100740098 /* bindings.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = bindings.cc; path = ../../bindings.cc; sourceTree = "<group>"; }; + 439759A419CB06D100740098 /* cairo_packer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cairo_packer.cc; path = ../../cairo_packer.cc; sourceTree = "<group>"; }; + 439759A519CB06D100740098 /* cairo_widget.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cairo_widget.cc; path = ../../cairo_widget.cc; sourceTree = "<group>"; }; + 439759A619CB06D100740098 /* cairocell.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cairocell.cc; path = ../../cairocell.cc; sourceTree = "<group>"; }; + 439759A719CB06D100740098 /* cell_renderer_color_selector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cell_renderer_color_selector.cc; path = ../../cell_renderer_color_selector.cc; sourceTree = "<group>"; }; + 439759A819CB06D100740098 /* cell_renderer_pixbuf_multi.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cell_renderer_pixbuf_multi.cc; path = ../../cell_renderer_pixbuf_multi.cc; sourceTree = "<group>"; }; + 439759A919CB06D100740098 /* cell_renderer_pixbuf_toggle.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cell_renderer_pixbuf_toggle.cc; path = ../../cell_renderer_pixbuf_toggle.cc; sourceTree = "<group>"; }; + 439759AA19CB06D100740098 /* choice.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = choice.cc; path = ../../choice.cc; sourceTree = "<group>"; }; + 439759AB19CB06D100740098 /* click_box.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = click_box.cc; path = ../../click_box.cc; sourceTree = "<group>"; }; + 439759AC19CB06D100740098 /* cursors.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cursors.cc; path = ../../cursors.cc; sourceTree = "<group>"; }; + 439759AD19CB06D100740098 /* debug.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = debug.cc; path = ../../debug.cc; sourceTree = "<group>"; }; + 439759AE19CB06D100740098 /* dndtreeview.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = dndtreeview.cc; path = ../../dndtreeview.cc; sourceTree = "<group>"; }; + 439759AF19CB06D100740098 /* fader.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fader.cc; path = ../../fader.cc; sourceTree = "<group>"; }; + 439759B019CB06D100740098 /* fastmeter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = fastmeter.cc; path = ../../fastmeter.cc; sourceTree = "<group>"; }; + 439759B119CB06D100740098 /* focus_entry.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = focus_entry.cc; path = ../../focus_entry.cc; sourceTree = "<group>"; }; + 439759B219CB06D100740098 /* grouped_buttons.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = grouped_buttons.cc; path = ../../grouped_buttons.cc; sourceTree = "<group>"; }; + 439759B319CB06D100740098 /* gtk_ui.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = gtk_ui.cc; path = ../../gtk_ui.cc; sourceTree = "<group>"; }; + 439759B419CB06D100740098 /* gtkapplication_quartz.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = gtkapplication_quartz.mm; path = ../../gtkapplication_quartz.mm; sourceTree = "<group>"; }; + 439759B519CB06D100740098 /* gtkapplication_win32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = gtkapplication_win32.c; path = ../../gtkapplication_win32.c; sourceTree = "<group>"; }; + 439759B619CB06D100740098 /* gtkapplication_x11.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = gtkapplication_x11.c; path = ../../gtkapplication_x11.c; sourceTree = "<group>"; }; + 439759B719CB06D100740098 /* gtkapplication.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = gtkapplication.c; path = ../../gtkapplication.c; sourceTree = "<group>"; }; + 439759B819CB06D100740098 /* idle_adjustment.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = idle_adjustment.cc; path = ../../idle_adjustment.cc; sourceTree = "<group>"; }; + 439759B919CB06D100740098 /* keyboard.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = keyboard.cc; path = ../../keyboard.cc; sourceTree = "<group>"; }; + 439759BB19CB070500740098 /* actions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = actions.h; path = ../../gtkmm2ext/actions.h; sourceTree = "<group>"; }; + 439759BC19CB070500740098 /* activatable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = activatable.h; path = ../../gtkmm2ext/activatable.h; sourceTree = "<group>"; }; + 439759BD19CB070500740098 /* application.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = application.h; path = ../../gtkmm2ext/application.h; sourceTree = "<group>"; }; + 439759BE19CB070500740098 /* auto_spin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = auto_spin.h; path = ../../gtkmm2ext/auto_spin.h; sourceTree = "<group>"; }; + 439759BF19CB070500740098 /* barcontroller.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = barcontroller.h; path = ../../gtkmm2ext/barcontroller.h; sourceTree = "<group>"; }; + 439759C019CB070500740098 /* bindable_button.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bindable_button.h; path = ../../gtkmm2ext/bindable_button.h; sourceTree = "<group>"; }; + 439759C119CB070500740098 /* binding_proxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = binding_proxy.h; path = ../../gtkmm2ext/binding_proxy.h; sourceTree = "<group>"; }; + 439759C219CB070500740098 /* bindings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bindings.h; path = ../../gtkmm2ext/bindings.h; sourceTree = "<group>"; }; + 439759C319CB070500740098 /* cairo_packer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cairo_packer.h; path = ../../gtkmm2ext/cairo_packer.h; sourceTree = "<group>"; }; + 439759C419CB070500740098 /* cairo_widget.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cairo_widget.h; path = ../../gtkmm2ext/cairo_widget.h; sourceTree = "<group>"; }; + 439759C519CB070500740098 /* cairocell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cairocell.h; path = ../../gtkmm2ext/cairocell.h; sourceTree = "<group>"; }; + 439759C619CB070500740098 /* cell_renderer_color_selector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cell_renderer_color_selector.h; path = ../../gtkmm2ext/cell_renderer_color_selector.h; sourceTree = "<group>"; }; + 439759C719CB070500740098 /* cell_renderer_pixbuf_multi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cell_renderer_pixbuf_multi.h; path = ../../gtkmm2ext/cell_renderer_pixbuf_multi.h; sourceTree = "<group>"; }; + 439759C819CB070500740098 /* cell_renderer_pixbuf_toggle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cell_renderer_pixbuf_toggle.h; path = ../../gtkmm2ext/cell_renderer_pixbuf_toggle.h; sourceTree = "<group>"; }; + 439759C919CB070500740098 /* choice.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = choice.h; path = ../../gtkmm2ext/choice.h; sourceTree = "<group>"; }; + 439759CA19CB070500740098 /* click_box.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = click_box.h; path = ../../gtkmm2ext/click_box.h; sourceTree = "<group>"; }; + 439759CB19CB070500740098 /* cursors.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cursors.h; path = ../../gtkmm2ext/cursors.h; sourceTree = "<group>"; }; + 439759CC19CB070500740098 /* debug.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = debug.h; path = ../../gtkmm2ext/debug.h; sourceTree = "<group>"; }; + 439759CD19CB070500740098 /* dndtreeview.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dndtreeview.h; path = ../../gtkmm2ext/dndtreeview.h; sourceTree = "<group>"; }; + 439759CE19CB070500740098 /* dndvbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dndvbox.h; path = ../../gtkmm2ext/dndvbox.h; sourceTree = "<group>"; }; + 439759CF19CB070500740098 /* doi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = doi.h; path = ../../gtkmm2ext/doi.h; sourceTree = "<group>"; }; + 439759D019CB070500740098 /* fader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fader.h; path = ../../gtkmm2ext/fader.h; sourceTree = "<group>"; }; + 439759D119CB070500740098 /* fastmeter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fastmeter.h; path = ../../gtkmm2ext/fastmeter.h; sourceTree = "<group>"; }; + 439759D219CB070500740098 /* focus_entry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = focus_entry.h; path = ../../gtkmm2ext/focus_entry.h; sourceTree = "<group>"; }; + 439759D319CB070500740098 /* grouped_buttons.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = grouped_buttons.h; path = ../../gtkmm2ext/grouped_buttons.h; sourceTree = "<group>"; }; + 439759D419CB070500740098 /* gtk_ui.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = gtk_ui.h; path = ../../gtkmm2ext/gtk_ui.h; sourceTree = "<group>"; }; + 439759D519CB070500740098 /* gtkapplication-private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "gtkapplication-private.h"; path = "../../gtkmm2ext/gtkapplication-private.h"; sourceTree = "<group>"; }; + 439759D619CB070500740098 /* gtkapplication.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = gtkapplication.h; path = ../../gtkmm2ext/gtkapplication.h; sourceTree = "<group>"; }; + 439759D719CB070500740098 /* gtkutils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = gtkutils.h; path = ../../gtkmm2ext/gtkutils.h; sourceTree = "<group>"; }; + 439759D819CB070500740098 /* gui_thread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = gui_thread.h; path = ../../gtkmm2ext/gui_thread.h; sourceTree = "<group>"; }; + 439759D919CB070500740098 /* idle_adjustment.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = idle_adjustment.h; path = ../../gtkmm2ext/idle_adjustment.h; sourceTree = "<group>"; }; + 439759DA19CB070500740098 /* keyboard.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = keyboard.h; path = ../../gtkmm2ext/keyboard.h; sourceTree = "<group>"; }; + 439759DB19CB070500740098 /* motionfeedback.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = motionfeedback.h; path = ../../gtkmm2ext/motionfeedback.h; sourceTree = "<group>"; }; + 439759DC19CB070500740098 /* paths_dialog.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = paths_dialog.h; path = ../../gtkmm2ext/paths_dialog.h; sourceTree = "<group>"; }; + 439759DD19CB070500740098 /* persistent_tooltip.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = persistent_tooltip.h; path = ../../gtkmm2ext/persistent_tooltip.h; sourceTree = "<group>"; }; + 439759DE19CB070500740098 /* pixfader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pixfader.h; path = ../../gtkmm2ext/pixfader.h; sourceTree = "<group>"; }; + 439759DF19CB070500740098 /* pixscroller.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pixscroller.h; path = ../../gtkmm2ext/pixscroller.h; sourceTree = "<group>"; }; + 439759E019CB070500740098 /* popup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = popup.h; path = ../../gtkmm2ext/popup.h; sourceTree = "<group>"; }; + 439759E119CB070500740098 /* prolooks-helpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "prolooks-helpers.h"; path = "../../gtkmm2ext/prolooks-helpers.h"; sourceTree = "<group>"; }; + 439759E219CB070500740098 /* prompter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = prompter.h; path = ../../gtkmm2ext/prompter.h; sourceTree = "<group>"; }; + 439759E319CB070500740098 /* rgb_macros.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = rgb_macros.h; path = ../../gtkmm2ext/rgb_macros.h; sourceTree = "<group>"; }; + 439759E419CB070500740098 /* scroomer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scroomer.h; path = ../../gtkmm2ext/scroomer.h; sourceTree = "<group>"; }; + 439759E519CB070500740098 /* selector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = selector.h; path = ../../gtkmm2ext/selector.h; sourceTree = "<group>"; }; + 439759E619CB070500740098 /* slider_controller.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = slider_controller.h; path = ../../gtkmm2ext/slider_controller.h; sourceTree = "<group>"; }; + 439759E719CB070500740098 /* stateful_button.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = stateful_button.h; path = ../../gtkmm2ext/stateful_button.h; sourceTree = "<group>"; }; + 439759E819CB070500740098 /* sync-menu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "sync-menu.h"; path = "../../gtkmm2ext/sync-menu.h"; sourceTree = "<group>"; }; + 439759E919CB070500740098 /* tearoff.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = tearoff.h; path = ../../gtkmm2ext/tearoff.h; sourceTree = "<group>"; }; + 439759EA19CB070500740098 /* textviewer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = textviewer.h; path = ../../gtkmm2ext/textviewer.h; sourceTree = "<group>"; }; + 439759EB19CB070500740098 /* treeutils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = treeutils.h; path = ../../gtkmm2ext/treeutils.h; sourceTree = "<group>"; }; + 439759EC19CB070500740098 /* utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = utils.h; path = ../../gtkmm2ext/utils.h; sourceTree = "<group>"; }; + 439759ED19CB070500740098 /* version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = version.h; path = ../../gtkmm2ext/version.h; sourceTree = "<group>"; }; + 439759EE19CB070500740098 /* visibility_tracker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = visibility_tracker.h; path = ../../gtkmm2ext/visibility_tracker.h; sourceTree = "<group>"; }; + 439759EF19CB070500740098 /* visibility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = visibility.h; path = ../../gtkmm2ext/visibility.h; sourceTree = "<group>"; }; + 439759F019CB070500740098 /* widget_state.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = widget_state.h; path = ../../gtkmm2ext/widget_state.h; sourceTree = "<group>"; }; + 439759F119CB070500740098 /* window_title.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = window_title.h; path = ../../gtkmm2ext/window_title.h; sourceTree = "<group>"; }; +/* End PBXFileReference section */ + +/* Begin PBXGroup section */ + 4397598F19CB06AC00740098 = { + isa = PBXGroup; + children = ( + 439759BA19CB06F000740098 /* headers */, + 4397599C19CB06B200740098 /* source */, + ); + sourceTree = "<group>"; + }; + 4397599C19CB06B200740098 /* source */ = { + isa = PBXGroup; + children = ( + 4397599D19CB06D100740098 /* actions.cc */, + 4397599E19CB06D100740098 /* application.cc */, + 4397599F19CB06D100740098 /* auto_spin.cc */, + 439759A019CB06D100740098 /* barcontroller.cc */, + 439759A119CB06D100740098 /* bindable_button.cc */, + 439759A219CB06D100740098 /* binding_proxy.cc */, + 439759A319CB06D100740098 /* bindings.cc */, + 439759A419CB06D100740098 /* cairo_packer.cc */, + 439759A519CB06D100740098 /* cairo_widget.cc */, + 439759A619CB06D100740098 /* cairocell.cc */, + 439759A719CB06D100740098 /* cell_renderer_color_selector.cc */, + 439759A819CB06D100740098 /* cell_renderer_pixbuf_multi.cc */, + 439759A919CB06D100740098 /* cell_renderer_pixbuf_toggle.cc */, + 439759AA19CB06D100740098 /* choice.cc */, + 439759AB19CB06D100740098 /* click_box.cc */, + 439759AC19CB06D100740098 /* cursors.cc */, + 439759AD19CB06D100740098 /* debug.cc */, + 439759AE19CB06D100740098 /* dndtreeview.cc */, + 439759AF19CB06D100740098 /* fader.cc */, + 439759B019CB06D100740098 /* fastmeter.cc */, + 439759B119CB06D100740098 /* focus_entry.cc */, + 439759B219CB06D100740098 /* grouped_buttons.cc */, + 439759B319CB06D100740098 /* gtk_ui.cc */, + 439759B419CB06D100740098 /* gtkapplication_quartz.mm */, + 439759B519CB06D100740098 /* gtkapplication_win32.c */, + 439759B619CB06D100740098 /* gtkapplication_x11.c */, + 439759B719CB06D100740098 /* gtkapplication.c */, + 439759B819CB06D100740098 /* idle_adjustment.cc */, + 439759B919CB06D100740098 /* keyboard.cc */, + ); + name = source; + sourceTree = "<group>"; + }; + 439759BA19CB06F000740098 /* headers */ = { + isa = PBXGroup; + children = ( + 439759BB19CB070500740098 /* actions.h */, + 439759BC19CB070500740098 /* activatable.h */, + 439759BD19CB070500740098 /* application.h */, + 439759BE19CB070500740098 /* auto_spin.h */, + 439759BF19CB070500740098 /* barcontroller.h */, + 439759C019CB070500740098 /* bindable_button.h */, + 439759C119CB070500740098 /* binding_proxy.h */, + 439759C219CB070500740098 /* bindings.h */, + 439759C319CB070500740098 /* cairo_packer.h */, + 439759C419CB070500740098 /* cairo_widget.h */, + 439759C519CB070500740098 /* cairocell.h */, + 439759C619CB070500740098 /* cell_renderer_color_selector.h */, + 439759C719CB070500740098 /* cell_renderer_pixbuf_multi.h */, + 439759C819CB070500740098 /* cell_renderer_pixbuf_toggle.h */, + 439759C919CB070500740098 /* choice.h */, + 439759CA19CB070500740098 /* click_box.h */, + 439759CB19CB070500740098 /* cursors.h */, + 439759CC19CB070500740098 /* debug.h */, + 439759CD19CB070500740098 /* dndtreeview.h */, + 439759CE19CB070500740098 /* dndvbox.h */, + 439759CF19CB070500740098 /* doi.h */, + 439759D019CB070500740098 /* fader.h */, + 439759D119CB070500740098 /* fastmeter.h */, + 439759D219CB070500740098 /* focus_entry.h */, + 439759D319CB070500740098 /* grouped_buttons.h */, + 439759D419CB070500740098 /* gtk_ui.h */, + 439759D519CB070500740098 /* gtkapplication-private.h */, + 439759D619CB070500740098 /* gtkapplication.h */, + 439759D719CB070500740098 /* gtkutils.h */, + 439759D819CB070500740098 /* gui_thread.h */, + 439759D919CB070500740098 /* idle_adjustment.h */, + 439759DA19CB070500740098 /* keyboard.h */, + 439759DB19CB070500740098 /* motionfeedback.h */, + 439759DC19CB070500740098 /* paths_dialog.h */, + 439759DD19CB070500740098 /* persistent_tooltip.h */, + 439759DE19CB070500740098 /* pixfader.h */, + 439759DF19CB070500740098 /* pixscroller.h */, + 439759E019CB070500740098 /* popup.h */, + 439759E119CB070500740098 /* prolooks-helpers.h */, + 439759E219CB070500740098 /* prompter.h */, + 439759E319CB070500740098 /* rgb_macros.h */, + 439759E419CB070500740098 /* scroomer.h */, + 439759E519CB070500740098 /* selector.h */, + 439759E619CB070500740098 /* slider_controller.h */, + 439759E719CB070500740098 /* stateful_button.h */, + 439759E819CB070500740098 /* sync-menu.h */, + 439759E919CB070500740098 /* tearoff.h */, + 439759EA19CB070500740098 /* textviewer.h */, + 439759EB19CB070500740098 /* treeutils.h */, + 439759EC19CB070500740098 /* utils.h */, + 439759ED19CB070500740098 /* version.h */, + 439759EE19CB070500740098 /* visibility_tracker.h */, + 439759EF19CB070500740098 /* visibility.h */, + 439759F019CB070500740098 /* widget_state.h */, + 439759F119CB070500740098 /* window_title.h */, + ); + name = headers; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXProject section */ + 4397599019CB06AC00740098 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0510; + }; + buildConfigurationList = 4397599319CB06AC00740098 /* Build configuration list for PBXProject "gtkmm2ext" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 4397598F19CB06AC00740098; + projectDirPath = ""; + projectRoot = ""; + targets = ( + ); + }; +/* End PBXProject section */ + +/* Begin XCBuildConfiguration section */ + 4397599419CB06AC00740098 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Debug; + }; + 4397599519CB06AC00740098 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4397599319CB06AC00740098 /* Build configuration list for PBXProject "gtkmm2ext" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4397599419CB06AC00740098 /* Debug */, + 4397599519CB06AC00740098 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 4397599019CB06AC00740098 /* Project object */; +} diff --git a/libs/gtkmm2ext/persistent_tooltip.cc b/libs/gtkmm2ext/persistent_tooltip.cc index d9ccfa15f7..88be6ef100 100644 --- a/libs/gtkmm2ext/persistent_tooltip.cc +++ b/libs/gtkmm2ext/persistent_tooltip.cc @@ -21,6 +21,8 @@ #include <gtkmm/label.h> #include "gtkmm2ext/persistent_tooltip.h" +#include "pbd/stacktrace.h" + #include "i18n.h" using namespace std; @@ -28,11 +30,13 @@ using namespace Gtk; using namespace Gtkmm2ext; /** @param target The widget to provide the tooltip for */ -PersistentTooltip::PersistentTooltip (Gtk::Widget* target, int margin_y) +PersistentTooltip::PersistentTooltip (Gtk::Widget* target, bool draggable, int margin_y) : _target (target) , _window (0) , _label (0) + , _draggable (draggable) , _maybe_dragging (false) + , _align_to_center (true) , _margin_y (margin_y) { target->signal_enter_notify_event().connect (sigc::mem_fun (*this, &PersistentTooltip::enter), false); @@ -97,7 +101,7 @@ PersistentTooltip::release (GdkEventButton* ev) bool PersistentTooltip::dragging () const { - return _maybe_dragging; + return _maybe_dragging && _draggable; } void @@ -114,6 +118,7 @@ PersistentTooltip::show () if (_tip.empty()) { return; } + if (!_window) { _window = new Window (WINDOW_POPUP); _window->set_name (X_("ContrastingPopup")); @@ -121,6 +126,7 @@ PersistentTooltip::show () _window->set_decorated (false); _label = manage (new Label); + _label->modify_font (_font); _label->set_use_markup (true); _window->set_border_width (6); @@ -136,19 +142,32 @@ PersistentTooltip::show () set_tip (_tip); if (!_window->is_visible ()) { - int rx, ry, sw; - sw= gdk_screen_width(); - _target->get_window()->get_origin (rx, ry); - _window->move (rx, ry + _target->get_height() + _margin_y); - _window->present (); + int rx, ry; + int sw = gdk_screen_width (); + _target->get_window()->get_origin (rx, ry); + /* the window needs to be realized first * for _window->get_width() to be correct. */ + + if (sw < rx + _window->get_width()) { + /* right edge of window would be off the right edge of + the screen, so don't show it in the usual place. + */ rx = sw - _window->get_width(); - _window->move (rx, ry + _target->get_height()); + _window->move (rx, ry + _target->get_height() + _margin_y); + } else { + if (_align_to_center) { + _window->move (rx + (_target->get_width () - _window->get_width ()) / 2, ry + _target->get_height()); + } else { + _window->move (rx, ry + _target->get_height()); + } } + + _window->present (); + } } @@ -161,3 +180,19 @@ PersistentTooltip::set_tip (string t) _label->set_markup (t); } } + +void +PersistentTooltip::set_font (Pango::FontDescription font) +{ + _font = font; + + if (_label) { + _label->modify_font (_font); + } +} + +void +PersistentTooltip::set_center_alignment (bool align_to_center) +{ + _align_to_center = align_to_center; +} diff --git a/libs/gtkmm2ext/utils.cc b/libs/gtkmm2ext/utils.cc index 03396a4af9..6efa95ac1a 100644 --- a/libs/gtkmm2ext/utils.cc +++ b/libs/gtkmm2ext/utils.cc @@ -705,6 +705,18 @@ Gtkmm2ext::pixel_width (const string& str, Pango::FontDescription& font) return width; } +void +Gtkmm2ext::pixel_size (const string& str, Pango::FontDescription& font, int& width, int& height) +{ + Gtk::Label foo; + Glib::RefPtr<Pango::Layout> layout = foo.create_pango_layout (""); + + layout->set_font_description (font); + layout->set_text (str); + + Gtkmm2ext::get_ink_pixel_size (layout, width, height); +} + #if 0 string Gtkmm2ext::fit_to_pixels (const string& str, int pixel_width, Pango::FontDescription& font, int& actual_width, bool with_ellipses) diff --git a/libs/gtkmm2ext/waves_fastmeter.cc b/libs/gtkmm2ext/waves_fastmeter.cc new file mode 100644 index 0000000000..d97a92aac2 --- /dev/null +++ b/libs/gtkmm2ext/waves_fastmeter.cc @@ -0,0 +1,909 @@ +/* + Copyright (C) 2003-2006 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. + + $Id$ +*/ + +#include <iostream> +#include <cmath> +#include <algorithm> +#include <cstring> + +#include <stdlib.h> + +#include <glibmm.h> +#include <gdkmm.h> +#include <gdkmm/rectangle.h> +#include <gtkmm2ext/fastmeter.h> +#include <gtkmm2ext/utils.h> + +#define UINT_TO_RGB(u,r,g,b) { (*(r)) = ((u)>>16)&0xff; (*(g)) = ((u)>>8)&0xff; (*(b)) = (u)&0xff; } +#define UINT_TO_RGBA(u,r,g,b,a) { UINT_TO_RGB(((u)>>8),r,g,b); (*(a)) = (u)&0xff; } + +using namespace Gtk; +using namespace Glib; +using namespace Gtkmm2ext; +using namespace std; + +int FastMeter::min_pattern_metric_size = 16; +int FastMeter::max_pattern_metric_size = 1024; +bool FastMeter::no_rgba_overlay = false; + +FastMeter::Pattern10Map FastMeter::vm_pattern_cache; +FastMeter::PatternBgMap FastMeter::vb_pattern_cache; + +FastMeter::Pattern10Map FastMeter::hm_pattern_cache; +FastMeter::PatternBgMap FastMeter::hb_pattern_cache; + +FastMeter::FastMeter (long hold, unsigned long dimen, Orientation o, int len, + int clr0, int clr1, int clr2, int clr3, + int clr4, int clr5, int clr6, int clr7, + int clr8, int clr9, + int bgc0, int bgc1, + int bgh0, int bgh1, + float stp0, float stp1, + float stp2, float stp3, + int styleflags + ) + : pixheight(0) + , pixwidth(0) + , _styleflags(1) + , orientation(o) + , hold_cnt(hold) + , hold_state(0) + , bright_hold(false) + , current_level(0) + , current_peak(0) + , highlight(false) +{ + last_peak_rect.width = 0; + last_peak_rect.height = 0; + last_peak_rect.x = 0; + last_peak_rect.y = 0; + + no_rgba_overlay = ! Glib::getenv("NO_METER_SHADE").empty(); + + _clr[0] = clr0; + _clr[1] = clr1; + _clr[2] = clr2; + _clr[3] = clr3; + _clr[4] = clr4; + _clr[5] = clr5; + _clr[6] = clr6; + _clr[7] = clr7; + _clr[8] = clr8; + _clr[9] = clr9; + + _bgc[0] = bgc0; + _bgc[1] = bgc1; + + _bgh[0] = bgh0; + _bgh[1] = bgh1; + + _stp[0] = stp0; + _stp[1] = stp1; + _stp[2] = stp2; + _stp[3] = stp3; + + set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); + + pixrect.x = 0; + pixrect.y = 0; + + if (!len) { + len = 250; + } + if (orientation == Vertical) { + pixheight = len; + pixwidth = dimen; + fgpattern = request_vertical_meter(pixwidth, pixheight, _clr, _stp, _styleflags); + bgpattern = request_vertical_background (pixwidth, pixheight, _bgc, false); + + } else { + pixheight = dimen; + pixwidth = len; + fgpattern = request_horizontal_meter(pixwidth, pixheight, _clr, _stp, _styleflags); + bgpattern = request_horizontal_background (pixwidth, pixheight, _bgc, false); + } + + pixrect.width = pixwidth; + pixrect.height = pixheight; + + request_width = pixrect.width; + request_height= pixrect.height; + + clear (); +} + +FastMeter::~FastMeter () +{ +} + +void +FastMeter::flush_pattern_cache () +{ + Pattern10Map::iterator i1; + PatternBgMap::iterator ib; + + for (ib = hb_pattern_cache.begin(); ib != hb_pattern_cache.end(); ++ib) { + hb_pattern_cache.erase(ib); + } + + for (i1 = hm_pattern_cache.begin(); i1 != hm_pattern_cache.end(); ++i1) { + hm_pattern_cache.erase(i1); + } + + for (ib = vb_pattern_cache.begin(); ib != vb_pattern_cache.end(); ++ib) { + vb_pattern_cache.erase(ib); + } + + for (i1 = vm_pattern_cache.begin(); i1 != vm_pattern_cache.end(); ++i1) { + vm_pattern_cache.erase(i1); + } +} + +Cairo::RefPtr<Cairo::Pattern> +FastMeter::generate_meter_pattern ( + int width, int height, int *clr, float *stp, int styleflags, bool horiz) +{ + guint8 r,g,b,a; + double knee; + const double soft = 3.0 / (double) height; + const double offs = -1.0 / (double) height; + + cairo_pattern_t* pat = cairo_pattern_create_linear (0.0, 0.0, 0.0, height); + + /* + Cairo coordinate space goes downwards as y value goes up, so invert + knee-based positions by using (1.0 - y) + */ + + UINT_TO_RGBA (clr[9], &r, &g, &b, &a); // top/clip + cairo_pattern_add_color_stop_rgb (pat, 0.0, + r/255.0, g/255.0, b/255.0); + + knee = offs + stp[3] / 115.0f; // -0dB + + UINT_TO_RGBA (clr[8], &r, &g, &b, &a); + cairo_pattern_add_color_stop_rgb (pat, 1.0 - knee, + r/255.0, g/255.0, b/255.0); + + UINT_TO_RGBA (clr[7], &r, &g, &b, &a); + cairo_pattern_add_color_stop_rgb (pat, 1.0 - knee + soft, + r/255.0, g/255.0, b/255.0); + + knee = offs + stp[2]/ 115.0f; // -3dB || -2dB + + UINT_TO_RGBA (clr[6], &r, &g, &b, &a); + cairo_pattern_add_color_stop_rgb (pat, 1.0 - knee, + r/255.0, g/255.0, b/255.0); + + UINT_TO_RGBA (clr[5], &r, &g, &b, &a); + cairo_pattern_add_color_stop_rgb (pat, 1.0 - knee + soft, + r/255.0, g/255.0, b/255.0); + + knee = offs + stp[1] / 115.0f; // -9dB + + UINT_TO_RGBA (clr[4], &r, &g, &b, &a); + cairo_pattern_add_color_stop_rgb (pat, 1.0 - knee, + r/255.0, g/255.0, b/255.0); + + UINT_TO_RGBA (clr[3], &r, &g, &b, &a); + cairo_pattern_add_color_stop_rgb (pat, 1.0 - knee + soft, + r/255.0, g/255.0, b/255.0); + + knee = offs + stp[0] / 115.0f; // -18dB + + UINT_TO_RGBA (clr[2], &r, &g, &b, &a); + cairo_pattern_add_color_stop_rgb (pat, 1.0 - knee, + r/255.0, g/255.0, b/255.0); + + UINT_TO_RGBA (clr[1], &r, &g, &b, &a); + cairo_pattern_add_color_stop_rgb (pat, 1.0 - knee + soft, + r/255.0, g/255.0, b/255.0); + + UINT_TO_RGBA (clr[0], &r, &g, &b, &a); // bottom + cairo_pattern_add_color_stop_rgb (pat, 1.0, + r/255.0, g/255.0, b/255.0); + + if ((styleflags & 1) && !no_rgba_overlay) { + cairo_pattern_t* shade_pattern = cairo_pattern_create_linear (0.0, 0.0, width, 0.0); + cairo_pattern_add_color_stop_rgba (shade_pattern, 0, 0.0, 0.0, 0.0, 0.15); + cairo_pattern_add_color_stop_rgba (shade_pattern, 0.4, 1.0, 1.0, 1.0, 0.05); + cairo_pattern_add_color_stop_rgba (shade_pattern, 1, 0.0, 0.0, 0.0, 0.25); + + cairo_surface_t* surface; + cairo_t* tc = 0; + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); + tc = cairo_create (surface); + cairo_set_source (tc, pat); + cairo_rectangle (tc, 0, 0, width, height); + cairo_fill (tc); + cairo_pattern_destroy (pat); + + cairo_set_source (tc, shade_pattern); + cairo_rectangle (tc, 0, 0, width, height); + cairo_fill (tc); + cairo_pattern_destroy (shade_pattern); + + if (styleflags & 2) { // LED stripes + cairo_save (tc); + cairo_set_line_width(tc, 1.0); + cairo_set_source_rgba(tc, .0, .0, .0, 0.4); + //cairo_set_operator (tc, CAIRO_OPERATOR_SOURCE); + for (float y=0.5; y < height; y+= 2.0) { + cairo_move_to(tc, 0, y); + cairo_line_to(tc, width, y); + cairo_stroke (tc); + } + cairo_restore (tc); + } + + pat = cairo_pattern_create_for_surface (surface); + cairo_destroy (tc); + cairo_surface_destroy (surface); + } + + if (horiz) { + cairo_surface_t* surface; + cairo_t* tc = 0; + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, height, width); + tc = cairo_create (surface); + + cairo_matrix_t m; + cairo_matrix_init_rotate (&m, -M_PI/2.0); + cairo_matrix_translate (&m, -height, 0); + cairo_pattern_set_matrix (pat, &m); + cairo_set_source (tc, pat); + cairo_rectangle (tc, 0, 0, height, width); + cairo_fill (tc); + cairo_pattern_destroy (pat); + pat = cairo_pattern_create_for_surface (surface); + cairo_destroy (tc); + cairo_surface_destroy (surface); + } + Cairo::RefPtr<Cairo::Pattern> p (new Cairo::Pattern (pat, false)); + + return p; +} + + +Cairo::RefPtr<Cairo::Pattern> +FastMeter::generate_meter_background ( + int width, int height, int *clr, bool shade, bool horiz) +{ + guint8 r0,g0,b0,r1,g1,b1,a; + + cairo_pattern_t* pat = cairo_pattern_create_linear (0.0, 0.0, 0.0, height); + + UINT_TO_RGBA (clr[0], &r0, &g0, &b0, &a); + UINT_TO_RGBA (clr[1], &r1, &g1, &b1, &a); + + cairo_pattern_add_color_stop_rgb (pat, 0.0, + r1/255.0, g1/255.0, b1/255.0); + + cairo_pattern_add_color_stop_rgb (pat, 1.0, + r0/255.0, g0/255.0, b0/255.0); + + if (shade && !no_rgba_overlay) { + cairo_pattern_t* shade_pattern = cairo_pattern_create_linear (0.0, 0.0, width, 0.0); + cairo_pattern_add_color_stop_rgba (shade_pattern, 0.0, 1.0, 1.0, 1.0, 0.15); + cairo_pattern_add_color_stop_rgba (shade_pattern, 0.6, 0.0, 0.0, 0.0, 0.10); + cairo_pattern_add_color_stop_rgba (shade_pattern, 1.0, 1.0, 1.0, 1.0, 0.20); + + cairo_surface_t* surface; + cairo_t* tc = 0; + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); + tc = cairo_create (surface); + cairo_set_source (tc, pat); + cairo_rectangle (tc, 0, 0, width, height); + cairo_fill (tc); + cairo_set_source (tc, shade_pattern); + cairo_rectangle (tc, 0, 0, width, height); + cairo_fill (tc); + + cairo_pattern_destroy (pat); + cairo_pattern_destroy (shade_pattern); + + pat = cairo_pattern_create_for_surface (surface); + + cairo_destroy (tc); + cairo_surface_destroy (surface); + } + + if (horiz) { + cairo_surface_t* surface; + cairo_t* tc = 0; + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, height, width); + tc = cairo_create (surface); + + cairo_matrix_t m; + cairo_matrix_init_rotate (&m, -M_PI/2.0); + cairo_matrix_translate (&m, -height, 0); + cairo_pattern_set_matrix (pat, &m); + cairo_set_source (tc, pat); + cairo_rectangle (tc, 0, 0, height, width); + cairo_fill (tc); + cairo_pattern_destroy (pat); + pat = cairo_pattern_create_for_surface (surface); + cairo_destroy (tc); + cairo_surface_destroy (surface); + } + + Cairo::RefPtr<Cairo::Pattern> p (new Cairo::Pattern (pat, false)); + + return p; +} + +Cairo::RefPtr<Cairo::Pattern> +FastMeter::request_vertical_meter( + int width, int height, int *clr, float *stp, int styleflags) +{ + height = max(height, min_pattern_metric_size); + height = min(height, max_pattern_metric_size); + + const Pattern10MapKey key (width, height, + stp[0], stp[1], stp[2], stp[3], + clr[0], clr[1], clr[2], clr[3], + clr[4], clr[5], clr[6], clr[7], + clr[8], clr[9], styleflags); + + Pattern10Map::iterator i; + if ((i = vm_pattern_cache.find (key)) != vm_pattern_cache.end()) { + return i->second; + } + // TODO flush pattern cache if it gets too large + + Cairo::RefPtr<Cairo::Pattern> p = generate_meter_pattern ( + width, height, clr, stp, styleflags, false); + vm_pattern_cache[key] = p; + + return p; +} + +Cairo::RefPtr<Cairo::Pattern> +FastMeter::request_vertical_background( + int width, int height, int *bgc, bool /*shade */) +{ + height = max(height, min_pattern_metric_size); + height = min(height, max_pattern_metric_size); + height += 2; + + const PatternBgMapKey key (width, height, bgc[0], bgc[1], false); + PatternBgMap::iterator i; + if ((i = vb_pattern_cache.find (key)) != vb_pattern_cache.end()) { + return i->second; + } + // TODO flush pattern cache if it gets too large + + Cairo::RefPtr<Cairo::Pattern> p = generate_meter_background ( + width, height, bgc, false, false); + vb_pattern_cache[key] = p; + + return p; +} + +Cairo::RefPtr<Cairo::Pattern> +FastMeter::request_horizontal_meter( + int width, int height, int *clr, float *stp, int styleflags) +{ + width = max(width, min_pattern_metric_size); + width = min(width, max_pattern_metric_size); + + const Pattern10MapKey key (width, height, + stp[0], stp[1], stp[2], stp[3], + clr[0], clr[1], clr[2], clr[3], + clr[4], clr[5], clr[6], clr[7], + clr[8], clr[9], styleflags); + + Pattern10Map::iterator i; + if ((i = hm_pattern_cache.find (key)) != hm_pattern_cache.end()) { + return i->second; + } + // TODO flush pattern cache if it gets too large + + Cairo::RefPtr<Cairo::Pattern> p = generate_meter_pattern ( + height, width, clr, stp, styleflags, true); + + hm_pattern_cache[key] = p; + return p; +} + +Cairo::RefPtr<Cairo::Pattern> +FastMeter::request_horizontal_background( + int width, int height, int *bgc, bool /* shade */) +{ + width = max(width, min_pattern_metric_size); + width = min(width, max_pattern_metric_size); + width += 2; + + const PatternBgMapKey key (width, height, bgc[0], bgc[1], false); + PatternBgMap::iterator i; + if ((i = hb_pattern_cache.find (key)) != hb_pattern_cache.end()) { + return i->second; + } + // TODO flush pattern cache if it gets too large + + Cairo::RefPtr<Cairo::Pattern> p = generate_meter_background ( + height, width, bgc, false, true); + + hb_pattern_cache[key] = p; + + return p; +} + + + +void +FastMeter::set_hold_count (long val) +{ + if (val < 1) { + val = 1; + } + + hold_cnt = val; + hold_state = 0; + current_peak = 0; + + queue_draw (); +} + +void +FastMeter::on_size_request (GtkRequisition* req) +{ + if (orientation == Vertical) { + vertical_size_request (req); + } else { + horizontal_size_request (req); + } +} + +void +FastMeter::vertical_size_request (GtkRequisition* req) +{ + req->height = request_height; + req->height = max(req->height, min_pattern_metric_size); + req->height = min(req->height, max_pattern_metric_size); + req->height += 2; + + req->width = request_width; +} + +void +FastMeter::horizontal_size_request (GtkRequisition* req) +{ + req->width = request_width; + req->width = max(req->width, min_pattern_metric_size); + req->width = min(req->width, max_pattern_metric_size); + req->width += 2; + + req->height = request_height; +} + +void +FastMeter::on_size_allocate (Gtk::Allocation &alloc) +{ + if (orientation == Vertical) { + vertical_size_allocate (alloc); + } else { + horizontal_size_allocate (alloc); + } + queue_draw (); +} + +void +FastMeter::vertical_size_allocate (Gtk::Allocation &alloc) +{ + if (alloc.get_width() != request_width) { + alloc.set_width (request_width); + } + + int h = alloc.get_height(); + h = max (h, min_pattern_metric_size + 2); + h = min (h, max_pattern_metric_size + 2); + + if (h != alloc.get_height()) { + alloc.set_height (h); + } + + if (pixheight != h) { + fgpattern = request_vertical_meter (request_width, h, _clr, _stp, _styleflags); + bgpattern = request_vertical_background (request_width, h, highlight ? _bgh : _bgc, false); + pixheight = h; + pixwidth = request_width; + } + + CairoWidget::on_size_allocate (alloc); +} + +void +FastMeter::horizontal_size_allocate (Gtk::Allocation &alloc) +{ + if (alloc.get_height() != request_height) { + alloc.set_height (request_height); + } + + int w = alloc.get_width(); + w = max (w, min_pattern_metric_size + 2); + w = min (w, max_pattern_metric_size + 2); + + if (w != alloc.get_width()) { + alloc.set_width (w); + } + + if (pixwidth != w) { + fgpattern = request_horizontal_meter (w, request_height, _clr, _stp, _styleflags); + bgpattern = request_horizontal_background (w, request_height, highlight ? _bgh : _bgc, false); + pixwidth = w; + pixheight = request_height; + } + + CairoWidget::on_size_allocate (alloc); +} + +void +FastMeter::render (cairo_t* cr, cairo_rectangle_t* area) +{ + if (orientation == Vertical) { + return vertical_expose (cr, area); + } else { + return horizontal_expose (cr, area); + } +} + +void +FastMeter::vertical_expose (cairo_t* cr, cairo_rectangle_t* area) +{ + gint top_of_meter; + // GdkRectangle background; + // GdkRectangle eventarea; + + //cairo_set_source_rgb (cr, 0, 0, 0); // black + //rounded_rectangle (cr, 0, 0, pixwidth + 2, pixheight + 2, 2); + //cairo_stroke (cr); + + top_of_meter = (gint) floor (pixheight * current_level); + + /* reset the height & origin of the rect that needs to show the pixbuf + */ + + pixrect.height = top_of_meter; + pixrect.y = pixheight - top_of_meter; + + // background.x = 0; + // background.y = 0; + // background.width = pixrect.width; + // background.height = pixheight - top_of_meter; + + // eventarea.x = area->x; + // eventarea.y = area->y; + // eventarea.width = area->width; + // eventarea.height = area->height; + + // Switching to CAIRO we would like to draw on the container's bkg. + // if (gdk_rectangle_intersect (&background, &eventarea, &intersection)) { + // cairo_set_source (cr, bgpattern->cobj()); + // cairo_rectangle (cr, intersection.x, intersection.y, intersection.width, intersection.height); + // cairo_fill (cr); + // } + + // MEMO: Normaly MATURE OS clips so called invalidated rects itself making APP free of + // heavy operations which OS does with graphic HW + + // NOTE FROM PAUL: GTK does clip already. The invalidated rect isn't the only area + // we want to clip to however, which is why this object/class is called FastMeter. + // I have left stuff commented out as I found it when I merged from Ardour in August 2014, + // but this commenting and the previous MEMO comment represent a misunderstanding + // of what this code is doing. + + // if (gdk_rectangle_intersect (&pixrect, &eventarea, &intersection)) { + // draw the part of the meter image that we need. the area we draw is bounded "in reverse" (top->bottom) + //cairo_set_source (cr, fgpattern->cobj()); + cairo_set_source_rgba (cr, 0.69, 0.69, 0.69, 1); + cairo_rectangle (cr, pixrect.x, pixrect.y, pixrect.width, pixrect.height); + cairo_fill (cr); + //} + + // draw peak bar + + if (hold_state) { + last_peak_rect.x = 0; + last_peak_rect.width = pixwidth; + last_peak_rect.y = max(0, pixheight - (gint) floor (pixheight * current_peak)); + if (bright_hold || (_styleflags & 2)) { + last_peak_rect.height = max(0, min(3, pixheight - last_peak_rect.y )); + } else { + last_peak_rect.height = max(0, min(2, pixheight - last_peak_rect.y )); + } + + cairo_set_source (cr, fgpattern->cobj()); + cairo_rectangle (cr, last_peak_rect.x, last_peak_rect.y, last_peak_rect.width, last_peak_rect.height); + + if (bright_hold && !no_rgba_overlay) { + cairo_fill_preserve (cr); + cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.3); + } + cairo_fill (cr); + + } else { + last_peak_rect.width = 0; + last_peak_rect.height = 0; + } +} + +void +FastMeter::horizontal_expose (cairo_t* cr, cairo_rectangle_t* area) +{ + gint right_of_meter; + + //cairo_set_source_rgb (cr, 0, 0, 0); // black + //rounded_rectangle (cr, 0, 0, pixwidth + 2, pixheight + 2, 2); + //cairo_stroke (cr); + + right_of_meter = (gint) floor (pixwidth * current_level); + + /* reset the height & origin of the rect that needs to show the pixbuf + */ + + pixrect.width = right_of_meter; + + // draw peak bar + + if (hold_state) { + last_peak_rect.y = 1; + last_peak_rect.height = pixheight; + const int xpos = floor (pixwidth * current_peak); + if (bright_hold || (_styleflags & 2)) { + last_peak_rect.width = min(3, xpos ); + } else { + last_peak_rect.width = min(2, xpos ); + } + last_peak_rect.x = 1 + max(0, xpos - last_peak_rect.width); + + cairo_set_source (cr, fgpattern->cobj()); + cairo_rectangle (cr, last_peak_rect.x, last_peak_rect.y, last_peak_rect.width, last_peak_rect.height); + + if (bright_hold && !no_rgba_overlay) { + cairo_fill_preserve (cr); + cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.3); + } + cairo_fill (cr); + + } else { + last_peak_rect.width = 0; + last_peak_rect.height = 0; + } +} + +void +FastMeter::set (float lvl, float peak) +{ + float old_level = current_level; + float old_peak = current_peak; + + if (pixwidth <= 0 || pixheight <=0) return; + + if (peak == -1) { + if (lvl >= current_peak) { + current_peak = lvl; + hold_state = hold_cnt; + } + + if (hold_state > 0) { + if (--hold_state == 0) { + current_peak = lvl; + } + } + bright_hold = false; + } else { + current_peak = peak; + hold_state = 1; + bright_hold = true; + } + + current_level = lvl; + + if (current_level == old_level && current_peak == old_peak && (hold_state == 0 || peak != -1)) { + return; + } + + Glib::RefPtr<Gdk::Window> win; + + if ((win = get_window()) == 0) { + queue_draw (); + return; + } + + if (orientation == Vertical) { + queue_vertical_redraw (win, old_level); + } else { + queue_horizontal_redraw (win, old_level); + } +} + +void +FastMeter::queue_vertical_redraw (const Glib::RefPtr<Gdk::Window>& win, float old_level) +{ + GdkRectangle rect; + + gint new_top = (gint) floor (pixheight * current_level); + + rect.x = 0; + rect.width = pixwidth; + rect.height = new_top; + rect.y = pixheight - new_top; + + if (current_level > old_level) { + /* colored/pixbuf got larger, just draw the new section */ + /* rect.y stays where it is because of X coordinates */ + /* height of invalidated area is between new.y (smaller) and old.y + (larger). + X coordinates just make my brain hurt. + */ + rect.height = pixrect.y - rect.y; + } else { + /* it got smaller, compute the difference */ + /* rect.y becomes old.y (the smaller value) */ + rect.y = pixrect.y; + /* rect.height is the old.y (smaller) minus the new.y (larger) + */ + rect.height = pixrect.height - rect.height; + } + + GdkRegion* region = 0; + bool queue = false; + + if (rect.height != 0) { + + /* ok, first region to draw ... */ + + region = gdk_region_rectangle (&rect); + queue = true; + } + + /* redraw the last place where the last peak hold bar was; + the next expose will draw the new one whether its part of + expose region or not. + */ + + if (last_peak_rect.width * last_peak_rect.height != 0) { + if (!queue) { + region = gdk_region_new (); + queue = true; + } + gdk_region_union_with_rect (region, &last_peak_rect); + } + + if (hold_state && current_peak > 0) { + if (!queue) { + region = gdk_region_new (); + queue = true; + } + rect.x = 1; + rect.y = max(1, 1 + pixheight - (gint) floor (pixheight * current_peak)); + if (bright_hold || (_styleflags & 2)) { + rect.height = max(0, min(3, pixheight - last_peak_rect.y -1 )); + } else { + rect.height = max(0, min(2, pixheight - last_peak_rect.y -1 )); + } + rect.width = pixwidth; + gdk_region_union_with_rect (region, &rect); + } + + if (queue) { + gdk_window_invalidate_region (win->gobj(), region, true); + } + if (region) { + gdk_region_destroy(region); + region = 0; + } +} + +void +FastMeter::queue_horizontal_redraw (const Glib::RefPtr<Gdk::Window>& win, float old_level) +{ + GdkRectangle rect; + + gint new_right = (gint) floor (pixwidth * current_level); + + rect.height = pixheight; + rect.y = 1; + + if (current_level > old_level) { + rect.x = 1 + pixrect.width; + /* colored/pixbuf got larger, just draw the new section */ + rect.width = new_right - pixrect.width; + } else { + /* it got smaller, compute the difference */ + rect.x = 1 + new_right; + /* rect.height is the old.x (smaller) minus the new.x (larger) */ + rect.width = pixrect.width - new_right; + } + + GdkRegion* region = 0; + bool queue = false; + + if (rect.height != 0) { + + /* ok, first region to draw ... */ + + region = gdk_region_rectangle (&rect); + queue = true; + } + + /* redraw the last place where the last peak hold bar was; + the next expose will draw the new one whether its part of + expose region or not. + */ + + if (last_peak_rect.width * last_peak_rect.height != 0) { + if (!queue) { + region = gdk_region_new (); + queue = true; + } + gdk_region_union_with_rect (region, &last_peak_rect); + } + + if (hold_state && current_peak > 0) { + if (!queue) { + region = gdk_region_new (); + queue = true; + } + rect.y = 1; + rect.height = pixheight; + const int xpos = floor (pixwidth * current_peak); + if (bright_hold || (_styleflags & 2)) { + rect.width = min(3, xpos); + } else { + rect.width = min(2, xpos); + } + rect.x = 1 + max(0, xpos - rect.width); + gdk_region_union_with_rect (region, &rect); + } + + if (queue) { + gdk_window_invalidate_region (win->gobj(), region, true); + } + if (region) { + gdk_region_destroy(region); + region = 0; + } +} + +void +FastMeter::set_highlight (bool onoff) +{ + if (highlight == onoff) { + return; + } + highlight = onoff; + if (orientation == Vertical) { + bgpattern = request_vertical_background (pixwidth + 2, pixheight + 2, highlight ? _bgh : _bgc, false); + } else { + bgpattern = request_horizontal_background (pixwidth + 2, pixheight + 2, highlight ? _bgh : _bgc, false); + } + queue_draw (); +} + +void +FastMeter::clear () +{ + current_level = 0; + current_peak = 0; + hold_state = 0; + queue_draw (); +} diff --git a/libs/gtkmm2ext/wscript b/libs/gtkmm2ext/wscript index bbe4ae535e..b7545c33c5 100644 --- a/libs/gtkmm2ext/wscript +++ b/libs/gtkmm2ext/wscript @@ -41,7 +41,6 @@ gtkmm2ext_sources = [ 'debug.cc', 'dndtreeview.cc', 'emscale.cc', - 'fastmeter.cc', 'focus_entry.cc', 'grouped_buttons.cc', 'gtk_ui.cc', @@ -85,12 +84,18 @@ def configure(conf): def build(bld): + sources = gtkmm2ext_sources + if bld.is_tracks_build(): + sources += [ 'waves_fastmeter.cc', 'fader.cc' ] + else: + sources += [ 'fastmeter.cc' ] + if bld.is_defined ('INTERNAL_SHARED_LIBS'): - obj = bld.shlib(features = 'c cxx cshlib cxxshlib', source=gtkmm2ext_sources) + obj = bld.shlib(features = 'c cxx cshlib cxxshlib', source=sources) # defines for this library obj.defines = [ 'LIBGTKMM2EXT_DLL_EXPORTS', 'ABSTRACT_UI_EXPORTS' ] else: - obj = bld.stlib(features = 'c cxx cstlib cxxstlib', source=gtkmm2ext_sources) + obj = bld.stlib(features = 'c cxx cstlib cxxstlib', source=sources) obj.cxxflags = [ '-fPIC' ] obj.defines = [ ] @@ -99,7 +104,7 @@ def build(bld): obj.name = 'libgtkmm2ext' obj.target = 'gtkmm2ext' obj.uselib = 'GTKMM GTK GTKOSX OSX GDK' - obj.use = [ 'libpbd' ] + obj.use = [ 'libpbd', 'libardour' ] obj.vnum = GTKMM2EXT_LIB_VERSION obj.install_path = bld.env['LIBDIR'] obj.defines += [ diff --git a/libs/midi++2/macosx/midi++.xcodeproj/midi++.xcodeproj/project.pbxproj b/libs/midi++2/macosx/midi++.xcodeproj/midi++.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..49896b11a3 --- /dev/null +++ b/libs/midi++2/macosx/midi++.xcodeproj/midi++.xcodeproj/project.pbxproj @@ -0,0 +1,498 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 696149880B97CED200ECBDF0 /* glib in Frameworks */ = {isa = PBXBuildFile; fileRef = 696149840B97CED200ECBDF0 /* glib */; }; + 696149890B97CED200ECBDF0 /* gmodule in Frameworks */ = {isa = PBXBuildFile; fileRef = 696149850B97CED200ECBDF0 /* gmodule */; }; + 6961498A0B97CED200ECBDF0 /* gobject in Frameworks */ = {isa = PBXBuildFile; fileRef = 696149860B97CED200ECBDF0 /* gobject */; }; + 6961498B0B97CED200ECBDF0 /* gthread in Frameworks */ = {isa = PBXBuildFile; fileRef = 696149870B97CED200ECBDF0 /* gthread */; }; + 69A0E07A0B8A3B1200A24967 /* coremidi_midiport.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69A0E05C0B8A3B1200A24967 /* coremidi_midiport.cc */; }; + 69A0E07B0B8A3B1200A24967 /* fd_midiport.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69A0E05D0B8A3B1200A24967 /* fd_midiport.cc */; }; + 69A0E07C0B8A3B1200A24967 /* fifomidi.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69A0E05E0B8A3B1200A24967 /* fifomidi.cc */; }; + 69A0E0800B8A3B1200A24967 /* channel.h in Headers */ = {isa = PBXBuildFile; fileRef = 69A0E0630B8A3B1200A24967 /* channel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69A0E0810B8A3B1200A24967 /* coremidi_midiport.h in Headers */ = {isa = PBXBuildFile; fileRef = 69A0E0640B8A3B1200A24967 /* coremidi_midiport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69A0E0820B8A3B1200A24967 /* factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 69A0E0650B8A3B1200A24967 /* factory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69A0E0830B8A3B1200A24967 /* fd_midiport.h in Headers */ = {isa = PBXBuildFile; fileRef = 69A0E0660B8A3B1200A24967 /* fd_midiport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69A0E0840B8A3B1200A24967 /* fifomidi.h in Headers */ = {isa = PBXBuildFile; fileRef = 69A0E0670B8A3B1200A24967 /* fifomidi.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69A0E0850B8A3B1200A24967 /* manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 69A0E0680B8A3B1200A24967 /* manager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69A0E0860B8A3B1200A24967 /* mmc.h in Headers */ = {isa = PBXBuildFile; fileRef = 69A0E0690B8A3B1200A24967 /* mmc.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69A0E0870B8A3B1200A24967 /* nullmidi.h in Headers */ = {isa = PBXBuildFile; fileRef = 69A0E06A0B8A3B1200A24967 /* nullmidi.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69A0E0880B8A3B1200A24967 /* parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 69A0E06B0B8A3B1200A24967 /* parser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69A0E0890B8A3B1200A24967 /* port.h in Headers */ = {isa = PBXBuildFile; fileRef = 69A0E06C0B8A3B1200A24967 /* port.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69A0E08A0B8A3B1200A24967 /* port_request.h in Headers */ = {isa = PBXBuildFile; fileRef = 69A0E06D0B8A3B1200A24967 /* port_request.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69A0E08B0B8A3B1200A24967 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 69A0E06E0B8A3B1200A24967 /* types.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69A0E08C0B8A3B1200A24967 /* midi.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69A0E06F0B8A3B1200A24967 /* midi.cc */; }; + 69A0E08D0B8A3B1200A24967 /* midichannel.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69A0E0700B8A3B1200A24967 /* midichannel.cc */; }; + 69A0E08E0B8A3B1200A24967 /* midifactory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69A0E0710B8A3B1200A24967 /* midifactory.cc */; }; + 69A0E08F0B8A3B1200A24967 /* midimanager.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69A0E0720B8A3B1200A24967 /* midimanager.cc */; }; + 69A0E0900B8A3B1200A24967 /* midiparser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69A0E0730B8A3B1200A24967 /* midiparser.cc */; }; + 69A0E0910B8A3B1200A24967 /* midiport.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69A0E0740B8A3B1200A24967 /* midiport.cc */; }; + 69A0E0930B8A3B1200A24967 /* mmc.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69A0E0760B8A3B1200A24967 /* mmc.cc */; }; + 69A0E0950B8A3B1200A24967 /* mtc.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69A0E0780B8A3B1200A24967 /* mtc.cc */; }; + 69A0E0960B8A3B1200A24967 /* port_request.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69A0E0790B8A3B1200A24967 /* port_request.cc */; }; + 69A0E09E0B8A3B6300A24967 /* sigc.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69A0E09C0B8A3B6300A24967 /* sigc.framework */; }; + 69A0E0B00B8A3BEF00A24967 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69A0E0AF0B8A3BEF00A24967 /* CoreMIDI.framework */; }; + 69A0E0B50B8A3C0B00A24967 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69A0E0B40B8A3C0B00A24967 /* CoreFoundation.framework */; }; + 69A0E0BA0B8A3C2000A24967 /* glibmm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69A0E0B90B8A3C2000A24967 /* glibmm.framework */; }; + 69C63C4C0B936ACF00BC0BCA /* version.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69C63C4A0B936ACF00BC0BCA /* version.cc */; }; + 69C63C4D0B936ACF00BC0BCA /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 69C63C4B0B936ACF00BC0BCA /* version.h */; }; + 69D5F6010B8D55B100301E71 /* pbd.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69D5F6000B8D55A000301E71 /* pbd.framework */; }; + 8D07F2BE0486CC7A007CD1D0 /* midi++_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = 32BAE0B70371A74B00C91783 /* midi++_Prefix.pch */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D07F2C00486CC7A007CD1D0 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 69D5F5FF0B8D55A000301E71 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69D5F5FB0B8D55A000301E71 /* pbd.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8D07F2C80486CC7A007CD1D0; + remoteInfo = pbd; + }; + 69D5F6060B8D570800301E71 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 69D5F5FB0B8D55A000301E71 /* pbd.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = 8D07F2BC0486CC7A007CD1D0; + remoteInfo = pbd; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; + 32BAE0B70371A74B00C91783 /* midi++_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "midi++_Prefix.pch"; sourceTree = "<group>"; }; + 696149840B97CED200ECBDF0 /* glib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = glib; path = /Library/Frameworks/GLib.framework/Versions/2.12.3/Libraries/glib; sourceTree = "<absolute>"; }; + 696149850B97CED200ECBDF0 /* gmodule */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = gmodule; path = /Library/Frameworks/GLib.framework/Versions/2.12.3/Libraries/gmodule; sourceTree = "<absolute>"; }; + 696149860B97CED200ECBDF0 /* gobject */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = gobject; path = /Library/Frameworks/GLib.framework/Versions/2.12.3/Libraries/gobject; sourceTree = "<absolute>"; }; + 696149870B97CED200ECBDF0 /* gthread */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = gthread; path = /Library/Frameworks/GLib.framework/Versions/2.12.3/Libraries/gthread; sourceTree = "<absolute>"; }; + 69A0E05C0B8A3B1200A24967 /* coremidi_midiport.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = coremidi_midiport.cc; path = ../coremidi_midiport.cc; sourceTree = SOURCE_ROOT; }; + 69A0E05D0B8A3B1200A24967 /* fd_midiport.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = fd_midiport.cc; path = ../fd_midiport.cc; sourceTree = SOURCE_ROOT; }; + 69A0E05E0B8A3B1200A24967 /* fifomidi.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = fifomidi.cc; path = ../fifomidi.cc; sourceTree = SOURCE_ROOT; }; + 69A0E0630B8A3B1200A24967 /* channel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = channel.h; sourceTree = "<group>"; }; + 69A0E0640B8A3B1200A24967 /* coremidi_midiport.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = coremidi_midiport.h; sourceTree = "<group>"; }; + 69A0E0650B8A3B1200A24967 /* factory.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = factory.h; sourceTree = "<group>"; }; + 69A0E0660B8A3B1200A24967 /* fd_midiport.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = fd_midiport.h; sourceTree = "<group>"; }; + 69A0E0670B8A3B1200A24967 /* fifomidi.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = fifomidi.h; sourceTree = "<group>"; }; + 69A0E0680B8A3B1200A24967 /* manager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = manager.h; sourceTree = "<group>"; }; + 69A0E0690B8A3B1200A24967 /* mmc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = mmc.h; sourceTree = "<group>"; }; + 69A0E06A0B8A3B1200A24967 /* nullmidi.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = nullmidi.h; sourceTree = "<group>"; }; + 69A0E06B0B8A3B1200A24967 /* parser.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = parser.h; sourceTree = "<group>"; }; + 69A0E06C0B8A3B1200A24967 /* port.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = port.h; sourceTree = "<group>"; }; + 69A0E06D0B8A3B1200A24967 /* port_request.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = port_request.h; sourceTree = "<group>"; }; + 69A0E06E0B8A3B1200A24967 /* types.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; }; + 69A0E06F0B8A3B1200A24967 /* midi.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = midi.cc; path = ../midi.cc; sourceTree = SOURCE_ROOT; }; + 69A0E0700B8A3B1200A24967 /* midichannel.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = midichannel.cc; path = ../midichannel.cc; sourceTree = SOURCE_ROOT; }; + 69A0E0710B8A3B1200A24967 /* midifactory.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = midifactory.cc; path = ../midifactory.cc; sourceTree = SOURCE_ROOT; }; + 69A0E0720B8A3B1200A24967 /* midimanager.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = midimanager.cc; path = ../midimanager.cc; sourceTree = SOURCE_ROOT; }; + 69A0E0730B8A3B1200A24967 /* midiparser.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = midiparser.cc; path = ../midiparser.cc; sourceTree = SOURCE_ROOT; }; + 69A0E0740B8A3B1200A24967 /* midiport.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = midiport.cc; path = ../midiport.cc; sourceTree = SOURCE_ROOT; }; + 69A0E0760B8A3B1200A24967 /* mmc.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = mmc.cc; path = ../mmc.cc; sourceTree = SOURCE_ROOT; }; + 69A0E0780B8A3B1200A24967 /* mtc.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = mtc.cc; path = ../mtc.cc; sourceTree = SOURCE_ROOT; }; + 69A0E0790B8A3B1200A24967 /* port_request.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = port_request.cc; path = ../port_request.cc; sourceTree = SOURCE_ROOT; }; + 69A0E09C0B8A3B6300A24967 /* sigc.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = sigc.framework; path = /Library/Frameworks/sigc.framework; sourceTree = "<absolute>"; }; + 69A0E0AF0B8A3BEF00A24967 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = /System/Library/Frameworks/CoreMIDI.framework; sourceTree = "<absolute>"; }; + 69A0E0B40B8A3C0B00A24967 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; }; + 69A0E0B90B8A3C2000A24967 /* glibmm.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = glibmm.framework; path = /Library/Frameworks/glibmm.framework; sourceTree = "<absolute>"; }; + 69C63C4A0B936ACF00BC0BCA /* version.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = version.cc; sourceTree = "<group>"; }; + 69C63C4B0B936ACF00BC0BCA /* version.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; }; + 69D5F5FB0B8D55A000301E71 /* pbd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = pbd.xcodeproj; path = ../../pbd/macosx/pbd.xcodeproj; sourceTree = SOURCE_ROOT; }; + 8D07F2C70486CC7A007CD1D0 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; }; + 8D07F2C80486CC7A007CD1D0 /* midi++.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = "midi++.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D07F2C30486CC7A007CD1D0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 69D5F6010B8D55B100301E71 /* pbd.framework in Frameworks */, + 69A0E09E0B8A3B6300A24967 /* sigc.framework in Frameworks */, + 69A0E0B00B8A3BEF00A24967 /* CoreMIDI.framework in Frameworks */, + 69A0E0B50B8A3C0B00A24967 /* CoreFoundation.framework in Frameworks */, + 69A0E0BA0B8A3C2000A24967 /* glibmm.framework in Frameworks */, + 696149880B97CED200ECBDF0 /* glib in Frameworks */, + 696149890B97CED200ECBDF0 /* gmodule in Frameworks */, + 6961498A0B97CED200ECBDF0 /* gobject in Frameworks */, + 6961498B0B97CED200ECBDF0 /* gthread in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 034768DDFF38A45A11DB9C8B /* Products */ = { + isa = PBXGroup; + children = ( + 8D07F2C80486CC7A007CD1D0 /* midi++.framework */, + ); + name = Products; + sourceTree = "<group>"; + }; + 0867D691FE84028FC02AAC07 /* midi++ */ = { + isa = PBXGroup; + children = ( + 69C63C4A0B936ACF00BC0BCA /* version.cc */, + 69C63C4B0B936ACF00BC0BCA /* version.h */, + 08FB77ACFE841707C02AAC07 /* Source */, + 089C1665FE841158C02AAC07 /* Resources */, + 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, + 034768DDFF38A45A11DB9C8B /* Products */, + ); + name = "midi++"; + sourceTree = "<group>"; + }; + 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 696149840B97CED200ECBDF0 /* glib */, + 696149850B97CED200ECBDF0 /* gmodule */, + 696149860B97CED200ECBDF0 /* gobject */, + 696149870B97CED200ECBDF0 /* gthread */, + 69D5F5FB0B8D55A000301E71 /* pbd.xcodeproj */, + 69A0E0B90B8A3C2000A24967 /* glibmm.framework */, + 69A0E0B40B8A3C0B00A24967 /* CoreFoundation.framework */, + 69A0E0AF0B8A3BEF00A24967 /* CoreMIDI.framework */, + 69A0E09C0B8A3B6300A24967 /* sigc.framework */, + ); + name = "External Frameworks and Libraries"; + sourceTree = "<group>"; + }; + 089C1665FE841158C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8D07F2C70486CC7A007CD1D0 /* Info.plist */, + 089C1666FE841158C02AAC07 /* InfoPlist.strings */, + ); + name = Resources; + sourceTree = "<group>"; + }; + 08FB77ACFE841707C02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + 69A0E05C0B8A3B1200A24967 /* coremidi_midiport.cc */, + 69A0E05D0B8A3B1200A24967 /* fd_midiport.cc */, + 69A0E05E0B8A3B1200A24967 /* fifomidi.cc */, + 69A0E05F0B8A3B1200A24967 /* midi++ */, + 69A0E06F0B8A3B1200A24967 /* midi.cc */, + 69A0E0700B8A3B1200A24967 /* midichannel.cc */, + 69A0E0710B8A3B1200A24967 /* midifactory.cc */, + 69A0E0720B8A3B1200A24967 /* midimanager.cc */, + 69A0E0730B8A3B1200A24967 /* midiparser.cc */, + 69A0E0740B8A3B1200A24967 /* midiport.cc */, + 69A0E0760B8A3B1200A24967 /* mmc.cc */, + 69A0E0780B8A3B1200A24967 /* mtc.cc */, + 69A0E0790B8A3B1200A24967 /* port_request.cc */, + 32BAE0B70371A74B00C91783 /* midi++_Prefix.pch */, + ); + name = Source; + sourceTree = "<group>"; + }; + 69A0E05F0B8A3B1200A24967 /* midi++ */ = { + isa = PBXGroup; + children = ( + 69A0E0630B8A3B1200A24967 /* channel.h */, + 69A0E0640B8A3B1200A24967 /* coremidi_midiport.h */, + 69A0E0650B8A3B1200A24967 /* factory.h */, + 69A0E0660B8A3B1200A24967 /* fd_midiport.h */, + 69A0E0670B8A3B1200A24967 /* fifomidi.h */, + 69A0E0680B8A3B1200A24967 /* manager.h */, + 69A0E0690B8A3B1200A24967 /* mmc.h */, + 69A0E06A0B8A3B1200A24967 /* nullmidi.h */, + 69A0E06B0B8A3B1200A24967 /* parser.h */, + 69A0E06C0B8A3B1200A24967 /* port.h */, + 69A0E06D0B8A3B1200A24967 /* port_request.h */, + 69A0E06E0B8A3B1200A24967 /* types.h */, + ); + name = "midi++"; + path = "../midi++"; + sourceTree = SOURCE_ROOT; + }; + 69D5F5FC0B8D55A000301E71 /* Products */ = { + isa = PBXGroup; + children = ( + 69D5F6000B8D55A000301E71 /* pbd.framework */, + ); + name = Products; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 8D07F2BD0486CC7A007CD1D0 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 69C63C4D0B936ACF00BC0BCA /* version.h in Headers */, + 8D07F2BE0486CC7A007CD1D0 /* midi++_Prefix.pch in Headers */, + 69A0E0800B8A3B1200A24967 /* channel.h in Headers */, + 69A0E0810B8A3B1200A24967 /* coremidi_midiport.h in Headers */, + 69A0E0820B8A3B1200A24967 /* factory.h in Headers */, + 69A0E0830B8A3B1200A24967 /* fd_midiport.h in Headers */, + 69A0E0840B8A3B1200A24967 /* fifomidi.h in Headers */, + 69A0E0850B8A3B1200A24967 /* manager.h in Headers */, + 69A0E0860B8A3B1200A24967 /* mmc.h in Headers */, + 69A0E0870B8A3B1200A24967 /* nullmidi.h in Headers */, + 69A0E0880B8A3B1200A24967 /* parser.h in Headers */, + 69A0E0890B8A3B1200A24967 /* port.h in Headers */, + 69A0E08A0B8A3B1200A24967 /* port_request.h in Headers */, + 69A0E08B0B8A3B1200A24967 /* types.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 8D07F2BC0486CC7A007CD1D0 /* midi++ */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "midi++" */; + buildPhases = ( + 8D07F2BD0486CC7A007CD1D0 /* Headers */, + 8D07F2BF0486CC7A007CD1D0 /* Resources */, + 8D07F2C10486CC7A007CD1D0 /* Sources */, + 8D07F2C30486CC7A007CD1D0 /* Frameworks */, + 8D07F2C50486CC7A007CD1D0 /* Rez */, + ); + buildRules = ( + ); + dependencies = ( + 69D5F6070B8D570800301E71 /* PBXTargetDependency */, + ); + name = "midi++"; + productInstallPath = "$(HOME)/Library/Frameworks"; + productName = "midi++"; + productReference = 8D07F2C80486CC7A007CD1D0 /* midi++.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0867D690FE84028FC02AAC07 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "midi++" */; + hasScannedForEncodings = 1; + mainGroup = 0867D691FE84028FC02AAC07 /* midi++ */; + productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 69D5F5FC0B8D55A000301E71 /* Products */; + ProjectRef = 69D5F5FB0B8D55A000301E71 /* pbd.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 8D07F2BC0486CC7A007CD1D0 /* midi++ */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 69D5F6000B8D55A000301E71 /* pbd.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = pbd.framework; + remoteRef = 69D5F5FF0B8D55A000301E71 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D07F2BF0486CC7A007CD1D0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D07F2C00486CC7A007CD1D0 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXRezBuildPhase section */ + 8D07F2C50486CC7A007CD1D0 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXRezBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D07F2C10486CC7A007CD1D0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 69C63C4C0B936ACF00BC0BCA /* version.cc in Sources */, + 69A0E07A0B8A3B1200A24967 /* coremidi_midiport.cc in Sources */, + 69A0E07B0B8A3B1200A24967 /* fd_midiport.cc in Sources */, + 69A0E07C0B8A3B1200A24967 /* fifomidi.cc in Sources */, + 69A0E08C0B8A3B1200A24967 /* midi.cc in Sources */, + 69A0E08D0B8A3B1200A24967 /* midichannel.cc in Sources */, + 69A0E08E0B8A3B1200A24967 /* midifactory.cc in Sources */, + 69A0E08F0B8A3B1200A24967 /* midimanager.cc in Sources */, + 69A0E0900B8A3B1200A24967 /* midiparser.cc in Sources */, + 69A0E0910B8A3B1200A24967 /* midiport.cc in Sources */, + 69A0E0930B8A3B1200A24967 /* mmc.cc in Sources */, + 69A0E0950B8A3B1200A24967 /* mtc.cc in Sources */, + 69A0E0960B8A3B1200A24967 /* port_request.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 69D5F6070B8D570800301E71 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = pbd; + targetProxy = 69D5F6060B8D570800301E71 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 089C1666FE841158C02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C1667FE841158C02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = "<group>"; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 4FADC24408B4156D00ABE55E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "midi++_Prefix.pch"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "@executable_path/../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/GLib.framework/Versions/2.12.3/Libraries\""; + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/GLib.framework/Versions/2.12.3/Libraries\""; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + PRODUCT_NAME = "midi++"; + WRAPPER_EXTENSION = framework; + }; + name = Release; + }; + 4FADC24808B4156D00ABE55E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = ( + "$(NATIVE_ARCH)", + ppc, + ); + DEAD_CODE_STRIPPING = YES; + FRAMEWORK_SEARCH_PATHS = /opt/ardour/build; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G4; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + /Library/Frameworks/GLib.framework/Headers, + /Library/Frameworks/sigc.framework/Headers, + ); + INSTALL_PATH = "@executable_path/../Frameworks"; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; + 694E7C660B97AD230018D03D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = /opt/ardour/build; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + /Library/Frameworks/GLib.framework/Headers, + /Library/Frameworks/sigc.framework/Headers, + ); + INSTALL_PATH = "@executable_path/../Frameworks"; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + STRIP_INSTALLED_PRODUCT = NO; + }; + name = Debug; + }; + 694E7C670B97AD230018D03D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = i386; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "midi++_Prefix.pch"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "@executable_path/../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", + ); + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/GLib.framework/Versions/2.12.3/Libraries\""; + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/GLib.framework/Versions/2.12.3/Libraries\""; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + PRODUCT_NAME = "midi++"; + WRAPPER_EXTENSION = framework; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "midi++" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FADC24408B4156D00ABE55E /* Release */, + 694E7C670B97AD230018D03D /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "midi++" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FADC24808B4156D00ABE55E /* Release */, + 694E7C660B97AD230018D03D /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 0867D690FE84028FC02AAC07 /* Project object */; +} diff --git a/libs/panners/1in2out/panner_1in2out.cc b/libs/panners/1in2out/panner_1in2out.cc index 2d5489f0ce..50c058b160 100644 --- a/libs/panners/1in2out/panner_1in2out.cc +++ b/libs/panners/1in2out/panner_1in2out.cc @@ -51,6 +51,7 @@ #include "ardour/buffer_set.h" #include "ardour/audio_buffer.h" #include "ardour/pannable.h" +#include "ardour/profile.h" #include "i18n.h" #include "panner_1in2out.h" @@ -75,8 +76,10 @@ extern "C" ARDOURPANNER_API PanPluginDescriptor* panner_descriptor () { return Panner1in2out::Panner1in2out (boost::shared_ptr<Pannable> p) : Panner (p) { - if (!_pannable->has_state()) { + if (!Profile->get_trx () ) { + if (!_pannable->has_state ()) { _pannable->pan_azimuth_control->set_value (0.5); + } } update (); diff --git a/libs/panners/wscript b/libs/panners/wscript index f3ce6e6f19..feedfa3074 100644 --- a/libs/panners/wscript +++ b/libs/panners/wscript @@ -1,14 +1,15 @@ #!/usr/bin/env python from waflib.extras import autowaf as autowaf +from waflib import Options import os # Mandatory variables top = '.' out = 'build' -panners = [ '2in2out', '1in2out', 'vbap', 'stereobalance' ] def options(opt): + autowaf.set_options(opt) def sub_config_and_use(conf, name, has_objects = True): @@ -19,9 +20,19 @@ def configure(conf): autowaf.set_recursive() autowaf.configure(conf) + if conf.is_tracks_build(): + panners = [ '1in2out', 'vbap', 'stereobalance' ] + else: + panners = [ '2in2out', '1in2out', 'vbap', 'stereobalance' ] + for i in panners: sub_config_and_use(conf, i) def build(bld): + if bld.is_tracks_build(): + panners = [ '1in2out', 'vbap', 'stereobalance' ] + else: + panners = [ '2in2out', '1in2out', 'vbap', 'stereobalance' ] + for i in panners: bld.recurse(i) diff --git a/libs/pbd/debug.cc b/libs/pbd/debug.cc index 25ebb64850..9150cd6883 100644 --- a/libs/pbd/debug.cc +++ b/libs/pbd/debug.cc @@ -54,6 +54,19 @@ DebugBits PBD::DEBUG::AbstractUI = PBD::new_debug_bit ("abstractui"); DebugBits PBD::DEBUG::FileUtils = PBD::new_debug_bit ("fileutils"); DebugBits PBD::DEBUG::Configuration = PBD::new_debug_bit ("configuration"); +/* These are debug bits that are used by backends. Since these are loaded dynamically, + after command-line parsing, defining them in code that is part of the backend + doesn't make them available for command line parsing. Put them here. + + This is sort of a hack, because it means that the debug bits aren't defined + with the code in which they are relevant. But providing access to debug bits + from dynamically loaded code, for use in command line parsing, is way above the pay grade + of this debug tracing scheme. +*/ + +DebugBits PBD::DEBUG::WavesMIDI = PBD::new_debug_bit ("WavesMIDI"); +DebugBits PBD::DEBUG::WavesAudio = PBD::new_debug_bit ("WavesAudio"); + DebugBits PBD::debug_bits; DebugBits diff --git a/libs/pbd/macosx/pbd.xcodeproj/pbd.xcodeproj/project.pbxproj b/libs/pbd/macosx/pbd.xcodeproj/pbd.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..8487e53c2a --- /dev/null +++ b/libs/pbd/macosx/pbd.xcodeproj/pbd.xcodeproj/project.pbxproj @@ -0,0 +1,649 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 43D8CBC91A6E6B0E00ABE168 /* signals.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43D8CBC71A6E6B0E00ABE168 /* signals.cc */; }; + 43D8CBCA1A6E6B0E00ABE168 /* signals.h in Headers */ = {isa = PBXBuildFile; fileRef = 43D8CBC81A6E6B0E00ABE168 /* signals.h */; }; + 6941206F0B8A34AB00AF661E /* base_ui.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120270B8A34AB00AF661E /* base_ui.cc */; }; + 694120700B8A34AB00AF661E /* basename.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120280B8A34AB00AF661E /* basename.cc */; }; + 694120710B8A34AB00AF661E /* command.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120290B8A34AB00AF661E /* command.cc */; }; + 694120720B8A34AB00AF661E /* controllable.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941202A0B8A34AB00AF661E /* controllable.cc */; }; + 694120730B8A34AB00AF661E /* convert.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941202B0B8A34AB00AF661E /* convert.cc */; }; + 694120740B8A34AB00AF661E /* copyfile.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941202C0B8A34AB00AF661E /* copyfile.cc */; }; + 694120750B8A34AB00AF661E /* dmalloc.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941202D0B8A34AB00AF661E /* dmalloc.cc */; }; + 694120760B8A34AB00AF661E /* enumwriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941202E0B8A34AB00AF661E /* enumwriter.cc */; }; + 694120770B8A34AB00AF661E /* error.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941202F0B8A34AB00AF661E /* error.cc */; }; + 694120780B8A34AB00AF661E /* gettext.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120300B8A34AB00AF661E /* gettext.h */; settings = {ATTRIBUTES = (); }; }; + 694120790B8A34AB00AF661E /* i18n.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120310B8A34AB00AF661E /* i18n.h */; settings = {ATTRIBUTES = (); }; }; + 6941207A0B8A34AB00AF661E /* id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120320B8A34AB00AF661E /* id.cc */; }; + 6941207B0B8A34AB00AF661E /* mountpoint.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120330B8A34AB00AF661E /* mountpoint.cc */; }; + 6941207C0B8A34AB00AF661E /* path.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120340B8A34AB00AF661E /* path.cc */; }; + 6941207D0B8A34AB00AF661E /* pathscanner.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120350B8A34AB00AF661E /* pathscanner.cc */; }; + 6941207F0B8A34AB00AF661E /* abstract_ui.cc in Headers */ = {isa = PBXBuildFile; fileRef = 694120380B8A34AB00AF661E /* abstract_ui.cc */; }; + 694120800B8A34AB00AF661E /* abstract_ui.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120390B8A34AB00AF661E /* abstract_ui.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120810B8A34AB00AF661E /* base_ui.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941203A0B8A34AB00AF661E /* base_ui.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120820B8A34AB00AF661E /* basename.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941203B0B8A34AB00AF661E /* basename.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120830B8A34AB00AF661E /* command.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941203C0B8A34AB00AF661E /* command.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120840B8A34AB00AF661E /* compose.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941203D0B8A34AB00AF661E /* compose.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120850B8A34AB00AF661E /* controllable.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941203E0B8A34AB00AF661E /* controllable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120860B8A34AB00AF661E /* convert.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941203F0B8A34AB00AF661E /* convert.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120870B8A34AB00AF661E /* copyfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120400B8A34AB00AF661E /* copyfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120880B8A34AB00AF661E /* crossthread.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120410B8A34AB00AF661E /* crossthread.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120890B8A34AB00AF661E /* destructible.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120420B8A34AB00AF661E /* destructible.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6941208A0B8A34AB00AF661E /* enumwriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120430B8A34AB00AF661E /* enumwriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6941208B0B8A34AB00AF661E /* error.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120440B8A34AB00AF661E /* error.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6941208C0B8A34AB00AF661E /* failed_constructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120450B8A34AB00AF661E /* failed_constructor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6941208D0B8A34AB00AF661E /* fastlog.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120460B8A34AB00AF661E /* fastlog.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6941208E0B8A34AB00AF661E /* forkexec.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120470B8A34AB00AF661E /* forkexec.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6941208F0B8A34AB00AF661E /* id.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120480B8A34AB00AF661E /* id.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120900B8A34AB00AF661E /* mathfix.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120490B8A34AB00AF661E /* mathfix.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120910B8A34AB00AF661E /* memento_command.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941204A0B8A34AB00AF661E /* memento_command.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120920B8A34AB00AF661E /* mountpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941204B0B8A34AB00AF661E /* mountpoint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120930B8A34AB00AF661E /* path.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941204C0B8A34AB00AF661E /* path.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120940B8A34AB00AF661E /* pathscanner.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941204D0B8A34AB00AF661E /* pathscanner.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120950B8A34AB00AF661E /* pool.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941204E0B8A34AB00AF661E /* pool.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120960B8A34AB00AF661E /* pthread_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941204F0B8A34AB00AF661E /* pthread_utils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120970B8A34AB00AF661E /* rcu.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120500B8A34AB00AF661E /* rcu.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120980B8A34AB00AF661E /* receiver.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120510B8A34AB00AF661E /* receiver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120990B8A34AB00AF661E /* ringbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120520B8A34AB00AF661E /* ringbuffer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6941209A0B8A34AB00AF661E /* ringbufferNPT.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120530B8A34AB00AF661E /* ringbufferNPT.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6941209B0B8A34AB00AF661E /* selectable.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120540B8A34AB00AF661E /* selectable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6941209C0B8A34AB00AF661E /* shiva.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120550B8A34AB00AF661E /* shiva.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6941209D0B8A34AB00AF661E /* stacktrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120560B8A34AB00AF661E /* stacktrace.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6941209E0B8A34AB00AF661E /* stateful.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120570B8A34AB00AF661E /* stateful.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6941209F0B8A34AB00AF661E /* statefuldestructible.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120580B8A34AB00AF661E /* statefuldestructible.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120A00B8A34AB00AF661E /* stl_delete.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120590B8A34AB00AF661E /* stl_delete.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120A10B8A34AB00AF661E /* stl_functors.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941205A0B8A34AB00AF661E /* stl_functors.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120A20B8A34AB00AF661E /* strsplit.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941205B0B8A34AB00AF661E /* strsplit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120A30B8A34AB00AF661E /* textreceiver.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941205C0B8A34AB00AF661E /* textreceiver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120A40B8A34AB00AF661E /* thrown_error.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941205D0B8A34AB00AF661E /* thrown_error.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120A50B8A34AB00AF661E /* tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941205E0B8A34AB00AF661E /* tokenizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120A60B8A34AB00AF661E /* touchable.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941205F0B8A34AB00AF661E /* touchable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120A70B8A34AB00AF661E /* transmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120600B8A34AB00AF661E /* transmitter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120A80B8A34AB00AF661E /* undo.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120610B8A34AB00AF661E /* undo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120A90B8A34AB00AF661E /* whitespace.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120620B8A34AB00AF661E /* whitespace.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120AA0B8A34AB00AF661E /* xml++.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120630B8A34AB00AF661E /* xml++.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 694120AB0B8A34AB00AF661E /* pool.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120640B8A34AB00AF661E /* pool.cc */; }; + 694120AC0B8A34AB00AF661E /* pthread_utils.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120650B8A34AB00AF661E /* pthread_utils.cc */; }; + 694120AD0B8A34AB00AF661E /* receiver.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120660B8A34AB00AF661E /* receiver.cc */; }; + 694120AE0B8A34AB00AF661E /* stacktrace.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120670B8A34AB00AF661E /* stacktrace.cc */; }; + 694120AF0B8A34AB00AF661E /* stateful.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120680B8A34AB00AF661E /* stateful.cc */; }; + 694120B00B8A34AB00AF661E /* strsplit.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120690B8A34AB00AF661E /* strsplit.cc */; }; + 694120B10B8A34AB00AF661E /* textreceiver.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941206A0B8A34AB00AF661E /* textreceiver.cc */; }; + 694120B20B8A34AB00AF661E /* transmitter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941206B0B8A34AB00AF661E /* transmitter.cc */; }; + 694120B30B8A34AB00AF661E /* undo.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941206C0B8A34AB00AF661E /* undo.cc */; }; + 694120B40B8A34AB00AF661E /* whitespace.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941206D0B8A34AB00AF661E /* whitespace.cc */; }; + 694120B50B8A34AB00AF661E /* xml++.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941206E0B8A34AB00AF661E /* xml++.cc */; }; + 694120D40B8A36A200AF661E /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 694120D30B8A36A200AF661E /* libxml2.dylib */; }; + 694191980B97CD950083505E /* glibmm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 694191950B97CD950083505E /* glibmm.framework */; }; + 694191990B97CD950083505E /* sigc.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 694191960B97CD950083505E /* sigc.framework */; }; + 69C63C150B9369CB00BC0BCA /* strreplace.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69C63C140B9369CB00BC0BCA /* strreplace.cc */; }; + 69C63C190B9369DE00BC0BCA /* replace_all.h in Headers */ = {isa = PBXBuildFile; fileRef = 69C63C180B9369DE00BC0BCA /* replace_all.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69C63C2B0B936A6E00BC0BCA /* version.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69C63C290B936A6E00BC0BCA /* version.cc */; }; + 69C63C2C0B936A6E00BC0BCA /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 69C63C2A0B936A6E00BC0BCA /* version.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69CD7FED0B97CDD50049ED98 /* glib in Frameworks */ = {isa = PBXBuildFile; fileRef = 69CD7FE90B97CDD50049ED98 /* glib */; }; + 69CD7FEE0B97CDD50049ED98 /* gmodule in Frameworks */ = {isa = PBXBuildFile; fileRef = 69CD7FEA0B97CDD50049ED98 /* gmodule */; }; + 69CD7FEF0B97CDD50049ED98 /* gobject in Frameworks */ = {isa = PBXBuildFile; fileRef = 69CD7FEB0B97CDD50049ED98 /* gobject */; }; + 69CD7FF00B97CDD50049ED98 /* gthread in Frameworks */ = {isa = PBXBuildFile; fileRef = 69CD7FEC0B97CDD50049ED98 /* gthread */; }; + 8D07F2BE0486CC7A007CD1D0 /* pbd_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = 32BAE0B70371A74B00C91783 /* pbd_Prefix.pch */; settings = {ATTRIBUTES = (); }; }; + 8D07F2C00486CC7A007CD1D0 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; + 32BAE0B70371A74B00C91783 /* pbd_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pbd_Prefix.pch; sourceTree = "<group>"; }; + 43D8CBC71A6E6B0E00ABE168 /* signals.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = signals.cc; path = ../signals.cc; sourceTree = "<group>"; }; + 43D8CBC81A6E6B0E00ABE168 /* signals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = signals.h; sourceTree = "<group>"; }; + 694120270B8A34AB00AF661E /* base_ui.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = base_ui.cc; path = ../base_ui.cc; sourceTree = SOURCE_ROOT; }; + 694120280B8A34AB00AF661E /* basename.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = basename.cc; path = ../basename.cc; sourceTree = SOURCE_ROOT; }; + 694120290B8A34AB00AF661E /* command.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = command.cc; path = ../command.cc; sourceTree = SOURCE_ROOT; }; + 6941202A0B8A34AB00AF661E /* controllable.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = controllable.cc; path = ../controllable.cc; sourceTree = SOURCE_ROOT; }; + 6941202B0B8A34AB00AF661E /* convert.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = convert.cc; path = ../convert.cc; sourceTree = SOURCE_ROOT; }; + 6941202C0B8A34AB00AF661E /* copyfile.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = copyfile.cc; path = ../copyfile.cc; sourceTree = SOURCE_ROOT; }; + 6941202D0B8A34AB00AF661E /* dmalloc.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = dmalloc.cc; path = ../dmalloc.cc; sourceTree = SOURCE_ROOT; }; + 6941202E0B8A34AB00AF661E /* enumwriter.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = enumwriter.cc; path = ../enumwriter.cc; sourceTree = SOURCE_ROOT; }; + 6941202F0B8A34AB00AF661E /* error.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = error.cc; path = ../error.cc; sourceTree = SOURCE_ROOT; }; + 694120300B8A34AB00AF661E /* gettext.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = gettext.h; path = ../gettext.h; sourceTree = SOURCE_ROOT; }; + 694120310B8A34AB00AF661E /* i18n.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = i18n.h; path = ../i18n.h; sourceTree = SOURCE_ROOT; }; + 694120320B8A34AB00AF661E /* id.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = id.cc; path = ../id.cc; sourceTree = SOURCE_ROOT; }; + 694120330B8A34AB00AF661E /* mountpoint.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = mountpoint.cc; path = ../mountpoint.cc; sourceTree = SOURCE_ROOT; }; + 694120340B8A34AB00AF661E /* path.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = path.cc; path = ../path.cc; sourceTree = SOURCE_ROOT; }; + 694120350B8A34AB00AF661E /* pathscanner.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = pathscanner.cc; path = ../pathscanner.cc; sourceTree = SOURCE_ROOT; }; + 694120380B8A34AB00AF661E /* abstract_ui.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = abstract_ui.cc; sourceTree = "<group>"; }; + 694120390B8A34AB00AF661E /* abstract_ui.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = abstract_ui.h; sourceTree = "<group>"; }; + 6941203A0B8A34AB00AF661E /* base_ui.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = base_ui.h; sourceTree = "<group>"; }; + 6941203B0B8A34AB00AF661E /* basename.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = basename.h; sourceTree = "<group>"; }; + 6941203C0B8A34AB00AF661E /* command.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = command.h; sourceTree = "<group>"; }; + 6941203D0B8A34AB00AF661E /* compose.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = compose.h; sourceTree = "<group>"; }; + 6941203E0B8A34AB00AF661E /* controllable.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = controllable.h; sourceTree = "<group>"; }; + 6941203F0B8A34AB00AF661E /* convert.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = convert.h; sourceTree = "<group>"; }; + 694120400B8A34AB00AF661E /* copyfile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = copyfile.h; sourceTree = "<group>"; }; + 694120410B8A34AB00AF661E /* crossthread.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = crossthread.h; sourceTree = "<group>"; }; + 694120420B8A34AB00AF661E /* destructible.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = destructible.h; sourceTree = "<group>"; }; + 694120430B8A34AB00AF661E /* enumwriter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = enumwriter.h; sourceTree = "<group>"; }; + 694120440B8A34AB00AF661E /* error.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = error.h; sourceTree = "<group>"; }; + 694120450B8A34AB00AF661E /* failed_constructor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = failed_constructor.h; sourceTree = "<group>"; }; + 694120460B8A34AB00AF661E /* fastlog.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = fastlog.h; sourceTree = "<group>"; }; + 694120470B8A34AB00AF661E /* forkexec.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = forkexec.h; sourceTree = "<group>"; }; + 694120480B8A34AB00AF661E /* id.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = id.h; sourceTree = "<group>"; }; + 694120490B8A34AB00AF661E /* mathfix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = mathfix.h; sourceTree = "<group>"; }; + 6941204A0B8A34AB00AF661E /* memento_command.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = memento_command.h; sourceTree = "<group>"; }; + 6941204B0B8A34AB00AF661E /* mountpoint.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = mountpoint.h; sourceTree = "<group>"; }; + 6941204C0B8A34AB00AF661E /* path.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = path.h; sourceTree = "<group>"; }; + 6941204D0B8A34AB00AF661E /* pathscanner.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = pathscanner.h; sourceTree = "<group>"; }; + 6941204E0B8A34AB00AF661E /* pool.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = pool.h; sourceTree = "<group>"; }; + 6941204F0B8A34AB00AF661E /* pthread_utils.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = pthread_utils.h; sourceTree = "<group>"; }; + 694120500B8A34AB00AF661E /* rcu.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = rcu.h; sourceTree = "<group>"; }; + 694120510B8A34AB00AF661E /* receiver.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = receiver.h; sourceTree = "<group>"; }; + 694120520B8A34AB00AF661E /* ringbuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ringbuffer.h; sourceTree = "<group>"; }; + 694120530B8A34AB00AF661E /* ringbufferNPT.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ringbufferNPT.h; sourceTree = "<group>"; }; + 694120540B8A34AB00AF661E /* selectable.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = selectable.h; sourceTree = "<group>"; }; + 694120550B8A34AB00AF661E /* shiva.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = shiva.h; sourceTree = "<group>"; }; + 694120560B8A34AB00AF661E /* stacktrace.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = stacktrace.h; sourceTree = "<group>"; }; + 694120570B8A34AB00AF661E /* stateful.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = stateful.h; sourceTree = "<group>"; }; + 694120580B8A34AB00AF661E /* statefuldestructible.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = statefuldestructible.h; sourceTree = "<group>"; }; + 694120590B8A34AB00AF661E /* stl_delete.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = stl_delete.h; sourceTree = "<group>"; }; + 6941205A0B8A34AB00AF661E /* stl_functors.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = stl_functors.h; sourceTree = "<group>"; }; + 6941205B0B8A34AB00AF661E /* strsplit.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = strsplit.h; sourceTree = "<group>"; }; + 6941205C0B8A34AB00AF661E /* textreceiver.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = textreceiver.h; sourceTree = "<group>"; }; + 6941205D0B8A34AB00AF661E /* thrown_error.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = thrown_error.h; sourceTree = "<group>"; }; + 6941205E0B8A34AB00AF661E /* tokenizer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = tokenizer.h; sourceTree = "<group>"; }; + 6941205F0B8A34AB00AF661E /* touchable.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = touchable.h; sourceTree = "<group>"; }; + 694120600B8A34AB00AF661E /* transmitter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = transmitter.h; sourceTree = "<group>"; }; + 694120610B8A34AB00AF661E /* undo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = undo.h; sourceTree = "<group>"; }; + 694120620B8A34AB00AF661E /* whitespace.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = whitespace.h; sourceTree = "<group>"; }; + 694120630B8A34AB00AF661E /* xml++.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = "xml++.h"; sourceTree = "<group>"; }; + 694120640B8A34AB00AF661E /* pool.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = pool.cc; path = ../pool.cc; sourceTree = SOURCE_ROOT; }; + 694120650B8A34AB00AF661E /* pthread_utils.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = pthread_utils.cc; path = ../pthread_utils.cc; sourceTree = SOURCE_ROOT; }; + 694120660B8A34AB00AF661E /* receiver.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = receiver.cc; path = ../receiver.cc; sourceTree = SOURCE_ROOT; }; + 694120670B8A34AB00AF661E /* stacktrace.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = stacktrace.cc; path = ../stacktrace.cc; sourceTree = SOURCE_ROOT; }; + 694120680B8A34AB00AF661E /* stateful.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = stateful.cc; path = ../stateful.cc; sourceTree = SOURCE_ROOT; }; + 694120690B8A34AB00AF661E /* strsplit.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = strsplit.cc; path = ../strsplit.cc; sourceTree = SOURCE_ROOT; }; + 6941206A0B8A34AB00AF661E /* textreceiver.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = textreceiver.cc; path = ../textreceiver.cc; sourceTree = SOURCE_ROOT; }; + 6941206B0B8A34AB00AF661E /* transmitter.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = transmitter.cc; path = ../transmitter.cc; sourceTree = SOURCE_ROOT; }; + 6941206C0B8A34AB00AF661E /* undo.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = undo.cc; path = ../undo.cc; sourceTree = SOURCE_ROOT; }; + 6941206D0B8A34AB00AF661E /* whitespace.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = whitespace.cc; path = ../whitespace.cc; sourceTree = SOURCE_ROOT; }; + 6941206E0B8A34AB00AF661E /* xml++.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = "xml++.cc"; path = "../xml++.cc"; sourceTree = SOURCE_ROOT; }; + 694120D30B8A36A200AF661E /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = /usr/lib/libxml2.dylib; sourceTree = "<absolute>"; }; + 694191950B97CD950083505E /* glibmm.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = glibmm.framework; path = /Library/Frameworks/glibmm.framework; sourceTree = "<absolute>"; }; + 694191960B97CD950083505E /* sigc.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = sigc.framework; path = /Library/Frameworks/sigc.framework; sourceTree = "<absolute>"; }; + 69C63C140B9369CB00BC0BCA /* strreplace.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = strreplace.cc; path = ../strreplace.cc; sourceTree = SOURCE_ROOT; }; + 69C63C180B9369DE00BC0BCA /* replace_all.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = replace_all.h; sourceTree = "<group>"; }; + 69C63C290B936A6E00BC0BCA /* version.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = version.cc; sourceTree = "<group>"; }; + 69C63C2A0B936A6E00BC0BCA /* version.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; }; + 69CD7FE90B97CDD50049ED98 /* glib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = glib; path = /Library/Frameworks/GLib.framework/Versions/2.12.3/Libraries/glib; sourceTree = "<absolute>"; }; + 69CD7FEA0B97CDD50049ED98 /* gmodule */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = gmodule; path = /Library/Frameworks/GLib.framework/Versions/2.12.3/Libraries/gmodule; sourceTree = "<absolute>"; }; + 69CD7FEB0B97CDD50049ED98 /* gobject */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = gobject; path = /Library/Frameworks/GLib.framework/Versions/2.12.3/Libraries/gobject; sourceTree = "<absolute>"; }; + 69CD7FEC0B97CDD50049ED98 /* gthread */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = gthread; path = /Library/Frameworks/GLib.framework/Versions/2.12.3/Libraries/gthread; sourceTree = "<absolute>"; }; + 8D07F2C70486CC7A007CD1D0 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; }; + 8D07F2C80486CC7A007CD1D0 /* pbd.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = pbd.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D07F2C30486CC7A007CD1D0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 694120D40B8A36A200AF661E /* libxml2.dylib in Frameworks */, + 694191980B97CD950083505E /* glibmm.framework in Frameworks */, + 694191990B97CD950083505E /* sigc.framework in Frameworks */, + 69CD7FED0B97CDD50049ED98 /* glib in Frameworks */, + 69CD7FEE0B97CDD50049ED98 /* gmodule in Frameworks */, + 69CD7FEF0B97CDD50049ED98 /* gobject in Frameworks */, + 69CD7FF00B97CDD50049ED98 /* gthread in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 034768DDFF38A45A11DB9C8B /* Products */ = { + isa = PBXGroup; + children = ( + 8D07F2C80486CC7A007CD1D0 /* pbd.framework */, + ); + name = Products; + sourceTree = "<group>"; + }; + 0867D691FE84028FC02AAC07 /* pbd */ = { + isa = PBXGroup; + children = ( + 69C63C290B936A6E00BC0BCA /* version.cc */, + 69C63C2A0B936A6E00BC0BCA /* version.h */, + 08FB77ACFE841707C02AAC07 /* Source */, + 089C1665FE841158C02AAC07 /* Resources */, + 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, + 034768DDFF38A45A11DB9C8B /* Products */, + ); + name = pbd; + sourceTree = "<group>"; + }; + 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = { + isa = PBXGroup; + children = ( + 69CD7FE90B97CDD50049ED98 /* glib */, + 69CD7FEA0B97CDD50049ED98 /* gmodule */, + 69CD7FEB0B97CDD50049ED98 /* gobject */, + 69CD7FEC0B97CDD50049ED98 /* gthread */, + 694191950B97CD950083505E /* glibmm.framework */, + 694191960B97CD950083505E /* sigc.framework */, + 694120D30B8A36A200AF661E /* libxml2.dylib */, + ); + name = "External Frameworks and Libraries"; + sourceTree = "<group>"; + }; + 089C1665FE841158C02AAC07 /* Resources */ = { + isa = PBXGroup; + children = ( + 8D07F2C70486CC7A007CD1D0 /* Info.plist */, + 089C1666FE841158C02AAC07 /* InfoPlist.strings */, + ); + name = Resources; + sourceTree = "<group>"; + }; + 08FB77ACFE841707C02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + 43D8CBC71A6E6B0E00ABE168 /* signals.cc */, + 69C63C140B9369CB00BC0BCA /* strreplace.cc */, + 694120270B8A34AB00AF661E /* base_ui.cc */, + 694120280B8A34AB00AF661E /* basename.cc */, + 694120290B8A34AB00AF661E /* command.cc */, + 6941202A0B8A34AB00AF661E /* controllable.cc */, + 6941202B0B8A34AB00AF661E /* convert.cc */, + 6941202C0B8A34AB00AF661E /* copyfile.cc */, + 6941202D0B8A34AB00AF661E /* dmalloc.cc */, + 6941202E0B8A34AB00AF661E /* enumwriter.cc */, + 6941202F0B8A34AB00AF661E /* error.cc */, + 694120300B8A34AB00AF661E /* gettext.h */, + 694120310B8A34AB00AF661E /* i18n.h */, + 694120320B8A34AB00AF661E /* id.cc */, + 694120330B8A34AB00AF661E /* mountpoint.cc */, + 694120340B8A34AB00AF661E /* path.cc */, + 694120350B8A34AB00AF661E /* pathscanner.cc */, + 694120360B8A34AB00AF661E /* pbd */, + 694120640B8A34AB00AF661E /* pool.cc */, + 694120650B8A34AB00AF661E /* pthread_utils.cc */, + 694120660B8A34AB00AF661E /* receiver.cc */, + 694120670B8A34AB00AF661E /* stacktrace.cc */, + 694120680B8A34AB00AF661E /* stateful.cc */, + 694120690B8A34AB00AF661E /* strsplit.cc */, + 6941206A0B8A34AB00AF661E /* textreceiver.cc */, + 6941206B0B8A34AB00AF661E /* transmitter.cc */, + 6941206C0B8A34AB00AF661E /* undo.cc */, + 6941206D0B8A34AB00AF661E /* whitespace.cc */, + 6941206E0B8A34AB00AF661E /* xml++.cc */, + 32BAE0B70371A74B00C91783 /* pbd_Prefix.pch */, + ); + name = Source; + sourceTree = "<group>"; + }; + 694120360B8A34AB00AF661E /* pbd */ = { + isa = PBXGroup; + children = ( + 43D8CBC81A6E6B0E00ABE168 /* signals.h */, + 69C63C180B9369DE00BC0BCA /* replace_all.h */, + 694120380B8A34AB00AF661E /* abstract_ui.cc */, + 694120390B8A34AB00AF661E /* abstract_ui.h */, + 6941203A0B8A34AB00AF661E /* base_ui.h */, + 6941203B0B8A34AB00AF661E /* basename.h */, + 6941203C0B8A34AB00AF661E /* command.h */, + 6941203D0B8A34AB00AF661E /* compose.h */, + 6941203E0B8A34AB00AF661E /* controllable.h */, + 6941203F0B8A34AB00AF661E /* convert.h */, + 694120400B8A34AB00AF661E /* copyfile.h */, + 694120410B8A34AB00AF661E /* crossthread.h */, + 694120420B8A34AB00AF661E /* destructible.h */, + 694120430B8A34AB00AF661E /* enumwriter.h */, + 694120440B8A34AB00AF661E /* error.h */, + 694120450B8A34AB00AF661E /* failed_constructor.h */, + 694120460B8A34AB00AF661E /* fastlog.h */, + 694120470B8A34AB00AF661E /* forkexec.h */, + 694120480B8A34AB00AF661E /* id.h */, + 694120490B8A34AB00AF661E /* mathfix.h */, + 6941204A0B8A34AB00AF661E /* memento_command.h */, + 6941204B0B8A34AB00AF661E /* mountpoint.h */, + 6941204C0B8A34AB00AF661E /* path.h */, + 6941204D0B8A34AB00AF661E /* pathscanner.h */, + 6941204E0B8A34AB00AF661E /* pool.h */, + 6941204F0B8A34AB00AF661E /* pthread_utils.h */, + 694120500B8A34AB00AF661E /* rcu.h */, + 694120510B8A34AB00AF661E /* receiver.h */, + 694120520B8A34AB00AF661E /* ringbuffer.h */, + 694120530B8A34AB00AF661E /* ringbufferNPT.h */, + 694120540B8A34AB00AF661E /* selectable.h */, + 694120550B8A34AB00AF661E /* shiva.h */, + 694120560B8A34AB00AF661E /* stacktrace.h */, + 694120570B8A34AB00AF661E /* stateful.h */, + 694120580B8A34AB00AF661E /* statefuldestructible.h */, + 694120590B8A34AB00AF661E /* stl_delete.h */, + 6941205A0B8A34AB00AF661E /* stl_functors.h */, + 6941205B0B8A34AB00AF661E /* strsplit.h */, + 6941205C0B8A34AB00AF661E /* textreceiver.h */, + 6941205D0B8A34AB00AF661E /* thrown_error.h */, + 6941205E0B8A34AB00AF661E /* tokenizer.h */, + 6941205F0B8A34AB00AF661E /* touchable.h */, + 694120600B8A34AB00AF661E /* transmitter.h */, + 694120610B8A34AB00AF661E /* undo.h */, + 694120620B8A34AB00AF661E /* whitespace.h */, + 694120630B8A34AB00AF661E /* xml++.h */, + ); + name = pbd; + path = ../pbd; + sourceTree = SOURCE_ROOT; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 8D07F2BD0486CC7A007CD1D0 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 69C63C2C0B936A6E00BC0BCA /* version.h in Headers */, + 69C63C190B9369DE00BC0BCA /* replace_all.h in Headers */, + 8D07F2BE0486CC7A007CD1D0 /* pbd_Prefix.pch in Headers */, + 6941207F0B8A34AB00AF661E /* abstract_ui.cc in Headers */, + 694120780B8A34AB00AF661E /* gettext.h in Headers */, + 694120790B8A34AB00AF661E /* i18n.h in Headers */, + 694120800B8A34AB00AF661E /* abstract_ui.h in Headers */, + 694120810B8A34AB00AF661E /* base_ui.h in Headers */, + 694120820B8A34AB00AF661E /* basename.h in Headers */, + 694120830B8A34AB00AF661E /* command.h in Headers */, + 694120840B8A34AB00AF661E /* compose.h in Headers */, + 694120850B8A34AB00AF661E /* controllable.h in Headers */, + 694120860B8A34AB00AF661E /* convert.h in Headers */, + 694120870B8A34AB00AF661E /* copyfile.h in Headers */, + 694120880B8A34AB00AF661E /* crossthread.h in Headers */, + 694120890B8A34AB00AF661E /* destructible.h in Headers */, + 6941208A0B8A34AB00AF661E /* enumwriter.h in Headers */, + 6941208B0B8A34AB00AF661E /* error.h in Headers */, + 6941208C0B8A34AB00AF661E /* failed_constructor.h in Headers */, + 6941208D0B8A34AB00AF661E /* fastlog.h in Headers */, + 6941208E0B8A34AB00AF661E /* forkexec.h in Headers */, + 6941208F0B8A34AB00AF661E /* id.h in Headers */, + 694120900B8A34AB00AF661E /* mathfix.h in Headers */, + 694120910B8A34AB00AF661E /* memento_command.h in Headers */, + 694120920B8A34AB00AF661E /* mountpoint.h in Headers */, + 694120930B8A34AB00AF661E /* path.h in Headers */, + 694120940B8A34AB00AF661E /* pathscanner.h in Headers */, + 694120950B8A34AB00AF661E /* pool.h in Headers */, + 694120960B8A34AB00AF661E /* pthread_utils.h in Headers */, + 694120970B8A34AB00AF661E /* rcu.h in Headers */, + 694120980B8A34AB00AF661E /* receiver.h in Headers */, + 694120990B8A34AB00AF661E /* ringbuffer.h in Headers */, + 6941209A0B8A34AB00AF661E /* ringbufferNPT.h in Headers */, + 6941209B0B8A34AB00AF661E /* selectable.h in Headers */, + 6941209C0B8A34AB00AF661E /* shiva.h in Headers */, + 6941209D0B8A34AB00AF661E /* stacktrace.h in Headers */, + 6941209E0B8A34AB00AF661E /* stateful.h in Headers */, + 6941209F0B8A34AB00AF661E /* statefuldestructible.h in Headers */, + 694120A00B8A34AB00AF661E /* stl_delete.h in Headers */, + 694120A10B8A34AB00AF661E /* stl_functors.h in Headers */, + 694120A20B8A34AB00AF661E /* strsplit.h in Headers */, + 694120A30B8A34AB00AF661E /* textreceiver.h in Headers */, + 694120A40B8A34AB00AF661E /* thrown_error.h in Headers */, + 694120A50B8A34AB00AF661E /* tokenizer.h in Headers */, + 694120A60B8A34AB00AF661E /* touchable.h in Headers */, + 694120A70B8A34AB00AF661E /* transmitter.h in Headers */, + 694120A80B8A34AB00AF661E /* undo.h in Headers */, + 694120A90B8A34AB00AF661E /* whitespace.h in Headers */, + 43D8CBCA1A6E6B0E00ABE168 /* signals.h in Headers */, + 694120AA0B8A34AB00AF661E /* xml++.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 8D07F2BC0486CC7A007CD1D0 /* pbd */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "pbd" */; + buildPhases = ( + 8D07F2BD0486CC7A007CD1D0 /* Headers */, + 8D07F2BF0486CC7A007CD1D0 /* Resources */, + 8D07F2C10486CC7A007CD1D0 /* Sources */, + 8D07F2C30486CC7A007CD1D0 /* Frameworks */, + 8D07F2C50486CC7A007CD1D0 /* Rez */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = pbd; + productInstallPath = "$(HOME)/Library/Frameworks"; + productName = pbd; + productReference = 8D07F2C80486CC7A007CD1D0 /* pbd.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0867D690FE84028FC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + }; + buildConfigurationList = 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "pbd" */; + compatibilityVersion = "Xcode 2.4"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = 0867D691FE84028FC02AAC07 /* pbd */; + productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8D07F2BC0486CC7A007CD1D0 /* pbd */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D07F2BF0486CC7A007CD1D0 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D07F2C00486CC7A007CD1D0 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXRezBuildPhase section */ + 8D07F2C50486CC7A007CD1D0 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXRezBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D07F2C10486CC7A007CD1D0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 43D8CBC91A6E6B0E00ABE168 /* signals.cc in Sources */, + 69C63C2B0B936A6E00BC0BCA /* version.cc in Sources */, + 6941206F0B8A34AB00AF661E /* base_ui.cc in Sources */, + 69C63C150B9369CB00BC0BCA /* strreplace.cc in Sources */, + 694120700B8A34AB00AF661E /* basename.cc in Sources */, + 694120710B8A34AB00AF661E /* command.cc in Sources */, + 694120720B8A34AB00AF661E /* controllable.cc in Sources */, + 694120730B8A34AB00AF661E /* convert.cc in Sources */, + 694120740B8A34AB00AF661E /* copyfile.cc in Sources */, + 694120750B8A34AB00AF661E /* dmalloc.cc in Sources */, + 694120760B8A34AB00AF661E /* enumwriter.cc in Sources */, + 694120770B8A34AB00AF661E /* error.cc in Sources */, + 6941207A0B8A34AB00AF661E /* id.cc in Sources */, + 6941207B0B8A34AB00AF661E /* mountpoint.cc in Sources */, + 6941207C0B8A34AB00AF661E /* path.cc in Sources */, + 6941207D0B8A34AB00AF661E /* pathscanner.cc in Sources */, + 694120AB0B8A34AB00AF661E /* pool.cc in Sources */, + 694120AC0B8A34AB00AF661E /* pthread_utils.cc in Sources */, + 694120AD0B8A34AB00AF661E /* receiver.cc in Sources */, + 694120AE0B8A34AB00AF661E /* stacktrace.cc in Sources */, + 694120AF0B8A34AB00AF661E /* stateful.cc in Sources */, + 694120B00B8A34AB00AF661E /* strsplit.cc in Sources */, + 694120B10B8A34AB00AF661E /* textreceiver.cc in Sources */, + 694120B20B8A34AB00AF661E /* transmitter.cc in Sources */, + 694120B30B8A34AB00AF661E /* undo.cc in Sources */, + 694120B40B8A34AB00AF661E /* whitespace.cc in Sources */, + 694120B50B8A34AB00AF661E /* xml++.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 089C1666FE841158C02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C1667FE841158C02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = "<group>"; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 4FADC24408B4156D00ABE55E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = pbd_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "@executable_path/../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + ); + LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/GLib.framework/Versions/2.12.3/Libraries\""; + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/GLib.framework/Versions/2.12.3/Libraries\""; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + PRODUCT_NAME = pbd; + WRAPPER_EXTENSION = framework; + }; + name = Release; + }; + 4FADC24808B4156D00ABE55E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = ( + "$(NATIVE_ARCH)", + ppc, + ); + GCC_FAST_OBJC_DISPATCH = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_STRICT_ALIASING = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + /usr/include/libxml2, + /Library/Frameworks/GLib.framework/Headers, + /Library/Frameworks/glibmm.framework/Headers, + /Library/Frameworks/sigc.framework/Headers, + ); + INSTALL_PATH = "@executable_path/../Frameworks"; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; + 69C9AF150B97A83A0097DE90 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(NATIVE_ARCH)"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = stabs; + GCC_FAST_OBJC_DISPATCH = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + /usr/include/libxml2, + /Library/Frameworks/GLib.framework/Headers, + /Library/Frameworks/glibmm.framework/Headers, + /Library/Frameworks/sigc.framework/Headers, + ); + INSTALL_PATH = "@executable_path/../Frameworks"; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + STRIP_INSTALLED_PRODUCT = NO; + }; + name = Debug; + }; + 69C9AF160B97A83A0097DE90 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = i386; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_VERSION = A; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = pbd_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "@executable_path/../Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", + ); + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/GLib.framework/Versions/2.12.3/Libraries\""; + LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/GLib.framework/Versions/2.12.3/Libraries\""; + LIBRARY_STYLE = DYNAMIC; + MACH_O_TYPE = mh_dylib; + PRODUCT_NAME = pbd; + WRAPPER_EXTENSION = framework; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "pbd" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FADC24408B4156D00ABE55E /* Release */, + 69C9AF160B97A83A0097DE90 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "pbd" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4FADC24808B4156D00ABE55E /* Release */, + 69C9AF150B97A83A0097DE90 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 0867D690FE84028FC02AAC07 /* Project object */; +} diff --git a/libs/pbd/macosx/pbd.xcodeproj/project.pbxproj b/libs/pbd/macosx/pbd.xcodeproj/project.pbxproj index 535d16b8a2..8487e53c2a 100644 --- a/libs/pbd/macosx/pbd.xcodeproj/project.pbxproj +++ b/libs/pbd/macosx/pbd.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 43D8CBC91A6E6B0E00ABE168 /* signals.cc in Sources */ = {isa = PBXBuildFile; fileRef = 43D8CBC71A6E6B0E00ABE168 /* signals.cc */; }; + 43D8CBCA1A6E6B0E00ABE168 /* signals.h in Headers */ = {isa = PBXBuildFile; fileRef = 43D8CBC81A6E6B0E00ABE168 /* signals.h */; }; 6941206F0B8A34AB00AF661E /* base_ui.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120270B8A34AB00AF661E /* base_ui.cc */; }; 694120700B8A34AB00AF661E /* basename.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120280B8A34AB00AF661E /* basename.cc */; }; 694120710B8A34AB00AF661E /* command.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120290B8A34AB00AF661E /* command.cc */; }; @@ -95,6 +97,8 @@ /* Begin PBXFileReference section */ 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; 32BAE0B70371A74B00C91783 /* pbd_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pbd_Prefix.pch; sourceTree = "<group>"; }; + 43D8CBC71A6E6B0E00ABE168 /* signals.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = signals.cc; path = ../signals.cc; sourceTree = "<group>"; }; + 43D8CBC81A6E6B0E00ABE168 /* signals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = signals.h; sourceTree = "<group>"; }; 694120270B8A34AB00AF661E /* base_ui.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = base_ui.cc; path = ../base_ui.cc; sourceTree = SOURCE_ROOT; }; 694120280B8A34AB00AF661E /* basename.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = basename.cc; path = ../basename.cc; sourceTree = SOURCE_ROOT; }; 694120290B8A34AB00AF661E /* command.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = command.cc; path = ../command.cc; sourceTree = SOURCE_ROOT; }; @@ -245,6 +249,7 @@ 08FB77ACFE841707C02AAC07 /* Source */ = { isa = PBXGroup; children = ( + 43D8CBC71A6E6B0E00ABE168 /* signals.cc */, 69C63C140B9369CB00BC0BCA /* strreplace.cc */, 694120270B8A34AB00AF661E /* base_ui.cc */, 694120280B8A34AB00AF661E /* basename.cc */, @@ -281,6 +286,7 @@ 694120360B8A34AB00AF661E /* pbd */ = { isa = PBXGroup; children = ( + 43D8CBC81A6E6B0E00ABE168 /* signals.h */, 69C63C180B9369DE00BC0BCA /* replace_all.h */, 694120380B8A34AB00AF661E /* abstract_ui.cc */, 694120390B8A34AB00AF661E /* abstract_ui.h */, @@ -386,6 +392,7 @@ 694120A70B8A34AB00AF661E /* transmitter.h in Headers */, 694120A80B8A34AB00AF661E /* undo.h in Headers */, 694120A90B8A34AB00AF661E /* whitespace.h in Headers */, + 43D8CBCA1A6E6B0E00ABE168 /* signals.h in Headers */, 694120AA0B8A34AB00AF661E /* xml++.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -418,8 +425,15 @@ /* Begin PBXProject section */ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; + attributes = { + }; buildConfigurationList = 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "pbd" */; + compatibilityVersion = "Xcode 2.4"; + developmentRegion = English; hasScannedForEncodings = 1; + knownRegions = ( + en, + ); mainGroup = 0867D691FE84028FC02AAC07 /* pbd */; productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */; projectDirPath = ""; @@ -456,6 +470,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 43D8CBC91A6E6B0E00ABE168 /* signals.cc in Sources */, 69C63C2B0B936A6E00BC0BCA /* version.cc in Sources */, 6941206F0B8A34AB00AF661E /* base_ui.cc in Sources */, 69C63C150B9369CB00BC0BCA /* strreplace.cc in Sources */, diff --git a/libs/pbd/malign.cc b/libs/pbd/malign.cc index a11a23f35f..e9695cd91c 100644 --- a/libs/pbd/malign.cc +++ b/libs/pbd/malign.cc @@ -38,6 +38,17 @@ static const int CPU_CACHE_ALIGN = 16; /* arguably 32 on most arches, but it mat int cache_aligned_malloc (void** memptr, size_t size) { #ifndef HAVE_POSIX_MEMALIGN +#ifdef PLATFORM_WINDOWS + if (((*memptr) = _aligned_malloc (size, CPU_CACHE_ALIGN)) == 0) { + fatal << string_compose (_("Memory allocation error: malloc (%1 * %2) failed (%3)"), + CPU_CACHE_ALIGN, size, strerror (errno)) << endmsg; + return errno; + } else { + return 0; + } +#else + std::string << string_compose (_("Memory allocation error: malloc (%1 * %2)"), + CPU_CACHE_ALIGN, size) << endmsg; if (((*memptr) = malloc (size)) == 0) { fatal << string_compose (_("Memory allocation error: malloc (%1 * %2) failed (%3)"), CPU_CACHE_ALIGN, size, strerror (errno)) << endmsg; @@ -45,6 +56,7 @@ int cache_aligned_malloc (void** memptr, size_t size) } else { return 0; } +#endif #else if (posix_memalign (memptr, CPU_CACHE_ALIGN, size)) { fatal << string_compose (_("Memory allocation error: posix_memalign (%1 * %2) failed (%3)"), @@ -54,3 +66,51 @@ int cache_aligned_malloc (void** memptr, size_t size) return 0; #endif } + +void cache_aligned_free (void* memptr) +{ +#ifdef PLATFORM_WINDOWS + _aligned_free (memptr); +#else + free (memptr); +#endif +} + +int aligned_malloc (void** memptr, size_t size, size_t alignment) +{ +#ifndef HAVE_POSIX_MEMALIGN +#ifdef PLATFORM_WINDOWS + if (((*memptr) = _aligned_malloc (size, alignment)) == 0) { + fatal << string_compose (_("Memory allocation error: malloc (%1 * %2) failed (%3)"), + alignment, size, strerror (errno)) << endmsg; + return errno; + } else { + return 0; + } +#else + if (((*memptr) = malloc (size)) == 0) { + fatal << string_compose (_("Memory allocation error: malloc (%1 * %2) failed (%3)"), + alignment, size, strerror (errno)) << endmsg; + return errno; + } else { + return 0; + } +#endif +#else + if (posix_memalign (memptr, alignment, size)) { + fatal << string_compose (_("Memory allocation error: posix_memalign (%1 * %2) failed (%3)"), + alignment, size, strerror (errno)) << endmsg; + } + + return 0; +#endif +} + +void aligned_free (void* memptr) +{ +#ifdef PLATFORM_WINDOWS + _aligned_free (memptr); +#else + free (memptr); +#endif +}
\ No newline at end of file diff --git a/libs/pbd/pbd/atomic_counter.h b/libs/pbd/pbd/atomic_counter.h index 1e1998e1f1..019ff857f4 100644 --- a/libs/pbd/pbd/atomic_counter.h +++ b/libs/pbd/pbd/atomic_counter.h @@ -41,7 +41,7 @@ public: gint get() const { - return g_atomic_int_get (&m_value); + return g_atomic_int_get (const_cast<gint*>(&m_value)); } void set (gint new_value) @@ -90,7 +90,7 @@ public: private: // Has to be mutable when using the apple version of gcc. - mutable volatile gint m_value; + gint m_value; }; diff --git a/libs/pbd/pbd/debug.h b/libs/pbd/pbd/debug.h index e4fa525481..a372c3963c 100644 --- a/libs/pbd/pbd/debug.h +++ b/libs/pbd/pbd/debug.h @@ -30,7 +30,7 @@ namespace PBD { - typedef std::bitset<64> DebugBits; + typedef std::bitset<128> DebugBits; LIBPBD_API extern DebugBits debug_bits; LIBPBD_API DebugBits new_debug_bit (const char* name); @@ -51,6 +51,11 @@ namespace PBD { LIBPBD_API extern DebugBits AbstractUI; LIBPBD_API extern DebugBits Configuration; LIBPBD_API extern DebugBits FileUtils; + + /* See notes in ../debug.cc on why these are defined here */ + + LIBPBD_API extern DebugBits WavesMIDI; + LIBPBD_API extern DebugBits WavesAudio; } } diff --git a/libs/pbd/pbd/fpu.h b/libs/pbd/pbd/fpu.h index 6627951e9f..260cf4db85 100644 --- a/libs/pbd/pbd/fpu.h +++ b/libs/pbd/pbd/fpu.h @@ -30,7 +30,8 @@ class LIBPBD_API FPU { HasFlushToZero = 0x1, HasDenormalsAreZero = 0x2, HasSSE = 0x4, - HasSSE2 = 0x8 + HasSSE2 = 0x8, + HasAVX = 0x10 }; public: @@ -41,6 +42,7 @@ class LIBPBD_API FPU { bool has_denormals_are_zero () const { return _flags & HasDenormalsAreZero; } bool has_sse () const { return _flags & HasSSE; } bool has_sse2 () const { return _flags & HasSSE2; } + bool has_avx () const { return _flags & HasAVX; } private: Flags _flags; diff --git a/libs/pbd/pbd/malign.h b/libs/pbd/pbd/malign.h index 07f42f586f..09d182fa40 100644 --- a/libs/pbd/pbd/malign.h +++ b/libs/pbd/pbd/malign.h @@ -24,6 +24,10 @@ #include "pbd/libpbd_visibility.h" -LIBPBD_API int cache_aligned_malloc (void** memptr, size_t size); +LIBPBD_API int cache_aligned_malloc (void** memptr, size_t size); +LIBPBD_API void cache_aligned_free (void* memptr); + +LIBPBD_API int aligned_malloc (void** memptr, size_t size, size_t alignment); +LIBPBD_API void aligned_free (void* memptr); #endif /* __pbd_malign_h__ */ diff --git a/libs/pbd/pbd/pool.h b/libs/pbd/pbd/pool.h index cfd782a794..aff3f7ea21 100644 --- a/libs/pbd/pbd/pool.h +++ b/libs/pbd/pbd/pool.h @@ -129,7 +129,7 @@ class LIBPBD_API PerThreadPool void create_per_thread_pool (std::string name, unsigned long item_size, unsigned long nitems); CrossThreadPool* per_thread_pool (bool must_exist = true); - + bool has_per_thread_pool (); void set_trash (RingBuffer<CrossThreadPool*>* t); void add_to_trash (CrossThreadPool *); diff --git a/libs/pbd/pool.cc b/libs/pbd/pool.cc index 020f296f61..ccdb85b6c6 100644 --- a/libs/pbd/pool.cc +++ b/libs/pbd/pool.cc @@ -175,6 +175,20 @@ PerThreadPool::create_per_thread_pool (string n, unsigned long isize, unsigned l _key.set (new CrossThreadPool (n, isize, nitems, this)); } +/** @return True if CrossThreadPool for the current thread exists, + * False otherwise + */ +bool +PerThreadPool::has_per_thread_pool () +{ + CrossThreadPool* p = _key.get(); + if (p) { + return true; + } + return false; +} + + /** @return CrossThreadPool for the current thread, which must previously have been created by * calling create_per_thread_pool in the current thread. */ diff --git a/libs/pbd/stacktrace.cc b/libs/pbd/stacktrace.cc index c74dd946f7..d4199b9adc 100644 --- a/libs/pbd/stacktrace.cc +++ b/libs/pbd/stacktrace.cc @@ -20,10 +20,18 @@ #include "libpbd-config.h" #include "pbd/stacktrace.h" +#include "pbd/compose.h" +#include "pbd/pthread_utils.h" + #include <cstdio> #include <iostream> #include <string> +#ifdef PLATFORM_WINDOWS +#include <windows.h> +#include <dbghelp.h> +#endif + void PBD::trace_twb () { @@ -103,6 +111,56 @@ PBD::stacktrace (std::ostream& out, int levels) } } +#elif defined (PLATFORM_WINDOWS) + +std::string +PBD::demangle (std::string const & l) /* JE - !!!! 'PBD' namespace might possibly get removed (except it's still used in 'libs/canvas/item.cc') */ +{ + return std::string(); +} + +void +PBD::stacktrace( std::ostream& out, int) +{ +#ifdef DEBUG + const size_t levels = 62; // does not support more then 62 levels of stacktrace + unsigned int i; + void * stack[ levels ]; + unsigned short frames; + SYMBOL_INFO * symbol; + HANDLE process; + + process = GetCurrentProcess(); + out << "+++++Backtrace process: " << pthread_self() << std::endl; + + SymInitialize( process, NULL, TRUE ); + + frames = CaptureStackBackTrace( 0, levels, stack, NULL ); + + out << "+++++Backtrace frames: " << frames << std::endl; + + symbol = ( SYMBOL_INFO * )calloc( sizeof( SYMBOL_INFO ) + 256 * sizeof( char ), 1 ); + symbol->MaxNameLen = 255; + symbol->SizeOfStruct = sizeof( SYMBOL_INFO ); + + for( i = 0; i < frames; i++ ) + { + SymFromAddr( process, ( DWORD64 )( stack[ i ] ), 0, symbol ); + out << string_compose( "%1: %2 - %3\n", frames - i - 1, symbol->Name, symbol->Address ); + } + + out.flush(); + + free( symbol ); +#endif +} + +void +c_stacktrace () +{ + PBD::stacktrace (std::cout); +} + #else std::string diff --git a/libs/pbd/wscript b/libs/pbd/wscript index 8f947fbb26..27617adfa9 100644 --- a/libs/pbd/wscript +++ b/libs/pbd/wscript @@ -145,6 +145,7 @@ def build(bld): if bld.env['build_target'] == 'x86_64': obj.defines += [ 'USE_X86_64_ASM' ] if bld.env['build_target'] == 'mingw': + obj.defines += [ 'NO_POSIX_MEMALIGN' ] obj.source += [ 'windows_special_dirs.cc' ] obj.uselib += ' OLE' diff --git a/libs/plugins/reasonablesynth.lv2/rsynth.c b/libs/plugins/reasonablesynth.lv2/rsynth.c index 665ae13877..5848bee14c 100644 --- a/libs/plugins/reasonablesynth.lv2/rsynth.c +++ b/libs/plugins/reasonablesynth.lv2/rsynth.c @@ -229,7 +229,7 @@ static void process_key (void *synth, RSSynthChannel* sc = &rs->sc[chn]; const int8_t vel = sc->miditable[note]; const int8_t msg = sc->midimsgs[note]; - const float vol = /* master_volume */ 0.1 * fabsf(vel) / 127.0; + const float vol = /* master_volume */ 0.1f * abs(vel) / 127.f; const float phase = sc->phase[note]; const int8_t sus = sc->sustain; sc->midimsgs[note] &= ~3; diff --git a/libs/qm-dsp/dsp/onsets/PeakPicking.cpp b/libs/qm-dsp/dsp/onsets/PeakPicking.cpp index 55f56b46d0..b46c54b6d1 100644 --- a/libs/qm-dsp/dsp/onsets/PeakPicking.cpp +++ b/libs/qm-dsp/dsp/onsets/PeakPicking.cpp @@ -97,8 +97,6 @@ int PeakPicking::quadEval( vector<double> &src, vector<int> &idx ) vector <double> m_poly; vector <double> m_err; - double p; - m_poly.push_back(0); m_poly.push_back(0); m_poly.push_back(0); @@ -128,8 +126,6 @@ int PeakPicking::quadEval( vector<double> &src, vector<int> &idx ) m_maxFit.push_back(selMax); } - p = TPolyFit::PolyFit2( m_err, m_maxFit, m_poly); - double f = m_poly[0]; double h = m_poly[2]; diff --git a/libs/surfaces/control_protocol/control_protocol.cc b/libs/surfaces/control_protocol/control_protocol.cc index 71cae36086..6ac673925a 100644 --- a/libs/surfaces/control_protocol/control_protocol.cc +++ b/libs/surfaces/control_protocol/control_protocol.cc @@ -374,6 +374,19 @@ ControlProtocol::get_state () XMLNode* node = new XMLNode (state_node_name); node->add_property ("name", _name); + node->add_property ("feedback", get_feedback() ? "yes" : "no"); return *node; } + +int +ControlProtocol::set_state (XMLNode const & node, int /* version */) +{ + const XMLProperty* prop; + + if ((prop = node.property ("feedback")) != 0) { + set_feedback (string_is_affirmative (prop->value())); + } + + return 0; +} diff --git a/libs/surfaces/control_protocol/control_protocol/control_protocol.h b/libs/surfaces/control_protocol/control_protocol/control_protocol.h index f5af008e4a..13b8dcad7a 100644 --- a/libs/surfaces/control_protocol/control_protocol/control_protocol.h +++ b/libs/surfaces/control_protocol/control_protocol/control_protocol.h @@ -135,6 +135,8 @@ class LIBCONTROLCP_API ControlProtocol : public PBD::Stateful, public PBD::Scope virtual void tear_down_gui() { } XMLNode& get_state (); + int set_state (XMLNode const &, int version); + static const std::string state_node_name; protected: diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc index 702d361965..44d04e532d 100644 --- a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc +++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc @@ -30,6 +30,7 @@ #include "pbd/failed_constructor.h" #include "pbd/file_utils.h" #include "pbd/xml++.h" +#include "pbd/compose.h" #include "midi++/port.h" @@ -40,6 +41,7 @@ #include "ardour/midi_ui.h" #include "ardour/rc_configuration.h" #include "ardour/midiport_manager.h" +#include "ardour/debug.h" #include "generic_midi_control_protocol.h" #include "midicontrollable.h" @@ -174,6 +176,7 @@ GenericMidiControlProtocol::reload_maps () void GenericMidiControlProtocol::drop_all () { + DEBUG_TRACE (DEBUG::GenericMidi, "Drop all bindings\n"); Glib::Threads::Mutex::Lock lm (pending_lock); Glib::Threads::Mutex::Lock lm2 (controllables_lock); @@ -201,6 +204,7 @@ GenericMidiControlProtocol::drop_all () void GenericMidiControlProtocol::drop_bindings () { + DEBUG_TRACE (DEBUG::GenericMidi, "Drop bindings, leave learned\n"); Glib::Threads::Mutex::Lock lm2 (controllables_lock); for (MIDIControllables::iterator i = controllables.begin(); i != controllables.end(); ) { @@ -453,7 +457,7 @@ GenericMidiControlProtocol::create_binding (PBD::Controllable* control, int pos, // Update the MIDI Controllable based on the the pos param // Here is where a table lookup for user mappings could go; for now we'll just wing it... mc->bind_midi(channel, MIDI::controller, value); - + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Create binding: Channel: %1 Controller: %2 Value: %3 \n", channel, MIDI::controller, value)); controllables.push_back (mc); } } @@ -464,7 +468,6 @@ GenericMidiControlProtocol::get_state () XMLNode& node (ControlProtocol::get_state()); char buf[32]; - node.add_property (X_("feedback"), do_feedback ? "1" : "0"); snprintf (buf, sizeof (buf), "%" PRIu64, _feedback_interval); node.add_property (X_("feedback_interval"), buf); snprintf (buf, sizeof (buf), "%d", _threshold); @@ -501,10 +504,8 @@ GenericMidiControlProtocol::set_state (const XMLNode& node, int version) XMLNodeConstIterator niter; const XMLProperty* prop; - if ((prop = node.property ("feedback")) != 0) { - do_feedback = (bool) atoi (prop->value().c_str()); - } else { - do_feedback = false; + if (ControlProtocol::set_state (node, version)) { + return -1; } if ((prop = node.property ("feedback_interval")) != 0) { @@ -533,6 +534,16 @@ GenericMidiControlProtocol::set_state (const XMLNode& node, int version) pending_controllables.clear (); } + // midi map has to be loaded first so learned binding can go on top + if ((prop = node.property ("binding")) != 0) { + for (list<MapInfo>::iterator x = map_info.begin(); x != map_info.end(); ++x) { + if (prop->value() == (*x).name) { + load_bindings ((*x).path); + break; + } + } + } + /* Load up specific bindings from the * <Controls><MidiControllable>...</MidiControllable><Controls> section */ @@ -551,6 +562,7 @@ GenericMidiControlProtocol::set_state (const XMLNode& node, int version) if ((prop = (*niter)->property ("id")) != 0) { ID id = prop->value (); + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Relearned binding for session: Control ID: %1\n", id.to_s())); Controllable* c = Controllable::by_id (id); if (c) { @@ -563,7 +575,7 @@ GenericMidiControlProtocol::set_state (const XMLNode& node, int version) } else { warning << string_compose ( _("Generic MIDI control: controllable %1 not found in session (ignored)"), - id) << endmsg; + id.to_s()) << endmsg; } } } @@ -571,15 +583,6 @@ GenericMidiControlProtocol::set_state (const XMLNode& node, int version) } } - if ((prop = node.property ("binding")) != 0) { - for (list<MapInfo>::iterator x = map_info.begin(); x != map_info.end(); ++x) { - if (prop->value() == (*x).name) { - load_bindings ((*x).path); - break; - } - } - } - return 0; } @@ -600,6 +603,7 @@ GenericMidiControlProtocol::get_feedback () const int GenericMidiControlProtocol::load_bindings (const string& xmlpath) { + DEBUG_TRACE (DEBUG::GenericMidi, "Load bindings: Reading midi map\n"); XMLTree state_tree; if (!state_tree.read (xmlpath.c_str())) { @@ -635,6 +639,7 @@ GenericMidiControlProtocol::load_bindings (const string& xmlpath) drop_all (); + DEBUG_TRACE (DEBUG::GenericMidi, "Loading bindings\n"); for (citer = children.begin(); citer != children.end(); ++citer) { if ((*citer)->name() == "DeviceInfo") { diff --git a/libs/surfaces/generic_midi/midiaction.cc b/libs/surfaces/generic_midi/midiaction.cc index e537122e9c..8dfbef9716 100644 --- a/libs/surfaces/generic_midi/midiaction.cc +++ b/libs/surfaces/generic_midi/midiaction.cc @@ -19,11 +19,14 @@ #include <cstring> #include "midi++/port.h" +#include "pbd/compose.h" +#include "ardour/debug.h" #include "midiaction.h" #include "generic_midi_control_protocol.h" using namespace MIDI; +using namespace PBD; MIDIAction::MIDIAction (MIDI::Parser& p) : MIDIInvokable (p) @@ -44,6 +47,7 @@ MIDIAction::init (GenericMidiControlProtocol& ui, const std::string& invokable_n void MIDIAction::execute () { + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Action: '%1'\n", _invokable_name)); _ui->access_action (_invokable_name); } diff --git a/libs/surfaces/generic_midi/midicontrollable.cc b/libs/surfaces/generic_midi/midicontrollable.cc index 1d96a073b0..f03a113cfe 100644 --- a/libs/surfaces/generic_midi/midicontrollable.cc +++ b/libs/surfaces/generic_midi/midicontrollable.cc @@ -26,6 +26,7 @@ #include "pbd/controllable_descriptor.h" #include "pbd/xml++.h" #include "pbd/stacktrace.h" +#include "pbd/compose.h" #include "midi++/types.h" // Added by JE - 06-01-2009. All instances of 'byte' changed to 'MIDI::byte' (for clarification) #include "midi++/port.h" @@ -35,6 +36,7 @@ #include "ardour/automation_control.h" #include "ardour/midi_ui.h" #include "ardour/utils.h" +#include "ardour/debug.h" #include "midicontrollable.h" #include "generic_midi_control_protocol.h" @@ -268,10 +270,13 @@ MIDIControllable::midi_sense_note (Parser &, EventTwoBytes *msg, bool /*is_on*/) if (!controllable->is_toggle()) { if (control_additional == msg->note_number) { controllable->set_value (midi_to_control (msg->velocity)); + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Note %1 value %2 %3\n", (int) msg->note_number, (float) midi_to_control (msg->velocity), current_uri() )); } } else { if (control_additional == msg->note_number) { - controllable->set_value (controllable->get_value() > 0.5f ? 0.0f : 1.0f); + float new_value = controllable->get_value() > 0.5f ? 0.0f : 1.0f; + controllable->set_value (new_value); + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Note %1 Value %2 %3\n", (int) msg->note_number, (float) new_value, current_uri())); } } @@ -317,13 +322,16 @@ MIDIControllable::midi_sense_controller (Parser &, EventTwoBytes *msg) if (in_sync || _surface->motorised ()) { controllable->set_value (midi_to_control (new_value)); } + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("MIDI CC %1 value %2 %3\n", (int) msg->controller_number, (float) midi_to_control(new_value), current_uri() )); last_controllable_value = new_value; } else { if (msg->value > 64.0f) { controllable->set_value (1); + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Midi CC %1 value 1 %2\n", (int) msg->controller_number, current_uri())); } else { controllable->set_value (0); + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Midi CC %1 value 0 %2\n", (int) msg->controller_number, current_uri())); } } @@ -342,8 +350,11 @@ MIDIControllable::midi_sense_program_change (Parser &, MIDI::byte msg) if (!controllable->is_toggle()) { controllable->set_value (midi_to_control (msg)); + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("MIDI program %1 value %2 %3\n", (int) msg, (float) midi_to_control (msg), current_uri() )); } else if (msg == control_additional) { - controllable->set_value (controllable->get_value() > 0.5f ? 0.0f : 1.0f); + float new_value = controllable->get_value() > 0.5f ? 0.0f : 1.0f; + controllable->set_value (new_value); + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("MIDI program %1 value %2 %3\n", (int) msg, (float) new_value, current_uri())); } last_value = (MIDI::byte) (controllable->get_value() * 127.0); // to prevent feedback fights @@ -360,8 +371,15 @@ MIDIControllable::midi_sense_pitchbend (Parser &, pitchbend_t pb) if (!controllable->is_toggle()) { controllable->set_value (midi_to_control (pb)); + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("MIDI pitchbend %1 value %2 %3\n", (int) control_channel, (float) midi_to_control (pb), current_uri() )); } else { - controllable->set_value (controllable->get_value() > 0.5f ? 0.0f : 1.0f); + if (pb > 8065.0f) { + controllable->set_value (1); + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Midi pitchbend %1 value 1 %2\n", (int) control_channel, current_uri())); + } else { + controllable->set_value (0); + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Midi pitchbend %1 value 0 %2\n", (int) control_channel, current_uri())); + } } last_value = control_to_midi (controllable->get_value ()); @@ -437,6 +455,7 @@ MIDIControllable::bind_midi (channel_t chn, eventType ev, MIDI::byte additional) default: break; } + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Controlable: bind_midi: %1 on Channel %2 value %3 \n", _control_description, chn_i + 1, (int) additional)); } MIDI::byte* @@ -452,21 +471,28 @@ MIDIControllable::write_feedback (MIDI::byte* buf, int32_t& bufsize, bool /*forc return buf; } + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Feedback: %1 %2\n", control_description(), current_uri())); + *buf++ = (0xF0 & control_type) | (0xF & control_channel); - + int ev_size = 3; switch (control_type) { case MIDI::pitchbend: *buf++ = int (gm) & 127; *buf++ = (int (gm) >> 7) & 127; break; + case MIDI::program: + *buf++ = control_additional; /* program number */ + ev_size = 2; + break; default: *buf++ = control_additional; /* controller number */ *buf++ = gm; break; } + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("MIDI out: Type %1 Channel %2 Bytes %3 %4\n", (int) control_type, (int) control_channel , (int) *(buf - 2), (int) *(buf - 1))); last_value = gm; - bufsize -= 3; + bufsize -= ev_size; return buf; } diff --git a/libs/surfaces/generic_midi/midifunction.cc b/libs/surfaces/generic_midi/midifunction.cc index b0dc95e4fc..e2fb317605 100644 --- a/libs/surfaces/generic_midi/midifunction.cc +++ b/libs/surfaces/generic_midi/midifunction.cc @@ -23,7 +23,12 @@ #include "midifunction.h" #include "generic_midi_control_protocol.h" +#include "pbd/compose.h" + +#include "ardour/debug.h" + using namespace MIDI; +using namespace PBD; MIDIFunction::MIDIFunction (MIDI::Parser& p) : MIDIInvokable (p) @@ -94,10 +99,12 @@ MIDIFunction::execute () switch (_function) { case NextBank: _ui->next_bank(); + DEBUG_TRACE (DEBUG::GenericMidi, "Function: next_bank\n"); break; case PrevBank: _ui->prev_bank(); + DEBUG_TRACE (DEBUG::GenericMidi, "Function: prev_bank\n"); break; case SetBank: @@ -105,39 +112,48 @@ MIDIFunction::execute () uint32_t bank; sscanf (_argument.c_str(), "%d", &bank); _ui->set_current_bank (bank); + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Function: set_current_bank = %1\n", (int) bank)); } break; case TransportStop: _ui->transport_stop (); + DEBUG_TRACE (DEBUG::GenericMidi, "Function: transport_stop\n"); break; case TransportRoll: _ui->transport_play (); + DEBUG_TRACE (DEBUG::GenericMidi, "Function: transport_play\n"); break; case TransportStart: _ui->goto_start (); + DEBUG_TRACE (DEBUG::GenericMidi, "Function: goto_start\n"); break; case TransportZero: // need this in BasicUI + DEBUG_TRACE (DEBUG::GenericMidi, "Function: goto_zero-not implemented\n"); break; case TransportEnd: _ui->goto_end (); + DEBUG_TRACE (DEBUG::GenericMidi, "Function: goto_end\n"); break; case TransportLoopToggle: _ui->loop_toggle (); + DEBUG_TRACE (DEBUG::GenericMidi, "Function: loop_toggle\n"); break; case TransportRecordEnable: _ui->set_record_enable (true); + DEBUG_TRACE (DEBUG::GenericMidi, "Function: set_record_enable = true\n"); break; case TransportRecordDisable: _ui->set_record_enable (false); + DEBUG_TRACE (DEBUG::GenericMidi, "Function: set_record_enable = false\n"); break; case Select: @@ -145,6 +161,7 @@ MIDIFunction::execute () uint32_t rid; sscanf (_argument.c_str(), "%d", &rid); _ui->SetRouteSelection (rid); + DEBUG_TRACE (DEBUG::GenericMidi, string_compose ("Function: SetRouteSelection = %1\n", rid)); } break; case TrackSetMute: @@ -165,6 +182,7 @@ MIDIFunction::execute () XMLNode& MIDIFunction::get_state () { + XMLNode* node = new XMLNode ("MIDIFunction"); return *node; } diff --git a/libs/surfaces/mackie/gui.cc b/libs/surfaces/mackie/gui.cc index 105bac060c..0df0935f56 100644 --- a/libs/surfaces/mackie/gui.cc +++ b/libs/surfaces/mackie/gui.cc @@ -242,6 +242,15 @@ MackieControlProtocolGUI::build_available_action_menu () available_action_model->clear (); + /* Because there are button bindings built in that are not + in the key binding map, there needs to be a way to undo + a profile edit. */ + TreeIter rowp; + TreeModel::Row parent; + rowp = available_action_model->append(); + parent = *(rowp); + parent[available_action_columns.name] = _("Remove Binding"); + for (l = labels.begin(), k = keys.begin(), p = paths.begin(), t = tooltips.begin(); l != labels.end(); ++k, ++p, ++t, ++l) { TreeModel::Row row; @@ -451,6 +460,11 @@ MackieControlProtocolGUI::refresh_function_key_editor () void MackieControlProtocolGUI::action_changed (const Glib::ustring &sPath, const Glib::ustring &text, TreeModelColumnBase col) { + // Remove Binding is not in the action map but still valid + bool remove (false); + if ( text == "Remove Binding") { + remove = true; + } Gtk::TreePath path(sPath); Gtk::TreeModel::iterator row = function_key_model->get_iter(path); @@ -459,17 +473,23 @@ MackieControlProtocolGUI::action_changed (const Glib::ustring &sPath, const Glib std::map<std::string,std::string>::iterator i = action_map.find (text); if (i == action_map.end()) { - return; + if (!remove) { + return; + } } - Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (i->second.c_str()); - if (act) { + if (act || remove) { /* update visible text, using string supplied by available action model so that it matches and is found within the model. */ - (*row).set_value (col.index(), text); + if (remove) { + Glib::ustring dot = "\u2022"; + (*row).set_value (col.index(), dot); + } else { + (*row).set_value (col.index(), text); + } /* update the current DeviceProfile, using the full * path @@ -497,7 +517,12 @@ MackieControlProtocolGUI::action_changed (const Glib::ustring &sPath, const Glib modifier = 0; } - _cp.device_profile().set_button_action ((*row)[function_key_columns.id], modifier, i->second); + if (remove) { + _cp.device_profile().set_button_action ((*row)[function_key_columns.id], modifier, ""); + } else { + _cp.device_profile().set_button_action ((*row)[function_key_columns.id], modifier, i->second); + } + } else { std::cerr << "no such action\n"; } diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc index fc036513cc..5d6e55e742 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.cc +++ b/libs/surfaces/mackie/mackie_control_protocol.cc @@ -827,6 +827,10 @@ MackieControlProtocol::set_state (const XMLNode & node, int version) const XMLProperty* prop; uint32_t bank = 0; + if (ControlProtocol::set_state (node, version)) { + return -1; + } + if ((prop = node.property (X_("ipmidi-base"))) != 0) { set_ipmidi_base (atoi (prop->value())); } diff --git a/libs/surfaces/mackie/mackie_control_protocol.h b/libs/surfaces/mackie/mackie_control_protocol.h index 510cbf11ba..f521684a80 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.h +++ b/libs/surfaces/mackie/mackie_control_protocol.h @@ -140,7 +140,12 @@ class MackieControlProtocol XMLNode& get_state (); int set_state (const XMLNode&, int version); - + + /* Note: because Mackie control is inherently a duplex protocol, + we do not implement get/set_feedback() since this aspect of + support for the protocol is not optional. + */ + static bool probe(); Glib::Threads::Mutex surfaces_lock; diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 5878b34d80..727485d83c 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -1090,25 +1090,14 @@ OSC::route_plugin_parameter_print (int rid, int piid, int par) XMLNode& OSC::get_state () { - XMLNode& node (ControlProtocol::get_state()); - - node.add_property (X_("feedback"), _send_route_changes ? "1" : "0"); - return node; + return ControlProtocol::get_state(); } int -OSC::set_state (const XMLNode& node, int /*version*/) +OSC::set_state (const XMLNode& node, int version) { - const XMLProperty* prop = node.property (X_("feedback")); - - if (prop) { - if (PBD::string_is_affirmative (prop->value())) { - _send_route_changes = true; - } else { - _send_route_changes = false; - } - } else { - /* leave it alone */ + if (ControlProtocol::set_state (node, version)) { + return -1; } return 0; diff --git a/midi_maps/midikb_wiimote.map b/midi_maps/midikb_wiimote.map new file mode 100644 index 0000000000..61b3fd0fc9 --- /dev/null +++ b/midi_maps/midikb_wiimote.map @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ArdourMIDIBindings version="1.0.0" name="WiiMote via midikb"> + +<!-- OvenWerks June 27 2015 --> +<!-- This tries to do what the old WiiMote setup in Ardour did --> +<!-- B + A --> +<Binding channel="1" note="16" action="Transport/ToggleRollForgetCapture"/> +<!-- B + left --> +<Binding channel="1" note="17" action="Editor/playhead-to-previous-region-boundary"/> +<!-- B + right --> +<Binding channel="1" note="18" action="Editor/playhead-to-next-region-boundary"/> +<!-- B + up --> +<Binding channel="1" note="19" action="Editor/jump-forward-to-mark"/> +<!-- B + down --> +<Binding channel="1" note="20" action="Editor/jump-backward-to-mark"/> +<!-- B + home --> +<Binding channel="1" note="21" action="Editor/add-location-from-playhead"/> +<!-- B + minus --> +<Binding channel="1" note="22" action="Transport/GotoStart"/> +<!-- B + plus --> +<Binding channel="1" note="23" action="Transport/GotoEnd"/> +<!-- B + one Not used add as you wish --> +<!--Binding channel="1" note="24" action=""/--> +<!-- B + Two --> +<Binding channel="1" note="25" function="rec-disable"/> + +<!-- A --> +<Binding channel="1" note="32" action="Transport/ToggleRoll"/> +<!-- left --> +<Binding channel="1" note="33" action="Editor/nudge-playhead-backward"/> +<!-- right --> +<Binding channel="1" note="34" action="Editor/nudge-playhead-forward"/> +<!-- up --> +<Binding channel="1" note="35" action="Editor/select-prev-route"/> +<!-- down --> +<Binding channel="1" note="36" action="Editor/select-next-route"/> +<!-- home --> +<Binding channel="1" note="37" action="Editor/playhead-to-edit"/> +<!-- minus --> +<Binding channel="1" note="38" action="Editor/temporal-zoom-out"/> +<!-- plus --> +<Binding channel="1" note="39" action="Editor/temporal-zoom-in"/> +<!-- one --> +<Binding channel="1" note="40" action="Editor/track-record-enable-toggle"/> +<!-- Two --> +<Binding channel="1" note="41" function="rec-enable"/> + + + + +</ArdourMIDIBindings> diff --git a/system_config b/system_config index 9be2229e61..93062f7ed8 100644 --- a/system_config +++ b/system_config @@ -4,6 +4,7 @@ <Option name="auto-connect-standard-busses" value="1"/> <Option name="output-auto-connect" value="2"/> <Option name="input-auto-connect" value="1"/> + <Option name="tracks-auto-naming" value="1"/> <Option name="trace-midi-input" value="0"/> <Option name="trace-midi-output" value="0"/> <Option name="send-mtc" value="0"/> @@ -15,7 +16,7 @@ <Option name="mmc-send-device-id" value="0"/> <Option name="initial-program-change" value="-1"/> <Option name="display-first-midi-bank-as-zero" value="0"/> - <Option name="inter-scene-gap-msecs" value="1"/> + <Option name="inter-scene-gap-frames" value="1"/> <Option name="mtc-qf-speed-tolerance" value="5"/> <Option name="timecode-sync-frame-rate" value="1"/> <Option name="timecode-source-is-synced" value="0"/> @@ -32,6 +33,7 @@ <Option name="minimum-disk-read-bytes" value="262144"/> <Option name="minimum-disk-write-bytes" value="262144"/> <Option name="midi-readahead" value="1"/> + <Option name="buffering-preset" value="1"/> <Option name="capture-buffer-seconds" value="5"/> <Option name="playback-buffer-seconds" value="5"/> <Option name="midi-track-buffer-seconds" value="1"/> @@ -39,6 +41,7 @@ <Option name="auto-analyse-audio" value="0"/> <Option name="osc-port" value="3819"/> <Option name="use-osc" value="0"/> + <Option name="layer-model" value="1"/> <Option name="automation-follows-regions" value="1"/> <Option name="region-boundaries-from-selected-tracks" value="1"/> <Option name="region-boundaries-from-onscreen_tracks" value="1"/> @@ -83,9 +86,14 @@ <Option name="shuttle-speed-threshold" value="5"/> <Option name="shuttle-behaviour" value="0"/> <Option name="shuttle-units" value="0"/> + <Option name="shuttle-max-speed" value="8"/> <Option name="locate-while-waiting-for-sync" value="0"/> <Option name="disable-disarm-during-roll" value="0"/> + <Option name="auto-return-target-list" value="15"/> <Option name="meter-falloff" value="13.3"/> + <Option name="meter-type-master" value="16"/> + <Option name="meter-type-track" value="4"/> + <Option name="meter-type-bus" value="4"/> <Option name="auditioner-output-left" value="default"/> <Option name="auditioner-output-right" value="default"/> <Option name="replicate-missing-region-channels" value="0"/> @@ -103,6 +111,7 @@ <Option name="processor-usage" value="-1"/> <Option name="max-gain" value="2"/> <Option name="max-recent-sessions" value="10"/> + <Option name="max-recent-templates" value="10"/> <Option name="automation-thinning-factor" value="20"/> <Option name="range-location-minimum" value="128"/> <Option name="edit-mode" value="0"/> @@ -118,7 +127,7 @@ <Option name="denormal-protection" value="0"/> <Option name="denormal-model" value="3"/> <Option name="osx-pingback-url" value="http://community.ardour.org/pingback/osx/"/> - <Option name="tutorial-manual-url" value="http://ardour.org/flossmanual"/> + <Option name="tutorial-manual-url" value="http://ardour.org/tutorial"/> <Option name="reference-manual-url" value="http://manual.ardour.org/"/> <Option name="video-advanced-setup" value="0"/> <Option name="video-server-url" value="http://localhost:1554"/> diff --git a/tools/CrashReporter/CrashReporter.xcodeproj/CrashReporter.xcodeproj/TemplateIcon.icns b/tools/CrashReporter/CrashReporter.xcodeproj/CrashReporter.xcodeproj/TemplateIcon.icns Binary files differnew file mode 100644 index 0000000000..62cb7015e0 --- /dev/null +++ b/tools/CrashReporter/CrashReporter.xcodeproj/CrashReporter.xcodeproj/TemplateIcon.icns diff --git a/tools/CrashReporter/CrashReporter.xcodeproj/CrashReporter.xcodeproj/project.pbxproj b/tools/CrashReporter/CrashReporter.xcodeproj/CrashReporter.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..80bcdf1cea --- /dev/null +++ b/tools/CrashReporter/CrashReporter.xcodeproj/CrashReporter.xcodeproj/project.pbxproj @@ -0,0 +1,282 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXBuildFile section */ + 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; }; + 6928CD410FE0A55A006F5860 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6928CD400FE0A55A006F5860 /* AppDelegate.m */; }; + 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; + 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; + 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; }; + 1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = "<group>"; }; + 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; + 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; }; + 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; + 32CA4F630368D1EE00C91783 /* CrashReporter_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CrashReporter_Prefix.pch; sourceTree = "<group>"; }; + 6928CD3F0FE0A55A006F5860 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; }; + 6928CD400FE0A55A006F5860 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; }; + 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; + 8D1107320486CEB800E47090 /* CrashReporter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CrashReporter.app; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8D11072E0486CEB800E47090 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 080E96DDFE201D6D7F000001 /* Classes */ = { + isa = PBXGroup; + children = ( + 6928CD3F0FE0A55A006F5860 /* AppDelegate.h */, + 6928CD400FE0A55A006F5860 /* AppDelegate.m */, + ); + name = Classes; + sourceTree = "<group>"; + }; + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = "<group>"; + }; + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 29B97324FDCFA39411CA2CEA /* AppKit.framework */, + 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */, + 29B97325FDCFA39411CA2CEA /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = "<group>"; + }; + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D1107320486CEB800E47090 /* CrashReporter.app */, + ); + name = Products; + sourceTree = "<group>"; + }; + 29B97314FDCFA39411CA2CEA /* CrashReporter */ = { + isa = PBXGroup; + children = ( + 080E96DDFE201D6D7F000001 /* Classes */, + 29B97315FDCFA39411CA2CEA /* Other Sources */, + 29B97317FDCFA39411CA2CEA /* Resources */, + 29B97323FDCFA39411CA2CEA /* Frameworks */, + 19C28FACFE9D520D11CA2CBB /* Products */, + ); + name = CrashReporter; + sourceTree = "<group>"; + }; + 29B97315FDCFA39411CA2CEA /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32CA4F630368D1EE00C91783 /* CrashReporter_Prefix.pch */, + 29B97316FDCFA39411CA2CEA /* main.m */, + ); + name = "Other Sources"; + sourceTree = "<group>"; + }; + 29B97317FDCFA39411CA2CEA /* Resources */ = { + isa = PBXGroup; + children = ( + 8D1107310486CEB800E47090 /* Info.plist */, + 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, + 1DDD58140DA1D0A300B32029 /* MainMenu.xib */, + ); + name = Resources; + sourceTree = "<group>"; + }; + 29B97323FDCFA39411CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8D1107260486CEB800E47090 /* CrashReporter */ = { + isa = PBXNativeTarget; + buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "CrashReporter" */; + buildPhases = ( + 8D1107290486CEB800E47090 /* Resources */, + 8D11072C0486CEB800E47090 /* Sources */, + 8D11072E0486CEB800E47090 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CrashReporter; + productInstallPath = "$(HOME)/Applications"; + productName = CrashReporter; + productReference = 8D1107320486CEB800E47090 /* CrashReporter.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "CrashReporter" */; + compatibilityVersion = "Xcode 3.1"; + hasScannedForEncodings = 1; + mainGroup = 29B97314FDCFA39411CA2CEA /* CrashReporter */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8D1107260486CEB800E47090 /* CrashReporter */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D1107290486CEB800E47090 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, + 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8D11072C0486CEB800E47090 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072D0486CEB800E47090 /* main.m in Sources */, + 6928CD410FE0A55A006F5860 /* AppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C165DFE840E0CC02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = "<group>"; + }; + 1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 1DDD58150DA1D0A300B32029 /* English */, + ); + name = MainMenu.xib; + sourceTree = "<group>"; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + C01FCF4B08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = CrashReporter_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Applications"; + PRODUCT_NAME = CrashReporter; + }; + name = Debug; + }; + C01FCF4C08A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_MODEL_TUNING = G5; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = CrashReporter_Prefix.pch; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Applications"; + PRODUCT_NAME = CrashReporter; + }; + name = Release; + }; + C01FCF4F08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + SDKROOT = macosx10.5; + }; + name = Debug; + }; + C01FCF5008A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = macosx10.5; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "CrashReporter" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4B08A954540054247B /* Debug */, + C01FCF4C08A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "CrashReporter" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4F08A954540054247B /* Debug */, + C01FCF5008A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} diff --git a/tools/define_versions.sh b/tools/define_versions.sh index 9acf95a650..a0642cec02 100644 --- a/tools/define_versions.sh +++ b/tools/define_versions.sh @@ -12,8 +12,26 @@ GIT_REV_REGEXP='([0-9][0-9]*)\.([0-9][0-9]*)\-?(rc[0-9]*)?-?([0-9][0-9]*)?(-g([a major_version=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\1/"` minor_version=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\2/"` + +# Tracks tags with "MAJOR.MINOR.MICRO" +# Ardour doesn't use this + +micro_version=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\3/"` + +# +# RC e.g. 8.1-rc3 (optional) +# Tracks does not use -rcN based tagging +# rc=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\3/"` + +# +# revision count since tag +# r=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\4/"` + +# +# git short sha1 commit ID +# commit=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed $EXTENDED_RE -e 1d -e "s/$GIT_REV_REGEXP/\6/"` if [ "x$rc" != "x" ] ; then diff --git a/tools/linux_packaging/ardour.sh.in b/tools/linux_packaging/ardour.sh.in index aa84f08323..21068da2eb 100644 --- a/tools/linux_packaging/ardour.sh.in +++ b/tools/linux_packaging/ardour.sh.in @@ -25,11 +25,6 @@ BIN_DIR=$(dirname $(readlink -f $0)) INSTALL_DIR=$(dirname $BIN_DIR) LIB_DIR=$INSTALL_DIR/lib ETC_DIR=$INSTALL_DIR/etc -USER_ARDOUR_DIR=$HOME/.config/ardour3 - -if [ ! -d $USER_ARDOUR_DIR ] ; then - mkdir -p $USER_ARDOUR_DIR || exit 1 -fi # this triggers code in main() that will reset runtime environment variables # to point to directories inside the ardour package @@ -51,9 +46,9 @@ export LD_LIBRARY_PATH=$INSTALL_DIR/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} if [ "T" = "$DEBUG" ]; then export ARDOUR_INSIDE_GDB=1 - exec gdb $INSTALL_DIR/bin/ardour-%VER% + exec gdb $INSTALL_DIR/bin/%EXENAME%-%VER% else - exec $INSTALL_DIR/bin/ardour-%VER% $ARGS + exec $INSTALL_DIR/bin/%EXENAME%-%VER% $ARGS fi diff --git a/tools/linux_packaging/build b/tools/linux_packaging/build index d0f9a9099f..cc6c30a904 100755 --- a/tools/linux_packaging/build +++ b/tools/linux_packaging/build @@ -22,6 +22,8 @@ if test -z "$CACHEDIR" -o ! -d "$CACHEDIR"; then fi MIXBUS= +WITH_HARRISON_LV2= +WITH_X42_LV2= WITH_LADSPA=0 WITH_HARVID= STRIP=all @@ -29,6 +31,7 @@ PRINT_SYSDEPS= WITH_NLS= EXTERNAL_JACK= VENDOR=Ardour ; +EXENAME=ardour BUILDTYPE="" @@ -51,11 +54,14 @@ while [ $# -gt 0 ] ; do --mixbus) MIXBUS=1; + WITH_HARRISON_LV2=1 ; + WITH_X42_LV2=1 ; WITH_NLS=1 ; WITH_LADSPA=; STRIP=all APPNAME=Mixbus ; - VENDOR=Harrison ; + VENDOR=Harrison ; + EXENAME=mixbus ; shift ;; --public) WITH_NLS=1 ; @@ -113,6 +119,7 @@ case `uname -m` in echo "Architecture is x86" ARCH='x86' WARCH='i386' + HARCH='linux32' ARCH_BITS='32-bit' MULTIARCH='i386-linux-gnu' ;; @@ -120,6 +127,7 @@ case `uname -m` in echo "Architecture is x86_64" ARCH='x86_64' WARCH='x86_64' + HARCH='linux64' ARCH_BITS='64-bit' MULTIARCH='x86_64-linux-gnu' ;; @@ -235,14 +243,13 @@ echo export 'PATH=/usr/local/bin:/opt/bin:$PATH' >> $ENVIRONMENT # create startup helper script -sed -e "/^%ENV%/r $ENVIRONMENT" -e '/^%ENV%/d' -e 's/%VER%/'"${release_version}"'/' < ardour.sh.in > $APPBIN/ardour${major_version} -rm $ENVIRONMENT && chmod 775 $APPBIN/ardour${major_version} -MAIN_EXECUTABLE=ardour-${release_version} +sed -e "/^%ENV%/r $ENVIRONMENT" -e '/^%ENV%/d' -e 's/%VER%/'"${release_version}"'/;s/%EXENAME%/'"${EXENAME}"'/' < ardour.sh.in > $APPBIN/${EXENAME}${major_version} +rm $ENVIRONMENT && chmod 775 $APPBIN/${EXENAME}${major_version} echo "Copying ardour executable ...." -cp $BUILD_ROOT/gtk2_ardour/$MAIN_EXECUTABLE $APPBIN +cp -v $BUILD_ROOT/gtk2_ardour/ardour-${release_version} $APPBIN/${EXENAME}-${release_version} if test x$STRIP = xall ; then - strip $APPBIN/$MAIN_EXECUTABLE + strip $APPBIN/${EXENAME}-${release_version} fi # copy locale files @@ -424,7 +431,7 @@ deplibs= while [ true ] ; do missing=false filelist=`find $APPLIB/ -type f` - filelist="$APPBIN/$MAIN_EXECUTABLE $filelist" + filelist="$APPBIN/${EXENAME}-${release_version} $filelist" for file in $filelist ; do if ! file $file | grep -qs ELF ; then @@ -572,26 +579,49 @@ done ################################################################################ ### Mixbus plugins, etc +if test x$WITH_HARRISON_LV2 != x ; then + echo "Adding Harrison LV2s" + mkdir -p $APPLIB/LV2 + + curl -s -S --fail -# \ + -z "${CACHEDIR}/harrison_lv2s.${HARCH}.zip" \ + -o "${CACHEDIR}/harrison_lv2s.${HARCH}.zip" \ + http://www.harrisonconsoles.com/mixbus/mb3/${HARCH}/harrison_lv2s.zip + unzip -q -d "$APPLIB/LV2/" "${CACHEDIR}/harrison_lv2s.${HARCH}.zip" +fi + if test -n "$MIXBUS"; then + echo "Adding Mixbus Channelstrip" - mkdir -p $APPLIB/LV2 - METERS_VERSION=$(curl -s -S http://gareus.org/x42/linux/x42-meters.latest.txt) + mkdir -p $APPLIB/ladspa/strip/ + curl -s -S --fail -# \ + -z "${CACHEDIR}/harrison_channelstrip.${HARCH}.so" \ + -o "${CACHEDIR}/harrison_channelstrip.${HARCH}.so" \ + http://www.harrisonconsoles.com/mixbus/mb3/${HARCH}/harrison_channelstrip.so + + cp "${CACHEDIR}/harrison_channelstrip.${HARCH}.so" \ + $APPLIB/ladspa/strip/harrison_channelstrip.so + chmod +x $APPLIB/ladspa/strip/harrison_channelstrip.so +fi + +if test x$WITH_X42_LV2 != x ; then + METERS_VERSION=$(curl -s -S http://x42-plugins.com/x42/linux/x42-meters.latest.txt) rsync -a -q --partial \ - rsync://gareus.org/x42/linux/x42-meters-lv2-${WARCH}-${METERS_VERSION}.zip \ - "${SRCDIR}/x42-meters-lv2-linux-${WARCH}-${METERS_VERSION}.zip" - unzip -d "$APPLIB/LV2/" "${SRCDIR}/x42-meters-lv2-linux-${WARCH}-${METERS_VERSION}.zip" + rsync://x42-plugins.com/x42/linux/x42-meters-lv2-linux-${WARCH}-${METERS_VERSION}.zip \ + "${CACHEDIR}/x42-meters-lv2-linux-${WARCH}-${METERS_VERSION}.zip" + unzip -q -d "$APPLIB/LV2/" "${CACHEDIR}/x42-meters-lv2-linux-${WARCH}-${METERS_VERSION}.zip" - SETBFREE_VERSION=$(curl -s -S http://gareus.org/x42/linux/setBfree.latest.txt) + SETBFREE_VERSION=$(curl -s -S http://x42-plugins.com/x42/linux/setBfree.latest.txt) rsync -a -q --partial \ - rsync://gareus.org/x42/linux/setBfree-lv2-linux-${WARCH}-${SETBFREE_VERSION}.zip \ - "${SRCDIR}/setBfree-lv2-linux-${WARCH}-${SETBFREE_VERSION}.zip" - unzip -d "$APPLIB/LV2/" "${SRCDIR}/setBfree-lv2-linux-${WARCH}-${SETBFREE_VERSION}.zip" + rsync://x42-plugins.com/x42/linux/setBfree-lv2-linux-${WARCH}-${SETBFREE_VERSION}.zip \ + "${CACHEDIR}/setBfree-lv2-linux-${WARCH}-${SETBFREE_VERSION}.zip" + unzip -q -d "$APPLIB/LV2/" "${CACHEDIR}/setBfree-lv2-linux-${WARCH}-${SETBFREE_VERSION}.zip" - MIDIFILTER_VERSION=$(curl -s -S http://gareus.org/x42/linux/x42-midifilter.latest.txt) + MIDIFILTER_VERSION=$(curl -s -S http://x42-plugins.com/x42/linux/x42-midifilter.latest.txt) rsync -a -q --partial \ - rsync://gareus.org/x42/linux/x42-midifilter-lv2-linux-${WARCH}-${MIDIFILTER_VERSION}.zip \ - "${SRCDIR}/x42-midifilter-lv2-linux-${WARCH}-${MIDIFILTER_VERSION}.zip" - unzip -d "$APPLIB/LV2/" "${SRCDIR}/x42-midifilter-lv2-linux-${WARCH}-${MIDIFILTER_VERSION}.zip" + rsync://x42-plugins.com/x42/linux/x42-midifilter-lv2-linux-${WARCH}-${MIDIFILTER_VERSION}.zip \ + "${CACHEDIR}/x42-midifilter-lv2-linux-${WARCH}-${MIDIFILTER_VERSION}.zip" + unzip -q -d "$APPLIB/LV2/" "${CACHEDIR}/x42-midifilter-lv2-linux-${WARCH}-${MIDIFILTER_VERSION}.zip" fi ################################################################################ @@ -630,7 +660,7 @@ chmod a+x $APPBIN/${APP_VER_NAME}.uninstall.sh # # Add the stage2.run script # -sed -e "s/%REPLACE_MAJOR_VERSION%/${major_version}/" < stage2.run.in > stage2.run +sed -e "s/%REPLACE_MAJOR_VERSION%/${major_version}/;s/%REPLACE_PGM%/${APPNAME}/;s/%REPLACE_VENDOR%/${VENDOR}/;s/%REPLACE_EXE%/${EXENAME}/" < stage2.run.in > stage2.run chmod a+x stage2.run diff --git a/tools/linux_packaging/stage2.run.in b/tools/linux_packaging/stage2.run.in index 87f2401fba..f3ea8424f1 100755 --- a/tools/linux_packaging/stage2.run.in +++ b/tools/linux_packaging/stage2.run.in @@ -10,9 +10,9 @@ MAJOR_VERSION="%REPLACE_MAJOR_VERSION%" -PGM_NAME="Ardour" -PGM_VENDOR="Ardour" -PGM_EXEC_FILE="ardour${MAJOR_VERSION}" +PGM_NAME="%REPLACE_PGM%" +PGM_VENDOR="%REPLACE_VENDOR%" +PGM_EXEC_FILE="%REPLACE_EXE%${MAJOR_VERSION}" THE_SHELL="/bin/sh" @@ -351,7 +351,7 @@ LIB_ERROR="F" LD_PATH=`pwd`/${BUNDLE_DIR}/lib # check the main App -LDD_RESULT=$(LD_LIBRARY_PATH=${LD_PATH} ldd ${BUNDLE_DIR}/bin/${PGM_NAME_LOWER}-* 2>&1 > /dev/null) +LDD_RESULT=$(LD_LIBRARY_PATH=${LD_PATH} ldd ${BUNDLE_DIR}/bin/${PGM_NAME_LOWER}-* 2>&1 > /dev/null | grep -v "no version information") if [ -n "$LDD_RESULT" ]; then @@ -364,7 +364,7 @@ LIB_FILES=$(find ${BUNDLE_DIR}/lib -name "*.so") for path in $LIB_FILES do - LDD_RESULT=$(LD_LIBRARY_PATH=${LD_PATH} ldd $path 2>&1 > /dev/null) + LDD_RESULT=$(LD_LIBRARY_PATH=${LD_PATH} ldd $path 2>&1 > /dev/null | grep -v "no version information") if [ -n "$LDD_RESULT" ]; then echo "$LDD_RESULT" diff --git a/tools/osx_packaging/osx_build b/tools/osx_packaging/osx_build index 757835b1bd..778805c968 100755 --- a/tools/osx_packaging/osx_build +++ b/tools/osx_packaging/osx_build @@ -18,6 +18,7 @@ SAE= MIXBUS= WITH_HARVID=1 WITH_HARRISON_LV2= +WITH_X42_LV2= WITH_LADSPA=1 STRIP=1 PRINT_SYSDEPS= @@ -39,11 +40,13 @@ while [ $# -gt 0 ] ; do APPNAME=Ardour ; shift ;; --mixbus) MIXBUS=1; + WITH_HARRISON_LV2=1 ; + WITH_X42_LV2=1 ; WITH_NLS=1 ; SAE= ; WITH_LADSPA=; STRIP= ; - PRODUCT_PKG_DIR=MixBus; + PRODUCT_PKG_DIR=Mixbus; APPNAME=Mixbus ; shift ;; --public) WITH_NLS= ; @@ -571,8 +574,14 @@ if test x$WITH_HARRISON_LV2 != x ; then else OSX_ARCH=osx32 fi - curl -s http://www.harrisonconsoles.com/mixbus/mb3/${OSX_ARCH}/harrison_lv2s.zip \ - | bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf - + curl -s -S --fail -# \ + -z "${CACHEDIR}/harrison_lv2s.${OSX_ARCH}.zip" \ + -o "${CACHEDIR}/harrison_lv2s.${OSX_ARCH}.zip" \ + http://www.harrisonconsoles.com/mixbus/mb3/${OSX_ARCH}/harrison_lv2s.zip + + mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2" + bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \ + "${CACHEDIR}/harrison_lv2s.${OSX_ARCH}.zip" fi if test x$WITH_HARVID != x ; then @@ -605,9 +614,9 @@ if test x$WITH_HARVID != x ; then DMGBACKGROUND=${DMGBACKGROUND}xj fi -################################################################### +################################################################################ ### Mixbus plugins, etc -if test -n "$MIXBUS"; then +if test x$WITH_X42_LV2 != x ; then echo "bundling x42 plugins" if file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q x86_64; then OSX_ARCH=x86_64 @@ -617,23 +626,23 @@ if test -n "$MIXBUS"; then mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2" - METERS_VERSION=$(curl -s -S http://gareus.org/x42/osx/x42-meters.latest.txt) + METERS_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/x42-meters.latest.txt) rsync -a -q --partial \ - rsync://gareus.org/x42/osx/x42-meters-lv2-osx-${METERS_VERSION}.zip \ + rsync://x42-plugins.com/x42/osx/x42-meters-lv2-osx-${METERS_VERSION}.zip \ "$CACHEDIR/x42-meters-lv2-osx-${METERS_VERSION}.zip" bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \ "$CACHEDIR/x42-meters-lv2-osx-${METERS_VERSION}.zip" - SETBFREE_VERSION=$(curl -s -S http://gareus.org/x42/osx/setBfree.latest.txt) + SETBFREE_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/setBfree.latest.txt) rsync -a -q --partial \ - rsync://gareus.org/x42/osx/setBfree-lv2-osx-${SETBFREE_VERSION}.zip \ + rsync://x42-plugins.com/x42/osx/setBfree-lv2-osx-${SETBFREE_VERSION}.zip \ "$CACHEDIR/setBfree-lv2-osx-${SETBFREE_VERSION}.zip" bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \ "$CACHEDIR/setBfree-lv2-osx-${SETBFREE_VERSION}.zip" - MIDIFILTER_VERSION=$(curl -s -S http://gareus.org/x42/osx/x42-midifilter.latest.txt) + MIDIFILTER_VERSION=$(curl -s -S http://x42-plugins.com/x42/osx/x42-midifilter.latest.txt) rsync -a -q --partial \ - rsync://gareus.org/x42/osx/x42-midifilter-lv2-osx-${MIDIFILTER_VERSION}.zip \ + rsync://x42-plugins.com/x42/osx/x42-midifilter-lv2-osx-${MIDIFILTER_VERSION}.zip \ "$CACHEDIR/x42-midifilter-lv2-osx-${MIDIFILTER_VERSION}.zip" bsdtar -C "${PRODUCT_PKG_DIR}/${APPROOT}/lib/LV2/" -xf \ "$CACHEDIR/x42-midifilter-lv2-osx-${MIDIFILTER_VERSION}.zip" @@ -642,7 +651,26 @@ if test -n "$MIXBUS"; then lipo -thin ${OSX_ARCH} ${file} -output ${file}.thin mv ${file}.thin ${file} done +fi + +if test -n "$MIXBUS"; then + if file ${PRODUCT_PKG_DIR}/$APPROOT/MacOS/$MAIN_EXECUTABLE | grep -q x86_64; then + OSX_ARCH=osx64 + else + OSX_ARCH=osx32 + fi + + echo "deploying harrison tools for $OSX_ARCH" + + mkdir -p "${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip" + + curl -s -S --fail -# \ + -z "${CACHEDIR}/harrison_channelstrip.${OSX_ARCH}.so" \ + -o "${CACHEDIR}/harrison_channelstrip.${OSX_ARCH}.so" \ + http://www.harrisonconsoles.com/mixbus/mb3/${OSX_ARCH}/harrison_channelstrip.so + cp "${CACHEDIR}/harrison_channelstrip.${OSX_ARCH}.so" \ + "${PRODUCT_PKG_DIR}/${APPROOT}/lib/ladspa/strip/harrison_channelstrip.so" fi ################################################################################ @@ -700,6 +728,7 @@ osascript << EOF activate tell disk "${DISKNAME}" open + delay 2 set current view of container window to icon view set toolbar visible of container window to false set statusbar visible of container window to false diff --git a/tools/x-win/package.sh b/tools/x-win/package.sh index 8a1da07eda..65ae2ab640 100755 --- a/tools/x-win/package.sh +++ b/tools/x-win/package.sh @@ -36,13 +36,21 @@ PROGRAM_VERSION=${major_version} LOWERCASE_DIRNAME=ardour${major_version} STATEFILE_SUFFIX=ardour # see filename_extensions.cc +BIT_SUFFIX="" + if test -n "$MIXBUS"; then - PROGRAM_NAME=Mixbus - PRODUCT_NAME=mixbus + if test "$XARCH" = "x86_64"; then + PROGRAM_NAME=Mixbus + PRODUCT_NAME=mixbus + else + PROGRAM_NAME=Mixbus + PRODUCT_NAME=mixbus + BIT_SUFFIX="(x86)" + fi fi # derived variables -PRODUCT_ID=${PROGRAM_NAME}${PROGRAM_VERSION} +PRODUCT_ID=${PROGRAM_NAME}${PROGRAM_VERSION}${BIT_SUFFIX} PRODUCT_EXE=${PRODUCT_NAME}.exe PRODUCT_ICON=${PRODUCT_NAME}.ico @@ -225,27 +233,53 @@ fi ################################################################################ ### Mixbus plugins, etc -if test -n "$MIXBUS"; then - +if test -n "$MIXBUS"; then # TODO use separate variable mkdir -p $ALIBDIR/LV2 - METERS_VERSION=$(curl -s -S http://gareus.org/x42/win/x42-meters.latest.txt) + + echo "Adding x42 Plugins" + + METERS_VERSION=$(curl -s -S http://x42-plugins.com/x42/win/x42-meters.latest.txt) rsync -a -q --partial \ - rsync://gareus.org/x42/win/x42-meters-lv2-${WARCH}-${METERS_VERSION}.zip \ + rsync://x42-plugins.com/x42/win/x42-meters-lv2-${WARCH}-${METERS_VERSION}.zip \ "${SRCDIR}/x42-meters-lv2-${WARCH}-${METERS_VERSION}.zip" unzip -d "$ALIBDIR/LV2/" "${SRCDIR}/x42-meters-lv2-${WARCH}-${METERS_VERSION}.zip" - SETBFREE_VERSION=$(curl -s -S http://gareus.org/x42/win/setBfree.latest.txt) + SETBFREE_VERSION=$(curl -s -S http://x42-plugins.com/x42/win/setBfree.latest.txt) rsync -a -q --partial \ - rsync://gareus.org/x42/win/setBfree-lv2-${WARCH}-${SETBFREE_VERSION}.zip \ + rsync://x42-plugins.com/x42/win/setBfree-lv2-${WARCH}-${SETBFREE_VERSION}.zip \ "${SRCDIR}/setBfree-lv2-${WARCH}-${SETBFREE_VERSION}.zip" unzip -d "$ALIBDIR/LV2/" "${SRCDIR}/setBfree-lv2-${WARCH}-${SETBFREE_VERSION}.zip" - MIDIFILTER_VERSION=$(curl -s -S http://gareus.org/x42/win/x42-midifilter.latest.txt) + MIDIFILTER_VERSION=$(curl -s -S http://x42-plugins.com/x42/win/x42-midifilter.latest.txt) rsync -a -q --partial \ - rsync://gareus.org/x42/win/x42-midifilter-lv2-${WARCH}-${MIDIFILTER_VERSION}.zip \ + rsync://x42-plugins.com/x42/win/x42-midifilter-lv2-${WARCH}-${MIDIFILTER_VERSION}.zip \ "${SRCDIR}/x42-midifilter-lv2-${WARCH}-${MIDIFILTER_VERSION}.zip" unzip -d "$ALIBDIR/LV2/" "${SRCDIR}/x42-midifilter-lv2-${WARCH}-${MIDIFILTER_VERSION}.zip" +fi + +if test -n "$MIXBUS"; then # TODO use separate variable + mkdir -p $ALIBDIR/LV2 + + echo "Including Harrison LV2s" + + curl -s -S --fail -# \ + -z "${SRCDIR}/harrison_lv2s.${WARCH}.zip" \ + -o "${SRCDIR}/harrison_lv2s.${WARCH}.zip" \ + http://www.harrisonconsoles.com/mixbus/mb3/${WARCH}/harrison_lv2s.zip + unzip -q -d "$ALIBDIR/LV2/" "${SRCDIR}/harrison_lv2s.${WARCH}.zip" +fi + +if test -n "$MIXBUS"; then + echo "Deploying Harrison Mixbus Channelstrip" + + mkdir -p $ALIBDIR/ladspa/strip + curl -s -S --fail -# \ + -z "${SRCDIR}/harrison_channelstrip.${WARCH}.dll" \ + -o "${SRCDIR}/harrison_channelstrip.${WARCH}.dll" \ + http://www.harrisonconsoles.com/mixbus/mb3/${WARCH}/harrison_channelstrip.dll + cp "${SRCDIR}/harrison_channelstrip.${WARCH}.dll" \ + "$ALIBDIR/ladspa/strip/rrison_channelstrip.dll" fi ################################################################################ @@ -290,10 +324,10 @@ if test -n "$MIXBUS"; then # TODO: proper welcome/finish text. cat >> $NSISFILE << EOF -!define MUI_FINISHPAGE_TITLE "Welcome to Mixbus" -!define MUI_FINISHPAGE_TEXT "Thank you for choosing Harrison Mixbus." -!define MUI_FINISHPAGE_LINK "Harrison Consoles Website" -!define MUI_FINISHPAGE_LINK_LOCATION "http://harrisonconsoles.com" +!define MUI_FINISHPAGE_TITLE "Welcome to Harrison Mixbus" +!define MUI_FINISHPAGE_TEXT "Thanks for your purchase of Mixbus!\$\\r\$\\nYou will find the Mixbus application in the Start Menu (or the All Apps panel for Windows 8) \$\\r\$\\nClick the link below to view the Mixbus manual, and learn ways to get involved with the Mixbus community." +!define MUI_FINISHPAGE_LINK "Mixbus Manual" +!define MUI_FINISHPAGE_LINK_LOCATION "http://www.harrisonconsoles.com/mixbus/mixbus3-live-manual" !define MUI_FINISHPAGE_NOREBOOTSUPPORT EOF @@ -8,8 +8,9 @@ import subprocess import sys import platform as PLATFORM from waflib.Tools import winres - +from waflib.Build import Context from waflib.Build import BuildContext + class i18n(BuildContext): cmd = 'i18n' fun = 'i18n' @@ -26,6 +27,10 @@ class i18n_mo(BuildContext): cmd = 'i18n_mo' fun = 'i18n_mo' +def is_tracks_build(self, *k, **kw): + return self.env['PROGRAM_NAME'] == 'Tracks Live' + +Context.Context.is_tracks_build = is_tracks_build compiler_flags_dictionaries= { 'gcc' : { @@ -73,6 +78,12 @@ compiler_flags_dictionaries= { 'c99': '-std=c99', # Flag to enable AT&T assembler syntax 'attasm': '-masm=att', + # Flags to make AVX instructions/intrinsics available + 'avx': '-mavx', + # Flags to generate position independent code, when needed to build a shared object + 'pic': '-fPIC', + # Flags required to compile C code with anonymous unions (only part of C11) + 'c-anonymous-union': '-fms-extensions', }, 'msvc' : { 'debuggable' : ['/DDEBUG', '/Od', '/Zi', '/MDd', '/Gd', '/EHsc'], @@ -100,6 +111,10 @@ compiler_flags_dictionaries= { 'cxx-strict' : '', 'strict' : '', 'c99': '/TP', + 'attasm': '', + 'avx': '', + 'pic': '', + 'c-anonymous-union': '', }, } @@ -164,8 +179,12 @@ else: MICRO = '0' V = MAJOR + '.' + MINOR + '.' + MICRO -VERSION = V -PROGRAM_VERSION = MAJOR +# Ensure that these are not unicode, which +# can cause odd problems elsewhere. Note that +# in python3, encode and decode do not return +# strings, so we have to force the type. +VERSION = str (V.encode ('ascii', 'ignore')) +PROGRAM_VERSION = str (MAJOR.encode ('ascii', 'ignore')) # Mandatory variables top = '.' @@ -291,8 +310,12 @@ int main() { return 0; }''', else: compiler_name = 'gcc' - flags_dict = compiler_flags_dictionaries[compiler_name] - + flags_dict = compiler_flags_dictionaries[compiler_name] + # Save the compiler flags because we need them at build time + # when we need to add compiler specific flags in certain + # libraries + conf.env['compiler_flags_dict'] = flags_dict; + autowaf.set_basic_compiler_flags (conf,flags_dict) if conf.options.asan: @@ -412,12 +435,12 @@ int main() { return 0; }''', if (re.search ("(x86_64|AMD64)", cpu) != None): # on Windows sse is supported by 64 bit platforms only build_host_supports_sse = True - + # mingw GCC compiler to uses at&t (Unix specific) assembler dialect by default # compiler_flags.append (["--mmnemonic=att", "msyntax=att") compiler_flags.extend ([ flags_dict['sse'], flags_dict['fpmath-sse'], flags_dict['xmmintrinsics'], flags_dict['attasm'] ]) - + # end of processor-specific section # optimization section @@ -426,13 +449,13 @@ int main() { return 0; }''', compiler_flags.append("-DBUILD_VECLIB_OPTIMIZATIONS"); conf.env.append_value('LINKFLAGS_OSX', ['-framework', 'Accelerate']) elif conf.env['build_target'] == 'i686' or conf.env['build_target'] == 'x86_64': - compiler_flags.append ("-DBUILD_SSE_OPTIMIZATIONS") + compiler_flags.append ("-DBUILD_SSE_OPTIMIZATIONS") elif conf.env['build_target'] == 'mingw': - # usability of the 64 bit windows assembler depends on the compiler target, - # not the build host, which in turn can only be inferred from the name - # of the compiler. - if re.search ('/^x86_64/', str(conf.env['CC'])): - compiler_flags.append ("-DBUILD_SSE_OPTIMIZATIONS") + # usability of the 64 bit windows assembler depends on the compiler target, + # not the build host, which in turn can only be inferred from the name + # of the compiler. + if re.search ('/^x86_64/', str(conf.env['CC'])): + compiler_flags.append ("-DBUILD_SSE_OPTIMIZATIONS") if not build_host_supports_sse: print("\nWarning: you are building Ardour with SSE support even though your system does not support these instructions. (This may not be an error, especially if you are a package maintainer)") @@ -558,6 +581,8 @@ int main() { return 0; }''', compiler_flags.append ('-DPROGRAM_NAME="' + Options.options.program_name + '"') compiler_flags.append ('-DPROGRAM_VERSION="' + PROGRAM_VERSION + '"') + conf.env['PROGRAM_NAME'] = Options.options.program_name + if opt.debug: conf.env.append_value('CFLAGS', debug_flags) conf.env.append_value('CXXFLAGS', debug_flags) @@ -575,6 +600,9 @@ int main() { return 0; }''', conf.env.append_value('CXXFLAGS', cxx_flags) conf.env.append_value('LINKFLAGS', linker_flags) +def is_tracks_build (conf): + return conf.env['PROGRAM_NAME'] == 'Tracks Live' + #---------------------------------------------------------------- # Waf stages @@ -585,8 +613,6 @@ def options(opt): autowaf.set_options(opt, debug_by_default=True) opt.add_option('--program-name', type='string', action='store', default='Ardour', dest='program_name', help='The user-visible name of the program being built') - opt.add_option ('--trx', action='store_true', default=False, dest='trx_build', - help='Whether to build for TRX') opt.add_option('--arch', type='string', action='store', dest='arch', help='Architecture-specific compiler FLAGS') opt.add_option('--with-backends', type='string', action='store', default='jack', dest='with_backends', @@ -706,6 +732,7 @@ def configure(conf): conf.env['VERSION'] = VERSION conf.env['MAJOR'] = MAJOR conf.env['MINOR'] = MINOR + conf.env['MICRO'] = MICRO conf.line_just = 52 autowaf.set_recursive() autowaf.configure(conf) @@ -759,9 +786,6 @@ def configure(conf): conf.env.append_value ('CXXFLAGS', '-DSILENCE_AFTER') conf.define ('FREEBIE', 1) - if Options.options.trx_build: - conf.define ('TRX_BUILD', 1) - if Options.options.lv2dir: conf.env['LV2DIR'] = Options.options.lv2dir else: @@ -889,7 +913,9 @@ def configure(conf): lib='regex', uselib_store="REGEX", define_name='HAVE_REGEX_H') # TODO put this only where it is needed conf.env.append_value('LIB', 'regex') - + # TODO this should only be necessary for a debug build + conf.env.append_value('LIB', 'dbghelp') + # work around GdkDrawable BitBlt performance issue on windows # see http://gareus.org/wiki/ardour_windows_gdk_and_cairo conf.env.append_value('CFLAGS', '-DUSE_CAIRO_IMAGE_SURFACE') @@ -974,10 +1000,16 @@ def configure(conf): autowaf.check_pkg(conf, 'cppunit', uselib_store='CPPUNIT', atleast_version='1.12.0', mandatory=True) backends = opts.with_backends.split(',') + if not backends: print("Must configure and build at least one backend") sys.exit(1) + if conf.is_tracks_build(): + # For Tracks, override backends on OS X or Windows + if sys.platform == 'darwin' or sys.platform == 'mingw' or sys.platform == 'msvc': + backends = [ 'wavesaudio' ] + conf.env['BACKENDS'] = backends conf.env['BUILD_JACKBACKEND'] = any('jack' in b for b in backends) conf.env['BUILD_ALSABACKEND'] = any('alsa' in b for b in backends) @@ -1001,7 +1033,6 @@ def configure(conf): print("ALSA Backend is only available on Linux") sys.exit(1) - set_compiler_flags (conf, Options.options) if sys.platform == 'darwin': @@ -1101,9 +1132,11 @@ def build(bld): # set up target directories lwrcase_dirname = 'ardour' + bld.env['MAJOR'] - if bld.is_defined ('TRX_BUILD'): + if bld.is_tracks_build(): + bld.env.append_value ('CXXFLAGS', '-DUSE_TRACKS_CODE_FEATURES') + bld.env.append_value ('CFLAGS', '-DUSE_TRACKS_CODE_FEATURES') lwrcase_dirname = 'trx' - + # configuration files go here bld.env['CONFDIR'] = os.path.join(bld.env['SYSCONFDIR'], lwrcase_dirname) # data files loaded at run time go here |