Python编曲实践(二):和弦的实现和进行

前言

上一篇文章 中我简单介绍了如何使用Mido这个库在Python中实现MIDI编程,分享了我的经验和心得,但是单音轨的纯音符堆砌听起来太单薄了,故本篇文章介绍如何轻松添加和弦音轨,使得乐曲更加饱满、丰富。

和弦的背景知识

和弦,简单来讲就是三个及以上的不同音高的音符的组合。这些音符可以同时演奏,形成混响的效果,也可以按照一定的组合方式交替演奏。最常见的和弦有两种:三和弦和七和弦,前者由三个音符组成,又分为四种;后者由四个音符组成,又分为8种,具体分类见下面的表格:

名称音程
大三和弦大三度、纯五度
小三和弦小三度、纯五度
增三和弦大三度、增五度
减三和弦小三度、减五度
名称音程
大七和弦大三度、完全五度、大七度
小七和弦小三度、完全五度、小七度
属七和弦(大小七和弦)大三度、完全五度、小七度
小大七和弦小三度、完全五度、大七度
半减七和弦小三度、减五度、减七度
减七和弦小三度、减五度、减七度
增七和弦大三度、增五度、小七度
增大七和弦大三度、增五度、大七度

下面这个图是 维基百科 的十二平均律表格,显示了不同音程名称与间隔半音数的对应关系:
十二平均律

结合十二平均律的音程名称和间隔半音数的对照关系,我们就可以动手写和弦了.

编程实现

首先编写一个方程用于得到不同和弦对应的音程关系:

def get_chord_arrangement(name):chord_dict = {'maj3': [0, 4, 7, 0],  # 大三和弦 根音-大三度-纯五度'min3': [0, 3, 7, 0],  # 小三和弦 根音-小三度-纯五度'aug3': [0, 4, 8, 0],  # 增三和弦 根音-大三度-增五度'dim3': [0, 3, 6, 0],  # 减三和弦 根音-小三度-减五度'M7': [0, 4, 7, 11],  # 大七和弦 根音-大三度-纯五度-大七度'Mm7': [0, 4, 7, 10],  # 属七和弦 根音-大三度-纯五度-小七度'm7': [0, 3, 7, 10],  # 小七和弦 根音-小三度-纯五度-小七度'mM7': [0, 3, 7, 11],  # 小大七和弦 根音-小三度-纯五度-大七度'aug7': [0, 4, 8, 10],  # 增七和弦 根音-大三度-增五度-小七度'augM7': [0, 4, 8, 11],  # 增大七和弦 根音-大三度-增五度-小七度'm7b5': [0, 3, 6, 10],  # 半减七和弦 根音-小三度-减五度-减七度'dim7': [0, 3, 6, 9]  # 减减七和弦 根音-小三度-减五度-减七度}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*12chord = get_chord_arrangement(name)meta_time = 60 * 60 * 10 / bpmtime = round(length / len(format) * meta_time)for dis in format:note = root_note + chord[dis]track.append(Message('note_on', note=note, velocity=56, time=0, channel=channel))track.append(Message('note_off', note=note, velocity=56, time=time, channel=channel))

在参数中:

  • root是根音的名字,这里我们考虑的音符是在notes数组中给出,暂时不考虑升降音为根音的情况;root_base是根音所在的音域;
  • format是用于演奏和弦的方式,用一维数组表示,数组表示和弦中第几个音符,比如 [0, 1, 2, 3, 2, 1] ;
  • length是整个和弦演奏的时长,用占全音符长度的数量来表示
    通过这个函数中的循环,我们可以按照format指示的方式将和弦添加到MIDI音轨之中。

对于《大海啊,故乡》,我按照 网上的吉他谱 为它添加了如下的和弦模式:

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中显示如下:
在这里插入图片描述感谢阅读,完整的项目代码详见 Github - Truedick23/MusicCritique

参考资料

和弦 - 维基百科
十二平均律 - 维基百科

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/50818.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FL计算机软件,FL Studio水果编曲软件

FL Studio水果编曲软件就是一个非常专业的录音室,他的软件中给大家准备的功能都非常的实用,可以让用户们在这里编辑出超级好听的音乐,这个软件使用非常的方便,而且功能非常的齐全,大家有需要的话可以来下载FL Studio水…

自己编曲用什么软件

当大家欣赏音乐的时候,有想过自己去进行创作吗? 近年来,越来越多的独立音乐人开始走入大家的视野,音乐也从主流的流行音乐变得越来越多元化,个性化。 一首歌曲的制作其实并不容易,它需要经过作词作曲、制…

FLstudio-编曲一般流程

文章目录 前言节拍器音符输入乐器组合 前言 乐曲的节点:节拍,音色,音高 节拍器 编曲时心中大概已经有了节拍,节拍器可以帮助音符校准位置 1表示节拍 3可以唤起节拍器,会根据点击的频率确定节拍 2激活后可以播放来确…

【码农学编曲】Waves混音 混响 延时 母带

参考视频:https://www.bilibili.com/video/av39601467 混音师:Graham CochraneRecording Revolution 目录 1.Master总线混音 1.1 Q10 EQ均衡器 1.2 SSL Master Bus Compressor 总线压缩器 1.3 Krammer磁带模拟器 2.鼓的混音 2.1 底鼓(…

智能编曲软件含音色库-Band in a Box 2014 EverythingPAK Mac

Band in a Box 2014 EverythingPAK For MAC | 81.67GB Band-in-a-Box 2014 MAC版是一款功能强大的自动编曲软件,能够根据给定的风格样式(摇滚/爵士/布鲁斯/ ….)和和声进行(A7 D7 A7 E13 D7#9 …)&#xff…

【码农学编曲】吉他伴奏

【推荐音源】 1.吉他分解伴奏织体 可以去掉红框内的: 【举例:周杰伦《晴天》前奏】 2.一招提高吉他档次 复制一轨,其中一轨调成右声道,偏置值为-25。(但我觉得一个极左一个极右效果不错) 3.木吉他半分解伴…

【码农学编曲】钢琴伴奏

1.分类 2. 分解和弦伴奏织体 3.柱式和弦伴奏织体 4.钢琴终止处的伴奏织体 属和弦: 5.半分解织体 6.延音踏板的踩法 每个和弦来一下,如图 7.和弦的平稳进行 含义:两个和弦同一个声部(低音声部无限制)之间相距不超过3度…

【码农学编曲】贝斯的编写

【小常识:有鼓的地方基本都有bass】 1.Bass的基础编写 我用的音源: 推荐音源:Trilian的Studio Warm - True Staccato 直接把和弦根音的写上就行 2.贝斯的节奏编写 让鼓和bass节奏保持一致 3.在贝斯上演奏五音 (因为只演奏根音…

Linux下的编曲软件,在Linux下可用Wine运行编曲软件FL Studio,也可用LMMS替代

如果你想在Linux系统下使用编曲软件FL Studio,那就用Wine来运行,当前官方已证实可在Wine下完美运行FL Studio,当然,也可用LMMS来替代。 用户的期待 数字音乐制作软件(Daw)FL Studio功能非常全面,在中国及全世界使用FL …

Linux下的编曲软件,MuseScore(免费作曲编曲软件) V3.0.1 Linux版

MuseScore是一款非常好用的五线谱作曲编曲软件,它可以帮助用户在在多种平台上进行曲子的编写,所见即所得,它还提供一个专业制谱软件如Sibelius和Finale的高性价比的替代方案。你可以打印出排版的很漂亮的乐谱,或保存为PDF和MIDI文…

怎么编曲软件测试,关于编曲软件的测评

1-YAMAHA Steinberg研发的Cubase和Nuendo,全功能 这两款软件操作、界面、快捷键基本一样。区别在于对视频的支持,Nuendo优于Cubase。Cubase零售价¥5000左右,Nuendo零售价¥15000左右。教育版本基本半价,但禁…

如何搭建自己的AI绘画平台

官方地址:https://github.com/AUTOMATIC1111/stable-diffusion-webui MacBookPro 14 M1 芯片:Apple M1 Pro 内存:16G 安装虚拟环境,我用的anaconda安装,注意python版本需要3.10以上,每次启动记得先激活一…

5个免费又好用的AI绘画工具,功能太强了

最近AI绘画挺火的,不用依靠任何基础 ,输入文字即可绘画成图,你知道有哪些AI绘画工具吗? 下面我就来跟大家分享5款免费又好用的工具,你们千万别错过了。 01.AI文画人 一个能够免费在线生成AI绘画的网站,每天…

几乎0操作体验AI生成绘画,不能再小白了!#playgroundai

‍ ‍用 Disco Diffusion 不会调参数,Stable Diffusion 不会找关键词,Midjourney 要付费,DALLE2 没申请到体验名额...... 尽管现在AI生成工具已经遍地开花,也几乎是0代码操作,但对于小白来说还是有许多门槛阻碍了他们完…

不知道ai绘画如何使用?这几个ai绘画软件推荐给你

相信最近一段时间,ai绘画霸屏了大家的朋友圈,这是一种以ai技术为支撑的新型绘图方式。与传统绘画不同的是,它无需自己动手绘制,只需要输入描述画面的文本,就能生成精美的图片。这种神奇的操作吸引了不少小伙伴去下载ai…

微信也能玩AI绘画啦

在微信玩AI绘画的方法 需要的设备:一台Windows电脑 需要的软件:PC版微信 需要的软技能:有一点python基础 最近AI绘画太过火爆,忍不住想,如何在微信里添加上AI绘画的功能来和朋友互动呢? 就像这样&#xff…

chatgpt赋能python:Python操作手机:SEO指南

Python 操作手机:SEO 指南 在移动设备占据互联网用户市场大头的今天,应用程序的互动变得越来越受欢迎。这就需要我们在开发和优化网站时将手机端无缝集成到我们的计划中。使用 Python 语言可以有效地实现此目标,本文将探讨如何使用 Python 操…

ChatGPT:我开始慌了!谷歌Bard迎来了大规模更新!

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID|计算机视觉研究院 学习群|扫码在主页获取加入方式 计算机视觉研究院专栏 Column of Computer Vision Institute ChatGPT:我开始慌了! 两天前,谷歌…

简单几步搞定Mac电脑快速返回桌面的操作!

使用Windows电脑的朋友都知道,在Windows系统中,按键盘上的“开始D”组合键即可返回桌面,但是使用mac改如何操作呢?下面我们一起看看吧。 步骤1:点击左上角的苹果标志,选择“系统偏好设置” 步骤2&#xff…

Mac 快速切换桌面快捷键

Mac系统可以新建多个桌面,我习惯开三个桌面,第一个桌面放浏览器、QQ等娱乐窗口,第二个窗口开Xcode等编程工具(不编程用Mac干啥,是吧),第三个窗口放一些笔记啊,工具什么的。 一般切换…