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