Browse Source

Rename parentScore to parentData to comply to new template naming

Former-commit-id: ba15822ce85ed66e6acf91e82943bcc35e99dbd4
master
Nils 5 years ago
parent
commit
2003fd5d2f
  1. 2
      engine/main.py
  2. 10
      engine/pattern.py
  3. 18
      engine/track.py

2
engine/main.py

@ -70,7 +70,7 @@ class Data(template.engine.sequencer.Score):
def addTrack(self, name="", scale=None, color=None, simpleNoteNames=None):
"""Overrides the simpler template version"""
track = Track(parentScore=self, name=name, scale=scale, color=color, simpleNoteNames=simpleNoteNames)
track = Track(parentData=self, name=name, scale=scale, color=color, simpleNoteNames=simpleNoteNames)
self.tracks.append(track)
return track

10
engine/pattern.py

@ -53,7 +53,7 @@ class Pattern(object):
self.parentTrack = parentTrack
self.scale = scale if scale else (72, 71, 69, 67, 65, 64, 62, 60) #Scale needs to be set first because on init/load data already depends on it, at least the default scale. The scale is part of the track meta callback.
self.data = data if data else list() #For content see docstring. this cannot be the default parameter because we would set the same list for all instances.
self.simpleNoteNames = simpleNoteNames if simpleNoteNames else self.parentTrack.parentScore.lastUsedNotenames #This is mostly for the GUI or other kinds of representation instead midi notes
self.simpleNoteNames = simpleNoteNames if simpleNoteNames else self.parentTrack.parentData.lastUsedNotenames #This is mostly for the GUI or other kinds of representation instead midi notes
self._processAfterInit()
def _prepareBeforeInit(self):
@ -87,14 +87,14 @@ class Pattern(object):
@simpleNoteNames.setter
def simpleNoteNames(self, value):
self._simpleNoteNames = tuple(value) #we keep it immutable, this is safer to avoid accidental linked structures when creating a clone.
self.parentTrack.parentScore.lastUsedNotenames = self._simpleNoteNames #new default for new tracks
self.parentTrack.parentData.lastUsedNotenames = self._simpleNoteNames #new default for new tracks
def fill(self):
"""Create a 2 dimensional array"""
l = len(self.scale)
lst = []
vel = self.averageVelocity
for index in range(self.parentTrack.parentScore.howManyUnits):
for index in range(self.parentTrack.parentData.howManyUnits):
for pitchindex in range(l):
lst.append({"index":index, "factor": 1, "pitch": pitchindex, "velocity":vel})
self.data = lst
@ -107,7 +107,7 @@ class Pattern(object):
lst = []
existing = [(d["index"], d["pitch"]) for d in self.data]
vel = self.averageVelocity
for index in range(self.parentTrack.parentScore.howManyUnits):
for index in range(self.parentTrack.parentData.howManyUnits):
for pitchindex in range(l):
if not (index, pitchindex) in existing:
lst.append({"index":index, "factor": 1, "pitch": pitchindex, "velocity":vel})
@ -139,7 +139,7 @@ class Pattern(object):
self.exportCache = [] #only used by parentTrack.export()
assert self.scale and len(self.scale) == NUMBER_OF_STEPS #from constants
for pattern in (p for p in self.data if p["index"] < self.parentTrack.parentScore.howManyUnits): # < and not <= because index counts from 0 but howManyUnits counts from 1
for pattern in (p for p in self.data if p["index"] < self.parentTrack.parentData.howManyUnits): # < and not <= because index counts from 0 but howManyUnits counts from 1
note = {}
note["pitch"] = pattern["pitch"]
note["index"] = pattern["index"]

18
engine/track.py

@ -37,7 +37,7 @@ class Track(object): #injection at the bottom of this file!
Init parameters are for cloned and copied tracks, but not for loading from json.
"""
def __init__(self, parentScore,
def __init__(self, parentData,
name:str="",
structure:Set[int]=None,
scale:Tuple[int]=None,
@ -46,8 +46,8 @@ class Track(object): #injection at the bottom of this file!
whichPatternsAreHalftoneTransposed:Dict[int,int]=None,
simpleNoteNames:List[str]=None):
self.parentScore = parentScore
self.sequencerInterface = template.engine.sequencer.SequencerInterface(parentTrack=self, name=name) #needs parentScore
self.parentData = parentData
self.sequencerInterface = template.engine.sequencer.SequencerInterface(parentTrack=self, name=name) #needs parentData
self.color = color if color else "#00FFFF" # "#rrggbb" in hex. no alpha. a convenience slot for the GUI to save a color.
self.pattern = Pattern(parentTrack=self, scale=scale, simpleNoteNames=simpleNoteNames)
self.structure = structure if structure else set() #see buildTrack(). This is the main track data structure besides the pattern. Just integers (starts at 0) as switches which are positions where to play the patterns. In between are automatic rests.
@ -66,10 +66,10 @@ class Track(object): #injection at the bottom of this file!
self.whichPatternsAreScaleTransposed = {k:v for k,v in self.whichPatternsAreScaleTransposed.items() if v!=0 and k in self.structure}
self.whichPatternsAreHalftoneTransposed = {k:v for k,v in self.whichPatternsAreHalftoneTransposed.items() if v!=0 and k in self.structure}
oneMeasureInTicks = (self.parentScore.howManyUnits * self.parentScore.whatTypeOfUnit) / self.parentScore.subdivisions #subdivisions is 1 by default. bigger values mean shorter values, which is compensated by the user setting bigger howManyUnits manually.
oneMeasureInTicks = (self.parentData.howManyUnits * self.parentData.whatTypeOfUnit) / self.parentData.subdivisions #subdivisions is 1 by default. bigger values mean shorter values, which is compensated by the user setting bigger howManyUnits manually.
oneMeasureInTicks = int(oneMeasureInTicks)
filteredStructure = [index for index in sorted(self.structure) if index < self.parentScore.numberOfMeasures] #not <= because we compare count with range
filteredStructure = [index for index in sorted(self.structure) if index < self.parentData.numberOfMeasures] #not <= because we compare count with range
cboxclips = [o.clip for o in self.sequencerInterface.calfboxTrack.status().clips]
for cboxclip in cboxclips:
@ -77,7 +77,7 @@ class Track(object): #injection at the bottom of this file!
for index in filteredStructure:
scaleTransposition = self.whichPatternsAreScaleTransposed[index] if index in self.whichPatternsAreScaleTransposed else 0
halftoneTransposition = self.whichPatternsAreHalftoneTransposed[index] if index in self.whichPatternsAreHalftoneTransposed else 0
cboxPattern = self.pattern.buildPattern(scaleTransposition, halftoneTransposition, self.parentScore.howManyUnits, self.parentScore.whatTypeOfUnit, self.parentScore.subdivisions)
cboxPattern = self.pattern.buildPattern(scaleTransposition, halftoneTransposition, self.parentData.howManyUnits, self.parentData.whatTypeOfUnit, self.parentData.subdivisions)
r = self.sequencerInterface.calfboxTrack.add_clip(index*oneMeasureInTicks, 0, oneMeasureInTicks, cboxPattern) #pos, pattern-internal offset, length, pattern.
######Old optimisations. Keep for later####
@ -101,9 +101,9 @@ class Track(object): #injection at the bottom of this file!
}
@classmethod
def instanceFromSerializedData(cls, parentScore, serializedData):
def instanceFromSerializedData(cls, parentData, serializedData):
self = cls.__new__(cls)
self.parentScore = parentScore
self.parentData = parentData
self.sequencerInterface = template.engine.sequencer.SequencerInterface.instanceFromSerializedData(self, serializedData["sequencerInterface"])
self.color = serializedData["color"]
self.structure = set(serializedData["structure"])
@ -122,7 +122,7 @@ class Track(object): #injection at the bottom of this file!
"pattern": self.pattern.exportCache,
"scale": self.pattern.scale,
"simpleNoteNames": self.pattern.simpleNoteNames,
"numberOfMeasures": self.parentScore.numberOfMeasures,
"numberOfMeasures": self.parentData.numberOfMeasures,
"whichPatternsAreScaleTransposed": self.whichPatternsAreScaleTransposed,
"whichPatternsAreHalftoneTransposed": self.whichPatternsAreHalftoneTransposed,
}

Loading…
Cancel
Save