FMCREATE.C
上传用户:junwei_58
上传日期:2007-05-15
资源大小:79k
文件大小:5k
源码类别:

其他智力游戏

开发平台:

Visual C++

  1. #define FMCREATE_C
  2. #include "fmmusic.h"
  3. #include "fmcreate.h"
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <conio.h>
  7. #include <dos.h>
  8. //#include "vbe.h"
  9. char *FMfilename="fmmus001.dat";
  10. ///////////////////////////
  11. //  FMload () load a fm music file from disk
  12. //  and set a FMMusicNote pointer
  13. //  On success return the music pointer
  14. //  On failure return NULL
  15. //
  16. FMMusicNote *FMload(char *filename,int *len){
  17. FILE *fp;
  18. FMMusicNote tmp,*head;
  19. if((fp=fopen(filename,"rb"))==NULL)return 0;
  20. fread(&tmp,sizeof(FMMusicNote),1,fp);//read the file head
  21. *len=tmp.time;
  22. head=(FMMusicNote *)malloc(sizeof(FMMusicNote)**len);
  23. if(fread(head,sizeof(FMMusicNote)**len,1,fp) != 1){
  24. free(head);
  25. head=NULL;
  26. *len=0;
  27. }
  28. fclose(fp);
  29. return head;
  30. }
  31. ///////////////////////////
  32. //  FMsave () save a fm music to file
  33. //  with a FMMusicNote pointer
  34. //  On success return the music length
  35. //  On failure return 0
  36. //
  37. int FMsave(char *filename,FMMusicNote *head,int length){
  38. FILE* fp;
  39. FMMusicNote tmp;
  40. if((fp=fopen(filename,"wb"))==NULL)return 0;
  41. tmp.time=length;
  42. fwrite(&tmp,sizeof(FMMusicNote),1,fp);//write the file head
  43. if(fwrite(head,sizeof(FMMusicNote),length,fp)!=length)length=0;
  44. fclose(fp);
  45. return length;
  46. }
  47. /*
  48. int FMcreate(){
  49. char a,octave=3,k=4,str[4];
  50. FMMusicNote music[2000];
  51. int n=0,max=0;
  52. char notename[13]={' ','c','C','d','D','e',
  53.  'f','F','g','G','a','A','b',};
  54. directvideo=0;
  55. window(1,1,80,25);
  56. while(1){
  57. a=getch();
  58. FMSoundOFF(music[n].note,music[n].octave);
  59. if(a==27)break;
  60. if(a==','&&n>0){
  61. lineH((n%20)*32,(n/20)*40+120,15,0);
  62. n--;
  63. lineH((n%20)*32,(n/20)*40+120,15,15);
  64. continue;
  65. }
  66. if(a=='.'&&n<max){
  67. lineH((n%20)*32,(n/20)*40+120,15,0);
  68. n++;
  69. lineH((n%20)*32,(n/20)*40+120,15,15);
  70. continue;
  71. }
  72. if(a=='-'&&max>0){
  73. lineH((n%20)*32,(n/20)*40+120,15,0);
  74. max--;
  75. n=max;
  76. lineH((n%20)*32,(n/20)*40+120,15,15);
  77. continue;
  78. }
  79. switch(a){
  80. case '1':music[max].note=0;n=max++;music[n].octave=octave;music[n].time=k;break;
  81. case 'q':music[max].note=1;n=max++;music[n].octave=octave;music[n].time=k;break;
  82. case '2':music[max].note=2;n=max++;music[n].octave=octave;music[n].time=k;break;
  83. case 'w':music[max].note=3;n=max++;music[n].octave=octave;music[n].time=k;break;
  84. case '3':music[max].note=4;n=max++;music[n].octave=octave;music[n].time=k;break;
  85. case 'e':music[max].note=5;n=max++;music[n].octave=octave;music[n].time=k;break;
  86. case 'r':music[max].note=6;n=max++;music[n].octave=octave;music[n].time=k;break;
  87. case '5':music[max].note=7;n=max++;music[n].octave=octave;music[n].time=k;break;
  88. case 't':music[max].note=8;n=max++;music[n].octave=octave;music[n].time=k;break;
  89. case '6':music[max].note=9;n=max++;music[n].octave=octave;music[n].time=k;break;
  90. case 'y':music[max].note=10;n=max++;music[n].octave=octave;music[n].time=k;break;
  91. case '7':music[max].note=11;n=max++;music[n].octave=octave;music[n].time=k;break;
  92. case 'u':music[max].note=12;n=max++;music[n].octave=octave;music[n].time=k;break;
  93. case '8':if(music[n].note<12)music[n].note++;
  94.  else music[n].note=0;break;
  95. case 'i':if(music[n].note>0)music[n].note--;
  96.  else music[n].note=12;break;
  97. case '9':if(music[n].octave<7)music[n].octave++;break;
  98. case '0':if(music[n].octave>0)music[n].octave--;break;
  99. case ']':if(music[n].time<7)k=++music[n].time;break;
  100. case '[':if(music[n].time>0)k=--music[n].time;break;
  101. default:break;
  102. }
  103. sprintf(str,"%c%1d%1d",notename[music[n].note],music[n].octave,music[n].time);
  104. textxy((n%20)*32,(n/20)*40+100,str);
  105. FMSound(notetable[music[n].note],music[n].octave);
  106. delayFM(5);
  107. }
  108. for(n=0;n<max;n++){
  109. music[n].time=timetable[music[n].time];
  110. music[n].note=notetable[music[n].note];
  111. }
  112. return (FMsave(FMfilename,music,max)==max);
  113. }
  114. void main(){
  115.  // FMMusicNote *head;
  116. int n;
  117. initVBEMode(0x113);
  118. setcolor(15);
  119. textxy(10,20,"1 2 3   5 6 7 8 9 0 -");
  120. textxy(10,40," q w e r t y u i     [ ]");
  121. textxy(250,20,"1:wait  q-u,2,3,5,6,7:tones  8,i:adjust tone  9,0:octave  -:back");
  122. textxy(250,40,"[,]:pace(0:4 1:2 2:full 3:1/2 4:1/4 5:1/8 6:1/16 7:1/32)");
  123. textxy(250,60,"e.g. c34 is doe with octave 3 and 1/4 pace");
  124. initPiano();
  125. FMfilename[5]+=0;
  126. FMfilename[6]+=0;
  127. FMfilename[7]+=1;
  128.  // FMcreate();
  129. music=FMload(FMfilename,&length);
  130. for(n=0;n<length;){
  131. FMSoundOFF(notetable[music[n].note],music[n].octave);
  132. n++;
  133. printf("%c %c %dt",music[n].note+'0',music[n].octave+'0',music[n].time);
  134. FMSound(music[n].note,music[n].octave);
  135. delayFM(5);
  136. delay(music[n].time*10);
  137. }
  138.  // printf("%d",length);
  139. free(music);
  140. // returnMode();
  141. }*/