[Python] 将 Music Macro Language 格式数据转化为 linux beep command

Music Macro Language  ==>  Beep command

 

#!/usr/bin/python3
import os, sys


tone_dict = {	'c':	'262',
		'c#':	'277',
		'd' :	'294',
		'd#':	'311',
		'e':	'330',
		'f':	'349',
		'f#':	'370',
		'g': 	'392',
		'g#':	'415',
		'a':	'440',
		'a#':	'466',
		'b':	'494',
		'C':	'523',
		'C#':	'554',
		'D':	'587',
		'D#':	'622',
		'E':	'659',
		'F':	'698',
		'F#':	'740',
		'G':	'784',
		'G#':	'831',
		'A':	'880',
		'A#':	'932',
		'B':	'988',
		'B#':	'1046'
		}

number_dict = {	'0':	'100000',
		'1':	'1200',
		'2':	'600',
		'4':	'300',
		'8':	'150',
		'16':	'75',
		'32':	'37.5',
		'64':	'18.75',
		}

mml=""
if len(sys.argv) < 2:
  mml = input( "Please input audio string in music macro language(MML):")
else:
  mml = sys.argv[1]  

tone   = ""
number = ""
s = ""
repeat = False
delay  = False
t1 = ''
mml += 'r'
for t in mml:
  if t == 'r':
    if t1 in "0123456789":
      if tone in tone_dict:
        s += " -n -f " + tone_dict[tone]
        if number in  number_dict: 
          s += " -l " + number_dict[number]
      elif delay == True:
        if number in  number_dict: 
          s += " -D " + number_dict[number]
    elif t1 in "cdefgabCDEFGAB#":
      if tone in tone_dict:
        s += " -n -f " + tone_dict[tone]
    delay = True
    tone = ""
    number = ""
  elif t == '#':
    delay = False
    if t1 in "cdefgabCDEFGAB":
      tone += t
    elif t1 in "0123456789":
      s += " -n -f " + tone_dict[tone] + " -l " + number_dict[number]
      tone = ""
      number = ""
  elif t in "cdefgabCDEFGAB":
    delay = False
    if t1 in "0123456789":
      if tone in tone_dict:
        s += " -n -f " + tone_dict[tone]
        if number in  number_dict: 
          s += " -l " + number_dict[number]
    elif t1 in "cdefgabCDEFGAB#":
      if tone in tone_dict:
        s += " -n -f " + tone_dict[tone]
    tone = t
    number = ""
  elif t in "0123456789":
    number += t  
  t1 = t

cmd = "beep " + s[4:]
print(cmd)
os.system(cmd)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值