def generate(startPitch, duration): """generate a sequence of notes note: doesn't quite work since we need to incorporate voice'""" sequence = [] lastNote = startPitch #{"st": 8 , "pitch": 67, "dur": 4 , "keysig": -1, "timesig": 12, "fermata": 0}, #lets just say the keysig is -1 for now for i in range(duration): time = (i + 1) * 4 note = singleGen(lastNote, probabilities) toAdd = { "st": time, "pitch": note, "dur": 4, "keysig": -1, "timesig": 12, "fermata": 0 } toAdd["pitch"] = normalize.denormalize_pitch(toAdd) sequence.append(toAdd) lastNote = note print "Sequence is: " for note in sequence: print note s = "sequence_%s_%s.p" % (startPitch, duration) #print "Writing note sequence to ", s #midify the new sequence midify.midify(sequence, "genoutput%s%s" % (startPitch, duration))
def testRoundTrip(self): jsonDict = midiTojson.genJson(midifile) midify.midify(jsonDict, miditempfile) newJsonDict = midiTojson.genJson("../dataset/midi/" + miditempfile + ".mid") #remidify midify.midify(newJsonDict, miditempfile2) print jsonDict print "_V" * 40 print newJsonDict for i in range(0, len(newJsonDict) - 1): for j in range(0, len(newJsonDict[i]) - 1): if not newJsonDict[i][j]["pitch"] == jsonDict[i][j]["pitch"]: print "i :: ", i print "j :: ", j print newJsonDict[i][j] print jsonDict[i][j] if not newJsonDict[i][j]["dur"] == jsonDict[i][j]["dur"]: print "i :: ", i print "j :: ", j print newJsonDict[i][j] print jsonDict[i][j] self.assertEqual(newJsonDict[i][j]["pitch"], jsonDict[i][j]["pitch"]) self.assertEqual(newJsonDict[i][j]["dur"], jsonDict[i][j]["dur"])
def chords_to_midi(chords): """takes a chord sequence from generate and jsons then midis it""" #first need to put it in json format (4 voices) json_dict = [[], [], [], []] note_template = { 'timesig': None, 'keysig': 0, 'tempo': 90, 'st': 0, 'pitch': None, 'dur': 0, 'fermata': 0 } chords = map(lambda c: denormalize_chord(c.chord), chords) for voice in range(len(chords[0])): cur_note = note_template.copy() cur_note['pitch'] = chords[0][voice] for time in range(0, len(chords)): if chords[time][voice] == cur_note['pitch']: cur_note['dur'] += 4 else: json_dict[voice].append(cur_note) cur_note = note_template.copy() cur_note['st'] = time * 4 cur_note['pitch'] = chords[time][voice] cur_note['dur'] = 4 json_dict[voice].append(cur_note) midify(json_dict)
def chords_to_midi(chords): """takes a chord sequence from generate and jsons then midis it""" #first need to put it in json format (4 voices) json_dict = [[],[],[],[]] note_template = {'timesig': None, 'keysig': 0, 'tempo': 90, 'st': 0, 'pitch': None, 'dur': 0, 'fermata': 0} chords = map(lambda c: denormalize_chord(c.chord), chords) for voice in range(len(chords[0])): cur_note = note_template.copy() cur_note['pitch'] = chords[0][voice] for time in range(0, len(chords)): if chords[time][voice] == cur_note['pitch']: cur_note['dur'] += 4 else: json_dict[voice].append(cur_note) cur_note = note_template.copy() cur_note['st'] = time*4 cur_note['pitch'] = chords[time][voice] cur_note['dur'] = 4 json_dict[voice].append(cur_note) midify(json_dict)
def testRoundTrip(self): jsonDict = midiTojson.genJson(midifile) midify.midify(jsonDict, miditempfile) newJsonDict = midiTojson.genJson("../dataset/midi/" + miditempfile + ".mid") #remidify midify.midify(newJsonDict, miditempfile2) print jsonDict print "_V"*40 print newJsonDict for i in range(0,len(newJsonDict)-1): for j in range(0, len(newJsonDict[i])-1): if not newJsonDict[i][j]["pitch"] == jsonDict[i][j]["pitch"]: print "i :: ", i print "j :: ", j print newJsonDict[i][j] print jsonDict[i][j] if not newJsonDict[i][j]["dur"] == jsonDict[i][j]["dur"]: print "i :: ", i print "j :: ", j print newJsonDict[i][j] print jsonDict[i][j] self.assertEqual(newJsonDict[i][j]["pitch"], jsonDict[i][j]["pitch"]) self.assertEqual(newJsonDict[i][j]["dur"], jsonDict[i][j]["dur"])