Chinaunix

标题: 今天是我女儿的1周岁生日,发个脚本,这个能让pc喇叭实现按键发音 [打印本页]

作者: gao_linfeng    时间: 2008-08-06 10:47
标题: 今天是我女儿的1周岁生日,发个脚本,这个能让pc喇叭实现按键发音
#!/bin/bash
#本程序需要利用beep软件,debian下直接apt-get install beep即可,所对应的键位是: < qwertyu 1234567 890-=[] >.
#PS1='\[\e[33;1m\]<\t>:\w\$ \[\e[0m\]'
trap exitprocess INT

####################################################
function exitprocess()
{
  echo -en "\n\e[43;1m 确认退出吗? [y/N] \e[0m"
  read -n1 dd
  echo
  if test $dd = y 2>/dev/null || test $dd = Y 2>/dev/null ;then
     exit
  fi
}
####################################################

echo -e "\n\e[44;37;1m************************************************************************\e[0m"
echo -e "\e[44;37;1m***  本程序用来进行按键发音,对应的键位是<\e[36;1m qwertyu 1234567 890-=[] \e[37;1m>  ***\e[0m"
echo -e "\e[44;37;1m************************************************************************\e[0m\n"
read -p " 请输入单个音调的音长 (默认: 150): " beeplong
echo -e "\e[32;1m 请按键输入简谱,按\e[31;1m< Ctrl+c >\e[32;1m退出. \e[0m"
beeplong=${beeplong:=150}
while : ;do
  read -n 1 qq
  case $qq in
       q)
          beep -f 200  -l $beeplong ;;
       w)
          beep -f 220  -l $beeplong ;;
       e)
          beep -f 250  -l $beeplong ;;
       r)
          beep -f 270  -l $beeplong ;;
       t)
          beep -f 300  -l $beeplong ;;
       y)
          beep -f 340  -l $beeplong ;;
       u)
          beep -f 380  -l $beeplong ;;
       1)
          beep -f 400  -l $beeplong ;;
       2)
          beep -f 450  -l $beeplong ;;
       3)
          beep -f 500  -l $beeplong ;;
       4)
          beep -f 540  -l $beeplong ;;
       5)
          beep -f 600  -l $beeplong ;;
       6)
          beep -f 670  -l $beeplong ;;
       7)
          beep -f 750  -l $beeplong ;;
      
          beep -f 800  -l $beeplong ;;
       9)
          beep -f 900  -l $beeplong ;;
       0)
          beep -f 1000 -l $beeplong ;;
       -)
          beep -f 1100 -l $beeplong ;;
       =)
          beep -f 1200 -l $beeplong ;;
       [)
          beep -f 1350 -l $beeplong ;;
       ])
          beep -f 1500 -l $beeplong ;;
  esac
done

[ 本帖最后由 gao_linfeng 于 2008-8-11 11:07 编辑 ]

女儿高爱珊.JPG (23.45 KB, 下载次数: 67)

女儿高爱珊.JPG

作者: gao_linfeng    时间: 2008-08-06 10:48
再发一个,这个也是利用beep,只不过他可以对简谱文件自动生成播放脚本,请将下面保存为一个文件并附于执行权限。

#!/bin/bash
#本程序利用beep对简谱文件生成pc喇叭播放脚本.
trap 'echo;exit' INT

echo -e "\e[44;37;1m\n***********************************************************************\e[0m"
echo -e "\e[44;37;1m***  本程序用来对简谱文件生成pc喇叭播放脚本.                        ***\e[0m"
echo -e "\e[44;37;1m***  简谱文件只能是一行,并且由(\e[36;1m qwertyu 1234567 890-=[] \e[37;1m)字符组成.  ***\e[0m"
echo -e "\e[44;37;1m***  新生成的播放脚本文件存放在用户主目录下的 \e[36;1mgao-bF.sh \e[37;1m文件中.     ***\e[0m"
echo -e "\e[44;37;1m***********************************************************************\e[0m\n"
while : ;do
{
  while : ;do
    read -p " 请输入简谱文件名: " beepfile
    if test -n "$beepfile" ;then
       if test -a $beepfile ;then
          break
       else
          echo -e "\e[44;1m 文件不存在,请重新输入简谱文件名! \e[0m\n"
       fi
    fi
  done
  read -p " 请输入单个音调的音长 (默认: 200): " beeplong
  echo '#!/bin/sh' > $HOME/gao-bF.sh
  echo 'trap exitprocess INT' >> $HOME/gao-bF.sh
  echo '####################################################' >> $HOME/gao-bF.sh
  echo 'function exitprocess()' >> $HOME/gao-bF.sh
  echo '{' >> $HOME/gao-bF.sh
  echo '  echo -en "\n\e[43;1m 停止播放吗? [y/N] \e[0m"' >> $HOME/gao-bF.sh
  echo '  read -n1 dd' >> $HOME/gao-bF.sh
  echo '  echo' >> $HOME/gao-bF.sh
  echo '  if test $dd = y 2>/dev/null || test $dd = Y 2>/dev/null ;then' >> $HOME/gao-bF.sh
  echo '     exit' >> $HOME/gao-bF.sh
  echo '  fi' >> $HOME/gao-bF.sh
  echo '}' >> $HOME/gao-bF.sh
  echo '####################################################' >> $HOME/gao-bF.sh
  chmod +x $HOME/gao-bF.sh
  beeplong=${beeplong:=200}
  a=$(wc -c $beepfile|awk '{print $1}')
  for ((i=1;i<=$a;i++)) ;do
  qq=$(cut -c $i $beepfile)
  case $qq in
       q)
          echo "beep -f 200  -l $beeplong" >> $HOME/gao-bF.sh ;;
       w)
          echo "beep -f 220  -l $beeplong" >> $HOME/gao-bF.sh ;;
       e)
          echo "beep -f 250  -l $beeplong" >> $HOME/gao-bF.sh ;;
       r)
          echo "beep -f 270  -l $beeplong" >> $HOME/gao-bF.sh ;;
       t)
          echo "beep -f 300  -l $beeplong" >> $HOME/gao-bF.sh ;;
       y)
          echo "beep -f 340  -l $beeplong" >> $HOME/gao-bF.sh ;;
       u)
          echo "beep -f 380  -l $beeplong" >> $HOME/gao-bF.sh ;;
       1)
          echo "beep -f 400  -l $beeplong" >> $HOME/gao-bF.sh ;;
       2)
          echo "beep -f 450  -l $beeplong" >> $HOME/gao-bF.sh ;;
       3)
          echo "beep -f 500  -l $beeplong" >> $HOME/gao-bF.sh ;;
       4)
          echo "beep -f 540  -l $beeplong" >> $HOME/gao-bF.sh ;;
       5)
          echo "beep -f 600  -l $beeplong" >> $HOME/gao-bF.sh ;;
       6)
          echo "beep -f 670  -l $beeplong" >> $HOME/gao-bF.sh ;;
       7)
          echo "beep -f 750  -l $beeplong" >> $HOME/gao-bF.sh ;;
      
          echo "beep -f 800  -l $beeplong" >> $HOME/gao-bF.sh ;;
       9)
          echo "beep -f 900  -l $beeplong" >> $HOME/gao-bF.sh ;;
       0)
          echo "beep -f 1000 -l $beeplong" >> $HOME/gao-bF.sh ;;
       -)
          echo "beep -f 1100 -l $beeplong" >> $HOME/gao-bF.sh ;;
       =)
          echo "beep -f 1200 -l $beeplong" >> $HOME/gao-bF.sh ;;
       [)
          echo "beep -f 1350 -l $beeplong" >> $HOME/gao-bF.sh ;;
       ])
          echo "beep -f 1500 -l $beeplong" >> $HOME/gao-bF.sh ;;
       *)
          echo "beep -f 1    -l $beeplong" >> $HOME/gao-bF.sh ;;
  esac
  done
  echo -en "\n\e[43;1m 生成脚本文件完毕,是否播放该脚本? [Y/n] \e[0m"
  read -n1 gaoif
  echo
  if test $gaoif = n 2>/dev/null || test $gaoif = N 2>/dev/null ;then
     exit
  else
     sh $HOME/gao-bF.sh
     echo -en "\e[43;1m 是否播放下一首? [Y/n] \e[0m"
     read -n1 gaoifif
     echo
     if test $gaoifif = n 2>/dev/null || test $gaoifif = N 2>/dev/null ;then
        exit
     fi
  fi
}
done

请将下面这段数字(注意空格)保存为一个文件,比如file-beep
t321t ttt321y yy432u u55423 1tt321t tt321y yy432555565421  333 333 35123 4444433 33212 5 333 333 35123 4444433 55421
然后执行上面脚本时输入文件名即可。
作者: 爱知    时间: 2008-08-06 10:50
good
up
作者: shaneqi    时间: 2008-08-06 10:56
不错,祝你女儿生日快乐。
顺便问一下,如何能去掉这种滴滴声啊,我是ksh,在控制台下,试了几个方法都不好。
作者: 寂寞烈火    时间: 2008-08-06 11:04
祝你女儿生日快乐
作者: gao_linfeng    时间: 2008-08-06 11:06
你是说关闭pc喇叭吗?我的是debian,卸掉pc喇叭模块即可,rmmod pcspkr
作者: 爱知    时间: 2008-08-06 11:07
Happy birthday to your daughter
作者: gao_linfeng    时间: 2008-08-06 11:24
谢谢大家的祝福!
作者: beauty2003    时间: 2008-08-06 11:40
这个脚本不错,还能播放简谱.
另,也祝你女儿生日快乐!
作者: 可可熊    时间: 2008-08-06 11:43
标题: 回复 #6 gao_linfeng 的帖子
有没有配置文件修改一下让终端不出声;
作者: locom    时间: 2008-08-06 12:18
祝她生日快乐!
作者: gao_linfeng    时间: 2008-08-06 12:41
标题: 回复 #10 可可熊 的帖子
没有,我上面两个脚本就算是配置文件了呀,我这个是bash脚本做的,所以效率肯定不算高,就是没事拿来玩玩吧。
另外有的时候机器上没有音箱,但还想听个音乐什么的,就自己编个简谱然后自已听吧。呵呵

再送几个简谱文件:
###################
1 35 5 6 5  3 15553 1 tttttt 1  t1 111tyu1 1 31235 5 3313532 2  6 5 2 3 53 53231 3  ty113355222y2  t1 13 35 135565 3155531 t 1 3155531 t 1 5 8 5 8 8
###################
1  23 13 1 3  2 344324  3 45 35 3 5  4  566546   5 123456  6 234567  7 345678 876 4 7 5 8 5 3 2 1  23 13 1 3  2 344324  3 45 35 3 5  4  566546   5 123456  6 234567  7 345678 876 4 7 5 8  12345678  5  8
###################
y123 5 312y 1235 5 623 356  5 6876563 123  51 y 12365 3 6 6543 2 3 5y12 123 55 6 8 76536
###################
t321t ttt321y yy432u u55423 1tt321t tt321y yy432555565421  333 333 35123 4444433 33212 5 333 333 35123 4444433 55421
###################
e t y1 2y1t 5 865352  2 3u y ty12 e1yty1t  35u2y1t ete tyu2y ty1  253232 1yte  1 y1ytety1t
###################
3 3 4 5 5 4 3 2 1 1 2 3 3  22  3 3 4 5 5 4 3 2 1 1 2 3 2  11   2 2 3 1 2 343 1 2 343 2 1 2 t 3  3 4 5 5 4 3 421 1 2 3 2  11
###################
556 5 8 7  556 5 9 8   55= 0 8 7 6   --0 8 9 8
###################
5  35 8  6 8 5  5 123 212   5 358 7 6 8 5  5 234 u 1  6 8 8  7678  67866531 2  5 3587 6 8 5  5 234  u 1
###################
t 1  113 2  123 1  135 6   6 5  3312  12 3 1  yyt 1   6 5  331 2  12 6 5  335 6   8 5  331 2  12 3 1  yyt 1
###################
ty1 53 23  ty1 52 12  356  351 32uy  2 322uyt  568 68  387 67  632  376 5  568 68  387 67  632 35 22y1
作者: 无声无息    时间: 2008-08-06 12:42
祝你女儿生日快乐,健康快乐成长
作者: gao_linfeng    时间: 2008-08-06 12:50
再发个脚本,这个可以实现ping的效果显示为cisco路由器的那种方式


#!/bin/bash
#本程序用以实现ping一个地址,但显示方式为cisco类似的方式.
trap exitprocess INT

####################################################
function exitprocess()
{
  echo -en "\n\e[43;1m 确认退出吗? [y/N] \e[0m"
  read -n1 dd
  echo
  if test $dd = y 2>/dev/null || test $dd = Y 2>/dev/null ;then
     exit
  fi
}
####################################################

x=0
y=0
read -p " 请在下面输入IP地址 (默认: 202.96.64.6: " a
read -p " 请输入要ping包的个数 (默认: 100个): " b
echo -e "\n\e[44;1m 正在对 ${a:=202.96.64.68} 进行ping测试. \e[0m\n"
for ((i=0;i<${b:=100};i++)) ; do
    if  ping -c1 ${a:=202.96.64.68} -i 0.3 1>/dev/null 2>/dev/null ;then
        echo -en '\e[32;1m!\e[0m'
        ((x++))
    else
        echo -en '\e[31;1m.\e[0m\a'
        ((y++))
    fi
done
echo -e "\n\e[33;1m 共发送 $i 个包, 接收 $x 个包, 丢弃 $y 个包, 丢包率为 $(($y*1
00/$i))% \e[0m\n"
read -s -p "测试完毕,按回车键继续... "
echo
exit
作者: blackold    时间: 2008-08-06 12:51
Happy Birthday!
作者: gao_linfeng    时间: 2008-08-06 13:04
再发个脚本,这个可以实现对某个ip实现进行ping,还可以选择ping通或者ping不通时的报警音量,比如你正在对某个ip进行ping,想在丢包时发出报警,你就可以把ping通时报警音量设置为1,ping不通时为900.
注意: 本脚本需要用到beep和figlet两个软件.


#!/bin/bash
#本程序用以实时监测某个网络地址的ping通状况.
trap exitprocess INT

####################################################
function exitprocess()
{
  echo -en "\n\e[43;1m 确认退出吗? [y/N] \e[0m"
  read -n1 dd
  echo
  if test $dd = y 2>/dev/null || test $dd = Y 2>/dev/null ;then
     exit
  else
     return
  fi
}
####################################################

echo -e "\n        \e[44;1m*******************************************************\e[0m        "
echo -e "        \e[44;1m***   本程序用以实时监测某个网络地址的ping通状况!   ***\e[0m        "
echo -e "        \e[44;1m*******************************************************\e[0m        \n"
read -p " 请输入一个有效的网络地址 (默认: 202.96.64.6: " ipa
read -p " 请输入ping通时的报警音量 (输入值在1-19999之间,默认: 1Hz): " beepaumix1
read -p " 请输入ping不通时的报警音量 (输入值在1-19999之间,默认: 900Hz): " beepaumix2
ipb=${ipa:=202.96.64.68}
clear
echo -e "\e[32;1m$(figlet Now testing\ .\ .\ .  Please wait\ \!)\e[0m"
echo -e "\e[35;1m  正在监测 $ipb ,退出请按\e[31;1m< Ctrl+c >\e[35;1m键! \e[0m\n"
while : ;do
  if (! ping -c1 $ipb 1>/dev/null 2>/dev/null) ;then
     echo -en "\e[44;37;1m [$(date|awk '{print $5}')]  网络地址: $ipb -----> \e[41;37;1m 断开! \e[0m                           "
     echo -en "\r"
     beep -f ${beepaumix2:=900} -r 3 -l 200 1>/dev/null 2>/dev/null
     ((i++))
  else
     echo -en "\e[44;37;1m [$(date|awk '{print $5}')]  网络地址: $ipb -----> \e[42;37;1m 己通! \e[0m                           "
     echo -en "\r"
     beep -f ${beepaumix1:=1} -l 300 1>/dev/null 2>/dev/null
  fi
  sleep 0.5s
done

[ 本帖最后由 gao_linfeng 于 2008-8-12 08:34 编辑 ]
作者: ID525    时间: 2008-08-06 13:08
祝贺:
作者: walkerxk    时间: 2008-08-06 17:11
说到ping,说一下ping的一个很好玩而且好用的功能ping -f +ip
要root权限,动态显示主机和你的ping值。
如果你ping -f +ip >a.log的话,用vi打开,一般会是这样:
......^H.^H.^H.^H^H.^H..^H.^H^H.^H^H..^H
附man:
-f     Flood ping. For every ECHO_REQUEST sent a period ‘‘.’’ is printed, while for  ever  ECHO_REPLY
              received  a backspace is printed.  This provides a rapid display of how many packets are being
              dropped.  If interval is not given, it sets interval to zero and outputs packets  as  fast  as
              they  come  back  or one hundred times per second, whichever is more.  Only the super-user may
              use this option with zero interval.
作者: 无声无息    时间: 2008-08-06 17:26
标题: 回复 #18 walkerxk 的帖子
man fping

fping  is  a  like  program which uses the Internet Control Message Protocol (ICMP) echo request to determine if a target
       host is responding.  fping differs from ping in that you can specify any number of targets on the command line, or  spec-
       ify a file containing the lists of targets to ping. Instead of sending to one target until it times out or replies, fping
       will send out a ping packet and move on to the next target in a round-robin fashion.
作者: wstar    时间: 2008-08-06 21:24
呵呵。
祝你女儿生日快乐。
作者: dreamone503    时间: 2008-08-06 22:17
原帖由 gao_linfeng 于 2008-8-6 12:41 发表
没有,我上面两个脚本就算是配置文件了呀,我这个是bash脚本做的,所以效率肯定不算高,就是没事拿来玩玩吧。
另外有的时候机器上没有音箱,但还想听个音乐什么的,就自己编个简谱然后自已听吧。呵呵

再送几 ...


1 35 5 6 5  3 15553 1 tttttt 1  t1 111tyu1 1 31235 5 3313532 2./beep.bash: line 40: beep: command not found
./beep.bash: line 44: beep: command not found
./beep.bash: line 48: beep: command not found
./beep.bash: line 48: beep: command not found



bash-3.0下which 结果:
which: no beep in (/......)
这个为什么? 应该有的吧!
作者: walkerxk    时间: 2008-08-06 22:40
标题: 回复 #21 dreamone503 的帖子
LZ说的先装beep的。
作者: walkerxk    时间: 2008-08-06 22:44
很好的脚本,+10鼓励

[ 本帖最后由 walkerxk 于 2008-8-6 22:45 编辑 ]
作者: br9852000    时间: 2008-08-07 02:29
愿她开心快乐!!
作者: gao_linfeng    时间: 2008-08-07 13:44
谢谢大家!
我当初用beep时本来是想发出超声,因为我知道有一种超声可以驱赶蚊子,但没想到他只支持从1-19999的频率,因为这个是正常人的频率,如果低于1就是次声,反之大于19999则是超声,但beep不能发出超声,后来我就总结了一下发现不同频率可以对应发出不同的音调,结果就写了这个脚本.
作者: blackold    时间: 2008-08-07 14:27
俺落后了落后了!!
作者: walkerxk    时间: 2008-08-07 15:03
是20-20000吧,
另外,还可以复杂一点,用两个参数,一个时间,一个频率,不然感觉太死板了。
作者: gao_linfeng    时间: 2008-08-07 17:28
标题: 回复 #27 walkerxk 的帖子
我没有试关于beep命令是否支持时间,但他有个参数是-l关于响声长度的。
我的第一个脚本在执行时开始他会让你输入单个音调的音长,也是那个-l参数的值,但第二个脚本因为要配合简谱文件使用,这样如果想让不同音发出不同响声那就要在简谱文件中输入关于时间的参数,这样的话简谱文件就麻烦了,所以这个脚本还是简单了点。反正这个只是pc喇叭发声,本来也不太好听。呵呵,就凑合了。
作者: walkerxk    时间: 2008-08-07 17:37
我觉得乐谱文件可以
200 100
150 150
这样,或者是200#100@155#150@格式不是问题。
作者: gao_linfeng    时间: 2008-08-07 18:37
大家改改看吧,也许还能加入新的功能,这个脚本其实不难,主要是利用beep发声有点小创意
作者: fucj    时间: 2008-08-08 13:58
哎,为什么我的终端怎么搞也不出声音!!!!
作者: gao_linfeng    时间: 2008-08-08 14:00
楼上的你看看先执行一下beep看看有没有声,如果没有看看你加没加载pcspkr模块
作者: fucj    时间: 2008-08-08 14:05
lz在啊,我用beep命令没有声音出现!请问lz如何加载pcspkr,我用alsaconf命令可以看到pc speaker选项,我以为这个模块加载了,但是在shell里打\a也一直没有声音,不知道怎么解决,请lz赐教!!!!
作者: gao_linfeng    时间: 2008-08-08 14:10
modprobe pcspkr
作者: fucj    时间: 2008-08-08 14:11
好,我回去试试,谢谢拉!!!!
作者: ruochen    时间: 2008-08-11 08:11
很不错的
有时间的时候自娱自乐
作者: wxfjx    时间: 2008-08-11 09:33
真的服了,高手!!
作者: fairchilddb    时间: 2008-08-14 07:18
标题: 回复 #1 gao_linfeng 的帖子
re     very cool
作者: rishairu    时间: 2008-08-14 09:12
真是很不错的 说 虽然我看不懂
作者: realmon    时间: 2008-08-14 09:38
楼主女儿生日快乐
作者: 心影    时间: 2008-08-14 16:35
祝福小宝贝生日快乐!
作者: gao_linfeng    时间: 2008-08-14 21:34
再次谢谢大家的祝福!

没想到这个脚本能得到大家这么积极的回复,可能是创意好点吧,其实主要是感谢beep的作者,如果没有他的这款软件,我也弄不成这个脚本呀。

另外这个脚本中只有低、中、高三种音,每种音是7个音节,所以一共就21个音节,不过都是常用的,但还有一些别的音节我没有输入进去,因为毕竟不是搞专业的,找不准那么多音。再说pc喇叭的发音也不是那么好听的,就是没事儿的时候自娱自乐吧!

小宝贝.JPG (31.94 KB, 下载次数: 30)

小宝贝.JPG

作者: 无声无息    时间: 2008-08-14 22:48
标题: 回复 #42 gao_linfeng 的帖子
太可爱了
^_^
作者: Shell_HAT    时间: 2008-08-15 00:52
学习&祝福
作者: acheng170    时间: 2008-08-15 18:04
生日快乐。
作者: kewenliang    时间: 2008-08-16 14:39
祝你女儿生日快乐
作者: li2002    时间: 2008-09-27 14:50
在远程终端上(如网络终端)可以让终端发出音乐声吗
作者: hotsnow    时间: 2008-09-27 15:05
生日快乐!呵呵
作者: 迷離    时间: 2008-09-27 16:29
Happy Birthday!
作者: sailer_sh    时间: 2009-07-02 17:14
非常好的程序,谢谢楼主
作者: brantc    时间: 2009-07-02 17:29
楼主太强了!
祝你女儿生日快乐
作者: kwokcn    时间: 2009-07-02 17:31
这小娃娃真可爱~
作者: aleng    时间: 2009-07-02 17:32
dos,win下,有用pc喇叭播放wav文件的软件。
既然这么重要的日子,不发点企业级的干货脚本,发这些没用的,哗众取宠的东西。
难道你女儿大点后你想让她学【弹键盘】?


[ 本帖最后由 aleng 于 2009-7-3 16:13 编辑 ]
作者: lishuai860113    时间: 2009-07-03 09:49
这个真的要顶




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2