c语言谱曲软件,基于C语言的音乐谱曲技巧与应用研究

基于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语言中可用函数sound(频率)来实现。第二,如何表示和控制每个音的音长(或节拍)。在确定音调以后,接下来就是确定音拍即音的长度,C语言中可以通过延时函数delay(时间)来控制。第三,乐谱的表示与演唱。如果,我们把上面的音调和音拍合起来称成为一个音,用C语言的一个结构体来表示,那么,一首歌即一首曲子可以看成是一串音组成的,C语言中可以用这些音的数组来表示,即一个结构数组。顺序发出数组中的每个元素所代表的音,便完成了一首优美歌曲的演唱。本文第二节探讨了基于C语言的音调、音拍和乐谱的表示方法和技巧,并给出了一种富有创意性的,适合人机交流的音调表示方法。第三节讨论了基于C语言的乐谱存储方法。第四节讨论了基于C语言的乐曲演唱编程技巧。第五节总结了C语言谱曲的局限性和改进的方向。

2.基于C语言的乐谱表示与实现 2.1乐谱的表示

简谱中音高(或音调)的表示是通过1到7这7个阿拉伯数字作为音名,再加上表示升

1-28-png_6_0_0_166_1051_212_32_892.979_1262.879-188-0-0-188.jpg

”来表示的。例如,中音re写成2,低音re写成,高音re写成,最高音re写成,这些都是C语言无法识别的符号。怎样把这些符号变成C语言能识别的数据呢?基本方法是用一个结构体的两个域来表示,一个域用阿拉伯数字“2”表示音名2,一个域表示升降符号,分别用符号“L”、“M”、“H”和“Z”表示低音、中音、高音和最高音。

简谱中音长(或节拍)的表示是通过音名加后划线和下划线来表示的。例如,2、2-、2—和2分别表示1拍、2拍、3拍和半拍、四分之一拍,假设1拍的时值为1秒,那么,上面5个音的音长分别为1秒、2秒、3秒和0.5秒、0.25秒。在C语言中,我们可以在上面的结构体中增加一个浮点数域来表示音长。

综上所述,我们把一个音定义为拥有3个域的结构体,3个域分别表示音的音名、音的高低和音的时值。用C语言具体描述如下:

typedef struct { char name; char high; float beat; } SOUND;

解决了一个音的表示,接下来就是如何表示一首乐曲。简单地说,一首乐曲就是连续的一串音,在C语言中可以用一个数组表示。C语言的描述如下:

SOUND music[100];

例如,下面是孟庭苇的歌曲《羞答答的玫瑰静悄悄的爱》中的一段曲子:

图1

用C语言表示如下:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值