problems deciphering intervals with octave wrap

This commit is contained in:
Mikayla Dobson
2022-05-15 11:13:26 -05:00
parent b6d881a299
commit fcc579eecb
2 changed files with 32 additions and 19 deletions

View File

@@ -0,0 +1,3 @@
import { melodicGeneration } from "./melodicGeneration.js";
melodicGeneration(['C3', 'G3', 'A3', 'G4']);

View File

@@ -36,27 +36,40 @@ export const melodicGeneration = (prevPitches) => {
let pitchNumTwo = musicalPitches.indexOf(pitchNameTwo); let pitchNumTwo = musicalPitches.indexOf(pitchNameTwo);
let interval = pitchNumTwo - pitchNumOne; let interval = pitchNumTwo - pitchNumOne;
direction = interval > 0;
if (octaveOne === octaveTwo) console.log("OCTAVE: same"); console.log(prevSoprano, newSoprano);
console.log(pitchNumOne, pitchNumTwo);
if (octaveOne > octaveTwo) { if (octaveOne === octaveTwo) {
console.log('OCTAVE: first is higher'); console.log("OCTAVE: same");
if ((pitchNumTwo + 3) % 12 <= (pitchNumOne + 3) % 12) { if (pitchNumOne > pitchNumTwo || pitchNumTwo === 0) {
console.log('CAUGHT OCTAVE SHIFT'); console.log("WRAP");
console.log(interval); interval += 12;
interval = Math.abs(interval) * -1;
} }
console.log(interval);
// interval = 12 - interval;
} else if (octaveOne < octaveTwo) {
console.log('OCTAVE: second is higher');
console.log(`pre shift: ${interval}`);
if (interval < pitchNumOne) (interval = 12 + Math.abs(interval));
console.log(`post shift: ${interval}`);
} }
// accounts for when the octave marker is different between pitches
if (octaveOne > octaveTwo) {
console.log('OCTAVE: first is higher');
if (pitchNumOne > pitchNumTwo) {
console.log("WRAP");
interval = Math.abs(interval) + 12;
}
} else if (octaveOne < octaveTwo) {
console.log('OCTAVE: second is higher');
if (pitchNumTwo === 0) {
console.log("Edge case: pitch two = 0");
interval = Math.abs(interval - 12) + 12;
}
if (pitchNumOne > pitchNumTwo) {
console.log("WRAP");
interval = 12 - Math.abs(interval);
}
}
direction = interval > 0;
// this boolean evaluates first, but may be changed to false pending the following conditional flow // this boolean evaluates first, but may be changed to false pending the following conditional flow
isMelodic = preferredMotion.includes(Math.abs(interval)); isMelodic = preferredMotion.includes(Math.abs(interval));
@@ -65,9 +78,6 @@ export const melodicGeneration = (prevPitches) => {
isMelodic = false; isMelodic = false;
} }
console.log(prevSoprano, newSoprano);
console.log(pitchNumOne, pitchNumTwo);
console.log(`interval: ${interval}`); console.log(`interval: ${interval}`);
console.log(`direction: ${direction ? 'ascending' : 'descending'}`); console.log(`direction: ${direction ? 'ascending' : 'descending'}`);
console.log(`isMelodic: ${isMelodic}`); console.log(`isMelodic: ${isMelodic}`);