本文主要是介绍不务正业系列1:python简易乐理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 基本概念
- 12平均律:把一个8度的音平均分成12份,7个白键和5个黑键。
- 纯8度震动频率是1:2,纯5度的震动频率1:1.5
- 大小调:
从根音开始
自然大调:全全半全全全半
自然小调:全半全全半全全 - 属音:上纯五度称为上属音,下纯五度称为下属音。主音和属音能发生共振。
- 和弦:
三和弦:perfect 5+major3或minor3。一个取巧的方法:和弦之间都相隔2-3个音程,要求全都落在上面的大调或者小调上。
七和弦:别被名字骗了,就是三和弦再往上加一个和弦,实际上只有4个音。
转位:8度调换
2. 和弦进行
C大调的和弦种类:
下面是简单的一个和弦进行:G7->C是属7->主,叫做正格终止。
加入Dm和弦
加入F7,蓝调终止。
加入Am,更加丰富
常见几个和弦进行:6415=SFCG=是否成功;4536251是很常见的和弦进行。
下面是cubase的图示
3. musicpy
3.1 音符
a = note('C', 5, 0.5, 100) #表示a为音符C5,音符长度为0.5个小节,音符力度为100
a = N('C5(1;80)') # 简洁写法
N('D5(.4)') # 表示4分音符
a.set(duration, volume) # 返回的是一个全新的和弦类型
b%(duration,volume) # 简洁写法
degree_to_note(60) # 音符和mid转换
a.degree
a+n, a-n # 升音,降音
~a # 取消#和b
A3 = N('A3')
print(A3('sus')) #音符类型可以当作函数或者生成器传入和弦名称获得和弦类型
3.2 和弦
和弦是多个音符的合集,例如A = a + b + c + d
有两种构建方法:chord('C, E, G, B')
,以及chord(['C', 'E', 'G', 'B', 'D'])
chord('G5[3/4;.], F5[.8;.], E5[.8;.]')
表示音符长度和音符间隔
r[.2]
表示休止符
当音符间隔简写为.的时候,表示音符间隔取和音符长度一样的值。
A.set([0.5, 0.5, 1, 1], [1, 1, 2, 2]) # 设置音符间隔和音符长度
A % (1.5, 1) # 简洁写法
chd('A', 'm7') # 使用根音和和弦类型获得和弦
chd('C', interval=[major_third, perfect_fifth, major_seventh]) # C大七和弦
chd('A', 'm7').inversion(1) # 和弦转位
chd('A', 'm7') / 1 # 转位简洁写法
chd('A', 'm7') / 'E'
a+b # 和弦拼接
A%n # 重复和弦
~A # 和弦倒序
chd('C','maj').intervalof() # 获得和弦的音程关系
A+3 # 和弦升音
A.sort([2, 3, 1, 4]) # 和弦排序
A / [2, 3, 1, 4] # 和弦排序简洁写法
p.modulation(scale('A', 'major'), scale('A', 'minor')) # 转调
A.on('C5') # 和弦加根音
A % 'C5'
A.rest(n) # 和弦休止符
A // n,A | nA('#9') # 升九和弦
B('no3') # 省略三度音
A / -2, A ^ -2 # 将第二个音转位到最高音
A @ 2,A @ 'E' # 转位到最低音
A.get([1, 3, 2, 3, 1.1, 3, 2, 3]) # 阿尔贝蒂低音的左手琶音伴奏型。1.1这种小数表示的是第几个音(小数点前的数字)升高几个八度(小数点后的数字)。
A @ [1, 3, 2, 3, 1.1, 3, 2, 3] # 简洁写法
和弦处理函数:
首先是lambda模式
rules = lambda x: C(x) @ [1, 2, 3, 1.1, 2.1, 3, 1.1, 2.1] % (1/8, 1/8) * 2
A = rules('Cmajor') | rules('C7sus4') | rules('G7/B') - octave | rules('Cmajor')
# 把这个和弦按照第1个音,第2个音,第三个音,第1个音高1个八度,第二个音高1个八度, 第三个音,第1个音高1个八度,第二个音高1个八度的顺序组成一个新的和弦类型(一段和弦伴奏),然后把这段和弦伴奏的每个音符的长度都设置为0.5个小节,每个音符的间隔也都设置为0.5个小节,然后把这段和弦伴奏重复两遍。
其次是管道模式
rules = exp('up(2).reverse()', mode='tail')
#把一个和弦类型整体升高两个半音,然后把音倒序排列。
音阶。scale类(音阶类)可以快速按照音的间隔来构建调式,比如大调的音的排列是全全半全全全半,比如
scale('C5', 'major')
就可以得到以C5为根音的C大调音阶,
3.3 组合
A.add(B, mode='head', start=8) # 不同声部合并
A& (B,start) # 简洁写法
A.add(B, mode='after') # 继续播放
A // B, A | B # 简洁写法
cut(ind1=0, ind2=None, start_time=0) # 按照小节进行切片
组成乐曲:
使用piece或者build方法:
A1 = C('Cmaj7') % (1, 1/8)
B1 = chord('A2') % (1,)
C1 = chord('C,D,E,F,G') % (1/8, 1/8)
D1 = chord('C5')new_piece = piece([A1, B1, C1, D1],['Acoustic Grand Piano', 'Electric Bass (finger)', 'Orchestral Harp', 'Synth Drum'],150,[0, 2, 2, 4],['piano', 'bass', 'harp', 'drum'])new_piece = build([A1, 'Acoustic Grand Piano', 0, 1, 'piano'],[B1, 'Electric Bass (finger)', 2, 2, 'bass'],[C1, 'Orchestral Harp', 2, 3, 'harp'],[D1, 'Synth Drum', 4, 4, 'drum'],bpm=150)
这篇关于不务正业系列1:python简易乐理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!