首先我们对谱曲简单了解一下计算机谱曲是C语言程序设计的重要应用,涉及到C语言的几个重要的数据类型和三种控制结构。通过对简谱的分析,要用计算机谱曲必须解决以下几个问题:
首先,如何表示并发出28个不同的音即音高(或音调)。简谱涉及的基本音名是1、2、3、4、5、6、7等7个音,英文用C、D、E、F、G、A、B表示,自然大调式中则采用七个基本音级分别唱作do、re、mi、fa、sol、la、si(或ti),而每个音名有低音、中音、高音和最高音之分,共为28个音,每个音对应一个固定的频率,C语言中可用函数sound(频率)来实现。
第二,如何表示和控制每个音的音长(或节拍)。在确定音调以后,接下来就是确定音拍即音的长度,C语言中可以通过延时函数delay(时间)来控制。
第三,乐谱的表示与演唱。如果,我们把上面的音调和音拍合起来称成为一个音,用C语言的一个结构体来表示,那么,一首歌即一首曲子可以看成是一串音组成的,C语言中可以用这些音的数组来表示,即一个结构数组。顺序发出数组中的每个元素所代表的音,便完成了一首优美歌曲的演唱。
举个简单例子
下面是歌曲《生日快乐》中的一段曲子:
用C语言表示如下:
SOUND music[11]={{5,M,0.5},{5,M,0.25},{5,M,0.25},{6,M,1},{5,M,1},{1,M,1}};
5·表示为{5,M,0.5},{5,M,0.25}。5表示音名为5,音调为中音M,二分之一节拍。点表示为延续其自身的一半的节拍,就是二分之一的二分之一,为四分之一节拍{5,M,0.25}
要演唱一首乐曲,首先要实现单音的发声。一个单音由两部分控制,一部分是音调(或音高),一部分是节拍(或时值)。音调又由7个音名值和4个音高升降值确定,分别对应28个不同的频率。
下表为音调和频率的对应表: