作者:隋顺意
博客:Sui_da_xia
微信:世界上的霸主本文原创,初发布于CSDN,今进军知乎
前言
上期留了尾,卖了关子。许多朋友感到不爽,就接着上回,继续为您说。
(没看前篇的的朋友请点 [这里]看上篇,否则看此文会有障碍)
如今,许多人尝试用计算机创作乐器,普遍方法是随机生成一段音乐,和现有曲子的相似度进行打分,一个分值范围内算通过。我也这么做?不,这样做效率低下,随机生成几千首只有一首通过,计算速度也十分低下(超级电脑不说),筛选出的曲子也不一定好听。
我用什么方法呢?今天,我们要了解许多令人发指的乐理,以及计算令人发指的乐理公式。准备好笔纸了么?今天,就让我,带您进入美妙(复杂)的音乐殿堂吧!
乐理的代码(含拗口的句子):
友情提示:建议仔细阅读,多看几遍,看不懂不要紧,我学乐理时,是一头雾水。
废话不多说,先来讲讲“音程”:
音程及其算法:
看着玄乎,其实是最简单,它表示两音之间的“距离,其基本单位称为度。在mido中,以“半音”为基本单位,接下来,我都采用半音计数。1:小二度 2:大二度/减三度 3:小三度/增二度 4:大三度/减四度 5:纯四度/增三度 6:增四度/减五度 7:纯五度/减六度 8:小六度/增五度 9:大六度/减七度 10:小七度/增六度 11:大七度 (单位:半音)
除了四度和五度(八度不算),度按减小大增来计算,没有基准。但,一般“大度”为最佳选择。不信可以尝试下,是大三度好听,还是小三度好听。除四度以外,只有理论上的增减,不会说增三度,只说纯四度。因此,只需做11个函数就行了。比如说小二度:
1.def sd_two(low=None,high=None): #小二度
2. if type(low) == str:
3. ···#就是转换,前面的代码都写过
4. yin = []
5. if low and high == None:
6. high = low + 1
7. if high and low == None:
8. low = high - 1
9. yin.append(low)
10. yin.append(high)
11. return yin
我花了整天肝枯燥~~的做简单计算~~ 的代码,想看去我的Github:
记得给我star并关注哦<