From ef11406e783c9bc83c5b5186b91fb41906be3ee8 Mon Sep 17 00:00:00 2001
From: Mikayla Dobson <93477693+innocuous-symmetry@users.noreply.github.com>
Date: Sun, 15 May 2022 13:09:56 -0500
Subject: [PATCH] state management
---
index.html | 2 ++
src/audioUtil.js | 2 +-
src/inputHandling.js | 4 ++++
src/pitch_generation/getProceduralPitches.js | 16 ++++++++++------
src/pitch_generation/melodicGeneration.js | 12 +++++++++---
src/pitch_generation/sonorityList.js | 13 +++++++++++++
6 files changed, 39 insertions(+), 10 deletions(-)
create mode 100644 src/pitch_generation/sonorityList.js
diff --git a/index.html b/index.html
index 09e22de..908c4c1 100644
--- a/index.html
+++ b/index.html
@@ -113,12 +113,14 @@
+
+
diff --git a/src/audioUtil.js b/src/audioUtil.js
index 0ab4475..61f4728 100644
--- a/src/audioUtil.js
+++ b/src/audioUtil.js
@@ -14,7 +14,7 @@ export const fullRandomChord = () => {
export const evaluatedChord = (prevPitches = ["C3", "G3", "C4", "G4"]) => {
let pitches = getProceduralPitches(prevPitches);
- soundChord(pitches);
+ if (pitches) soundChord(pitches);
let pitchset = extractPitchset(pitches);
return pitchset;
diff --git a/src/inputHandling.js b/src/inputHandling.js
index b9d24a7..97b1100 100644
--- a/src/inputHandling.js
+++ b/src/inputHandling.js
@@ -1,5 +1,6 @@
import { audioTest } from '../app.js';
import { fullRandomChord, evaluatedChord } from './audioUtil.js';
+import { sonorities, getNextSonority } from './pitch_generation/sonorityList.js';
// slider variables referring to DOM
export const sopranoVol = document.getElementById('soprano-vol');
@@ -76,3 +77,6 @@ randChord.onclick = fullRandomChord;
const evalChord = document.getElementById('eval-chord');
evalChord.onclick = evaluatedChord;
+
+const nextChord = document.getElementById('next-chord');
+nextChord.onclick = getNextSonority;
diff --git a/src/pitch_generation/getProceduralPitches.js b/src/pitch_generation/getProceduralPitches.js
index 35095e7..2cfdaad 100644
--- a/src/pitch_generation/getProceduralPitches.js
+++ b/src/pitch_generation/getProceduralPitches.js
@@ -2,11 +2,13 @@ import { pitchsets, musicalPitches } from "../harmonyUtil.js";
import { extractPitchName } from "../data_conversions/extractPitchName.js";
import { getRandomIndex } from "./getRandomPitches.js";
import { melodicGeneration } from './melodicGeneration.js';
+import { sonorityList } from "./sonorityList.js";
-// iterator to prevent stack overflow
+// variables to handle recursive logic
let callCount = 0;
export const getProceduralPitches = () => {
+ let result;
callCount++;
if (callCount >= 10) {
@@ -53,15 +55,17 @@ export const getProceduralPitches = () => {
// if a dissonance is found, the function is called recursively, and its value returned
if (isDissonant) {
let newPitches = getProceduralPitches();
- return newPitches;
+ result = newPitches;
// otherwise, the original value itself is returned
} else {
console.log(`call count: ${callCount}`);
callCount = 0;
- console.log(pitches);
- let { isMelodic, nextPitches } = melodicGeneration(pitches);
-
- if (nextPitches) return nextPitches;
+ let newValue = melodicGeneration(pitches);
+ sonorityList(pitches, newValue);
+
+ result = newValue;
}
+
+ if (result) return result;
}
diff --git a/src/pitch_generation/melodicGeneration.js b/src/pitch_generation/melodicGeneration.js
index 2dd0257..cd7ccc3 100644
--- a/src/pitch_generation/melodicGeneration.js
+++ b/src/pitch_generation/melodicGeneration.js
@@ -6,7 +6,10 @@ import { musicalPitches, pitchsets } from '../harmonyUtil.js';
// reads the pitch of the previous sonority and determines appropriate melodic movement for the soprano
// returns a boolean which triggers a recursive call if the interval received is out of expected values
+let callCount = 0;
export const melodicGeneration = (prevPitches) => {
+ let result;
+
// direction: boolean; true refers to ascending motion; false refers to descending motion
let direction;
let isMelodic = true;
@@ -84,9 +87,12 @@ export const melodicGeneration = (prevPitches) => {
}
if (!isMelodic) {
- let newMelodicPitches = melodicGeneration(prevPitches);
- return newMelodicPitches;
+ callCount++;
+ result = melodicGeneration(prevPitches);
} else {
- return newPitches;
+ callCount = 0;
+ result = newPitches;
}
+
+ return result;
}
diff --git a/src/pitch_generation/sonorityList.js b/src/pitch_generation/sonorityList.js
new file mode 100644
index 0000000..84501a3
--- /dev/null
+++ b/src/pitch_generation/sonorityList.js
@@ -0,0 +1,13 @@
+export const sonorities = [];
+
+export const sonorityList = (result) => {
+ if (!sonorities.includes(result)) sonorities.push(result);
+ console.log(sonorities);
+
+ return sonorities;
+}
+
+export const getNextSonority = () => {
+ console.log(sonorities);
+ return sonorities;
+}