Skip to content

Instantly share code, notes, and snippets.

@petersalomonsen
Last active February 9, 2020 15:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save petersalomonsen/0dd3fdd6cbc2ea6433c9e80635a68967 to your computer and use it in GitHub Desktop.
Save petersalomonsen/0dd3fdd6cbc2ea6433c9e80635a68967 to your computer and use it in GitHub Desktop.
import { StereoSignal } from "../synth/stereosignal.class";
import { Freeverb } from "../fx/freeverb";
import { DelayLine } from "../fx/delayline";
import { SAMPLERATE } from "../environment";
import { TriBandStereoCompressor } from "../fx/tribandstereocompressor";
import { EQBand } from "../fx/eqband";
import { SubPiano } from "../instruments/piano/subpiano";
import { Kick2 } from "../instruments/drums/kick2.class";
import { Snare } from "../instruments/snare.class";
import { DeepBass } from "../instruments/bass/deepbass";
import { Eftang } from "../instruments/lead/eftang";
import { SoftPad } from "../instruments/pad/softpad.class";
import { Hihat } from "../instruments/hihat.class";
import { SineLead } from "../instruments/lead/sinelead";
import { DriveLead } from "../instruments/drivelead.class";
export const PATTERN_SIZE_SHIFT: usize = 3;
export const BEATS_PER_PATTERN_SHIFT: usize = 0;
const gain: f32 = 0.13;
const ENABLE_MULTIBAND_COMPRESSOR = true;
let freeverb = new Freeverb();
const delayframes = (SAMPLERATE * (3/8) * 60 / 70) as usize;
let delayLeft: DelayLine = new DelayLine(delayframes);
let delayRight: DelayLine = new DelayLine(delayframes);
let echoline = new StereoSignal();
let reverbline = new StereoSignal();
let mainline = new StereoSignal();
let tribandstereocompressor = new TriBandStereoCompressor(20,500,7000,19500);
let eqbandl = new EQBand(20, 19500);
let eqbandr = new EQBand(20, 19500);
function createInstrumentArray<T>(length: i32, factoryFunc: () => T): T[] {
const arr = new Array<T>(length);
for(let n = 0; n < length;n++) {
arr[n] = factoryFunc();
}
return arr;
}
const pianos: SubPiano[] = createInstrumentArray<SubPiano>(8, () => new SubPiano());
const pads: SoftPad[] = createInstrumentArray<SoftPad>(8, () => new SoftPad());
const driveleads: DriveLead[] = createInstrumentArray<DriveLead>(3, () => new DriveLead());
const kick = new Kick2();
const bass = new DeepBass();
const eftang = new Eftang();
const snare = new Snare();
const hihat = new Hihat();
const sinelead = new SineLead();
export function setChannelValue(channel: usize, value: f32): void {
switch(true) {
case (channel < 8):
pianos[channel].note = value;
break;
case channel === 8:
kick.note = value;
break;
case channel === 9:
snare.note = value;
break;
case channel === 10:
hihat.note = value;
break;
case channel === 11:
bass.note = value
break;
case channel === 12:
eftang.note = value;
break;
case channel < 21:
pads[channel - 13].note = value;
break;
case channel === 21:
sinelead.note = value;
break;
case channel < 25:
driveleads[channel - 22].note = value;
break;
case channel === 25:
if(value > 1) {
for(let n = 0; n<driveleads.length; n++) {
driveleads[n].setPitchbend(value - 64);
}
}
break;
}
}
export function mixernext(leftSampleBufferPtr: usize, rightSampleBufferPtr: usize): void {
mainline.clear()
reverbline.clear();
echoline.clear();
for(let n = 0;n<pianos.length;n++) {
const piano = pianos[n];
piano.next();
mainline.addStereoSignal(piano.signal, 0.4, 0.5);
reverbline.addStereoSignal(piano.signal, 0.1, 0.5);
}
for(let n = 0;n<pads.length;n++) {
const pad = pads[n];
pad.next();
mainline.addStereoSignal(pad.signal, 0.4, 0.5);
echoline.addStereoSignal(pad.signal, 0.4, 0.5);
}
for(let n = 0;n<driveleads.length;n++) {
const drivelead = driveleads[n];
drivelead.next();
const pan = ((n + 1) * 0.25) as f32;
mainline.addStereoSignal(drivelead.signal, 0.1, pan);
echoline.addStereoSignal(drivelead.signal, 0.45, 1 - pan);
}
kick.next();
mainline.addStereoSignal(kick.signal, 1.5, 0.5);
reverbline.addStereoSignal(kick.signal, 0.2, 0.5);
hihat.next();
mainline.addStereoSignal(hihat.signal, 1.5, 0.5);
// reverbline.addStereoSignal(hihat.signal, 0.0, 0.5);
bass.next();
mainline.addStereoSignal(bass.signal, 4.5, 0.5);
reverbline.addStereoSignal(bass.signal, 0.3, 0.5);
eftang.next();
mainline.addStereoSignal(eftang.signal, 2.1, 0.5);
echoline.addStereoSignal(eftang.signal, 1.8, 0.5);
sinelead.next();
mainline.addStereoSignal(sinelead.signal, 2.4, 0.5);
echoline.addStereoSignal(sinelead.signal, 2.0, 0.5);
snare.next();
mainline.addStereoSignal(snare.signal, 1.0, 0.5);
reverbline.addStereoSignal(snare.signal, 0.01, 0.5);
echoline.left += delayRight.read() * 0.7;
echoline.right += delayLeft.read() * 0.7;
delayLeft.write_and_advance(echoline.left);
delayRight.write_and_advance(echoline.right);
reverbline.addStereoSignal(echoline, 0.5, 0.5);
freeverb.tick(reverbline);
let left = gain * (mainline.left + echoline.left + reverbline.left);
let right = gain * (mainline.right + echoline.right + reverbline.right);
if (ENABLE_MULTIBAND_COMPRESSOR) {
tribandstereocompressor.process(left,right,0.45, 1.0, 0.9 , 1.20, 1.05, 1.0);
left = tribandstereocompressor.stereosignal.left;
right = tribandstereocompressor.stereosignal.right;
} else {
left = eqbandl.process(left);
right = eqbandr.process(right);
}
// clip
if (Math.abs(left) > 1.0) {
left = 1.0;
}
if (Math.abs(right) > 1.0) {
right = 1.0;
}
store<f32>(leftSampleBufferPtr, left);
store<f32>(rightSampleBufferPtr, right);
}
/**
* Copyright (c) 2019 - Peter Salomonsen (https://petersalomonsen.com)
*/
global.bpm = 70;
global.pattern_size_shift = 3;
global.beats_per_pattern_shift = 1;
calculatePatternSize();
// global.looptimes = 100;
// soloInstrument('kick');
// soloInstrument('snare');
// soloInstrument('hihat');
/*soloInstrument('piano1');
soloInstrument('piano2');
soloInstrument('piano3');
soloInstrument('piano4');
soloInstrument('piano5');*/
//muteInstrument('pad1');
// muteInstrument('pad2');
// muteInstrument('pad3');
//soloInstrument('sinelead');
global.WASM_SYNTH_LOCATION = 'https://gist.githubusercontent.com/petersalomonsen/0dd3fdd6cbc2ea6433c9e80635a68967/raw/7b3c50d5179807a43fbe095370b1a4552f953289/synth.wasm';
var pianoVoices = [];
for(let n=1;n<=8;n++) {
pianoVoices.push('piano'+n);
addInstrument('piano'+n, {type: 'note'});
}
addInstrumentGroup('piano', pianoVoices);
addInstrument('kick', {type: 'number'});
addInstrument('snare', {type: 'number'});
addInstrument('hihat', {type: 'number'});
addInstrument('bass', {type: 'note'});
addInstrument('eftang', {type: 'note'});
var padVoices = [];
for(let n=1;n<=8;n++) {
padVoices.push('pad'+n);
addInstrument('pad'+n, {type: 'note'});
}
addInstrumentGroup('pads', padVoices);
addInstrument('sinelead', {type: 'note'});
var driveleadVoices = [];
for(let n=1;n<=4;n++) {
driveleadVoices.push('drivelead'+n);
addInstrument('drivelead'+n, {type: n === 4 ? 'number' : 'note'});
}
addInstrumentGroup('driveleads', driveleadVoices);
const primaryPatterns = {
hihat: pp(4, [
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30
]),
kick: pp(4, [
60,,,,,,
,,,,,,
,,,60,,20,
,,,,,,
60,,,,,,
,,,60,,20,
,,,60,,,
]),
snare: pp(4, [
,,,,,,60
,,,,,,
,,,,,,60
,,,,,20,
,,,,,,60
,,,,,,
,,,,,20,60
,,,20,,50
]),
"piano": pp(4, [
[as4(3),d5(3),e3(3/8),g2(7/8),a4(23/8),f5(23/8)],,,,,,
[,,d3(1/4),,],,,[,,f3(1/4),,],,[,,g3(1/4),,],
,,,[,,f3(1/4),,],,[,,d3,,],
[,,f3(1/4),,],,,[,,g3(1/2),,],,,
[b4(7/4),c5(15/8),g4(15/8),a2(1/2),e5(7/4)],,,,,,
[,,,a2(1/4),],,,[,,,g3(1/4),],,a3,
[d3(3/8),a3(1/4),c5(1),a4(1),ds5(1)],,[,c4(1/4),,,],d3(1/2),,[,d4(1/4),,,],
fs4(1),,,
], 8),
"bass": pp(4, [
g2(0.5),,,,,,
d3(1/4),,,f3(1/4),,g3(1/4),
,,,f3(1/4),,d3(1/4),
f3(1/4),,,g3(1/2),,,
a2(5/8),,,,,,
e3(1/4),,,g3(1/4),,a3(1/4),
d3(3/8),,,,,d4(3/8),
,,,a3,,c4
]),
};
for(var n=0;n<2;n++) {
playPatterns(primaryPatterns, 6);
}
//
for(var n=0;n<2;n++) {
playPatterns(Object.assign({}, primaryPatterns, {
"eftang": pp(4, [a5(6/8),,,,,,
,,,g5(1/4),,f5(1/4),
,,d5(1/4),,,,
,,,g5(1/4),,e5(6/8),,
,,,,,,,,d5(1/4),,c5(1/4),,
,,a4(3/8),,,,,]),
}), 6);
playPatterns(Object.assign({}, primaryPatterns, {
"eftang": pp(4, [
f5(1/2),,,d5(1/4),,f5,
,,,g5(1/2),,,
a5(1/2),,,g5(1/4),,f5(3/4),,
,,g5(1/2),,e5(2),,]),
}), 6);
}
const basisPads = pp(4, [[g3(6),as4(6),a4(6),d5(6),f5(6)],,,,,,
,,,,,,
,,,,,,
,,,,,,
[,a3(3),c5(3),g4(3),e5(3)],,,,,,
,,,,,,
[,ds5(3),fs4(3),c5(3),a4(3)],,,
], 8);
playPatterns(Object.assign({}, primaryPatterns, {
"sinelead": pp(4, [d6(3/8),,,d6(1/4),,,
c6(1/4),,,a5(3/8),,d6(1/4),,
,,,,,,,
a5,c6(3/8),,a5,
e6(3/8),,,e6(1/4),,,
d6(1/4),,,c6(1/4),,,
e6(1/4),,f6(1/4),e6,,c6,
,,a5,c6,,a5]),
"pads": basisPads
}), 6);
playPatterns(Object.assign({}, primaryPatterns, {
"sinelead": pp(4, [d6(3/8),,,d6(1/4),,,
c6(1/4),,,a5(3/8),,d6(1/4),,
,,,,,,,
a5,c6(3/8),,a5,
e6(3/8),,,e6(1/4),,,
d6(1/4),,,c6(1/4),,,
f6(1/4),,e6(1/4),,d6,,c6,
,a5,,g5]),
"pads": basisPads,
"driveleads": pp(4, [
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
[c5(1/2),,g4(1/2)],,[d5(1/2),a4(1/2)],,
[f5(1/2),,c5(1/2)],,[d5,g5],,
[a5(1/2),f5(1/2)],,[a5,c6]], 3),
}), 6);
//
for(var n=0;n<2;n++) {
playPatterns(Object.assign({}, primaryPatterns, {
"pads": basisPads,
"driveleads": pp(4, [
[d6(2),a5(2),f5(2)],,,,,,
,,,,[f6(4),c6(4),g5(4),63],,
,,,,,,
,,,,,,
,,,[d6(1/2),e5(1/2),a5(1/2)],
,,[c6(1/2),g5(1/2),d5(1/2)],,
,[d6(1/2),a5(1/2)],,[c6(1/2),g5(1/2)],
,,,[f5(1/2),a5(1/2)],
,,[g5(1/2),c6(1/2)],,[a5(1/2),d6(1/2)],
], 4),
}), 6);
playPatterns(Object.assign({}, primaryPatterns, {
"pads": basisPads,
"driveleads": pp(4, [
[a5(6),f5(6),c5(6),63],,,,,,
,,,,,,
,,,,,,
,,,,,,
g5(3),,,,,,
,,,,,,
f5(2),,g5,a5(2),,,
c6(2),,,d6(2),,,
], 4),
}), 6);
}
//
for(var n=0;n<2;n++) {
playPatterns({
snare: pp(4, [
,,,,,,60
,,,,,,
,,,,,,60
,,,,,20,
,,,,,,60
,,,,,,
,,,,,20,60
,,,20,,50
]),
hihat: pp(4, [
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30
]),
kick: pp(4, [
60,,,,,,
,,,,,,
,,,60,,20,
60,,,,,,
,,,,,,
,,,60,,20,
]),
"piano": pp(4, [
[as5(5/4),d6(5/4),f5(5/4),],,,,
,,,,
,[as5(1/2),d6(1/2),f5],,,
[f6(1),a5(3/4),c6(1)],,,,
,[c6(1/2),a5(1/2),f6(1/2)],,,
,[c6(1/2),a5(1/2),f6(1/2)],,,
[gs5(3/4),f6(3/4),c6(3/4)],,,,
,,,,
,[gs5(1/2),f6(1/2),c6(1/2)],,,
[c6(3/4),ds6(3/4),g5(1/2)],,,,
,[ds6(1/2),c6(1/2),g5(1/2)],,,
,[ds6(1/2),c6(1/2),g5(1/2)],,,
[as5(3/4),d6(3/4),f5(3/4)],,,,
,,,,
,[as5(1/2),d6(1/2),f5(1/2)],,,
[c6(3/4),a5(3/4),f6(3/4)],,,
[c6(3/4),a5(3/4),f6(3/4)],,,,
,,[c6(1/2),a5,f6],,,
[gs5(1/2),c6(3/4),f6],,,,
,,,,
,[gs5(1/2),f6(1/2),c6(1/2)],,,
[c6(3/4),ds6(3/4),g5(3/4)],,,,
,[ds6(1/2),c6(1/2),g5(1/2)],,,
,[ds6,c6,g5]], 8),
"driveleads": pp(4, [as5(1),,,f6(1/2),
,,c6(1),,
,as5(1),,c6(1),
,,c6,as5(1/2),
,c6,f6(1/2),,
,c6(1/2),,,
as5(1/2),,,f6(1),
,,c6(1),,
,as5(1),,c6(1/2),
,c6(1/2),,as5(1/2),
,c6,f6(1/2),,
,[c6(1/2)],,], 4),
"bass": pp(4, [as3(1),,,,,
as3(1/2),,,
,as3(1/2),,,
d3(3/4),,,,
,d3(1/2),,,
,d3,,e3(1/2),
f3(1/2),,,,
,f3(1/2),,,
,f3,,,
gs3(3/4),,,f3(1/2),
,gs3(3/4),,,,as3(1/2)
]),
"pads": pp(4, [[d6(4),as5(4),f5(4)],,,,
,,,,
,,,,
[a5(4),c6(4),],[,,f5(4)],,,
,,,,
,,,,
[gs5(4),c6(4),ds5(4)],,
,,,,
,,,,,,
[g5(3),ds5(3),as5(3)],,,,
,,,,
], 8),
}, 6);
//
playPatterns({
snare: pp(4, [
,,,,,,60
,,,,,,
,,,,,,60
,,,,,20,
,,,,,,60
,,,,,,
,,,,,20,60
,,,20,,50
]),
hihat: pp(4, [
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30
]),
kick: pp(4, [
60,,,,,,
,,,,,,
,,,60,,20,
60,,,,,,
,,,,,,
,,,60,,20,
]),
"driveleads": pp(4, [as5(2)], 4),
"bass": pp(4, [as3(1),,,,
,as3(1/2),,,
,as3(1/2),,,
d3(3/4),,,,
,d3(1/2),,,
,d3,,e3(1/2),
f3(1/2),,,,
,f3(1/2),,,
,f3,,,
gs3(3/4),,,f3(1/2),
,gs3(3/4),,,,as3
,,f3]),
"pads": pp(4, [[d6(4),as5(4),f5(4)],,,,
,,,,
,,,,
[a5(4),c6(4),],[,,f5(4)],,,
,,,,
,,,,
[gs5(4),c6(4),ds5(4)],,
,,,,
,,,,,,
[g5(3),ds5(3),as5(3)],,,,
,,,,
], 8),
}, 6);
}
// playFromHere();
const transitionpatterns = {
snare: pp(4, [
,,,,,,60
,,,,,,
,,,,,,60
,,,,,20,
,,,,,,60
,,,,,,
,,,,,20,60
,,,20,,50
]),
hihat: pp(4, [
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30
]),
kick: pp(4, [
60,,,,,,
60,,,,,10,
60,,,,,,
60,,,,,,
60,,,,,,
60,,,,,,
60,,,40,,,
60,,,,,,
]),
"driveleads": pp(4, [,,,f5(1/2),
,g5(1/2),,,
as5(1/2),,,c6,
d6(1),,,c6(1/2),
,as5(1/2),c6(3/4),,
,d6(1/2),,as5,
,,g5(1/2),,
,,,,
,f5(1/2),,g5(1/2),
,,as5(1/2),,
,c6(1/2),,,
,,,], 4),
"bass": pp(4, [c3(1),,,,
,,,,
,,,d3(1/2),
,,d3(9/4),,
,,,,
,,,,
ds3(5/2),,,,
,,,,
,,,f3(1/2),
,,f3,c4(3/4),
,,f4(1),,
]),
"pads": pp(4, [[as5(41/4),ds5(5/2),g5(11/4),d5(5/2),c3(11/4)],,,,
,,,,
,,,,
[,d3(3),c5(11/4),f5(3),],,,,
,,,,
,,,,
[,ds3(3),g5(3),ds5(3)],,,,
,,,,
,,,,
[,f5(3),f3(3),c5(3)],,,,
,,a5(1),,
,,,,
], 8),
};
playPatterns(transitionpatterns, 6);
playPatterns(Object.assign({}, transitionpatterns, {
"sinelead": pp(4, [,,,f5(1/2),
,g5(1/2),,,
as5(1/2),,,c6,
d6(1),,,c6(1/2),
,as5(1/2),c6(3/4),,
,d6(1/2),,as5,
,,g5(1/2),,
,,,,
,f5(1/2),,g5(1/2),
,,as5(1/2),,
,c6(1/2),,,
,,,]),
}), 6);
playPatterns(Object.assign({}, transitionpatterns, {
"sinelead": pp(4, [,,,f5(1/2),
,g5(1/2),,,
as5(1/2),,,c6,
d6(1),,,c6(1/2),
,as5(1/2),c6(3/4),,
,d6(1/2),,as5,
,,g5(1/2),,
,,,,
,f5(1/2),,g5(1/2),
,,as5(1/2),,
,c6(1/2),,,as5
,,,]),
"eftang": pp(4, [,,,f5(1/2),
,g5(1/2),,,
as5(1/2),,,c6,
d6(1),,,c6(1/2),
,as5(1/2),c6(3/4),,
,d6(1/2),,as5,
,,g5(1/2),,
,,,,
,f5(1/2),,g5(1/2),
,,as5(1/2),,
,c6(1/2),,,as5
,,,]),
}), 6);
// playFromHere();
playPatterns({
snare: pp(4, [
,,,,,,60
,,,,,,
,,,,,,60
,,,,,20,
,,,,,,60
,,,,,,
,,,,,20,60
,,,20,,50
]),
hihat: pp(4, [
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30
]),
kick: pp(4, [
60,,,,,,
,,,,,,
,,,60,,20,
60,,,,,,
,,,,,,
,,,60,,20,
]),
"driveleads": pp(4, [as5(2),f6(2)], 4),
"sinelead": pp(4, [
as5,,,f6,,,as6,,,
as5,,as6,f6,,as6,,,
as5,,,f6,,,,
as5,,,f6,,,as6,,,
as5,,as6,f6,,as6,,,
as5,,,f6,,,
]),
"eftang": pp(4, [
as4,,,f5,,,as5,,,
as4,,as5,f5,,as5,,,
as4,,,f5,,,,
as4,,,f5,,,as5,,,
as4,,as5,f5,,as5,,,
as4,,,f5,,,
]),
"bass": pp(4, [as3(1),,,,
,as3(1/2),,,
,as3(1/2),,,
f3(3/4),,,,
,f3(1/2),,,
,f3,,f3(1/2),
ds3(1/2),,,,
,ds3(1/2),,,
,ds3,,,
f3(3/4),,,f3(1/2),
,f3(3/4),,,,f3
,,f3]),
"pads": pp(4, [[d6(4),as5(4),f5(4)],,,,
,,,,
,,,,
[a5(4),c6(4),],[,,f5(4)],,,
,,,,
,,,,
[g5(4),as5(4),ds5(4)],,
,,,,
,,,,,,
[a5(3),c6(3),f5(3)],,,,
,,,,
], 8),
"piano": pp(4, [[as5(3/4),d6(3/4),f5(3/4),],,,,
,[as5(3/4),d6(3/4),f5(3/4),],,,
,[as5(3/4),f5(3/4),d6(3/4)],,,
[a5(1),c6(1),f5(1)],,,,
,[c6(3/4),a5(3/4),f5(3/4)],,,
,[a5(1/2),f5(1/2),c6(1/2)],,
,[as5(3/4),ds5(3/4),g5(3/4)],,,,
,[as5(3/4),ds5(3/4),g5(3/4)],,
,,[as5(3/4),ds5(3/4),g5(3/4)],,,
[a5(1),c6(1),f5(1)],,,,
,[a5(3/4),c6(3/4),f5(3/4)],,
,,[c6(1/2),f5(1/2),a5(1/2)],,,
], 8),
}, 6);
playPatterns({
snare: pp(4, [
,,,,,,60
,,,,,,
,,,,,,60
,,,,,20,
,,,,,,60
,,,,,,
,,,,,20,60
,,,20,,50
]),
hihat: pp(4, [
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30,
60,,30,60,,30
]),
kick: pp(4, [
60,,,,,,
,,,,,,
,,,60,,20,
60,,,,,,
,,,,,,
,,,60,,20,
]),
"sinelead": pp(4, [
as5,,,f6,,,as6,,,
as5,,as6,f6,,as6,,,
as5,,,f6,,,,
as5,,,f6,,,as6,,,
as5,,as6,f6,,as6,,,
as5,,,f6,,,
]),
"eftang": pp(4, [
as4,,,f5,,,as5,,,
as4,,as5,f5,,as5,,,
as4,,,f5,,,,
as4,,,f5,,,as5,,,
as4,,as5,f5,,as5,,,
as4,,,f5,,,
]),
"driveleads": pp(4, [,,,,
,,,,,,,,
f6(1),,,[,ds6(1/2)],
,d6(1/2),[,c6(3/4)],,
,as5(1),,,
[,c6(1)],,,d6(1/2),
,[,c6(1/2)],as5(1),,
,[,g5(3/4)],,,
f5(3/4),,,[,g5(3/4)],
,,as5(3/2),,
], 4),
"piano": pp(4, [[as5(3/4),d6(3/4),f5(3/4),],,,,
,[as5(3/4),d6(3/4),f5(3/4),],,,
,[as5(3/4),f5(3/4),d6(3/4)],,,
[a5(1),c6(1),f5(1)],,,,
,[c6(3/4),a5(3/4),f5(3/4)],,,
,[a5(1/2),f5(1/2),c6(1/2)],,
,[as5(3/4),ds5(3/4),g5(3/4)],,,,
,[as5(3/4),ds5(3/4),g5(3/4)],,
,,[as5(3/4),ds5(3/4),g5(3/4)],,,
[a5(1),c5(1),f5(1)],,,,
,[a5(3/4),c5(3/4),f5(3/4)],,
,,[c5(1/2),f5(1/2),a5(1/2)],,,
], 8),
"bass": pp(4, [as3(1),,,,
,as3(1/2),,,
,as3(1/2),,,
f3(3/4),,,,
,f3(1/2),,,
,f3,,f3(1/2),
ds3(1/2),,,,
,ds3(1/2),,,
,ds3,,,
f3(3/4),,,f3(1/2),
,f3(3/4),,,,f3
,,f3]),
"pads": pp(4, [[d6(4),as5(4),f5(4)],,,,
,,,,
,,,,
[a5(4),c6(4),],[,,f5(4)],,,
,,,,
,,,,
[g5(4),as5(4),ds5(4)],,
,,,,
,,,,,,
[a5(3),c5(3),f5(3)],,,,
,,,,
], 8),
}, 6);
playPatterns(Object.assign({},primaryPatterns,{
driveleads: pp(4, [
[a5(4),d5(4),,62]
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,
g5,a5(1/2),[,a5(3/4)],g5,
a5(1/2),,a5,,
as5(1/2),,a5(1),[,,ds6],
,g5(1/2),,d5(3/4),
,,,
,
[f6,,,63]
],4)
}), 6);
playPatterns(Object.assign({},primaryPatterns,{
"driveleads": pp(4, [
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,
,f6,[g6(2),fs6],,
,,,,
f6(1/2),,d6,,
c6(1/2),,,,
as5(1/2),,,], 4),
}), 6);
playPatterns(Object.assign({},primaryPatterns,{
"pads": basisPads,
"eftang": pp(4, [a5(6/8),,,,,,
,,,g5(1/4),,f5(1/4),
,,d5(1/4),,,,
,,,g5(1/4),,e5(6/8),,
,,,,,,,,d5(1/4),,c5(1/4),,
,,a4(3/8),,,,,]),
"driveleads": pp(4, [a6(9/4),,,,
,,,,
,g6(1/2),,f6(1/2),
,,d6(7/4),,
,,,,
,g6(1/2),,e6(5/2),
,,,,
,,,,
,d6(1/2),,e6,
[c6(3/4),d6],,,a5(2),
,,,,
,,,,
f6(3/4),,,d6(1/2),
,[,f6(5/4)],,,
,g6(1/2),,,
g6,[,a6(1/2)],,g6(1/2),
,f6(1),,,
,g6(1/2),,e6(5/2),
,,,,
,,,,
,d6,,d6,
[c6(1),e6],,,[,d6(1/2)],
,,[d6,e6(3/4)],,
,,,], 4),
}), 6);
playPatterns(Object.assign({},primaryPatterns,{
"pads": basisPads,
"eftang": pp(4, [
f5(1/2),,,d5(1/4),,f5,
,,,g5(1/2),,,
a5(1/2),,,g5(1/4),,f5(3/4),,
,,g5(1/2),,e5(2),,]),
}), 6);
// playFromHere();
playPatterns(Object.assign({},primaryPatterns,{
"driveleads": pp(4, [,,,,
,a6,c7(3/4),,
,c7(1/2),,,
c7(1/2),,d7(1/2),,
,,,,
,c7(1/2),,a6,
c7(3/4),,,a6(1/2),
,g6(1/2),,,
f6(1/2),,,g6(3/4),
,,f6,d6(1/2),
,c6,[,d6(3/4)],,
,f6(3/4),,,
d6(3/2),,,,
,,,,
,c6(1/2),,d6,
f6(1/2),,g6(1/2),,
,[gs6,a6(3/4)],,,
c7(3/4),,,,
[c7,d7(1)],,,c7(1/2),
,a6(1/2),,,
gs6(1/2),[,g6(1/2)],,f6(1/2),
,g6,f6,d6(1/2),
,c6,,f6(3/4),
,[,d6],,], 4),
"pads": basisPads,
"eftang": pp(4, [a5(6/8),,,,,,
,,,g5(1/4),,f5(1/4),
,,d5(1/4),,,,
,,,g5(1/4),,e5(6/8),,
,,,,,,,,d5(1/4),,c5(1/4),,
,,a4(3/8),,,,,]),
}), 6);
playPatterns(Object.assign({},primaryPatterns,{
"pads": basisPads,
"eftang": pp(4, [
f5(1/2),,,d5(1/4),,f5,
,,,g5(1/2),,,
a5(1/2),,,g5(1/4),,f5(3/4),,
,,g5(1/2),,e5(2),,]),
}), 6);
playPatterns(Object.assign({},primaryPatterns,{}), 6);
playPatterns(Object.assign({},primaryPatterns,{}), 6);
playPatterns({
kick: pp(4, [60]),
hihat: pp(4, [
60,,30,60,,30,
60,,30,60,,30,
]),
}, 3);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment