xxxxxxxxxx
108
var synthScale = [];
var synth;
// var q = 5;
synth = new Tone.PolySynth({
"volume": -10,
"envelope": {
"attack": 0.5,
"decay": 0,
"sustain": 0.3,
"release": 0.5,
}
}).toMaster();
synth.set({"oscillator": {
"type": "sine"
// },
// "filter": {
// "Q": q, //resonance at the cutoff frequency
// "frequency": 200, //not affecting? vs Tone.filter?
// "type": "lowpass",
// "rolloff": -24
}
})
Tone.Transport.bpm.value = 100;
// Tone.Transport.bpm = bpmValue.value();
// major C scale
synthScale = ["C2", "E2", "G2", "A2",
"C3", "D3", "E3", "G3", "A3", "B3",
"C4", "D4", "E4", "G4", "A4", "B4","","",""
];
// random scale
// synthScale = ["C2", "G2", "D#2",
// "C3", "G3","D#3",
// "C4", "G4", "D#4","","",""
// ];
// main melody
var synthLoop1 = new Tone.Event(loopCallback1);
synthLoop1.loop = true;
synthLoop1.loopEnd = "4n";//4t
function loopCallback1(time){
// synth.triggerAttackRelease("C2","8n", time, 1);
pos = floor(random(4,synthScale.length));
note = synthScale[pos];
var timey1 = ["16t", "8t", "16t", "4t"][floor(random(4))];//n's
synth.triggerAttackRelease(note, timey1, time, 0.7);
}
// secondary filler note
var synthLoop2 = new Tone.Event(loopCallback2);
// var timey = ["4t","8n"][floor(random(2))];
synthLoop2.loop = true;
synthLoop2.loopEnd = "8n";//8t
function loopCallback2(time){
// synth.triggerAttackRelease("C2","8n", time, 1);
pos = floor(random(0,synthScale.length));
note = synthScale[pos];
synth.triggerAttackRelease(note, "8t", time, 0.4);//8n
}
// harmony
var synthLoop3 = new Tone.Event(loopCallback3);
synthLoop3.loop = true;
synthLoop3.loopEnd = "4n";
function loopCallback3(time){
// synth.triggerAttackRelease("C2","8n", time, 1);
pos = floor(random(0,synthScale.length-3));
note = synthScale[pos];
var fifth = Tone.Frequency(note).transpose(7);
// var fourth = Tone.Frequency(note).transpose(5);
// var second = Tone.Frequency(note).transpose(2);
var timey2 = ["32n", "32n", "4t"][floor(random(3))];
// console.log(harmony);
synth.triggerAttackRelease(note, timey2, time, 0.4);
// synth.triggerAttackRelease(fourth, timey, time, 0.1);
synth.triggerAttackRelease(fifth, timey2, time, 0.2);
}
function setup(){
createCanvas(400,400);
bpmValue = createSlider(60,140,120,5);
Tone.Transport.start();
synthLoop1.start(8);//4
synthLoop2.start(4);//6
synthLoop3.start(0);
}
function draw(){
background(150);
// console.log(bpmValue.value());
// synth.envelope.attack = map(mouseX, 0, height, 0,1);
// synth.set.filter.Q = map(mouseY, 0, width, 0, 10);
}