You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.2 KiB

import convert_to
import load_asset
from Fingering import fingering
scales = load_asset.load('scales')
mod = False
#scales[0] = ailias,scales[1] = scales
#adds scale with name
def add(ns,name):
new = scale(ns).transpose('c').notes
scales[1].append(new)
scales[0][name] = len(scales[1])-1
load_asset.save(scales,'scales')
#adds alternative name to scale
def alias(exist,con):
scale[0][con] = scale[0][exist]
load_asset.save(scales,'scales')
#creates scale with specified starting note, type, and notation
def create(n,scale_type,notation = 'flats'):
return scale(
scales[1][
scales[0][scale_type.lower()]
]
).transpose(n,notation)
class scale:
#converts scale notes to above c0, in effect giving raw intervals from the start note
def normalize(self):
#ensures that the start note is the same as the end note. This affects the data returned by the .notes method
if convert_to.above_c(self.notes[0])%12 != convert_to.above_c(self.notes[-1])%12:
self.notes.append(self.notes[0])
#subtracts starting note from each note
start = convert_to.above_c(self.notes[0])
note_list = list(
map(
lambda n: convert_to.above_c(n)-start,
self.notes
)
)
#ensures scales are ascending
for i in range(len(note_list)-1):
while note_list[i] > note_list[i+1]:
note_list[i+1] += 12
return note_list
#returns fingering with specified device
def fingers(self,d,tuning_a = 440):
return list(
map(
lambda n: '{} ({})'.format(n,fingering(n,d,tuning_a)),
self.notes
)
)
#transposes scale to specified note
def transpose(self,n,notation = 'flats'):
n = convert_to.above_c(n)
return scale(
list(
map(
lambda m: convert_to.notename(m+n,notation),
self.intv
)
)
)
def __init__(self,notes):
self.notes = notes
self.intv = self.normalize()