xxxxxxxxxx
131
var synth;
var d = 0.5; //filter envelop decay
var q = 2; //filter Q
var B0notes = ["C2", "F3", "C2", "G#2"]; //16th notes for beat 0
var B1notes = ["C2", "C2", "F2", "C2"]; //...for beat 1
var B2notes = ["C2", "C2", "G#2", "A2"]; //... for beat 2
var B3notes = ["A#2", "B2", "C3", "C#3"]; //... for beat 3
var Bnotes = [B0notes, B1notes, B2notes, B3notes];
var kick = new Tone.Player("sounds/kick.wav").toMaster(); //beat tracker
Tone.Transport.bpm.value = 120;
Tone.Transport.scheduleRepeat(playkick, "4n");
Tone.Transport.scheduleRepeat(playSynth, "16n");
Tone.Transport.start();
function setup() {
createCanvas(400, 400);
synth = new Tone.MonoSynth({
"oscillator": {
"type": "sawtooth"
},
// "filter": {
// "Q": q,
// "type": "lowpass",
// "rolloff": -24
// },
// "envelope": {
// "attack": 0.002,
// "decay": 0.2,
// "sustain": 0,
// "release": 0
// },
// "filterEnvelope": {
// "attack": 0.001,
// "decay": 0.5,
// "sustain": 0,
// "release": 0,
// // baseFrequency : 200 ,
// // octaves : 7 ,
// // exponent : 2
// "min": 200,
// "max": 1000
// }
}).toMaster();
}
function playSynth() {
let beat = Tone.Transport.position.split(":")[1];
let sixteenth = Tone.Transport.position.split(":")[2] | 0;
//nested for loop to play beats and sixteenth;
for (let i = 0; i < 4; i++) {
if (beat == i) {
for (let j = 0; j < 4; j++) {
if (sixteenth == j) {
synth.triggerAttackRelease(Bnotes[i][j], "16n");
}
}
}
}
// //without nested for loop
// if (beat == 0) {
// for (let i = 0; i < 4; i++) {
// if (sixteenth == i) {
// synth.triggerAttackRelease(B0notes[i], "16n");
// }
// }
// } else if (beat == 1) {
// for (let i = 0; i < 4; i++) {
// if (sixteenth == i) {
// synth.triggerAttackRelease(B1notes[i], "16n");
// }
// }
// } else if (beat == 2) {
// for (let i = 0; i < 4; i++) {
// if (sixteenth == i) {
// synth.triggerAttackRelease(B2notes[i], "16n");
// }
// }
// }else if (beat == 3) {
// for (let i = 0; i < 4; i++) {
// if (sixteenth == i) {
// synth.triggerAttackRelease(B3notes[i], "16n");
// }
// }
// }
}
function keyPressed() {}
function draw() {
background(0);
// use mouseX to control f value;
q = map(mouseX, 0, width, 0, 5);
// mouseY to control d value;
d = map(mouseY, 0, height, 0.2, 2);
var filter = new Tone.Filter({
"type": "lowpass",
"frequency": 1000,
"rolloff": -24,
"Q": q,
"gain": 0
}).toMaster();
var ampEnv = new Tone.AmplitudeEnvelope({
"attack": 0.001,
"decay": 0.2,
"sustain": 0.9,
"release": 0.5
});
ampEnv.releaseCurve = "linear";
ampEnv.connect(filter);
var filterEnv = new Tone.ScaledEnvelope({
"attack": 0.001,
"decay": d,
"sustain": 0,
"release": 0.001,
"min": 200,
"max": 2000
});
filterEnv.connect(filter.frequency);
synth.connect(ampEnv);
}
function playkick() {
if (kick.loaded) {
kick.start();
}
}