def noRepeat(song):
    fitness = 0
    for i in range(len(song) - 4):
        prev,dum,dum,dum,next = song[i:i+5] # Compare notes of same track
        noteDiff3 = abs(midiNote.getPitch(next) - midiNote.getPitch(prev))
        if noteDiff3 != 0 : fitness += 1
    fitness /= float(len(song)) if len(song) > 0 else 0
    return fitness*0.1
def longBass(song):
    fitness = 0
    for note in song:
        pitch = midiNote.getPitch(note)
        dur = midiNote.getDur(note)
        if pitch > 59 and dur < 64: fitness += 1
        if pitch < 51 and dur > 92: fitness += 1 
    return fitness/float(len(song))*0.25
def writeNote(note, noteDict, f):
    track = midiNote.getTrack(note)
    channel = midiNote.getChan(note)
    noteStr = noteDict[midiNote.getPitch(note)]
    duration = (midiNote.getDur(note)) / 4 / 8.0
    fraction = duration.as_integer_ratio()
    wholeNum = (fraction[0]) / int(fraction[1])
    numer = fraction[0] % fraction[1]
    # output = "FOL   (BA %4d   CR %9.6f)   TR %2d   CH %2d   NT  %8s   %d+%d/%d\n"\
    #          % (bar, time, track, channel, noteStr, wholeNum, numer, fraction[1])
    output = "FOL  TR %2d   CH %2d   NT  %8s   %d+%d/%d\n" % (track, channel, noteStr, wholeNum, numer, fraction[1])
    f.write(output)
def arpeggio(song):
    fitness = 0
    for i in range(len(song) - 4):
        prev,dum,note,dum,next = song[i:i+5] # Compare notes of same track
        noteDiff1 = abs(midiNote.getPitch(note) - midiNote.getPitch(next))
        noteDiff2 = abs(midiNote.getPitch(prev) - midiNote.getPitch(note))
        noteDiff3 = abs(midiNote.getPitch(next) - midiNote.getPitch(prev))
        if noteDiff1 == 4 and noteDiff2 == 3: fitness += 0.5
        if noteDiff1 == 3 and noteDiff2 == 4: fitness += 0.5
        if noteDiff3 == 7 or noteDiff3 == 6: fitness += 0.5
    fitness /= float(len(song)) if len(song) > 0 else 0
    return fitness*0.25
def notTooHigh(song):
    fitness = 0
    for note in song:
        if midiNote.getPitch(note) < 75: fitness += 1
    return fitness/float(len(song))*0.15
def scaleC(song):
    fitness = 0
    for note in song:
        pitch = midiNote.getPitch(note)
        if pitch%12 in [0, 2, 3, 5, 7, 8, 10]: fitness += 1
    return fitness/float(len(song))*0.25