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,
59 ArrangerObjectRegistry &object_registry,
60 dsp::FileAudioSourceRegistry &file_audio_source_registry,
61 GlobalMusicalModeGetter musical_mode_getter,
62 QObject * parent =
nullptr)
noexcept;
68 MusicalMode musicalMode ()
const {
return musical_mode_; }
69 Q_INVOKABLE
bool effectivelyInMusicalMode ()
const;
70 void setMusicalMode (MusicalMode musical_mode)
72 if (musical_mode_ != musical_mode)
74 musical_mode_ = musical_mode;
75 Q_EMIT musicalModeChanged (musical_mode);
78 Q_SIGNAL
void musicalModeChanged (MusicalMode musical_mode);
80 float gain ()
const {
return gain_.load (); }
81 void setGain (
float gain)
83 gain = std::clamp (gain, 0.f, 2.f);
84 if (qFuzzyCompare (gain_, gain))
87 Q_EMIT gainChanged (gain);
89 Q_SIGNAL
void gainChanged (
float gain);
98 void set_source (
const ArrangerObjectUuidReference &source);
100 juce::PositionableAudioSource &get_audio_source ()
const;
105 return "audioSources";
109 friend void init_from (
114 static constexpr auto kGainKey =
"gain"sv;
115 static constexpr auto kMusicalModeKey =
"musicalMode"sv;
116 friend void to_json (nlohmann::json &j,
const AudioRegion ®ion)
120 j[kGainKey] = region.gain_.load ();
121 j[kMusicalModeKey] = region.musical_mode_;
123 friend void from_json (
const nlohmann::json &j, AudioRegion ®ion)
126 from_json (j,
static_cast<ArrangerObjectOwner &
> (region));
128 j.at (kGainKey).get_to (gain);
129 region.gain_.store (gain);
130 j.at (kMusicalModeKey).get_to (region.musical_mode_);
134 dsp::FileAudioSourceRegistry &file_audio_source_registry_;
137 std::atomic<float> gain_ = 1.0f;
140 MusicalMode musical_mode_{};
142 GlobalMusicalModeGetter global_musical_mode_getter_;
144 BOOST_DESCRIBE_CLASS (
149 (gain_, musical_mode_))