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

📄 music.c

📁 1. 书中所有源程序, 在CPP子目录下, CPP.EXE是压缩可自释放的文件, 在DOS 下运行该文件即可释放 2. 书中程序的部分演示程序(源程序的编译), 在DEMO子目录下, 运行压缩
💻 C
字号:
/*
     MUSIC.C 音乐程序
     运行方法:
     X>MUSIC <乐谱文件名>
*/
#include "stdlib.h"
#include "stdio.h"
#include "dos.h"
#define   TRUE   1
#define   FALSE  0

int Freq[4][8] = {0, 131, 147, 165, 176, 196, 220, 247,
		  0, 262, 296, 330, 349, 392, 440, 494,
		  0, 523, 587, 659, 699, 784, 880, 988,
		  0, 1047,1174,1319,1397,1568,1760,1976};  /* 频率值 */

int main(int argc, char *argv[])
{
   FILE  *fp;
   int   Rate, Sd, i = 0, j;
   char  SdHg, Flg = TRUE;
   float SdLg, Str[100][2];
   if (argc != 2)
   {
      printf("命令行参数错误!"); exit (1);
   }
   fp = fopen(argv[1], "r");
   if (fp == NULL)
   {
      printf("乐谱文件打不开!"); exit (1);
   }
   fscanf(fp, "%d", &Rate);
   while (! feof(fp) && Flg)
   {
      fscanf(fp, " %c%d %f", &SdHg, &Sd, &SdLg);     /* 读乐谱文件 */
      Str[i][1] = Rate*SdLg;
      switch(SdHg)
      {
	 case 'e':  Str[i++][0] = Freq[3][Sd];  /* 最高音 */
		    break;
	 case 'h':  Str[i++][0] = Freq[2][Sd];  /* 高音   */
		    break;
	 case 'm':  Str[i++][0] = Freq[1][Sd];  /* 中音   */
		    break;
	 case 'l':  Str[i++][0] = Freq[0][Sd];  /* 低音   */
		    break;
	 case '#':  Flg = FALSE;                /* 结束   */
      }
   }
   for (j = 0; j < i; j++)
   {
      sound(Str[j][0]);    /* 音高 */
      delay(Str[j][1]);    /* 音长 */
   }
   nosound();        /* 关闭扬声器 */
   return 0;
}

⌨️ 快捷键说明

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