problems deciphering intervals with octave wrap
This commit is contained in:
3
src/pitch_generation/helper.js
Normal file
3
src/pitch_generation/helper.js
Normal file
@@ -0,0 +1,3 @@
|
||||
import { melodicGeneration } from "./melodicGeneration.js";
|
||||
|
||||
melodicGeneration(['C3', 'G3', 'A3', 'G4']);
|
||||
@@ -36,27 +36,40 @@ export const melodicGeneration = (prevPitches) => {
|
||||
let pitchNumTwo = musicalPitches.indexOf(pitchNameTwo);
|
||||
|
||||
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) {
|
||||
console.log("OCTAVE: same");
|
||||
if (pitchNumOne > pitchNumTwo || pitchNumTwo === 0) {
|
||||
console.log("WRAP");
|
||||
interval += 12;
|
||||
}
|
||||
}
|
||||
|
||||
// accounts for when the octave marker is different between pitches
|
||||
if (octaveOne > octaveTwo) {
|
||||
console.log('OCTAVE: first is higher');
|
||||
if ((pitchNumTwo + 3) % 12 <= (pitchNumOne + 3) % 12) {
|
||||
console.log('CAUGHT OCTAVE SHIFT');
|
||||
console.log(interval);
|
||||
interval = Math.abs(interval) * -1;
|
||||
if (pitchNumOne > pitchNumTwo) {
|
||||
console.log("WRAP");
|
||||
interval = Math.abs(interval) + 12;
|
||||
}
|
||||
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}`);
|
||||
|
||||
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
|
||||
isMelodic = preferredMotion.includes(Math.abs(interval));
|
||||
|
||||
@@ -65,9 +78,6 @@ export const melodicGeneration = (prevPitches) => {
|
||||
isMelodic = false;
|
||||
}
|
||||
|
||||
console.log(prevSoprano, newSoprano);
|
||||
console.log(pitchNumOne, pitchNumTwo);
|
||||
|
||||
console.log(`interval: ${interval}`);
|
||||
console.log(`direction: ${direction ? 'ascending' : 'descending'}`);
|
||||
console.log(`isMelodic: ${isMelodic}`);
|
||||
|
||||
Reference in New Issue
Block a user