Skip to main content

Musicpy 是一种 Python 音乐编程语言,旨在通过音乐理论和算法以非常方便的语法编写音乐。

项目描述

音乐

中文

你有没有想过用非常简洁、人类可读的语法编写音乐?

Musicpy 是一种 Python 音乐编程语言,旨在通过音乐理论和算法以非常方便的语法编写音乐。它易于学习和写作,易于阅读,并包含一个完全计算机化的音乐理论系统。

Musicpy 可以做的不仅仅是写音乐。这个包还可以通过乐理逻辑来分析音乐,你可以设计算法来探索音乐的无限可能,全部用musicpy。

使用musicpy,你可以用非常简洁的句法表达一首音乐的音符、和弦、旋律、节奏、音量等信息。它可以通过乐理逻辑生成音乐,进行高级乐理运算。您可以轻松地将musicpy代码输出为MIDI文件格式,还可以轻松加载任何MIDI文件并转换为musicpy的数据结构来做很多高级的乐理操作。musicpy的语法非常简洁灵活,使得用musicpy编写的代码非常具有人类可读性,而且musicpy与python完全兼容,也就是说你可以编写python代码与musicpy交互。因为musicpy涉及音乐理论中的一切,我建议在至少学习了一些音乐理论基础之后使用这个包,这样你就可以更清楚、更满意地使用 musicpy。另一方面,如果您已经熟悉音乐理论,那么在查看我编写的文档后,您应该能够玩弄它们。

文档

有关 musicpy 的语法、数据结构和用法的完整和详细的教程,请参阅musicpy wiki
这个 wiki 经常更新,因为新功能和能力会定期添加到 musicpy 中。
本 wiki 的语法和功能与最新发布的 musicpy 版本同步。

你可以点击这里下载我写的pdf和markdown格式的musicpy的整个wiki,它会不断更新。

安装

确保您首先在您的 PC 中安装了 python(版本 >= 3.7)。在终端中运行以下行通过 pip 安装 musicpy。

pip install musicpy

注意:在 Linux 上,您需要确保安装的 pygame 版本低于 2.0.3,否则 musicpy 的播放功能将无法正常工作,这是由于 pygame 较新版本存在的 bug。您可以pip install pygame==2.0.2在终端中运行以安装 pygame 2.0.2 或任何早于 2.0.3 的版本。您还需要安装freepats 才能使播放功能在Linux 上运行,您可以运行sudo apt-get install freepats(在Ubuntu 上)。

另外,我还写了一个musicpy编辑器,它比普通的python IDE更容易编写和编译musicpy代码,具有实时自动编译和执行功能,有一些语法糖,你可以随时收听从你的musicpy代码生成的音乐,更方便和互动。

我强烈推荐使用这个musicpy 编辑器来编写musicpy 代码。

您可以在存储库musicpy_editor下载此音乐编辑器,准备步骤在自述文件中。

Musicpy 完全兼容 Windows、macOS 和 Linux。

输入

将此行放在要使用它的文件的开头。

from musicpy import *

或者

import musicpy as mp

以避免可能与其他模块的函数名和变量名发生冲突。

组成示例

因为musicpy的功能太多要介绍,所以我只给出一个简单的musicpy中音乐编程的示例代码:

# a nylon string guitar plays broken chords on a chord progression

guitar = (C('CM7', 3, 1/4, 1/8)^2 |
          C('G7sus', 2, 1/4, 1/8)^2 |
          C('A7sus', 2, 1/4, 1/8)^2 |
          C('Em7', 2, 1/4, 1/8)^2 | 
          C('FM7', 2, 1/4, 1/8)^2 |
          C('CM7', 3, 1/4, 1/8)@1 |
          C('AbM7', 2, 1/4, 1/8)^2 |
          C('G7sus', 2, 1/4, 1/8)^2) * 2

play(guitar, bpm=100, instrument=25)

单击此处听听这听起来像什么(Microsoft GS Wavetable Synth)

如果你觉得这太简单了,musicpy 也可以在 30 行代码内产生这样的音乐如果你不关心可读性,可能会更短)。无论如何,这只是一段很短的电子舞曲的例子,并不是为了复杂。

更多musicpy作曲示例,请参考wiki中的musicpy作曲示例章节。

数据结构简介

note, chord,scale是musicpy中建立音乐编程基础的基础类,musicpy中还有更多的音乐类。

由于musicpy的数据结构设计,note该类与整数一致,也就是说可以直接作为int使用。

类是音符的chord集合,这意味着它本身可以看作是一组整数、一个向量,甚至是一个矩阵(例如,一组和弦进行可以看作是多个向量的组合,这导致了一个带有索引的行和列的矩阵形式)

因此notechordscale类都可以在计算中进行算术运算,例如线性代数和离散数学。也可以使用musicpy的数据结构编写一个遵循音乐理论逻辑的算法,或者借助纯数学逻辑对音乐进行实验。

如今,许多实验音乐风格,如序列主义、任意音乐、后现代音乐(如极简主义音乐),理论上都可以在 musicpy 中提供的算术上执行的数据结构上实现。当然,musicpy 可用于编写任何类型的古典音乐、爵士乐或流行音乐。

关于musicpy的数据结构更详细的描述,请参考wiki。

概括

2019年10月开始开发musicpy,目前musicpy有一套完整的乐理逻辑语法,还有很多作曲、编曲功能以及高级乐理逻辑运算。有关详细信息,请参阅维基。我会继续更新musicpy的视频教程和wiki。

我一直在做musicpy,并且经常更新musicpy,会加入越来越多的音乐功能,让musicpy可以用音乐做更多的事情。

谢谢你的支持~

如果你对musicpy的最新进展和发展思想感兴趣,你可以看看这个存储库musicpy_dev

接触

Discord:Rainbow Dreamer#7122
qq:2180502841
Bilibili 账号: Rainbow_Dreamer
邮箱:2180502841@qq.com / q1036889495@gmail.com
讨论组:

加入我们的 Discord 服务器!

QQ讨论群:364834221

我开发这种语言并继续从事这个项目的原因

我开发这种语言的主要原因有两个。首先,相比项目文件和MIDI文件只存储音符、强度、速度等单一信息,从作曲的角度来表示一段音乐是如何实现的,在音乐方面更有意义。理论。大多数音乐在乐理上都是非常有规律的,只要不是现代主义的无调性音乐,这些规律可以通过抽象为乐理的逻辑陈述而大大简化。(例如,从音乐理论的角度来看,一个包含 1000 个音符的 MIDI 文件实际上可以简化为几行代码。)其次,开发了这种语言,以便作曲 AI 可以在真正理解音乐理论的情况下进行作曲(而不是深度学习和提供大量数据),语言也是一个界面,一旦人工智能理解了音乐理论的语法,它就可以用类似人类的思维来作曲。我们可以告诉 AI 乐理的规则,什么好做,什么不好做,这些东西还是可以量化的,所以这个乐理库也可以作为乐理接口,在人与 AI 之间进行音乐交流。所以,比如说你想让AI学习一个人的作曲风格,你也可以在乐理中量化那个人的风格,每个风格对应一些不同的乐理逻辑规则,可以写到AI里面,经过这个库, AI可以实现模仿那个人的风格。如果是AI自己的原创风格,那就是从各种复杂的构图规则中寻找可能性。

我在想,如果没有深度学习、神经网络、教授 AI 音乐理论和某人程式化的音乐理论规则,AI 可能会比深度学习和大数据训练做得更好。所以我想用这个库来教AI人类乐理,让AI能真正理解乐理,这样作曲就不会那么难和随意了。这就是为什么我编写这个库的最初原因之一是避免深度学习。但是我觉得很难抽象出不同音乐家的乐理规则,我会加油写这个算法qwq另外,其实音乐家自己可以告诉AI他喜欢怎么写自己的乐理(也就是他自己独特的乐理偏好规则),那么AI就会很好的模仿,因为当时AI确实懂乐理,所以作曲不太可能有机械感和随意感。在这一点上,人工智能在其头脑中的想法与音乐家在其头脑中的想法完全相同。

人工智能不必遵循我们给它的乐理逻辑规则,但我们可以为人工智能设定一个“偏好”的概念。AI会对某种风格有一定程度的偏好,但除此之外,在“正确乐理”的规则中,它也会有自己独特的风格,所以AI可以说它“受到了某些人的影响”音乐家创作自己的原创风格”。当这个偏好为 0 时,AI 的作曲将是它通过乐理找到的风格,就像一个人自学乐理,开始摸索自己的作曲风格。一个懂乐理的人工智能很容易找到自己独特的作曲风格,我们甚至不需要给它训练数据,教它乐理就行了。

那么我们如何向人工智能教授音乐理论呢?在音乐方面,暂时忽略现代主义音乐的范畴,大多数音乐都遵循一些非常基本的音乐理论规则。这里的规则是指如何写乐理OK和如何写乐理错误。例如,在编写和声时,通常要避免四声部谐音,尤其是在编曲中编写管弦乐声部时。例如,在写和弦时,如果和弦内的音符有小二度(或小九度),听起来会更有战斗力。例如,当AI决定从A大调开始写一首曲子时,它应该从A大调音阶中分步挑选和弦,可能会走调,添加一些从属和弦,在写完主曲部分后,它可能会调制通过五度循环,或大/小三度,在平行的大调和小调等中进行调制。我们需要做的是告诉AI如何正确地写音乐,并且如何写得好听,并且AI会学好乐理,不会忘记,会更少可能会犯错误,所以他们可以写出真正属于自己的音乐。他们会真正知道什么是音乐,什么是音乐理论。因为这个库的语言所做的就是把乐理抽象成逻辑语句,那么我们每次给AI“课”的时候,都是在用这个库的语言表达人自己的乐理概念,然后写出来进入人工智能的数据库。这样,AI才真正学会了乐理。用这种方式组合AI不需要深度学习,不需要训练集,不需要大数据,相比组合用深度学习训练的AI,它实际上不知道音乐理论是什么,也没有音乐概念,只是从大量的训练数据中汲取灵感。还有一点,既然事物可以用具体的逻辑来描述,就不需要机器学习了。如果是文本识别、图像分类,这些都比较难用抽象逻辑来描述事物,那就是深度学习的用武之地。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

musicpy-5.41.tar.gz (98.6 kB 查看哈希

已上传 source