def create_music(prediction): # 生成音乐函数,训练不用 """ 用神经网络预测的音乐数据来生成mid文件 """ offset = 0 # 偏移,防止数据覆盖 output_notes = [] # 生成Note或chord对象 for data in prediction: # 如果是chord格式:45.21.78 if ('.' in data) or data.isdigit(): # data中有.或者有数字 note_in_chord = data.split('.') # 用.分隔和弦中的每个音 notes = [] # notes列表接收单音 for current_note in note_in_chord: new_note = note.Note(int(current_note)) # 把当前音符化成整数,在对应midi_number转换成note new_note.storedInstrument = instrument.Piano() # 乐器用钢琴 notes.append(new_note) new_chord = chord.Chord(notes) # 再把notes中的音化成新的和弦 new_chord.offset = offset # 初试定的偏移给和弦的偏移 output_notes.append(new_chord) # 把转化好的和弦传到output_notes中 # 是note格式: else: new_note = note.Note(data) # note直接可以把data变成新的note new_note.offset = offset new_note.storedInstrument = instrument.Piano() # 乐器用钢琴 output_notes.append(new_note) # 把new_note传到output_notes中 # 每次迭代都将偏移增加,防止交叠覆盖 offset += 0.5 # 创建音乐流(stream) midi_stream = stream.Stream(output_notes) # 把上面的循环输出结果传到流 # 写入midi文件 midi_stream.write('midi', fp='output24.mid') # 最终输出的文件名是output.mid,格式是mid
时间: 2024-02-15 10:27:27 浏览: 102
这段代码是用来生成音乐的,它使用一个神经网络预测的音乐数据来生成一个 MIDI 文件。函数的主要作用是将预测数据转换为 Note 或 Chord 对象,并将它们添加到一个音乐流中。然后将这个音乐流写入一个 MIDI 文件中。其中,偏移量 offset 是用来防止数据覆盖的,每次循环都会将偏移量增加。此外,乐器使用的是钢琴。
相关问题
def create_music(prediction): # 生成音乐函数,训练不用 """ 用神经网络预测的音乐数据来生成mid文件 """ offset = 0 # 偏移,防止数据覆盖 output_notes = [] # 生成Note或chord对象 for data in prediction: # 如果是chord格式:45.21.78 if ('.' in data) or data.isdigit(): # data中有.或者有数字 note_in_chord = data.split('.') # 用.分隔和弦中的每个音 notes = [] # notes列表接收单音 for current_note in note_in_chord: new_note = note.Note(int(current_note)) # 把当前音符化成整数,在对应midi_number转换成note new_note.storedInstrument = instrument.Piano() # 乐器用钢琴 notes.append(new_note) new_chord = chord.Chord(notes) # 再把notes中的音化成新的和弦 new_chord.offset = offset # 初试定的偏移给和弦的偏移 output_notes.append(new_chord) # 把转化好的和弦传到output_notes中 # 是note格式: else: new_note = note.Note(data) # note直接可以把data变成新的note new_note.offset = offset new_note.storedInstrument = instrument.Piano() # 乐器用钢琴 output_notes.append(new_note) # 把new_note传到output_notes中 # 每次迭代都将偏移增加,防止交叠覆盖 offset += 0.5 # 创建音乐流(stream) midi_stream = stream.Stream(output_notes) # 把上面的循环输出结果传到流 # 写入midi文件 midi_stream.write('midi', fp='output24.mid')
这段代码是用来生成音乐的,输入是一个预测结果(prediction),通过循环遍历每个元素,如果是chord格式(如45.21.78),就把每个音符分离出来,将它们转换成note对象,再把这些note对象转换成一个新的chord对象,然后加入到output_notes列表中;如果是note格式,就直接把它转换成note对象,并加入到output_notes列表中。每次循环都会更新偏移量offset,保证音符不会重叠覆盖。最后把output_notes列表中的所有音符通过Stream对象转换成一个midi文件(output24.mid)。
def create_music(prediction): offset = 0 output_notes = [] for data in prediction: if ('.' in data) or data.isdigit(): note_in_chord = data.split('.') notes = [] for current_note in note_in_chord: new_note = note.Note(int(current_note)) # 把当前音符化成整数,在对应midi_number转换成note new_note.storedInstrument = instrument.Piano() # 乐器用钢琴 notes.append(new_note) new_chord = chord.Chord(notes) # 再把notes中的音化成新的和弦 new_chord.offset = offset # 初试定的偏移给和弦的偏移 output_notes.append(new_chord) # 把转化好的和弦传到output_notes中 # 是note格式: else: new_note = note.Note(data) # note直接可以把data变成新的note new_note.offset = offset new_note.storedInstrument = instrument.Piano() # 乐器用钢琴 output_notes.append(new_note) # 把new_note传到output_notes中 # 每次迭代都将偏移增加,防止交叠覆盖 offset += 0.5 midi_stream = stream.Stream(output_notes) midi_stream.write('midi', fp='output24.mid')
这段代码是一个函数,用于根据输入的prediction生成音乐。首先,它定义了一个偏移量(offset)和一个空列表(output_notes),用于存储生成的音符或和弦。然后,它循环遍历prediction中的每个元素。如果元素中包含'.'或者是数字,说明它是和弦格式,就将其中每个音符分离开来,将它们转换为Note对象,再将这些Note对象转换为Chord对象,并加入到output_notes列表中。如果元素不是和弦格式,说明它是单音符,就将它转换为Note对象,并加入到output_notes列表中。每次循环都会更新偏移量(offset)。最后,将output_notes列表转换为一个midi流(stream)对象,再将这个流对象写入到文件'output24.mid'中。
阅读全文