-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdiffToneGen.js
More file actions
73 lines (58 loc) · 1.93 KB
/
diffToneGen.js
File metadata and controls
73 lines (58 loc) · 1.93 KB
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
let fs = require("fs");
const allPitches = JSON.parse(fs.readFileSync("./allPitches.json", "utf8"));
let produceDiffTone = {};
for (let pitchA in allPitches) {
for (let pitchB in allPitches) {
let diff = (Math.round(Math.abs(allPitches[pitchA] - allPitches[pitchB])*1000)/1000).toString();
// console.log(`${pitchA} - ${pitchB} = ${diff}`);
if (!produceDiffTone[diff]) produceDiffTone[diff] = [[pitchA, pitchB]]
else produceDiffTone[diff].push([pitchA,pitchB])
}
}
let allPitchesObject = [];
for (let pitch in allPitches) {
allPitchesObject.push(parseFloat(allPitches[pitch]));
}
let allPitchNames = Object.keys(allPitches);
/*
// For each difference tone
// Compare it to all the allPitches frequencies
// Place it in an object under the letter name
{
"A4": {
"440": "A5/A4"
}
}
*/
let diffToneOutput = {}
for (let pitch in allPitchNames) {
diffToneOutput[allPitchNames[pitch]] = {};
}
for (let _diffPitch in produceDiffTone) {
let diffPitch = parseFloat(_diffPitch);
let closestPitch = null;
let closestPitchErr = 9999999;
for (let pitch in allPitches) {
let pitchFreq = allPitches[pitch];
let diff = Math.abs(diffPitch - pitchFreq);
if (diff < closestPitchErr) {
closestPitch = pitch;
closestPitchErr = diff;
}
}
diffToneOutput[closestPitch][produceDiffTone[_diffPitch][0]] = diffPitch;
}
let orderedFrequenciesRaw = Object.keys(produceDiffTone);
let txt = "";
let orderedFrequencies = [];
for (let frequency in orderedFrequenciesRaw) {
orderedFrequencies.push(parseFloat(orderedFrequenciesRaw[frequency]));
}
orderedFrequencies.sort(function(a, b) {
return a - b;
});
for (let frequency in orderedFrequencies) {
txt += `${orderedFrequencies[frequency]}Hz # ${produceDiffTone[orderedFrequencies[frequency].toString()][0]}\n`
}
console.log(txt);
fs.writeFileSync("out.json",JSON.stringify(diffToneOutput))