用python实现的音乐理论。音符、音程、音阶和和弦。

musthe的Python项目详细描述


用python实现的音乐理论。音符、音阶和和弦。

它仍在开发中,所以请随意阅读代码、fork和发出pull请求!他们很受欢迎!

安装

要安装:

$ pip install musthe

开发安装

作为开发安装:

(可选)创建虚拟机v:

$ python -m venv env
$ source env/bin/activate

然后安装:

$ pip install -e .

如何使用

它非常简单,所有内容都是以面向对象的方式编码的,例如:

$ python
>>> from musthe import *
>>> a = Note('A')  #Default A4
>>> a
Note("A4")
>>> str(a)
'A'

假设你想要制造张力,所以你想要A的完美第五或小七,所以你要:

>>> fifth = Interval('P5')
>>> seventh = Interval('m7')
>>> a+fifth
Note("E5")
>>> str(a+fifth)
'E'
>>> str(a+seventh)
'G'

尽管很重要的一点是,这些音符的八度是不同的:

>>> a.octave
4
>>> (a+seventh).octave
5

现在让我们看看基本和弦用法:

>>> Chord(Note('A'), 'M')
Chord(Note('A'), 'M')
>>> Chord(Note('A'), 'M').notes
[Note("A4"), Note("C#5"), Note("E5")]
>>> Chord(Note('Bb'), 'dim').notes
[Note("Bb4"), Note("Db5"), Note("Fb5")]

您可以使用字符串构造和弦:

>>> Chord('C#aug7') == Chord(Note('C#'), 'aug7')
True

默认和弦类型为“M”(主和弦)。

现在让我们试试天平:

>>> s = Scale(Note('B'), 'major')
>>> [s[i] for i in range(len(s))]
[Note('B4'), Note('C#5'), Note('D#5'), Note('E5'), Note('F#5'), Note('G#5'), Note('A#5')]
>>> s[0]
Note('B4')
>>> s[-11]
Note('E3')

它返回一个note实例列表,因此如果希望得到更清晰的结果,应该执行如下操作:

>>> s = Scale(Note('B'), 'major')
>>> [str(s[i]) for i in range(len(s))]
['B', 'C#', 'D#', 'E', 'F#', 'G#', 'A#']

检查给定音阶中是否包含音符和和弦:

>>> Note('D#3') in s
True
>>> Note('F3') in s
False
>>> Chord('C#m') in s
True
>>> Chord('CM') in s
False

现在让我们尝试一些高级的东西:给定一个和弦列表,找到包含这些和弦的所有音阶:

>>> chords = [Chord('Cm'), Chord('Fm7'), Chord('Gm')]
>>> for scale in Scale.all():
...     if chords in scale:
...         print(scale)
...
C natural_minor
Eb major

如果您已经安装了lilypond,那么您可以使用这个程序制作一些旋律,lilypond_example.py中给出了一个示例

贡献者

按字母顺序排列

许可证

请参阅许可证文件

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
不推荐使用java AmazonKinesisClient构造函数   java Quartz作业是否在同一个JVM中以自己的线程运行?   在Java中接收安卓推送通知以进行测试   java是对集合进行排序的最佳方法?   安卓 java。lang.NoSuchMethodError org。阿帕奇。http。客户乌提尔斯。我是杜提尔。encPath   java为什么while循环不以额外的“or”条件结束?   Python能否识别Java中使用BCrypt的哈希密码?   在Cygwin中使用附加Java库的windows   java无法从SQLite检索数据   java使用Swingworker给出不正确的结果   使用多线程服务器向特定客户端发送java消息   java在映射未知的Morphia中查询对象