zoukankan      html  css  js  c++  java
  • 【Python图像特征的音乐序列生成】使用Python生成简单的MIDI文件

    这个全新的Python音乐创作系列,将会不定期更新。写作这个系列的初衷,是为了做一个项目《基于图像特征的音乐序列生成模型》,实时地提取照片特征,进行神经网络处理,生成一段音乐。

    千里之行,始于足下。首先我们要做的是,音乐序列怎么在计算机中表达出来。

    ==============

    首先参考知乎上的相关回答,以及PyPI上和音乐相关的第三方库。

    来源:https://www.zhihu.com/question/24590883

    另见:https://wiki.python.org/moin/PythonInMusic(上面有更全面的库和软件)

    ==================

    在几番选择之后,我选用了两个库作为midi音乐的生成:

    mingus:http://bspaans.github.io/python-mingus/

    mingus是一个比较高级的库,优点在于写作简单,有相关音乐理论的人可以很快上手,文档全面。

     

    多简明!(哭)

    mingus的缺点在于:它只支持Python 2.X。如果要使用它的Python3版本,最好还是预先使用一次2to3.

    mingus的报错代码问题及解决方案如下:

    https://stackoverflow.com/questions/26984731/importerror-no-module-named-mt-exceptions-when-using-mingus-library

    python-midi:https://github.com/vishnubob/python-midi

    怎么说呢,相对于mingus来说,Python-midi实在不怎么直观。且看这个库的写作方式:

    1 on = midi.NoteOnEvent(tick=0, velocity=20, pitch=midi.G_3)
    2 track.append(on)
    3 # Instantiate a MIDI note off event, append it to the track
    4 off = midi.NoteOffEvent(tick=100, pitch=midi.G_3)
    5 track.append(off)

    tick是音轨序号,pitch是音符。

    我个人还在比较这两个库,如果能解决mingus在Python 3.x下的问题就最好了。

    =======================

    关于MIDI音乐文件的播放,自然有很多选择。但是本着一体化的原则,考虑下面的两个库:

    PyGame:http://www.pygame.org

    PyGame提供了完整的API供MIDI使用,并且最高支持到Python3.6.1,简直是天降福音,要是我当初学Python时,PyGame升级该多好啊。

    第二个是能和mingus协同工作的FluidSynth,而且mingus连怎么操作这个库都写好了,参见:

    http://bspaans.github.io/python-mingus/doc/wiki/tutorialFluidsynth.html

    ==============================

    这只是一些前期的操作,之后我会慢慢撰写整个系列,包括使用TensorFlow,使用Deep Learning完成民谣风格的音乐创作等。

    注意:本系列不完成高难度音乐。(参见:

    https://deepmind.com/blog/wavenet-generative-model-raw-audio/

    http://www.hexahedria.com/2015/08/03/composing-music-with-recurrent-neural-networks/

    相信我,上面的是做不到的。

    https://freemidi.org/artist-435-enya

    当然这种更加不存在。

    =========================

    我只要能做出《成都》这种难度和复杂度的音乐就很满足了。

    谢谢阅读。

  • 相关阅读:
    互联网协议入门详解(转)
    文件流结尾的EOF详解
    数字签名是什么?
    SSL/TLS协议运行机制的概述(转)
    图解SSL/TLS协议(转)
    RSA算法原理(转)
    HTML代码简写法:Emmet和Haml(转)
    HTML Email 编写指南(转)
    PHP CodeBase: 判断用户是否手机访问
    Spring Data JPA之Derived query
  • 原文地址:https://www.cnblogs.com/ldzhangyx/p/7110416.html
Copyright © 2011-2022 走看看