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; +}