在前几天的讨论会上,有师兄指出原来的方法实在是很难训练,所以我改进了音乐生成的思路。
首先,我用LSTM生成的一定是一段音乐的序列化表达,那么我就可以用成型的一些数据集去训练LSTM。为了避免生成的音乐与现有的音乐有大量重复,我们可以考虑更改LSTM使其更加“健忘”,这样应该能解决一部分问题。接下来肯定还会暴露出更多的问题,我会持续阐述我的思路。
首先找到一个合适的数据集。打开
http://www.mln.io/resources/datasets/
之后我讲解一下这些数据集的用法:
第一个Classical Music Datasets,储存了很多的MIDI古典音乐。结合abc与midi格式的转换工具,可以从中提取出一个序列化的格式,ABC格式。
转换工具地址如下:https://github.com/leesavide/abcmidi
第二个是我打算采集的,叫做Nottingham Music Database,只是可惜数据下载已经失效了,我找到的数据集如下:
http://www.chezfred.org.uk/freds/music/tunes/index.htm
是用特殊的格式保存的。
第三个MuseData也是音乐数据集,官网介绍如下:
The MuseData database is a project of the Center for Computer Assisted Research in the Humanities (CCARH). The database was created by Walter Hewlett. Data entry has been primarily done by Frances Bennion, Edmund Correia, Walter Hewlett, and Steve Rasmussen.
提供了多种格式存储,多为古典音乐。
第四个似乎是挂了。
第五个主要是做音乐推荐的,似乎无法知道原来的旋律序列。
=====================
初步决定是Nottingham Music Database,有两种格式可以选,第一种是ABC格式,如下:
X: 1 T:A and D % Nottingham Music Database S:EF M:4/4 K:A M:6/8 P:A f|"A"ecc c2f|"A"ecc c2f|"A"ecc c2f|"Bm"BcB "E7"B2f| "A"ecc c2f|"A"ecc c2c/2d/2|"D"efe "E7"dcB| [1"A"Ace a2:| [2"A"Ace ag=g|| K:D P:B "D"f2f Fdd|"D"AFA f2e/2f/2|"G"g2g ecd|"Em"efd "A7"cBA| "D"f^ef dcd|"D"AFA f=ef|"G"gfg "A7"ABc |1"D"d3 d2e:|2"D"d3 d2||
ASCII码:
.MS title= "f3A and DfP"; rtitle = "f2EFfP"; key = a; bps = 16; autobeam; chords; bars = 18; timesig = 6 8. f^'A' | e^"A" c^ c^ c^> f^ | e^"A" c^ c^ c^> f^ | e^"A" c^ c^ c^ b a | b"Bm" c^ b b>"E7" f^ | e^"A" c^ c^ c^> f^ | e^"A" c^ c^ c^> c^< d^< | e^"D" f^ e^ d^"E7" c^ b | a"A"'1st.' c^ e^ a^> :| a"A"'2nd.' c^ e^ a^ g^ g=^ |! endstave. key = d. f^>'B' "D" f^ d^> d^ | a"D" f a f^> e^< f^< | g^>"G" g^ e^ c^ d^ | e^"Em" f^ d^ c^"A7" b a | f^"D" e+^ f^ d^ c^ d^ | a"D" f a f^ e^ f^ | g^"G" f^ g^ a"A7" b c^ | d^>. '1st.' "D" d^> e^ :| d^>. '2nd.' "D" d^> |! endstave. .ME
这个解析还有待我的研究。