C语言版“最炫民族风”

昨天看到有人用MATLAB合成出了《最炫民族风》,马上想到跟风,看能不能再恶搞一把,来个其他版本的。自然想到用Turbo C编的一个播放器(其实是山寨飞哥在Turbo Pascal下的作品)。用的是超级老古董Turbo C 2.0,1988年的产品了,比我还老。不过之所以选古董是有原因的,里面有一个dos.h头文件,可以调用电脑主板上的蜂鸣器发声(台式机的“哔”声就是这个发出来的,现在的笔记本电脑就直接用音响发了),于是乎就用这东西拿下神曲了。程序和乐曲是分开的,乐曲以文件的形式读入,很要命地把《最炫民族风》全曲都输了进去。至于调号和变调我就懒得管了,统统C大调。效果放在最后面,大家听的时候注意保护耳朵。

程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <conio.h>

int Tone[7][7] = {{0,0,65,131,262,523,1047},
{0,0,73,147,294,587,1175},
{0,0,82,165,330,659,1319},
{0,0,87,175,349,698,1397},
{0,0,98,196,392,784,1568},
{0,0,110,220,440,880,1760},
{0,0,123,247,494,988,1976}};    /CDEFGAB/

int solm,oct,del;
char a[6]={‘0’};

int play()
{
int a;
#define TIME 15000
sound(Tone[solm-1][oct+1]);
for (a=1; a<=del; a++)
delay(TIME);
nosound();
}

int main()
{
int play();
int i,j,k;
FILEfp;
fp = fopen(“C:\turboc2/Play/zxmzf1.txt”,”r”);
while(a[0] != ‘q’)
{
oct = 4;
del = 8;
for (k=0; k<=5; k++)
a[k] = ‘0’;
fscanf(fp,”%s”,&a);
solm = atoi(&a[0]);
for (i=1; i<=5; i++)
{
if(a[i] == ‘.’)
oct++;
else if(a[i] == ‘,’)
oct–;
else if(a[i] == ‘s’)
del = del/2;
else if(a[i] == ‘l’)
del = del
2;
}
if(a[0] == ‘q’)
printf(“End.n”);
else
{
printf(“%d %d %dn”,solm,oct,del);
play();
}
}
getch();
}


以下是读入的内容————《最炫民族风》:
3 6,s 6,s 1 3 2s 2ss 3ss 2s 1s 2s 1s 6, 3 6,s 6,s 1 3 5s 2ss 3ss 2s 1s 2s 1s 7,s 5,s 3 6,s 6,s 1 3
2s 2ss 3ss 2s 1s 2s 1s 6,s 5,s 3 6,s 6,s 1 3 5s 3s 3 3 0 6, 6,s 5,s 6, 6,s 1s 1 2s 1s

6, 0 1 1s 5,s 1s 2s 3s 5s 5s 3s 2 3 0 6s 6s 6s 5s 3s 3 1s 6,s 6,s 6,s 3s
2 0 3s 3s 5s 3s 2s 3s 2s 1s 6, 5, 6, 0

6, 6,s 5,s 6, 6,s 1s 1 2s 1s

6, 0 1 1s 5,s 1s 2s 3s 5s 5s 3s 2 3 0 6s 6s 6s 5s 3s 3 1s 6,s 6,s 6,s 3s
2 0 3s 3s 5s 3s 2s 3s 2s 1s 6, 5, 6, 0 3s 3s 5s 3s 3s 5s 5s 6s

1.s 6s 5 6 0 6, 6,s 5,s 6, 1 2s 3ss 2ss 1s 2s 3 0 6,s 6s 6s 5s
2s 3ss 2ss 1s 2s 3 0 3s 3s 3 1s 6,s 6,s 1s 2 5,s 5,s 3s 5s 3s 2s 1 0

6,s 1s 2s 3s 2s 1s 5,s 3,s 6, 0 6,s 6,s 6, 6, 6,s 5,s 6, 1 2s 3ss 2ss 1s 2s
3 0 6,s 6s 6s 5s 2s 3ss 2ss 1s 2s 3 0 3s 3s 3 1s 6,s 6,s 1s 2 5,s 5,s

3s 5s 3s 2s 1 1s 1s 6,s 1s 2s 3s 5s 3s 3s 5s 6l 6l 6s 6ss 6ss 6s 6s
6s 6ss 5ss 3s 2s 2s 2ss 2ss 3s 3ss 5ss 3s 3ss 2ss 1s 1ss 6,ss 6, 6,s 5,s 6, 6,s 1s 2s 3ss 2ss 1s 2s 3 0

6s 5s 3s 2s 5s 3s 2s 1s 1 0 6,ss 1ss 2ss 3ss 2ss 1ss 6,ss 1ss

6, 6,s 5,s 6, 6,s 1s 1 2s 1s

6, 0 1 1s 5,s 1s 2s 3s 5s 5s 3s 2 3 0 6s 6s 6s 5s 3s 3 1s 6,s 6,s 6,s 3s
2 0 3s 3s 5s 3s 2s 3s 2s 1s 6, 5, 6, 0 3s 3s 5s 3s 3s 5s 5s 6s

1.s 6s 5 6 0 6, 6,s 5,s 6, 1 2s 3ss 2ss 1s 2s 3 0 6,s 6s 6s 5s
2s 3ss 2ss 1s 2s 3 0 3s 3s 3 1s 6,s 6,s 1s 2 5,s 5,s 3s 5s 3s 2s 1 0

6,s 1s 2s 3s 2s 1s 5,s 3,s 6, 0 6,s 6,s 6, 6, 6,s 5,s 6, 1 2s 3ss 2ss 1s 2s
3 0 6,s 6s 6s 5s 2s 3ss 2ss 1s 2s 3 0 3s 3s 3 1s 6,s 6,s 1s 2 5,s 5,s

3s 5s 3s 2s 1 1s 1s 6,s 1s 2s 3s 5s 3s 3s 5s 6l 6l

1.s 1.ss 1.ss 6s 6ss 6ss 5s 5ss 5ss 3s 3ss 3ss 2s 3ss 2ss 1s 6,ss 5,ss 6,ss 5,ss 1ss 2ss 3ss 5ss 6ss 2.ss 1. 0l 1s 2s

3 0 3 5s 3s 6 0 6s 1s 5s 3s 2 2s 2ss 2ss 2s 2s 1s 2s 3 3s 3ss 3ss 3s 2ss 1ss 7,s 1ss 2ss 3 0 3 5s 3s

  1. 6 6 6s 1s 2 5 5 6 7 0 7 0

6, 6,s 5,s 6, 1 2s 3ss 2ss 1s 2s 3 0 6,s 6s 6s 5s
2s 3ss 2ss 1s 2s 3 0 3s 3s 3 1s 6,s 6,s 1s 2 5,s 5,s 3s 5s 3s 2s 1 0

6,s 1s 2s 3s 2s 1s 5,s 3,s 6, 0 6,s 6,s 6, 6, 6,s 5,s 6, 1 2s 3ss 2ss 1s 2s
3 0 6,s 6s 6s 5s 2s 3ss 2ss 1s 2s 3 0 3s 3s 3 1s 6,s 6,s 1s 2 5,s 5,s

3s 5s 3s 2s 1 1s 1s 6,s 1s 2s 3s 5s 3s 3s 5s 6l 6 0

6 0 3s 5s 3s 5s 3 6,s 6,ss 6,ss
1 6,s 3ss 6,ss 1s 1ss 1ss 2s 1ss 2ss 3 0 3 6s 6ss 6ss 5 2s 2ss 2ss 3 0

3ss 2ss 1ss 6,ss 3,ss 2,ss 3,ss 5,ss 1 6,s 6,ss 6,ss 2 5,s 5,ss 5,ss 3, 5,s 5,ss 5,ss 1 0 6, 1s 1ss 6,ss
3s 3ss 3ss 2s 2ss 3ss 6l 6 0

6, 6,s 5,s 6, 1 2s 3ss 2ss 1s 2s 3 0 6,s 6s 6s 5s
2s 3ss 2ss 1s 2s 3 0 3s 3s 3 1s 6,s 6,s 1s 2 5,s 5,s 3s 5s 3s 2s 1 0

6,s 1s 2s 3s 2s 1s 5,s 3,s 6, 0 6,s 6,s 6, 6, 6,s 5,s 6, 1 2s 3ss 2ss 1s 2s
3 0 6,s 6s 6s 5s 2s 3ss 2ss 1s 2s 3 0 3s 3s 3 1s 6,s 6,s 1s 2 5,s 5,s

3s 5s 3s 2s 1 1s 1s 6,s 1s 2s 3s 5s 3s 3s 5s 6l 6l
q
———————————————-分割线————————————————

最终效果,这是录的笔记本电脑的,推荐在学校机房用台式机放

 

 


补充:突然发现好多人说程序调不通,程序是没有问题的,可能是环境没配好或是文件没读进去。

首先TC的Directories要设对,安在哪里的就写那里的路径,我是放在C盘turboc2文件夹的,所以Directories如下:

另外程序里面

fp = fopen(“C:\turboc2/Play/zxmzf1.txt”,”r”);

这一语句的目录是我自己设的,读的就是zxmzf1.txt这个文件,里面装的就是“最炫民族风”

大家要试的话就自己建一个txt文件,把上面的内容复制进去保存。然后C程序里面的读取文件路径改成自己的

(注意盘符是双反斜杠,其它是正斜杠)

来自人人网。

发表评论

电子邮件地址不会被公开。 必填项已用*标注