xxxxxxxxxx
159
var osc1, osc2;
var ampEnv1, ampEnv2;
ampEnv1 = new Tone.AmplitudeEnvelope({
"attack": 0.01,
"decay": 0.6,
"sustain": 1.0,
"release": 0.9
})
osc1 = new Tone.Oscillator('C2', "triangle")
osc1.connect(ampEnv1).toMaster();
osc1.start();
osc1.volume = 1;
ampEnv2 = new Tone.AmplitudeEnvelope({
"attack": 0.01,
"decay": 1,
"sustain": 1.0,
"release": 0.9
});
osc2 = new Tone.Oscillator("B3", "sine");
osc2.connect(ampEnv2).toMaster();
osc2.start();
osc2.volume = 1;
var synth = new Tone.Synth({
"oscillator": {
"type": "sine"
},
"envelope": {
"attack": 0.2,
"decay": 0,
"sustain": 1,
"release": 0.2
}
});
var synth2 = new Tone.MonoSynth({
"oscillator": {
"type": "square"
},
"envelope": {
"attack": 0,
"decay": 0,
"sustain": 1,
"release": 0
},
"filter": {
"type": "lowpass",
"frequency": 100,
"rolloff": -12,
"Q": 0.2,
"gain": 1
}
});
var chorus = new Tone.Chorus(4, 2.5, 1);
var delay = new Tone.PingPongDelay("16n", 10);
var feedback = new Tone.FeedbackEffect(0.001);
var effect = new Tone.Effect(0.5);
var gain = new Tone.Gain(1);
var gain2 = new Tone.Gain(0.5);
var phaser = new Tone.Phaser({
"frequency" : 5,
"octaves" : 2,
"baseFrequency" : 400
});
synth.connect(phaser).connect(chorus).connect(effect).connect(gain);
gain.toMaster();
synth2.connect(phaser).connect(gain2);
gain2.toMaster();
var lfo = new Tone.LFO("16t", 1, 10);
lfo.connect(synth.volume);
lfo.connect(osc1.volume);
lfo.start();
var lfo2 = new Tone.LFO("64n",5, 10);
lfo2.connect(osc2.volume);
lfo2.connect(synth2.volume);
lfo2.start();
const notes = [
'C4', 'E4', 'G4', 'B4', 'C5', 'B4', 'G4', 'E4'
];
var index = 0;
Tone.Transport.scheduleRepeat(repeat, "8n");
function repeat(time) {
let note = notes[index % notes.length];
synth.triggerAttackRelease(note, "8n", time);
index++;
}
Tone.Transport.bpm.value = 140;
Tone.Transport.start();
function setup() {
createCanvas(400, 400);
console.log("use keys A S D F to play synth2");
var osc1Button = createButton("OSC1");
osc1Button.position(10,100);
osc1Button.mouseClicked(toggleOSC1);
var osc2Button = createButton("OSC2");
osc2Button.position(10+50,100);
osc2Button.mouseClicked(toggleOSC2);
var synth1Button = createButton('Bassline');
synth1Button.position(10+100,100);
synth1Button.mouseClicked(toggleSynth1);
}
function draw() {
background(220);
}
function toggleOSC1(){
if(osc1.state == "started"){
osc1.stop();
} else {
osc1.start();
}
}
function toggleOSC2(){
if(osc2.state == "started"){
osc2.stop();
} else {
osc2.start();
}
}
function toggleSynth1(){
if(Tone.Transport.state == "started"){
Tone.Transport.stop();
synth1Button.html('Bassline');
} else {
Tone.Transport.start();
synth1Button.html('Stop');
}
}
function keyPressed(){
if(keyCode==65){//A
synth2.triggerAttackRelease("B1");
} else if(keyCode==83){//S
synth2.triggerAttackRelease("C2");
} else if(keyCode==68){//D
synth2.triggerAttackRelease("D2");
} else if(keyCode==70){//F
synth2.triggerAttackRelease("E2");
}
}