2020-02-25音乐识谱

5-1 背景和知识点简介

Magenta

google基于TensorFlow做的和音乐 艺术相关的项目

格式

midi:用数字表示音


image.png

mp3

技术

RNN:每一个输出和前面输出建立联系,很好处理序列化数据
LSTM

5-3 什么是midi文件

midi:二进制文件 基本结构:文件头+数据描述 很小一般十几kB MP3一般十几MB
![image.png](https://upload-images.jianshu.io/upload_images/8223243-8cfe16dbecd

编写转换midi到mp3的方法

用timidity生成MP3文件
cp命令是复制

5.6Python音乐库music21的使用和测试方法

类:note&chord
ll 其实不是个命令 是ls -l的别名 会显示出隐式文件
from ...import convert, instrument
convert转stream流类型 ,instructment会获取乐器部分 从stream中
if parts: 如果非零
那么递归获取
如果没有乐器部分,就是纯音符组成

5.7编写整个神经网络

mv命令:移动文件或者给文件改名
RNN-LSTM循环神经网络
Sequential 类 线性堆叠起来的层级模型 序列 添加不同的神经网络的层

model = Sequential()
model.add(Dense(32, input_dim=500)) // 全连接层
model.add(Dense)

层在tf.keras.layers里面
tf版本不一样,对应用法可能不一样
函数的参数列表 (xx=None)是个可选参数,不用的时候默认为none


image.png

丢弃层:只用了70%的神经元 防止过拟合

如果有多个LSTM堆叠起来,第一个层需要指定形状,

model.add(tf.keras.layers.LSTM(
                   512,#LSTM层神经元的数目是512,也是输出维度
                    input_shape=(inputs.shape[1], inputs.shape[2]), # 输入数据形状为shape[2]个时间长度,每一个时间点下样本数据的特征值维度是shape[1]
                      return_sequences=True # 只有最后一层LSTM不用设置))

丢弃层
...Dropout(0.3)#丢弃30%神经元
全连接层
Dense(256)
Dense(num_pitch)
激活层
softmax属于激活层,用softmax函数去计算
Activation('Softmax')
对model进行配置
model.compile(loss="categorical_crossentropy", optimizer=rmsprop)
交叉熵计算误差,使用对循环神经网络比较优秀的rmsprop优化器

保存参数

  model.load_weights(weights_file)

5-8编写从训练文件获取音符的方法

gedit是个文本编辑器
pickle;glob是读文件的库
mkdir 创建文件夹

glob:匹配所有符合条件的文件,并以List的形式返回
for file in glob.glob("music_midi/*.mid"):
创建一个数组notes[]

for elements in notes_to_parse:
  #Note类型就取Pitch
  if isinstance(element, note.Note):
    notes.append(str(element))
  elif isinstance(element, chord.Chord):
#转换为整数 ,用·分割,这个是midi然后转成音符 比如4.15.7
    notes.append('.' . join(str(n) for n in element.normalOrder))
#将数据写入 data/notes 文件
with open('data/notes', wb) as filepath:
  pickle.dump(notes, filepath)

5-9 编写从预测数据来生成音乐的方法

def create_music(prediction):

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容