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

如何用PYTHON代码写出音乐 如何用PYTHON代码写出音乐 什么是MIDI 博主本人虽然五音不全,而且唱歌还很难听,但是还是非常喜欢听歌的。我一直在做这样的尝试,就是通过人工智能算法实现机器自动的作词和编曲(在这里预告下,通过深度学习写歌词已经实现了,之后会分享给大家),本文我们主要聊下如何写曲。 说到用代码写曲子,有一个东西大家一定要了解就是MID... 阅读详情

《铃儿响叮当》是一首脍炙人口的经典圣诞歌曲,今晚平安夜我来用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 API.
    
    frequency
      Frequency of the sound in hertz.
      Must be in the range 37 through 32,767.
    duration
      How long the sound should play, in milliseconds.

先找来do,re,mi等音符的频率表:

'''休止符及do re mi等对应的频率数'''
Tone = [[0,0,0,0,0,0],
    [523,262,1046,554,277,1109],
    [578,294,1175,622,311,1245],
    [659,330,1318,659,330,1318],
    [698,349,1493,740,370,1556],
    [784,392,1568,831,415,1661],
    [880,440,1760,932,466,1865],
    [988,494,1976,988,494,1976]]

然后找一分最简版的《铃儿响叮当》简谱:

 

照此编制乐谱,自定义一个规则,每个音符为一个元组:(音符,音长,音阶)
简谱的每个音符用一个三元素元组表示,其中:
第一个元素 1~7 对应do re mi fa so la si 0=休止符
第二个元素 1拍=1;半拍=0.5 四分之一拍=0.25 以此类推 
第三个元素一般就为0,低音=1 高音=2 对应的半阶音=3 4 5

这样定义方便乐谱的编制,代码如下:

from winsound import Beep

'''休止符及do re mi等对应的频率数'''
Tone = [[0,0,0,0,0,0],
	[523,262,1046,554,277,1109],
	[578,294,1175,622,311,1245],
	[659,330,1318,659,330,1318],
	[698,349,1493,740,370,1556],
	[784,392,1568,831,415,1661],
	[880,440,1760,932,466,1865],
	[988,494,1976,988,494,1976]]

'''乐谱编制'''
t1 = '33333335123'
t2 = '444333322125'
t3 = t1
t4 = '4444433355421'
'''对应的音长'''
p1 = [1,1,2,1,1,2,1,1,1.5,0.5,4]
p2 = [1,1,2,1,1,2,1,1,1,1,2,2]
p3 = p1
p4 = [1,1,1.5,0.5,1,1,1,1,1,1,1,1,4]

t = list(map(int,t1+t2+t1+t4))
p = p1+p2+p1+p4

Tune = list(zip(t,p,[0]*len(t))) #配曲音符都为中音,音阶值全为0

'''演奏乐谱'''
Pai = 360  #一拍的毫秒数,可以调节
for t in Tune:
    Beep(Tone[t[0]][t[2]],int(t[1]*Pai))

按下运行键,动听的演奏开始了:

“叮叮当,叮叮当, 铃儿响叮当.

我们滑雪多快乐,我们坐在雪橇上...”

祝大家平安夜快乐,全家平安幸福!


为方便初学者理解怎样把简谱转换成Tune列表,另附一首《两只老虎》:

from winsound import Beep

'''休止符及do re mi等对应的频率数'''
Tone = [[0,0,0,0,0,0],
	[523,262,1046,554,277,1109],
	[578,294,1175,622,311,1245],
	[659,330,1318,659,330,1318],
	[698,349,1493,740,370,1556],
	[784,392,1568,831,415,1661],
	[880,440,1760,932,466,1865],
	[988,494,1976,988,494,1976]]

'''按照简谱编制乐谱'''
t = [None]*4
t[0] = [(1,1,0),(2,1,0),(3,1,0),(1,1,0)] #两只老虎
t[1] = [(3,1,0),(4,1,0),(5,2,0)] #跑得快
t[2] = [(5,0.75,0),(6,0.25,0),(5,0.75,0),
      (4,0.25,0),(3,1,0),(1,1,0)] #一只没眼睛|尾巴
t[3]= [(1,1,0),(5,1,1),(1,2,0)] #真奇怪

'''导入乐谱'''
Tune = []
for i in range(4):
    Tune.extend(t[i]*2)

'''演奏乐谱'''
Pai = 360  #一拍的毫秒数,可以调节
for t in Tune*2:
    Beep(Tone[t[0]][t[2]],int(t[1]*Pai))

python分析乐谱和音乐的包music21 music21 计算机分析音乐的包: Music21 is a Python-based toolkit for computer-aided musicology 完整示例代码 # -*- coding:utf-8 -*- # /usr/bin/python ''' ------------------------------------------------- File Name ... 阅读详情

相关推荐

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

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

python用winsound模块播放音乐

winsound是Windows的音频工具接口,可以实现简单的音频播放功能。 其中最简单的是播放正弦波,Beep,其输入为正弦波频率以及持续时间,例如 import winsound as ws ws.Beep(440,1000) 此即播放1秒440Hz的正弦波。 MessageBeep则可以调用注册表中指定的音频,这与Windows的设置有关,其输入值为 winsound. 十进制值 -1 MB_ICONASTERISK 64 MB_ICONEXCLAMATION 48 M

微小冷的学习笔记 1万+

联想Y9000P安装Ubuntu20.04记录

联想Y9000P 2022安装Ubuntu20.04问题记录

Legendyyy的博客 7115

用Python演奏《太阳照常升起》

用Python演奏《让太阳照常升起》一、准备工作1.1 找谱子,看谱子1.2 确定频率二、创建载有一个音符的正弦信号2.1 创建正弦信号并采样2.2 包络2.2.1 一次函数,木质八音琴?2.2.2 指数函数,木鱼?八音琴?2.2.3 梯形函数2.2.4 音符添加包络三、最终代码3.1 my_note类,创建音频3.2 演奏音频,让“太阳照常升起” 基本思路: 将含有乐音的正弦信号保存在".wav"文件中,然后将其播放出来。 参考内容: Python中的音频和数字信号处理(DSP) 一、准备工作 1.1 找

header_files 1550

KEIL-MDK代码美化神器:AStyle配置全攻略(附常用参数详解)

本文详细介绍了如何在KEIL-MDK中配置和使用AStyle代码格式化工具,包括基础参数设置、高级格式控制、团队协作方案以及KEIL深度集成技巧。通过合理的AStyle配置,开发者可以显著提升代码风格一致性,优化团队协作效率,特别适合嵌入式开发项目。

weixin_30505225的博客 146

HA集群 执行 hdfs haadmin -transitionToActive 失败

最近把一个单NameNode集群变更为HA集群,过程中都很顺利,nn1和nn2两个NameNode都显示standby状态,但是把nn1或者nn2切换到active状态时就会报错抛异常。 查看master上namenode启动日志,如下: Incompatible clusterID for journal Storage Directory /home/hadoop-zero/bigdat...

qq_34727158的博客 1763

Python根据乐谱生成音乐

PySynth P 使用与 PySynth C 和 D 类似的减法合成,但基于具有指数体积包络的白噪声。由于这种合成的性质,特别是较高频率的音符可能会与 PySynth S 稍微不协调,这与谐波精确的其他变体相反。PySynth D 使用与 PySynth C 类似的减法合成,但它基于方波。该模块基于 PySynth B,基于相位调制创建简单的电子钢琴声音,这是进行 FM 合成的常用方法,例如在 1980 年代 Yamaha 合成器上。一个加法合成器模块,它试图用更多的谐波创建更像钢琴的声音。

html_finder的博客 2848

Ragflow技术栈分析及二次开发指南

Ragflow是目前团队化部署大模型+RAG的优质方案,不过其仍不适合直接部署使用,本文将从实际使用的角度,对其进行二次开发

兴趣使然的创作者 1万+

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

如何乐谱转音频

weixin_42106583的博客 2255

qt使用qxlsx实现xlsx、xls表格文件快速写入和读取

新年第二篇文章,收尾一个去年计划中发表文章和实现功能。

kbq的博客 1万+

YOLOv8损失函数升级:从CIoU到Wise-IoU v3的实战调优与避坑指南

本文详细介绍了如何将YOLOv8的损失函数从CIoU升级到Wise-IoU v3,以提升目标检测性能,特别是在小目标检测和样本不均衡场景下的表现。通过实战调优步骤和避坑指南,帮助开发者有效应用Wise-IoU v3的动态聚焦机制和单调性控制,显著提升模型精度和训练稳定性。

weixin_33737774的博客 590

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

一、任务 用python实现将指定旋律从某调转到某调的功能。 二、原理 将X调转到Y调,即将X升(X-Y)个半音 注:这里X-Y代表半音关系,对应下面的trans_map字典; 注:传入的音阶应可以表示大于一个八度的音域。这里采用的策略是,若音符前面有.(点)则表示第一个八度,若在音符后面有.则表示高一个八度。 三、代码 #trans_map:定义音名间的半音关系,每个半音之间的差为1 trans...

why_not_study的博客 2347

S7-1200中时钟功能设定和读写调用的具体方法

S7-1200中时钟功能设定和读写调用的具体方法

Robot_PLC_HMI_Automation 1万+

python实现一个乐谱播放器

利用winsound来实现乐谱的播放

weixin_51558380的博客 651

什么是 SAPGUI 里的 Logon Group/Server

这意味着,不同的用户连接可以被分配到不同的应用服务器,以实现均衡的资源利用和降低某一服务器的负载压力。在这种配置下,欧洲的用户登录时选择“EUROPE_GROUP”,系统将自动选择一个位于欧洲的数据中心的服务器进行连接,这样不仅减少了网络延迟,还实现了服务器间的负载均衡。用户在 SAPGUI 中登录时,只需选择相应的 Logon Group(例如“FIN_GROUP”),系统就会自动将他们的连接请求分配到当前负载最小的应用服务器上,这种动态分配大大提升了系统的响应速度和稳定性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1069

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

在python中可以使用_123_使用Python标准库中的wave模块绘制乐谱的简单教程

在本文中,我们将探讨一种简洁的方式,以此来可视化你的MP3音乐收藏。此方法最终的结果将是一个映射你所有歌曲的正六边形网格地图,其中相似的音轨将处于相邻的位置。不同区域的颜色对应不同的音乐流派(例如:古典、嘻哈、重摇滚)。举个例子来说,下面是我所收藏音乐中三张专辑的映射图:Paganini的《Violin Caprices》、Eminem的《The Eminem Show》和Coldplay的《X&...

weixin_39980129的博客 487

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

python平安夜代码加文案

导语: 天黑请闭眼,天亮了,女巫使用了药水,今晚是平安夜????。 •┈ ┈ ┈• ྀི♡ ┈ ┈ ┈•ྀི♡ ┈ ┈ ┈• ྀི♡ >> ♥️♥️♥️????Merry Christmas Eve???? 平安夜不重要,平安才重要,愿2020年山河无恙,人间皆安,愿你永远平安,得偿所愿,万事胜意???? ????钟声响,祥瑞添,平安夜,道平安,要记得吃苹果哦! 今晚的平安夜,明天的圣诞节,7天后的跨年,8天后的元旦,50天后的春节????,我希望你都能开开心心。???? 正

a55656aq的博客 6285

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

小程序-平安夜(圣诞,告白,过节)程序员祝福代码

许愿墙源码

Fly_Fly_Zhang的博客 1万+

Python使用PyGame模块播放midi音符(一)

pygame.midi模块提供了播放midi音符的函数,加以扩充、增强便可以轻松播放出不同音色、力度、时长的midi音符。程序猿也能成为音乐家!

u010287125的博客 3010

python爬虫批量下载“简谱”

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

qq_42680814的博客 1357

牛逼了!菜鸟也能用Python演奏一段钢琴曲

小编一直有着一个钢琴弹奏的梦想,但是苦于没有这样的基础,所以很难在实际生活中弹奏出一曲美妙的钢琴曲,不过,为了实现自己的钢琴梦,我决定用python来帮我实现。今天,小编就带领大家利用p...

cainiao_python的博客 7819

独家 | 你想用深度学习谱写自己的音乐吗?这篇指南来帮助你!(附代码)

作者:ARAVIND PAI翻译:吴金笛校对:和中华本文长度为6800字,建议阅读15分钟本文手把手带你使用python编写一个自动生成音乐的模型。总览学习如何开发一个自动生成音乐的...

数据派THU 1614

python 背景音乐程序代码_用Python演奏音乐

背景笔者什么乐器也不会,乐理知识也只有中小学音乐课学的一点点。不过借助Python,调用编曲家常用的MIDI程序库,也能弹奏出一些简单的音乐,以下是笔者的一些心得。准备安装mingus首先是安装Python库,我选择的是mingus,它的优点是教程写的很详细,而且和实际的乐理,像调性、节拍这些结合的较好,而不是像同类库通过发送“按下按键”、“释放按键”这些指令来播放声音,另一方面它可以在运行的时候...

weixin_39902598的博客 1580

Python实现的空灵鼓模拟器源代码,可定制曲谱,简单易学

Python实现的空灵鼓模拟器源代码,可定制乐谱,简单易学,单靠鼠标就可以演奏一着曲子完整代码下载地址:Python实现的空灵鼓模拟器源代码 核心代码 完整代码下载地址:Python实现的空灵鼓模拟器源代码

Python代码大全 743

Python编曲实践(八):我,乔鲁诺·乔巴那,能用两百行代码写出JOJO黄金之风里我自己的出场曲!

使用升级之后的MidiFileExtended类,用整整二百行Python代码编写出《JOJO的奇妙冒险:黄金之风》的经典插曲《Giorno's Theme》

_ 3052
上一篇: Golang 012. 给定日期是该年的第几天
下一篇: 【基础入门题047】随机整数列表
Hann Yang
Hann Yang 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域 领域专家: 算法与数据结构技术领域 领域专家: 算法与数据结构技术领域
博客等级 码龄19年 4万+粉丝 1041原创
评论 24
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hann Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值