解析和操纵音乐和弦

Chordal的Python项目详细描述


和弦

一个简单的python库,用于接收和操作根据Christopher Harte's 2010 thesis以明文格式存储的音乐和弦。

安装

python -m pip install ChordalPy

格式

这个库可以解析的和弦是一种特定的纯文本格式,详细说明了here;但是,这里有一个快速而肮脏的运行。

每个和弦有三个部分:根、音程和低音。它们用一个冒号和一个类似这样的斜线隔开

root:intervals/bass

根就是任何字母名。它可以是'C''G#''Fbbbbb'

间隔

“间隔”部分由一组公共间隔的缩写组成,后面是对parantesses中这些间隔的任何更改。例如,一个大三位一体加上一个锐利的第六个将是maj(#6)。添加的间隔可以执行以下操作之一:

    向现有的速记添加一个间隔。 在现有速记中修改(尖锐或平直)一段时间。<删除现有的速记(在删除间隔之前用一段时间写上一段时间)。

速记名单可在先前参考的pdf文件第105页找到。

低音

低音是一个音程度(任何数字1-9)和0个或更多的修饰语(#b

关于间隔的注释

有一个有趣的快速音乐间隔,这意味着它们不能完全用一个数字来表达。相反,它们需要一个由两个整数组成的元组。

在查看这个库的源代码时,您经常会发现这样标记的间隔。第一个整数表示注释之间的字母名数目(例如,在从CG的间隔中,第一个整数是5),第二个整数是半步的数目(所以在从CG的间隔中,第二个整数是^})。

使用这个方法,你可以看到你将如何区分两个增强音高。例如,CECFb。从CE的间隔是(3, 4),而从CFb的间隔是(4, 4)

库使用

分析和弦并打印其成员

importChordalPymy_chord=ChordalPy.parse_chord("C:maj")spelling=my_chord.get_spelling()print("C:maj has notes %s"%spelling)

直接实例化和弦

importChordalPy# C major in first inversion (C:maj/3)root="C"intervals=[(1,0),(3,4),(5,7)]bass="E"my_chord=ChordalPy.Chord(root,intervals,bass)

Chord

打印弦的字符串表示形式

print(str(my_chord))# C:[(1, 0), (3, 4), (5, 7)]/E

打印和弦的拼写

print(my_chord.get_spelling())# ['C', 'E', 'G']

打印弦的二进制音符数组

print(my_chord.get_note_array())# [1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0]

打印弦间隔的伪哈希值

print(my_chord.get_pseudo_hash())# ecca

在一个和弦的根上找到一个给定间隔的音符

print(my_chord.note_from_interval([5,8]))# ecca

另请参见

项目

Chordgen.com-一个使用机器学习来生成和弦音阶的网络工具。The machine learning model接受了使用此库创建的数据的培训。

数据集

使用此库可解析格式的数据集的非详尽列表:

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

推荐PyPI第三方库


热门话题
java我试图使用@OneToOne作为双向映射来映射实体,但却遇到了奇怪的异常   性能Java异步如何工作?异步方法似乎不是异步运行的   java这个代码可以更短吗   线程“main”Java中的csv Java ArrayList异常。lang.NegativeArraySizeException:28   java确定LayoutManager预布局中的显示视图   java如何在FirestorePagingAdapter中通过方法onLoadingStateChanged隐藏/显示进度条?   在Java中,如何打印一个类似于中间有“过道”的座位表的2d数组?   http Java实现字节范围服务,而不使用仅使用Java api的servlet   java无法使用命名根元素生成json   java如何在注销侦听器中获取http会话id?   数组内部输入(java)?   java如何为特殊情况提供更简单的构造函数   java在swing应用程序中显示JavaFX后台   java如何启用系统。出来在eclipse中运行Junit测试时使用println()?   如何在Java中实现Oracle用户定义的聚合函数