33class AudioClipWaveformCanvasItem :
public WaveformCanvasItem
36 QML_NAMED_ELEMENT (AudioClipWaveformCanvas)
40 setAudioClip NOTIFY audioClipChanged)
42 QObject * tempoMap READ tempoMap WRITE setTempoMap NOTIFY tempoMapChanged)
45 explicit AudioClipWaveformCanvasItem (QQuickItem * parent =
nullptr);
50 QObject * tempoMap ()
const {
return tempo_map_; }
51 void setTempoMap (QObject * tempoMap);
57 return audio_clip_ !=
nullptr && audio_clip_->looped ()
58 && last_snapshot_.loop_end_samples > last_snapshot_.loop_start_samples;
63 int64_t
loopStartFrame ()
const {
return last_snapshot_.loop_start_samples; }
64 int64_t loopEndFrame ()
const {
return last_snapshot_.loop_end_samples; }
65 int64_t clipStartFrame ()
const {
return last_snapshot_.clip_start_samples; }
72 return last_snapshot_.loop_end_samples - last_snapshot_.clip_start_samples;
81 qreal reference_width,
82 qreal reference_x)
const;
85 void audioClipChanged ();
86 void tempoMapChanged ();
97 int64_t clip_start_samples{};
98 int64_t loop_start_samples{};
99 int64_t loop_end_samples{};
100 int64_t length_samples{};
101 int64_t fade_in_samples{};
102 int64_t fade_out_samples{};
106 operator== (
const ClipSnapshot &,
const ClipSnapshot &) =
default;
109 ClipSnapshot take_snapshot ()
const;
112 void handle_property_change ();
115 QPointer<structure::arrangement::AudioClip> audio_clip_;
116 std::vector<QMetaObject::Connection> clip_connections_;
117 QPointer<QObject> tempo_map_;
118 std::vector<QMetaObject::Connection> tempo_map_connections_;
119 ClipSnapshot last_snapshot_;