Esempio n. 1
0
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
Esempio n. 3
0
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]])