三维图形化C++趣味编程
上QQ阅读APP看书,第一时间看更新

第三章 抑扬顿挫,余音绕梁

奏高山流水

传说先秦的琴师伯牙一次在荒山野地弹琴,樵夫钟子期竟能领会琴意,赞道:“峨峨兮若泰山,洋洋兮若江河。”伯牙惊道:“善哉,子之心而与吾心同。”故有高山流水之曲,比喻知己或知音,也比喻乐曲高妙。

Dev-C++智能开发平台也可以编程演奏音乐。

【例3.1】Windows系统自带了几种声音效果,编程让计算机喇叭输出这些声音效果。

参考程序如下所示。

系统自带音效可以用beep(1)、beep(2)、beep(3)、beep(4)来表示。

如果暂停一段时间,例如播放两个音符的中间暂停10毫秒(1000毫秒=1秒),可以用Sleep(10);显然暂停0.5秒为Sleep(500)。

开始学音乐时,老师都会教我们唱do re mi fa so la si,在音乐中它们是非常重要的七个音,而最基本的C大调音阶就是靠它们组成的,如图3.1所示。

图3.1

Dev-C++智能开发平台可以编程将这七个音用高音、中音、低音的方式来播放。高音、中音、低音分别用1,0,-1来表示,而do re mi fa so la si分别用1,2,3,4,5,6,7来表示。

例如Sound(1,0,0.5);表示do音用中音来播放,时长为0.5秒。Sound(2,-1,0.8);表示re音用低音来播放,时长为0.8秒。

【例3.2】试编程播放《两只老虎》的乐曲。《两只老虎》的简谱如图3.2所示。

图3.2

参考代码如下所示:

程序中第2行用#define定义常量T的值为1.3,常量的值在程序运行时不会被改变,此后凡是在该源文件中出现的T都代表1.3

注意该行语句末尾是没有分号的。

我看明白了,因为代码中Sound语句里的播放时间均为一个数值与T的乘积,所以,如果我改变T的值,乐曲的弹奏速度也会随之发生变化。它的好处是一改全改。

任务 【题3.1】请从网络上选择一个自己喜欢的曲谱,试通过编程的方式播放该曲谱,例如《祝你生日快乐》的简谱如图3.3所示。

图3.3