This commit is contained in:
2018-09-06 06:38:01 -04:00
parent 00ede99bca
commit 7ebdc17154
5 changed files with 83 additions and 9 deletions
-7
View File
@@ -1,7 +0,0 @@
from .tones import Tone
# SYSTEMS = {"western": System(tones=TONES["western"], degrees=DEGREES["western"])}
def SYSTEMS(SYSTEMS, DEGREES, TONES, System):
western_tones = [Tone.from_string(t) for t in TONES["western"]]
SYSTEMS = {"western": System(tones=western_tones, degrees=DEGREES["western"])}
return SYSTEMS
+79
View File
@@ -0,0 +1,79 @@
import itertools
from .systems import SYSTEMS
from .tones import Tone
MODS = ('', 'm', '5', '7', '9', 'dim', 'm6', 'm7', 'maj7', 'sus')
CHARTS = {}
CHARTS['western'] = []
class NamedChord:
def __init__(self, *, tone_name, mod):
self.tone_name = tone_name
self.mod = mod
@property
def name(self):
return f"{self.tone_name}{self.mod}"
@property
def tone(self):
return Tone(name=self.tone_name)
def __repr__(self):
return f"<NamedChord name={self.name!r}>"
@property
def acceptable_tones(self):
acceptable = [self.tone]
acceptable += [self.tone.add(5)]
# acceptable += [self.tone.add(3)]
acceptable += [self.tone.subtract(5)]
# acceptable += [self.tone.subtract(3)]
return tuple(acceptable)
@property
def acceptable_tone_names(self):
return tuple([tone.name for tone in self.acceptable_tones])
def possible_fingerings(self, *, fretboard):
def find_fingerings(tone):
fingerings = []
for j in range(7):
fingered_tone = tone.add(j)
for acceptable_tone in self.acceptable_tones:
if fingered_tone.name == acceptable_tone:
fingerings.append(j)
return tuple(fingerings)
fingering = []
for i, tone in enumerate(fretboard.tones):
fingering.append(find_fingerings(tone))
return tuple(fingering)
def fingerings(self, *, fretboard):
return tuple(itertools.product(*self.possible_fingerings(fretboard=fretboard)))
def fingering(self, *, freboard):
possible_fingerings = self.possible_fingerings(freboard=fretboard)
return posible_fingerings
western_chart = {}
for tone_titles in SYSTEMS['western'].tone_names:
# Take the second tone name, if it's available.
if len(tone_titles) == 2:
tone_name = tone_titles[1]
else:
tone_name = tone_titles[0]
for mod in MODS:
named_chord = NamedChord(tone_name=tone_name, mod=mod)
western_chart.update({f"{tone_name}{mod}": named_chord})
CHARTS['western'] = western_chart
+1
View File
@@ -4,3 +4,4 @@ from .tones import Tone
from .systems import System, SYSTEMS
from .scales import Scale, TonedScale
from .chords import Chord, Fretboard
from .charts import CHARTS
-1
View File
@@ -1,5 +1,4 @@
from ._statics import TEMPERAMENTS, TONES, DEGREES, SCALES, SYSTEMS
from . import bootstrap
class System:
+3 -1
View File
@@ -79,6 +79,8 @@ class Tone:
def _math(self, interval):
"""Returns (new index, new octave)."""
octave = self.octave or 0
try:
mod = len(self.system.tones)
except AttributeError:
@@ -87,7 +89,7 @@ class Tone:
)
result = self._index + interval
index = result % mod
octave = result // mod + self.octave
octave = result // mod + octave
return (index, octave)
def add(self, interval):