基于keras构建lstm模型自动生成音乐系统
创始人
2024-02-08 22:23:48
0

目录
LSTM 机器学习生成音乐 1
数据集介绍 1
将 mid 转成 note 数组 4
将 note 数组转成 mid 文件 5
获取数据集并将其保存 6
将 note 进行编号 7
构建数据集 8
截取数据 8
进行 one-hot 编码 10
构建模型 11
训练 13
生成音乐 13
加载数据 16
加载模型 16
构建 id 与 note 的映射 16
预测下一个 note 16
源源不断产生 note 数据 17
生成音乐 20
总结 20
参考 20
将 mid 转成 note 数组
​ 下面定义get_notes,通过这个函数,我们可以将文件夹中所有mid文件变成一个名为all_note的数组。
关于具体怎么转化,实际上我们没有必要去关心,这个函数也是直接 copy 基于深度学习 lstm 算法生成音乐的,直接用即可。
from music21 import converter, instrument, note, chord, stream
def get_notes(song_path,song_names):
“”“获得midi音乐文件中的音符 :param song_path: [文件的保存地址] :type song_path: [str] :param song_names: [所有音乐文件的文件名] :type song_names: [list] :return: [所有符合要求的音符] :rtype: [list] “””
all_notes = []
for song_name in song_names:
stream = converter.parse(song_path+song_name)
instru = instrument.partitionByInstrument(stream)
if instru: # 如果有乐器部分,取第一个乐器部分
notes = instru.parts[0].recurse()
else: #如果没有乐器部分,直接取note
notes = stream.flat.notes
for element in notes:
# 如果是 Note 类型,取音调
# 如果是 Chord 类型,取音调的序号,存int类型比较容易处理
if isinstance(element, note.Note):
all_notes.append(str(element.pitch))
elif isinstance(element, chord.Chord):
all_notes.append(‘.’.join(str(n) for n in element.normalOrder))
return all_notes
将 note 数组转成 mid 文件
既然可以将mid文件转化成note数组,同理,也可以将note数组转成mid文件(也就是音乐)。定义一个create_music函数,同理这个函数也是copy基于深度学习lstm算法生成音乐的,同样也不需要关心其如何实现。
create_music函数在使用模型生成音乐的时候会用到(到后面看到的时候别懵逼了哦!!!!)。
def create_music(result_data,filename):
“”“生成mid音乐,然后进行保存 :param result_data: [音符列表] :type result_data: [list] :param filename: [文件名] :type filename: [str] “””
result_data = [str(data) for data in result_data]
offset = 0
output_notes = []
# 生成 Note(音符)或 Chord(和弦)对象
for data in result_data:
if (‘.’ in data) or data.isdigit():
notes_in_chord = data.split(‘.’)
notes = []
for current_note in notes_in_chord:
new_note = note.Note(int(current_note))
new_note.storedInstrument = instrument.Piano()
notes.append(new_note)
new_chord = chord.Chord(notes)
new_chord.offset = offset
output_notes.append(new_chord)

    else:new_note = note.Note(data)new_note.offset = offsetnew_note.storedInstrument = instrument.Piano()output_notes.append(new_note)offset += 1
# 创建音乐流(Stream)
midi_stream = stream.Stream(output_notes)
# 写入 MIDI 文件
midi_stream.write('midi', fp=filename+'.mid')

获取数据集并将其保存
通过前面的介绍,调用get_notes将使用music21库将文件夹中所有的mid文件变成一个note数组,但实际上这个过程是比较慢的,因此可以在第一次的时候将转换后的note数组保存起来,下面定义分别定义保存和读取的函数:
def save_data(filename,content):
“”“保存音符 :param filename: [保存的文件名] :type filename: [str] :param content: [内容] :type content: [list]] “””
with open(filename,“w”) as f:
for data in content:
f.write(str(data)+“\n”)
def get_data(filename):
“”“从文件中获取音符 :param filename: [文件名] :type filename: [str] :return: [返回音符] :rtype: [list] “””
with open(filename) as f:
all_notes = f.readlines()
return [ note[:len(note)-1] for note in all_notes]
​ 接下来就是调用以上几个函数:将mid文件转成note数组——>将note数组进行保存。
import ossong_path = "./midi_songs/"song_names = os.listdir(song_path)

获取note数组all_notes = get_notes(song_path,song_names)# 保存文件save_data(“data.txt”,all_notes)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关内容

热门资讯

经典拟人句摘抄 经典拟人句摘抄  拟人句就是把某件东西比喻成人的动作,所写事物必须具有人的特点;不能出现比喻词;不能...
经典爱情小说:《理智与情感》   《理智与情感》是创作了世界名著《傲慢与偏见》的著名英国女作家简·奥斯汀的第一部小说,是《傲慢与偏...
每天早上大声朗读美文 每天早上大声朗读美文  每天早上大声朗读  很多孩子的“生物钟”还处于“寒假假状态”  通常早上还迷...
因为痛 所以叫青春 人生没有最佳新人奖——金兰都《因为痛,所以叫青春》已故韩国总统金大中的别名是“忍冬草”,其意为战胜整...
人生阡陌交错美文品读 人生阡陌交错美文品读  阡陌交错;阡陌,交,错。  人生就像一张网,没有限制,时光就在这由无数条线交...
精彩片段摘抄 精彩片段摘抄大全  导语:倘若希望在金色的秋天收获果实,那么在寒意侵人的早春,就该卷起裤腿,去不懈地...
qq空间留言爱情话语 qq空间留言爱情话语  1、没有什么东西是过不去的,只有自己跟自己过不去,爱情里的伤害也是这样。  ...
丁丁张小说推荐:《永无止尽的...   《永无止尽的约会》是由作家丁丁张所创作的长篇小说,下面,yjbys小编为大家简单介绍一下这部小说...
人生旅途美文欣赏 人生旅途美文欣赏  导语:人生是一段旅程,起点是生,终点是死。旅程的时间有短有长,旅途中我们会遇到各...
优美段落100字摘抄(2)   23、历史常给人以警示,假若当初商纣王能广开言路,察纳忠言,何至于落得众叛亲离,葬身火海的下场呢...
沈奇岚经典语句   沈奇岚是复旦大学哲学系硕士,德国明斯特大学哲学博士,同时也是一名作家,著名艺术评论人,策展人。下...
让人一看就赞的晚安说说 让人一看就赞的晚安说说(15篇)  随着社交平台的兴起,越来越多人热衷于在线上发表说说,用于分享快乐...
有一种爱不能牵手美文 有一种爱不能牵手美文  灯光穿过我有些空朦的双眸,那条车水马龙五光十色的大街,那双紧紧牵着的手定格在...
《西游降魔篇》经典台词   《西游·降魔篇》是由周星驰监制、编剧、导演,文章、舒淇、黄渤等主演的古装神话电影。此片故事围绕年...
无眠之夜的心情说说 无眠之夜的心情说说(精选170句)  随着移动互联网和社交网络的发展,越来越多人会在社交平台上发布说...
论语译注摘抄及读后感 论语译注摘抄及读后感  对于孔子的精神是值得我们学习的。试想一下在距今如此遥远的时代,就有人能发出如...
朋友圈唯美语句35条 2022年精选朋友圈唯美语句35条  一首歌唱掉眼泪,旧铁皮往南开,恋人已不再,如今的你又在谁的身旁...
情感美文:比我幸福 情感美文:比我幸福  我真的不应该出现在他的生命中。如果有来世,我真的希望我们不要做朋友,不要认识。...
喜欢一个人心情说说 喜欢一个人心情说说  1、有多少人以友谊的名义,爱着一个人。认为拥有,就是失去的开始。  2、一个人...
侦探推理小说推荐:《一先令蜡...   《一先令蜡烛》作者是英国铁衣著,黄希玲译。下面是小编整合的相关信息,欢迎查阅。  作为推理黄金时...