annotate Syncopation models/parameter_setter.py @ 19:9030967a05f8

Refactored parameter_setter, basic_functions. Halfway fixing parameter argument in LHL model.
author csong <csong@eecs.qmul.ac.uk>
date Fri, 03 Apr 2015 22:57:27 +0100
parents c2843ef4de2c
children b959c2acb927
rev   line source
csong@9 1 '''
csong@9 2 Author: Chunyang Song
csong@9 3 Institution: Centre for Digital Music, Queen Mary University of London
csong@9 4 '''
csong@9 5
csong@9 6 # Set the parameters: subdivision_seq, weight_seq, L_max, strong_beat_level
csong@9 7
csong@9 8 # {'key': time-signature} :
csong@9 9 # {'value': [subdivision_seq, theoretical beat-level represented by index in the subdivision_seq list]}
csong@19 10 timeSignatureBase = {
csong@9 11 '2/2': [[1,2,2,2,2],1],
csong@9 12 '3/2': [[1,3,2,2,2],1],
csong@9 13 '4/2': [[1,2,2,2,2],1],
csong@9 14 '2/4': [[1,2,2,2,2],1],
csong@9 15 '3/4': [[1,3,2,2,2],1],
csong@9 16 '4/4': [[1,2,2,2,2],2],
csong@9 17 '5/4': [[1,5,2,2,2],1],
csong@9 18 '7/4': [[1,7,2,2,2],1],
csong@9 19 '3/8': [[1,3,2,2,2],1],
csong@9 20 '5/8': [[1,5,2,2,2],1],
csong@9 21 '6/8': [[1,2,3,2,2],1],
csong@9 22 '9/8': [[1,3,3,2,2],1],
csong@9 23 '12/8':[[1,2,2,3,2],2],
csong@9 24 }
csong@9 25
csong@19 26 def add_time_signature(timeSignature, subdivisionSequence, beatLevel):
csong@19 27 if is_time_signature_valid(timeSignature,subdivisionSequence,beatLevel):
csong@19 28 if timeSignature in timesigBase:
csong@9 29 print 'This time-signature is existed already.'
csong@9 30 else:
csong@19 31 timeSignatureBase[timeSignature] = [subdivisionSequence, beatLevel]
csong@19 32 write_time_signature()
csong@9 33
csong@19 34 def update_time_signature(timeSignature, subdivisionSequence, beatLevel):
csong@19 35 if is_time_signature_valid(timeSignature,subdivisionSequence,beatLevel):
csong@19 36 if timeSignature in timeSignatureBase:
csong@19 37 print 'Original settings for ', timeSignature, ':',timeSignatureBase[timeSignature]
csong@19 38 timeSignatureBase[timeSignature] = [subdivisionSequence, beatLevel]
csong@19 39 print 'Changed into:',timeSignatureBase[timeSignature]
csong@19 40 write_time_signature()
csong@9 41
csong@19 42 def is_time_signature_valid(timeSignature, subdivisionSequence, beatLevel):
csong@9 43 isValid = False
csong@19 44 if ('/' not in timeSignature) or (not timeSignature.split('/')[0].isdigit()) or (not timeSignature.split('/')[1].isdigit()):
csong@9 45 print 'Error: invalid time-signature. Please indicate in the form of fraction, e.g. 4/4, 6/8 or 3/4.'
csong@19 46 elif subdivisionSequence != [s for s in subdivisionSequence if isinstance(s,int)]:
csong@9 47 print 'Error: invalid subdivision sequence. Please indicate in the form of list of numbers, e.g [1,2,2,2,2].'
csong@19 48 elif beatLevel >= len(subdivisionSequence):
csong@9 49 print 'Error: beat-level exceeds the range of subdivision sequence list.'
csong@9 50 else:
csong@9 51 isValid = True
csong@9 52 return isValid
csong@9 53
csong@19 54 def write_time_signature():
csong@9 55 import cPickle as pickle
csong@19 56 timeSigFile = open('TimeSignature.pkl', 'wb')
csong@19 57 pickle.dump(timeSignatureBase, timeSigFile)
csong@19 58 timeSigFile.close()
csong@9 59
csong@19 60 def read_time_signature():
csong@9 61 import cPickle as pickle
csong@19 62 timeSigFile = open('TimeSignature.pkl','rb')
csong@19 63 data = pickle.load(timeSigFile)
csong@9 64 return data
csong@19 65 timeSigFile.close()
csong@9 66
csong@19 67 def print_time_signature_base():
csong@19 68 data = read_time_signature()
csong@19 69 for timeSignature, settings in data.items():
csong@19 70 print timeSignature, settings
csong@9 71
csong@19 72 # def get_subdivision_seq(timeSignature):
csong@19 73 # if timeSignature in readTimesig():
csong@19 74 # return timesigBase[timesig][0]
csong@19 75 # else:
csong@19 76 # print 'Error: the subdivision sequence for this time-signature is not defined.'
csong@19 77 # return None
csong@9 78
csong@19 79 # def get_beat_level(timesig):
csong@19 80 # if timesig in readTimesig():
csong@19 81 # return timesigBase[timesig][1]
csong@19 82 # else:
csong@19 83 # print 'Error: the subdivision sequence for this time-signature is not defined.'
csong@19 84 # return None