如何将曲谱的各音符转换成频率数组和持续时间
来源:互联网 发布:网络架构师培训 编辑:程序博客网 时间:2024/04/30 03:05
乐曲中不同的音符实质上表示的是不同频率的声音。
在单片机中要发出不同频率的声音,只要产生不同频率的脉冲信号,再通过喇叭等播放出来即可。又由于方波容易用定时器产生,故一般单片机使用方波脉冲。
关于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
- 如何将曲谱的各音符转换成频率数组和持续时间
- Java如何将数组转换为ArrayList(ArrayList和数组间的相互转换)
- 音符频率对应表
- 如何将对象数组转换成DataSet
- 如何将对象数组转换成DataSet
- 如何将ArrayList转换成整型数组
- 如何将BufferedImage转换成字节数组?
- Draw2d中如何控制ToolTip的持续时间
- 如何获取HTML5视频的持续时间
- Javascript如何将中文转换UTF16和UTF8字节数组
- 格式化持续时间转换
- 如何将字节数组转换为十六进制的字符串
- 如何将YUV的byte数组转换为bitmap
- Delphi如何将byte型的数组转换为字符串
- Java中list集合的交集和差集的用法和如何将数组转换为集合的方法
- C#如何将对象数组转换成DataSet
- java中,如何将一个字节数组转换成字符串?
- ASP.net:如何将对象数组转换成DataSet
- java操作Excel的神奇之路
- html 捕捉回车键 且同时屏蔽掉该回车键
- 内存映射文件原理探索
- linux 中断处理流程
- SQL 常用关键字释义和用法
- 如何将曲谱的各音符转换成频率数组和持续时间
- arm linux中断向量注册分析,linu系统调用分析
- ubuntu12.10安装netbeans
- 那些年javaweb自定义标签详解
- 五猴分桃
- 防止页面重复提交(使用UUID--Session)
- xcode4.3 如何建立UIViewCOntroller subclass
- MVC模式(简单模拟计算器)
- 利用ajax创建表单联动