this is my first First post!
I run a jazz band that has a music book of over 500 tunes. Every gig I create a setlist of about 30 tunes of varying genres. I'm attempting to make a program that creates a randomized setlist for me so that I don't have to spend an hour doing it myself.
Explanation of code:
- Each tune is an object with a number, title, and genre. These objects are in an array called "master".
- I filter out each tune into three separate arrays of genres: swings, latins, and bossas.
- function containsObject(): outputs false if object exists in list and true if object does not exist. This is used to check if a tune already exists in the setlist im creating.
- swing_func(), latin_func(), and bossa_func() are all the same, and randomly splice tunes from the various genre arrays into the final setlist array. These are all called at the end in make_setlist().
The final setlist cannot have repeating tunes, or repeating genres. The preferred order is swing, latin, bossa, swing, latin, bossa, etc.
Output: 30 (or another number) randomized tunes in swing, latin, bossa order. No tune is repeated.
Problems: So far this code works if I keep the setlist length below 50.
- Is there a better way to write swing_func(), latin_func(), and bossa_func()? It took me forever to figure this part out.
- If I make the setlist length too high, the code hangs...
SETLIST LENGTH CODE:
function make_setlist(){
while (setlist.length < 30) { //if length is too high, it hangs
swing_func();
latin_func();
bossa_func();
}
}
FULL CODE:
var master = [
{Number: 0, Title: "Amor", Genre: "latin"},
{Number: 1, Title: "All", Genre: "bossa"},
{Number: 2, Title: "Alomony", Genre: "swing"},
{Number: 3, Title: "Arrow", Genre: "latin"},
{Number: 4, Title: "Ba", Genre: "latin"},
{Number: 5, Title: "Bale", Genre: "swing"},
{Number: 6, Title: "Bonno", Genre: "bossa"},
{Number: 7, Title: "Bell", Genre: "bossa"},
{Number: 8, Title: "Call", Genre: "bossa"},
{Number: 9, Title: "Cow", Genre: "swing"},
{Number: 10, Title: "Start With This", Genre: "swing"},
{Number: 11, Title: "Conn", Genre: "latin"},
{Number: 12, Title: "Ja", Genre: "latin"},
{Number: 13, Title: "jule", Genre: "bossa"},
{Number: 14, Title: "ren", Genre: "swing"},
{Number: 15, Title: "Argh", Genre: "latin"},
{Number: 16, Title: "wam", Genre: "latin"},
{Number: 17, Title: "wham", Genre: "swing"},
{Number: 18, Title: "good", Genre: "bossa"},
{Number: 19, Title: "create", Genre: "bossa"},
{Number: 20, Title: "Celllary", Genre: "bossa"},
{Number: 21, Title: "pig", Genre: "swing"},
{Number: 22, Title: "Second set start", Genre: "swing"},
{Number: 23, Title: "lawn", Genre: "latin"},
{Number: 24, Title: "a", Genre: "latin"},
{Number: 25, Title: "b", Genre: "bossa"},
{Number: 26, Title: "c", Genre: "swing"},
{Number: 27, Title: "d", Genre: "latin"},
{Number: 28, Title: "e", Genre: "latin"},
{Number: 29, Title: "f", Genre: "swing"},
{Number: 30, Title: "g", Genre: "bossa"},
{Number: 31, Title: "h", Genre: "bossa"},
{Number: 32, Title: "i", Genre: "bossa"},
{Number: 33, Title: "j", Genre: "swing"},
{Number: 34, Title: "k", Genre: "swing"},
{Number: 35, Title: "l", Genre: "latin"},
{Number: 36, Title: "m", Genre: "latin"},
{Number: 37, Title: "n", Genre: "bossa"},
{Number: 38, Title: "o", Genre: "swing"},
{Number: 39, Title: "p", Genre: "latin"},
{Number: 40, Title: "q", Genre: "latin"},
{Number: 41, Title: "r", Genre: "swing"},
{Number: 42, Title: "s", Genre: "bossa"},
{Number: 43, Title: "t", Genre: "bossa"},
{Number: 44, Title: "u", Genre: "bossa"},
{Number: 45, Title: "v", Genre: "swing"},
{Number: 46, Title: "w", Genre: "swing"},
{Number: 47, Title: "x", Genre: "bossa"},
{Number: 48, Title: "y", Genre: "swing"},
{Number: 49, Title: "z", Genre: "latin"},
{Number: 50, Title: "zacs tune", Genre: "latin"}
];
//...................Variables......................................
var setlist = [];
var swings = master.filter(tune => tune.Genre === "swing");
var latins = master.filter(tune => tune.Genre === "latin");
var bossas = master.filter(tune => tune.Genre === "bossa");
var r;
var temparr = [];
//..........................................................................
//This function works: outputs false if object exists in list and true if object does not exist
function containsObject(obj, list) {
var i;
for (i = 0; i < list.length; i++) {
console.log(list[i]);
if (list[i] === obj) {
// console.log("object exists within list");
return false;
}
}
// console.log("object does not exist within list");
return true;
}
//...................SWING FUNC.....................................
function swing_func(){
r = Math.floor(Math.random() * swings.length);
while(temparr.length === 0){
if(containsObject(swings[r], temparr) === true){
temparr = swings.splice(r, 1);
} else {
r = Math.floor(Math.random() * swings.length);
}
}
setlist.push(temparr.splice(0, 1));
}
//...................LATIN FUNC.....................................
function latin_func(){
r = Math.floor(Math.random() * latins.length);
while(temparr.length === 0){
if(containsObject(latins[r], temparr) === true){
temparr = latins.splice(r, 1);
} else {
r = Math.floor(Math.random() * latins.length);
}
}
setlist.push(temparr.splice(0, 1));
}
//...................BOSSA FUNC.....................................
function bossa_func(){
r = Math.floor(Math.random() * bossas.length);
while(temparr.length === 0){
if(containsObject(bossas[r], temparr) === true){
temparr = bossas.splice(r, 1);
} else {
r = Math.floor(Math.random() * bossas.length);
}
}
setlist.push(temparr.splice(0, 1));
}
//...................make_setlist FUNC..............................
function make_setlist(){
while (setlist.length < 30) { //if length is too high, it hangs
swing_func();
latin_func();
bossa_func();
}
}
//...........................call functions.....................................
make_setlist();
console.log(setlist);
Aucun commentaire:
Enregistrer un commentaire