1#include <stdio.h>
 2#include <stdint.h>
 3#include <string.h>
 4#include <stdlib.h>
 5#include <math.h>
 6
 7#include "notes/notes.h"
 8
 9#define C0_FREQUENCY 16.3516015625 //hz (4186.01/(2^8))
10
11double determineNote(double frequency, char *output_note_string, char *output_octave_string){
12  double octaves_over_C0 = log2l(frequency/C0_FREQUENCY);
13  double semitones_over_C0 = octaves_over_C0*12.0;
14  int closest_whole_semitones_over_C0 = round(semitones_over_C0);
15  char *closestnote = notes_in_an_octave[closest_whole_semitones_over_C0%12];
16  char *octaveString = (char*)malloc(2 * sizeof(char));
17  sprintf(octaveString,"%i", (int)(floor(round(semitones_over_C0)/12)));
18  strcpy(output_note_string,closestnote);
19  strcpy(output_octave_string,octaveString);
20  return (semitones_over_C0-closest_whole_semitones_over_C0);
21}
22
23
24int main() {
25    char *output_note_string = (char*)malloc(6 * sizeof(char));
26    char *output_octave_string = (char*)malloc(6 * sizeof(char));
27    double note_semitones_offset = determineNote(43.65,output_note_string,output_octave_string);
28    printf("%s\n",output_note_string);
29    printf("%s\n",output_octave_string);
30    printf("%lf\n",note_semitones_offset);
31    return 0;
32}
33
34
35