3 #ifndef XJ_MUSIC_CRAFT_H
4 #define XJ_MUSIC_CRAFT_H
55 std::function<std::optional<Instrument>(
ProgramVoice)> func_;
76 return func_(*choice);
173 const std::function<
bool(
const SegmentChoice *)> &choiceFilter,
174 const ChoiceIndexProvider &setChoiceIndexProvider,
175 const std::vector<std::string> &layersInCraftOrder,
176 const std::set<std::string> &layerPrioritizationSearches,
177 const int numLayersIncoming);
187 static bool inBounds(
int floor,
int ceiling,
float value);
212 [[nodiscard]] std::optional<const Program *>
224 [[nodiscard]] std::optional<const Instrument *>
239 [[nodiscard]] std::optional<const InstrumentAudio *>
241 const std::set<Instrument::Type> &types,
242 const std::set<Instrument::Mode> &modes,
243 const std::set<UUID> &avoidIds,
244 const std::set<std::string> &preferredEvents)
const;
253 [[nodiscard]] std::optional<const InstrumentAudio *>
271 [[nodiscard]] std::set<const Program *>
programsDirectlyBound(
const std::set<const Program *> &programs)
const;
279 static std::set<const Program *>
programsPublished(
const std::set<const Program *> &programs);
287 [[nodiscard]] std::set<const Instrument *>
296 [[nodiscard]]
static std::set<const Instrument *>
305 [[nodiscard]] std::set<const InstrumentAudio *>
314 [[nodiscard]] std::set<const InstrumentAudio *>
315 audiosPublished(
const std::set<const InstrumentAudio *> &instrumentAudios)
const;
338 long startAtSegmentMicros,
340 const std::string& event)
const;
350 [[nodiscard]] std::set<const InstrumentAudio *>
366 const std::set<const ProgramVoice *> &voices,
367 LambdaInstrumentProvider instrumentProvider);
417 std::random_device rd;
418 std::mt19937 gen{rd()};
433 bool defaultAtonal)
const;
440 [[nodiscard]] std::vector<Section> computeSections()
const;
453 void craftNoteEventSection(
459 bool defaultAtonal)
const;
474 float craftPatternEvents(
481 bool defaultAtonal)
const;
497 void pickNotesAndInstrumentAudioForEvent(
502 const float fromPosition,
503 const float toPosition,
506 const bool defaultAtonal)
const;
515 void finalizeNoteEventCutoffsOfOneShotInstrumentAudioPicks(
const SegmentChoice *choice);
524 [[nodiscard]]
float computeVolumeRatioForPickedNote(
const SegmentChoice &choice,
float segmentPosition)
const;
539 [[nodiscard]] std::set<std::string> pickNotesForEvent(
565 const std::string ¬e,
569 const long &startAtSegmentMicros,
570 const std::optional<long> &lengthMicros,
571 const std::optional<UUID> &segmentChordVoicingId,
572 const float &volRatio)
const;
584 std::optional<const InstrumentAudio *>
586 const std::string ¬e)
const;
598 [[nodiscard]] std::optional<const InstrumentAudio *>
611 [[nodiscard]] std::optional<const InstrumentAudio *>
612 selectChordPartInstrumentAudio(
const Instrument *instrument,
const Chord &chord)
const;
621 [[nodiscard]] std::optional<const InstrumentAudio *>
633 std::optional<const InstrumentAudio *>
634 selectNewMultiphonicInstrumentAudio(
const Instrument *instrument, std::string note)
const;
646 instrumentContainsAudioEventsLike(
const Instrument &instrument,
const std::set<std::string> &requireEvents)
const;
virtual std::string get(const SegmentChoice *choice)
Definition: Craft.cpp:1030
virtual ~ChoiceIndexProvider()=default
virtual ~InstrumentProvider()=default
virtual std::optional< Instrument > get(const ProgramVoice *voice)
Definition: Craft.cpp:1038
LambdaChoiceIndexProvider(std::function< std::string(SegmentChoice)> func)
Definition: Craft.h:73
std::string get(const SegmentChoice *choice) override
Definition: Craft.h:75
LambdaInstrumentProvider(std::function< std::optional< Instrument >(ProgramVoice)> func)
Definition: Craft.h:47
std::optional< Instrument > get(const ProgramVoice *voice) override
Definition: Craft.h:50
float fromPos
Definition: Craft.h:89
const SegmentChord * chord
Definition: Craft.h:88
float toPos
Definition: Craft.h:90
static bool isUnlimitedIn(const SegmentChoice &choice)
Definition: Craft.cpp:141
std::optional< const InstrumentAudio * > selectNewChordPartInstrumentAudio(const Instrument *instrument, const Chord &chord) const
Definition: Craft.cpp:281
std::optional< const Program * > chooseFreshProgram(Program::Type programType, std::optional< Instrument::Type > voicingType) const
Definition: Craft.cpp:150
int computeDeltaIn(const SegmentChoice *choice)
Definition: Craft.cpp:584
void craftNoteEvents(float tempo, const ProgramSequence *sequence, const std::set< const ProgramVoice * > &voices, LambdaInstrumentProvider instrumentProvider)
Definition: Craft.cpp:439
Craft(Fabricator *fabricator)
Definition: Craft.cpp:10
std::optional< const Instrument * > chooseFreshInstrument(Instrument::Type type, const std::set< std::string > &requireEventNames) const
Definition: Craft.cpp:191
static std::set< const Program * > programsPublished(const std::set< const Program * > &programs)
Definition: Craft.cpp:327
void precomputeDeltas(const std::function< bool(const SegmentChoice *)> &choiceFilter, const ChoiceIndexProvider &setChoiceIndexProvider, const std::vector< std::string > &layersInCraftOrder, const std::set< std::string > &layerPrioritizationSearches, const int numLayersIncoming)
Definition: Craft.cpp:54
std::set< const InstrumentAudio * > selectAudioIntensityLayers(std::set< const InstrumentAudio * > audios, const int layers) const
Definition: Craft.cpp:403
static bool inBounds(int floor, int ceiling, float value)
Definition: Craft.cpp:134
bool computeMute(Instrument::Type instrumentType) const
Definition: Craft.cpp:380
bool isActiveEntireSegment(const SegmentChoice *choice) const
Definition: Craft.cpp:30
bool isIntroSegment(const SegmentChoice *choice) const
Definition: Craft.cpp:14
std::optional< const InstrumentAudio * > chooseFreshInstrumentAudio(const std::set< Instrument::Type > &types, const std::set< Instrument::Mode > &modes, const std::set< UUID > &avoidIds, const std::set< std::string > &preferredEvents) const
Definition: Craft.cpp:224
bool isSilentEntireSegment(const SegmentChoice *choice) const
Definition: Craft.cpp:25
std::set< const Instrument * > instrumentsDirectlyBound(const std::set< const Instrument * > &instruments) const
Definition: Craft.cpp:337
void craftNoteEventArrangements(float tempo, const SegmentChoice *choice, bool defaultAtonal)
Definition: Craft.cpp:35
void craftChordParts(float tempo, const Instrument *instrument)
Definition: Craft.cpp:488
std::set< const InstrumentAudio * > selectGeneralAudioIntensityLayers(const Instrument *instrument) const
Definition: Craft.cpp:299
std::map< std::string, int > deltaOuts
Definition: Craft.h:28
ChoiceIndexProvider choiceIndexProvider
Definition: Craft.h:93
std::set< const InstrumentAudio * > audiosPublished(const std::set< const InstrumentAudio * > &instrumentAudios) const
Definition: Craft.cpp:369
void pickInstrumentAudio(const SegmentChoiceArrangement *arrangement, const InstrumentAudio *audio, long startAtSegmentMicros, long lengthMicros, const std::string &event) const
Definition: Craft.cpp:384
std::map< std::string, int > deltaIns
Definition: Craft.h:27
static bool isUnlimitedOut(const SegmentChoice &choice)
Definition: Craft.cpp:145
static std::set< const Instrument * > instrumentsPublished(const std::set< const Instrument * > &instruments)
Definition: Craft.cpp:347
std::set< const InstrumentAudio * > audiosDirectlyBound(const std::set< const InstrumentAudio * > &instrumentAudios) const
Definition: Craft.cpp:358
std::set< Instrument::Type > finalizeAudioLengthsForInstrumentTypes
Definition: Craft.h:29
bool isOutroSegment(const SegmentChoice *choice) const
Definition: Craft.cpp:19
void craftEventParts(float tempo, const Instrument *instrument, const Program *program)
Definition: Craft.cpp:567
int computeDeltaOut(const SegmentChoice *choice)
Definition: Craft.cpp:589
std::set< const Program * > programsDirectlyBound(const std::set< const Program * > &programs) const
Definition: Craft.cpp:317
Definition: FabricationWrapper.h:14
Fabricator * fabricator
Definition: FabricationWrapper.h:16
Definition: Fabricator.h:48
Definition: InstrumentAudio.h:13
Definition: Instrument.h:14
Type
Definition: Instrument.h:16
Definition: NoteRange.h:15
Definition: ProgramSequencePatternEvent.h:13
Definition: ProgramSequencePattern.h:13
Definition: ProgramSequence.h:13
Definition: ProgramVoice.h:13
Type
Definition: Program.h:16
Definition: SegmentChoiceArrangement.h:14
Definition: SegmentChoice.h:15
Definition: SegmentChordVoicing.h:16
Definition: SegmentChord.h:13
Definition: ActiveAudio.h:11