summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MSVCardour3/Ardour3.vcproj4
-rw-r--r--cfgtool/cfgtool.cc3
-rw-r--r--cfgtool/wscript2
-rw-r--r--gtk2_ardour/add_video_dialog.cc7
-rw-r--r--gtk2_ardour/ardour.menus.in2
-rw-r--r--gtk2_ardour/ardour_dropdown.cc2
-rw-r--r--gtk2_ardour/ardour_dropdown.h2
-rw-r--r--gtk2_ardour/ardour_knob.cc2
-rw-r--r--gtk2_ardour/ardour_ui.cc56
-rw-r--r--gtk2_ardour/ardour_ui.h5
-rw-r--r--gtk2_ardour/ardour_ui2.cc4
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc143
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc7
-rw-r--r--gtk2_ardour/ardour_ui_mixer.cc2
-rw-r--r--gtk2_ardour/ardour_ui_options.cc3
-rw-r--r--gtk2_ardour/audio_clock.cc6
-rw-r--r--gtk2_ardour/audio_clock.h4
-rw-r--r--gtk2_ardour/audio_region_view.cc40
-rw-r--r--gtk2_ardour/editor.cc19
-rw-r--r--gtk2_ardour/editor.h9
-rw-r--r--gtk2_ardour/editor_actions.cc2
-rw-r--r--gtk2_ardour/editor_canvas.cc13
-rw-r--r--gtk2_ardour/editor_drag.cc12
-rw-r--r--gtk2_ardour/editor_drag.h33
-rw-r--r--gtk2_ardour/editor_ops.cc170
-rw-r--r--gtk2_ardour/editor_selection.cc34
-rw-r--r--gtk2_ardour/engine_dialog.cc2
-rw-r--r--gtk2_ardour/insert_remove_time_dialog.cc (renamed from gtk2_ardour/insert_time_dialog.cc)58
-rw-r--r--gtk2_ardour/insert_remove_time_dialog.h (renamed from gtk2_ardour/insert_time_dialog.h)4
-rw-r--r--gtk2_ardour/macosx/tracks.xcodeproj/project.pbxproj2987
-rw-r--r--gtk2_ardour/meter_patterns.cc10
-rw-r--r--gtk2_ardour/meterbridge.cc3
-rw-r--r--gtk2_ardour/midi_list_editor.cc2
-rw-r--r--gtk2_ardour/mixer_strip.cc23
-rw-r--r--gtk2_ardour/mixer_ui.cc39
-rw-r--r--gtk2_ardour/mixer_ui.h4
-rw-r--r--gtk2_ardour/mnemonic-us.bindings.in9
-rw-r--r--gtk2_ardour/opts.cc2
-rw-r--r--gtk2_ardour/panner_interface.cc2
-rw-r--r--gtk2_ardour/pingback.cc96
-rw-r--r--gtk2_ardour/plugin_selector.cc12
-rw-r--r--gtk2_ardour/plugin_selector.h1
-rw-r--r--gtk2_ardour/po/ru.po3849
-rw-r--r--gtk2_ardour/processor_box.cc5
-rw-r--r--gtk2_ardour/public_editor.h17
-rw-r--r--gtk2_ardour/rc_option_editor.cc212
-rw-r--r--gtk2_ardour/route_ui.cc5
-rw-r--r--gtk2_ardour/shuttle_control.cc15
-rw-r--r--gtk2_ardour/startup.cc34
-rw-r--r--gtk2_ardour/startup.h3
-rw-r--r--gtk2_ardour/step_editor.cc15
-rw-r--r--gtk2_ardour/time_axis_view_item.cc25
-rw-r--r--gtk2_ardour/transcode_ffmpeg.cc17
-rw-r--r--gtk2_ardour/transcode_video_dialog.cc38
-rw-r--r--gtk2_ardour/ui_config_vars.h1
-rw-r--r--gtk2_ardour/utils.cc37
-rw-r--r--gtk2_ardour/utils.h2
-rw-r--r--gtk2_ardour/video_timeline.cc3
-rw-r--r--gtk2_ardour/wscript34
-rw-r--r--libs/ardour/ardour/audio_diskstream.h9
-rw-r--r--libs/ardour/ardour/audio_unit.h5
-rw-r--r--libs/ardour/ardour/audioengine.h3
-rw-r--r--libs/ardour/ardour/audioregion.h6
-rw-r--r--libs/ardour/ardour/audiosource.h2
-rw-r--r--libs/ardour/ardour/butler.h2
-rw-r--r--libs/ardour/ardour/coreaudiosource.h2
-rw-r--r--libs/ardour/ardour/debug.h1
-rw-r--r--libs/ardour/ardour/directory_names.h4
-rw-r--r--libs/ardour/ardour/diskstream.h28
-rw-r--r--libs/ardour/ardour/engine_state_controller.h653
-rw-r--r--libs/ardour/ardour/export_format_base.h1
-rw-r--r--libs/ardour/ardour/export_format_specification.h41
-rw-r--r--libs/ardour/ardour/export_graph_builder.h37
-rw-r--r--libs/ardour/ardour/filter.h2
-rw-r--r--libs/ardour/ardour/location.h56
-rw-r--r--libs/ardour/ardour/midi_diskstream.h6
-rw-r--r--libs/ardour/ardour/midiport_manager.h3
-rw-r--r--libs/ardour/ardour/mix.h22
-rw-r--r--libs/ardour/ardour/plugin_insert.h1
-rw-r--r--libs/ardour/ardour/plugin_manager.h2
-rw-r--r--libs/ardour/ardour/port_insert.h2
-rw-r--r--libs/ardour/ardour/processor.h2
-rw-r--r--libs/ardour/ardour/rc_configuration_vars.h59
-rw-r--r--libs/ardour/ardour/recent_sessions.h3
-rw-r--r--libs/ardour/ardour/route.h3
-rw-r--r--libs/ardour/ardour/runtime_functions.h6
-rw-r--r--libs/ardour/ardour/scene_change.h22
-rw-r--r--libs/ardour/ardour/session.h85
-rw-r--r--libs/ardour/ardour/session_configuration_vars.h23
-rw-r--r--libs/ardour/ardour/session_event.h1
-rw-r--r--libs/ardour/ardour/slave.h28
-rw-r--r--libs/ardour/ardour/sndfilesource.h1
-rw-r--r--libs/ardour/ardour/tempo.h2
-rw-r--r--libs/ardour/ardour/types.h28
-rw-r--r--libs/ardour/ardour/utils.h2
-rw-r--r--libs/ardour/ardour/vst_info_file.h14
-rw-r--r--libs/ardour/audio_buffer.cc4
-rw-r--r--libs/ardour/audio_diskstream.cc125
-rw-r--r--libs/ardour/audio_track.cc28
-rw-r--r--libs/ardour/audio_unit.cc35
-rw-r--r--libs/ardour/audioengine.cc71
-rw-r--r--libs/ardour/audioregion.cc34
-rw-r--r--libs/ardour/audiosource.cc1
-rw-r--r--libs/ardour/auditioner.cc7
-rw-r--r--libs/ardour/butler.cc43
-rw-r--r--libs/ardour/debug.cc1
-rw-r--r--libs/ardour/directory_names.cc4
-rw-r--r--libs/ardour/diskstream.cc66
-rw-r--r--libs/ardour/engine_state_controller.cc1907
-rw-r--r--libs/ardour/enums.cc76
-rw-r--r--libs/ardour/export_format_specification.cc3
-rw-r--r--libs/ardour/export_graph_builder.cc163
-rw-r--r--libs/ardour/export_handler.cc4
-rw-r--r--libs/ardour/export_profile_manager.cc13
-rw-r--r--libs/ardour/filesystem_paths.cc15
-rw-r--r--libs/ardour/filter.cc21
-rw-r--r--libs/ardour/find_session.cc5
-rw-r--r--libs/ardour/globals.cc20
-rw-r--r--libs/ardour/io.cc8
-rw-r--r--libs/ardour/location.cc337
-rw-r--r--libs/ardour/ltc_slave.cc12
-rw-r--r--libs/ardour/macosx/libardour.xcodeproj/project.pbxproj3464
-rw-r--r--libs/ardour/midi_buffer.cc4
-rw-r--r--libs/ardour/midi_diskstream.cc2
-rw-r--r--libs/ardour/midi_scene_change.cc20
-rw-r--r--libs/ardour/midi_scene_changer.cc25
-rw-r--r--libs/ardour/midi_track.cc7
-rw-r--r--libs/ardour/mix.cc6
-rw-r--r--libs/ardour/mtc_slave.cc3
-rw-r--r--libs/ardour/parameter_descriptor.cc2
-rw-r--r--libs/ardour/playlist.cc2
-rw-r--r--libs/ardour/plugin_insert.cc9
-rw-r--r--libs/ardour/plugin_manager.cc85
-rw-r--r--libs/ardour/port.cc7
-rw-r--r--libs/ardour/port_insert.cc7
-rw-r--r--libs/ardour/port_manager.cc15
-rw-r--r--libs/ardour/quantize.cc106
-rw-r--r--libs/ardour/rc_configuration.cc1
-rw-r--r--libs/ardour/recent_sessions.cc73
-rw-r--r--libs/ardour/reverse.cc2
-rw-r--r--libs/ardour/route.cc106
-rw-r--r--libs/ardour/scene_change.cc10
-rw-r--r--libs/ardour/session.cc811
-rw-r--r--libs/ardour/session_events.cc6
-rw-r--r--libs/ardour/session_midi.cc14
-rw-r--r--libs/ardour/session_state.cc287
-rw-r--r--libs/ardour/session_transport.cc192
-rw-r--r--libs/ardour/source.cc6
-rw-r--r--libs/ardour/sse_avx_functions_64bit_win.s600
-rw-r--r--libs/ardour/sse_functions_avx.cc119
-rw-r--r--libs/ardour/sse_functions_avx_linux.cc56
-rw-r--r--libs/ardour/tempo.cc16
-rw-r--r--libs/ardour/track.cc61
-rw-r--r--libs/ardour/utils.cc17
-rw-r--r--libs/ardour/vst_info_file.cc12
-rw-r--r--libs/ardour/wscript49
-rw-r--r--libs/audiographer/macos/audiographer/audiographer.xcodeproj/project.pbxproj166
-rw-r--r--libs/audiographer/wscript2
-rw-r--r--libs/backends/coreaudio/coreaudio_backend.cc138
-rw-r--r--libs/backends/coreaudio/coreaudio_backend.h40
-rw-r--r--libs/backends/coreaudio/coremidi_io.cc60
-rw-r--r--libs/backends/dummy/dummy_audiobackend.cc2
-rw-r--r--libs/backends/jack/jack_audiobackend.cc8
-rw-r--r--libs/backends/jack/jack_portengine.cc9
-rw-r--r--libs/backends/jack/weak_libjack.def11
-rw-r--r--libs/backends/jack/weak_libjack.h12
-rw-r--r--libs/backends/jack/wscript22
-rw-r--r--libs/backends/portaudio/portaudio_io.cc3
-rw-r--r--libs/backends/wavesaudio/macosx/waves_audiobackend.xcodeproj/project.pbxproj517
-rw-r--r--libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.pbxproj594
-rw-r--r--libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata7
-rw-r--r--libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/project.xcworkspace/xcuserdata/VKamyshniy.xcuserdatad/UserInterfaceState.xcuserstatebin0 -> 5803 bytes
-rw-r--r--libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Assemble Application.xcscheme86
-rw-r--r--libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/Compile Java.xcscheme59
-rw-r--r--libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/CopyJavaSources.xcscheme59
-rw-r--r--libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme59
-rw-r--r--libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/PmDefaults.xcscheme59
-rw-r--r--libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/VKamyshniy.xcuserdatad/xcschemes/xcschememanagement.plist62
-rw-r--r--libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/Assemble Application.xcscheme86
-rw-r--r--libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/Compile Java.xcscheme59
-rw-r--r--libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/CopyJavaSources.xcscheme59
-rw-r--r--libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/JPortMidiHeaders.xcscheme59
-rw-r--r--libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/PmDefaults.xcscheme59
-rw-r--r--libs/backends/wavesaudio/portmidi/src/pm_mac/pm_mac.xcodeproj/pm_mac.xcodeproj/xcuserdata/gzharun.xcuserdatad/xcschemes/xcschememanagement.plist62
-rw-r--r--libs/backends/wavesaudio/waves_audiobackend.cc102
-rw-r--r--libs/backends/wavesaudio/waves_audiobackend.h2
-rw-r--r--libs/backends/wavesaudio/waves_audioport.cc33
-rw-r--r--libs/backends/wavesaudio/waves_audioport.h4
-rw-r--r--libs/backends/wavesaudio/waves_dataport.cc17
-rw-r--r--libs/backends/wavesaudio/waves_dataport.h1
-rw-r--r--libs/backends/wavesaudio/waves_midi_device.cc229
-rw-r--r--libs/backends/wavesaudio/waves_midi_device_manager.cc29
-rw-r--r--libs/backends/wavesaudio/waves_midi_event.cc177
-rw-r--r--libs/backends/wavesaudio/wavesapi/BasicTypes/WUDefines.h2
-rw-r--r--libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.cpp10
-rw-r--r--libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h5
-rw-r--r--libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.cpp120
-rw-r--r--libs/backends/wavesaudio/wavesapi/devicemanager/WCMRCoreAudioDeviceManager.h4
-rw-r--r--libs/backends/wavesaudio/wavesapi/devicemanager/WCMRNativeAudio.cpp4
-rw-r--r--libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp89
-rw-r--r--libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.h1
-rw-r--r--libs/backends/wavesaudio/wscript6
-rw-r--r--libs/canvas/canvas/wave_view.h25
-rw-r--r--libs/canvas/macosx/canvas/canvas.xcodeproj/project.pbxproj224
-rw-r--r--libs/canvas/wave_view.cc435
-rw-r--r--libs/canvas/wscript5
-rw-r--r--libs/canvas/xfade_curve.cc14
-rw-r--r--libs/evoral/src/libsmf/smf.h2
-rw-r--r--libs/evoral/src/libsmf/smf_load.c4
-rw-r--r--libs/gtkmm2ext/MSVCgtkmm2ext/gtkmm2ext.vcproj8
-rw-r--r--libs/gtkmm2ext/actions.cc102
-rw-r--r--libs/gtkmm2ext/application.cc6
-rw-r--r--libs/gtkmm2ext/auto_spin.cc24
-rw-r--r--libs/gtkmm2ext/cairo_widget.cc97
-rw-r--r--libs/gtkmm2ext/click_box.cc7
-rwxr-xr-xlibs/gtkmm2ext/fader.cc448
-rw-r--r--libs/gtkmm2ext/gtk_ui.cc32
-rw-r--r--libs/gtkmm2ext/gtkapplication_quartz.mm15
-rw-r--r--libs/gtkmm2ext/gtkapplication_win32.c5
-rw-r--r--libs/gtkmm2ext/gtkapplication_x11.c5
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/actions.h6
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/application.h1
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/auto_spin.h1
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/click_box.h1
-rwxr-xr-xlibs/gtkmm2ext/gtkmm2ext/fader.h111
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/gtk_ui.h6
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/gtkapplication.h1
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/persistent_tooltip.h16
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/utils.h1
-rw-r--r--libs/gtkmm2ext/macosx/gtkmm2ext/gtkmm2ext.xcodeproj/project.pbxproj254
-rw-r--r--libs/gtkmm2ext/persistent_tooltip.cc51
-rw-r--r--libs/gtkmm2ext/utils.cc12
-rw-r--r--libs/gtkmm2ext/waves_fastmeter.cc909
-rw-r--r--libs/gtkmm2ext/wscript13
-rw-r--r--libs/midi++2/macosx/midi++.xcodeproj/midi++.xcodeproj/project.pbxproj498
-rw-r--r--libs/panners/1in2out/panner_1in2out.cc5
-rw-r--r--libs/panners/wscript13
-rw-r--r--libs/pbd/debug.cc13
-rw-r--r--libs/pbd/macosx/pbd.xcodeproj/pbd.xcodeproj/project.pbxproj649
-rw-r--r--libs/pbd/macosx/pbd.xcodeproj/project.pbxproj15
-rw-r--r--libs/pbd/malign.cc60
-rw-r--r--libs/pbd/pbd/atomic_counter.h4
-rw-r--r--libs/pbd/pbd/debug.h7
-rw-r--r--libs/pbd/pbd/fpu.h4
-rw-r--r--libs/pbd/pbd/malign.h6
-rw-r--r--libs/pbd/pbd/pool.h2
-rw-r--r--libs/pbd/pool.cc14
-rw-r--r--libs/pbd/stacktrace.cc58
-rw-r--r--libs/pbd/wscript1
-rw-r--r--libs/plugins/reasonablesynth.lv2/rsynth.c2
-rw-r--r--libs/qm-dsp/dsp/onsets/PeakPicking.cpp4
-rw-r--r--libs/surfaces/control_protocol/control_protocol.cc13
-rw-r--r--libs/surfaces/control_protocol/control_protocol/control_protocol.h2
-rw-r--r--libs/surfaces/generic_midi/generic_midi_control_protocol.cc37
-rw-r--r--libs/surfaces/generic_midi/midiaction.cc4
-rw-r--r--libs/surfaces/generic_midi/midicontrollable.cc36
-rw-r--r--libs/surfaces/generic_midi/midifunction.cc18
-rw-r--r--libs/surfaces/mackie/gui.cc35
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.cc4
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.h7
-rw-r--r--libs/surfaces/osc/osc.cc19
-rw-r--r--midi_maps/midikb_wiimote.map51
-rw-r--r--system_config13
-rw-r--r--tools/CrashReporter/CrashReporter.xcodeproj/CrashReporter.xcodeproj/TemplateIcon.icnsbin0 -> 52318 bytes
-rw-r--r--tools/CrashReporter/CrashReporter.xcodeproj/CrashReporter.xcodeproj/project.pbxproj282
-rw-r--r--tools/define_versions.sh18
-rw-r--r--tools/linux_packaging/ardour.sh.in9
-rwxr-xr-xtools/linux_packaging/build72
-rwxr-xr-xtools/linux_packaging/stage2.run.in10
-rwxr-xr-xtools/osx_packaging/osx_build51
-rwxr-xr-xtools/x-win/package.sh64
-rw-r--r--wscript77
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\">&gt;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\">&gt;24 hrs</span>"
msgstr "Ðа диÑке: <span foreground=\"green\">&gt;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
new 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
Binary files differ
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
new file mode 100644
index 0000000000..62cb7015e0
--- /dev/null
+++ b/tools/CrashReporter/CrashReporter.xcodeproj/CrashReporter.xcodeproj/TemplateIcon.icns
Binary files differ
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
diff --git a/wscript b/wscript
index 1626f84556..7d806858a0 100644
--- a/wscript
+++ b/wscript
@@ -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