Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- from random import randint, uniform, choice
- from typing import Any
- class Generator:
- def __init__(self, bankname:str):
- self.gestures:list = []
- self.bankname:str = bankname
- self.possible_effects:list = ["Highpass",
- "Tapestop",
- "Flanger",
- "Lofi",
- "Crusher",
- "Reverb",
- "Chorus",
- "CombFilter",
- "Phaser",
- "Lowpass",
- "Distort",
- "Limiter",
- "Delay",
- "WetGain",
- "DryGain",
- "Pan",
- "Gate"]
- self.active_effects:list = []
- self.inactive_effects:list =[]
- self.gesture_string:str = ""
- self.rhythms:list =[
- "1/2", "1/4", "1/8", "1/16", "1/32", "1/64", "1/128", "1/256", "1/512", "1/1024"
- ]
- self.jitter_rhythms: list = [
- "1/2", "1/4", "1/8", "1/16"
- ]
- self.used_rhythms_notes:list = []
- self.possible_notes:list = []
- self.possible_chordshapes:dict = {
- "maj": [
- [0, 4, 7],
- [0, 3, 8],
- [0, 5, 9]
- ],
- "min": [
- [0, 3, 7],
- [0, 4, 9],
- [0, 5, 8]
- ],
- "dim": [
- [0, 3, 6],
- [0, 3, 9],
- [0, 6, 9]
- ],
- "aug": [
- [0, 4, 8],
- [0, 4, 8],
- [0, 4, 8]
- ],
- "sus2": [
- [0, 2, 7],
- [0, 5, 10],
- [0, 5, 7]
- ],
- "sus4": [
- [0, 5, 7],
- [0, 2, 7],
- [0, 5, 10]
- ],
- "maj7": [
- [0, 4, 7, 11],
- [0, 3, 7, 9],
- [0, 4, 8, 9],
- [0, 1, 5, 8]
- ],
- "min7": [
- [0, 3, 7, 10],
- [0, 4, 7, 9],
- [0, 3, 6, 9],
- [0, 2, 5, 9]
- ],
- "dom7": [
- [0, 4, 7, 10],
- [0, 3, 6, 8],
- [0, 3, 6, 10],
- [0, 2, 6, 9]
- ],
- "dim7": [
- [0, 3, 6, 9],
- [0, 3, 6, 9],
- [0, 3, 6, 9],
- [0, 3, 6, 9]
- ],
- "halfdim7": [
- [0, 3, 6, 10],
- [0, 3, 7, 9],
- [0, 4, 6, 9],
- [0, 2, 6, 9]
- ],
- "minMaj7": [
- [0, 3, 7, 11],
- [0, 4, 8, 9],
- [0, 4, 5, 9],
- [0, 1, 5, 8]
- ],
- "augMaj7": [
- [0, 4, 8, 11],
- [0, 4, 7, 9],
- [0, 3, 5, 8],
- [0, 1, 4, 8]
- ],
- "sus2min7": [
- [0, 2, 7, 10],
- [0, 5, 8, 10],
- [0, 3, 5, 10],
- [0, 2, 5, 8]
- ],
- "sus4min7": [
- [0, 5, 7, 10],
- [0, 2, 5, 9],
- [0, 4, 7, 10],
- [0, 3, 5, 7]
- ],
- "sus2dom7": [
- [0, 2, 7, 10],
- [0, 5, 8, 10],
- [0, 3, 5, 10],
- [0, 2, 5, 8]
- ],
- "sus4dom7": [
- [0, 5, 7, 10],
- [0, 2, 5, 9],
- [0, 4, 7, 10],
- [0, 3, 5, 7]
- ]
- }
- self.chordal:bool = False
- self.possible_speeds:list = [0.25, 0.33, 0.5, 0.66, 0.75, 1.0, 1.25, 1.33, 1.5, 1.66, 1.75, 2.0, 3.0, 4.0]
- self.effect_arguments:list = []
- self.subeffect_arguments:list = []
- def GenerateGraph(self, subdiv:int, graph_min_max:tuple, value_type:list, step:bool, rhy:bool, n:bool) -> tuple[list[Any], list[float], list[float]]:
- value, position, alpha = [], [], []
- possible_values:list = []
- for div in range(subdiv):
- # Generate possible values
- possible_values.clear()
- if value_type.count("r") >= 1:
- rhythms = randint(1,6)
- for i in range(rhythms):
- chosen_rhythm = f"\"{random.choice(self.rhythms)}" + str(random.choice(["|n|rhythm", "|d|rhythm", "|t|rhythm"])) + f"\""
- possible_values.append(chosen_rhythm)
- if self.used_rhythms_notes.count(chosen_rhythm) == 0:
- self.used_rhythms_notes.append(chosen_rhythm)
- if (value_type.count("n") >= 1) and self.chordal:
- notes = randint(1,4)
- for i in range(notes):
- chosen_note = f"\"{random.choice(self.possible_notes)}|note\""
- possible_values.append(chosen_note)
- if self.used_rhythms_notes.count(chosen_note) == 0:
- self.used_rhythms_notes.append(chosen_note)
- if value_type.count("v") >= 1:
- if (random.random() >= 0.6) and ((value_type.count("r") >= 1) or (value_type.count("n") >= 1)):
- chosen:str = random.choice(possible_values)
- value.append(chosen)
- if self.used_rhythms_notes.count(chosen) == 0:
- self.used_rhythms_notes.append(chosen)
- chosen = ""
- else:
- value.append(f"\"{round(uniform(graph_min_max[0], graph_min_max[1]),3)}\"")
- elif value_type.count("h") >= 1:
- if (random.random() >= 0.6) and ((value_type.count("r") >= 1) or (value_type.count("n") >= 1)):
- value.append(random.choice(possible_values))
- else:
- value.append(f"\"{round(uniform(graph_min_max[0], graph_min_max[1]),3)}" + f"|hz\"")
- elif value_type.count("m") >= 1:
- if (random.random() >= 0.6) and ((value_type.count("r") >= 1) or (value_type.count("n") >= 1)):
- value.append(random.choice(possible_values))
- else:
- value.append(f"\"{round(uniform(graph_min_max[0], graph_min_max[1]),3)}" + f"|ms\"")
- else:
- print("Subeffect is missing value, ms, or hz.\n")
- value.append(f"\"{round(uniform(graph_min_max[0], graph_min_max[1]),3)}\"")
- #Generate positions
- position.append(div/subdiv)
- #Generate alphas
- alpha.append(round(uniform(-20.0, 20.0),3))
- if step:
- value.append(value[len(value)-1])
- position.append((div+1)/subdiv)
- alpha.append(round(uniform(-20.0, 20.0),3))
- return value, position, alpha
- def ChooseEffects(self):
- self.active_effects = []
- self.inactive_effects = []
- gesture_types:list = []
- gesture_types.clear()
- gesture_types.extend(self.possible_effects)
- number_effects:int = randint(1, len(self.possible_effects))
- for i in range(number_effects):
- rand_choice:int = randint(0, len(gesture_types) - 1)
- self.active_effects.append(gesture_types[rand_choice])
- gesture_types.pop(rand_choice)
- self.inactive_effects = gesture_types
- def GenerateEnvelopes(self, name: str,
- subnames: list[str],
- subdivisions: int,
- min_max: list[tuple[float, float]],
- types: list,
- effect_decorators: dict,
- rhythm: bool,
- note: bool
- ) -> str:
- output_string: str = ""
- non_chain_fx = ["Position", "Jitter", "LeftJitter", "RightJitter", "GestureProcessor", "StutterRateJitter"]
- non_chain_fx_toggle = randint(0,1)
- if (self.active_effects.count(name) != 0) or (non_chain_fx.count(name) != 0):
- # Add effect decorators and header
- if len(effect_decorators) > 0:
- effect_decorator_string: str = ""
- for x, y in effect_decorators.items():
- if (x, y) == next(reversed(effect_decorators.items())):
- effect_decorator_string += f"{x}=\"{y}\""
- else:
- effect_decorator_string += f"{x}=\"{y}\" "
- if ["LeftJitter", "RightJitter", "StutterRateJitter"].count(name) > 0:
- output_string += " "
- if name == "GestureProcessor":
- stutter_on = randint(0,1)
- output_string += f" <{name} stutterActive=\"{stutter_on}\" {effect_decorator_string}>\n"
- else:
- if non_chain_fx.count(name) != 0:
- non_chain_fx_toggle = randint(0, 1)
- output_string += f" <{name} active=\"{non_chain_fx_toggle}\" {effect_decorator_string}>\n"
- else:
- output_string += f" <{name} active=\"1\" {effect_decorator_string}>\n"
- effect_decorator_string = ""
- else:
- output_string += f" <{name} active=\"1\">\n"
- #Generate subeffects
- for i, sub in enumerate(subnames):
- temp_line:str = ""
- #Precision-enable for rhythms/notes
- precision_enable:str = ""
- if (types[i].count("r") != 0) or (types[i].count("n") != 0) :
- precision_enable = " precisionEnabled=\"0\""
- #Per-Envelope stepwise enable
- if random.random() >= 0.2:
- stepwise = True
- else:
- stepwise = False
- #Delay-specific logic
- if name == "Delay":
- if effect_decorators.get("channelsLocked") == 0:
- output_string += f" <Left>\n"
- sub_value, sub_position, sub_alpha = self.GenerateGraph(subdivisions, min_max[i], types[i],
- stepwise,
- rhythm, note)
- temp_line += f" <{sub} start={sub_value[0]} end={sub_value[len(sub_value) - 1]} speed=\"{random.choice(self.possible_speeds)}\" {precision_enable}>\n"
- for j, value in enumerate(sub_value):
- temp_line += f" <Point value={value} position=\"{sub_position[j]}\" alpha=\"{sub_alpha[j]}\"/>\n"
- temp_line += f" </{sub}>\n"
- output_string += temp_line
- output_string += f" </Left>\n <Right>\n"
- temp_line = ""
- sub_value, sub_position, sub_alpha = self.GenerateGraph(subdivisions, min_max[i], types[i],
- stepwise,
- rhythm, note)
- temp_line += f" <{sub} start={sub_value[0]} end={sub_value[len(sub_value) - 1]} speed=\"{random.choice(self.possible_speeds)}\">\n"
- for j, value in enumerate(sub_value):
- temp_line += f" <Point value={value} position=\"{sub_position[j]}\" alpha=\"{sub_alpha[j]}\"/>\n"
- temp_line += f" </{sub}>\n"
- output_string += temp_line
- output_string += f" </Right>\n"
- temp_line = ""
- output_string += f" </{name}>\n"
- return output_string
- sub_value, sub_position, sub_alpha = self.GenerateGraph(subdivisions, min_max[i], types[i],
- stepwise,
- rhythm, note)
- #Outlier effect logic
- if name == "Position":
- temp_line += f" <{sub} start={sub_value[0]} end={sub_value[len(sub_value) - 1]} speed=\"{random.choice(self.possible_speeds)}\" gridResolution=\"{random.choice(self.jitter_rhythms) + '|n'}\" alpha=\"{round(uniform(-20.0, 20.0),3)}\">\n"
- elif ["MaximumRhythmOffset", "PitchOffset"].count(sub) > 0:
- temp_line += f" <{sub} start={sub_value[0]} end={sub_value[len(sub_value) - 1]} speed=\"{random.choice(self.possible_speeds)}\">\n"
- # Add subeffect headers
- else:
- temp_line += f" <{sub} start={sub_value[0]} end={sub_value[len(sub_value) - 1]} speed=\"{random.choice(self.possible_speeds)}\"{precision_enable}>\n"
- #Adds envelope graph points
- for j, value in enumerate(sub_value):
- if ["MaximumRhythmOffset", "PitchOffset"].count(sub) > 0:
- temp_line += f" <Point value={value} position=\"{sub_position[j]}\" alpha=\"{sub_alpha[j]}\"/>\n"
- else:
- temp_line += f" <Point value={value} position=\"{sub_position[j]}\" alpha=\"{sub_alpha[j]}\"/>\n"
- temp_line += f" </{sub}>\n"
- # Jitter-specific logic
- if sub == "MaximumRhythmOffset":
- temp_line += f" <RhythmOffsetValues/>\n"
- if sub == "PitchOffset":
- #Positive Depth
- temp_line += " <PitchPositiveDepth>\n"
- positive_value, positive_position, positive_alpha = self.GenerateGraph(2 ** randint(1, 5),
- (0.0, 2.0), ["v"], stepwise,False, False)
- for j, value in enumerate(positive_value):
- temp_line += f" <Point value={value} position=\"{positive_position[j]}\" alpha=\"{positive_alpha[j]}\"/>\n"
- temp_line += " </PitchPositiveDepth>\n"
- # Negative Depth
- temp_line += " <PitchNegativeDepth>\n"
- negative_value, negative_position, negative_alpha = self.GenerateGraph(2 ** randint(1, 5),
- (0.0, -2.0), ["v"], stepwise,False, False)
- for j, value in enumerate(negative_value):
- temp_line += f" <Point value={value} position=\"{negative_position[j]}\" alpha=\"{negative_alpha[j]}\"/>\n"
- temp_line += " </PitchNegativeDepth>\n"
- output_string += temp_line
- temp_line = ""
- else:
- output_string += f" <{name} active=\"0\">\n"
- # Jitter-specific logic
- if name == "Position":
- l_jitter = self.GenerateEnvelopes("LeftJitter",
- ["MaximumRhythmOffset", "PitchOffset"],
- 2 ** randint(1, 5),
- [(1.0, 666.7),(-24.0, 24.0)],
- [["m", "r"], ["v"]],
- {"type": randint(0,1), "rate": round(randint(1,10),1)},
- True,
- False)
- output_string += l_jitter
- r_jitter = self.GenerateEnvelopes("RightJitter",
- ["MaximumRhythmOffset", "PitchOffset"],
- 2 ** randint(1, 5),
- [(1.0, 666.7), (-24.0, 24.0)],
- [["m", "r"], ["v"]],
- {"type": randint(0, 1), "rate": round(randint(1,10),1)},
- True,
- False)
- output_string += r_jitter
- elif name == "GestureProcessor":
- stutter_jitter = self.GenerateEnvelopes("StutterRateJitter",
- ["MaximumRhythmOffset", "PitchOffset"],
- 2 ** randint(1, 5),
- [(1.0, 666.7), (-24.0, 24.0)],
- [["m", "r"], ["v"]],
- {"type": randint(0, 1), "rate": round(randint(1,10),1)},
- True,
- True)
- output_string += stutter_jitter
- # Fixing spacing issues in XML
- if ["LeftJitter", "RightJitter", "StutterRateJitter"].count(name) > 0:
- output_string += f" </{name}>\n"
- else:
- output_string += f" </{name}>\n"
- return output_string
- def GenerateGesture(self, index:int) -> str:
- self.gesture_string = ""
- self.ChooseEffects()
- #Chooses a chord for the gesture, if applicable
- self.chordal = True
- if self.chordal:
- chosen_chord, inversions = random.choice(list(self.possible_chordshapes.items()))
- offset:int = randint(0,5)
- classes = {(i + offset) % 12 for i in random.choice(inversions)}
- self.possible_notes = [n for n in range(36, 71 + 1) if n % 12 in classes]
- #Generate Wet
- wet = self.GenerateEnvelopes("WetGain",
- ["Level"],
- 2 ** randint(1,5),
- [(-50.0, 12.0)],
- [["v"]],
- {},
- False,
- False)
- #Generate Crusher
- crusher = self.GenerateEnvelopes("Crusher",
- ["BitDepth", "DryWet"],
- 2 ** randint(1,5),
- [(1.0, 16.0), (0.0, 1.0)],
- [["v"], ["v"]],
- {},
- False,
- False)
- #Generate Flanger
- flanger = self.GenerateEnvelopes("Flanger",
- ["Delay", "SweepRate", "SweepWidth", "Feedback", "DryWet"],
- 2 ** randint(1, 5),
- [(0.1, 30.0), (0.01, 20000.0), (0.0, 4.0), (0.0, 0.9), (0.0, 1.0)],
- [["m", "n", "r"], ["h","r","n"], ["m", "n"], ["v"], ["v"]],
- {"waveform": randint(0,6)},
- False,
- False)
- #Generate Chorus
- chorus = self.GenerateEnvelopes("Chorus",
- ["Delay", "SweepRate", "SweepWidth", "Feedback", "DryWet", "VoiceSpread", "StereoSpread"],
- 2 ** randint(1, 5),
- [(0.1, 30.0), (0.01, 10.00), (0.0, 10.0), (-0.9, 0.9), (0.0, 1.0), (0.0, 1.0), (0.0, 1.0)],
- [["m", "n", "r"], ["h", "r"], ["m", "n", "r"], ["v"], ["v"], ["v"], ["v"]],
- {},
- False,
- False)
- #Generate Comb
- comb = self.GenerateEnvelopes("CombFilter",
- ["Frequency", "Spacing", "DryWet", "Feedback"],
- 2 ** randint(1, 5),
- [(1.0, 20000.0), (-1.0, 1.0), (0.0, 1.0), (-0.9, 0.9)],
- [["h","r","n"],["v"],["v"],["v"]],
- {"inverted": randint(0,1)},
- False,
- False)
- #Generate Phaser
- phaser = self.GenerateEnvelopes("Phaser",
- ["Cutoff", "Amount", "Feedback", "Spacing", "DryWet", "SweepRate"],
- 2 ** randint(1, 5),
- [(40.0, 20000.0), (0.0, 1.0), (-0.9, 0.9), (0.0, 1000.0), (0.0, 1.0), (0.01, 100.00)],
- [["v"],["v"],["v"],["v"],["v"],["h", "n", "r"]],
- {"numPoles": randint(1, 6), "waveform": randint(0, 6)},
- False,
- False)
- #Generate Tapestop
- tapestop = self.GenerateEnvelopes("Tapestop",
- ["Slowdown", "DryWet"],
- 2 ** randint(1, 5),
- [(0.0, 1.0), (0.0, 1.0)],
- [["v"],["v"]],
- {},
- False,
- False)
- #Generate Limiter
- limiter = self.GenerateEnvelopes("Limiter",
- ["Threshold", "OutputGain"],
- 2 ** randint(1, 5),
- [(-70.0, 0.0), (-20.0, 20.0)],
- [["v"], ["v"]],
- {},
- False,
- False)
- #Generate Reverb
- reverb = self.GenerateEnvelopes("Reverb",
- ["LFORate", "Predelay", "PostDelay", "Feedback", "PostFeedback", "Damping", "DryWet", "Size", "Brightness", "LFOAmount", "Width"],
- 2 ** randint(1, 5),
- [(0.01, 20000.0), (0.0, 1.0), (0.0, 2000.0), (0.0, 1.0), (0.0, 1.0), (0.0, 1.0), (0.0, 1.0), (0.2, 15.0), (0.0, 1.0), (0.0, 1.0), (0.0, 1.0)],
- [["h", "r"],["m", "r", "n"],["m", "r", "n"],["v"],["v"],["v"],["v"],["v"],["v"],["v"],["v"]],
- {"cutOnRelease": randint(0,1), "waveform": randint(0,6)},
- False,
- False)
- #Generate Distort
- distort = self.GenerateEnvelopes("Distortion",
- ["DriveLowBand", "DriveHighBand", "Tone", "DcOffset", "DryWet", "BandsCrossover"],
- 2 ** randint(1, 5),
- [(0.0, 30.0), (0.0, 30.0), (0.0, 1.0), (0.0, 1.0), (0.0, 1.0), (20.0, 20000.0)],
- [["v"],["v"],["v"],["v"],["v"],["v"]],
- {"mode":randint(0,1), "typeLowBand":randint(0,16), "typeHighBand":randint(0,16)},
- False,
- False)
- #Generate Lofi
- lofi = self.GenerateEnvelopes("Lofi",
- ["SampleRate", "DryWet"],
- 2 ** randint(1, 5),
- [(20.0, 20000.0), (0.0, 1.0)],
- [["v"],["v"]],
- {},
- False,
- False)
- #Generate Lowpass
- lowpass = self.GenerateEnvelopes("Lowpass",
- ["Cutoff", "Resonance", "DryWet"],
- 2 ** randint(1, 5),
- [(15.0, 20000.0), (0.0, 12.0), (0.0, 1.0)],
- [["v"],["v"],["v"]],
- {},
- False,
- False)
- #Generate Highpass
- highpass = self.GenerateEnvelopes("Highpass",
- ["Cutoff", "Resonance", "DryWet"],
- 2 ** randint(1, 5),
- [(15.0, 20000.0), (0.0, 12.0), (0.0, 1.0)],
- [["v"],["v"],["v"]],
- {},
- False,
- False)
- #Generate Delay
- delay = self.GenerateEnvelopes("Delay",
- ["DryWet", "Feedback", "Time"],
- 2 ** randint(1, 5),
- [(0.0, 1.0), (0.0, 1.0), (0.5, 2666.7)],
- [["v"],["v"],["m", "n", "r"]],
- {"channelsLocked":randint(0,1), "cutOnRelease":randint(0,1)},
- False,
- False)
- #Generate Bandpass
- bandpass = self.GenerateEnvelopes("Bandpass",
- ["LeftCutoff", "RightCutoff", "LeftResonance", "RightResonance"],
- 2 ** randint(1, 5),
- [(15.0, 20000.0), (0.0, 1.0), (15.0, 20000.0), (0.0, 1.0)],
- [["v"],["v"],["v"],["v"]],
- {},
- False,
- False)
- #Generate DryGain
- dry = self.GenerateEnvelopes("DryGain",
- ["Level"],
- 2 ** randint(1, 5),
- [(-50.0, 0.0)],
- [["v"]],
- {},
- False,
- False)
- #Generate Pan
- pan = self.GenerateEnvelopes("Pan",
- ["Width", "Centre"],
- 2 ** randint(1, 5),
- [(0.0, 1.0), (0.0, 1.0)],
- [["v"],["v"]],
- {},
- False,
- False)
- #Generate Gate
- gate = self.GenerateEnvelopes("Gate",
- ["Width"],
- 2 ** randint(1, 5),
- [(0.0, 1.0)],
- [["v"]],
- {"tail":random.random()},
- False,
- False)
- #Generate Buffer and Jitter
- buffer:str = ""
- active:int = 1 #randint(0,1)
- locked:int = randint(0,1)
- reverseLeft = randint(0, 1)
- if locked == 1:
- reverseRight= None
- else:
- reverseRight = randint(0,1)
- if active == 0:
- buffer = (f" <Position active=\"{active}\">\n"
- f" <Left/>\n"
- f" <Right/>\n"
- f" </Position>\n")
- else:
- buffer = self.GenerateEnvelopes("Position",
- ["Left", "Right"],
- 2 ** randint(1, 5),
- [(0.0, 1.0), (0.0, 1.0)],
- [["v"], ["v"]],
- {"leftRightLocked": locked, "reverseLeft": reverseLeft, "reverseRight" : reverseRight, "gridSize" : randint(0,10), "movementMode":randint(0,2)},
- False,
- False
- )
- #Generate Stutter
- #Generate FX Chain
- effect_chain:str = ""
- total_effects = []
- total_effects.extend(self.active_effects)
- total_effects.extend(self.inactive_effects)
- for i, effect in enumerate(total_effects):
- if ["Limiter", "Delay", "Bandpass", "DryGain", "Gate", "Pan", "WetGain"].count(effect) > 0:
- continue
- if effect == total_effects[len(total_effects)-1]:
- if effect == "Crusher":
- effect = "Bitcrush"
- if effect == "CombFilter":
- effect = "Comb"
- effect_chain += str(effect)
- else:
- if effect == "Crusher":
- effect = "Bitcrush"
- if effect == "CombFilter":
- effect = "Comb"
- effect_chain += str(effect) + ","
- stutter = self.GenerateEnvelopes("GestureProcessor",
- ["StepTime", "StutterRate"],
- 2 ** randint(1, 5),
- [(0.0, 1.0), (0.0, 1.0)],
- [["h", "r", "n"], ["h", "r", "n"]],
- {"stepActive": randint(0,1), "stepMode" : randint(0,5), "effectChain": effect_chain,
- "palindromeActive":(randint(0,1)), "holdActive":(randint(0,1)), "holdLength":(randint(0,8)), "grid":(randint(0,8)), "releaseMode":(randint(0,4)), "gestureLength": (randint(0,12))},
- True,
- True
- )
- #Generate Header
- header = " <StutterRateValueSet>\n"
- for i in self.used_rhythms_notes:
- header += f" <PeriodicValue value={i}/>\n"
- header += " </StutterRateValueSet>\n <Effects>\n"
- #Generate Footer
- footer = " </Effects>\n </Gesture>\n"
- # Put it all together
- self.gesture_string += header
- self.gesture_string += wet
- self.gesture_string += crusher
- self.gesture_string += flanger
- self.gesture_string += chorus
- self.gesture_string += comb
- self.gesture_string += phaser
- self.gesture_string += tapestop
- self.gesture_string += limiter
- self.gesture_string += reverb
- self.gesture_string += distort
- self.gesture_string += lofi
- self.gesture_string += lowpass
- self.gesture_string += highpass
- self.gesture_string += delay
- self.gesture_string += bandpass
- self.gesture_string += dry
- self.gesture_string += pan
- self.gesture_string += gate
- self.gesture_string += buffer
- self.gesture_string += stutter
- self.gesture_string += footer
- return f" <Gesture name=\"Gesture {index + 1}\" empty=\"0\">\n{self.gesture_string}"
- def GenerateBank(self, bankname):
- # Generate the bank header and footer
- beginstr = ("""<?xml version=\"1.0\" encoding\=\"UTF-8\"?>
- <Bank version=\"2.1.0b2\">
- """)
- endstr = "</Bank>"
- for i in range(128):
- self.gestures.append(self.GenerateGesture(i))
- gestures: str = ""
- for i in self.gestures:
- gestures = gestures + i
- # Make sure the file is there and write the
- try:
- f = open(bankname, "w")
- except FileNotFoundError:
- f = open(bankname, "a")
- f.write(beginstr + gestures + endstr)
- f.close()
- for i in range(10):
- bank = Generator(f"Generated Bank {i+1}.sebank")
- bank.GenerateBank(bank.bankname)
- del bank
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement