diff --git a/js/harmonyUtil.js b/js/harmonyUtil.js new file mode 100644 index 0000000..f433593 --- /dev/null +++ b/js/harmonyUtil.js @@ -0,0 +1,64 @@ +import { extractPitchset } from "./toneGeneration.js"; + +// interval definitions: +const intervals = { + 0: "unison", + 1: "minor second", + 2: "major second", + 3: "minor third", + 4: "major third", + 5: "perfect fourth", + 6: "tritone" + // all intervals beyond this invert to one of the previous intervals +} + +// helper functions +const transposePitches = (pitchNames, interval) => { + let transposed = []; + pitchNames.forEach(pitch => transposed.push((pitch + interval) % 12)); + return transposed; +} + +const findVector = (pitches) => { + let sorted = pitches.sort((x,y) => x - y); + // sorted = sorted.filter((num, idx) => { + // return sorted.indexOf(num) === idx; + // }); + + // finds each interval and logs it as a duple + let intervalClasses = []; + for (let i = 0; i < sorted.length; i++) { + let j = i+1; + + // does not allow out of range values in the proceeding loop + if (j >= sorted.length) { + break; + } + + do { + let thing = (sorted[j] - sorted[i]) % 6 + if (!(intervalClasses.includes(thing))) { + intervalClasses.push(thing); + } + j++; + } while (j < sorted.length); + } + + intervalClasses = intervalClasses.sort((x,y) => x-y); + return intervalClasses; +} + +// analysis +let dMajor = extractPitchset(["D", "F#", "A", "D"]); +const eMajor = transposePitches(dMajor, 2); +console.log(eMajor); +console.log(''); + +let dMajVector = findVector(dMajor); +console.log(dMajVector); + +let complexVector = findVector([0,3,4,7,8,11]); +console.log(complexVector); + +let splitThird = findVector([0,3,4,7]); +console.log(splitThird); diff --git a/js/toneGeneration.js b/js/toneGeneration.js index d5fc2d6..9787eaf 100644 --- a/js/toneGeneration.js +++ b/js/toneGeneration.js @@ -28,7 +28,7 @@ export const extractPitchset = (pitches) => { pitchset.sort((a,b) => a < b); console.log(pitchset); - // + return pitchset; } // no tritones diff --git a/package.json b/package.json index 1f3c0e0..b348265 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "name": "tone", + "type": "module", "version": "1.0.0", "description": "", "main": "app.js",