如何产生音乐频率

如何产生音乐频率:
   1.要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,然后利用计时器计时此半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,如此就可在I/O脚上得到此频率的脉冲.
  2.利用8051的内部计时器让其工作在计数模式MODE1下,改变计数值TH0及TL0以产生不同的频率.
  3.例如以6MHZ晶振为例:要产生频率为523HZ,其周期T=1/523=1912us,其半周期为1912/2=956us,因此只要令计数器计时956us/1us=956.所以在每计数956次时将I/O反相,就可得到中音DO(523HZ).
  计数脉冲值与频率的关系公式如下:
  N=Fi+2+Fr  N:计数值
             Fi:内部计时一次2us,以6MHZ晶振为例,故其频率为500000HZ
             Fr:要产生的频率
  4.其计数值的求法如下:
    T=65536-N=65536-Fi/2/Fr
  例如:求低音DO(261HZ),中音DO(523HZ),高音DO(1046HZ) 的计数值?
       设K=65536  F=500000=Fi=0.5MHZ
       T=65536-N=65536-Fi/2/Fr=65536-500000/2/Fr=65536-250000/Fr
       低音DO的 T=65536-250000/262=64582
       中音DO的 T=65536-250000/523=65058
       高音DO的 T=65536-250000/1047=65297
  5. C调各音符频率与计数值T的对照表:
   音符  频率HZ  6MHZ  十六进制值   音符  频率HZ  6MHZ  十六进制值
  低1DO    262  64582    FC46       #4FA#   740  65198    FEAE
  #1DO#    277  64634    FC7A       中5SO   784  65217    FEC1
  低2RE    294  64686    FCAE       #5SO#   831  65235    FED3
  #2RE#    311  64732    FCDC       中6LA   880  65252    FEE4
  低3M     330  64779    FD0B       #6LA#   932  65268    FEF4
  低4FA    349  64820    FD34       中7SI   988  65283    FF03
  #4FA#    370  64860    FD5C       高1DO  1046  65297    FF11
  低5SO    392  64898    FD82       #DO#   1109  65311    FF1F
  #5SO#    415  64934    FDA6       高2RE  1175  65323    FF2B
  低6LA    440  64968    FDC8       #2RE#  1245  65335    FF37
  #6LA#    466  65000    FDE8       高3M   1318  65346    FF42
  低7SI    494  65030    FE06       高4FA  1397  65357    FF4D
  中1DO    523  65058    FE22       #4FA#  1480  65367    FF57
  #1DO#    554  65085    FE3D       高5SO  1568  65377    FF61
  中2RE    578  65103    FE4F       #5S0#  1661  65385    FF69
  #2RE#    622  65134    FE6E       高6LA  1760  65394    FF72
  中3M     659  65157    FE85       #6LA#  1865  65402    FF7A
  中4FA    698  65178    FE9A       高7SI  1976  65409    FF81
    "# "表示半音,用于上升或下降半个音
  如何产生节拍:
  每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,如果1拍节为0.4秒则1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间,再来我们假设1/4拍为1 DELY单位,则1拍应为4个DELY,以此类推,只要求得1/4拍的DELY单位时间,其余的节拍就是它的倍数.
  1/4拍的延迟时间=187亳秒
 DELAY:MOV  R7,#02H
    D2:MOV  R4,#31H
    D3 ;MOV  R3,#0F1H
       DJNZ R3,$
       DJNZ R4,D3
       DJNZ R7,D2
       DJNZ R5,DELAY     ;R5存节拍数
       RET
  节拍与节拍码对照表
   节拍码   节拍数(拍)             节拍码      节拍数(拍)
     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
     8      2                        8       1
     A      2又1/2                   A       1又1/4
     C      3                        C       1又1/2
     F      1又3/4

  各调值1/4节拍的时间设定        各调值1/8节拍的时间设定
   曲调值     DELAY    6MHZ(H)    曲调值     DELAY    6MHZ(H)
    调4/4    125亳秒    3E         调4/4      62亳秒   1F
      3/4    187        5D           3/4      94       2F
      2/4    250        7D           2/4      125      3E  
   建立音乐的步骤:
  1.先找出乐曲的最低音,最高音范围,然后确定音符表首地址.
  2.如把音符表建在 0151H,适用简谱范围为 低音1 到 高音1.
  3.简谱码(音符)为高4位,节拍码(节拍数)为低4位,音符节拍码放在程序的0300H处.
  本程序有关约定:
  根据不同曲调,可以建立不同简谱音符表
  0151H-  为一简谱音符表首地址适用简谱范围 低音1 到 高音1
  0159H-  为一简谱音符表首地址适用简谱范围 低音5 到 高音5
  0300H-  为第一首歌曲首地址,字节高位为音符代码,低位为节拍代码组成简谱曲码.
  003EH 为歌曲DPH高位首地址,0041H为歌曲DPL低位首地址
  002FH 为节拍速度代码 ;
  0073H 为音符表低位地址 ,高位地址为01H,不可改动 
  0047H 内容为该首放音二次,01为放音1次.
  008DH 改为00H,则反复放该首曲(调试时用).
  乐曲存放约定:
  曲码中00H表示上首曲结束标记 ;接著为下首曲节拍速度值,再接著为该首曲音符表首地址,然后才是乐曲曲码,全部乐曲结束标记为连续两个单元是00H 00H
   各调值节拍时间代码表(6MHZ晶振时)
    曲调值   节拍速度值
    4/4         3EH
    3/4         5DH
    2/4         7DH
 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值