home *** CD-ROM | disk | FTP | other *** search
/ Audio 4.94 - Over 11,000 Files / audio-11000.iso / msdos / misc / timer / timer.c next >
C/C++ Source or Header  |  1993-04-27  |  2KB  |  152 lines

  1. #include <time.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <dos.h>
  5. #include <sys\timeb.h>
  6. #include <stdlib.h>
  7.  
  8. void do_time(void);
  9. int get_delay(void);
  10.  
  11. void do_time()
  12.   {
  13.     unsigned int Delay,i;
  14.     float bpm,d;
  15.     char ch;
  16.     int Quit;
  17.  
  18.     ch = ' ';
  19.     Delay = 500;
  20.     Quit = 0;
  21.  
  22.     while (!Quit)
  23.       {
  24.     d = Delay;
  25.     d /= 1000;
  26.     bpm = 60/d;
  27.     i = (int)bpm;
  28.  
  29.     clrscr();
  30.     printf("BPM : %d\n\n",i);
  31.     printf("Press :  + to increase\n");
  32.     printf("         - to decrease\n");
  33.     printf("         T to time\n");
  34.     printf("         Q to quit\n");
  35.     printf("         P to start on beat\n");
  36.  
  37.     while(!kbhit())
  38.       {
  39.         sound(500);
  40.         delay(10);
  41.         nosound();
  42.         delay(Delay-10);
  43.       }
  44.  
  45.     ch = getch();
  46.     switch(ch)
  47.       {
  48.         case 'p' :
  49.         case 'P' : clrscr();
  50.                printf("Press any key to start on the beat...");
  51.                getch();
  52.                break;
  53.  
  54.         case 'q' :
  55.         case 'Q' : Quit = 1;
  56.                break;
  57.  
  58.         case 't' :
  59.         case 'T' : Delay = get_delay();
  60.                break;
  61.  
  62.         case '+' : d = Delay;
  63.                d /= 1000;
  64.                bpm = 60/d;
  65.                bpm += 1;
  66.                d = 60/bpm;
  67.                d *= 1000;
  68.                Delay = d;
  69.                break;
  70.  
  71.         case '-' : d = Delay;
  72.                d /= 1000;
  73.                bpm = 60/d;
  74.                bpm -= 1;
  75.                d = 60/bpm;
  76.                d *= 1000;
  77.                Delay = d;
  78.                break;
  79.       }
  80.       }
  81.   }
  82.  
  83.  
  84. int get_delay()
  85.   {
  86.     char ch;
  87.  
  88.     struct timeb times[100],t;
  89.     float difference;
  90.     int i,j;
  91.     double complete1,complete2;
  92.  
  93.     clrscr();                        
  94.     printf("Tap the beat with any key... and then\n");
  95.     printf("Press Q when finished.\n");
  96.  
  97.     i = 0;
  98.     ch = ' ';
  99.     while (ch != 'Q')
  100.       {
  101.     ch = getch();
  102.  
  103.     sound(500);
  104.     delay(10);
  105.     nosound();
  106.  
  107.     if ((ch != 'Q') && (ch != 'q'))
  108.       {
  109.         ftime(&t);
  110.         times[i] = t;
  111.         i++;
  112.       }
  113.       }
  114.  
  115.     j = 0;
  116.     difference = 0;
  117.  
  118.     while (j < i-1)
  119.       {
  120.     complete1 = (double)times[j].millitm;
  121.     complete1 /= 1000;
  122.     complete1 += times[j].time;
  123.  
  124.     complete2 = (double)times[j+1].millitm;
  125.     complete2 /= 1000;
  126.     complete2 += times[j+1].time;
  127.  
  128.     difference += complete2 - complete1;
  129.     j++;
  130.       }
  131.  
  132.     difference /= (i-1);
  133.     difference *= 1000;
  134.     i = (int) difference;
  135.     return i;
  136.   }
  137.  
  138.  
  139. int main()
  140.   {
  141.     char *tzstr = "TZ=PST8PDT";
  142.     int delay;
  143.  
  144.     putenv(tzstr);
  145.     tzset();
  146.  
  147.     do_time();
  148.  
  149.     return 0;
  150.  
  151.   }
  152.