乐曲中不同的音符实质上表示的是不同频率的声音。

在单片机中要发出不同频率的声音,只要产生不同频率的脉冲信号,再通过喇叭等播放出来即可。又由于方波容易用定时器产生,故一般单片机使用方波脉冲。

关于Win32 API的发音函数Beep,很多人不知道怎么把音频文件的曲谱转换成频率数组和持续时间,在这我给出两个方法。

方法一,对于一个音频文件,我们可以先获取到它的曲谱,再去根据曲谱去查各音调的频率和套公式得到持续时间;

方法二,可以利用cooledit等软件分析音频文件的频谱;

附表:

音符与频率对应表

(“#”表示半音,用于上升或下降半个音)

表9.1  C调各音符频率与计数值T的对照表

音符   频率(Hz) 简谱码T值

低1DO  262         63628           
#1DO#  277         63731           
低2RE  294         63835           
#2RE#  311        63928           
低3M   330        64103           
低4FA  349        64103           
#4FA#  370       64260           
低5SO  392       64260           
#5SO#  415      64331            
低6LA  440      64400          
#6       466       64463              
低7SI    494      64524           
中1DO  523     64580

#1DO#  554  
中2RE  578      FC9F;
#2RE#  622  
中3MI   659     FD09;
中4FA  698     FD34
#4FA#  740
中5SO  784    FD82
#5SO#  831
中6LA  880     FDC8
#6LA#  932
中7SI   988     FE06

节拍

每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,下表为节拍码的对照。但如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间。假设1/4节拍为1DELAY,则1拍应为4DELAY,以此类推。所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如下表为1/4和1/8节拍的时间设定。

表9.2  节拍码对照表
1/4节拍 1/8节拍
节拍码 节拍数 节拍码 节拍数
1 1/4拍 1 1/8拍
2 2/4拍 2 1/4拍
3 3/4拍 3 3/8拍
4 1拍 4 1/2拍
5 1又1/4拍 5 5/8拍
6 1又1/2拍 6 3/4拍
7 1又3/4拍 7 7/8拍
8 2拍 8 1拍
9 2又1/4拍 9 1又1/8拍
A 2又1/2拍 A 1又1/4拍
B 2又3/4拍 B 1又3/8拍
C 3拍 C 1又1/2拍
D 3又1/4拍 D 1又5/8拍
E 3又1/2拍 E 1又3/4拍
F 3又3/4拍 F 1又7/8拍

节拍延时参考:

曲调            1/4拍的延迟时间             1/8拍的延迟时间
      4/4              125ms                         62ms                                 
      3/4              187ms                         94ms
      2/4              250ms                         125ms

如何将曲谱的各音符转换成频率数组和持续时间相关推荐

  1. 如何将PHP对象数组转换成普通数组

    /** * 对象数组转为普通数组 * * AJAX提交到后台的JSON字串经decode解码后为一个对象数组, * 为此必须转为普通数组后才能进行后续处理, * 此函数支持多维数组处理. * * @p ...

  2. python 如何查看列表(List)的维度? (需要将List转换成numpy数组)

    查看List的维度需要将List转换成numpy数组,惨 import numpy as np l=[[0,1,2],[1,2,3]] print(np.array(l).shape) # (2, 3 ...

  3. 【C#每日一贴】ArrayList 转换成byte数组

    2019独角兽企业重金招聘Python工程师标准>>> // C# ArrayList 转换成byte数组 ArrayList al = new ArrayList(); byte[ ...

  4. php数组转化js数组格式化,php数组转换成js数组

    php数组转换成js数组的方法:1.将$data转成json编码,然后用eval将json格式转为js数组:2.直接使用php中json编码后的数组. 本文操作环境:windows7系统.PHP7.1 ...

  5. HDOJ---1431 素数回文[素数筛选+ltoa函数(将长整形转换成字符数组)+打表]

    素数回文 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. js实现字符串数组转换成数字数组

    js实现字符串数组转换成数字数组的几种方式 1. 遍历方式实现 var turnNum = function(nums){for(let i=0;i<nums.length;i++){nums[ ...

  7. Json对象转换成Json数组

    问题 在写单元测试是报错如下: JSON解析错误:不能将JavaUTIL.AARYLIST实例反序列化到StaskObjo对象令牌中 代码: 自己解决了挺长时间,也没研究出什么好的办法,最后问朴世超组 ...

  8. js 字符串数组转换成数字数组

    1.如何不使用遍历把字符串数组转换成数字数组 2.举个例子 : ['1','2','3']=>[1,2,3] 解决方法 ['1','2','3'].map(Number)

  9. C# 将对象转换成字节数组(二进制数据)

    在将自定义对象或者数组等这样的数据存储到数据库时往往需要转换成二进制字节,尤其是在一些O/RM数据库框架中,下面是转换的函数,一个是将对象转换成二进制字节数组,另一个是将从数据库中读取的二进制流转换成 ...

最新文章

  1. 东华大学计算机学院推免名单,东华大学2020年推免流程及各学院录取情况的说明(持续更新)...
  2. connect 超时
  3. 成功解决 将xgboost的plot_importance绘图时出现的f0、f1、f2、f3、f4、f5等改为对应特征的字段名
  4. C++的几种遍历形式
  5. mysql 主从同步配置
  6. Python3基础教程:元类详解
  7. 计算机web程序开发,基于WEB的计算机应用基础考试系统的开发与设计
  8. Ubuntu 20.04 安装多个版本 php 并应用到 nginx
  9. 软考数据库系统工程师是什么?如何备考?
  10. eclipse中文语言包安装
  11. 火焰检测的基本方法研究和实现
  12. java在线电影_java在线高清
  13. 三角函数π/2转化_分析最简单的正弦和余弦三角函数的图像
  14. SBB:替代固氮酶对非共生固氮可能的贡献
  15. 驾驶证北京到期满换证  异地期满换领  异地驾驶证到期在北京换证 驾驶证异地换证
  16. 车辆运动控制(1)车辆运动学建模
  17. 人工智能欠缺对语言和情感的理解和处理能力
  18. OU Graphics 建筑后期悬挂植物制作PS教程
  19. 阿里P8大牛手把手教你!15个经典面试问题及回答思路,全套教学资料
  20. 享元模式--大量的飞龙

热门文章

  1. 【Windows(shell:startup)】个性化开机自启动目录与途径方法
  2. 用什么软件可以检测苹果耳机芯片_国内首创!单芯片解决TWS耳机无线充电盒难题...
  3. android 应用变量,应用变量(com.sollyu.xposed.hook.model) - 3.3.2 - 应用 - 酷安
  4. java jsonpath过滤_JSONPATH json解析工具
  5. sotre react
  6. [Python] Basemap入坑手册 - 地图投影示例
  7. 云密码技术--北京商密协会《云密码服务技术白皮书2019》
  8. 微型计算机原理与应用教材,微型计算机原理与应用(第3版)(普通高等教育十二五规划教材)...
  9. JavaScript实现2048小游戏,我终于赢了一把
  10. 收银系统源码演示-适合超市便利店零售等行业