Loading...
Searching...
No Matches
PatternEdit.hpp
1#pragma once
2#include <Patternist/PatternModel.hpp>
3
4#include <score_plugin_midi_export.h>
5
6#include <algorithm>
7#include <optional>
8#include <random>
9
10class QMimeData;
11namespace Patternist
12{
15
17SCORE_PLUGIN_MIDI_EXPORT Note toggledNote(Note current) noexcept;
18
19SCORE_PLUGIN_MIDI_EXPORT bool setStep(Pattern& p, int lane, int step, Note n) noexcept;
20
21SCORE_PLUGIN_MIDI_EXPORT void clear(Pattern& p) noexcept;
22
25SCORE_PLUGIN_MIDI_EXPORT void rotate(Pattern& p, int steps) noexcept;
26
29SCORE_PLUGIN_MIDI_EXPORT void
30randomize(Pattern& p, std::mt19937& rng, int lane = -1) noexcept;
31
33enum class Combine : uint8_t
34{
35 Replace,
37 Add,
39 Mask
40};
41
44SCORE_PLUGIN_MIDI_EXPORT void euclidean(
45 const Pattern& p, Lane& l, int hits, int rotation, Combine c = Combine::Replace) noexcept;
46
49SCORE_PLUGIN_MIDI_EXPORT bool transpose(Pattern& p, int semitones) noexcept;
50
52SCORE_PLUGIN_MIDI_EXPORT void addLane(Pattern& p);
54SCORE_PLUGIN_MIDI_EXPORT bool addControlLane(Pattern& p, uint8_t note) noexcept;
55SCORE_PLUGIN_MIDI_EXPORT bool hasLane(const Pattern& p, uint8_t note) noexcept;
56SCORE_PLUGIN_MIDI_EXPORT void removeLane(Pattern& p, int lane);
57SCORE_PLUGIN_MIDI_EXPORT void setLength(Pattern& p, int length);
58
59SCORE_PLUGIN_MIDI_EXPORT
60QMimeData* patternToMime(const Pattern& p);
61SCORE_PLUGIN_MIDI_EXPORT
62std::optional<Pattern> patternFromMime(const QMimeData& mime);
63
67{
68 int lane0{-1};
69 std::vector<std::vector<int>> steps;
70
71 bool valid() const noexcept { return lane0 >= 0 && !steps.empty(); }
72 bool contains(int lane, int step) const noexcept
73 {
74 if(lane < lane0 || lane >= lane0 + int(steps.size()))
75 return false;
76 const auto& s = steps[lane - lane0];
77 return std::find(s.begin(), s.end(), step) != s.end();
78 }
79 bool operator==(const StepSelection&) const noexcept = default;
80};
81
84SCORE_PLUGIN_MIDI_EXPORT Pattern copySteps(const Pattern& p, const StepSelection& s);
88SCORE_PLUGIN_MIDI_EXPORT void
89pasteSteps(Pattern& p, const Pattern& steps, int lane, const std::vector<int>& starts);
90SCORE_PLUGIN_MIDI_EXPORT void clearSteps(Pattern& p, const StepSelection& s) noexcept;
91SCORE_PLUGIN_MIDI_EXPORT QMimeData* stepsToMime(const Pattern& steps);
92SCORE_PLUGIN_MIDI_EXPORT std::optional<Pattern> stepsFromMime(const QMimeData& mime);
93
95SCORE_PLUGIN_MIDI_EXPORT Pattern copyLanes(const Pattern& p, const std::vector<int>& lanes);
98SCORE_PLUGIN_MIDI_EXPORT bool
99pasteLanes(Pattern& p, const Pattern& lanes, const std::vector<int>& targets);
101SCORE_PLUGIN_MIDI_EXPORT void clearLanes(Pattern& p, const std::vector<int>& lanes);
102SCORE_PLUGIN_MIDI_EXPORT QMimeData* lanesToMime(const Pattern& lanes);
103SCORE_PLUGIN_MIDI_EXPORT std::optional<Pattern> lanesFromMime(const QMimeData& mime);
104
106enum class StepField : uint8_t
107{
108 Velocity,
109 VelocityRandom,
110 Chance,
111 Offset,
112 OffsetRandom,
113 Gate,
114 Ratchet,
115 Pace,
116 Pitch,
117 PitchRandom,
118 GateRandom
119};
120
122{
123 float min, max;
125 float origin;
126};
127SCORE_PLUGIN_MIDI_EXPORT FieldRange fieldRange(StepField f) noexcept;
128SCORE_PLUGIN_MIDI_EXPORT QString fieldName(StepField f);
129SCORE_PLUGIN_MIDI_EXPORT float stepField(const StepParams& p, StepField f) noexcept;
130SCORE_PLUGIN_MIDI_EXPORT void setStepField(StepParams& p, StepField f, float v) noexcept;
132SCORE_PLUGIN_MIDI_EXPORT QString fieldText(StepField f, float v);
133
137SCORE_PLUGIN_MIDI_EXPORT void
138randomizeField(Pattern& p, std::mt19937& rng, StepField f, int lane = -1) noexcept;
140SCORE_PLUGIN_MIDI_EXPORT float randomFieldValue(StepField f, std::mt19937& rng) noexcept;
143SCORE_PLUGIN_MIDI_EXPORT float anyFieldValue(StepField f, std::mt19937& rng) noexcept;
145SCORE_PLUGIN_MIDI_EXPORT void resetField(Pattern& p, StepField f, int lane = -1) noexcept;
146
148SCORE_PLUGIN_MIDI_EXPORT QString laneLabel(int note, LaneLabels mode);
149}
STL namespace.
Definition PatternEdit.hpp:122
float origin
Bars start from this value: 0 for most, the middle for offsets and pitch.
Definition PatternEdit.hpp:125
Definition PatternModel.hpp:139
Definition PatternModel.hpp:49
Definition PatternEdit.hpp:67