基于C语言的音乐谱曲技巧与应用研究1引言计算机谱曲是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语言中可用函数sou
d频率来实现。第二,如何表示和控制每个音的音长(或节拍)。在确定音调以后,接下来就是确定音拍即音的长度,C语言中可以通过延时函数delay时间来控制。第三,乐谱的表示与演唱。如果,我们把上面的音调和音拍合起来称成为一个音,用C语言的一个结构体来表示,那么,一首歌即一首曲子可以看成是一串音组成的,C语言中可以用这些音的数组来表示,即一个结构数组。顺序发出数组中的每个元素所代表的音,便完成了一首优美歌曲的演唱。本文第二节探讨了基于C语言的音调、音拍和乐谱的表示方法和技巧,并给出了一种富有创意性的,适合人机交流的音调表示方法。第三节讨论了基于C语言的乐谱存储方法。第四节讨论了基于C语言的乐曲演唱编程技巧。第五节总结了C语言谱曲的局限性和改进的方向。2基于C语言的乐谱表示与实现21乐谱的表示简谱中音高(或音调)的表示是通过1到7这7个阿拉伯数字作为音名,再加上表示升降的符号“.”来表示的。例如,中音re写成2,低音re写成2,高音re写成2,最高音re写成2这些都是C语言无法识别的符号。怎样把这些符号变成C语言能识别的数据呢?基本方法是用一个结构体的两个域来表示,一个域用阿拉伯数字“2”表示音名2,一个域表示升降符号,分别用符号“L”“M”“H”和“Z”表示低音、中音、高音和最高音。、、简谱中音长(或节拍)的表示是通过音名加后划线和下划线来表示的。例如,2、2、2和2、2分别表示1拍、2拍、3拍和半拍、四分之一拍,假设1拍的时值为1秒,那么,上面5个音的音长分别为1秒、2秒、3秒和05秒、025秒。在C语言中,我们可以在上面的结构体中增加一个浮点数域来表示音长。综上所述,我们把一个音定义为拥有3个域的结构体,3个域分别表示音的音名、音的高低和音的时值。用C语言具体描述如下:typedefstructchar
amecharhighfloatbeatSOUNDr