19class AudioRegion final
21 public ArrangerObjectOwner<AudioSourceObject>
25 AudioRegion::MusicalMode musicalMode READ musicalMode WRITE setMusicalMode
26 NOTIFY musicalModeChanged)
27 Q_PROPERTY (
float gain READ gain WRITE setGain NOTIFY gainChanged)
28 DEFINE_ARRANGER_OBJECT_OWNER_QML_PROPERTIES (
39 enum class MusicalMode : std::uint8_t
49 using GlobalMusicalModeGetter = std::function<bool ()>;
54 static constexpr int BUILTIN_FADE_FRAMES = 10;
58 const dsp::TempoMap &tempo_map,
60 GlobalMusicalModeGetter musical_mode_getter,
61 QObject * parent =
nullptr)
noexcept;
67 MusicalMode musicalMode ()
const {
return musical_mode_; }
68 Q_INVOKABLE
bool effectivelyInMusicalMode ()
const;
69 void setMusicalMode (MusicalMode musical_mode)
71 if (musical_mode_ != musical_mode)
73 musical_mode_ = musical_mode;
74 Q_EMIT musicalModeChanged (musical_mode);
77 Q_SIGNAL
void musicalModeChanged (MusicalMode musical_mode);
79 float gain ()
const {
return gain_.load (); }
80 void setGain (
float gain)
82 gain = std::clamp (gain, 0.f, 2.f);
83 if (qFuzzyCompare (gain_, gain))
86 Q_EMIT gainChanged (gain);
88 Q_SIGNAL
void gainChanged (
float gain);
97 void set_source (
const ArrangerObjectUuidReference &source);
99 juce::PositionableAudioSource &get_audio_source ()
const;
104 return "audioSources";
107 std::vector<ArrangerObjectListModel *> get_child_list_models ()
const override
109 return { ArrangerObjectOwner<AudioSourceObject>::get_model () };
113 friend void init_from (
115 const AudioRegion &other,
118 static constexpr auto kGainKey =
"gain"sv;
119 static constexpr auto kMusicalModeKey =
"musicalMode"sv;
120 friend void to_json (nlohmann::json &j,
const AudioRegion ®ion);
121 friend void from_json (
const nlohmann::json &j, AudioRegion ®ion);
125 std::atomic<float> gain_ = 1.0f;
128 MusicalMode musical_mode_{};
130 GlobalMusicalModeGetter global_musical_mode_getter_;
132 BOOST_DESCRIBE_CLASS (
137 (gain_, musical_mode_))