python快速实现简易电子音乐盒(电子钢琴)

2024-01-05 20:12

本文主要是介绍python快速实现简易电子音乐盒(电子钢琴),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先第一步附上完整源码(基于pygame库)

import pygame# 初始化pygame
pygame.init()# 设置窗口大小
window_size = (800, 600)
screen = pygame.display.set_mode(window_size)# 加载音频文件
C4 = pygame.mixer.Sound("test1/C4.wav")
D4 = pygame.mixer.Sound("test1/D4.wav")
E4 = pygame.mixer.Sound("test1/E4.wav")
F4 = pygame.mixer.Sound("test1/F4.wav")
G4 = pygame.mixer.Sound("test1/G4.wav")
A4 = pygame.mixer.Sound("test1/A4.wav")
B4 = pygame.mixer.Sound("test1/B4.wav")# 设置按键位置和大小
C4_rect = pygame.Rect(50, 50, 50, 200)
D4_rect = pygame.Rect(120, 50, 50, 200)
E4_rect = pygame.Rect(190, 50, 50, 200)
F4_rect = pygame.Rect(260, 50, 50, 200)
G4_rect = pygame.Rect(330, 50, 50, 200)
A4_rect = pygame.Rect(400, 50, 50, 200)
B4_rect = pygame.Rect(470, 50, 50, 200)# 绘制按键
pygame.draw.rect(screen, (255, 255, 255), C4_rect)
pygame.draw.rect(screen, (255, 255, 255), D4_rect)
pygame.draw.rect(screen, (255, 255, 255), E4_rect)
pygame.draw.rect(screen, (255, 255, 255), F4_rect)
pygame.draw.rect(screen, (255, 255, 255), G4_rect)
pygame.draw.rect(screen, (255, 255, 255), A4_rect)
pygame.draw.rect(screen, (255, 255, 255), B4_rect)# 设置按键文字
font = pygame.font.Font(None, 36)
C4_text = font.render("C4", True, (0, 0, 0))
D4_text = font.render("D4", True, (0, 0, 0))
E4_text = font.render("E4", True, (0, 0, 0))
F4_text = font.render("F4", True, (0, 0, 0))
G4_text = font.render("G4", True, (0, 0, 0))
A4_text = font.render("A4", True, (0, 0, 0))
B4_text = font.render("B4", True, (0, 0, 0))# 绘制按键文字
screen.blit(C4_text, (C4_rect.x + 10, C4_rect.y + 80))
screen.blit(D4_text, (D4_rect.x + 10, D4_rect.y + 80))
screen.blit(E4_text, (E4_rect.x + 10, E4_rect.y + 80))
screen.blit(F4_text, (F4_rect.x + 10, F4_rect.y + 80))
screen.blit(G4_text, (G4_rect.x + 10, G4_rect.y + 80))
screen.blit(A4_text, (A4_rect.x + 10, A4_rect.y + 80))
screen.blit(B4_text, (B4_rect.x + 10, B4_rect.y + 80))# 更新屏幕
pygame.display.flip()# 循环监听事件
while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()exit()elif event.type == pygame.MOUSEBUTTONDOWN:# 判断鼠标点击位置是否在按键内if C4_rect.collidepoint(event.pos):C4.play()elif D4_rect.collidepoint(event.pos):D4.play()elif E4_rect.collidepoint(event.pos):E4.play()elif F4_rect.collidepoint(event.pos):F4.play()elif G4_rect.collidepoint(event.pos):G4.play()elif A4_rect.collidepoint(event.pos):A4.play()elif B4_rect.collidepoint(event.pos):B4.play()

第二步直接展示运行效果

由于没有录视频,只能看一下运行截图,实际用鼠标点击琴键则会播放音乐/音效

当你点击每一个琴键时,就会产生音乐/音效。如果你把每个键都点一遍,则会7个对应的音频文件合起来产生混合音效(或者连续点击某一个琴键时也是如此)

 

可以根据需要修改自己的音频文件,以及相应的路径,wav格式可以直接把mp4格式的音频修改后缀名即可。

 

此版本为基础性雏形实现,后期如有需要可基于此进行扩展和优化,实现一个真正的完整的音乐盒或者电子琴 。音乐盒使用多个正常时长的音乐音频文件,电子琴使用多个特定的瞬时音效音频文件。

这篇关于python快速实现简易电子音乐盒(电子钢琴)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Python中的输入输出与注释教程

《Python中的输入输出与注释教程》:本文主要介绍Python中的输入输出与注释教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、print 输出功能1. 基础用法2. 多参数输出3. 格式化输出4. 换行控制二、input 输入功能1. 基础用法2. 类

使用Folium在Python中进行地图可视化的操作指南

《使用Folium在Python中进行地图可视化的操作指南》在数据分析和可视化领域,地图可视化是一项非常重要的技能,它能够帮助我们更直观地理解和展示地理空间数据,Folium是一个基于Python的地... 目录引言一、Folium简介与安装1. Folium简介2. 安装Folium二、基础使用1. 创建

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Java实现MD5加密的四种方式

《Java实现MD5加密的四种方式》MD5是一种广泛使用的哈希算法,其输出结果是一个128位的二进制数,通常以32位十六进制数的形式表示,MD5的底层实现涉及多个复杂的步骤和算法,本文给大家介绍了Ja... 目录MD5介绍Java 中实现 MD5 加密方式方法一:使用 MessageDigest方法二:使用

Python如何获取域名的SSL证书信息和到期时间

《Python如何获取域名的SSL证书信息和到期时间》在当今互联网时代,SSL证书的重要性不言而喻,它不仅为用户提供了安全的连接,还能提高网站的搜索引擎排名,那我们怎么才能通过Python获取域名的S... 目录了解SSL证书的基本概念使用python库来抓取SSL证书信息安装必要的库编写获取SSL证书信息

mysql删除无用用户的方法实现

《mysql删除无用用户的方法实现》本文主要介绍了mysql删除无用用户的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 1、删除不用的账户(1) 查看当前已存在账户mysql> select user,host,pa

Nginx配置location+rewrite实现隐性域名配置

《Nginx配置location+rewrite实现隐性域名配置》本文主要介绍了Nginx配置location+rewrite实现隐性域名配置,包括基于根目录、条件和反向代理+rewrite配置的隐性... 目录1、配置基于根目录的隐性域名(就是nginx反向代理)2、配置基于条件的隐性域名2.1、基于条件