-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
41 lines (30 loc) · 856 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
function guessNote(frequency, kamertone){
var octave = getOctave(kamertone);
return getClosestNote(frequency, octave);
}
function getOctave(note){
//Setting lowest "A" note
var octave = [note];
//Setting difference between two neighbour tones
var toneQuotient = Math.pow(2, 1/12);
//Constructing octave from A0 to G#
for(var i = 0; i < 11; i++){
nextNote = octave[i] * toneQuotient;
octave.push(nextNote);
}
return octave;
}
function getClosestNote(frequency, octave){
var closest, distQuotient, last = frequency;
octave.forEach(function(note, i, octave){
//Calculating distance quotient
distQuotient = Math.abs( (frequency / note) - 1 );
//Snettig last closest frequency and closest note
if(distQuotient < last){
last = distQuotient;
closest = i;
}
});
return closest;
}
module.exports.guessNote = guessNote;