From a855119bdd94aad90f4cfec3066a367b0675a8e9 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 25 Oct 2019 13:13:51 -0600 Subject: rename all Evoral source from .(hpp|cpp)$ to .(h|cc) --- gtk2_ardour/audio_region_view.cc | 2 +- gtk2_ardour/automation_line.cc | 2 +- gtk2_ardour/automation_line.h | 2 +- gtk2_ardour/automation_selection.h | 2 +- gtk2_ardour/crossfade_edit.h | 2 +- gtk2_ardour/curvetest.cc | 2 +- gtk2_ardour/generic_pluginui.cc | 2 +- gtk2_ardour/ghostregion.cc | 2 +- gtk2_ardour/hit.cc | 2 +- gtk2_ardour/item_counts.h | 2 +- gtk2_ardour/midi_list_editor.cc | 2 +- gtk2_ardour/midi_region_view.cc | 6 +- gtk2_ardour/note.cc | 2 +- gtk2_ardour/note_base.cc | 2 +- gtk2_ardour/note_player.h | 2 +- gtk2_ardour/patch_change_dialog.h | 2 +- gtk2_ardour/patch_change_widget.cc | 2 +- gtk2_ardour/public_editor.h | 2 +- gtk2_ardour/region_gain_line.cc | 2 +- gtk2_ardour/route_time_axis.cc | 2 +- gtk2_ardour/sfdb_ui.cc | 2 +- gtk2_ardour/time_axis_view.h | 2 +- libs/ardour/amp.cc | 2 +- libs/ardour/ardour/async_midi_port.h | 2 +- libs/ardour/ardour/automatable.h | 2 +- libs/ardour/ardour/automatable_sequence.h | 2 +- libs/ardour/ardour/automation_control.h | 4 +- libs/ardour/ardour/automation_list.h | 4 +- libs/ardour/ardour/beats_samples_converter.h | 2 +- libs/ardour/ardour/buffer_set.h | 2 +- libs/ardour/ardour/control_group.h | 2 +- libs/ardour/ardour/event_ring_buffer.h | 4 +- libs/ardour/ardour/event_type_map.h | 6 +- libs/ardour/ardour/evoral_types_convert.h | 2 +- libs/ardour/ardour/gain_control.h | 2 +- libs/ardour/ardour/instrument_info.h | 2 +- libs/ardour/ardour/lua_api.h | 2 +- libs/ardour/ardour/midi_automation_list_binder.h | 2 +- libs/ardour/ardour/midi_buffer.h | 4 +- libs/ardour/ardour/midi_cursor.h | 2 +- libs/ardour/ardour/midi_model.h | 4 +- libs/ardour/ardour/midi_operator.h | 2 +- libs/ardour/ardour/midi_playlist.h | 6 +- libs/ardour/ardour/midi_region.h | 2 +- libs/ardour/ardour/midi_scene_change.h | 2 +- libs/ardour/ardour/midi_source.h | 4 +- libs/ardour/ardour/mute_master.h | 2 +- libs/ardour/ardour/pan_controllable.h | 2 +- libs/ardour/ardour/pannable.h | 2 +- libs/ardour/ardour/parameter_descriptor.h | 4 +- libs/ardour/ardour/parameter_types.h | 2 +- libs/ardour/ardour/playlist.h | 2 +- libs/ardour/ardour/rt_midibuffer.h | 4 +- libs/ardour/ardour/session.h | 2 +- libs/ardour/ardour/slavable.h | 2 +- libs/ardour/ardour/smf_source.h | 2 +- libs/ardour/ardour/types.h | 4 +- libs/ardour/audio_track.cc | 2 +- libs/ardour/audioregion.cc | 2 +- libs/ardour/automation_list.cc | 2 +- libs/ardour/enums.cc | 2 +- libs/ardour/event_type_map.cc | 4 +- libs/ardour/gain_control.cc | 2 +- libs/ardour/import.cc | 2 +- libs/ardour/luabindings.cc | 6 +- libs/ardour/midi_model.cc | 2 +- libs/ardour/midi_playlist.cc | 4 +- libs/ardour/midi_scene_changer.cc | 2 +- libs/ardour/midi_source.cc | 4 +- libs/ardour/midi_state_tracker.cc | 2 +- libs/ardour/mute_control.cc | 2 +- libs/ardour/panner_shell.cc | 2 +- libs/ardour/session_command.cc | 2 +- libs/ardour/session_state.cc | 2 +- libs/ardour/slavable_automation_control.cc | 2 +- libs/ardour/smf_source.cc | 4 +- libs/ardour/test/combine_regions_test.cc | 2 +- libs/evoral/evoral/Control.h | 88 + libs/evoral/evoral/Control.hpp | 88 - libs/evoral/evoral/ControlList.h | 384 ++++ libs/evoral/evoral/ControlList.hpp | 384 ---- libs/evoral/evoral/ControlSet.h | 88 + libs/evoral/evoral/ControlSet.hpp | 88 - libs/evoral/evoral/Curve.h | 55 + libs/evoral/evoral/Curve.hpp | 55 - libs/evoral/evoral/Event.h | 221 +++ libs/evoral/evoral/Event.hpp | 221 --- libs/evoral/evoral/EventList.h | 51 + libs/evoral/evoral/EventList.hpp | 51 - libs/evoral/evoral/EventSink.h | 41 + libs/evoral/evoral/EventSink.hpp | 41 - libs/evoral/evoral/MIDIXML.h | 96 + libs/evoral/evoral/MIDIXML.hpp | 96 - libs/evoral/evoral/Note.h | 131 ++ libs/evoral/evoral/Note.hpp | 131 -- libs/evoral/evoral/Parameter.h | 97 + libs/evoral/evoral/Parameter.hpp | 97 - libs/evoral/evoral/ParameterDescriptor.h | 46 + libs/evoral/evoral/ParameterDescriptor.hpp | 46 - libs/evoral/evoral/PatchChange.h | 175 ++ libs/evoral/evoral/PatchChange.hpp | 175 -- libs/evoral/evoral/Range.h | 298 ++++ libs/evoral/evoral/Range.hpp | 298 ---- libs/evoral/evoral/SMF.h | 137 ++ libs/evoral/evoral/SMF.hpp | 137 -- libs/evoral/evoral/SMFReader.h | 88 + libs/evoral/evoral/SMFReader.hpp | 88 - libs/evoral/evoral/Sequence.h | 381 ++++ libs/evoral/evoral/Sequence.hpp | 381 ---- libs/evoral/evoral/TimeConverter.h | 81 + libs/evoral/evoral/TimeConverter.hpp | 81 - libs/evoral/evoral/TypeMap.h | 62 + libs/evoral/evoral/TypeMap.hpp | 62 - libs/evoral/evoral/types.h | 72 + libs/evoral/evoral/types.hpp | 72 - libs/evoral/src/Control.cc | 88 + libs/evoral/src/Control.cpp | 88 - libs/evoral/src/ControlList.cc | 2076 ++++++++++++++++++++++ libs/evoral/src/ControlList.cpp | 2076 ---------------------- libs/evoral/src/ControlSet.cc | 115 ++ libs/evoral/src/ControlSet.cpp | 115 -- libs/evoral/src/Curve.cc | 458 +++++ libs/evoral/src/Curve.cpp | 458 ----- libs/evoral/src/Event.cc | 173 ++ libs/evoral/src/Event.cpp | 173 -- libs/evoral/src/Note.cc | 97 + libs/evoral/src/Note.cpp | 97 - libs/evoral/src/SMF.cc | 603 +++++++ libs/evoral/src/SMF.cpp | 603 ------- libs/evoral/src/SMFReader.cc | 283 +++ libs/evoral/src/SMFReader.cpp | 283 --- libs/evoral/src/Sequence.cc | 1422 +++++++++++++++ libs/evoral/src/Sequence.cpp | 1422 --------------- libs/evoral/src/TimeConverter.cc | 51 + libs/evoral/src/TimeConverter.cpp | 51 - libs/evoral/src/debug.cc | 6 + libs/evoral/src/debug.cpp | 6 - libs/evoral/test/BeatsTest.cc | 171 ++ libs/evoral/test/BeatsTest.cpp | 171 -- libs/evoral/test/BeatsTest.h | 22 + libs/evoral/test/BeatsTest.hpp | 22 - libs/evoral/test/CurveTest.cc | 476 +++++ libs/evoral/test/CurveTest.cpp | 476 ----- libs/evoral/test/CurveTest.h | 33 + libs/evoral/test/CurveTest.hpp | 33 - libs/evoral/test/NoteTest.cc | 33 + libs/evoral/test/NoteTest.cpp | 33 - libs/evoral/test/NoteTest.h | 16 + libs/evoral/test/NoteTest.hpp | 16 - libs/evoral/test/RangeTest.cc | 231 +++ libs/evoral/test/RangeTest.cpp | 231 --- libs/evoral/test/RangeTest.h | 26 + libs/evoral/test/RangeTest.hpp | 26 - libs/evoral/test/SMFTest.cc | 119 ++ libs/evoral/test/SMFTest.cpp | 119 -- libs/evoral/test/SMFTest.h | 85 + libs/evoral/test/SMFTest.hpp | 85 - libs/evoral/test/SequenceTest.cc | 196 ++ libs/evoral/test/SequenceTest.cpp | 196 -- libs/evoral/test/SequenceTest.h | 160 ++ libs/evoral/test/SequenceTest.hpp | 160 -- libs/evoral/test/testrunner.cc | 31 + libs/evoral/test/testrunner.cpp | 31 - libs/evoral/wscript | 34 +- libs/midi++2/midi++/event.h | 2 +- libs/panners/1in2out/panner_1in2out.cc | 2 +- libs/panners/2in2out/panner_2in2out.cc | 2 +- libs/panners/stereobalance/panner_balance.cc | 2 +- libs/surfaces/mackie/strip.h | 2 +- libs/surfaces/us2400/strip.h | 2 +- session_utils/fix_bbtppq.cc | 4 +- 171 files changed, 9686 insertions(+), 9686 deletions(-) create mode 100644 libs/evoral/evoral/Control.h delete mode 100644 libs/evoral/evoral/Control.hpp create mode 100644 libs/evoral/evoral/ControlList.h delete mode 100644 libs/evoral/evoral/ControlList.hpp create mode 100644 libs/evoral/evoral/ControlSet.h delete mode 100644 libs/evoral/evoral/ControlSet.hpp create mode 100644 libs/evoral/evoral/Curve.h delete mode 100644 libs/evoral/evoral/Curve.hpp create mode 100644 libs/evoral/evoral/Event.h delete mode 100644 libs/evoral/evoral/Event.hpp create mode 100644 libs/evoral/evoral/EventList.h delete mode 100644 libs/evoral/evoral/EventList.hpp create mode 100644 libs/evoral/evoral/EventSink.h delete mode 100644 libs/evoral/evoral/EventSink.hpp create mode 100644 libs/evoral/evoral/MIDIXML.h delete mode 100644 libs/evoral/evoral/MIDIXML.hpp create mode 100644 libs/evoral/evoral/Note.h delete mode 100644 libs/evoral/evoral/Note.hpp create mode 100644 libs/evoral/evoral/Parameter.h delete mode 100644 libs/evoral/evoral/Parameter.hpp create mode 100644 libs/evoral/evoral/ParameterDescriptor.h delete mode 100644 libs/evoral/evoral/ParameterDescriptor.hpp create mode 100644 libs/evoral/evoral/PatchChange.h delete mode 100644 libs/evoral/evoral/PatchChange.hpp create mode 100644 libs/evoral/evoral/Range.h delete mode 100644 libs/evoral/evoral/Range.hpp create mode 100644 libs/evoral/evoral/SMF.h delete mode 100644 libs/evoral/evoral/SMF.hpp create mode 100644 libs/evoral/evoral/SMFReader.h delete mode 100644 libs/evoral/evoral/SMFReader.hpp create mode 100644 libs/evoral/evoral/Sequence.h delete mode 100644 libs/evoral/evoral/Sequence.hpp create mode 100644 libs/evoral/evoral/TimeConverter.h delete mode 100644 libs/evoral/evoral/TimeConverter.hpp create mode 100644 libs/evoral/evoral/TypeMap.h delete mode 100644 libs/evoral/evoral/TypeMap.hpp create mode 100644 libs/evoral/evoral/types.h delete mode 100644 libs/evoral/evoral/types.hpp create mode 100644 libs/evoral/src/Control.cc delete mode 100644 libs/evoral/src/Control.cpp create mode 100644 libs/evoral/src/ControlList.cc delete mode 100644 libs/evoral/src/ControlList.cpp create mode 100644 libs/evoral/src/ControlSet.cc delete mode 100644 libs/evoral/src/ControlSet.cpp create mode 100644 libs/evoral/src/Curve.cc delete mode 100644 libs/evoral/src/Curve.cpp create mode 100644 libs/evoral/src/Event.cc delete mode 100644 libs/evoral/src/Event.cpp create mode 100644 libs/evoral/src/Note.cc delete mode 100644 libs/evoral/src/Note.cpp create mode 100644 libs/evoral/src/SMF.cc delete mode 100644 libs/evoral/src/SMF.cpp create mode 100644 libs/evoral/src/SMFReader.cc delete mode 100644 libs/evoral/src/SMFReader.cpp create mode 100644 libs/evoral/src/Sequence.cc delete mode 100644 libs/evoral/src/Sequence.cpp create mode 100644 libs/evoral/src/TimeConverter.cc delete mode 100644 libs/evoral/src/TimeConverter.cpp create mode 100644 libs/evoral/src/debug.cc delete mode 100644 libs/evoral/src/debug.cpp create mode 100644 libs/evoral/test/BeatsTest.cc delete mode 100644 libs/evoral/test/BeatsTest.cpp create mode 100644 libs/evoral/test/BeatsTest.h delete mode 100644 libs/evoral/test/BeatsTest.hpp create mode 100644 libs/evoral/test/CurveTest.cc delete mode 100644 libs/evoral/test/CurveTest.cpp create mode 100644 libs/evoral/test/CurveTest.h delete mode 100644 libs/evoral/test/CurveTest.hpp create mode 100644 libs/evoral/test/NoteTest.cc delete mode 100644 libs/evoral/test/NoteTest.cpp create mode 100644 libs/evoral/test/NoteTest.h delete mode 100644 libs/evoral/test/NoteTest.hpp create mode 100644 libs/evoral/test/RangeTest.cc delete mode 100644 libs/evoral/test/RangeTest.cpp create mode 100644 libs/evoral/test/RangeTest.h delete mode 100644 libs/evoral/test/RangeTest.hpp create mode 100644 libs/evoral/test/SMFTest.cc delete mode 100644 libs/evoral/test/SMFTest.cpp create mode 100644 libs/evoral/test/SMFTest.h delete mode 100644 libs/evoral/test/SMFTest.hpp create mode 100644 libs/evoral/test/SequenceTest.cc delete mode 100644 libs/evoral/test/SequenceTest.cpp create mode 100644 libs/evoral/test/SequenceTest.h delete mode 100644 libs/evoral/test/SequenceTest.hpp create mode 100644 libs/evoral/test/testrunner.cc delete mode 100644 libs/evoral/test/testrunner.cpp diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc index e767a6b971..b736f29416 100644 --- a/gtk2_ardour/audio_region_view.cc +++ b/gtk2_ardour/audio_region_view.cc @@ -41,7 +41,7 @@ #include "pbd/memento_command.h" #include "pbd/stacktrace.h" -#include "evoral/Curve.hpp" +#include "evoral/Curve.h" #include "gtkmm2ext/gtk_ui.h" #include "gtkmm2ext/utils.h" diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc index 543620bd66..748828f35a 100644 --- a/gtk2_ardour/automation_line.cc +++ b/gtk2_ardour/automation_line.cc @@ -51,7 +51,7 @@ #include "ardour/parameter_types.h" #include "ardour/tempo.h" -#include "evoral/Curve.hpp" +#include "evoral/Curve.h" #include "canvas/debug.h" diff --git a/gtk2_ardour/automation_line.h b/gtk2_ardour/automation_line.h index 05ce52721b..0d89025964 100644 --- a/gtk2_ardour/automation_line.h +++ b/gtk2_ardour/automation_line.h @@ -33,7 +33,7 @@ #include -#include "evoral/TimeConverter.hpp" +#include "evoral/TimeConverter.h" #include "pbd/undo.h" #include "pbd/statefuldestructible.h" diff --git a/gtk2_ardour/automation_selection.h b/gtk2_ardour/automation_selection.h index 26dfeb8992..8460613e94 100644 --- a/gtk2_ardour/automation_selection.h +++ b/gtk2_ardour/automation_selection.h @@ -22,7 +22,7 @@ #include #include "ardour/automation_list.h" -#include "evoral/Parameter.hpp" +#include "evoral/Parameter.h" class AutomationSelection : public std::list > { public: diff --git a/gtk2_ardour/crossfade_edit.h b/gtk2_ardour/crossfade_edit.h index 4c4333c5d6..0c49666095 100644 --- a/gtk2_ardour/crossfade_edit.h +++ b/gtk2_ardour/crossfade_edit.h @@ -32,7 +32,7 @@ #include "canvas/canvas.h" -#include "evoral/Curve.hpp" +#include "evoral/Curve.h" #include "ardour/session_handle.h" #include "ardour_dialog.h" diff --git a/gtk2_ardour/curvetest.cc b/gtk2_ardour/curvetest.cc index 33ad5fb895..365665e203 100644 --- a/gtk2_ardour/curvetest.cc +++ b/gtk2_ardour/curvetest.cc @@ -23,7 +23,7 @@ #include #include "ardour/automation_list.h" -#include "evoral/Curve.hpp" +#include "evoral/Curve.h" using namespace std; using namespace ARDOUR; diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc index bff75800e0..a08fd45c43 100644 --- a/gtk2_ardour/generic_pluginui.cc +++ b/gtk2_ardour/generic_pluginui.cc @@ -43,7 +43,7 @@ #include "pbd/failed_constructor.h" #include "evoral/midi_events.h" -#include "evoral/PatchChange.hpp" +#include "evoral/PatchChange.h" #include "midi++/midnam_patch.h" diff --git a/gtk2_ardour/ghostregion.cc b/gtk2_ardour/ghostregion.cc index 23578ee097..53c3f7eb73 100644 --- a/gtk2_ardour/ghostregion.cc +++ b/gtk2_ardour/ghostregion.cc @@ -24,7 +24,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "evoral/Note.hpp" +#include "evoral/Note.h" #include "ardour/parameter_descriptor.h" diff --git a/gtk2_ardour/hit.cc b/gtk2_ardour/hit.cc index d750ed3f9d..643770b44a 100644 --- a/gtk2_ardour/hit.cc +++ b/gtk2_ardour/hit.cc @@ -19,7 +19,7 @@ #include "temporal/beats.h" -#include "evoral/Note.hpp" +#include "evoral/Note.h" #include "canvas/polygon.h" #include "canvas/debug.h" diff --git a/gtk2_ardour/item_counts.h b/gtk2_ardour/item_counts.h index 4c982bb504..94bedd04e7 100644 --- a/gtk2_ardour/item_counts.h +++ b/gtk2_ardour/item_counts.h @@ -24,7 +24,7 @@ #include #include "ardour/data_type.h" -#include "evoral/Parameter.hpp" +#include "evoral/Parameter.h" /** A count of various GUI items. * diff --git a/gtk2_ardour/midi_list_editor.cc b/gtk2_ardour/midi_list_editor.cc index 535a04a05f..bc17c7aee0 100644 --- a/gtk2_ardour/midi_list_editor.cc +++ b/gtk2_ardour/midi_list_editor.cc @@ -24,7 +24,7 @@ #include #include "evoral/midi_util.h" -#include "evoral/Note.hpp" +#include "evoral/Note.h" #include "ardour/beats_samples_converter.h" #include "ardour/midi_model.h" diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 249c198bfd..01fcfab51e 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -48,9 +48,9 @@ #include "ardour/operations.h" #include "ardour/session.h" -#include "evoral/Parameter.hpp" -#include "evoral/Event.hpp" -#include "evoral/Control.hpp" +#include "evoral/Parameter.h" +#include "evoral/Event.h" +#include "evoral/Control.h" #include "evoral/midi_util.h" #include "canvas/debug.h" diff --git a/gtk2_ardour/note.cc b/gtk2_ardour/note.cc index a23d0f103b..7cc1bd6a86 100644 --- a/gtk2_ardour/note.cc +++ b/gtk2_ardour/note.cc @@ -17,7 +17,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "evoral/Note.hpp" +#include "evoral/Note.h" #include "canvas/note.h" #include "canvas/debug.h" diff --git a/gtk2_ardour/note_base.cc b/gtk2_ardour/note_base.cc index c1935b0ba3..3e6bb402da 100644 --- a/gtk2_ardour/note_base.cc +++ b/gtk2_ardour/note_base.cc @@ -23,7 +23,7 @@ #include "gtkmm2ext/keyboard.h" -#include "evoral/Note.hpp" +#include "evoral/Note.h" #include "canvas/text.h" diff --git a/gtk2_ardour/note_player.h b/gtk2_ardour/note_player.h index 6c0cd5082e..03970c4706 100644 --- a/gtk2_ardour/note_player.h +++ b/gtk2_ardour/note_player.h @@ -24,7 +24,7 @@ #include #include -#include "evoral/Note.hpp" +#include "evoral/Note.h" namespace ARDOUR { class MidiTrack; diff --git a/gtk2_ardour/patch_change_dialog.h b/gtk2_ardour/patch_change_dialog.h index 4059c5032c..7a7b69119e 100644 --- a/gtk2_ardour/patch_change_dialog.h +++ b/gtk2_ardour/patch_change_dialog.h @@ -22,7 +22,7 @@ #include #include -#include "evoral/PatchChange.hpp" +#include "evoral/PatchChange.h" #include "ardour_dialog.h" #include "audio_clock.h" diff --git a/gtk2_ardour/patch_change_widget.cc b/gtk2_ardour/patch_change_widget.cc index 51cae03f7e..fdffc81574 100644 --- a/gtk2_ardour/patch_change_widget.cc +++ b/gtk2_ardour/patch_change_widget.cc @@ -22,7 +22,7 @@ #include "pbd/unwind.h" #include "evoral/midi_events.h" -#include "evoral/PatchChange.hpp" +#include "evoral/PatchChange.h" #include "midi++/midnam_patch.h" diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index bb667a8213..0093dc3216 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -47,7 +47,7 @@ #include "temporal/beats.h" -#include "evoral/Note.hpp" +#include "evoral/Note.h" #include "ardour/session_handle.h" diff --git a/gtk2_ardour/region_gain_line.cc b/gtk2_ardour/region_gain_line.cc index 1a35dfbff1..a31d31b76e 100644 --- a/gtk2_ardour/region_gain_line.cc +++ b/gtk2_ardour/region_gain_line.cc @@ -22,7 +22,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "evoral/Curve.hpp" +#include "evoral/Curve.h" #include "pbd/memento_command.h" #include "pbd/stateful_diff_command.h" diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 6a6ca719f9..f40ee82c72 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -49,7 +49,7 @@ #include "pbd/enumwriter.h" #include "pbd/stateful_diff_command.h" -#include "evoral/Parameter.hpp" +#include "evoral/Parameter.h" #include "ardour/amp.h" #include "ardour/meter.h" diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc index 850adb93a8..4b8906397d 100644 --- a/gtk2_ardour/sfdb_ui.cc +++ b/gtk2_ardour/sfdb_ui.cc @@ -57,7 +57,7 @@ #include -#include "evoral/SMF.hpp" +#include "evoral/SMF.h" #include "ardour/audio_library.h" #include "ardour/auditioner.h" diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h index fa95c592ae..f5a6dc2fdc 100644 --- a/gtk2_ardour/time_axis_view.h +++ b/gtk2_ardour/time_axis_view.h @@ -43,7 +43,7 @@ #include "pbd/stateful.h" #include "pbd/signals.h" -#include "evoral/Parameter.hpp" +#include "evoral/Parameter.h" #include "ardour/types.h" #include "ardour/presentation_info.h" diff --git a/libs/ardour/amp.cc b/libs/ardour/amp.cc index 80cb5b6fcb..4731ab376a 100644 --- a/libs/ardour/amp.cc +++ b/libs/ardour/amp.cc @@ -25,7 +25,7 @@ #include #include -#include "evoral/Curve.hpp" +#include "evoral/Curve.h" #include "ardour/amp.h" #include "ardour/audio_buffer.h" diff --git a/libs/ardour/ardour/async_midi_port.h b/libs/ardour/ardour/async_midi_port.h index 23aa863458..fdc7c1ffad 100644 --- a/libs/ardour/ardour/async_midi_port.h +++ b/libs/ardour/ardour/async_midi_port.h @@ -30,7 +30,7 @@ #include "pbd/signals.h" #include "pbd/ringbuffer.h" -#include "evoral/Event.hpp" +#include "evoral/Event.h" #include "midi++/types.h" #include "midi++/parser.h" diff --git a/libs/ardour/ardour/automatable.h b/libs/ardour/ardour/automatable.h index d384b6c8f5..46160c60b0 100644 --- a/libs/ardour/ardour/automatable.h +++ b/libs/ardour/ardour/automatable.h @@ -31,7 +31,7 @@ #include "pbd/rcu.h" #include "pbd/signals.h" -#include "evoral/ControlSet.hpp" +#include "evoral/ControlSet.h" #include "ardour/libardour_visibility.h" #include "ardour/slavable.h" diff --git a/libs/ardour/ardour/automatable_sequence.h b/libs/ardour/ardour/automatable_sequence.h index d18e567363..f5da0889de 100644 --- a/libs/ardour/ardour/automatable_sequence.h +++ b/libs/ardour/ardour/automatable_sequence.h @@ -20,7 +20,7 @@ #ifndef __ardour_automatable_sequence_h__ #define __ardour_automatable_sequence_h__ -#include "evoral/Sequence.hpp" +#include "evoral/Sequence.h" #include "ardour/automatable.h" #include "ardour/event_type_map.h" diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h index 99252f2552..3a13d1ce16 100644 --- a/libs/ardour/ardour/automation_control.h +++ b/libs/ardour/ardour/automation_control.h @@ -31,8 +31,8 @@ #include "pbd/controllable.h" -#include "evoral/types.hpp" -#include "evoral/Control.hpp" +#include "evoral/types.h" +#include "evoral/Control.h" #include "ardour/automation_list.h" #include "ardour/control_group_member.h" diff --git a/libs/ardour/ardour/automation_list.h b/libs/ardour/ardour/automation_list.h index 1654d94de6..c18b71d9a3 100644 --- a/libs/ardour/ardour/automation_list.h +++ b/libs/ardour/ardour/automation_list.h @@ -30,8 +30,8 @@ #include -#include "evoral/ControlList.hpp" -#include "evoral/Parameter.hpp" +#include "evoral/ControlList.h" +#include "evoral/Parameter.h" #include "pbd/undo.h" #include "pbd/xml++.h" diff --git a/libs/ardour/ardour/beats_samples_converter.h b/libs/ardour/ardour/beats_samples_converter.h index 33cd62fb50..754c467f91 100644 --- a/libs/ardour/ardour/beats_samples_converter.h +++ b/libs/ardour/ardour/beats_samples_converter.h @@ -17,7 +17,7 @@ */ #include "temporal/beats.h" -#include "evoral/TimeConverter.hpp" +#include "evoral/TimeConverter.h" #include "ardour/libardour_visibility.h" #include "ardour/types.h" diff --git a/libs/ardour/ardour/buffer_set.h b/libs/ardour/ardour/buffer_set.h index 4c92849843..85041b6728 100644 --- a/libs/ardour/ardour/buffer_set.h +++ b/libs/ardour/ardour/buffer_set.h @@ -34,7 +34,7 @@ #include "ardour/types.h" #if defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT || defined MACVST_SUPPORT -#include "evoral/Event.hpp" +#include "evoral/Event.h" struct _VstEvents; typedef struct _VstEvents VstEvents; struct _VstMidiEvent; diff --git a/libs/ardour/ardour/control_group.h b/libs/ardour/ardour/control_group.h index 6974699ea3..e77e184bd6 100644 --- a/libs/ardour/ardour/control_group.h +++ b/libs/ardour/ardour/control_group.h @@ -29,7 +29,7 @@ #include "pbd/controllable.h" -#include "evoral/Parameter.hpp" +#include "evoral/Parameter.h" #include "ardour/automation_control.h" #include "ardour/types.h" diff --git a/libs/ardour/ardour/event_ring_buffer.h b/libs/ardour/ardour/event_ring_buffer.h index f805b80421..f8c8e005db 100644 --- a/libs/ardour/ardour/event_ring_buffer.h +++ b/libs/ardour/ardour/event_ring_buffer.h @@ -24,8 +24,8 @@ #include "pbd/ringbufferNPT.h" -#include "evoral/EventSink.hpp" -#include "evoral/types.hpp" +#include "evoral/EventSink.h" +#include "evoral/types.h" namespace ARDOUR { diff --git a/libs/ardour/ardour/event_type_map.h b/libs/ardour/ardour/event_type_map.h index 316268bad1..8a902523c2 100644 --- a/libs/ardour/ardour/event_type_map.h +++ b/libs/ardour/ardour/event_type_map.h @@ -24,9 +24,9 @@ #include #include -#include "evoral/TypeMap.hpp" -#include "evoral/ControlList.hpp" -#include "evoral/ParameterDescriptor.hpp" +#include "evoral/TypeMap.h" +#include "evoral/ControlList.h" +#include "evoral/ParameterDescriptor.h" #include "ardour/libardour_visibility.h" diff --git a/libs/ardour/ardour/evoral_types_convert.h b/libs/ardour/ardour/evoral_types_convert.h index 6945ea4946..26315e58f0 100644 --- a/libs/ardour/ardour/evoral_types_convert.h +++ b/libs/ardour/ardour/evoral_types_convert.h @@ -23,7 +23,7 @@ #include "pbd/enum_convert.h" #include "temporal/beats.h" -#include "evoral/ControlList.hpp" +#include "evoral/ControlList.h" namespace PBD { diff --git a/libs/ardour/ardour/gain_control.h b/libs/ardour/ardour/gain_control.h index 9136096f0e..0b3e2fa5b2 100644 --- a/libs/ardour/ardour/gain_control.h +++ b/libs/ardour/ardour/gain_control.h @@ -26,7 +26,7 @@ #include "pbd/controllable.h" -#include "evoral/Parameter.hpp" +#include "evoral/Parameter.h" #include "ardour/slavable_automation_control.h" #include "ardour/libardour_visibility.h" diff --git a/libs/ardour/ardour/instrument_info.h b/libs/ardour/ardour/instrument_info.h index 00af06f0b4..59ff34fc3a 100644 --- a/libs/ardour/ardour/instrument_info.h +++ b/libs/ardour/ardour/instrument_info.h @@ -26,7 +26,7 @@ #include "pbd/signals.h" -#include "evoral/Parameter.hpp" +#include "evoral/Parameter.h" #include "midi++/libmidi_visibility.h" #include "ardour/libardour_visibility.h" diff --git a/libs/ardour/ardour/lua_api.h b/libs/ardour/ardour/lua_api.h index 3ae76f8e5b..bed9db5aa2 100644 --- a/libs/ardour/ardour/lua_api.h +++ b/libs/ardour/ardour/lua_api.h @@ -24,7 +24,7 @@ #include #include -#include "evoral/Note.hpp" +#include "evoral/Note.h" #include "ardour/libardour_visibility.h" diff --git a/libs/ardour/ardour/midi_automation_list_binder.h b/libs/ardour/ardour/midi_automation_list_binder.h index ee78b56a63..f07247e5b6 100644 --- a/libs/ardour/ardour/midi_automation_list_binder.h +++ b/libs/ardour/ardour/midi_automation_list_binder.h @@ -20,7 +20,7 @@ #define __ardour_midi_automation_list_binder_h__ #include "pbd/memento_command.h" -#include "evoral/Parameter.hpp" +#include "evoral/Parameter.h" #include "ardour/session.h" namespace ARDOUR { diff --git a/libs/ardour/ardour/midi_buffer.h b/libs/ardour/ardour/midi_buffer.h index 24a784d13d..d713f8787f 100644 --- a/libs/ardour/ardour/midi_buffer.h +++ b/libs/ardour/ardour/midi_buffer.h @@ -23,9 +23,9 @@ #ifndef __ardour_midi_buffer_h__ #define __ardour_midi_buffer_h__ -#include "evoral/EventSink.hpp" +#include "evoral/EventSink.h" #include "evoral/midi_util.h" -#include "evoral/types.hpp" +#include "evoral/types.h" #include "midi++/event.h" diff --git a/libs/ardour/ardour/midi_cursor.h b/libs/ardour/ardour/midi_cursor.h index 94e4052097..d7d65e6160 100644 --- a/libs/ardour/ardour/midi_cursor.h +++ b/libs/ardour/ardour/midi_cursor.h @@ -28,7 +28,7 @@ #include "pbd/signals.h" #include "temporal/beats.h" -#include "evoral/Sequence.hpp" +#include "evoral/Sequence.h" #include "ardour/types.h" diff --git a/libs/ardour/ardour/midi_model.h b/libs/ardour/ardour/midi_model.h index 90375754e9..b55ac5886d 100644 --- a/libs/ardour/ardour/midi_model.h +++ b/libs/ardour/ardour/midi_model.h @@ -40,8 +40,8 @@ #include "ardour/types.h" #include "ardour/variant.h" -#include "evoral/Note.hpp" -#include "evoral/Sequence.hpp" +#include "evoral/Note.h" +#include "evoral/Sequence.h" namespace ARDOUR { diff --git a/libs/ardour/ardour/midi_operator.h b/libs/ardour/ardour/midi_operator.h index 163268bbad..1cbfd8d3b9 100644 --- a/libs/ardour/ardour/midi_operator.h +++ b/libs/ardour/ardour/midi_operator.h @@ -24,7 +24,7 @@ #include #include "temporal/beats.h" -#include "evoral/Sequence.hpp" +#include "evoral/Sequence.h" class Command; diff --git a/libs/ardour/ardour/midi_playlist.h b/libs/ardour/ardour/midi_playlist.h index 83ba5ecb61..e41d1fbdfa 100644 --- a/libs/ardour/ardour/midi_playlist.h +++ b/libs/ardour/ardour/midi_playlist.h @@ -28,15 +28,15 @@ #include -#include "evoral/Parameter.hpp" +#include "evoral/Parameter.h" #include "ardour/ardour.h" #include "ardour/midi_cursor.h" #include "ardour/midi_model.h" #include "ardour/midi_state_tracker.h" #include "ardour/playlist.h" -#include "evoral/Note.hpp" -#include "evoral/Parameter.hpp" +#include "evoral/Note.h" +#include "evoral/Parameter.h" #include "ardour/rt_midibuffer.h" namespace Evoral { diff --git a/libs/ardour/ardour/midi_region.h b/libs/ardour/ardour/midi_region.h index 6ae1375899..7181ab8d1b 100644 --- a/libs/ardour/ardour/midi_region.h +++ b/libs/ardour/ardour/midi_region.h @@ -26,7 +26,7 @@ #include #include "temporal/beats.h" -#include "evoral/Range.hpp" +#include "evoral/Range.h" #include "pbd/string_convert.h" diff --git a/libs/ardour/ardour/midi_scene_change.h b/libs/ardour/ardour/midi_scene_change.h index 29113f131d..b24abe1fa5 100644 --- a/libs/ardour/ardour/midi_scene_change.h +++ b/libs/ardour/ardour/midi_scene_change.h @@ -19,7 +19,7 @@ #ifndef __libardour_midi_scene_change_h__ #define __libardour_midi_scene_change_h__ -#include "evoral/PatchChange.hpp" +#include "evoral/PatchChange.h" #include "pbd/signals.h" diff --git a/libs/ardour/ardour/midi_source.h b/libs/ardour/ardour/midi_source.h index 0334b95b06..a330825081 100644 --- a/libs/ardour/ardour/midi_source.h +++ b/libs/ardour/ardour/midi_source.h @@ -29,8 +29,8 @@ #include #include "pbd/stateful.h" #include "pbd/xml++.h" -#include "evoral/Sequence.hpp" -#include "evoral/Range.hpp" +#include "evoral/Sequence.h" +#include "evoral/Range.h" #include "ardour/ardour.h" #include "ardour/buffer.h" #include "ardour/midi_cursor.h" diff --git a/libs/ardour/ardour/mute_master.h b/libs/ardour/ardour/mute_master.h index 6010a5148e..8410b2922f 100644 --- a/libs/ardour/ardour/mute_master.h +++ b/libs/ardour/ardour/mute_master.h @@ -27,7 +27,7 @@ #include "pbd/signals.h" #include "pbd/stateful.h" -#include "evoral/Parameter.hpp" +#include "evoral/Parameter.h" #include "ardour/session_handle.h" #include "ardour/types.h" diff --git a/libs/ardour/ardour/pan_controllable.h b/libs/ardour/ardour/pan_controllable.h index e460f80c38..c72f0dbe45 100644 --- a/libs/ardour/ardour/pan_controllable.h +++ b/libs/ardour/ardour/pan_controllable.h @@ -24,7 +24,7 @@ #include -#include "evoral/Parameter.hpp" +#include "evoral/Parameter.h" #include "ardour/automation_control.h" #include "ardour/automation_list.h" diff --git a/libs/ardour/ardour/pannable.h b/libs/ardour/ardour/pannable.h index d866548fdb..d282ff7dde 100644 --- a/libs/ardour/ardour/pannable.h +++ b/libs/ardour/ardour/pannable.h @@ -25,7 +25,7 @@ #include #include "pbd/stateful.h" -#include "evoral/Parameter.hpp" +#include "evoral/Parameter.h" #include "ardour/automatable.h" #include "ardour/session_handle.h" diff --git a/libs/ardour/ardour/parameter_descriptor.h b/libs/ardour/ardour/parameter_descriptor.h index e531133b15..b9c0417ce6 100644 --- a/libs/ardour/ardour/parameter_descriptor.h +++ b/libs/ardour/ardour/parameter_descriptor.h @@ -23,8 +23,8 @@ #include "ardour/types.h" #include "ardour/variant.h" -#include "evoral/Parameter.hpp" -#include "evoral/ParameterDescriptor.hpp" +#include "evoral/Parameter.h" +#include "evoral/ParameterDescriptor.h" namespace ARDOUR { diff --git a/libs/ardour/ardour/parameter_types.h b/libs/ardour/ardour/parameter_types.h index 4de360a99e..ac82dca0ad 100644 --- a/libs/ardour/ardour/parameter_types.h +++ b/libs/ardour/ardour/parameter_types.h @@ -22,7 +22,7 @@ #include #include "ardour/types.h" -#include "evoral/Parameter.hpp" +#include "evoral/Parameter.h" #include "evoral/midi_events.h" namespace ARDOUR { diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index 032a4fb7fb..75ab8b4f2f 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -45,7 +45,7 @@ #include "pbd/sequence_property.h" #include "pbd/stacktrace.h" -#include "evoral/Range.hpp" +#include "evoral/Range.h" #include "ardour/ardour.h" #include "ardour/region.h" diff --git a/libs/ardour/ardour/rt_midibuffer.h b/libs/ardour/ardour/rt_midibuffer.h index 9bc63d458d..cfe0302ef2 100644 --- a/libs/ardour/ardour/rt_midibuffer.h +++ b/libs/ardour/ardour/rt_midibuffer.h @@ -27,8 +27,8 @@ #include -#include "evoral/Event.hpp" -#include "evoral/EventSink.hpp" +#include "evoral/Event.h" +#include "evoral/EventSink.h" #include "ardour/types.h" namespace ARDOUR { diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 2c760a6b1e..2222444982 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -65,7 +65,7 @@ #include "lua/luastate.h" -#include "evoral/Range.hpp" +#include "evoral/Range.h" #include "midi++/types.h" #include "midi++/mmc.h" diff --git a/libs/ardour/ardour/slavable.h b/libs/ardour/ardour/slavable.h index 0dd7d84e69..60cf770fd7 100644 --- a/libs/ardour/ardour/slavable.h +++ b/libs/ardour/ardour/slavable.h @@ -28,7 +28,7 @@ #include "pbd/signals.h" -#include "evoral/Parameter.hpp" +#include "evoral/Parameter.h" #include "ardour/types.h" #include "ardour/libardour_visibility.h" diff --git a/libs/ardour/ardour/smf_source.h b/libs/ardour/ardour/smf_source.h index 2b1f7c4f59..12ec5271e2 100644 --- a/libs/ardour/ardour/smf_source.h +++ b/libs/ardour/ardour/smf_source.h @@ -25,7 +25,7 @@ #include #include -#include "evoral/SMF.hpp" +#include "evoral/SMF.h" #include "ardour/midi_source.h" #include "ardour/file_source.h" diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h index fcf776f60b..ea96c7fd6d 100644 --- a/libs/ardour/ardour/types.h +++ b/libs/ardour/ardour/types.h @@ -48,7 +48,7 @@ #include "pbd/id.h" -#include "evoral/Range.hpp" +#include "evoral/Range.h" #include "ardour/chan_count.h" #include "ardour/plugin_types.h" @@ -124,7 +124,7 @@ enum InsertMergePolicy { InsertMergeExtend ///< extend new (or old) to the range of old+new }; -/** See evoral/Parameter.hpp +/** See evoral/Parameter.h * * When you add things here, you REALLY SHOULD add a case clause to * the constructor of ParameterDescriptor, unless the Controllables diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc index 167f6de6f8..0f4d7dbd1d 100644 --- a/libs/ardour/audio_track.cc +++ b/libs/ardour/audio_track.cc @@ -28,7 +28,7 @@ #include "pbd/enumwriter.h" #include "pbd/error.h" -#include "evoral/Curve.hpp" +#include "evoral/Curve.h" #include "ardour/amp.h" #include "ardour/audio_buffer.h" diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc index 6bd1e6e0bb..b6e6f5a572 100644 --- a/libs/ardour/audioregion.cc +++ b/libs/ardour/audioregion.cc @@ -40,7 +40,7 @@ #include "pbd/enumwriter.h" #include "pbd/convert.h" -#include "evoral/Curve.hpp" +#include "evoral/Curve.h" #include "ardour/audioregion.h" #include "ardour/session.h" diff --git a/libs/ardour/automation_list.cc b/libs/ardour/automation_list.cc index e9691a46d4..fa7854873c 100644 --- a/libs/ardour/automation_list.cc +++ b/libs/ardour/automation_list.cc @@ -34,7 +34,7 @@ #include "ardour/parameter_types.h" #include "ardour/evoral_types_convert.h" #include "ardour/types_convert.h" -#include "evoral/Curve.hpp" +#include "evoral/Curve.h" #include "pbd/memento_command.h" #include "pbd/stacktrace.h" #include "pbd/enumwriter.h" diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc index cdcdbd0c4f..f374d70e75 100644 --- a/libs/ardour/enums.cc +++ b/libs/ardour/enums.cc @@ -29,7 +29,7 @@ #include "pbd/enumwriter.h" #include "midi++/types.h" -#include "evoral/Range.hpp" // shouldn't Evoral have its own enum registration? +#include "evoral/Range.h" // shouldn't Evoral have its own enum registration? #include "ardour/delivery.h" #include "ardour/disk_io.h" diff --git a/libs/ardour/event_type_map.cc b/libs/ardour/event_type_map.cc index b07a82ff1e..17a1daef07 100644 --- a/libs/ardour/event_type_map.cc +++ b/libs/ardour/event_type_map.cc @@ -29,8 +29,8 @@ #ifdef LV2_SUPPORT #include "ardour/uri_map.h" #endif -#include "evoral/Parameter.hpp" -#include "evoral/ParameterDescriptor.hpp" +#include "evoral/Parameter.h" +#include "evoral/ParameterDescriptor.h" #include "evoral/midi_events.h" #include "pbd/error.h" #include "pbd/compose.h" diff --git a/libs/ardour/gain_control.cc b/libs/ardour/gain_control.cc index e7ea8305e3..2e552813a9 100644 --- a/libs/ardour/gain_control.cc +++ b/libs/ardour/gain_control.cc @@ -22,7 +22,7 @@ #include "pbd/convert.h" #include "pbd/strsplit.h" -#include "evoral/Curve.hpp" +#include "evoral/Curve.h" #include "ardour/dB.h" #include "ardour/gain_control.h" diff --git a/libs/ardour/import.cc b/libs/ardour/import.cc index cbc6ee3158..ee6bd6db89 100644 --- a/libs/ardour/import.cc +++ b/libs/ardour/import.cc @@ -47,7 +47,7 @@ #include "pbd/basename.h" #include "pbd/convert.h" -#include "evoral/SMF.hpp" +#include "evoral/SMF.h" #include "ardour/analyser.h" #include "ardour/ardour.h" diff --git a/libs/ardour/luabindings.cc b/libs/ardour/luabindings.cc index 6e0a82b20d..b05a625396 100644 --- a/libs/ardour/luabindings.cc +++ b/libs/ardour/luabindings.cc @@ -27,9 +27,9 @@ #include "temporal/bbt_time.h" -#include "evoral/Control.hpp" -#include "evoral/ControlList.hpp" -#include "evoral/Range.hpp" +#include "evoral/Control.h" +#include "evoral/ControlList.h" +#include "evoral/Range.h" #include "ardour/amp.h" #include "ardour/async_midi_port.h" diff --git a/libs/ardour/midi_model.cc b/libs/ardour/midi_model.cc index d14eeb8c19..b3a441db36 100644 --- a/libs/ardour/midi_model.cc +++ b/libs/ardour/midi_model.cc @@ -33,7 +33,7 @@ #include "pbd/enumwriter.h" #include "pbd/error.h" -#include "evoral/Control.hpp" +#include "evoral/Control.h" #include "midi++/events.h" diff --git a/libs/ardour/midi_playlist.cc b/libs/ardour/midi_playlist.cc index 00d1f5badd..21dec88ad4 100644 --- a/libs/ardour/midi_playlist.cc +++ b/libs/ardour/midi_playlist.cc @@ -25,8 +25,8 @@ #include #include -#include "evoral/EventList.hpp" -#include "evoral/Control.hpp" +#include "evoral/EventList.h" +#include "evoral/Control.h" #include "ardour/beats_samples_converter.h" #include "ardour/debug.h" diff --git a/libs/ardour/midi_scene_changer.cc b/libs/ardour/midi_scene_changer.cc index 05bfdbf1e7..83cccbeb15 100644 --- a/libs/ardour/midi_scene_changer.cc +++ b/libs/ardour/midi_scene_changer.cc @@ -17,7 +17,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "evoral/Event.hpp" +#include "evoral/Event.h" #include "midi++/channel.h" #include "midi++/parser.h" #include "midi++/port.h" diff --git a/libs/ardour/midi_source.cc b/libs/ardour/midi_source.cc index 2f6c62f4a8..3d188898f4 100644 --- a/libs/ardour/midi_source.cc +++ b/libs/ardour/midi_source.cc @@ -40,8 +40,8 @@ #include "pbd/basename.h" #include "pbd/timing.h" -#include "evoral/Control.hpp" -#include "evoral/EventSink.hpp" +#include "evoral/Control.h" +#include "evoral/EventSink.h" #include "ardour/debug.h" #include "ardour/file_source.h" diff --git a/libs/ardour/midi_state_tracker.cc b/libs/ardour/midi_state_tracker.cc index bdba604a4a..ecc860fa92 100644 --- a/libs/ardour/midi_state_tracker.cc +++ b/libs/ardour/midi_state_tracker.cc @@ -23,7 +23,7 @@ #include "pbd/compose.h" #include "pbd/stacktrace.h" -#include "evoral/EventSink.hpp" +#include "evoral/EventSink.h" #include "ardour/debug.h" #include "ardour/midi_source.h" diff --git a/libs/ardour/mute_control.cc b/libs/ardour/mute_control.cc index 105cb3e7b2..530ca7bac8 100644 --- a/libs/ardour/mute_control.cc +++ b/libs/ardour/mute_control.cc @@ -17,7 +17,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "evoral/ControlList.hpp" +#include "evoral/ControlList.h" #include "ardour/mute_master.h" #include "ardour/session.h" diff --git a/libs/ardour/panner_shell.cc b/libs/ardour/panner_shell.cc index e135fcd163..45b8d7e80b 100644 --- a/libs/ardour/panner_shell.cc +++ b/libs/ardour/panner_shell.cc @@ -42,7 +42,7 @@ #include "pbd/xml++.h" #include "pbd/enumwriter.h" -#include "evoral/Curve.hpp" +#include "evoral/Curve.h" #include "ardour/audio_buffer.h" #include "ardour/audioengine.h" diff --git a/libs/ardour/session_command.cc b/libs/ardour/session_command.cc index ca0afeb6d1..44bacd2409 100644 --- a/libs/ardour/session_command.cc +++ b/libs/ardour/session_command.cc @@ -32,7 +32,7 @@ #include "ardour/session_playlists.h" #include "ardour/source.h" #include "ardour/tempo.h" -#include "evoral/Curve.hpp" +#include "evoral/Curve.h" #include "pbd/error.h" #include "pbd/failed_constructor.h" #include "pbd/id.h" diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index fe3368c50c..ea78133c86 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -71,7 +71,7 @@ #include "midi++/mmc.h" #include "midi++/port.h" -#include "evoral/SMF.hpp" +#include "evoral/SMF.h" #include "pbd/basename.h" #include "pbd/debug.h" diff --git a/libs/ardour/slavable_automation_control.cc b/libs/ardour/slavable_automation_control.cc index 50ebe6ed25..505c8ebfc2 100644 --- a/libs/ardour/slavable_automation_control.cc +++ b/libs/ardour/slavable_automation_control.cc @@ -26,7 +26,7 @@ #include "pbd/memento_command.h" #include "pbd/types_convert.h" -#include "evoral/Curve.hpp" +#include "evoral/Curve.h" #include "ardour/audioengine.h" #include "ardour/runtime_functions.h" diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc index 9b7acb9402..e0d65176c3 100644 --- a/libs/ardour/smf_source.cc +++ b/libs/ardour/smf_source.cc @@ -40,8 +40,8 @@ #include #include -#include "evoral/Control.hpp" -#include "evoral/SMF.hpp" +#include "evoral/Control.h" +#include "evoral/SMF.h" #include "ardour/debug.h" #include "ardour/midi_channel_filter.h" diff --git a/libs/ardour/test/combine_regions_test.cc b/libs/ardour/test/combine_regions_test.cc index 8c35e942fa..fe58ac21fc 100644 --- a/libs/ardour/test/combine_regions_test.cc +++ b/libs/ardour/test/combine_regions_test.cc @@ -21,7 +21,7 @@ #include "ardour/audioplaylist.h" #include "ardour/region.h" #include "ardour/audioregion.h" -#include "evoral/Curve.hpp" +#include "evoral/Curve.h" CPPUNIT_TEST_SUITE_REGISTRATION (CombineRegionsTest); diff --git a/libs/evoral/evoral/Control.h b/libs/evoral/evoral/Control.h new file mode 100644 index 0000000000..fd1f5eaa46 --- /dev/null +++ b/libs/evoral/evoral/Control.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2008-2014 David Robillard + * Copyright (C) 2010-2012 Carl Hetherington + * Copyright (C) 2010-2013 Paul Davis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef EVORAL_CONTROL_HPP +#define EVORAL_CONTROL_HPP + +#include +#include +#include +#include "pbd/signals.h" + +#include "evoral/visibility.h" +#include "evoral/Parameter.h" +#include "evoral/ParameterDescriptor.h" + +namespace Evoral { + +class ControlList; +class ParameterDescriptor; +class Transport; +class TypeMap; + +/** Base class representing some kind of (automatable) control; a fader's gain, + * for example, or a compressor plugin's threshold. + * + * The class knows the Evoral::Parameter that it is controlling, and has + * a list of values for automation. + */ +class LIBEVORAL_API Control +{ +public: + Control(const Parameter& parameter, + const ParameterDescriptor& desc, + boost::shared_ptr list); + + virtual ~Control() {} + + virtual void set_double (double val, double frame=0, bool to_list=false); + virtual double get_double (bool from_list=false, double frame=0) const; + + /** Get the latest user-set value + * (which may not equal get_value() when automation is playing back). + * + * Automation write/touch works by periodically sampling this value + * and adding it to the ControlList. + */ + double user_double() const { return _user_value; } + + void set_list(boost::shared_ptr); + + boost::shared_ptr list() { return _list; } + boost::shared_ptr list() const { return _list; } + + inline const Parameter& parameter() const { return _parameter; } + + /** Emitted when the our ControlList is marked dirty */ + PBD::Signal0 ListMarkedDirty; + +protected: + Parameter _parameter; + boost::shared_ptr _list; + double _user_value; + PBD::ScopedConnection _list_marked_dirty_connection; + +private: + void list_marked_dirty (); +}; + +} // namespace Evoral + +#endif // EVORAL_CONTROL_HPP diff --git a/libs/evoral/evoral/Control.hpp b/libs/evoral/evoral/Control.hpp deleted file mode 100644 index 25a313f9c3..0000000000 --- a/libs/evoral/evoral/Control.hpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2008-2014 David Robillard - * Copyright (C) 2010-2012 Carl Hetherington - * Copyright (C) 2010-2013 Paul Davis - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef EVORAL_CONTROL_HPP -#define EVORAL_CONTROL_HPP - -#include -#include -#include -#include "pbd/signals.h" - -#include "evoral/visibility.h" -#include "evoral/Parameter.hpp" -#include "evoral/ParameterDescriptor.hpp" - -namespace Evoral { - -class ControlList; -class ParameterDescriptor; -class Transport; -class TypeMap; - -/** Base class representing some kind of (automatable) control; a fader's gain, - * for example, or a compressor plugin's threshold. - * - * The class knows the Evoral::Parameter that it is controlling, and has - * a list of values for automation. - */ -class LIBEVORAL_API Control -{ -public: - Control(const Parameter& parameter, - const ParameterDescriptor& desc, - boost::shared_ptr list); - - virtual ~Control() {} - - virtual void set_double (double val, double frame=0, bool to_list=false); - virtual double get_double (bool from_list=false, double frame=0) const; - - /** Get the latest user-set value - * (which may not equal get_value() when automation is playing back). - * - * Automation write/touch works by periodically sampling this value - * and adding it to the ControlList. - */ - double user_double() const { return _user_value; } - - void set_list(boost::shared_ptr); - - boost::shared_ptr list() { return _list; } - boost::shared_ptr list() const { return _list; } - - inline const Parameter& parameter() const { return _parameter; } - - /** Emitted when the our ControlList is marked dirty */ - PBD::Signal0 ListMarkedDirty; - -protected: - Parameter _parameter; - boost::shared_ptr _list; - double _user_value; - PBD::ScopedConnection _list_marked_dirty_connection; - -private: - void list_marked_dirty (); -}; - -} // namespace Evoral - -#endif // EVORAL_CONTROL_HPP diff --git a/libs/evoral/evoral/ControlList.h b/libs/evoral/evoral/ControlList.h new file mode 100644 index 0000000000..baa00dc1f6 --- /dev/null +++ b/libs/evoral/evoral/ControlList.h @@ -0,0 +1,384 @@ +/* + * Copyright (C) 2008-2012 Carl Hetherington + * Copyright (C) 2008-2014 Paul Davis + * Copyright (C) 2008-2015 David Robillard + * Copyright (C) 2012-2017 Robin Gareus + * Copyright (C) 2015 Nick Mainsbridge + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef EVORAL_CONTROL_LIST_HPP +#define EVORAL_CONTROL_LIST_HPP + +#include +#include +#include + +#include +#include + +#include + +#include "pbd/signals.h" + +#include "evoral/visibility.h" +#include "evoral/Range.h" +#include "evoral/Parameter.h" +#include "evoral/ParameterDescriptor.h" + +namespace Evoral { + +class Curve; +class TypeMap; + +/** A single event (time-stamped value) for a control + */ +class LIBEVORAL_API ControlEvent { +public: + ControlEvent (double w, double v) + : when (w), value (v), coeff (0) + {} + + ControlEvent (const ControlEvent& other) + : when (other.when), value (other.value), coeff (0) + { + if (other.coeff) { + create_coeffs(); + for (size_t i = 0; i < 4; ++i) + coeff[i] = other.coeff[i]; + } + } + + ~ControlEvent() { if (coeff) delete[] coeff; } + + void create_coeffs() { + if (!coeff) + coeff = new double[4]; + + coeff[0] = coeff[1] = coeff[2] = coeff[3] = 0.0; + } + + double when; + double value; + double* coeff; ///< double[4] allocated by Curve as needed +}; + +/** A list (sequence) of time-stamped values for a control + */ +class LIBEVORAL_API ControlList +{ +public: + typedef std::list EventList; + typedef EventList::iterator iterator; + typedef EventList::reverse_iterator reverse_iterator; + typedef EventList::const_iterator const_iterator; + typedef EventList::const_reverse_iterator const_reverse_iterator; + + ControlList (const Parameter& id, const ParameterDescriptor& desc); + ControlList (const ControlList&); + ControlList (const ControlList&, double start, double end); + virtual ~ControlList(); + + virtual boost::shared_ptr create(const Parameter& id, const ParameterDescriptor& desc); + + void dump (std::ostream&); + + ControlList& operator= (const ControlList&); + bool operator== (const ControlList&); + void copy_events (const ControlList&); + + virtual void freeze(); + virtual void thaw (); + bool frozen() const { return _frozen; } + + const Parameter& parameter() const { return _parameter; } + void set_parameter(const Parameter& p) { _parameter = p; } + + const ParameterDescriptor& descriptor() const { return _desc; } + void set_descriptor(const ParameterDescriptor& d) { _desc = d; } + + EventList::size_type size() const { return _events.size(); } + + /** @return time-stamp of first or last event in the list */ + double when (bool at_start) const { + Glib::Threads::RWLock::ReaderLock lm (_lock); + if (_events.empty()) { + return 0.0; + } + return at_start ? _events.front()->when : _events.back()->when; + } + + double length() const { + Glib::Threads::RWLock::ReaderLock lm (_lock); + return _events.empty() ? 0.0 : _events.back()->when; + } + bool empty() const { return _events.empty(); } + + void clear (); + void x_scale (double factor); + bool extend_to (double); + void slide (iterator before, double distance); + void shift (double before, double distance); + + void y_transform (boost::function callback); + void list_merge (ControlList const& other, boost::function callback); + + /** add automation events + * @param when absolute time in samples + * @param value parameter value + * @param with_guards if true, add guard-points + * @param with_initial if true, add an initial point if the list is empty + */ + virtual void add (double when, double value, bool with_guards=true, bool with_initial=true); + + virtual bool editor_add (double when, double value, bool with_guard); + + /* to be used only for loading pre-sorted data from saved state */ + void fast_simple_add (double when, double value); + + void erase_range (double start, double end); + void erase (iterator); + void erase (iterator, iterator); + void erase (double, double); + bool move_ranges (std::list< RangeMove > const &); + void modify (iterator, double, double); + + /** Thin the number of events in this list. + * + * The thinning factor corresponds to the area of a triangle computed + * between three points in the list (time-difference * value-difference). + * If the area is large, it indicates significant non-linearity between + * the points. + * + * Time is measured in samples, value is usually normalized to 0..1. + * + * During automation recording we thin the recorded points using this + * value. If a point is sufficiently co-linear with its neighbours (as + * defined by the area of the triangle formed by three of them), we will + * not include it in the list. The larger the value, the more points are + * excluded, so this effectively measures the amount of thinning to be + * done. + * + * @param thinning_factor area-size (default: 20) + */ + void thin (double thinning_factor); + + boost::shared_ptr cut (double, double); + boost::shared_ptr copy (double, double); + + /** remove all automation events between the given time range + * @param start start of range (inclusive) in audio samples + * @param end end of range (inclusive) in audio samples + */ + void clear (double start, double end); + + bool paste (const ControlList&, double position); + + /** truncate the event list after the given time + * @param last_coordinate last event to include + */ + void truncate_end (double last_coordinate); + /** truncate the event list to the given time + * @param overall_length overall length + */ + void truncate_start (double overall_length); + + iterator begin() { return _events.begin(); } + const_iterator begin() const { return _events.begin(); } + iterator end() { return _events.end(); } + const_iterator end() const { return _events.end(); } + reverse_iterator rbegin() { return _events.rbegin(); } + const_reverse_iterator rbegin() const { return _events.rbegin(); } + reverse_iterator rend() { return _events.rend(); } + const_reverse_iterator rend() const { return _events.rend(); } + ControlEvent* back() { return _events.back(); } + const ControlEvent* back() const { return _events.back(); } + ControlEvent* front() { return _events.front(); } + const ControlEvent* front() const { return _events.front(); } + + std::pair control_points_adjacent (double when); + + template void apply_to_points (T& obj, void (T::*method)(const ControlList&)) { + Glib::Threads::RWLock::WriterLock lm (_lock); + (obj.*method)(*this); + } + + /** query value at given time (takes a read-lock, not safe while writing automation) + * @param where absolute time in samples + * @returns parameter value + */ + double eval (double where) const { + Glib::Threads::RWLock::ReaderLock lm (_lock); + return unlocked_eval (where); + } + + /** realtime safe version of eval, may fail if read-lock cannot be taken + * @param where absolute time in samples + * @param ok boolean reference if returned value is valid + * @returns parameter value + */ + double rt_safe_eval (double where, bool& ok) const { + + Glib::Threads::RWLock::ReaderLock lm (_lock, Glib::Threads::TRY_LOCK); + + if ((ok = lm.locked())) { + return unlocked_eval (where); + } else { + return 0.0; + } + } + + static inline bool time_comparator (const ControlEvent* a, const ControlEvent* b) { + return a->when < b->when; + } + + /** Lookup cache for eval functions, range contains equivalent values */ + struct LookupCache { + LookupCache() : left(-1) {} + double left; /* leftmost x coordinate used when finding "range" */ + std::pair range; + }; + + /** Lookup cache for point finding, range contains points after left */ + struct SearchCache { + SearchCache () : left(-1) {} + double left; /* leftmost x coordinate used when finding "first" */ + ControlList::const_iterator first; + }; + + const EventList& events() const { return _events; } + + // FIXME: const violations for Curve + Glib::Threads::RWLock& lock() const { return _lock; } + LookupCache& lookup_cache() const { return _lookup_cache; } + SearchCache& search_cache() const { return _search_cache; } + + /** Called by locked entry point and various private + * locations where we already hold the lock. + * + * FIXME: Should this be private? Curve needs it.. + */ + double unlocked_eval (double x) const; + + bool rt_safe_earliest_event (double start, double& x, double& y, bool start_inclusive=false) const; + bool rt_safe_earliest_event_unlocked (double start, double& x, double& y, bool start_inclusive=false) const; + bool rt_safe_earliest_event_linear_unlocked (double start, double& x, double& y, bool inclusive) const; + bool rt_safe_earliest_event_discrete_unlocked (double start, double& x, double& y, bool inclusive) const; + + void create_curve(); + void destroy_curve(); + + Curve& curve() { assert(_curve); return *_curve; } + const Curve& curve() const { assert(_curve); return *_curve; } + + void mark_dirty () const; + + enum InterpolationStyle { + Discrete, + Linear, + Curved, // spline, used for x-fades + Logarithmic, + Exponential // fader, gain + }; + + /** query interpolation style of the automation data + * @returns Interpolation Style + */ + InterpolationStyle interpolation() const { return _interpolation; } + + /** query default interpolation for parameter-descriptor */ + virtual InterpolationStyle default_interpolation() const; + + /** set the interpolation style of the automation data. + * + * This will fail when asking for Logarithmic scale and min,max crosses 0 + * or Exponential scale with min != 0. + * + * @param is interpolation style + * @returns true if style change was successful + */ + bool set_interpolation (InterpolationStyle is); + + virtual bool touching() const { return false; } + virtual bool writing() const { return false; } + virtual bool touch_enabled() const { return false; } + void start_write_pass (double when); + void write_pass_finished (double when, double thinning_factor=0.0); + void set_in_write_pass (bool, bool add_point = false, double when = 0.0); + bool in_write_pass () const; + bool in_new_write_pass () { return new_write_pass; } + + PBD::Signal0 WritePassStarted; + /** Emitted when mark_dirty() is called on this object */ + mutable PBD::Signal0 Dirty; + /** Emitted when our interpolation style changes */ + PBD::Signal1 InterpolationChanged; + + bool operator!= (ControlList const &) const; + + void invalidate_insert_iterator (); + +protected: + + /** Called by unlocked_eval() to handle cases of 3 or more control points. */ + double multipoint_eval (double x) const; + + void build_search_cache_if_necessary (double start) const; + + boost::shared_ptr cut_copy_clear (double, double, int op); + bool erase_range_internal (double start, double end, EventList &); + + void maybe_add_insert_guard (double when); + iterator erase_from_iterator_to (iterator iter, double when); + bool maybe_insert_straight_line (double when, double value); + + virtual void maybe_signal_changed (); + + void _x_scale (double factor); + + mutable LookupCache _lookup_cache; + mutable SearchCache _search_cache; + + mutable Glib::Threads::RWLock _lock; + + Parameter _parameter; + ParameterDescriptor _desc; + InterpolationStyle _interpolation; + EventList _events; + int8_t _frozen; + bool _changed_when_thawed; + bool _sort_pending; + + Curve* _curve; + +private: + iterator most_recent_insert_iterator; + double insert_position; + bool new_write_pass; + bool did_write_during_pass; + bool _in_write_pass; + + void unlocked_remove_duplicates (); + void unlocked_invalidate_insert_iterator (); + void add_guard_point (double when, double offset); + + bool is_sorted () const; +}; + +} // namespace Evoral + +#endif // EVORAL_CONTROL_LIST_HPP + diff --git a/libs/evoral/evoral/ControlList.hpp b/libs/evoral/evoral/ControlList.hpp deleted file mode 100644 index a2cc446f4b..0000000000 --- a/libs/evoral/evoral/ControlList.hpp +++ /dev/null @@ -1,384 +0,0 @@ -/* - * Copyright (C) 2008-2012 Carl Hetherington - * Copyright (C) 2008-2014 Paul Davis - * Copyright (C) 2008-2015 David Robillard - * Copyright (C) 2012-2017 Robin Gareus - * Copyright (C) 2015 Nick Mainsbridge - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef EVORAL_CONTROL_LIST_HPP -#define EVORAL_CONTROL_LIST_HPP - -#include -#include -#include - -#include -#include - -#include - -#include "pbd/signals.h" - -#include "evoral/visibility.h" -#include "evoral/Range.hpp" -#include "evoral/Parameter.hpp" -#include "evoral/ParameterDescriptor.hpp" - -namespace Evoral { - -class Curve; -class TypeMap; - -/** A single event (time-stamped value) for a control - */ -class LIBEVORAL_API ControlEvent { -public: - ControlEvent (double w, double v) - : when (w), value (v), coeff (0) - {} - - ControlEvent (const ControlEvent& other) - : when (other.when), value (other.value), coeff (0) - { - if (other.coeff) { - create_coeffs(); - for (size_t i = 0; i < 4; ++i) - coeff[i] = other.coeff[i]; - } - } - - ~ControlEvent() { if (coeff) delete[] coeff; } - - void create_coeffs() { - if (!coeff) - coeff = new double[4]; - - coeff[0] = coeff[1] = coeff[2] = coeff[3] = 0.0; - } - - double when; - double value; - double* coeff; ///< double[4] allocated by Curve as needed -}; - -/** A list (sequence) of time-stamped values for a control - */ -class LIBEVORAL_API ControlList -{ -public: - typedef std::list EventList; - typedef EventList::iterator iterator; - typedef EventList::reverse_iterator reverse_iterator; - typedef EventList::const_iterator const_iterator; - typedef EventList::const_reverse_iterator const_reverse_iterator; - - ControlList (const Parameter& id, const ParameterDescriptor& desc); - ControlList (const ControlList&); - ControlList (const ControlList&, double start, double end); - virtual ~ControlList(); - - virtual boost::shared_ptr create(const Parameter& id, const ParameterDescriptor& desc); - - void dump (std::ostream&); - - ControlList& operator= (const ControlList&); - bool operator== (const ControlList&); - void copy_events (const ControlList&); - - virtual void freeze(); - virtual void thaw (); - bool frozen() const { return _frozen; } - - const Parameter& parameter() const { return _parameter; } - void set_parameter(const Parameter& p) { _parameter = p; } - - const ParameterDescriptor& descriptor() const { return _desc; } - void set_descriptor(const ParameterDescriptor& d) { _desc = d; } - - EventList::size_type size() const { return _events.size(); } - - /** @return time-stamp of first or last event in the list */ - double when (bool at_start) const { - Glib::Threads::RWLock::ReaderLock lm (_lock); - if (_events.empty()) { - return 0.0; - } - return at_start ? _events.front()->when : _events.back()->when; - } - - double length() const { - Glib::Threads::RWLock::ReaderLock lm (_lock); - return _events.empty() ? 0.0 : _events.back()->when; - } - bool empty() const { return _events.empty(); } - - void clear (); - void x_scale (double factor); - bool extend_to (double); - void slide (iterator before, double distance); - void shift (double before, double distance); - - void y_transform (boost::function callback); - void list_merge (ControlList const& other, boost::function callback); - - /** add automation events - * @param when absolute time in samples - * @param value parameter value - * @param with_guards if true, add guard-points - * @param with_initial if true, add an initial point if the list is empty - */ - virtual void add (double when, double value, bool with_guards=true, bool with_initial=true); - - virtual bool editor_add (double when, double value, bool with_guard); - - /* to be used only for loading pre-sorted data from saved state */ - void fast_simple_add (double when, double value); - - void erase_range (double start, double end); - void erase (iterator); - void erase (iterator, iterator); - void erase (double, double); - bool move_ranges (std::list< RangeMove > const &); - void modify (iterator, double, double); - - /** Thin the number of events in this list. - * - * The thinning factor corresponds to the area of a triangle computed - * between three points in the list (time-difference * value-difference). - * If the area is large, it indicates significant non-linearity between - * the points. - * - * Time is measured in samples, value is usually normalized to 0..1. - * - * During automation recording we thin the recorded points using this - * value. If a point is sufficiently co-linear with its neighbours (as - * defined by the area of the triangle formed by three of them), we will - * not include it in the list. The larger the value, the more points are - * excluded, so this effectively measures the amount of thinning to be - * done. - * - * @param thinning_factor area-size (default: 20) - */ - void thin (double thinning_factor); - - boost::shared_ptr cut (double, double); - boost::shared_ptr copy (double, double); - - /** remove all automation events between the given time range - * @param start start of range (inclusive) in audio samples - * @param end end of range (inclusive) in audio samples - */ - void clear (double start, double end); - - bool paste (const ControlList&, double position); - - /** truncate the event list after the given time - * @param last_coordinate last event to include - */ - void truncate_end (double last_coordinate); - /** truncate the event list to the given time - * @param overall_length overall length - */ - void truncate_start (double overall_length); - - iterator begin() { return _events.begin(); } - const_iterator begin() const { return _events.begin(); } - iterator end() { return _events.end(); } - const_iterator end() const { return _events.end(); } - reverse_iterator rbegin() { return _events.rbegin(); } - const_reverse_iterator rbegin() const { return _events.rbegin(); } - reverse_iterator rend() { return _events.rend(); } - const_reverse_iterator rend() const { return _events.rend(); } - ControlEvent* back() { return _events.back(); } - const ControlEvent* back() const { return _events.back(); } - ControlEvent* front() { return _events.front(); } - const ControlEvent* front() const { return _events.front(); } - - std::pair control_points_adjacent (double when); - - template void apply_to_points (T& obj, void (T::*method)(const ControlList&)) { - Glib::Threads::RWLock::WriterLock lm (_lock); - (obj.*method)(*this); - } - - /** query value at given time (takes a read-lock, not safe while writing automation) - * @param where absolute time in samples - * @returns parameter value - */ - double eval (double where) const { - Glib::Threads::RWLock::ReaderLock lm (_lock); - return unlocked_eval (where); - } - - /** realtime safe version of eval, may fail if read-lock cannot be taken - * @param where absolute time in samples - * @param ok boolean reference if returned value is valid - * @returns parameter value - */ - double rt_safe_eval (double where, bool& ok) const { - - Glib::Threads::RWLock::ReaderLock lm (_lock, Glib::Threads::TRY_LOCK); - - if ((ok = lm.locked())) { - return unlocked_eval (where); - } else { - return 0.0; - } - } - - static inline bool time_comparator (const ControlEvent* a, const ControlEvent* b) { - return a->when < b->when; - } - - /** Lookup cache for eval functions, range contains equivalent values */ - struct LookupCache { - LookupCache() : left(-1) {} - double left; /* leftmost x coordinate used when finding "range" */ - std::pair range; - }; - - /** Lookup cache for point finding, range contains points after left */ - struct SearchCache { - SearchCache () : left(-1) {} - double left; /* leftmost x coordinate used when finding "first" */ - ControlList::const_iterator first; - }; - - const EventList& events() const { return _events; } - - // FIXME: const violations for Curve - Glib::Threads::RWLock& lock() const { return _lock; } - LookupCache& lookup_cache() const { return _lookup_cache; } - SearchCache& search_cache() const { return _search_cache; } - - /** Called by locked entry point and various private - * locations where we already hold the lock. - * - * FIXME: Should this be private? Curve needs it.. - */ - double unlocked_eval (double x) const; - - bool rt_safe_earliest_event (double start, double& x, double& y, bool start_inclusive=false) const; - bool rt_safe_earliest_event_unlocked (double start, double& x, double& y, bool start_inclusive=false) const; - bool rt_safe_earliest_event_linear_unlocked (double start, double& x, double& y, bool inclusive) const; - bool rt_safe_earliest_event_discrete_unlocked (double start, double& x, double& y, bool inclusive) const; - - void create_curve(); - void destroy_curve(); - - Curve& curve() { assert(_curve); return *_curve; } - const Curve& curve() const { assert(_curve); return *_curve; } - - void mark_dirty () const; - - enum InterpolationStyle { - Discrete, - Linear, - Curved, // spline, used for x-fades - Logarithmic, - Exponential // fader, gain - }; - - /** query interpolation style of the automation data - * @returns Interpolation Style - */ - InterpolationStyle interpolation() const { return _interpolation; } - - /** query default interpolation for parameter-descriptor */ - virtual InterpolationStyle default_interpolation() const; - - /** set the interpolation style of the automation data. - * - * This will fail when asking for Logarithmic scale and min,max crosses 0 - * or Exponential scale with min != 0. - * - * @param is interpolation style - * @returns true if style change was successful - */ - bool set_interpolation (InterpolationStyle is); - - virtual bool touching() const { return false; } - virtual bool writing() const { return false; } - virtual bool touch_enabled() const { return false; } - void start_write_pass (double when); - void write_pass_finished (double when, double thinning_factor=0.0); - void set_in_write_pass (bool, bool add_point = false, double when = 0.0); - bool in_write_pass () const; - bool in_new_write_pass () { return new_write_pass; } - - PBD::Signal0 WritePassStarted; - /** Emitted when mark_dirty() is called on this object */ - mutable PBD::Signal0 Dirty; - /** Emitted when our interpolation style changes */ - PBD::Signal1 InterpolationChanged; - - bool operator!= (ControlList const &) const; - - void invalidate_insert_iterator (); - -protected: - - /** Called by unlocked_eval() to handle cases of 3 or more control points. */ - double multipoint_eval (double x) const; - - void build_search_cache_if_necessary (double start) const; - - boost::shared_ptr cut_copy_clear (double, double, int op); - bool erase_range_internal (double start, double end, EventList &); - - void maybe_add_insert_guard (double when); - iterator erase_from_iterator_to (iterator iter, double when); - bool maybe_insert_straight_line (double when, double value); - - virtual void maybe_signal_changed (); - - void _x_scale (double factor); - - mutable LookupCache _lookup_cache; - mutable SearchCache _search_cache; - - mutable Glib::Threads::RWLock _lock; - - Parameter _parameter; - ParameterDescriptor _desc; - InterpolationStyle _interpolation; - EventList _events; - int8_t _frozen; - bool _changed_when_thawed; - bool _sort_pending; - - Curve* _curve; - -private: - iterator most_recent_insert_iterator; - double insert_position; - bool new_write_pass; - bool did_write_during_pass; - bool _in_write_pass; - - void unlocked_remove_duplicates (); - void unlocked_invalidate_insert_iterator (); - void add_guard_point (double when, double offset); - - bool is_sorted () const; -}; - -} // namespace Evoral - -#endif // EVORAL_CONTROL_LIST_HPP - diff --git a/libs/evoral/evoral/ControlSet.h b/libs/evoral/evoral/ControlSet.h new file mode 100644 index 0000000000..81d255859c --- /dev/null +++ b/libs/evoral/evoral/ControlSet.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2008-2015 David Robillard + * Copyright (C) 2010-2017 Paul Davis + * Copyright (C) 2010 Carl Hetherington + * Copyright (C) 2015 Robin Gareus + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef EVORAL_CONTROLLABLE_HPP +#define EVORAL_CONTROLLABLE_HPP + +#include +#include +#include +#include +#include +#include "pbd/signals.h" + +#include "evoral/visibility.h" +#include "evoral/Parameter.h" +#include "evoral/ControlList.h" + +namespace Evoral { + +class Control; +class ControlEvent; + +class LIBEVORAL_API ControlSet : public boost::noncopyable { +public: + ControlSet(); + ControlSet (const ControlSet&); + virtual ~ControlSet() {} + + virtual boost::shared_ptr control_factory(const Evoral::Parameter& id) = 0; + + boost::shared_ptr + control (const Parameter& id, bool create_if_missing=false); + + inline boost::shared_ptr + control (const Parameter& id) const { + const Controls::const_iterator i = _controls.find(id); + return (i != _controls.end() ? i->second : boost::shared_ptr()); + } + + typedef std::map< Parameter, boost::shared_ptr > Controls; + inline Controls& controls() { return _controls; } + inline const Controls& controls() const { return _controls; } + + virtual void add_control(boost::shared_ptr); + + virtual bool controls_empty() const { return _controls.size() == 0; } + virtual void clear_controls(); + + void what_has_data(std::set&) const; + + Glib::Threads::Mutex& control_lock() const { return _control_lock; } + +protected: + virtual void control_list_marked_dirty () {} + virtual void control_list_interpolation_changed (Parameter, ControlList::InterpolationStyle) {} + + mutable Glib::Threads::Mutex _control_lock; + Controls _controls; + + PBD::ScopedConnectionList _list_connections; + +private: + + PBD::ScopedConnectionList _control_connections; +}; + + +} // namespace Evoral + +#endif // EVORAL_CONTROLLABLE_HPP diff --git a/libs/evoral/evoral/ControlSet.hpp b/libs/evoral/evoral/ControlSet.hpp deleted file mode 100644 index ef7e8f319f..0000000000 --- a/libs/evoral/evoral/ControlSet.hpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2008-2015 David Robillard - * Copyright (C) 2010-2017 Paul Davis - * Copyright (C) 2010 Carl Hetherington - * Copyright (C) 2015 Robin Gareus - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef EVORAL_CONTROLLABLE_HPP -#define EVORAL_CONTROLLABLE_HPP - -#include -#include -#include -#include -#include -#include "pbd/signals.h" - -#include "evoral/visibility.h" -#include "evoral/Parameter.hpp" -#include "evoral/ControlList.hpp" - -namespace Evoral { - -class Control; -class ControlEvent; - -class LIBEVORAL_API ControlSet : public boost::noncopyable { -public: - ControlSet(); - ControlSet (const ControlSet&); - virtual ~ControlSet() {} - - virtual boost::shared_ptr control_factory(const Evoral::Parameter& id) = 0; - - boost::shared_ptr - control (const Parameter& id, bool create_if_missing=false); - - inline boost::shared_ptr - control (const Parameter& id) const { - const Controls::const_iterator i = _controls.find(id); - return (i != _controls.end() ? i->second : boost::shared_ptr()); - } - - typedef std::map< Parameter, boost::shared_ptr > Controls; - inline Controls& controls() { return _controls; } - inline const Controls& controls() const { return _controls; } - - virtual void add_control(boost::shared_ptr); - - virtual bool controls_empty() const { return _controls.size() == 0; } - virtual void clear_controls(); - - void what_has_data(std::set&) const; - - Glib::Threads::Mutex& control_lock() const { return _control_lock; } - -protected: - virtual void control_list_marked_dirty () {} - virtual void control_list_interpolation_changed (Parameter, ControlList::InterpolationStyle) {} - - mutable Glib::Threads::Mutex _control_lock; - Controls _controls; - - PBD::ScopedConnectionList _list_connections; - -private: - - PBD::ScopedConnectionList _control_connections; -}; - - -} // namespace Evoral - -#endif // EVORAL_CONTROLLABLE_HPP diff --git a/libs/evoral/evoral/Curve.h b/libs/evoral/evoral/Curve.h new file mode 100644 index 0000000000..33bcf1d72a --- /dev/null +++ b/libs/evoral/evoral/Curve.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2008-2016 David Robillard + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef EVORAL_CURVE_HPP +#define EVORAL_CURVE_HPP + +#include +#include + +#include "evoral/visibility.h" + +namespace Evoral { + +class ControlList; + +class LIBEVORAL_API Curve : public boost::noncopyable +{ +public: + Curve (const ControlList& cl); + + bool rt_safe_get_vector (double x0, double x1, float *arg, int32_t veclen) const; + void get_vector (double x0, double x1, float *arg, int32_t veclen) const; + + void solve () const; + + void mark_dirty() const { _dirty = true; } + +private: + double multipoint_eval (double x) const; + + void _get_vector (double x0, double x1, float *arg, int32_t veclen) const; + + mutable bool _dirty; + const ControlList& _list; +}; + +} // namespace Evoral + +#endif // EVORAL_CURVE_HPP + diff --git a/libs/evoral/evoral/Curve.hpp b/libs/evoral/evoral/Curve.hpp deleted file mode 100644 index 33bcf1d72a..0000000000 --- a/libs/evoral/evoral/Curve.hpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2008-2016 David Robillard - * - * 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., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef EVORAL_CURVE_HPP -#define EVORAL_CURVE_HPP - -#include -#include - -#include "evoral/visibility.h" - -namespace Evoral { - -class ControlList; - -class LIBEVORAL_API Curve : public boost::noncopyable -{ -public: - Curve (const ControlList& cl); - - bool rt_safe_get_vector (double x0, double x1, float *arg, int32_t veclen) const; - void get_vector (double x0, double x1, float *arg, int32_t veclen) const; - - void solve () const; - - void mark_dirty() const { _dirty = true; } - -private: - double multipoint_eval (double x) const; - - void _get_vector (double x0, double x1, float *arg, int32_t veclen) const; - - mutable bool _dirty; - const ControlList& _list; -}; - -} // namespace Evoral - -#endif // EVORAL_CURVE_HPP - diff --git a/libs/evoral/evoral/Event.h b/libs/evoral/evoral/Event.h new file mode 100644 index 0000000000..6780b4e636 --- /dev/null +++ b/libs/evoral/evoral/Event.h @@ -0,0 +1,221 @@ +/* + * Copyright (C) 2008-2016 David Robillard + * Copyright (C) 2009-2013 Paul Davis + * Copyright (C) 2009 Hans Baier + * Copyright (C) 2010 Carl Hetherington + * Copyright (C) 2015-2016 Robin Gareus + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef EVORAL_EVENT_HPP +#define EVORAL_EVENT_HPP + +#include +#include +#include +#include + +#include "evoral/midi_events.h" +#include "evoral/types.h" +#include "evoral/visibility.h" + +/** If this is not defined, all methods of MidiEvent are RT safe + * but MidiEvent will never deep copy and (depending on the scenario) + * may not be usable in STL containers, signals, etc. + */ +#define EVORAL_EVENT_ALLOC 1 + +namespace Evoral { + +LIBEVORAL_API event_id_t event_id_counter(); +LIBEVORAL_API event_id_t next_event_id(); +LIBEVORAL_API void init_event_id_counter(event_id_t n); + +/** An event (much like a type generic jack_midi_event_t) + * + * Template parameter Time is the type of the time stamp used for this event. + */ +template +class LIBEVORAL_API Event { +public: +#ifdef EVORAL_EVENT_ALLOC + Event(EventType type=NO_EVENT, Time time=Time(), uint32_t size=0, uint8_t* buf=NULL, bool alloc=false); + + Event(EventType type, Time time, uint32_t size, const uint8_t* buf); + + /** Copy \a copy. + * + * If \a alloc is true, the buffer will be copied and this method + * is NOT REALTIME SAFE. Otherwise both events share a buffer and + * memory management semantics are the caller's problem. + */ + Event(const Event& copy, bool alloc); + + ~Event(); + + void assign(const Event& other); + + void set(const uint8_t* buf, uint32_t size, Time t); + + inline bool operator==(const Event& other) const { + if (_type != other._type || _time != other._time || _size != other._size) { + return false; + } + return !memcmp(_buf, other._buf, _size); + } + + inline bool operator!=(const Event& other) const { return ! operator==(other); } + + inline bool owns_buffer() const { return _owns_buf; } + + /** set event data (e.g. midi data) + * @param size number of bytes + * @param buf raw 8bit data + * @param own set to true if the buffer owns the data (copy, allocate/free) or false to reference previously allocated data. + */ + inline void set_buffer(uint32_t size, uint8_t* buf, bool own) { + if (_owns_buf) { + free(_buf); + _buf = NULL; + } + _size = size; + _buf = buf; + _owns_buf = own; + } + + inline void realloc(uint32_t size) { + if (_owns_buf) { + if (size > _size) + _buf = (uint8_t*) ::realloc(_buf, size); + } else { + _buf = (uint8_t*) ::malloc(size); + _owns_buf = true; + } + + _size = size; + } + + inline void clear() { + _type = NO_EVENT; + _time = Time(); + _size = 0; + _buf = NULL; + } + +#endif // EVORAL_EVENT_ALLOC + + inline EventType event_type() const { return _type; } + inline Time time() const { return _time; } + inline uint32_t size() const { return _size; } + inline const uint8_t* buffer() const { return _buf; } + inline uint8_t* buffer() { return _buf; } + + inline void set_event_type(EventType t) { _type = t; } + + inline void set_time(Time t) { _time = t; } + + inline event_id_t id() const { return _id; } + inline void set_id(event_id_t n) { _id = n; } + + /* The following methods are type specific and only make sense for the + correct event type. It is the caller's responsibility to only call + methods which make sense for the given event type. Currently this means + they all only make sense for MIDI, but built-in support may be added for + other protocols in the future, or the internal representation may change + to be protocol agnostic. */ + + uint8_t type() const { return _buf[0] & 0xF0; } + uint8_t channel() const { return _buf[0] & 0x0F; } + bool is_note_on() const { return type() == MIDI_CMD_NOTE_ON; } + bool is_note_off() const { return type() == MIDI_CMD_NOTE_OFF; } + bool is_note() const { return is_note_on() || is_note_off(); } + bool is_poly_pressure() const { return type() == MIDI_CMD_NOTE_PRESSURE; } + bool is_channel_pressure() const { return type() == MIDI_CMD_CHANNEL_PRESSURE; } + bool is_cc() const { return type() == MIDI_CMD_CONTROL; } + bool is_pgm_change() const { return type() == MIDI_CMD_PGM_CHANGE; } + bool is_pitch_bender() const { return type() == MIDI_CMD_BENDER; } + bool is_channel_event() const { return (0x80 <= type()) && (type() <= 0xE0); } + bool is_smf_meta_event() const { return _buf[0] == 0xFF; } + bool is_sysex() const { return _buf[0] == 0xF0 || _buf[0] == 0xF7; } + bool is_spp() const { return _buf[0] == 0xF2 && size() == 1; } + bool is_mtc_quarter() const { return _buf[0] == 0xF1 && size() == 1; } + bool is_mtc_full() const { return (size() == 10 && + _buf[0] == 0xF0 && _buf[1] == 0x7F && + _buf[3] == 0x01 && _buf[4] == 0x01); } + + uint8_t note() const { return _buf[1]; } + uint8_t velocity() const { return _buf[2]; } + uint8_t poly_note() const { return _buf[1]; } + uint8_t poly_pressure() const { return _buf[2]; } + uint8_t channel_pressure() const { return _buf[1]; } + uint8_t cc_number() const { return _buf[1]; } + uint8_t cc_value() const { return _buf[2]; } + uint8_t pgm_number() const { return _buf[1]; } + uint8_t pitch_bender_lsb() const { return _buf[1]; } + uint8_t pitch_bender_msb() const { return _buf[2]; } + uint16_t pitch_bender_value() const { return ((0x7F & _buf[2]) << 7 | (0x7F & _buf[1])); } + + void set_channel(uint8_t channel) { _buf[0] = (0xF0 & _buf[0]) | (0x0F & channel); } + void set_type(uint8_t type) { _buf[0] = (0x0F & _buf[0]) | (0xF0 & type); } + void set_note(uint8_t num) { _buf[1] = num; } + void set_velocity(uint8_t val) { _buf[2] = val; } + void set_cc_number(uint8_t num) { _buf[1] = num; } + void set_cc_value(uint8_t val) { _buf[2] = val; } + void set_pgm_number(uint8_t num) { _buf[1] = num; } + + uint16_t value() const { + switch (type()) { + case MIDI_CMD_CONTROL: + return cc_value(); + case MIDI_CMD_BENDER: + return pitch_bender_value(); + case MIDI_CMD_NOTE_PRESSURE: + return poly_pressure(); + case MIDI_CMD_CHANNEL_PRESSURE: + return channel_pressure(); + case MIDI_CMD_PGM_CHANGE: + return pgm_number(); + default: + return 0; + } + } + +protected: + EventType _type; ///< Type of event (application relative, NOT MIDI 'type') + Time _time; ///< Time stamp of event + uint32_t _size; ///< Size of buffer in bytes + uint8_t* _buf; ///< Event contents (e.g. raw MIDI data) + event_id_t _id; ///< Unique event ID +#ifdef EVORAL_EVENT_ALLOC + bool _owns_buf; ///< Whether buffer is locally allocated +#endif +}; + +template +/*LIBEVORAL_API*/ std::ostream& operator<<(std::ostream& o, const Evoral::Event