[C] c语言 beep播放音乐 →→→→→进入此内容的聊天室

来自 Tacky Octupus, 2024-03-07, 写在 C, 查看 15 次.
URL http://www.code666.cn/view/d517ba3b
  1. //声明部分
  2.  
  3. #include<stdio.h>
  4.  
  5. #include<windows.h>
  6.  
  7. #define LENTH 300//音长标准
  8.  
  9. struct music
  10.  
  11. {
  12.  
  13.     unsigned tune;//音调
  14.  
  15.     unsigned tone;//音色
  16.  
  17.     unsigned hold;//音长
  18.  
  19. };
  20.  
  21. typedef struct music* song;//结构体指针
  22.  
  23. static int size;//静态变量
  24.  
  25. void init(song S,int *I);//初始化结构体
  26.  
  27. void play(song S);//播放歌曲
  28.  
  29. int record(void);//曲目
  30.  
  31. void play_adv(song S);//高级播放
  32.  
  33. song test(void);//测试歌曲
  34.  
  35. song test_adv(void);//测试歌曲-高级
  36.  
  37. song happy(void);//欢乐颂
  38.  
  39. song star_adv(void);//小星星-高级
  40.  
  41. song sky(void);//天空之城
  42.  
  43. song mate(void);//同桌的你
  44.  
  45. song liangzu(void);//梁祝
  46.  
  47. //主函数部分
  48.  
  49. int main()
  50.  
  51. {
  52.  
  53.     char c;
  54.  
  55.     printf("*******曲目********\n"
  56.  
  57.             "[1].欢乐颂\n"
  58.  
  59.             "[2].小星星\n"
  60.  
  61.             "[3].天空之城\n"
  62.            
  63.             "[4].同桌的你\n"
  64.            
  65.             "[5].梁祝\n"
  66.            
  67.             "[0].测试音调\n"
  68.  
  69.             "******************\n");
  70.  
  71.     do{
  72.  
  73.     printf("\n");
  74.  
  75.     switch(record())//曲目选择
  76.  
  77.     {
  78.  
  79.         case 1: puts("--欢乐颂--"); play(happy());break;
  80.  
  81.         case 2: puts("--小星星--"); play_adv(star_adv());break;
  82.        
  83.         case 3: puts("--天空之城--"); play(sky());break;
  84.        
  85.         case 4: puts("--同桌的你--"); play(mate());break;
  86.        
  87.         case 5: puts("--梁祝--"); play(liangzu());break;
  88.  
  89.         case 0: puts("--测试发声器--"); play(test());break;
  90.  
  91.         default: puts("--高级测试发音--"); play_adv(test_adv());
  92.  
  93.     }
  94.  
  95.     printf("要继续吗(q退出)?");
  96.  
  97.     c=getch();//自动获取输入
  98.  
  99.     }while(c!='q');
  100.  
  101.     puts("\n--结束--\n");
  102.  
  103.     return 0;
  104.  
  105. }
  106.  
  107.  
  108. void init(song S,int *I)//初始化结构
  109.  
  110. {
  111.  
  112.     int i;
  113.  
  114.     for(i=0;i<size;i++)
  115.  
  116.     {
  117.  
  118.         S[i].tune=I[i]/100;//音调
  119.  
  120.         S[i].hold=I[i]%10;//音长
  121.  
  122.         S[i].tone=(I[i]-S[i].tune*100)/10;//音色
  123.  
  124.     }
  125.  
  126. }
  127.  
  128. void play(song S)//播放
  129.  
  130. {
  131.  
  132.     int i;
  133.  
  134.     unsigned pitch[3][7]={
  135.  
  136.     //Do Re Mi Fa So La Si
  137.  
  138.     {262,294,330,349,392,440,494},
  139.  
  140.     {523,587,659,698,784,880,988},
  141.  
  142.     {1046,1175,1318,1397,1568,1760,1967}
  143.  
  144.     };
  145.  
  146.     for(i=0;i<size;i++)
  147.  
  148.     {
  149.  
  150.         //播放功能的核心
  151.  
  152.         Beep(pitch[S[i].tune-1][S[i].tone-1],S[i].hold*LENTH);
  153.  
  154.         putchar('*');
  155.  
  156.     }
  157.  
  158.     puts("\n演奏结束\n");
  159.  
  160.     size=0;
  161.  
  162. }
  163.  
  164. int record(void)
  165.  
  166. {
  167.  
  168.     int select;
  169.  
  170.     printf("请输入选择的曲目:");
  171.  
  172.     while(!scanf("%d",&select))
  173.  
  174.     {
  175.  
  176.         printf("请输入数字!\n");
  177.  
  178.         getchar();
  179.  
  180.     }
  181.  
  182.     return select;
  183.  
  184. }
  185.  
  186. void play_adv(song S)//高级播放
  187.  
  188. {
  189.  
  190.     //只能用于播放高级曲目
  191.  
  192.     int i;
  193.  
  194.     unsigned pitch[4][7]={
  195.  
  196.     //Do Re Mi Fa So La Si
  197.  
  198.     {131,147,165,175,196,220,247},//低度音
  199.  
  200.     {262,294,330,349,392,440,494},//中度音
  201.  
  202.     {523,587,659,698,784,880,988},//高度音
  203.  
  204.     {1046,1175,1318,1397,1568,1760,1967}//高八度
  205.  
  206.     };
  207.  
  208.     for(i=0;i<size;i++)
  209.  
  210.     {
  211.  
  212.         Beep(pitch[S[i].tune-1][S[i].tone-1],S[i].hold);
  213.  
  214.         putchar('*');
  215.  
  216.     }
  217.  
  218.     puts("\n演奏结束\n");
  219.  
  220.     size=0;
  221.  
  222. }
  223.  
  224. song test(void)
  225.  
  226. {
  227.  
  228.     //数组尺寸必须手动填写
  229.  
  230.     static struct music test[21];
  231.  
  232.     int n[21]={
  233.  
  234.     112,122,132,142,152,162,173,
  235.  
  236.     212,222,232,242,252,262,273,
  237.  
  238.     312,322,332,342,352,362,373
  239.  
  240.     };
  241.  
  242.     //普通曲目  百位-音调   十位-音调   个位-音长
  243.  
  244.     size=21;
  245.  
  246.     init(test,n);
  247.  
  248.     //通过init函数进行解析
  249.  
  250.     return test;
  251.  
  252. }
  253.  
  254. song test_adv(void)//高级曲目
  255.  
  256. {
  257.  
  258.     //数组尺寸可以不填,利用sizeof计算
  259.  
  260.     static struct music test[]={
  261.  
  262.       {1,1,300},{1,2,300},{1,3,300},{1,4,300},{1,5,300},{1,6,300},{1,7,600},
  263.  
  264.       {2,1,300},{2,2,300},{2,3,300},{2,4,300},{2,5,300},{2,6,300},{2,7,600},
  265.  
  266.       {3,1,300},{3,2,300},{3,3,300},{3,4,300},{3,5,300},{3,6,300},{3,7,600},
  267.  
  268.       {4,1,300},{4,2,300},{4,3,300},{4,4,300},{4,5,300},{4,6,300},{4,7,600}
  269.  
  270.     };
  271.  
  272.     //(音调,音色,音长)
  273.  
  274.     size=sizeof(test)/sizeof(struct music);
  275.  
  276.     //自动计算数组长度
  277.  
  278.     return test;
  279.  
  280. }
  281.  
  282. song happy(void)
  283.  
  284. {
  285.  
  286.     static struct music happy[62];
  287.  
  288.     int n[62]={
  289.  
  290.     232,232,242,252,252,242,232,222,212,212,222,232,232,222,223,
  291.  
  292.     232,232,242,252,252,242,232,222,212,212,222,232,222,212,213,
  293.  
  294.     222,222,232,212,222,231,241,231,212,222,232,242,231,211,212,222,253,
  295.  
  296.     232,232,242,252,252,242,232,222,212,212,222,232,222,211,213
  297.  
  298.     };
  299.  
  300.     size=62;
  301.  
  302.     init(happy,n);
  303.  
  304.     return happy;
  305.  
  306. }
  307.  
  308. song star_adv(void)
  309.  
  310. {
  311.  
  312.     static struct music star[]={
  313.  
  314.       {3,1,500},{3,1,500},{3,5,500},{3,5,500},{3,6,500},{3,6,500},{3,5,1000},
  315.  
  316.       {3,4,500},{3,4,500},{3,3,500},{3,3,500},{3,2,500},{3,2,500},{3,1,1000},
  317.  
  318.       {3,5,500},{3,5,500},{3,4,500},{3,4,500},{3,3,500},{3,3,500},{3,2,1000},
  319.  
  320.       {3,5,500},{3,5,500},{3,4,500},{3,4,500},{3,3,500},{3,3,500},{3,2,1000},
  321.  
  322.       {3,1,500},{3,1,500},{3,5,500},{3,5,500},{3,6,500},{3,6,500},{3,5,1000},
  323.  
  324.       {3,4,500},{3,4,500},{3,3,500},{3,3,500},{3,2,500},{3,2,500},{3,1,1000}
  325.  
  326.     };
  327.  
  328.     size=sizeof(star)/sizeof(struct music);
  329.  
  330.     return star;
  331.  
  332. }
  333.  
  334.  
  335. //附录:天空之城
  336.  
  337. song sky(void)
  338.  
  339. {
  340.  
  341.     static struct music sky[118];
  342.  
  343.     int n[117]={
  344.  
  345.     261,271,312,271,312,332,272,231,231,    262,251,262,312,252,232,242,231,241,312,
  346.  
  347.     232,311,311,311,272,241,241,272,272,261,271,    312,271,312,332,272,231,231,262,251,262,312,
  348.  
  349.     252,221,231,242,311,271,271,311,312,321,321,331,311,312,    311,271,261,261,272,252,262,311,321,332,321,332,352,
  350.  
  351.     322,251,251,312,271,312,332,332,    261,271,312,272,321,321,312,251,252,342,332,322,312,
  352.  
  353.     332,332,362,352,352,331,321,312,311,    322,311,321,322,352,332,332,362,352,
  354.  
  355.     331,321,312,311,322,311,321,322,272,262
  356.  
  357.     };
  358.  
  359.     size=117;
  360.  
  361.     init(sky,n);
  362.  
  363.     return sky;
  364.  
  365. }
  366.  
  367.  
  368. //附录:同桌的你
  369.  
  370. song mate(void)
  371.  
  372. {
  373.  
  374.     static struct music mate[98];
  375.  
  376.     int n[98]={
  377.  
  378.     251,251,251,251,231,241,252,272,261,261,261,261,241,261,252,252,
  379.  
  380.     251,251,251,251,271,261,251,241,242,241,241,241,241,231,221,
  381.  
  382.     212,212,251,251,251,251,231,241,252,272,261,261,261,261,241,261,252,252,
  383.  
  384.     251,251,251,251,271,261,251,241,242,241,241,241,241,231,221,212,212,
  385.  
  386.     311,311,311,311,251,261,312,332,321,321,321,321,311,271,
  387.  
  388.     262,262,271,271,271,271,271,311,322,252,271,271,311,321,311,271,312,312
  389.  
  390.     };
  391.  
  392.     size=98;
  393.  
  394.     init(mate,n);
  395.  
  396.     return mate;
  397.  
  398. }
  399.  
  400.  
  401. //附录:梁祝
  402.  
  403. song liangzu(void)
  404.  
  405. {
  406.  
  407.     static struct music liangzu[100];
  408.  
  409.     int n[99]={
  410.  
  411.     271,261,271,252,261,241,231,221,231,241,231,252,231,221,231,251,221,231,242,231,221,213,251,171,221,161,211,153,161,211,153,
  412.  
  413.     132,152,161,212,221,161,211,151,252,311,261,251,231,251,223,222,231,171,161,152,161,211,221,131,211,
  414.  
  415.     161,151,161,211,153,232,251,171,221,161,211,152,131,151,131,151,161,171,221,163,151,161,212,221,251,231,221,231,221,
  416.  
  417.     211,161,151,132,212,162,211,161,151,131,151,161,211,153//,231,251,221,231,221,211,171,161,153
  418.  
  419.     };
  420.  
  421.     size=99;
  422.  
  423.     init(liangzu,n);
  424.  
  425.     return liangzu;
  426.  
  427. }

回复 "c语言 beep播放音乐"

这儿你可以回复上面这条便签

captcha