f下行到什么形成全音_日系流行和弦走向讲解(三)(434343251 无限全音转调)【算法作曲 X 流行和声】...

511e5db48498d611962555d0f8df3599.png

咳咳,大家好!还是我,(不能踢的猫X) 本尼桑~

今天我们将要讲日系流行里的一个不错的转调公式,即下全音转调~

这一次的教程会分为两部分:

(1)跟之前一样的乐理讲解

(2)用python scripting 实现的代码讲解

那么,我们开始吧~

第一部分:乐理性讲解

三重下全音转调:(Fmaj7 --> Cmaj9/E )--> (Ebmaj7 --> Bbmaj9/D )-->( Dbmaj7 --> Abmaj9/C )--> Bbm7add4 --> Gadd4 -->G7 -->Cmaj

废话不多说,咱们上视频先:

知乎视频​www.zhihu.com

原位:

知乎视频​www.zhihu.com

首先,何为下全音转调? 其实就是字面意思,1转到下面一个全音,也就是b7,b7转到b6以此类推。(这种转调循环到最后会回到第一个调上,所有转过的调性会构成全音阶,即:1,2,3,b5,b6,b7)

咱们还是做个功能图先:

0a378abb42e2fc6ea271f4b2846b54ee.png

这个和声走向有趣的地方在于,他连续重复了三次4-->3,不过是在三个以一个全音相隔的调上。然后最后的bA调通过voice leading的方式转回一开始的C大调。

那么这个和弦走向是怎么来的呢?下面就给大家讲解~

首先我们获得一个简单的不能再简单的43251~

Fmaj7 --> Em7 --> Dm7 --> G7 -->Cmaj7

好的很无聊,我们想延长43这俩'意犹未尽和弦'的感觉,咱们就暴力复制粘贴弄出个434343251,即:

(Fmaj7 --> Em7 )-->(Fmaj7 --> Em7 )-->(Fmaj7 --> Em7 )--> Dm7 --> G7 -->Cmaj7

听起来没那么有意思... 呜,用上下全音转调,得到43↓43↓43251!

(Fmaj7 --> Em7 )-->(Ebmaj7 --> Dm7 )-->(Dbmaj7 --> Cm7 )--> Dm7 --> G7 -->Cmaj7

其实这时候已经可以用了,不过我们还可以再让他有意思一点,咱们把倒数第三个PD功能的Dm7,转为在bA调里同为二级PD功能的Bbm7,即:

(Fmaj7 --> Em7 )-->(Ebmaj7 --> Dm7 )-->(Dbmaj7 --> Cm7 --> Bbm7 )--> G7 -->Cmaj7

最后咱们为了voice leading考虑,加上转位和add4延留音,就能弄出个这个:

Fmaj7 --> Cmaj9/E )--> (Ebmaj7 --> Bbmaj9/D )-->( Dbmaj7 --> Abmaj9/C )--> Bbm7add4 -->( Gadd4 -->G7) -->Cmaj

看到这里的朋友,点击左下角给个赞吧~

第二部分:算法作曲讲解(optional)

身为程序员,咱们发现个规律,就是这个转调可以给你4-->3 感觉的同时无限进行下去!

于是咱们可以用代码实现这个这个逻辑特征,最后可以得到一个这样的和弦走向的字符串表达式:

其中C是和弦走向;x,y,z 是单个和弦;

为向下平移一个全音的操作符;
为回到初始调性的操作符。那么我们来听听我们生成的曲例吧~
知乎视频​www.zhihu.com

为了能无线循环,我根据voice leading给钢琴和弦乐设置了两个seed pattern,钢琴的seed循环十六次;弦乐是nested loop,它的seed先循环三次seed然后再提高个octave,最后再外面循环4次于钢琴同步。最后我再加上设计好的coda pattern,最后再parse到daw,效果是这样:

知乎视频​www.zhihu.com
知乎视频​www.zhihu.com

规则实例化部分代码:

(在这里打个小广告,我和 @矮木矮木诶 正在编写一个python开源库,名为pydaw,预计今年下半年上线。这段代码是基于这个库实现的~)

import mido
import pydaw as daw
import my_pattern_lib as pattern

class Infinity_Transposition_Composition:
    
    def __init__(self):
        self.bpm = 130
        self.meter = 4
        self.score = generate_score(bpm,meter)
        playback(self.score)
        
    
    def playback(self):
        daw.playback(score)

    def generate_score(self):
        # one for piano, one for strings
        track = [daw.empty_track() for i in range (2)] 

        #=================================
        # Piano generation for first 16 bars
        #=================================

        # lowest key in this pattern first beat is G5
        cur_pos_piano = 67 
        
        # number of subsequent occuerence of the piano pattern
        iter_time_piano = 16
        for i in range(iter_time_piano):
            track[0] = track[0].append(pattern.piano_meta_seed_1, cur_pos_piano) # append at the last note position
            cur_pos_piano -= 2 # transpose down 2, which is a whole tone interval

        #=================================
        # Strings generation for first 16 bars
        #=================================
        cur_pos_strings = 43 
        # number of subsequent occuerence of the strings pattern
        iter_time_strings = 4
        for i in range(iter_time_strings):
            internal_iter_time = 3
            for j in range(internal_iter_time):
                track[1] = track[1].append(pattern.string_meta_seed_1,cur_pos_strings)
                cur_pos_strings -= 2 # transpose up 4, which is a Major 3rd interval
            cur_pos_strings += 13 # transpose up a 9th
            track[1] = track[1].append(pattern.string_meta_seed_2,cur_pos_strings) # add different

        # Coda generation qwq
        track[0] = track[0].append(pattern.piano_coda_1, pattern.keys.default())
        track[1] = track[1].append(pattern.string_coda_1, pattern.keys.default())

        return track

if __name__ == "__main__":
    my_song = Infinity_Transposition_Composition()
    my_song.playback()

        
        

那么我们下次再见~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值