里头包含了 2004 ~ 2018 他们蒐集到的资料,全都是 MIDI 档,你可以随意选你想用的音乐,我这边自己挑了 1281 首,处理的时候,我们不管 control change,只在乎 note_on (照理说应该要加 control change 下去训练,但这样处理资料变很麻烦,那时候又有时间压力所以就没又加了XD,改成最後生成的时候随机添加)。
paths = []
songs = []
#append every filepath in your_music_folder folder to paths[]
for r, d, f in os.walk("./your_music_folder"):
for file in f:
if '.mid' in file:
paths.append(os.path.join(r, file))
#for each path in the array, create a Mido object and append it to songs
for path in paths:
mid = MidiFile(path, type = 1)
songs.append(mid)
del paths
from math import sqrt
seq_len = 256
gen_len = int(sqrt(seq_len))
notes = []
dataset = []
chunk = []
# for each in midi object in list of songs
for i in range(len(songs)):
for msg in songs[i]:
# filtering out meta messages
if not msg.is_meta:
# filtering out control changes
if (msg.type == 'note_on'):
notes.append(msg.note)
for j in range(1, len(notes)):
chunk.append(notes[j])
#save each 16 note chunk
if (j % seq_len == 0):
dataset.append(chunk)
chunk = []
print(f"Processing {i} Song")
chunk = []
notes = []
del chunk
del notes
train_data = np.array(dataset)
np.save("preprocess_data.npz",train_data)
到此,资料前处理的部分就完结了,明天就可以拿这个来训练了!
>>: Day-8 Divide-and-Conquer-3 : 二分搜寻法, 费波那契数列, Strassen’s演算法
前言 当我们处理来自外部数据源的数据时, 可能会遇到空的数据的情况。 我们需要一种方法表达一种可以为...
基线的变更(任何正式批准的变更)均应进行管理。如果选定的安全控制未得到批准,未批准或未设定基线,则无...
1.前言 今天依旧接续之前没讲完程序码,这次主要是讲loop里面的程序码,那此次主要介绍较为主要的部...
本篇文章同步发表在 HKT 线上教室 部落格,线上影音教学课程已上架至 Udemy 和 Youtu...
说到 Prometheus 不得提到监控,Prometheus能帮助我们指标数据采集、指标数据储存、...