annotate Syncopation models/parameter_setter.py @ 20:b959c2acb927

Refactored all models except for KTH, all past testing except for SG.
author csong <csong@eecs.qmul.ac.uk>
date Tue, 07 Apr 2015 19:05:07 +0100
parents 9030967a05f8
children 5de1cb45c145
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@20 11 '2/2': [[1,2,2,2,2,2],1],
csong@20 12 '3/2': [[1,3,2,2,2,2],1],
csong@20 13 '4/2': [[1,2,2,2,2,2],1],
csong@20 14 '2/4': [[1,2,2,2,2,2],1],
csong@20 15 '3/4': [[1,3,2,2,2,2],1],
csong@20 16 '4/4': [[1,2,2,2,2,2],2],
csong@20 17 '5/4': [[1,5,2,2,2,2],1],
csong@20 18 '7/4': [[1,7,2,2,2,2],1],
csong@20 19 '3/8': [[1,3,2,2,2,2],1],
csong@20 20 '5/8': [[1,5,2,2,2,2],1],
csong@20 21 '6/8': [[1,2,3,2,2,2],1],
csong@20 22 '9/8': [[1,3,3,2,2,2],1],
csong@20 23 '12/8':[[1,2,2,3,2,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