Python編曲實踐(二) 和弦的實現和進行

2021-09-27 13:51:15 字數 4248 閱讀 1314

和弦,簡單來講就是三個及以上的不同音高的音符的組合。這些音符可以同時演奏,形成混響的效果,也可以按照一定的組合方式交替演奏。最常見的和弦有兩種:三和弦和七和弦,前者由三個音符組成,又分為四種;後者由四個音符組成,又分為8種,具體分類見下面的**:

名稱音程

大三和弦

大三度、純五度

小三和弦

小三度、純五度

增三和弦

大三度、增五度

減三和弦

小三度、減五度 名稱

音程大七和弦

大三度、完全五度、大七度

小七和弦

小三度、完全五度、小七度

屬七和弦(大小七和弦)

大三度、完全五度、小七度

小大七和弦

小三度、完全五度、大七度

半減七和弦

小三度、減五度、減七度

減七和弦

小三度、減五度、減七度

增七和弦

大三度、增五度、小七度

增大七和弦

大三度、增五度、大七度

下面這個圖是 維基百科 的十二平均律**,顯示了不同音程名稱與間隔半音數的對應關係:

結合十二平均律的音程名稱和間隔半音數的對照關係,我們就可以動手寫和弦了.

首先編寫乙個方程用於得到不同和弦對應的音程關係:

def

get_chord_arrangement

(name)

: chord_dict =

chord =[0

,0,0

,0]try

: chord = chord_dict[name]

except

:print

(traceback.format_exc())

return chord

返回值是乙個長度為4的一維陣列,每乙個值表示這個音符與根音相差的半音數。

然後編寫乙個用於將和弦新增到音軌中的函式add_chord:

def

add_chord

(root, name,

format

, length, track, root_base=

0, channel=3)

: bpm = get_bpm(track)

major_notes =[0

,2,2

,1,2

,2,2

,1] notes =

['c'

,'d'

,'e'

,'f'

,'g'

,'a'

,'b'

] notes_dict =

for i, note in

enumerate

(notes)

: notes_dict[note]=60

+sum

(major_notes[

0:i+1]

) root_note = notes_dict[root]

+ root_base*

12 chord = get_chord_arrangement(name)

meta_time =60*

60*10/ bpm

time =

round

(length /

len(

format

)* meta_time)

for dis in

format

: note = root_note + chord[dis]

'note_on'

, note=note, velocity=

56, time=

0, channel=channel)

)'note_off'

, note=note, velocity=

56, time=time, channel=channel)

)

在引數中:

對於《大海啊,故鄉》,我按照 網上的結他譜 為它新增了如下的和弦模式:

def

chord

(track)

:format=[

0,1,

2,3,

2,1]

add_chord(

'c',

'm7'

,format,3

, track)

add_chord(

'e',

'm7'

,format,3

, track)

add_chord(

'c',

'm7'

,format,3

, track)

add_chord(

'd',

'm7'

,format,3

, track)

add_chord(

'g',

'mm7'

,format,3

, track,-1

) add_chord(

'd',

'm7'

,format,3

, track)

add_chord(

'f',

'm7'

,format,3

, track,-1

) add_chord(

'c',

'm7'

,format,3

, track)

add_chord(

'c',

'm7'

,format,3

, track)

add_chord(

'g',

'm7'

,format,3

, track,-1

) add_chord(

'f',

'm7'

,format,3

, track,-1

) add_chord(

'g',

'm7'

,format,3

, track,-1

) add_chord(

'c',

'm7'

,format,3

, track)

add_chord(

'd',

'm7'

,format,3

, track)

add_chord(

'g',

'mm7'

,format,3

, track)

add_chord(

'c',

'm7'

,format,3

, track)

add_chord(

'c',

'm7'

,format,3

, track)

add_chord(

'g',

'm7'

,format,3

, track,-1

) add_chord(

'f',

'm7'

,format,3

, track,-1

) add_chord(

'g',

'm7'

,format,3

, track,-1

) add_chord(

'c',

'm7'

,format,3

, track)

add_chord(

'd',

'm7'

,format,3

, track)

add_chord(

'g',

'mm7'

,format,3

, track)

add_chord(

'c',

'm7'

,format,3

, track)

加上和弦之後,我的midi檔案在midieditor中顯示如下:

和弦 - 維基百科

十二平均律 - 維基百科

python基礎實訓 python基礎實踐(四)

coding utf 8 author sweeping monk why 為什麼要組織列表?print why chicken soup t因為你無法控制使用者提供資料的順序。permanent ordering.sort 永久性修改列表元素的排列順序。前提是所有元素值第一位都是小寫 或者全是大寫...

大一python實驗二答案 python實驗二

安徽工程大學 python 程式設計 實驗報告 班級 物流191 姓名 王凡 學號 3190505102 成績 日期20200322 指導教師 修宇 實驗名稱 實驗二 順序結構程式設計 思考題 注意不要漏答 1 影響題1和題3計算準確性的因素有哪些?如何讓1和3得到的值更準確?可以本地計算機上嘗試,...

實訓python的日記 python實訓第一天

實訓第一天總結 常量 常量也是變數,在python中大家都規定只要是大寫的變數都稱之為常量 使用者與程式互動 數字型別 整型int 浮點型float 字串型別 列表型別 字典型別 在 內,都逗號隔開,可存放多個值,每個值以key value的形式儲存 存 dict1 取 print dict1 na...