xxxxxxxxxx
78
let interval1;
let interval2;
let synth = new Tone.PolySynth();
synth.set({
"volume": 0.2,
"envelope": {
"attack": 0.02,
"decay": 0.01,
"release": 0.02
}
})
synth.toMaster();
//Melodies
let ml = new Tone.Loop(melodyLoop, "2n");
let major = [0, 2, 4, 5, 7, 9, 11, 12];
let minor = [0, 2, 3, 5, 7, 9, 10, 12];
let root = 21; // lowest A in MIDI
let octave = 2;
let myScale = major; // try minor and other modes
function melodyLoop(time) {
// let p = random();
// if(p < 0.9){
let pos = floor(random(0, myScale.length));
let note1 = root + myScale[pos] + octave * 12;
let note1Object = Tone.Frequency(note1, "midi");
let note2 = note1 + interval1;
let note2Object = Tone.Frequency(note2, "midi");
let note3 = note1 + interval2;
let note3Object = Tone.Frequency(note2, "midi");
synth.triggerAttackRelease([note1Object, note2Object, note3Object], "2n", time);
synth.triggerAttackRelease(note2Object, "2n", time);
synth.triggerAttackRelease(note3Object, "2n", time);
// }
}
// Start
function mouseClicked() {
if (Tone.context.state !== 'running') {
Tone.context.resume();
}
Tone.Transport.start();
ml.start();
}
let label;
let slider;
function setup() {
createCanvas(400, 400);
//createSlider(min, max, value, step)
label1 = createP("Interval 1");
slider1 = createSlider(0, myScale.length - 1, 2, 1);
label2 = createP("Interval 2");
slider2 = createSlider(0, myScale.length - 1, 4, 1);
}
function draw() {
background(220);
interval1 = myScale[slider1.value()];
interval2 = myScale[slider2.value()];
label1.html("Interval 1: " + (slider1.value() + 1) + "th (" + interval1 + " semitones)");
label2.html("Interval 1: " + (slider2.value() + 1) + "th (" + interval2 + " semitones)");
}