作者: admin

  • 地震中的伊斯坦布尔 2023

    地震中的伊斯坦布尔 2023

    伊斯坦布尔一日游记 2023.Feb.16

    土耳其,撸猫胜地,跨亚欧大陆。博览斯普鲁斯海峡的美景,这里可以尽享君士坦丁堡昔日的璀璨辉煌。尽管只有短短的一天时间,你却能深深感受到这里所独有的特色:全世界的任何一个角落,都无法与此地相提并论。你可以聆听到从古老城区尖顶的宣礼塔中传出的深沉的宣礼声,同时还能享受到街头商贩不绝于耳的热闹吆喝声。这是一个充满活力和韵律的地方,每一个声音都在诉说着这座城市的独特故事。

    英国 伦敦 Heathrow Airport 2023.Feb.15

    起飞前

    提前了几个小时来到机场的我,在一家中国茶餐厅里安静地坐着。我独自坐在那里,沉醉于观察身边游客忙碌奔波的景象,其中带来的人来人往的热闹气氛让我感到特别享受。尤其是那些拖着大包小包行李且登机时间快要结束的游客。

    我点了一份“Chicken Noodles in Superior Soup”。在英国半个月,还没有吃过鸡汤面,内心当然是期待至极的。然而,点餐后的我忽然想起,不到30个小时,我就将回到香港了。这让我开始疑虑,既然即将回到美食的天堂,我是否真的有必要在这里品尝这份并非地道的中国菜呢?

    比起三毛的“鸡汤煮雨”,这一家的就很一般了。不禁心疼起了我的钱包。不过是几根面,一勺水,几块鸡肉混合的产品罢了。比起我自己做的(称得上是艺术),还是差远了。

    土耳其 Istanbul 2023.Feb.15

    无网风波

    于当地时间清晨五点抵达机场。没有什么比在清晨初见一个城市更令人愉快的了。

    然而,这份愉快并未持续太久。作为一名“新时代新青年”,下飞机的首要任务自然是连接到互联网。然而,在出发前,我竟然忘记购买流量包,导致手机无法上网。于是,我的视线便转向了机场的Wi-Fi。

    我曾在巴黎、罗马、伦敦等大小不一的机场停留过,对机场Wi-Fi的可靠性有着深刻的理解。但土耳其机场的Wi-Fi却让我对国际机场的Wi-Fi有了新的认识。我在出发前已经得知伊斯坦布尔机场Wi-Fi只允许使用一小时,然而更令人惊讶的是,当我连接Wi-Fi时,居然需要输入手机验证码!我的手机此刻处于无法接入网络的状态,如何能接收短信呢?

    我试图不断发送验证码,却始终没有收到任何回应。像无头苍蝇一样,在机场里奔波的我,遭遇了机场工作人员已经司空见惯的困扰,他们用一种无奈的表情回应我。那些琳琅满目的Wi-Fi名称和我无法上网的尴尬处境形成了鲜明的对比,使我变得越来越焦虑。刚刚的愉快早已烟消云散,取而代之的是一种焦虑和无助。

    在这座繁忙的机场中,我仿佛成了唯一的存在。周围的人群、繁忙的行程、灯火辉煌的候机大厅,所有的一切似乎都与我无关。我只是一个在网络世界中迷失的旅人,孤独地面对着这座诺大的机场。

    俗话说,“上帝为你关上一扇门,定会顺手关上一扇窗”。在我几乎失去希望的时候,我忽然看到了一台“Wi-Fi自助机”。据说只需扫描护照,就可以享受一小时的Wi-Fi服务。我不知为何,先是四处观望,试图保持镇定的样子,生怕让别人察觉到我因为无法上网而感到的焦虑。

    然而,当我小心翼翼地将护照放入机器,却发现机器迟迟没有任何反应。我在心中无奈地嘀咕:“这土耳其的机器真是差劲。”与此同时,我旁边的一位绿色护照持有者轻松地从机器中取出了Wi-Fi账户和密码,这让我更加难以接受。显然,问题并不在机器,而在于我的护照无法通过验证。

    没办法,只好作罢。距离刚下飞机已经1个小时了,赶紧先出境找“touristanbul”窗口办理登记一日游吧。

    半路上,我又看到了一台那个让我又爱又恨的Wi-Fi自助机。然而,令我没想到的是,这次竟然成功了。拿到Wi-Fi账户和密码后,我立即开启了网络,终于与互联网重新接轨。那一刻,我感到如释重负。

    就在此时,第一缕阳光缓缓穿透窗户,洒满了整个机场。暖黄的光线带来了新的希望和活力,我心中的阴霾瞬间被驱散。此刻,我的土耳其之旅正式拉开了序幕。

    关于touristanbul项目

    这个一日游项目是由土耳其航空牵头,主要针对的是乘坐土耳其航空,在伊斯坦布尔机场中转时间超过6小时但小于24小时的旅客。由于疫情的影响,该项目一度被暂停,直到2023年2月份才重新开放。

    旅客可以根据自己的时间安排,选择不同时间段的免费土耳其一日游。由于我的下一趟飞机是在第二天凌晨一点多,因此柜台小哥为我安排了时间最长的“T11路线”。

    2023年2月7日土耳其大地震

    2023年2月7日,周一凌晨,土耳其东南部靠近叙利亚边境的地区接连发生了两次剧烈地震。

    据当天的报告,超过5000人在这场灾难中丧生,数千人受伤。世界卫生组织警告,死亡人数可能会增加到初步统计的八倍。而到了2月10日,死亡人数已经超过2万人——其中在土耳其,至少有17,674人死亡,已超过该国历史上任何一次强烈地震的死亡人数。

    在登上旅游巴士后,导游对我们这些外国游客表达了深深的感激之情,感谢我们在这个艰难时刻仍然支持土耳其,每天都有很多游客自发向土耳其捐款。虽然这次地震并未波及伊斯坦布尔市,但无数的土耳其人民却在此次灾难中失去了生命。令人意想不到的事,中国电信也宣布减免我们在土耳其的全部网络费用。

    出发啦出发啦

    时间是2023年 2月16 ,早上9点钟,迎着土耳其清晨第一缕阳光前往市中心。下面是一些在车上拍摄的照片。

    还是在车上拍的~~

    终于下车了,在土耳其的第一餐也是由土耳其航空给我们免费提供的~

    虽然看起来不咋样,吃起来也不咋样。。

    土耳其有很多很多很多这种小玩意的店,应该是称为“中古店”吧。

    值得一提的是,土耳其不愧是宇宙第一猫之国,随处可见的猫猫。喜欢猫猫的朋友一定不能错过伊斯坦布尔。

    我个人特别喜欢这样在店面展示了琳琅满目的商品的商店。让我回想起小时候路过的报刊亭,有太多的东西想买。现在经济宽松不少,可以一定程度上随心所欲购买了。

    世界上最小的海之一 —- 马尔马拉海

    远远的看到了海边,不曾知道,这就是位于土耳其的伊斯坦布尔以南,连接了地中海和黑海的海域 —- 马尔马拉海。

    马尔马拉海的历史非常丰富。自古希腊时代以来,这个区域就是欧亚大陆间重要的贸易路线。特别是在罗马帝国和拜占庭帝国时期,马尔马拉海的重要性更为突出,因为伊斯坦布尔(当时被称为君士坦丁堡)是帝国的首都。

    由于它的地理位置,马尔马拉海也经常成为冲突和战争的舞台。比如,在第一次世界大战期间,英国和法国试图通过马尔马拉海控制博斯普鲁斯海峡和达达尼尔海峡,从而向被困的俄罗斯提供援助,这就引发了著名的加里波利战役。

    希波德罗马广场(Hippodrome of Constantinople)

    希波德罗马广场(Hippodrome of Constantinople),位于土耳其的伊斯坦布尔,是古罗马和拜占庭帝国时期的一处重要的社会和体育活动场所,主要用于马车比赛和其他公众娱乐活动。

    由于我这个是英文的导游团,下列叙述可能不太准确。

    该广场的历史可以追溯到公元3世纪,当时由罗马皇帝开始建造,后由君士坦丁大帝于4世纪完成,并进一步扩大。最初的广场大约可以容纳10万人观众,是当时城市生活的中心。

    以下就是埃及方尖碑,蛇柱,以及君士坦丁柱。

    这里说说这个方尖碑~

    埃及方尖碑,也被称为图特摩斯三世方尖碑,是位于土耳其伊斯坦布尔希波德罗马广场的一座古埃及方尖碑。

    这座碑由红色花岗岩制成,原本高约30米,不过现存部分高度为约19.6米。

    它由古埃及法老图特摩斯三世于公元前15世纪建造,以庆祝其在尼罗河流域的胜利。

    公园4世纪的时候呢,罗马皇帝君士坦丁大帝下令将这座碑从埃及运到君士坦丁堡,并立在希波德罗马广场上。这也是为何它被称为“埃及”方尖碑,因为它实际上是从埃及移至君士坦丁堡的。

    这座碑已经屹立了两千年之久,现在它是伊斯坦布尔最重要的历史遗迹之一。

    蓝色清真寺(Blue Mosque)

    非常可惜,我去的时候,蓝色清真寺正在维护没有开放!!

    下面这张照片是背对着蓝色清真寺拍的。(别问我为什么没拍,因为Mosque完全看不见呀!!)

    蓝色清真寺的设计是一种混合了拜占庭和伊斯兰建筑风格的独特风格,融合了伊斯坦布尔的历史和文化。其内部装饰有大约20,000多片手工制作的伊兹尼克瓷砖,瓷砖上绘制了各种花卉和几何图案,主要颜色是蓝色,所以叫Blue Mosque。

    古兰经(Quran)

    看看这本古兰经,大家猜猜要多少钱呢?

    值得一提的是,古兰经覆盖了各种主题,包括神学、道德法规、社会和家庭关系的指南,以及对前犹太教和基督教传统的引用和评论。古兰经的语言风格被称为唯美而具有深度,被视为阿拉伯文学的巅峰之作。

    土耳其著名集市 —- Kalpakçılar

    “Kalpakçılar”在土耳其语中意为“毛皮商人”,因为在历史上这条街上主要是售卖毛皮制品的商人,但现在它更以出售金饰和珠宝而闻名。

    你可以看到各种各样的金饰,包括手链,项链,戒指,耳环,吊坠等,还有各种珠宝和宝石。此外,许多商店还出售传统的土耳其工艺品和纪念品。

    我在这里买了一些手信勒!包括土耳其茶叶,不过土耳其茶叶真的一般般~~

    需要注意的是,在这里购物需要良好的砍价技巧,因为在土耳其,砍价通常是购物的一部分!!!

    又见到海边啦!!!

    象棋

    不得不说,土耳其人对国际象棋也是相当的热衷和执着的。无论是在公园、咖啡馆,还是在家中,都能看到人们在玩国际象棋。

    这种热爱并不仅仅表现在业余爱好者的层面,土耳其在国际象棋竞赛中也有很高的成绩。

    值得一提的是,土耳其还在教育中大力推广国际象棋。2005年,土耳其的教育部将象棋纳入了小学的必修课程,这使得土耳其成为全世界首个将国际象棋列入教育系统的国家之一。

    结束啦

    结束了一天的行程,筋疲力尽地拖着几十斤的行李回到了伊斯坦布尔机场。

    收工,回香港!!

  • 音乐与Python

    音乐与Python

    写于2020年9月。写着玩的,代码下一篇再优化了,很不专业QAQ。

    本篇文章从律学开始,从十二平均律出发,介绍一些基础必要的乐理知识,然后编写python文件,输出和弦音频文件。

    乐理知识部分:

    一、律学简述(temperament)

    1、概论

    律学,又称“音律学”,是研究律制构成与应用的科学。律学须对音乐所用的音律进行研究。音乐所用的音绝大多数是确定的,律制则是以某特定音程为基础,用数学方法规定的一系列乐音的体系。体系中的每个单位称为“律”;音阶是按照音程关系的一定规格从律制中选择若干律而构成的音列,其中的每个单位称为“音”。“音”与“律”合称“音律”时,除指律制外,兼指作精确规定的所有乐音。

    简而言之,律就是用数学的方法规定各个音高(不止)的振动频率。“律”是构成律制的基本单位。“律”和“音”的概念相近但略有不同,律制中每个单位称为“律”,而音阶中每个单位称为“音”,律制与音阶的关系十分密切。

    2、律的计算

    音律计算法即音程的计算法,使用频率比或音程值(interval value)来表示和计算音程的大小。

    从古至今,律法不断更替。不同的律制由不同的生律法决定。

    音程值(interval value)有四种,分别为对数值、八度值、音分值和平均音程值。

    3、五度相生律(circle-of-fifths system)

    五度相生律,规定构成纯五度音程的两个音的频率规定为2:3。这种每隔五度产生一律,继续相生而得各律的做法,称为“五度相生法”。

    其中,由于最大音差的存在,使五度相生律无法在十二律上循环构成各调音阶,即从主音出发,生律十二次(或更多次)并纳入同一八度后,无法回到主音,这对五度相生律的使用造成了一定障碍。

    4、纯律(just intonation)

    其中音阶中音符的频率是由小整数的比率得出的。在这个系统中,音符之间的音程是基于简单的数字比例,例如八度音程为2:1,完美五度音程为3:2,完美四度音程为4:3。这些比例创造出和谐纯净的音程,据说比现代西方音乐中使用的等温调音系统产生的音色更自然、更悦耳。

    5、十二平均律(twelve-tone equal temperament)

    十二平均律是把一个八度均分为频率比相等的十二个半音的律制,又称为“十二等比律”。

    接下来我们所有代码都是采用十二平均律的。原因是,钢琴就是基于十二平均律设计的。

    百度百科写道:十二平均律最早是由我国明朝科学家朱载堉发现(1584年)。后通过丝绸之路传至西方。

    1605年荷兰数学家西蒙·斯特芬在一篇未完成的手稿“Van de Spiegheling der singconst”提出用

    计算十二平均律,但因计算精度不够,他算出的弦长数字,有些偏离正确数字一至二单位之多。

    一个八度的频率比为2:1,则十二平均律各律之间的频率比应为:

    在音乐实践中,当时的音乐家已深知十二平均律的便利之处,各国的作曲家、演奏家都开始使用十二平均律,同时也致力于十二平均律的开发。例如德国的巴赫(J.S.Bach),作有《十二平均律钢琴曲集》二卷,此二卷虽并非只使用了十二平均律(还使用了一些不规则律),但被认为是充分发挥十二平均律的效能,可以自由转调的典范作品。

    6、三种律制的比较

    三种律制各有其优缺点。十二平均律解决了五度相生律和纯律中存在的一些矛盾,例如不断增加律数仍无法回到出发律的矛盾,但十二平均律又会影响音程的和谐性。总体而言,十二平均律将五度相生律和纯律加以调和与折衷,介于两者之间而又更接近五度相生律。十二平均律是目前使用最为广泛的一种律制。

    二、基础乐理—-p1—-乐音体系及分组

    1、音乐体系、音列

    钢琴有88个键。这些乐音加起来的总和叫做–音乐体系

    从低到高排起来叫做–音列

    2、音名

    在乐音体系中,每个乐音都有其固定名称,即:音名 。通常用字母C、D、E、F、G、A、B来表示。

    这七个音级也称为基本音级,在钢琴键盘上的位置是固定不变的。

    3、音的分组

    钢琴划分不同的区域。

    钢琴键盘上中央C开始的这一音组称为小字一组,也是“轴心组”。小字一组往右方依次称为小字二组、小字三组、小字四组、小字五组;小字一组往左方依次称为小字组、大字组、大字一组、大字二组

    三、基础乐理—-p2—-五线谱&音符

    1、谱表

    谱表由五线四间构成,用于记录音符高低。由于谱表有五条等距离平行横线,因此称为五线谱。

    image

    2、谱号

    这里简单认识一下高音谱号就好了。除此,还有低音谱号、中音谱号。

    image

    3、音符

    音符由三部分组成:符头(空心或实心的椭圆形符号)、符干(短竖线)和符尾(符干右侧的小弧线)。

    4、休止符

    休止符是用来表示音乐休止、间断的符号。

    在音乐进行中,休止符虽然表示短暂的无声,但此时有着特殊的意义,而且音乐并没有中断,因此休止符是音乐作品中的重要组成部分之一。

    image

    5、拍号

    分子的数字代码一个小节有多少拍,分母的数字代表一几分音符为一拍。读法注意不能读作几分之几拍!

    此外,拍号还明确了旋律的强弱变化规律。

    image

    四、基础乐理—-p3—-音程

    1、音程

    两个音之间音高距离就叫做音程。

    音程分为两种:旋律音程、和声音程。

    简而言之,旋律音程是两个音先后发出声响。而和声音程指的是同时发出。

    2、旋律音程

    按照发声先后读。

    3、和声音程

    下方的音称为根音,上方的音称为冠音。

    4、协和音程与不协和和音程

    协和音程的音响效果听起来悦耳动听、声音融合,可分为完全协和音程和不完全协和音程。

    完全协和音程包括纯一度、纯四度、纯五度、纯八度;不完全协和音程包括小三度、大三度、小六度、大六度。

    纯八度的音响听起来非常融合,像一个音的声音,也因为过于融合声音听起来会比较空洞。

    纯一、纯四度、纯五度音程比起纯八度的音响效果略显饱满一些,但也显空洞。

    因此,所有纯音程(纯一度、纯四度、纯五度、纯八度)都是完全协和音程。

    不协和音程的音响比较刺耳,听起来紧张、不稳定,如大小二度、大小七度、增四度、减五度等音程。

    不协和音程虽然音响效果尖锐,但是它在音乐作品中也是构成乐曲的重要元素。

    五、基础乐理—-p4—-调式

    1、调式

    若干高低不同的乐音,围绕某一具有稳定感的中心音(主音),按照一定关系组织起来所构成的体系,称为调式。现在世界上应用最广泛的调式是大小调式。

    其中,巴赫的《十二平均律》更是大小调式的经典中的经典。

    2、主音

    在调式中,主音是处于核心地位的中心音,其稳定感最强,其他的音都倾向于它。在歌(乐)曲中,主音常出现在强拍、音较长或终止处。

    3、大调式

    大调式简称为“大调”,由七个音级构成。它的主音与Ⅲ级音之间为大三度音程关系,这个大三度也是大调式的特征所在。其中Ⅰ、Ⅲ、Ⅴ级音构成大三和弦,因此大调式的色彩是明亮、辉煌的。

    大调式共有三种类型:自然大调、和声大调和旋律大调。

    1、自然大调

    自然大调是大调中用得最多的一种,全部由自然音级构成。

    自然大调音阶由五个全音和两个半音组成,

    其音阶结构是:全音-全音-半音-全音-全音-全音-半音,即由大二度、大二度、小二度、大二度、大二度、大二度、小二度音程组成。

    C和D之间隔了一个音(黑键),所以CD叫全音。

    E和F之间没有间隔,所以叫半音。

    为了便于熟记,自然大调编成口诀为:全、全、半、全、全、全、半。

    即我们平时说的:de re mi fa sol la si

    C自然大调如下图所示:

    image

    2、和声大调

    在自然大调音阶的基础上,将第Ⅵ级音降低半音,即为和声大调。

    其特征是降Ⅵ级音与Ⅶ级音之间所形成的增二度音程。

    这个增二度即为判断和声大调的标志,也是和声大调的特征所在。

    C和声大调音阶如下图所示:

    image

    3、旋律大调

    在自然大调音阶的基础上,将第Ⅵ级音降低半音,即为旋律大调。

    其特征是降Ⅵ级音与Ⅶ级音之间所形成的增二度音程。

    这个增二度即为判断和声大调的标志,也是和声大调的特征所在。

    C旋律大调音阶如下图所示:

    image

    4、小调式

    小调式简称为“小调”,也是由七个音级构成。

    它的主音与Ⅲ级音之间为小三度音程关系,这个小三度也是小调式的特征所在。其中Ⅰ、Ⅲ、Ⅴ级音构成小三和弦,因此小调式的色彩是柔和、暗淡的。

    小调也有三种类型:自然小调、和声小调和旋律小调。

    1、自然小调

    自然小调音阶也由五个全音和两个半音组成,其音阶结构是全音-半音-全音-全音-半音-全音-全音,即由大二度、小二度、大二度、大二度、小二度、大二度、大二度音程组成。

    a自然小调如下图所示:

    为了便于熟记,编成口诀为:全、半、全、全、半、全、全。

    2、和声小调

    在自然小调音阶的基础上,将第Ⅶ级音升高半音,即为和声小调。

    其特征是Ⅵ级音与升Ⅶ级音之间所形成的增二度音程,并且Ⅶ级音在升高半音之后具有了导音倾向于主音的功能,和自然小调相比紧张度更大。

    a和声小调如下图所示:

    3、旋律小调

    在自然小调音阶的基础上,将自然小调上行音阶中的第Ⅵ级和第Ⅶ级升高半音,下行音阶中再将这两个音还原,即为旋律小调。

    a旋律小调如下图所示:

    六、基础乐理—-p5—-调号

    1、调号

    调号作为表示一首歌(乐)曲的调高(即主音高度)的符号,位于每行谱表起首处(谱号之后)或乐曲进行中出现新调的地方。

    调号是用升、降记号来记写的。

    python编曲部分:

    一、认识MIDO库

    1、导入mido

    from mido import Message,MidiFile,MidiTrack

    2、mido基本框架

    创建两个mido库的对象:MidiFile() , MidiTrack()

    前者用于编辑、生成、输出Midi文件,后者用于midi文件轨道编辑。

    mid = MidiFile()
    track = MidiTrack()
    mid.tracks.append(track)

    在轨道对象中添加信息,’program_change’意为切换轨道。

    直观理解就是:编辑某条轨道前需要先把轨道选好。(此为官方固定套路,看不懂也无所谓,照着写即可)

    track.append(Message('program_change', program=0, time=0))

    3、编写音符

    选好轨道之后,直接在轨道上添加音符即可。注意,此处的时间单位是毫秒。

    track.append(Message('note_on', note=60, velocity=64, time=0))

    添加完后再添加一条结束标记,此处才算真正完成一个音符的书写。

    track.append(Message('note_off', note=60, velocity=64, time=2000))

    添加完以后,就可以直接生成一个midi文件了

    mid.save('MyFirstDamnSong.mid')

    4、代码

    代码如下:

    二、结合乐理

    1、midi文件频率编号表格:

    由上表可知,中央C的midi编号是60 。

    2、编写工具库

    1、任务分析

    我们首先编写一个工具库Notes_Toolbox.py,定义一些常用的,根基的东西。

    定义好基础的东西:音程、音名、调式、和弦、节拍、基础音等等。

    然后编写一些简单的方法供调用,比如返回一组和弦、自动转调、通过五线谱得到MIDI频率编号等方法。

    2、定义变量

    编号变量名Is static?Default value作用
    1bpmNo125节拍
    2timePerBeatNo60 / bpm * 100每拍持续时间(毫秒)
    3base_notestatic60中央C对应MIDI编号
    4note_name[]static[ ‘C’,’D’,’E’,’F’,’G’,’A’,’B’]音名
    5major_notes[]static[0, 2, 2, 1, 2, 2, 2, 1]自然音阶
    6Cmajor_notes[]static
    7Eflatmajor_notes[]static
    8Cmajor{}static{‘C’: 60, ‘D’: 62, ‘E’: 64, ‘F’: 65, ‘G’: 67, ‘A’: 69, ‘B’: 71}C大调字典
    9Eflatmajor{}static{‘C’: 63, ‘D’: 65, ‘E’: 67, ‘F’: 68, ‘G’: 70, ‘A’: 72, ‘B’: 74}E小调字典

    3、定义函数

    编号方法名返回传入参数作用
    1get_noteMIDI编号note,group=0,**kw输入音名与音符区域,返回对应的MIDI编号。(需要改进,没有黑键)
    2get_chord和弦数组name,**kw输入和弦名称,返回和弦数组
    3originToEflatMajor新E小调MIDI编号数组list,**kw输入C大调,返回E小调。(需要改进,支持指定什么调到什么调)
    bpm = 125 #why 125:
        #bpm = 1 * 1000 / 8 
    timePerBeat = 60 / bpm * 1000
    base_note = 60 # C4
    note_name =[
        'C','D','E','F','G','A','B'
    ]
    major_notes = [0, 2, 2, 1, 2, 2, 2, 1]
    Cmajor_notes = []
    Eflatmajor_notes = []
    for num in range(12):
        Cmajor_notes.append(base_note+sum(major_notes[0:num+1]))
        Eflatmajor_notes.append(base_note+3+sum(major_notes[0:num+1]))
    #这里只有一个区
    Cmajor = dict(zip(note_name,Cmajor_notes))
    # Cmajor = {'C':60,'D':62,'E':64,'F':65,'G':67,'A':69,'B':71}
    Eflatmajor = dict(zip(note_name,Eflatmajor_notes))
    # Eflatmajor = {'C': 63, 'D': 65, 'E': 67, 'F': 68, 'G': 70, 'A': 72, 'B': 74}
    def get_note(note,group=0,**kw):#Group = 0 means 4Group
        global base_note,major_notes
        return base_note + group*12 + sum(major_notes[0,note])
    def originToEflatMajor(list,**kw):
        Ef=[]
        for x in list:
            Ef.append(x+3)
        return Ef
    #get_note(1,group=0) return 60
    #get_note(2,group=0) return 62
    def get_chord(name):
        chord = {
            "Major3":[0,4,7,12],#大三和弦
            "Minor3":[0,3,7,12],#小三和弦
            "Augmented3":[0,4,8,12],#增三和弦
            "Diminished3":[0,3,6,12],#减三和弦
            "M7":[0,4,7,11],#大七和弦
            "Mm7":[0,4,7,10],#属七和弦
            "m7":[0,3,7,10],#小七和弦
            "mM7":[],
            #...
        }
        return chord[name]
    #get_chord(“Major”) return [0,4,7,12]

    3、写一段分解和弦

    上面已经写完了工具类模块,接下来就可以专注于和弦的部分了。

    1、编写输出和弦函数

    输出分解和弦到midi文件

    使用此方法时,需要传入:

    编号参数名:传入:示例:
    1trackmido库的输出音频接口MidiTrack()
    2root音符的名称‘C’,’D’,’E’,’F’,’G’,’A’,’B’
    3name和弦的名称,在Notes_Toolbox中定义‘Major3’…
    4format输出分解和弦的方式[0,1,2] [1,3,2,3]…
    5length音符持续的时长4

    直接放上源代码:

    def add_broken_chord(root, name, format, length, track, tone_name='Cmajor', root_base=0, channel=0):
        #默认是c大调
        root_num = Notes_Toolbox.Cmajor
        if tone_name == 'Eflat':
            root_num = {'C': 63, 'D': 65, 'E': 67, 'F': 68, 'G': 70, 'A': 72, 'B': 74}
        root_note = root_num[root] + root_base*12  # 分解和弦的根音
        time = (length * 480) / len(format)  # 此处为官方文档写法,我也不懂,time指的是音符持续时长
        for broken_chord in format:  # 通过for循环,逐个输出和弦的音符
            note = root_note + Notes_Toolbox.get_chord(name)[broken_chord]
            track.append(Message('note_on', note=note,
                         velocity=60, time=0, channel=channel))
            track.append(Message('note_on', note=note, velocity=60,
                         time=round(time), channel=channel))

    2、调用参考:

    format = [0, 1, 2, 3]
    add_broken_chord('C', 'Major3', format, 4, track)
    add_broken_chord('C', 'Minor3', format, 4, track)
    add_broken_chord('C', 'Augmented3', format, 4, track)
    add_broken_chord('C', 'Diminished3', format, 4, track)
    add_broken_chord('C', 'Diminished3', format, 4, track)

    最后调用保存midi文件即可。



    三、规范化代码

    为了方便调用,我们对函数的参数顺序做出调整。

    另外,重载play_note方法,使其可以接收int类型的note(也就是直接输入MIDI编号)。

    同理,所有的有关note的输入都可以进行重载。

    def play_note(note,  track, length=1, tone_name='Cmajor', root_base=0, delay=0, velocity=1.0, channel=0):
        ...
    def play_note(note:int,  track, length=1, tone_name='Cmajor', root_base=0, delay=0, velocity=1.0, channel=0):
        ...
    def play_broken_chord(root, name, format, track,length=1, tone_name='Cmajor', delay=0, velocity=1.0,root_base=0, channel=0):
        ...

    四、总结、mido之旅未完待续…

    经过上述学习与实践,浅显地了解了音乐与数学的联系,与一些基础乐理知识。通过代码,实现了各种和弦的输出。

    结合乐理知识,接下来,将进行圈式和弦的书写。


    参考文献

    . 《音乐理论基础》,李重光编著,人民音乐出版社;

zh_CNCN