xxxxxxxxxx
243
music_vae = new mm.MusicVAE('https://storage.googleapis.com/magentadata/js/checkpoints/music_vae/drums_2bar_lokl_small');
music_vae.initialize();
vae_steps = 200;
vae_temperature = 2;
let drum;
let drumSpeed = 100;
let drumSpeedStep = 10;
var feedbackDelay = new Tone.PingPongDelay({
"delayTime": "8t",
"feedback": 0.25,
"wet": 0.25
}).toMaster();
//kick!
var kick = new Tone.MembraneSynth({
"envelope" : {
"sustain" : 0,
"attack" : 0.02,
"decay" : 0.8
},
"octaves" : 10
}).toMaster();
//snare
var feedbackDelay = new Tone.PingPongDelay({
"delayTime" : "8t",
"feedback" : 0.25,
"wet" : 0.25
}).toMaster();
var snare = new Tone.NoiseSynth({
"volume" : -5,
"envelope" : {
"attack" : 0.001,
"decay" : 0.2,
"sustain" : 0
},
"filterEnvelope" : {
"attack" : 0.001,
"decay" : 0.1,
"sustain" : 0
}
}).connect(feedbackDelay);
//bass!
var autoWah = new Tone.AutoWah(120, 10, -20).toMaster();
var bass = new Tone.MonoSynth({
"volume" : -10,
"envelope" : {
"attack" : 0.1,
"decay" : 0.3,
"release" : 2,
},
"filterEnvelope" : {
"attack" : 0.001,
"decay" : 0.01,
"sustain" : 0.5,
"baseFrequency" : 200,
"octaves" : 2.6
}
}).connect(autoWah);
var chord;
var feedbackDelay = new Tone.PingPongDelay({
"delayTime" : "32n",
"feedback" : 0.9,
"wet" : 0.1,
}).toMaster();
var synth = new Tone.PolySynth(6, Tone.Synth, {
"oscillator" : {
"partials" : [0, 2, 3, 4],
}
}).connect(feedbackDelay);
//lead
var leadDelay = new Tone.PingPongDelay("4n", 0.2).toMaster();
var tremolo = new Tone.Tremolo(2, 0.75).connect(leadDelay);
var lead = new Tone.MonoSynth({
detune : 0 ,
oscillator : {
type : 'square'
} ,
filter : {
Q : 6 ,
type : 'lowpass' ,
rolloff : -24
} ,
envelope : {
attack : 0.1 ,
decay : 0.1 ,
sustain : 0.5 ,
release : 1
} ,
filterEnvelope : {
attack : 0.6 ,
decay : 0.2 ,
sustain : 0.5 ,
release : 2 ,
baseFrequency : 200 ,
octaves : 7 ,
exponent : 2
}
}).connect(tremolo);
function setup() {
createCanvas(400, 400);
vaePlayer = new mm.Player(); //vae
}
function draw() {
background(220);
//if(vaePlayer.stop()){
if (!(vaePlayer.isPlaying())) {
//playVAE();
music_vae
.sample(1, vae_temperature)
.then((samples) => {
vaePlayer.start(drum, drumSpeed)
});
}
noFill();
rect(0, 0, width, height/4);
rect(0, height/2, width, height/4);
rect(width/4, 0, width/4, height);
rect(width/2, 0, width/4, height);
}
function mousePressed() {
/*
if (mouseButton === CENTER) {
snare.triggerAttackRelease();
}
if (mouseButton === LEFT) {
kick.triggerAttackRelease('A#1', '8n');
}*/
var xPos = map(mouseX, 0, width, 0, 4);
var yPos = map(mouseY, 0, height, 0, 4);
if (xPos < 1) {
//DRUMS
if (yPos < 1) {
snare.triggerAttackRelease();
} else if (yPos > 1 && yPos < 2) {
kick.triggerAttackRelease('C3', '8n');
} else if (yPos > 2 && yPos < 3) {
kick.triggerAttackRelease('G2', '8n');
} else {
kick.triggerAttackRelease('C1', '8n');
}
} else if (xPos > 1 && xPos < 2) {
//BASS
if (yPos < 1) {
bass.triggerAttackRelease('E2', '8n');
} else if (yPos > 1 && yPos < 2) {
bass.triggerAttackRelease('C2', '8n');
} else if (yPos > 2 && yPos < 3) {
bass.triggerAttackRelease('G1', '8n');
} else {
bass.triggerAttackRelease('C1', '8n');
}
} else if (xPos > 2 && xPos < 3) {
//CHORDS
if (yPos < 1) {
chord = ['C4', 'E4', 'G4'];
} else if (yPos > 1 && yPos < 2) {
chord = ['G3', 'C4', 'E4'];
} else if (yPos > 2 && yPos < 3) {
chord = ['E3', 'G3', 'C4'];
} else {
chord = ['C3', 'E3', 'G3'];
}
synth.triggerAttackRelease(chord, '8n');
} else {
//LEAD
if (yPos < 1) {
lead.triggerAttackRelease('A4', '4n');
} else if (yPos > 1 && yPos < 2) {
lead.triggerAttackRelease('G4', '4n');
} else if (yPos > 2 && yPos < 3) {
lead.triggerAttackRelease('E4', '4n');
} else {
lead.triggerAttackRelease('C4', '4n');
}
}
}
function keyPressed() {
//playVAE();
//drumSpeed = drumSpeed - drumSpeedStep;
//if(drumSpeed <= 30 || drumSpeed >= 400){
// drumSpeedStep = - drumSpeedStep;
//}
music_vae
.sample(1, vae_temperature)
.then((samples) => {
drum = samples[0];
//download();
})
}
function playVAE() {
if (vaePlayer.isPlaying()) {
vaePlayer.stop();
return;
}
music_vae
.sample(1, vae_temperature)
.then((samples) => {
drum = samples[0];
})
/*
music_vae
.sample(1, vae_temperature)
.then((samples) => {
vaePlayer.start(drum,drumSpeed)
});*/
}
function download() {
if (!drum) {
alert('You must generate a trio before you can download it!');
} else {
saveAs(new File([mm.sequenceProtoToMidi(drum)], 'drum.mid'));
}
}