不务正业系列1:python简易乐理

2024-02-08 23:50

本文主要是介绍不务正业系列1:python简易乐理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 基本概念

  • 12平均律:把一个8度的音平均分成12份,7个白键和5个黑键。
  • 纯8度震动频率是1:2,纯5度的震动频率1:1.5
  • 大小调:
    从根音开始
    自然大调:全全半全全全半
    自然小调:全半全全半全全
  • 属音:上纯五度称为上属音,下纯五度称为下属音。主音和属音能发生共振。
  • 和弦:
    三和弦:perfect 5+major3或minor3。一个取巧的方法:和弦之间都相隔2-3个音程,要求全都落在上面的大调或者小调上。
    七和弦:别被名字骗了,就是三和弦再往上加一个和弦,实际上只有4个音。
    转位:8度调换

2. 和弦进行

C大调的和弦种类:
在这里插入图片描述
下面是简单的一个和弦进行:G7->C是属7->主,叫做正格终止。
在这里插入图片描述
加入Dm和弦
在这里插入图片描述
加入F7,蓝调终止。
在这里插入图片描述
加入Am,更加丰富
在这里插入图片描述
在这里插入图片描述

常见几个和弦进行:6415=SFCG=是否成功;4536251是很常见的和弦进行。
下面是cubase的图示
在这里插入图片描述

3. musicpy

3.1 音符

a = note('C', 5, 0.5, 100) #表示a为音符C5,音符长度为0.5个小节,音符力度为100
a = N('C5(1;80)') # 简洁写法
N('D5(.4)') # 表示4分音符
a.set(duration, volume) # 返回的是一个全新的和弦类型
b%(duration,volume) # 简洁写法
degree_to_note(60) # 音符和mid转换
a.degree
a+n, a-n # 升音,降音
~a # 取消#和b
A3 = N('A3')
print(A3('sus')) #音符类型可以当作函数或者生成器传入和弦名称获得和弦类型

3.2 和弦

和弦是多个音符的合集,例如A = a + b + c + d
有两种构建方法:chord('C, E, G, B'),以及chord(['C', 'E', 'G', 'B', 'D'])
chord('G5[3/4;.], F5[.8;.], E5[.8;.]')表示音符长度和音符间隔
r[.2]表示休止符
当音符间隔简写为.的时候,表示音符间隔取和音符长度一样的值。

A.set([0.5, 0.5, 1, 1], [1, 1, 2, 2]) # 设置音符间隔和音符长度
A % (1.5, 1) # 简洁写法
chd('A', 'm7') # 使用根音和和弦类型获得和弦
chd('C', interval=[major_third, perfect_fifth, major_seventh]) # C大七和弦
chd('A', 'm7').inversion(1)  # 和弦转位
chd('A', 'm7') / 1 # 转位简洁写法
chd('A', 'm7') / 'E'
a+b # 和弦拼接
A%n # 重复和弦
~A # 和弦倒序
chd('C','maj').intervalof() # 获得和弦的音程关系
A+3 # 和弦升音
A.sort([2, 3, 1, 4]) # 和弦排序
A / [2, 3, 1, 4] # 和弦排序简洁写法
p.modulation(scale('A', 'major'), scale('A', 'minor')) # 转调
A.on('C5') # 和弦加根音
A % 'C5'
A.rest(n) # 和弦休止符
A // n,A | nA('#9') # 升九和弦
B('no3') # 省略三度音
A / -2, A ^ -2 # 将第二个音转位到最高音
A @ 2,A @ 'E' # 转位到最低音
A.get([1, 3, 2, 3, 1.1, 3, 2, 3]) # 阿尔贝蒂低音的左手琶音伴奏型。1.1这种小数表示的是第几个音(小数点前的数字)升高几个八度(小数点后的数字)。
A @ [1, 3, 2, 3, 1.1, 3, 2, 3] # 简洁写法

和弦处理函数:
首先是lambda模式

rules = lambda x: C(x) @ [1, 2, 3, 1.1, 2.1, 3, 1.1, 2.1] % (1/8, 1/8) * 2
A = rules('Cmajor') | rules('C7sus4') | rules('G7/B') - octave | rules('Cmajor')
# 把这个和弦按照第1个音,第2个音,第三个音,第1个音高1个八度,第二个音高1个八度, 第三个音,第1个音高1个八度,第二个音高1个八度的顺序组成一个新的和弦类型(一段和弦伴奏),然后把这段和弦伴奏的每个音符的长度都设置为0.5个小节,每个音符的间隔也都设置为0.5个小节,然后把这段和弦伴奏重复两遍。

其次是管道模式

rules = exp('up(2).reverse()', mode='tail')
#把一个和弦类型整体升高两个半音,然后把音倒序排列。

音阶。scale类(音阶类)可以快速按照音的间隔来构建调式,比如大调的音的排列是全全半全全全半,比如
scale('C5', 'major')就可以得到以C5为根音的C大调音阶,

3.3 组合

A.add(B, mode='head', start=8) # 不同声部合并
A& (B,start) # 简洁写法
A.add(B, mode='after') # 继续播放
A // B, A | B # 简洁写法
cut(ind1=0, ind2=None, start_time=0) # 按照小节进行切片

组成乐曲:
使用piece或者build方法:

A1 = C('Cmaj7') % (1, 1/8)
B1 = chord('A2') % (1,)
C1 = chord('C,D,E,F,G') % (1/8, 1/8)
D1 = chord('C5')new_piece = piece([A1, B1, C1, D1],['Acoustic Grand Piano', 'Electric Bass (finger)', 'Orchestral Harp', 'Synth Drum'],150,[0, 2, 2, 4],['piano', 'bass', 'harp', 'drum'])new_piece = build([A1, 'Acoustic Grand Piano', 0, 1, 'piano'],[B1, 'Electric Bass (finger)', 2, 2, 'bass'],[C1, 'Orchestral Harp', 2, 3, 'harp'],[D1, 'Synth Drum', 4, 4, 'drum'],bpm=150)

这篇关于不务正业系列1:python简易乐理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/692569

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Python Websockets库的使用指南

《PythonWebsockets库的使用指南》pythonwebsockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步... 目录一、WebSocket 简介二、python 的 websockets 库安装三、完整代码示例1.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专