daily pastebin goal
94%
SHARE
TWEET

Untitled

a guest Mar 14th, 2018 68 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Helper functions for music
  2.  
  3. #include <cs50.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <stdlib.h>
  7. #include <ctype.h>
  8. #include <math.h>
  9. #include "helpers.h"
  10.  
  11. int duration(string fraction)
  12. {
  13.     int nom;
  14.     int denom;
  15.     int eights;
  16.     switch(fraction[0]){
  17.         case '1':
  18.             nom = 1;
  19.             // printf("non reassinged: %i\n", nom);
  20.         break;
  21.         case '2':
  22.             nom = 2;
  23.             // printf("non reassinged: %i\n", nom);
  24.         break;
  25.         case '3':
  26.             nom = 3;
  27.             // printf("non reassinged: %i\n", nom);
  28.         break;
  29.         case '4':
  30.             nom = 4;
  31.             // printf("non reassinged: %i\n", nom);
  32.         break;
  33.         case '5':
  34.             nom = 5;
  35.             // printf("non reassinged: %i\n", nom);
  36.         break;
  37.         case '6':
  38.             nom = 6;
  39.             // printf("non reassinged: %i\n", nom);
  40.         break;
  41.         case '7':
  42.             nom = 7;
  43.             // printf("non reassinged: %i\n", nom);
  44.         break;
  45.         case '8':
  46.             nom = 8;
  47.             // printf("non reassinged: %i\n", nom);
  48.         break;
  49.  
  50.     }
  51.  
  52.     switch(fraction[2]){
  53.         case '1':
  54.             denom = 1;
  55.             // printf("whole");
  56.             // return 8;
  57.         break;
  58.         case '2':
  59.             denom = 2;
  60.         // printf("half");
  61.             // return 4;
  62.         break;
  63.         case '4':
  64.             denom = 4;
  65.         // printf("denom quarter %i\n", denom);
  66.             // return 2;
  67.         break;
  68.         case '8':
  69.             denom = 8;
  70.         // printf("denom eighth %i\n", denom);
  71.             // return 1;
  72.         break;
  73.  
  74.     }
  75.     switch(denom){
  76.         case 1:
  77.             eights = 8;
  78.             // printf("eights: %i\n", eights);
  79.         break;
  80.         case 2:
  81.             eights = nom * 4;
  82.             // printf("eights: %i\n", eights);
  83.         break;
  84.         case 4:
  85.             eights = nom * 2;
  86.             // printf("eights: %i\n", eights);
  87.         break;
  88.         case 8:
  89.             eights = nom * 1;
  90.             // printf("eights: %i\n", eights);
  91.         break;
  92.     }
  93.  
  94.     // printf("nom/denom %i\n ", (nom +denom) );
  95.     return eights;
  96. }
  97.  
  98. // // Calculates frequency (in Hz) of a note
  99. int frequency(string note)
  100. {
  101.     int letter;
  102.     int octave = 0;
  103.     float semitone = 0;
  104.     int initfreq = 440.0;
  105.     float freq = 0;
  106.     // bool double_sharp = false;
  107.     // bool double_flat = false;
  108.     bool sharp = false;
  109.     bool flat = false;
  110.  
  111.     for(int i = 0;i < strlen(note); i++){
  112.         if(note[i] == 'b'){
  113.             flat = true;
  114.         } else if((isalpha(note[i])) && (note[i] != 'b')){
  115.             letter = note[i];
  116.         } else if(note[i] == '#'){
  117.             sharp = true;
  118.         } else if(isdigit(note[i])){
  119.             octave = note[i];
  120.         } else {
  121.             printf("%c is not valid", note[i]);
  122.             return 1;
  123.         }
  124.     }
  125.  
  126.     // printf("%c\n%c\n", letter, octave);
  127.     // // printf("sharp: %s", sharp ? "true" : "false");
  128.     // printf("flat: %s", flat ? "true" : "false");
  129.  
  130. // attempt to use function
  131.     // getter(letter,sharp, flat,initfreq,semitone,freq);
  132.         // int getter(int letter bool sharp bool flat int initfreq int semitone){
  133.  
  134.  
  135.     switch(letter){
  136.         case 'A':
  137.             if(flat == true){
  138.                 semitone = -1.0;
  139.             } else if(sharp){
  140.                 semitone = 1.0;
  141.             } else {
  142.                 semitone = 0;
  143.             }
  144.         break;
  145.         case 'B':
  146.             if(flat == true){
  147.                 semitone = 1.0;
  148.             } else if(sharp){
  149.                 semitone = 3.0;
  150.             } else {
  151.                 semitone = 2.0;
  152.             }
  153.         break;
  154.         case 'C':
  155.             if(flat == true){
  156.                 semitone = -10.0;
  157.             } else if(sharp){
  158.                 semitone = -8.0;
  159.             } else {
  160.                 semitone = -9.0;
  161.             }
  162.         break;
  163.         case 'D':
  164.             if(flat == true){
  165.                 semitone = -8.0;
  166.             } else if(sharp){
  167.                 semitone = -6.0;
  168.             } else {
  169.                 semitone = -7.0;
  170.             }
  171.         break;
  172.         case 'E':
  173.             if(flat == true){
  174.                 semitone = -6.0;
  175.             } else if(sharp){
  176.                 semitone = -4.0;
  177.             } else {
  178.                 semitone = -5.0;
  179.             }
  180.         break;
  181.         case 'F':
  182.             if(flat == true){
  183.                 semitone = -5.0;
  184.             } else if(sharp){
  185.                 semitone = -3.0;
  186.             } else {
  187.                 semitone = -4.0;
  188.             }
  189.         break;
  190.         case 'G':
  191.             if(flat == true){
  192.                 semitone = -3.0;
  193.             } else if(sharp){
  194.                 semitone = -1.0;
  195.             } else {
  196.                 semitone = -2.0;
  197.             }
  198.         break;
  199.     }
  200.     // print semitone
  201.     // printf("semitones: %f\n", semitone);
  202.     // printf("octave: %c\n", octave);
  203.  
  204.  
  205.     // get frequency
  206.     // printf("no octave:%i\n", freq);
  207.  
  208.         // if(letter == 'A'){
  209.         //       ///440
  210.         //     if(sharp == true){
  211.         //         freq = round(initfreq * pow(2.0, 1.0/12));
  212.         //     } else if(flat == true){
  213.         //         freq = round(initfreq / pow(2.0, 1.0/12));
  214.         //     } else{
  215.         //         freq = initfreq;
  216.         //     }
  217.         // } else if(letter != 'A') {
  218.         //     // B
  219.         // }
  220.     freq = initfreq * pow(2.0, semitone/12.0);
  221.  
  222.     switch(octave){
  223.  
  224.         case '1':
  225.             freq = ((freq / 2.0) / 2.0) / 2.0;
  226.         break;
  227.         case '2':
  228.             freq = (freq / 2.0) / 2.0;
  229.         break;
  230.         case '3':
  231.             freq = freq / 2.0;
  232.         break;
  233.         case '4':
  234.             freq = freq * 1;
  235.         break;
  236.         case '5':
  237.             freq = freq * 2.0;
  238.         break;
  239.         case '6':
  240.             freq = (freq * 2.0) * 2.0;
  241.         break;
  242.         case '7':
  243.             freq = ((freq * 2.0) * 2.0) * 2.0;
  244.         break;
  245.     }
  246.     // printf("%i", freq);
  247.     freq = round(freq);
  248.     return freq;
  249.  
  250. }
  251.  
  252. // Determines whether a string represents a rest
  253. bool is_rest(string s)
  254. {
  255.     // s = get_string("Input: ");
  256.     // not a rest
  257.     if(s[0] != '\0'){
  258.         // printf("false");
  259.         return false;
  260.     } else {
  261.         // a rest
  262.         // printf("true");
  263.         return true;
  264.     }
  265.     return false;
  266. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top