def randomMeasure(): one_prob_dict = {'1.0': 0.4, '0.5 0.5': 0.53, '0.75 0.25':0.02, '0.5 0.25 0.25':0.02, '0.25 0.25 0.25 0.25':0.02} two_prob_dict = {} prob_dict_keys = list(prob_dict.keys()) for i in range(0, len(prob_dict_keys)): two_prob_dict[prob_dict_keys[i] + ' ' + prob_dict_keys[i]] = 0.5*prob_dict[prob_dict_keys[i]] for j in range(i + 1, len(prob_dict_keys)): two_prob_dict[prob_dict_keys[i] + ' ' + prob_dict_keys[j]] = ph.geometricMean([prob_dict[prob_dict_keys[i]], prob_dict[prob_dict_keys[j]]]) two_prob_dict[prob_dict_keys[j] + ' ' + prob_dict_keys[i]] = ph.geometricMean([prob_dict[prob_dict_keys[i]], prob_dict[prob_dict_keys[j]]]) two_prob_dict['1.5 0.5'] = 0.5 two_prob_dict['1.5 0.25 0.25'] = 0.1 two_prob_dict['2.0'] = 0.5 four_prob_dict = {} two_prob_dict_keys = list(two_prob_dict.keys()) for i in range(0, len(prob_dict_keys)): four_prob_dict[two_prob_dict_keys[i] + ' ' + two_prob_dict_keys[i]] = 3*two_prob_dict[two_prob_dict_keys[i]] for j in range(i + 1, len(prob_dict_keys)): four_prob_dict[two_prob_dict_keys[i] + ' ' + two_prob_dict_keys[j]] = ph.geometricMean([two_prob_dict[two_prob_dict_keys[i]], two_prob_dict[two_prob_dict_keys[j]]]) four_prob_dict[two_prob_dict_keys[j] + ' ' + two_prob_dict_keys[i]] = ph.geometricMean([two_prob_dict[two_prob_dict_keys[i]], two_prob_dict[two_prob_dict_keys[j]]]) for key in prob_dict.keys(): four_prob_dict['3.0 ' + key] = 0.2 + prob_dict[key] return strToRhy(ph.probDictToChoice(four_prob_dict))
#These two functions are used to convert between string and list representations of rhythms (because lists aren't hashable and therefore can't be used in the probability dict) def strNum(rhys): return ' '.join([str(i) for i in rhys]) def strToRhy(r_str): return [float(i) for i in r_str.split(' ')] prob_dict = {'0.5 0.25 0.25':0.05, '0.25 0.25 0.5': 0.05, '1.0': 0.5, '0.5 0.5': 0.5, '0.25 0.25 0.25 0.25':0.05} prob_dict_triplets = {'0.5 0.25 0.25':0.05, '0.25 0.25 0.5': 0.05, '1.0': 0.5, '0.5 0.5': 0.5, '0.25 0.25 0.25 0.25':0.05, '0.33333333 0.33333333 0.33333333':0.05} two_prob_dict = {} prob_dict_keys = prob_dict.keys() for i in range(0, len(prob_dict_keys)): two_prob_dict[prob_dict_keys[i] + ' ' + prob_dict_keys[i]] = 1.2*prob_dict[prob_dict_keys[i]] for j in range(i + 1, len(prob_dict_keys)): two_prob_dict[prob_dict_keys[i] + ' ' + prob_dict_keys[j]] = ph.geometricMean([prob_dict[prob_dict_keys[i]], prob_dict[prob_dict_keys[j]]]) two_prob_dict[prob_dict_keys[j] + ' ' + prob_dict_keys[i]] = ph.geometricMean([prob_dict[prob_dict_keys[i]], prob_dict[prob_dict_keys[j]]]) two_prob_dict['1.5 0.5'] = 0.35 two_prob_dict['1.5 0.25 0.25'] = 0.12 two_prob_dict['2.0'] = 0.4 two_prob_dict_triplets = {} prob_dict_keys = prob_dict_triplets.keys() for i in range(0, len(prob_dict_keys)): two_prob_dict_triplets[prob_dict_keys[i] + ' ' + prob_dict_keys[i]] = 1.2*prob_dict_triplets[prob_dict_keys[i]] for j in range(i + 1, len(prob_dict_keys)): two_prob_dict_triplets[prob_dict_keys[i] + ' ' + prob_dict_keys[j]] = ph.geometricMean([prob_dict_triplets[prob_dict_keys[i]], prob_dict_triplets[prob_dict_keys[j]]]) two_prob_dict_triplets[prob_dict_keys[j] + ' ' + prob_dict_keys[i]] = ph.geometricMean([prob_dict_triplets[prob_dict_keys[i]], prob_dict_triplets[prob_dict_keys[j]]]) two_prob_dict['2.0'] = 0.4 #return a similar rhythm to the previous rhythm
oneprobs["0.25 0.25 0.25 0.25"] = 0.05 oneprobs["0.5 0.25 0.25"] = 0.01 ph.renormalizeProbs(oneprobs) #set probabilities for two beats tworhys = [] twoprobs = {} for i in range(0, len(onerhys)): tworhys.append([onerhys[i], onerhys[i]]) for j in range(i + 1, len(onerhys)): tworhys.append([onerhys[i], onerhys[j]]) tworhys.append([onerhys[j], onerhys[i]]) for rhys in tworhys: rhystr = ' '.join(map(strNum, rhys)) probs = map(lambda i: oneprobs[strNum(i)], rhys) twoprobs[rhystr] = ph.geometricMean(probs) if (rhys[0][0] == rhys[1][0]): twoprobs[rhystr] *= 4 elif (rhys[0][0] > rhys[1][0]): twoprobs[rhystr] *= 2 twoprobs['1.5 0.5'] = 0.3 twoprobs['2.0'] = 0.2 twoprobs['1.5 0.25 0.25'] = 0.2 twoprobs['0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25'] = 0.2 ph.renormalizeProbs(twoprobs) #set probabilities for four beats twos = twoprobs.keys() fourrhys = [] for i in range(0, len(twos)): fourrhys.append([twos[i], twos[i]])