c语言的乐谱有几种形式

Python018

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语言中,我们可以在上面的结构体中增加一个浮点数域来表

建议看下高级编程技术这本书

目录如下:

1 文本的屏幕输出和键盘输入

1.1 文本的屏幕输出

1.2 键盘输入

1.3 问题实现

1.4 高级应用——菜单实现

实验一

2 图形显示方式和鼠标输入

2.1 图形显示

2.2 鼠标的使用

2.3 问题实现

实验二

3 屏幕图象与动画技术

3.1 一个简单的实现方法

3.2 利用动态开辟图视口的方法

3.3 利用屏幕图象存储再放的方法

3.4 利用页交替的方法

3.5 问题实现

实验三

4 中断技术

4.1 编写自己的中断程序

4.2 问题实现

4.3 其它应用——硬中断演示秒表程序

实验四

5 发声技术

5.1 声音函数

5.2 计算机乐谱

5.3 问题实现

实验五

6 汉字显示技术

6.1 汉字编码

6.2 问题实现

实验六

我对音乐基本一窍不通,但是我知道,在用C编写的程序中如果不考虑使用D/A转换的话,能改变的只有发声的频率和发声的时间,给你个蜂鸣器的例子看看while(unsigned int L){ a = ~a delay(P)}void delay(unsigned int P){ while(P--);}这个是控制蜂鸣器发声的一般原理 参数L决定声音时间的长短 P决定声音的频率 这样一来通过控制L和P酒可以发出不同声调,不同长度的声音了 拉长L就能实现长音 其他的关于音乐的我不清楚你可以自己摸索