24 public ArrangerObjectOwner<MidiNote>,
25 public ArrangerObjectOwner<MidiControlEvent>
28 DEFINE_ARRANGER_OBJECT_OWNER_QML_PROPERTIES (MidiClip, midiNotes,
MidiNote)
29 DEFINE_ARRANGER_OBJECT_OWNER_QML_PROPERTIES (
42 QObject * parent =
nullptr);
52 [[nodiscard]] units::bpm_t
source_bpm ()
const {
return source_bpm_; }
53 void set_source_bpm (units::bpm_t bpm);
57 std::string get_field_name_for_serialization (
const MidiNote *)
const override
62 get_field_name_for_serialization (
const MidiControlEvent *)
const override
64 return "midiControlEvents";
67 std::vector<ArrangerObjectListModel *> get_child_list_models ()
const override
70 ArrangerObjectOwner<MidiNote>::get_model (),
71 ArrangerObjectOwner<MidiControlEvent>::get_model (),
80 friend void init_from (
82 const MidiClip &other,
86 void update_warp_configuration ();
88 friend void to_json (nlohmann::json &j,
const MidiClip &clip)
90 to_json (j,
static_cast<const Clip &
> (clip));
91 to_json (j,
static_cast<const ArrangerObjectOwner<MidiNote> &
> (clip));
93 j,
static_cast<const ArrangerObjectOwner<MidiControlEvent> &
> (clip));
94 j[
"sourceBpm"] = clip.source_bpm_;
96 friend void from_json (
const nlohmann::json &j,
MidiClip &clip)
98 from_json (j,
static_cast<Clip &
> (clip));
101 if (j.contains (
"sourceBpm"))
102 j.at (
"sourceBpm").get_to (clip.source_bpm_);
103 clip.update_warp_configuration ();
107 units::bpm_t source_bpm_{};
109 BOOST_DESCRIBE_CLASS (
111 (Clip, ArrangerObjectOwner<MidiNote>, ArrangerObjectOwner<MidiControlEvent>),