美文网首页
2020-02-25音乐识谱

2020-02-25音乐识谱

作者: 瑶瑶_2930 | 来源:发表于2020-03-01 22:23 被阅读0次

    5-1 背景和知识点简介

    Magenta

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

    格式

    midi:用数字表示音


    image.png

    mp3

    技术

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

    5-3 什么是midi文件

    midi:二进制文件 基本结构:文件头+数据描述 很小一般十几kB MP3一般十几MB
    ![image.png](https://img.haomeiwen.com/i8223243/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):

    相关文章

      网友评论

          本文标题:2020-02-25音乐识谱

          本文链接:https://www.haomeiwen.com/subject/swrzqhtx.html