Last active
February 9, 2020 15:57
-
-
Save petersalomonsen/0dd3fdd6cbc2ea6433c9e80635a68967 to your computer and use it in GitHub Desktop.
shuffle chill - https://petersalomonsen.com/webassemblymusic/livecodev2/?gist=0dd3fdd6cbc2ea6433c9e80635a68967
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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