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

来源:互联网 发布:网络架构师培训 编辑:程序博客网 时间: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