使用蜂鸣器演奏《生日快乐》

news2024/10/7 20:33:21

一、音的组成

音乐通常由以下几个基本元素组成:

  1. 旋律(Melody):旋律是一系列连续的音符,通过它们的音高和音长来构成乐曲的主旋律部分。旋律是音乐中最容易被人们记住和感知的部分。

  2. 节奏(Rhythm):节奏是音乐中的时间感,由一系列有规律的音符持续时间和强弱构成。节奏决定了音乐的速度、韵律和舞蹈性。

  3. 和声(Harmony):和声是由多个音符同时发出,相互作用形成和谐音响的部分。和声可以增强旋律的表现力,丰富音乐的层次感。

  4. 节拍(Beat):节拍是音乐中的基本时间单位,通常由强拍和弱拍组成,决定了音乐的整体节奏感。

  5. 音色(Timbre):音色指音乐发出的声音的质地和特色,不同乐器和声音来源会产生不同的音色。

  6. 形式(Form):形式指整个乐曲的结构和安排,包括序曲、主题、副歌、间奏等部分的组合和安排。

 二、化繁为简

仅有 音色、音调、节奏

在电子器乐中,音色是不可更改的,狭义上将,以蜂鸣器为例:

在狭义上,对于某些简单的电子器乐设备,如蜂鸣器,的确可以说音色是不可更改的。蜂鸣器通常只能发出单一的音色,这个音色由其固有的工作原理和设计决定,因此很难或者无法通过简单的手段来改变。

蜂鸣器的音色是由其内部振荡器产生的频率决定的,一般情况下无法通过外部操作来改变这种音色。因此,在使用蜂鸣器进行音乐演奏时,音色通常是固定的,无法根据具体需求进行调整。

然而,对于其他更为复杂的电子器乐设备,比如合成器或者数字音频工作站(DAW),音色是可以被自由调整和定制的。这些设备允许用户通过各种方式来改变音色,包括调整波形、滤波、合成技术等等。在这些情况下,音色是非常可变的,并且可以根据具体的创作需求进行调整和定制。

因此侠义上的音乐只有 音调(旋律)和节奏。

三、使得蜂鸣器发声

int buzzer=2;//设置控制蜂鸣器的数字口对应板子上2口
void setup() 
{ 
  pinMode(buzzer,OUTPUT);//设置对应的输出模式
} 
void loop() 
{ 
  unsigned char i,j;//定义变量
  while(1) 
 { 
    for(i=0;i<50;i++)//输出一个频率的声音
    { 
      digitalWrite(buzzer,HIGH);//高电平打开蜂鸣器发声
      delay(1);//延时1ms 通过这个延时可以改变声音的频率不同
      digitalWrite(buzzer,LOW);//低电平关闭蜂鸣器不发声音
      delay(1);//延时1ms 通过这个延时可以改变声音的频率不同
    } 
    for(j=0;j<50;j++)//输出另一个频率的声音 
    { 
      digitalWrite(buzzer,HIGH);//高电平打开蜂鸣器发声
      delay(5);//延时5ms 通过这个延时可以改变声音的频率不同
      digitalWrite(buzzer,LOW);//低电平关闭蜂鸣器不发声音
      delay(5);//延时5ms 通过这个延时可以改变声音的频率不同
    } 
  } 
}

以上代码能够是得蜂鸣器发出两种不同的音调。

四、接线图

五、生日快乐歌

int buzzer = 2;

void setup() {
  pinMode(buzzer, OUTPUT);
}

void loop() {
  int melody[] = {262, 262, 294, 262, 349, 330, 262, 262, 294, 262, 392, 349};
  int noteDuration[] = {4, 4, 4, 4, 4, 2, 4, 4, 4, 4, 4, 2};

  for (int i = 0; i < 12; i++) {
    int noteDurationMs = 1000 / noteDuration[i];
    tone(buzzer, melody[i], noteDurationMs * 0.9); // 播放当前音符
    delay(noteDurationMs * 1.1); // 等待一定时间,留出音符之间的间隔
    noTone(buzzer); // 停止发声
  }
}

在这个代码中,melody[] 数组存储了《生日快乐》歌曲的音调序列,noteDuration[] 数组存储了每个音符的持续时间(以四分音符为单位)。循环遍历这些数组,使用 tone() 函数播放每个音符,并根据音符的持续时间调整发声时间和间隔时间。

六、解析

  1. int buzzer = 2;:定义了蜂鸣器所连接的数字口为 2。

  2. void setup() {:开始 setup 函数,用于初始化设置。

  3. pinMode(buzzer, OUTPUT);:将蜂鸣器连接的引脚设置为输出模式,以便通过该引脚控制蜂鸣器发声。

  4. }:结束 setup 函数。

  5. void loop() {:开始 loop 函数,用于循环执行播放音乐的代码。

  6. int melody[] = {262, 262, 294, 262, 349, 330, 262, 262, 294, 262, 392, 349};:定义了一个整型数组 melody,存储了《生日快乐》歌曲的音调序列(对应每个音符的频率)。

  7. int noteDuration[] = {4, 4, 4, 4, 4, 2, 4, 4, 4, 4, 4, 2};:定义了一个整型数组 noteDuration,存储了每个音符的持续时间(以四分音符为单位)。

  8. for (int i = 0; i < 12; i++) {:开始 for 循环,遍历音符序列和持续时间数组,共有 12 个音符。

  9. int noteDurationMs = 1000 / noteDuration[i];:计算当前音符的持续时间(以毫秒为单位),转换为每分钟节拍数。(1秒为1拍 节奏60)

  10. tone(buzzer, melody[i], noteDurationMs * 0.9);使用 tone 函数播放当前音符,参数包括蜂鸣器引脚、音调频率和持续时间。

  11. delay(noteDurationMs * 1.1);:延迟一定时间,等待音符持续时间结束,留出音符之间的间隔。(有看过微信语言做音乐键盘的短视频吗?留间隔不会让音符听起来稠密)

  12. noTone(buzzer);:停止蜂鸣器发声,确保下一个音符能够独立出来,不会混合到一起。

  13. }:结束 for 循环。

播放完单个循环需要约3.5秒

生日快乐歌

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1539758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何从零开始拆解uni-app开发的vue项目(一)

uni-app项目分析: 背景:最近接手一个前同事留下的半拉子项目,出拿过来觉得很简单;当我看到app.vue的时候很确定是vue项目,心里不怎么慌,果断安装node.js,然后就去npm ;安装VS code,事实并不是我期盼的那样,或者说根本就不能运行。 报错:应用vs code打开文件,输入命…

【漏洞复现】福建科立迅通信指挥调度平台pwd_update.php SQL注入漏洞 (CVE-2024-2621)

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

如何保障消息一定能发送到RabbitMQ?

我们知道&#xff0c;RabbitMQ的消息最终是存储在Queue上的&#xff0c;而在Queue之前还要经过Exchange&#xff0c;那么这个过程中就有两个地方可能导致消息丢失。第一个是Producer到Exchange的过程&#xff0c;第二个是Exchange到Queue的过程。 为了解决这个问题&#xff0c…

【Transformer】transformer注解

every blog every motto: You can do more than you think. 0. 前言 transformer注解 在过去的一年里&#xff0c;《Attention is all you need》中的transformer一直萦绕在很多人的脑海里。除了在翻译质量上产生重大改进之外&#xff0c;它还为许多其他NLP任务提供了一种新的…

2024年【危险化学品经营单位安全管理人员】新版试题及危险化学品经营单位安全管理人员模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员新版试题考前必练&#xff01;安全生产模拟考试一点通每个月更新危险化学品经营单位安全管理人员模拟考试题题目及答案&#xff01;多做几遍&#xff0c;其实通过危险化学品经营单位安…

matlab 电机仿真平台GUI

1、内容简介 略 74-可以交流、咨询、答疑 2、内容说明 略 电机仿真平台GUI 包含直流机要加调电压启动、回馈制动、串电阻调速 异步电动机要加串电阻启动、星三角启动、回馈制动模块 3、仿真分析 略 4、参考论文 略

【网安】DDoS / Web漏洞 / CC攻击 / 恶意爬虫

【网安】DDoS攻击&#xff1a;方法、影响与防御策略 写在最前面1.DDoS&#xff08;分布式拒绝服务&#xff09;攻击2. Web 漏洞利用3. CC&#xff08;凭证破解&#xff09;攻击4.恶意爬虫 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&…

Vue介绍使用

文章目录 Vue概念一、Vue快速入门二、Vue常用指令三、Vue生命周期四、案例1、查询所有2、新增品牌 Vue概念 一、Vue快速入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> <…

chap验证实验

一、添加接口 在每个路由器里添加2SA接口 二、配IP 进入serial接口配置IP R1&#xff1a; R2&#xff1a; ppp mp Mp-group 0/0/0 R3: 查看&#xff1a; 三、aaa认证&#xff0c;chap验证 创建一个新用户&#xff1a; R2进入3/0/0接口&#xff1a; R1进入3/0/0接口&a…

蓝桥杯2021年第十三届省赛真题-解密

一、题目 解密 【问题描述】 小明设计了一种文章加密的方法&#xff1a;对于每个字母 c&#xff0c;将它变成某个另外的字符 Tc。下表给出了字符变换的规则&#xff1a; 例如&#xff0c;将字符串 YeRi 加密可得字符串 EaFn。 小明有一个随机的字符串&#xff0c;加密后为EaFnj…

ERNIE SDK 本地使用与markdown自动生成

ERNIE SDK 仓库包含两个项目&#xff1a;ERNIE Bot Agent 和 ERNIE Bot。ERNIE Bot Agent 是百度飞桨推出的基于文心大模型编排能力的大模型智能体开发框架&#xff0c;结合了飞桨星河社区的丰富预置平台功能。ERNIE Bot 则为开发者提供便捷接口&#xff0c;轻松调用文心大模型…

从零开始学习在VUE3中使用canvas(六):lineCap(线条端点样式)

一、简介 lineCap能够让我们设置线条的端点样式&#xff0c;例如 1. butt const ctx canvas.getContext("2d");ctx.lineCap "butt"; // 默认样式&#xff0c;也可以显式指定 2.round const ctx canvas.getContext("2d");//圆头ctx.lineCap …

内存条@电脑支持的最大内存@升级内存硬件

文章目录 电脑支持的最大内存规格cpu官网查看支持的规格命令行查看脚本化 DDR内存LPDDR内存内存升级扩展&#x1f47a;插槽检查板载内存SPD内存厂商其他 内存参数&#x1f47a;性能指标使用软件查看更多内存相关的软件工具 电脑支持的最大内存规格 确认电脑最大支持内存大小和频…

MT2191 整数大小比较(高精度)

给出两个正整数&#xff0c;判断他们的大小。 输入格式&#xff1a; 两个正整数。 输出格式&#xff1a; 若前者大&#xff0c;输出>&#xff1b; 若后者大&#xff0c;输出<&#xff1b; 若一样大&#xff0c;输出。 输入&#xff1a; 1412894619244619891 23762842…

js 质数的因子

功能:输入一个正整数&#xff0c;按照从小到大的顺序输出它的所有质因子&#xff08;重复的也要列举&#xff09;&#xff08;如180的质因子为2 2 3 3 5 &#xff09; 按照从小到大的顺序输出它的所有质数的因子&#xff0c;以空格隔开 输入 180 输出 2 2 3 3 5 let line 180;…

宁波零碳工厂,“零碳工厂”指引未来

&#x1f600;随着环保意识的提高⬆️和全球气候变化问题&#x1f30f;的日益严重&#xff0c;⬇️减少碳排放、实现可持续发展已成为&#x1f30e;全球的共识。而在这个&#x1f504;过程中&#xff0c;宁波的“零碳工厂”建设&#x1f3e9;正成为引领未来的重要趋势。 “零碳…

jeect-boot queryFieldBySql接口RCE漏洞(CVE-2023-4450)复现

jeect-boot积木报表由于未授权的 API /jmreport/queryFieldBySql 使用了 freemarker 解析 SQL 语句从而导致了 RCE 漏洞的产生。 1.漏洞级别 高危 2.漏洞搜索 fofa app"Jeecg-Boot 企业级快速开发平台"3.影响范围 JimuReport < 1.6.14.漏洞复现 这个漏洞的…

基于springboot+vue的农产品直卖平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

【Android开发】【创建Activity,Activity之间的切换/消息传递】【java】

一、第一个Activity 1.1 创建一个空Activity 1.2 创建一个布局 知识点 在XML中引用一个id&#xff1a;id/id_name 在XML中定义一个id&#xff1a;id/id_name 右键错误&#xff0c;点击Show Quick-Fixes&#xff0c;再点击弹出的Suppress:Add........&#xff0c;错误会被自动修…

烟火AI识别检测算法在新能源汽车充电桩站点的应用方案

新能源汽车作为现代科技与环保理念的完美结合&#xff0c;其普及和应用本应带给人们更加便捷和绿色的出行体验。然而&#xff0c;近年来新能源汽车充电火灾事故的频发&#xff0c;无疑给这一领域投下了巨大的阴影。这不禁让人深思&#xff0c;为何这一先进的交通工具在充电过程…