⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 music.c

📁 推荐刚刚开始学C语言的同志们看下
💻 C
字号:
#include<stdlib.h>
#include<stdio.h>
#include<dos.h>

void main(int argc,char *argv[])
{
	FILE *fp;
	int rate;
	char sound_high[3];
	float sound_long;
	register int i = 0,j;
	int sign = 0;
	float str[100][2];

	if(argc != 2)/*命令行参数个数不正确*/
	{
		printf("Parameters Errors!\n");
		exit(1);

	}
	if((fp = fopen(argv[1],"r")) == NULL)/*文件打开失败*/
	{
		printf("Open file music doc Errors!\n");
		exit(1);
	}
	fscanf(fp,"%d",&rate);/*读取音长基数的值*/
	while(!feof(fp) && !sign)/*文件没有结束并且数据还是乐谱*/
	{
		fscanf(fp,"%s%f",sound_high,&sound_long);/*得到音频、音长的数值*/
        str[i][1] = rate*sound_long;/*音长=音长基数×节拍数*/
		switch(sound_high[0])
		{
		case '*':/*最高音*/
			{
				switch(sound_high[1])/*确定发声的频率*/
				{
				case '1':
					str[i++][0] = 1046.5;
					break;
				case '2':
					str[i++][0] = 1174.7;
					break;
				case '3':
					str[i++][0] = 1318.5;
					break;
				case '4':
					str[i++][0] = 1396.9;
					break;
				case '5':
					str[i++][0] = 1568;
					break;
				case '6':
					str[i++][0] = 1760;
					break;
				case '7':
					str[i++][0] = 1975.5;
					break;
				default:
					printf("\nErrors in music doc\n");
					exit(1);
					
				}
				break;
			}
		case 'h':/*高音*/
			{
				switch(sound_high[1]) 
				{
				case '1':
					str[i++][0] = 523.3;
					break;
				case '2':
					str[i++][0] = 587.3;
					break;
				case '3':
					str[i++][0] = 659.3;
					break;
				case '4':
					str[i++][0] = 698.5;
					break;
				case '5':
					str[i++][0] = 784.0;
					break;
				case '6':
					str[i++][0] = 880;
					break;
				case '7':
					str[i++][0] = 987.8;
					break;
				default:
					printf("\nErrors in music doc\n");
					exit(1);
				}
				break;
			}
		case 'm':/*中音*/
			{
				switch(sound_high[1]) 
				{
				case '1':
					str[i++][0] = 262;
					break;
				case '2':
					str[i++][0] = 296;
					break;
				case '3':
					str[i++][0] = 329.6;
					break;
				case '4':
					str[i++][0] = 349.2;
					break;
				case '5':
					str[i++][0] = 392;
					break;
				case '6':
					str[i++][0] = 440;
					break;
				case '7':
					str[i++][0] = 493.9;
					break;
				default:
					printf("\nErrors in music doc\n");
					exit(1);
					
				}
				break;
			}
		case 'l':/*低音*/
			{
				switch(sound_high[1]) 
				{
				case '1':
					str[i++][0] = 131;
					break;
				case '2':
					str[i++][0] = 147;
					break;
				case '3':
					str[i++][0] = 165;
					break;
				case '4':
					str[i++][0] = 176;
					break;
				case '5':
					str[i++][0] = 196;
					break;
				case '6':
					str[i++][0] = 220;
					break;
				case '7':
					str[i++][0] = 247;
					break;
				default:
					printf("\nErrors in music doc\n");
					exit(1);
					
				}
				break;
			}
		case '#':
			if(sound_high[1] == '#') sign = 1;
			break;
		default:
			printf("\nErrors in music doc\n");
			exit(1);

		}
	}
	for(j = 0;j <= i-1;j++)
	{
		sound(str[j][0]);/*按频率值发出歌曲的音调*/
		delay(str[j][1]);
	}
	nosound();/*关闭扬声器*/

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -