5、一代女皇武则天

接下来的几天,高一年级最火热的话题就是炮打飞机了,由于前几届下发了教材,每个班或多或少都知道一些,而今年却只有一人学习并且编写了出来,所以刹那间木鸿飞成了高一年级的风云人物,不住的有人在他背后指指点点,时不时还有几个外班的同学过来确认消息,顺便PMP(笔者按:并非软件项目管理,而是拍马屁)一番。呵呵,木鸿飞是人逢喜事精神爽啊,被吹得飘飘然的,一度自以为成了万千少女崇拜的偶像,不禁喜洋洋起来。

只可惜好景不长,大家对木鸿飞的关注如潮水一般涌来,又如潮水一般退去,只几天功夫,当红的明星就被打入冷宫,很少有人再提及。其实这也是历史的必然,首先当时电脑尚未走下神坛,大家只能到机房才可以使用,而机房一周才开放一次,长期不接触很容易使人降温乃至遗忘,“两情若在长久时,又岂在朝朝暮暮”的情感生活并不适合大多数人。其次炮打飞机毕竟是个简单之极的游戏,缺乏华丽的界面,没有优美的音乐,更不具备激烈的对战,就如同一份枯燥而无内涵的报纸,若非阅读资源极度匮乏,没有人会选择观看。最后,高中生学习本来就紧张,计算机只不过是紧张生活的一份调味点心而已,现在点心尝过了,甜味知道了,该是继续吃正餐的时候了。

其实,木鸿飞编程的目标并非想赚取大家关注的目光,而是因为自从初学BASIC,木鸿飞就已经深深的爱上了计算机编程,系统分析思维,程序设计思想,代码编写方法,一切的一切,虽然只是初次见面,却是那么的熟悉,仿佛一颗早已埋藏在心底的种子,春风吹过,生根发芽,不住的共鸣。至于成为焦点,不过是意外的奖励而已。

“君似明月我似雾,雾随月隐空留露。君善抚琴我善舞,曲终人离心若堵。只缘感君一回顾,使我思君朝与暮。魂随君去终不悔,绵绵相思为君苦”。木鸿飞就如热恋中的人儿,一首古相思曲正好道出了他的心声,编程上瘾啊,一日不见,如三秋兮,几天没有接触计算机,木鸿飞早已手痒不止,只希望能够再编写几个趣味程序。可是炮打飞机已成过往,选择什么题材好呢?教材中的实例一个个在木鸿飞脑中翻滚,被满怀希望的取出又被无情的删除,最终它们定格到一个瞬间。

“就是它了!”木鸿飞大手一挥,确定了目标——音乐演奏程序

名称:模拟音乐发声程序。

功能:利用计算机演奏一曲音乐。

原理:

1sound函数可以发音,其参数为频率,如sound(523)能够发出频率为523HZ的声音。而音乐中“多”的频率也是523HZ,所以用这个函数可以发出“多”音,同理更改参数则发出其他声音,比如“2”、“3”、“4”、“5”、“6”、“7”的频率分别为587659698784880988

同理也可以发出其他的声音。

2)音乐中的节拍可以用延时表示,一个节拍大约2400毫秒,所以全音符delay(2400),四分音符delay(600),十六分音符则delay(150)

实例:以下乐谱的程序代码为:(4/4拍)

一代女皇武则天——计算机达人成长之路(12)连载_ 计算机

sound(659);delay(300);unsound();   模拟八分音符的“3

sound(784);delay(300);unsound();   模拟八分音符的“5

sound(659);delay(300);unsound();   模拟八分音符的“3

sound(587);delay(300);unsound();   模拟八分音符的“2

sound(659);delay(1200);unsound();  模拟二分音符的“3

不得不说,木鸿飞是个五音严重不全的人,他全身上下就没有几个音乐细胞。记得有一次木鸿飞到下属单位出差,下属单位热情招待,K歌自然是必不可少,于是一伙人直冲到量贩式×××,接待方邀请木鸿飞高歌一曲,但木鸿飞自家人知自家事,一再表示嗓音不好不是自己的错,但拿出来吓人就不对了。接待方只以为是木鸿飞谦虚,于是继续发扬劝酒的风格劝歌。木鸿飞何曾经过如此架势,马上败下阵来,真真切切勉为其难的K歌一首。当木鸿飞那比海豚还怪异的嗓门、任意妄为的旋律环绕在包厢时,下属单位领导因为喝酒而通红的脸刷的一下全白了。一曲终结,该领导重新喝上一杯酒,恢复脸色的红润,然后照惯例需要夸奖一下歌唱者,领导说道:“木高工唱歌,这个声音特别的……”,一阵停顿,明显思考了一下,“啊,木高工唱歌,这个节奏把握的特别……”,又是一阵停顿,显然以上思考均欠佳,只得另外选择闪光灯:“总之,其实,唱得与曾逸差不多……”,此后直到曲终人返,木鸿飞一路清闲,再无人邀请K歌。

计算机唱歌给了木鸿飞一个弥补缺陷的机会,反正的电脑发音,不要自己发声,应该不至于那么难听。但是选择哪首歌好呢,目前正在热播的电视连续剧《一代女皇武则天》主题歌似乎很好听,木鸿飞心中有了计较。只是歌曲的乐谱在哪呢?当时不像现在,网络如此发达,一切资料只需谷歌一下即可,要选择乐谱,只能走手抄渠道。一般来讲,美女都能歌善舞而且具有美术天赋,于是木鸿飞将目光投向了他后面的同桌——一代美女何丫丫。

MM不是一般的人,她极具歌唱天赋。当然木鸿飞也不是一般的人,他是“极具唱歌天赋”的取反。所以,当木鸿飞借歌本(记载歌曲简谱的手抄本)时,何MM诧异的表情不亚于看到黄河之水倒流,又或是惊闻美国总统请她共进晚餐,她不顾男女之防的摸了摸木鸿飞的额头,自言自语道:“好像没有发烧啊。”

其实只要声明是编程序需要,就可以顺利的借到歌本,但为了那一点点神秘性,木鸿飞硬是没有透露,于是引发了下面的剧本:

剧本名称:木鸿飞连翻18个跟斗、转体360度、雪夜跪地裸求《一代女皇》密谱

(一名不愿透露姓名的读者按:以上剧本名不副实,纯属标题党。)

出场人物:木鸿飞(男),何丫丫(女)

木鸿飞(摆在一个自以为酷的姿势):“丫丫大美女。”

何丫丫(直接翻了一个白眼):“拜托请不要学健美明星,你没有肱二头肌,就别学大力水手摆健美动作。”

木鸿飞(赶紧恢复正常姿势):“请借歌本一用。”

何丫丫(吃惊,吃惊,再吃惊):“我没有听错吧,貌似你想要歌本?”。

木鸿飞(缓缓而有力地点头):“YES!

何丫丫(眼神闪烁着警惕的光芒):“你不是准备吃饱了晚饭没事做,又同鸭子到楼顶去唱歌吧。上次你们俩唱歌,我一个晚自习没有心思学习,晚上还连连做梦。”

木鸿飞(洋洋自得):“貌似我没有那么大魅力吧,唱个歌就能对你造成这么大的影响。何同学,少壮不努力,老大徒伤悲,今天不努力学习,明天努力找学校。作为高中生,你要意志坚定,一心扑在学习上,不要被别人所吸引。虽然本人样子帅了一点,个子高了一点,成绩好了一点,为人诚实了一点,……”。

何丫丫(打断木鸿飞):“停!给你点阳光你就灿烂,给你点洪水你就泛滥。你以为你是阳光灿烂猪八戒啊!”

木鸿飞:“你不是听我唱歌后睡不着觉吗,我觉得我有义务提醒你好好学习天天向上。”

何丫丫:“提醒你个大头鬼,我是被你们上次搞得噪声污染,恶心的睡不着觉。你们以后可不能再制造噪音污染了,不然我代表环保部门消灭你们。”

木鸿飞(一脸无辜):“我只不过想借你的歌本,看看里面有没有《一代女皇武则天》的乐谱,关环保什么事情。”

何丫丫:“什么?一代女皇武则天,我的天哪!如果你唱摇滚,我觉得还勉强可以听一听。唱武则天,鸡皮疙瘩掉一地。”

木鸿飞(皱眉思考,觉得侧面攻击):“丫丫同学,知道人世间最悲哀的事情是什么吗?”

何丫丫(警惕而且疑惑):“是什么?”

木鸿飞:“歌本抄了,却没有人唱。”

何丫丫:“知道人世间最最悲哀的事情是什么吗?”

木鸿飞:“不知道。”

何丫丫:“歌本抄了,却被曾哥拿去唱了。”

木鸿飞:“借不借罗?”

何丫丫:“不借!”

木鸿飞:“这个可以借。”

何丫丫:“这个真不借。”

木鸿飞:“这个必须借。”

“……”

经过一番讨价还价,木鸿飞在保证月圆之夜不登上教室之巅拿着课本鬼哭狼嚎,并且还答应要给丫丫一个与武则天相关的意外惊喜后,终于拿到了久违的乐谱。

-----------------------------------------------------------------------------------------------------------------

时间一天一天过,又是一周上机日,这天太阳当空照,花儿对他笑,小鸟说早早早,木鸿飞你为什么跑跑跑,我要用电脑,决不能迟到,编程序写代码,计算机要演奏音乐了。

音乐演奏程序没有什么难度,一旦明白了其原理,更多的只是个体力活。早在上机前木鸿飞就已经将乐谱整理为代码,现在只要照着敲上去就行了。整个过程一点也不难,简直就是心情愉悦的打字练习。很快,木鸿飞输入了代码,在更改了几次笔误后,执行了程序。

“娥眉耸参天,丰颊满光华,气宇非凡是慧根,唐朝女皇武则天。

美冠六宫粉黛,身系三千宠爱,善于计谋城腑深,万仗雄心难为尼。

君临天下威风凛凛,憔悴心事有谁知怜,问情何寄泪湿石榴裙,看朱成碧痴情无时尽。

纵横天下二十年,深宫迷离任凭添,两面评价在人间,女中豪杰武则天!”

机房里突然想起了音乐声,虽然只闻曲调而无人声,但所有同学都听出这就是一代女皇武则天的主题曲。大家循声望去,无数道目光聚焦处,木鸿飞腼腆的抬起头来。

丫丫跑了过来,“野蛮”地朝木鸿飞肩上打了一记粉拳,“不错啊。比你唱的好多了!你早点说是编程序用的吗,我还以为是你自己用呢。这种事情你要说出来,你不说我怎么知道你要不要,不可能你要的东西我不给你,你不要的东西我硬要给你,大家讲道理,对不对,……”何美女兴奋地讲了很多,她先是对木鸿飞大肆夸奖一番,然后论述了自己借歌本的功劳,最后强烈要求木鸿飞再编写一曲小虎队的歌,于是又引发了下面的剧本:

剧本名称:何丫丫看贴不回帖还催楼主更新

出场人物:何丫丫(女),木鸿飞(男)

何丫丫(露出笑容):“木木,很不错,你编程序的水平真高。可惜现在的我不认识比尔·盖茨,要不我一定夸奖你比比尔·盖茨还牛!”

木鸿飞(摸摸后脑勺):“呵呵,呵呵,谢谢夸张,谢谢夸张,你可以继续使用对比和排比的修辞手法继续夸张我。”

何丫丫(嗲声嗲气):“你能不能编程再唱一首歌曲,我喜欢听小虎队的。”

木鸿飞(很为难):“不行啊,我没有带歌本来,不知道乐谱,没法编啊。”

何丫丫(继续嗲声嗲气):“那你为人家编写一个钢琴程序,就是由人家在键盘上弹,电脑像钢琴一下发声。”

木鸿飞(很享受的神情):“这个书上面没有,咱不专业,我不会啊。”

何丫丫:“这个可以会!”

木鸿飞:“这个真不会。”(木鸿飞见到丫丫又欲发飙,连忙问道)“问你个问题,一个美女和一个丑女同时撒娇,你觉得谁会得逞。”

何丫丫(疑惑):“我觉得是美女。”

木鸿飞:“错!你要研究人们的心里,美女撒娇别有一番风味,人们都想多看看,而丑女撒娇就只有恶心,人们都想快点结束。所以丑女撒娇一般容易得逞。”

何丫丫(点点头):“我明白了。”(面容突然一变,恶狠狠的露出牙齿,举起粉拳,用杀人的目光盯着木鸿飞,整个一野蛮女同学的剧照)“别说怎么多废话,你到底能不能遍?”

木鸿飞(吓得缩缩头):“能,太能,太阳能。”

何丫丫(怒目圆瞪):“那你到底遍不编?”

木鸿飞:“编,我编,我编编编。”

……

钢琴程序的原理相当简单:当按下“1”键时,电脑发出“多”的声音,当松开“1”键时,就中止发音,其他每种音阶都有对应的按键。因此编写过程相当顺利,不一会而丫丫同学就开始弹奏了。不得不说丫丫弹钢琴还是有一定天赋的,一些简单的曲目开始在机房中飘荡,为这个寂寞的机房,乃至寂寞的高中,带来了一丝丝清凉。

时光飞逝,多年以后,丫丫早已嫁作人妇,木鸿飞也有了自己的妻子。丫丫越发成熟高贵,却野蛮依旧,木鸿飞稳重有加,但腼腆亦然。老同学见面,相逢一笑,谈起当年设计程序的往事,丫丫说木鸿飞当年设计程序的动力,来源于她的推动,就是希望能在她这个美女面前好好的表现,才把编程的天赋发挥得淋漓尽致。木鸿飞则拒不承认,他认为自己内心有着深深的编程欲望,才会不断的设计新程序,不断的挑战自我,至于获取众人的关注和美女的青睐,不过是额外的奖励罢了,有则享受无则不求。因为在编程的道路上,也许偶有鲜花,偶有欢唱,但不变的永恒永远是寂寞。只有耐住寂寞、战胜寂寞和欣赏寂寞,才能在编程之路上一路畅行。

上一篇   目录  下一篇

ps1:近5千字更新奉上。

ps2:音乐演奏程序,供试玩。 本次演奏的是周杰伦的菊花台。

ps3:附上以上程序的源代码。这是在Borlandc++3.1  for dos上调试通过的,如果使用TC2.0编译,请自己稍做修改。另外windows环境中不支持sound和delay,故请不用使用Vc++,C++builder或Dev-C++编译,硬要在Windws下编译,请使用替代函数,比如Beep和Sleep等。

 

  1. #include <dos.h>  
  2. #include <stdio.h>  
  3.  
  4. int main(void)  
  5. {  
  6.     int yy[][8] =  
  7.     {  
  8.         {0, 262, 296, 330, 349, 392, 440, 494},  
  9.         {0, 523, 587, 659, 698, 784, 880, 988},   //1234567  
  10.         {0, 1047 ,1175,1319,1397,1568,1760 ,1976}  
  11.     };  
  12.     int yq[][3] =  
  13.     {  
  14.         0,0,4,  
  15.         0,0,4,  
  16.         0,0,4,  
  17.         1,1,2,  
  18.         1,2,2,  
  19.         1,3,4,  
  20.         1,3,2,  
  21.         1,5,2,  
  22.         1,6,4,  
  23.         1,6,2,  
  24.         2,3,2,  
  25.         2,2,2,  
  26.         2,1,2,  
  27.         2,1,2,  
  28.         1,6,2,  
  29.         1,5,8,  
  30.         1,6,2,  
  31.         1,5,2,  
  32.         1,3,2,  
  33.         1,2,2,  
  34.         1,1,4,  
  35.         0,6,2,  
  36.         1,1,2,  
  37.         1,2,4,  
  38.         1,2,2,  
  39.         1,3,2,  
  40.         1,2,4,  
  41.         1,1,2,  
  42.         1,2,2,  
  43.         1,3,4,  
  44.         1,3,2,  
  45.         1,5,2,  
  46.         1,6,4,  
  47.         1,6,2,  
  48.         0,3,2,  
  49.         2,2,2,  
  50.         2,1,2,  
  51.         2,1,2,  
  52.         2,2,2,  
  53.         2,1,8,  
  54.         1,5,4,  
  55.         1,5,2,  
  56.         1,3,2,  
  57.         1,7,2,  
  58.         2,1,2,  
  59.         1,1,2,  
  60.         1,2,2,  
  61.         1,3,4,  
  62.         1,2,6,  
  63.         1,1,2,  
  64.         1,1,16,  
  65.         1,1,16,  
  66.         1,3,4,  
  67.         1,3,2,  
  68.         1,2,2,  
  69.         1,3,4,  
  70.         0,0,4,  
  71.         1,3,2,  
  72.         1,5,2,  
  73.         1,3,2,  
  74.         1,2,2,  
  75.         1,3,8,  
  76.         1,1,4,  
  77.         1,1,2,  
  78.         1,2,2,  
  79.         1,3,2,  
  80.         1,5,2,  
  81.         1,3,4,  
  82.         1,2,4,  
  83.         1,2,2,  
  84.         1,1,2,  
  85.         1,2,4,  
  86.         0,0,4,  
  87.         1,3,6,  
  88.         1,5,1,  
  89.         1,3,1,  
  90.         1,6,2,  
  91.         1,5,2,  
  92.         1,5,4,  
  93.         1,6,2,  
  94.         1,5,2,  
  95.         1,5,2,  
  96.         1,3,2,  
  97.         1,5,6,  
  98.         1,5,2,  
  99.         1,3,4,  
  100.         1,2,2,  
  101.         1,3,2,  
  102.         1,5,4,  
  103.         1,3,2,  
  104.         1,2,2,  
  105.         1,2,4,  
  106.         1,2,2,  
  107.         1,1,2,  
  108.         1,2,8,  
  109.         1,3,4,  
  110.         1,3,2,  
  111.         1,2,2,  
  112.         1,3,4,  
  113.         0,0,4,  
  114.         1,3,2,  
  115.         1,5,2,  
  116.         1,3,2,  
  117.         1,2,2,  
  118.         1,3,8,  
  119.         1,1,4,  
  120.         1,2,1,  
  121.         1,2,2,  
  122.         1,3,2,  
  123.         1,5,2,  
  124.         1,3,4,  
  125.         1,2,4,  
  126.         1,2,2,  
  127.         1,1,2,  
  128.         1,2,4,  
  129.         0,0,4,  
  130.         1,3,6,  
  131.         1,5,1,  
  132.         1,3,1,  
  133.         1,6,2,  
  134.         1,5,2,  
  135.         1,5,4,  
  136.         1,6,2,  
  137.         1,5,2,  
  138.         1,5,2,  
  139.         1,3,2,  
  140.         1,5,8,  
  141.         1,3,4,  
  142.         1,2,2,  
  143.         1,3,2,  
  144.         1,5,4,  
  145.         1,3,2,  
  146.         1,2,2,  
  147.         1,2,2,  
  148.         1,1,2,  
  149.         1,1,12,  
  150.         1,1,2,  
  151.         1,2,2,  
  152.         1,3,4,  
  153.         1,3,2,  
  154.         1,5,2,  
  155.         1,6,4,  
  156.         1,6,2,  
  157.         2,3,2,  
  158.         2,2,2,  
  159.         2,1,2,  
  160.         2,1,2,  
  161.         1,6,2,  
  162.         1,5,8,  
  163.         1,6,2,  
  164.         1,5,2,  
  165.         1,3,2,  
  166.         1,2,2,  
  167.         1,1,4,  
  168.         0,6,2,  
  169.         1,1,2,  
  170.         1,2,4,  
  171.         1,2,2,  
  172.         1,1,2,  
  173.         1,2,4,  
  174.         1,1,2,  
  175.         1,2,2,  
  176.         1,3,4,  
  177.         1,3,2,  
  178.         1,3,5,  
  179.         1,6,4,  
  180.         1,6,2,  
  181.         2,3,2,  
  182.         2,2,2,  
  183.         2,1,2,  
  184.         2,1,2,  
  185.         2,2,2,  
  186.         2,1,8,  
  187.         1,5,4,  
  188.         1,5,2,  
  189.         1,3,2,  
  190.         1,7,2,  
  191.         2,1,2,  
  192.         1,1,2,  
  193.         1,2,2,  
  194.         1,3,8,  
  195.         1,2,8,  
  196.         1,1,16  
  197.  
  198.           
  199.           
  200.     };  
  201.     for (int i=0; i<sizeof(yq)/(sizeof(int)*3); i++)  
  202.     {  
  203.         sound(yy[yq[i][0]][yq[i][1]]);  
  204.         delay(150*yq[i][2]);  
  205.         nosound();  
  206.     }  
  207.  
  208.    return 0;  
  209. }  
  210.  
  211.