【python】【转调】用python程序实现简谱转调

python | 转调器——从构想到实现 终于把转调器做出来了,上个学期还觉得这是个遥不可及的事物,因为涉及到一些括号、字符空格的处理,便觉得非常头疼,但这次一点点把逻辑整出来,渐渐得可以实现了。 一、转调的逻辑实现 (一)困难罗列: 难题当然有很多啦,这里按照解决难度分成三类: 难度C: 难度等级 问题 C 1、转调括号的中英文差异;2、处理无效的#; B 1、如何将#1视为一个整体进行转调2、空格的有效、无效判断问... 阅读详情

一、任务

用python实现将指定旋律从某调转到某调的功能。

二、原理

将X调转到Y调,即将X升(X-Y)个半音
注:这里X-Y代表半音关系,对应下面的trans_map字典;
注:传入的音阶应可以表示大于一个八度的音域。这里采用的策略是,若音符前面有.(点)则表示第一个八度,若在音符后面有.则表示高一个八度。

三、代码

#trans_map:定义音名间的半音关系,每个半音之间的差为1
trans_map = {'C':0,'bD':1,'D':2,'bE':3,'E':4,'F':5,'bG':6,'G':7,'bA':8,'A':9,'bB':10,'B':11}
#C_scale:C大调半音阶
C_scale = ['1','#1','2','#2','3','4','#4','5','#5','6','#6','7']

#函数说明:需传入旋律,原调性,目标调性
def trans_tonality(Tune,Tune_Tonality,Aim_Tonality):
    tune = []                                                   #转调后的旋律
    minus = trans_map[Tune_Tonality]-trans_map[Aim_Tonality]        #半音关系
    at = C_scale[minus:]+C_scale[:minus]      #利用半音关系推出转调后的参考音阶
    for t in list(Tune.split(',')):                         #按照逗号分割音符
        position = [i.start() for i in re.finditer('\.', t)] #找到所有.的位置

        if position == []:                #如果音符旁没有.
            low_num = 0
            high_num = 0
        elif position[0]==0:              #如果音符前有.
            low_num = len(position)
            high_num = 0
        else:                             #如果音符后有.
            high_num = len(position)
            low_num = 0
        if minus>0:
            high_num += 1
            low_num -= 1
        t = t.translate(str.maketrans('','','.')) #.的信息已经统计好了,把它们删掉

        if len(t)==1:                     #没有升降号
            ori = int(t)
            if int(t)<4:                  #do re mi
                new_tune = at[int(t)*2-2]
            elif int(t)<8:                #fa sol la ti
                new_tune = at[int(t)*2-3]
            else:
                new_tune = 'Error'
        elif len(t)==2:                   #有升降号
            ori = int(t[1])               #记录原音名
            if 'b' in t:                  #如果是降号b,变成升号#,之后再统一处理;如b6变成#5
                t = '#'+str(int(t[1])-1)
            if int(t[1])<3:               # #do #re
                print(t[1])
                new_tune = str(at[int(t[1])*2-1])
            elif int(t[1])<7:             # #fa #sol #la
                new_tune = str(at[int(t[1])*2-2])
            else:
                new_tune = 'Error'
        else:
            new_tune = 'Error'

        try:                              #根据原来记录的.的信息恢复音高信息,即加上.
            if int(new_tune[-1]) > ori:
                if high_num > 0:
                    high_num -= 1
                else:
                    low_num += 1
            for i in range(low_num):
                new_tune = '.' + new_tune
            for i in range(high_num):
                new_tune = new_tune + '.'
            tune.append(new_tune)
        except:
            tune.append('Error')

    print(tune)

#函数说明:trans_tonality(Tune,Tune_Tonality,Aim_Tonality)旋律,原调性,目标调性
trans_tonality('1,1,5,5,6,6,5,4,4,3,3,2,2,1','C','D')
trans_tonality('1,1,5,5,6,6,5,4,4,3,3,2,2,1','D','C')
#返回值:
#['.#6', '.#6', '4', '4', '5', '5', '4', '#2', '#2', '2', '2', '1', '1', '.#6']
#['2', '2', '6', '6', '7', '7', '6', '5', '5', '#4', '#4', '3', '3', '2']

MIDI转简谱全攻略:调性判断、时值量化与MuseScore/Python实操 在数字音频处理中,MIDI以绝对音高记录每一个音符,而简谱则基于首调思维表达音级关系,两者之间的转换本质上是音乐表达逻辑的翻译。实现这一翻译的核心,在于准确判断调性并对MIDI时值进行合理的量化处理。调性分析决定了简谱中“1”的位置,量化则影响节奏记谱的清晰度,这两步直接决定转换结果的可用性。这项技术的价值体现在音乐教学、器乐入门、扒谱改编等日常场景中,帮助用户将复杂工程文件转化为易于阅读和传播的简谱格式。借助MuseScore等打谱软件,或通过Python脚本进行自动化处理,可以大幅提升转换效率。本文即从 阅读详情

相关推荐

使用Python标准库中的wave模块绘制乐谱的简单教程

主要介绍了使用Python标准库中的wave模块绘制乐谱,涉及到了numpy模块和坐标的可视化运用,用到了需要的朋友可以参考下

【脑洞手填目标一】通过学习python实现简谱自动转音频的功能

如何乐谱转音频

weixin_42106583的博客 2255

CSIT883系统分析与项目管理——Lecture3重点概念

🎈本节课,介绍了项目集成管理当中,关于NPV这个概念相关的内容,以及介绍什么是系统需求,什么时候需要开始系统需求,如何进行调查系统需求等等相关的题目,这里供大家复习参考吧!还有还有最关键的是NPV的计算,我单独写一篇博文,需要的同学快去学习吧!

AI手套的博客 1090

这平安夜,我们来用python演奏一首铃儿响叮当吧

《铃儿响叮当》是一首脍炙人口的经典圣诞歌曲,今晚平安夜我来用python奏起来—— 用最原始的winsound库函数Beep()来演奏,用法如下: >>> import winsound >>> help(winsound.Beep) Help on built-in function Beep in module winsound: Beep(frequency, duration) A wrapper around the Windows Beep A

汉阳Hann's Home 4820

【LCMM实战指南】从增长混合模型到潜在类别轨迹分析的纵向数据建模

本文深入解析了LCMM(潜在类别混合模型)在纵向数据建模中的应用,对比了LCGA与GMM的核心差异与选择策略。通过R语言lcmm包的实战演练,详细展示了从数据模拟、模型拟合、类别数选择到结果解读的全流程,为识别数据中不同的发展轨迹亚型提供了系统指南。

weixin_29070861的博客 379

手把手教你用Python+Playwright实现抖音/B站/视频号三平台自动上传(附完整配置流程)

本文详细介绍了如何使用Python和Playwright构建一个多平台视频自动化上传系统,涵盖抖音、B站和视频号三大平台。文章从环境搭建、身份验证持久化、平台特异性上传引擎设计到任务调度与错误处理,提供了完整的配置流程和实战代码,帮助开发者实现高效、稳定的批量上传功能。

weixin_29294975的博客 1144

python爬虫批量下载“简谱”

python讨论qq群:996113038导语:上次发过一篇关于“python打造电子琴”的文章,从阅读量来看,我们公众号的粉丝里面还是有很多对音乐感兴趣的朋友的。于是,今天我们也发一...

qq_42680814的博客 1357

PyTorch实战:3D U-Net医学图像分割从零搭建(附完整代码)

本文详细介绍了如何使用PyTorch从零搭建3D U-Net模型进行医学图像分割,涵盖三维卷积实现、模块化架构设计、医学图像专属优化策略及完整训练流程。通过实战代码演示,帮助开发者掌握UNet-3D在CT、MRI等三维医学图像分割中的应用,提升肝脏肿瘤分割、肺结节检测等任务的准确性。

weixin_29061997的博客 328

C语言,实现数字谱到简谱的转换

将数字谱转变成简谱

rvdgdsva的博客 1512

基于Zynq的便携式γ能谱仪设计与实现

数字多道分析器(DMCA)是核辐射能谱测量的核心设备,其本质是将探测器输出的模拟脉冲按幅度数字化分道,构建能量-计数分布曲线,从而支撑放射性核素识别与定量分析。其技术原理依赖高速采样、数字滤波成形、基线恢复与峰值提取等关键信号处理环节,具备高分辨率、优线性度与强抗干扰能力。在环境监测、核安全巡检与野外地质勘探等场景中,对低功耗、小型化、实时性提出严苛要求。本方案采用Xilinx Zynq-7020异构SoC架构,融合FPGA实时数字信号处理与ARM嵌入式控制,实现软硬协同优化,兼顾算法精度与工程落地性,为国

weixin_33173126的博客 189

MCSDK5.4.8电机库双电阻采样适配:从扇区判断到固定采样的重构实践

本文详细解析了MCSDK5.4.8电机库中双电阻采样技术的重构实践,从扇区判断到固定采样的关键步骤。通过硬件配置优化、核心文件重构及电流读取函数改造,实现高效稳定的电机控制,特别适用于成本敏感型项目。文章还提供了占空比限制计算、参数调整及常见问题排查等实用技巧,助力工程师快速掌握两电阻采样方法。

weixin_42532938的博客 279

LilyPond 中如何输出简谱

Lilypond 输出简谱

qq_36822973的博客 1673

UE5新手必看:如何用蓝图系统快速打造赛车游戏(含Chaos Physics配置)

本文为UE5新手提供使用蓝图系统快速打造赛车游戏的完整指南,涵盖Chaos Physics配置、载具蓝图架构设计、控制逻辑实现等关键步骤。通过详细的实战案例和优化技巧,帮助开发者高效构建具备专业物理反馈的赛车游戏原型。

weixin_29001327的博客 387

数字简谱转调工具V1

都不一样,我这里[ ]表示括号内高音,( )括号内低音,{ }合奏,所以该程序没有识别括号的功能,通过升高或者降低音调,比如7--> i,应该改为7->[1],但是没有改则输出这个7->1,需要手动改,同理降调"借位"一样。在input.txt文件写目标谱,利用音程变化规律满足一个数字列,通过移动数列实现转谱很简单。注意我没有做过滤处理,请确保您的输入完全是GBK字符。该程序没有涉及小调转谱,因为暂时没有用上。附代码(python)

weixin_48122802的博客 1013

YOLOv8 | 损失函数改进,最新提出的Shape-IoU,有效涨点

作为检测器定位分支的重要组成,边框回归损失在目标检测任务中发挥巨大作用。现有的边框回归方法,通常考虑了GT框与预测框之间的几何关系,通过使用边框间的相对位置与相对形状等计算损失,而忽略了边框其自身的形状与尺度等固有属性对边框回归的影响。为了弥补现有研究的不足,本文提出聚焦边框自身形状与尺度的边框回归方法。首先我们对边框回归特性进行分析,得出边框自身形状因素与尺度因素会对回归结果产生影响。

kay_545 1913

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

简单音频直接转为简谱

摘要:本文介绍了一个基于Python的简易音频转简谱工具,使用Librosa库提取主旋律音符并转换为简谱表示。程序主要包含音频预处理、音高检测、音符转换和简谱生成四个模块,通过优化采样率、滤波器设置和音高检测算法提高处理效率。测试显示该工具能准确识别纯净曲调并输出对应简谱(如"3-2-3-6-"等)。程序还输出了详细的音符信息(MIDI值、八度、时长)用于调试。

id_09的博客 1567

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

python自动生成简谱(二)

整理不易,诚望各位看官点赞 收藏 评论 予以支持,这将成为我持续更新的动力源泉。若您在阅览时存有异议或建议,敬请留言指正批评,让我们携手共同学习,共同进取,吾辈自当相互勉励!

qq_42217078的博客 669

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Python语言简谱生成mid音乐程序代码ZXQZQ

【代码】Python语言简谱生成mid音乐程序代码ZXQZQ。

qq_32257509的博客 976

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

咳咳,大家好!还是我,(不能踢的猫X) 本尼桑√~ 今天我们将要讲日系流行里的一个不错的转调公式,即下全音转调~这一次的教程会分为两部分:(1)跟之前一样的乐理讲解(2)用python scripting 实现的代码讲解那么,我们开始吧~第一部分:乐理性讲解三重下全音转调:(Fmaj7 --> Cmaj9/E )--> (Ebmaj7 --> Bbmaj9/D )-->( ...

weixin_33819646的博客 1186

python自动生成简谱(一)

突发奇想想写一个python生成简谱的小程序窗口界面,历时近一个月,做了2个版本,一直在调整代码,还是有些问题,先把第一版本的发出来,第二部会好些,后面微调一下再发,优化一下,我后面的第二版本还是有些瑕疵,我希望可以和大家一起沟通学习! 整理不易,诚望各位看官点赞 收藏 评论 予以支持,这将成为我持续更新的动力源泉。若您在阅览时存有异议或建议,敬请留言指正批评,让我们携手共同学习,共同进取,吾辈自当相互勉励!

qq_42217078的博客 929

简谱排版工具 `jianpu-ly` 使用教程

简谱排版工具 jianpu-ly 使用教程 一、项目目录结构及介绍 开源项目 jianpu-ly 驻扎在 GitHub,其基本的目录结构如下: jianpu-ly/ ├── gitattributes # 版本控制相关的属性文件 ├── gitignore # Git忽略文件列表 ├── README.md # 主要的项目说明文...

gitblog_00178的博客 718

【亲测免费】 Jianpu-ly: 简谱到Lilypond的转换工具

Jianpu-ly: 简谱到Lilypond的转换工具 项目介绍 Jianpu-ly 是一个Python程序,兼容Python 2和Python 3,用于在GNU Lilypond音乐排版软件中方便地打印简谱(数字乐谱)。该工具通过修改后的“五线谱”外观来呈现简谱,允许充分利用Lilypond强大的排版特性,如歌词间距、连音符、符点等,而无需传统五线谱。适用于具备一定技术知识的用户,包括命令行操作...

gitblog_00136的博客 1353

Python语言示例简谱生成mid程序代码

5.”: 55, # 低八度的sol。“1.”: 48, # 低八度的do。“2.”: 50, # 低八度的re。“3.”: 52, # 低八度的mi。“4.”: 53, # 低八度的fa。“6.”: 57, # 低八度的la。“5’”: 79, # 高八度的sol。“1’”: 72, # 高八度的do。“2’”: 74, # 高八度的re。“3’”: 76, # 高八度的mi。“4’”: 77, # 高八度的fa。“6’”: 81, # 高八度的la。“7’”: 83, # 高八度的si。

qq_32257509的博客 673

转调小程序(练口琴时用的)

今天联系千与千寻的主题曲 always with me 时想找C调的谱子找不到,就将转调规则写成代码方便把网上其他调的谱子转调后拿来用 代码如下: import time def Diaozi(): print("1. F调------>C调") print("2. D调------>C调") print("3. E调------>C调") print("4. G调------>C调") print("5. A调------>C调")

weixin_44275448的博客 845

应用示例简谱生成mid音乐程序代码

5.”: 55, # 低八度的sol。“1.”: 48, # 低八度的do。“2.”: 50, # 低八度的re。“3.”: 52, # 低八度的mi。“4.”: 53, # 低八度的fa。“6.”: 57, # 低八度的la。“5’”: 79, # 高八度的sol。“1’”: 72, # 高八度的do。“2’”: 74, # 高八度的re。“3’”: 76, # 高八度的mi。“4’”: 77, # 高八度的fa。“6’”: 81, # 高八度的la。“7’”: 83, # 高八度的si。

qq_32257509的博客 950
上一篇: 【python】【爬虫】无反爬图片爬取
下一篇: 【python】【爬虫】爬取电子书《红星照耀中国》
why_not_study
博客等级 码龄7年 34粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值