3 #ifndef XJMUSIC_FABRICATOR_H
4 #define XJMUSIC_FABRICATOR_H
65 std::optional<Segment::Type> overrideSegmentType);
125 virtual std::set<const SegmentChoiceArrangement *>
getArrangements(std::set<const SegmentChoice *> &choices);
147 [[nodiscard]]
virtual std::set<const SegmentChoice *>
getChoices()
const;
181 virtual std::optional<const SegmentChoice *>
191 virtual std::optional<const SegmentChord *>
getChordAt(
float position);
311 virtual std::set<const SegmentChoiceArrangementPick *>
getPicks();
326 virtual std::optional<const InstrumentAudio *>
getPreferredAudio(
const std::string &parentIdent,
const std::string &ident);
436 virtual std::optional<const ProgramSequencePattern *>
446 virtual std::optional<const ProgramSequenceBinding *>
579 virtual std::optional<const SegmentChordVoicing *>
693 virtual std::optional<const SegmentChoice *>
put(
const SegmentChoice &entity,
const bool force);
739 virtual std::optional<const SegmentMeme *>
put(
const SegmentMeme &entity,
bool force);
767 const std::string &parentIdent,
768 const std::string &ident,
878 static const std::string KEY_VOICE_TRACK_TEMPLATE;
879 static const std::string NAME_SEPARATOR;
880 static const std::string UNKNOWN_KEY;
882 std::set<const TemplateBinding *> templateBindings;
884 std::map<double, std::optional<SegmentChord *>> chordAtPosition;
885 std::map<Instrument::Type, NoteRange> voicingNoteRange;
886 std::map<const SegmentChoice *, const ProgramSequence *> sequenceForChoice;
887 std::map<std::string, const InstrumentAudio *> preferredAudios;
888 std::map<std::string, InstrumentConfig> instrumentConfigs;
889 std::map<std::string, InstrumentConfig> pickInstrumentConfigs;
890 std::map<std::string, int> rangeShiftOctave;
891 std::map<std::string, int> targetShift;
892 std::map<std::string, NoteRange> rangeForChoice;
893 std::map<std::string, std::optional<Note>> rootNotesByVoicingAndChord;
894 std::map<UUID, std::vector<const ProgramSequenceChord *>> completeChordsForProgramSequence;
895 std::map<UUID, std::vector<const SegmentChoiceArrangementPick *>> picksForChoice;
899 std::set<UUID> boundInstrumentIds;
900 std::set<UUID> boundProgramIds;
901 std::chrono::high_resolution_clock::time_point startAtSystemNanoTime;
902 std::optional<Segment::Type> type;
904 std::optional<const SegmentChoice *> macroChoiceOfPreviousSegment;
905 std::optional<const SegmentChoice *> mainChoiceOfPreviousSegment;
907 double microsPerBeat{};
909 std::set<Instrument::Type> distinctChordVoicingTypes;
916 [[nodiscard]] std::optional<const SegmentMeta *> getSegmentMeta(
const std::string &key)
const;
924 [[nodiscard]] std::optional<const SegmentChoice *> getChoiceOfType(
Program::Type programType)
const;
931 [[nodiscard]] std::set<const SegmentChoice *> getBeatChoices()
const;
940 static int computeLowestOptimalRangeShiftOctaves(
const NoteRange &sourceRange,
const NoteRange &targetRange);
949 static std::string computeShipKey(
const Chain *chain,
const Segment *segment);
954 void ensureShipKey();
968 [[nodiscard]]
int getPreviousSegmentDelta()
const;
975 std::map<std::string, const InstrumentAudio *> computePreferredInstrumentAudio();
985 bool isValidChoiceAndMemesHaveBeenAdded(
const SegmentChoice &choice,
const MemeStack &memeStack,
bool force);
1003 static std::string computeCacheKeyForPreferredAudio(
const std::string &parentIdent,
const std::string &ident);
Definition: ContentEntityStore.h:41
Definition: Fabricator.h:48
virtual NoteRange getProgramVoicingNoteRange(Instrument::Type instrumentType)
Definition: Fabricator.cpp:597
virtual std::optional< const ProgramSequenceBinding * > getRandomlySelectedSequenceBindingAtOffset(const Program *program, int offset)
Definition: Fabricator.cpp:633
virtual std::set< Instrument::Type > getDistinctChordVoicingTypes()
Definition: Fabricator.cpp:183
virtual std::optional< const ProgramSequence * > getProgramSequence(const SegmentChoice *choice)
Definition: Fabricator.cpp:306
virtual const SegmentRetrospective * getRetrospective()
Definition: Fabricator.cpp:1026
virtual bool hasMoreSequenceBindingOffsets(const SegmentChoice *choice, int N)
Definition: Fabricator.cpp:881
virtual long getElapsedMicros()
Definition: Fabricator.cpp:207
virtual std::optional< const Program * > getProgram(const SegmentChoice *choice)
Definition: Fabricator.cpp:478
static ControlMode parseControlMode(const char *str)
Definition: Fabricator.cpp:1340
virtual void addErrorMessage(std::string body)
Definition: Fabricator.cpp:75
virtual std::set< const SegmentChordVoicing * > getChordVoicings()
Definition: Fabricator.cpp:785
virtual void putPreferredAudio(const std::string &parentIdent, const std::string &ident, const InstrumentAudio *instrumentAudio)
Definition: Fabricator.cpp:1004
virtual int getNextSequenceBindingOffset(const SegmentChoice *choice)
Definition: Fabricator.cpp:404
virtual std::set< const SegmentChoice * > getCurrentDetailChoices()
Definition: Fabricator.cpp:162
virtual bool isDirectlyBound(const Instrument *instrument)
Definition: Fabricator.cpp:937
virtual std::set< const SegmentChoice * > getChoices() const
Definition: Fabricator.cpp:132
virtual int getSecondMacroSequenceBindingOffset(const Program *macroProgram)
Definition: Fabricator.cpp:1043
static std::vector< std::string > getNotes(const SegmentChordVoicing *voicing)
Definition: Fabricator.cpp:424
virtual double getMicrosPerBeat(float tempo)
Definition: Fabricator.cpp:1036
virtual std::optional< const SegmentChoice * > getMacroChoiceOfPreviousSegment()
Definition: Fabricator.cpp:318
virtual Chord getKeyForChoice(const SegmentChoice *choice)
Definition: Fabricator.cpp:288
virtual const Segment * updateSegment(Segment segment)
Definition: Fabricator.cpp:1013
virtual Chain * getChain()
Definition: Fabricator.cpp:122
virtual MemeIsometry getMemeIsometryOfSegment()
Definition: Fabricator.cpp:399
virtual const Segment * getSegment()
Definition: Fabricator.cpp:767
virtual std::optional< const ProgramSequence * > getSequence(const SegmentChoice *choice)
Definition: Fabricator.cpp:795
Fabricator(ContentEntityStore *contentEntityStore, SegmentEntityStore *segmentEntityStore, const SegmentRetrospective *segmentRetrospective, int segmentId, std::optional< Segment::Type > overrideSegmentType)
Definition: Fabricator.cpp:19
virtual Instrument::Type getProgramVoiceType(const ProgramSequenceChordVoicing *voicing)
Definition: Fabricator.cpp:589
virtual void deletePick(const UUID &id)
Definition: Fabricator.cpp:90
virtual MemeTaxonomy getMemeTaxonomy() const
Definition: Fabricator.cpp:1058
static std::string toString(ControlMode controlMode)
Definition: Fabricator.cpp:1326
virtual NoteRange getProgramRange(const UUID &programId, Instrument::Type instrumentType)
Definition: Fabricator.cpp:519
virtual bool isOneShot(const Instrument *instrument, const std::string &trackName)
Definition: Fabricator.cpp:922
virtual std::optional< const SegmentChoice * > getCurrentBeatChoice()
Definition: Fabricator.cpp:178
virtual bool isOneShotCutoffEnabled(const Instrument *instrument)
Definition: Fabricator.cpp:932
virtual std::optional< const ProgramSequence * > getCurrentMainSequence()
Definition: Fabricator.cpp:349
virtual ~Fabricator()=default
virtual bool isInitialSegment()
Definition: Fabricator.cpp:947
virtual std::set< const SegmentChoiceArrangement * > getArrangements()
Definition: Fabricator.cpp:95
virtual std::optional< const ProgramSequence * > getRandomlySelectedSequence(const Program *program)
Definition: Fabricator.cpp:617
virtual std::set< const SegmentChoiceArrangementPick * > getPicks()
Definition: Fabricator.cpp:429
virtual ProgramConfig getCurrentMainProgramConfig()
Definition: Fabricator.cpp:332
virtual std::optional< const StickyBun > getStickyBun(const UUID &eventId)
Definition: Fabricator.cpp:695
virtual int getSequenceBindingOffsetForChoice(const SegmentChoice *choice)
Definition: Fabricator.cpp:825
virtual std::optional< const SegmentChoice * > getChoiceIfContinued(const ProgramVoice *voice)
Definition: Fabricator.cpp:214
virtual double getTempo()
Definition: Fabricator.cpp:1063
virtual void addWarningMessage(std::string body)
Definition: Fabricator.cpp:80
virtual bool hasOneMoreSequenceBindingOffset(const SegmentChoice *choice)
Definition: Fabricator.cpp:902
virtual std::string getTrackName(const ProgramSequencePatternEvent *event)
Definition: Fabricator.cpp:837
virtual void putStickyBun(StickyBun bun)
Definition: Fabricator.cpp:684
virtual std::vector< const ProgramSequenceChord * > getProgramSequenceChords(const ProgramSequence *programSequence)
Definition: Fabricator.cpp:483
virtual int getProgramRangeShiftOctaves(Instrument::Type instrumentType, NoteRange *sourceRange, NoteRange *targetRange)
Definition: Fabricator.cpp:531
virtual std::optional< const SegmentChoice * > put(const SegmentChoice &entity, const bool force)
Definition: Fabricator.cpp:952
virtual std::optional< const ProgramSequencePattern * > getRandomlySelectedPatternOfSequenceByVoiceAndType(const SegmentChoice *choice)
Definition: Fabricator.cpp:646
virtual bool hasTwoMoreSequenceBindingOffsets(const SegmentChoice *choice)
Definition: Fabricator.cpp:907
virtual long getSegmentMicrosAtPosition(float tempo, float position)
Definition: Fabricator.cpp:752
virtual std::optional< const ProgramSequence * > getPreviousMainSequence()
Definition: Fabricator.cpp:357
virtual ContentEntityStore * getSourceMaterial()
Definition: Fabricator.cpp:1031
virtual void addMessage(SegmentMessage::Type messageType, std::string body)
Definition: Fabricator.cpp:58
virtual void addInfoMessage(std::string body)
Definition: Fabricator.cpp:85
virtual std::optional< const SegmentChoice * > getPreviousMainChoice()
Definition: Fabricator.cpp:325
virtual std::set< const SegmentChoice * > getChoicesIfContinued(const Program::Type programType)
Definition: Fabricator.cpp:273
virtual MemeIsometry getMemeIsometryOfNextSequenceInPreviousMacro()
Definition: Fabricator.cpp:365
virtual Segment::Type getType()
Definition: Fabricator.cpp:847
virtual std::optional< const InstrumentAudio * > getPreferredAudio(const std::string &parentIdent, const std::string &ident)
Definition: Fabricator.cpp:466
virtual Program::Type getProgramType(const ProgramVoice *voice)
Definition: Fabricator.cpp:579
virtual std::optional< const SegmentChordVoicing * > chooseVoicing(const SegmentChord *chord, Instrument::Type instrumentType)
Definition: Fabricator.cpp:855
virtual std::optional< const SegmentChord * > getChordAt(float position)
Definition: Fabricator.cpp:137
virtual std::optional< const SegmentChoice * > getCurrentMainChoice()
Definition: Fabricator.cpp:157
virtual int getProgramTargetShift(Instrument::Type instrumentType, const Chord *fromChord, const Chord *toChord)
Definition: Fabricator.cpp:558
ControlMode
Definition: Fabricator.h:70
virtual std::set< const SegmentMeme * > getSegmentMemes()
Definition: Fabricator.cpp:790
static int getSegmentId(const SegmentChoice *segmentChoice)
Definition: Fabricator.cpp:1286
virtual std::vector< const SegmentChord * > getSegmentChords()
Definition: Fabricator.cpp:775
virtual TemplateConfig getTemplateConfig()
Definition: Fabricator.cpp:127
virtual bool isContinuationOfMacroProgram()
Definition: Fabricator.cpp:912
virtual long getTotalSegmentMicros()
Definition: Fabricator.cpp:757
virtual std::optional< Note > getRootNoteMidRange(const std::string &voicingNotes, const Chord *chord)
Definition: Fabricator.cpp:667
Definition: InstrumentAudio.h:13
Definition: Instrument.h:14
Mode
Definition: Instrument.h:29
Type
Definition: Instrument.h:16
Definition: MemeIsometry.h:21
Definition: MemeStack.h:27
Definition: NoteRange.h:15
Definition: ProgramConfig.h:11
Definition: ProgramSequenceChordVoicing.h:13
Definition: ProgramSequencePatternEvent.h:13
Definition: ProgramSequence.h:13
Definition: ProgramVoice.h:13
Type
Definition: Program.h:16
Definition: SegmentChoiceArrangementPick.h:14
Definition: SegmentChoiceArrangement.h:14
Definition: SegmentChoice.h:15
Definition: SegmentChordVoicing.h:16
Definition: SegmentChord.h:13
Definition: SegmentEntityStore.h:43
Definition: SegmentMeme.h:13
Definition: SegmentMessage.h:14
Type
Definition: SegmentMessage.h:17
Definition: SegmentRetrospective.h:30
Type
Definition: Segment.h:16
Definition: StickyBun.h:20
Definition: TemplateConfig.h:16
Definition: ActiveAudio.h:11
std::string UUID
Definition: EntityUtils.h:28