working on procedural gen

This commit is contained in:
Mikayla Dobson
2022-05-12 14:32:51 -05:00
parent 4b9fbdfa36
commit fa8a12128b
3 changed files with 107 additions and 4 deletions

View File

@@ -1,5 +1,6 @@
import { pitchsets } from "../harmonyUtil.js";
import { pitchsets, musicalPitches } from "../harmonyUtil.js";
import { extractPitchName } from "./extractPitchName.js";
import { getRandomIndex } from "./getRandomPitches.js";
// an additional method based on the structure of getRandomPitches,
// but taking some principles of music theory into account.
@@ -14,7 +15,7 @@ export const getProceduralPitches = (prevPitches) => {
while (pitches.length <= pitchsets.indexOf(voice)) {
// the first section of this while loop is more free.
index = Math.floor(Math.random() * 100) % voice.length;
index = getRandomIndex(voice);
formattedPitch = extractPitchName(voice[index]);
// this initial condition will apply only to the bass voice,
@@ -23,7 +24,26 @@ export const getProceduralPitches = (prevPitches) => {
} else {
// now we need some repeating logic for the remaining four voices
while (pitches.length !== (pitchsets.indexOf(voice) + 1)) {
pitches.push(pitchsets.indexOf(voice));
index = getRandomIndex(voice);
pitches.push(voice[index]);
for (let i = 0; i < pitches.length; i++) {
let numVals = [];
for (let j = i; j < i + 2; j++) {
console.log(pitches[j]);
let extracted = extractPitchName(pitches[j]);
numVals.push(musicalPitches.indexOf(extracted) + 1);
}
let difference = Math.abs(numVals.reduce((x,y) => x - y));
if (difference === 1 || difference === 6) {
pitches.pop();
} else {
continue;
}
}
}
}
}

View File

@@ -1,6 +1,9 @@
import { pitchsets } from "../harmonyUtil.js";
import { extractPitchName } from "./extractPitchName.js";
// helper function for assigning a random index for a given voice's pitchset
export const getRandomIndex = (voice) => Math.floor(Math.random() * 100) % voice.length;
export const getRandomPitches = () => {
// pitches stored in Tone.js string format
let pitches = [];
@@ -13,7 +16,7 @@ export const getRandomPitches = () => {
// loops until four distinct chord members are received
while (formattedPitches.length <= pitchsets.indexOf(voice)) {
index = Math.floor(Math.random() * 100) % voice.length;
index = getRandomIndex(voice);
formattedPitch = extractPitchName(voice[index]);
if (!formattedPitches.includes(formattedPitch)) {

View File

@@ -0,0 +1,80 @@
import { pitchsets, musicalPitches } from '../harmonyUtil.js';
import { extractPitchName } from './extractPitchName.js';
import { getRandomIndex } from './getRandomPitches.js';
const iteratePitchsets = () => {
let pitches = [];
let result = [];
const tryNewPitch = () => {
result = [];
for (let voice of pitchsets) {
let idx = getRandomIndex(voice);
let pitchNum = musicalPitches.indexOf(extractPitchName(voice[idx]));
pitches.push([pitchNum, voice[idx]]);
}
console.log(pitches);
for (let i = 0; i < pitches.length; i++) {
for (let j = i; j < pitches.length; j++) {
let difference = Math.abs(pitches[i][0] - pitches[j][0]);
if (difference === 1 || difference === 6) {
result.push(["BAD", [i, j], pitches[i], pitches[j]]);
} else {
result.push(["GOOD", [i, j], pitches[i], pitches[j]]);
}
}
}
console.log(result);
}
tryNewPitch();
for (let entry in result) {
if (entry[0] === "BAD") {
iteratePitchsets();
}
}
console.log(pitches);
}
iteratePitchsets();
function twoPointIteration() {
let caught = false;
let data = [1,2,3,4,5,6];
for (let i = 0; i < data.length; i++) {
console.log(data[i]);
for (let j = 0; j < data.length; j++) {
if (data[i] === data[j]) continue;
let difference = Math.abs(data[j] - data[i]);
if (difference === 3) {
difference = "caught: 3";
}
console.log([difference, [data[i], data[j]]]);
}
console.log('next');
}
return caught;
}
function selfReferentialPointer() {
for (let i = 0; i < 5; i++) {
console.log(`i: ${i}`);
for (let j = i; j < i+2; j++) {
console.log(`jjjjjjj: ${j % 3}`);
}
}
}