Last active
February 6, 2020 04:21
-
-
Save petersalomonsen/166a3ceda9498e6d2a0d57b189ff5a68 to your computer and use it in GitHub Desktop.
webchip music https://petersalomonsen.com/webassemblymusic/livecodev2/?gist=166a3ceda9498e6d2a0d57b189ff5a68
This file contains hidden or 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 Johan Salomonsen - All rights reserved | |
| */ | |
| global.bpm = 110; | |
| global.pattern_size_shift = 4; | |
| 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'}); | |
| for(let n=0;n<2;n++) { | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "piano1": pp(4, [e3,hld,hld,hld,d6,e5,e4,fs5,d4,hld,hld,b3,hld,d4,e4,hld]), | |
| "piano2": pp(4, [,,b4,hld,,b4,hld,a4,hld,fs5,hld,,fs5,hld,b4,hld]), | |
| "piano3": pp(4, [,,g5,hld,,g5,hld,d5,hld,a4,hld,,d5,hld,g5,hld]), | |
| "bass": pp(4, [e2(1),,,e2, | |
| e3,,e2,, | |
| b2,,,b2, | |
| ,,d3,e3]) | |
| }); | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100,,40 | |
| ]), | |
| "piano1": pp(4, [e5,hld,e6,e5,hld,d6,b5,fs5,hld,hld,fs5,hld,hld,hld,d5,hld]), | |
| "piano2": pp(4, [a3,hld,hld,hld,hld,e5,hld,d5,hld,hld,d5,hld,hld,e5,hld,e5]), | |
| "piano3": pp(4, [c5,hld,,c5,hld,b4,,a4,hld,hld,a4,hld,,d5,hld,]), | |
| "piano4": pp(4, [,a2,hld,hld,hld,g5,hld,b3,hld,hld,hld,hld,hld,a4,hld,]), | |
| "piano5": pp(4, [,,,,,,,b2,hld,hld,hld,hld,,,,]), | |
| "bass": pp(4, [c2,,,c3, | |
| ,,c2,, | |
| d2,,,d2, | |
| d3,,d2]) | |
| }); | |
| } | |
| for(let n=0;n<2;n++) { | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "eftang": pp(4, [,,b4,,e5,,fs5,g5,,,fs5,,e5,,g5,fs5,,,,,,,e5,,fs5,,g5,,fs5,d5,b4,e5,hld,,,,,,,,,,,,,]), | |
| "piano1": pp(4, [e3,hld,hld,hld,d6,e5,e4,fs5,d4,hld,hld,b3,hld,d4,e4,hld]), | |
| "piano2": pp(4, [,,b4,hld,,b4,hld,a4,hld,fs5,hld,,fs5,hld,b4,hld]), | |
| "piano3": pp(4, [,,g5,hld,,g5,hld,d5,hld,a4,hld,,d5,hld,g5,hld]), | |
| "bass": pp(4, [e2(1),,,e2, | |
| e3,,e2,, | |
| b2,,,b2, | |
| ,,d3,e3]) | |
| }); | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100,,40 | |
| ]), | |
| "piano1": pp(4, [e5,hld,e6,e5,hld,d6,b5,fs5,hld,hld,fs5,hld,hld,hld,d5,hld]), | |
| "piano2": pp(4, [a3,hld,hld,hld,hld,e5,hld,d5,hld,hld,d5,hld,hld,e5,hld,e5]), | |
| "piano3": pp(4, [c5,hld,,c5,hld,b4,,a4,hld,hld,a4,hld,,d5,hld,]), | |
| "piano4": pp(4, [,a2,hld,hld,hld,g5,hld,b3,hld,hld,hld,hld,hld,a4,hld,]), | |
| "piano5": pp(4, [,,,,,,,b2,hld,hld,hld,hld,,,,]), | |
| "bass": pp(4, [c2,,,c3, | |
| ,,c2,, | |
| d2,,,d2, | |
| d3,,d2]) | |
| }); | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "piano1": pp(4, [e3,hld,hld,hld,d6,e5,e4,fs5,d4,hld,hld,b3,hld,d4,e4,hld]), | |
| "piano2": pp(4, [,,b4,hld,,b4,hld,a4,hld,fs5,hld,,fs5,hld,b4,hld]), | |
| "piano3": pp(4, [,,g5,hld,,g5,hld,d5,hld,a4,hld,,d5,hld,g5,hld]), | |
| "bass": pp(4, [e2(1),,,e2, | |
| e3,,e2,, | |
| b2,,,b2, | |
| ,,d3,e3]) | |
| }); | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100,,40 | |
| ]), | |
| "piano1": pp(4, [e5,hld,e6,e5,hld,d6,b5,fs5,hld,hld,fs5,hld,hld,hld,d5,hld]), | |
| "piano2": pp(4, [a3,hld,hld,hld,hld,e5,hld,d5,hld,hld,d5,hld,hld,e5,hld,e5]), | |
| "piano3": pp(4, [c5,hld,,c5,hld,b4,,a4,hld,hld,a4,hld,,d5,hld,]), | |
| "piano4": pp(4, [,a2,hld,hld,hld,g5,hld,b3,hld,hld,hld,hld,hld,a4,hld,]), | |
| "piano5": pp(4, [,,,,,,,b2,hld,hld,hld,hld,,,,]), | |
| "bass": pp(4, [c2,,,c3, | |
| ,,c2,, | |
| d2,,,d2, | |
| d3,,d2]) | |
| }); | |
| } | |
| // loopHere(); | |
| //playFromHere(); | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100,,40,, | |
| 100,,,, | |
| 100,,,, | |
| 100,,,, | |
| 100,,,10 | |
| ]), | |
| "piano1": pp(4, [g4,hld,,e5,,e5,hld,hld,,,g6,fs6,,,b4(0.5),,c5,,,g5,hld,,g5,,g5,hld,,a4,hld,,c5,hld]), | |
| "piano2": pp(4, [c5,hld,,c5,,g4,hld,hld,,,,,,d6,d5,,e5,hld,,d5,,,d5,,d5,,,d5,hld,,g4,hld]), | |
| "piano3": pp(4, [e5,hld,,g4,,c5,hld,hld,,,,,,,g4,,g4,hld,,b4,,,b4,,b4,,,fs5,hld,,e5,hld]), | |
| "eftang": pp(4, [,,,,g6,,,,fs6,hld,,,d6,,,b5,,,a5,hld,hld,,g5,,a5,,b5,,a5,,g5,e5]), | |
| "bass": pp(4, [a1,,,a2, | |
| ,,a1,, | |
| a1,,,a1, | |
| b2,,b1,, | |
| c2,,,c3, | |
| ,,c2,, | |
| c2,,,c2, | |
| d3,,d2 | |
| ]) | |
| }, 2); | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100,,40,, | |
| 100,,,, | |
| 100,,,, | |
| 100,,,, | |
| 100,,,10 | |
| ]), | |
| "piano1": pp(4, [g4,hld,,e5,,e5,hld,hld,,,g6,fs6,,,b4(0.5),,c5,,,g5,hld,,g5,,g5,hld,,a4,hld,,c5,hld]), | |
| "piano2": pp(4, [c5,hld,,c5,,g4,hld,hld,,,,,,d6,d5,,e5,hld,,d5,,,d5,,d5,,,d5,hld,,g4,hld]), | |
| "piano3": pp(4, [e5,hld,,g4,,c5,hld,hld,,,,,,,g4,,g4,hld,,b4,,,b4,,b4,,,fs5,hld,,e5,hld]), | |
| "eftang": pp(4, [,,d5,e5,hld,g5,,,,,,,,,,,,,d5,e5,hld,,g5,,a5,hld,hld,hld,hld,,,]), | |
| "bass": pp(4, [a1,,,a2, | |
| ,,a1,, | |
| a1,,,a1, | |
| b2,,b1,, | |
| c2,,,c3, | |
| ,,c2,, | |
| c2,,,c2, | |
| d3,,d2 | |
| ]) | |
| }, 2); | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100,,40,, | |
| 100,,,, | |
| 100,,,, | |
| 100,,,, | |
| 100,,,10 | |
| ]), | |
| "piano1": pp(4, [g4,hld,,e5,,e5,hld,hld,,,g6,fs6,,,b4(0.5),,c5,,,g5,hld,,g5,,g5,hld,,a4,hld,,c5,hld]), | |
| "piano2": pp(4, [c5,hld,,c5,,g4,hld,hld,,,,,,d6,d5,,e5,hld,,d5,,,d5,,d5,,,d5,hld,,g4,hld]), | |
| "piano3": pp(4, [e5,hld,,g4,,c5,hld,hld,,,,,,,g4,,g4,hld,,b4,,,b4,,b4,,,fs5,hld,,e5,hld]), | |
| "eftang": pp(4, [,,,,g6,,,,fs6,hld,,,d6,,,b5,,,a5,hld,hld,,g5,,a5,,b5,,a5,,g5,e5]), | |
| "bass": pp(4, [a1,,,a2, | |
| ,,a1,, | |
| a1,,,a1, | |
| b2,,b1,, | |
| c2,,,c3, | |
| ,,c2,, | |
| c2,,,c2, | |
| d3,,d2 | |
| ]) | |
| }, 2); | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100,,40,, | |
| 100,,,, | |
| 100,,,, | |
| 100,,,, | |
| 100,,,10 | |
| ]), | |
| "piano1": pp(4, [g4,hld,,e5,,e5,hld,hld,,,g6,fs6,,,b4(0.5),,c5,,,g5,hld,,g5,,g5,hld,,a4,hld,,c5,hld]), | |
| "piano2": pp(4, [c5,hld,,c5,,g4,hld,hld,,,,,,d6,d5,,e5,hld,,d5,,,d5,,d5,,,d5,hld,,g4,hld]), | |
| "piano3": pp(4, [e5,hld,,g4,,c5,hld,hld,,,,,,,g4,,g4,hld,,b4,,,b4,,b4,,,fs5,hld,,e5,hld]), | |
| "eftang": pp(4, [,,d5,e5,hld,g5,,,,,,,,,,,,,d5,e5,hld,,g5,,a5,hld,hld,hld, | |
| b5(1),,,]), | |
| "bass": pp(4, [a1,,,a2, | |
| ,,a1,, | |
| a1,,,a1, | |
| b2,,b1,, | |
| c2,,,c3, | |
| ,,c2,, | |
| c2(0.5),,c3(0.5),, | |
| d2(0.5),,d3(0.5) | |
| ]) | |
| }, 2); | |
| // playFromHere(); | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "pads": pp(0.5, [ | |
| [e5(2),g5(2),b4(2),d5(2)], | |
| [fs5(2),a5(2),d4(2),cs5(2)], | |
| [g5(2),b5(2),c4(2),e4(2)], | |
| [d6(2),a5(2),b3(2)], | |
| [e6(6),b5(6),e4(6),g5(6),d5(6)], | |
| ], 5), | |
| "eftang": pp(1, [g5(1.5),,a5(1.5),,fs5(1),,,g5(1)]), | |
| "piano1": pp(4, [e3,hld,hld,hld,d6,e5,e4,fs5,d4,hld,hld,b3,hld,d4,e4,hld]), | |
| "piano2": pp(4, [,,b4,hld,,b4,hld,a4,hld,fs5,hld,,fs5,hld,b4,hld]), | |
| "piano3": pp(4, [,,g5,hld,,g5,hld,d5,hld,a4,hld,,d5,hld,g5,hld]), | |
| "bass": pp(4, [e2(1),,,e2, | |
| e3,,e2,, | |
| b2,,,b2, | |
| ,,d3,e3]) | |
| }); | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100,,40 | |
| ]), | |
| "piano1": pp(4, [e5,hld,e6,e5,hld,d6,b5,fs5,hld,hld,fs5,hld,hld,hld,d5,hld]), | |
| "piano2": pp(4, [a3,hld,hld,hld,hld,e5,hld,d5,hld,hld,d5,hld,hld,e5,hld,e5]), | |
| "piano3": pp(4, [c5,hld,,c5,hld,b4,,a4,hld,hld,a4,hld,,d5,hld,]), | |
| "piano4": pp(4, [,a2,hld,hld,hld,g5,hld,b3,hld,hld,hld,hld,hld,a4,hld,]), | |
| "piano5": pp(4, [,,,,,,,b2,hld,hld,hld,hld,,,,]), | |
| "bass": pp(4, [c2,,,c3, | |
| ,,c2,, | |
| d2,,,d2, | |
| d3,,d2]) | |
| }); | |
| // playFromHere(); | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "snare": pp(4, [ | |
| ,,,, | |
| 50,,,, | |
| ,,,, | |
| 70,,,20 | |
| ]), | |
| "pads": pp(4, [[g5(2),e5(7/4),b5(2)],,,,,,,,[d5(2),fs5(2),a5(2)],,,,,,,,[e5(7/4),g5(2),c5(7/4)],,,,,,,,[fs5(7/4),d5(7/4),b4(7/4)],,,,,,,], 8), | |
| "eftang": pp(1, [e5(2)]), | |
| "piano1": pp(4, [e3,hld,hld,hld,d6,e5,e4,fs5,d4,hld,hld,b3,hld,d4,e4,hld]), | |
| "piano2": pp(4, [,,b4,hld,,b4,hld,a4,hld,fs5,hld,,fs5,hld,b4,hld]), | |
| "piano3": pp(4, [,,g5,hld,,g5,hld,d5,hld,a4,hld,,d5,hld,g5,hld]), | |
| "bass": pp(4, [e2(1),,,e2, | |
| e3,,e2,, | |
| b2,,,b2, | |
| ,,d3,e3]) | |
| }); | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100,,40 | |
| ]), | |
| "snare": pp(4, [ | |
| ,,,, | |
| 90,,10, | |
| ,,,50, | |
| 100,,30 | |
| ]), | |
| "piano1": pp(4, [e5,hld,e6,e5,hld,d6,b5,fs5,hld,hld,fs5,hld,hld,hld,d5,hld]), | |
| "piano2": pp(4, [a3,hld,hld,hld,hld,e5,hld,d5,hld,hld,d5,hld,hld,e5,hld,e5]), | |
| "piano3": pp(4, [c5,hld,,c5,hld,b4,,a4,hld,hld,a4,hld,,d5,hld,]), | |
| "piano4": pp(4, [,a2,hld,hld,hld,g5,hld,b3,hld,hld,hld,hld,hld,a4,hld,]), | |
| "piano5": pp(4, [,,,,,,,b2,hld,hld,hld,hld,,,,]), | |
| "bass": pp(4, [c2,,,c3, | |
| ,,c2,, | |
| d2,,,d2, | |
| d3,,d2]) | |
| }); | |
| for(var n=0;n<2;n++) { | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "snare": pp(4, [ | |
| ,,,, | |
| 100,,,, | |
| ,,,, | |
| 100 | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]), | |
| "pads": pp(4, [[e6(2),b5(7/4),g6(2)],,,,,,,,[fs6(2),d6(3/2),a5(11/2)],,,,,,,,[e6(2),c6(7/4),],,,,,,,,[d6(3/2),fs6(3/2),],,,,,,,], 8), | |
| "sinelead": pp(4, [,,fs5,,fs5(1/2),,e5,fs5,,fs5,e5(1/2),,fs5,,g5(1/2),,e4(1/2),,d5,e5(1/2),,d5,,b4,,as4,a4(1/2),,g4,,e4,d4]), | |
| "piano1": pp(4, [e3,hld,hld,hld,d6,e5,e4,fs5,d4,hld,hld,b3,hld,d4,e4,hld]), | |
| "piano2": pp(4, [,,b4,hld,,b4,hld,a4,hld,fs5,hld,,fs5,hld,b4,hld]), | |
| "piano3": pp(4, [,,g5,hld,,g5,hld,d5,hld,a4,hld,,d5,hld,g5,hld]), | |
| "bass": pp(4, [e2(1),,,e2, | |
| e3,,e2,, | |
| b2,,,b2, | |
| ,,d3,e3]) | |
| }); | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100,,40 | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]), | |
| snare: pp(4, [ | |
| ,,,, | |
| 100,,,, | |
| ,,,50, | |
| 100,,,30 | |
| ]), | |
| "piano1": pp(4, [e5,hld,e6,e5,hld,d6,b5,fs5,hld,hld,fs5,hld,hld,hld,d5,hld]), | |
| "piano2": pp(4, [a3,hld,hld,hld,hld,e5,hld,d5,hld,hld,d5,hld,hld,e5,hld,e5]), | |
| "piano3": pp(4, [c5,hld,,c5,hld,b4,,a4,hld,hld,a4,hld,,d5,hld,]), | |
| "piano4": pp(4, [,a2,hld,hld,hld,g5,hld,b3,hld,hld,hld,hld,hld,a4,hld,]), | |
| "piano5": pp(4, [,,,,,,,b2,hld,hld,hld,hld,,,,]), | |
| "bass": pp(4, [c2,,,c3, | |
| ,,c2,, | |
| d2,,,d2, | |
| d3,,d2]), | |
| }); | |
| playPatterns({ | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "snare": pp(4, [ | |
| ,,,, | |
| 100,,,, | |
| ,,,, | |
| 100 | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]), | |
| "sinelead": pp(4, [e5(1/2),,g5(1/2),,a5(1/2),,b5,e5(1/2),,,,,,,,,,,g5(1/2),,a5,,b5,a5(1/2),,,b5(1/2),,d6(1/2),,,]), | |
| "bass": pp(4, [a2(1),,,,,,,a3,g2,,g2(1/2),,g3,g2(1/2),,,b2(3/4),,,,,,,b2(1/2),,,b2(1/2),,fs3,a3,,b3]), | |
| "piano": pp(4, [,b5(1/2),[,e6(1/2)],,g6(1/2),,fs6,d6(1/2),,,,,,,,,,,b5(1/2),,d6(1/2),,e6,b5(3/4),,,,,,,,], 8), | |
| "pads": pp(4, [[e6(9/4),c5(7/4),c6(2),g5(2),],,,,,,,,[,g5(7/4),d6(6),b4(2),g6(2)],,,,,,,, | |
| [fs6(4),d5(4),,a6(4),a5(4)],,,,,,,,,,,,,,,], 8), | |
| }); | |
| playPatterns({ | |
| "piano": pp(4, [,,,[g7(1/2),fs5(1/2)],,[d7(1/2),b4(1/2)]], 8), | |
| "eftang": pp(4, [,,,,,,,,e5,b5,d6,g6,a6,d7(1/2),,e7]), | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100,,40 | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]), | |
| snare: pp(4, [ | |
| ,,,, | |
| 100,,,, | |
| ,,,50, | |
| 100,30,,90 | |
| ]), | |
| }); | |
| } | |
| for(var n=0;n<2;n++) { | |
| playPatterns({ | |
| "eftang": pp(4, [a3(1/2),,e5(1/2),,a5,b5(1/2),,c6(1/2),,b5,a5,g5(1/2),,d5(3/4),,]), | |
| "bass": pp(4, [a2(1),,,,g3(1/2),,,g3,a3(1/2),,e3(1/2),,g3(1/2),,a3(1/2),,,,,,,,,,,,,,,,,]), | |
| "piano": pp(4, [[a5(1/2),e5(1/2),c6(1/2)],,,[a5(1/2),e5(1/2),c6(1/2)],,,[a5(1/2),e5(1/2),c6(1/2)],,,,[e5(1/2),a5(1/2),c6(1/2)],,,[a5(1/2),e5(1/2),c6(1/2)],,,[d5(1/2),g5(3/4),b5(3/4)],,,[g5(1/2),b5(1/2),d5(1/2)],,,,[a5(1/2),fs5(1/2),d5(1/2)],,,[fs5(3/4),d5(1/2),a5(1/2)],,,,[fs5(1/2),a5(1/2),d5(1/2)],], 8), | |
| "pads": pp(4, [[a3(4),e5(4),c6(4)],,,,,,,,,,,,,,,,[d6(4),b3(2),g5(2)],,,,,,,,[,fs5(2),d4(2)],,,,,,,], 8), | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "snare": pp(4, [ | |
| ,,,, | |
| 100,,,, | |
| ,,,, | |
| 100 | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]) | |
| }); | |
| playPatterns({ | |
| "eftang": pp(4, [b5(1/2),,d6(1/2),,b5,a5,g5,a5(3/4),,,b5(1/2),,a5,g5,e5,d5]), | |
| "bass": pp(4, [b2(3/4),,,b3(1/2),,b3(1/2),,c3,d3(1/2),,d4(1/2),,,d3,e4,]), | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "snare": pp(4, [ | |
| ,,,, | |
| 100,,,, | |
| ,,,, | |
| 100 | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]) | |
| }); | |
| playPatterns({ | |
| "eftang": pp(4, [a3(1/2),,e5(1/2),,a5,b5(1/2),,c6(1/2),,b5,a5,g5(1/2),,d5(3/4),,]), | |
| "sinelead": pp(4, [a3(1/2),,e5(1/2),,a5,b5(1/2),,c6(1/2),,b5,a5,g5(1/2),,d5(3/4),,]), | |
| "bass": pp(4, [a2(1),,,,g3(1/2),,,g3,a3(1/2),,e3(1/2),,g3(1/2),,a3(1/2),,,,,,,,,,,,,,,,,]), | |
| "pads": pp(4, [[a3(4),e5(4),c6(4)],,,,,,,,,,,,,,,,[d6(4),b3(2),g5(2)],,,,,,,,[,fs5(2),d4(2)],,,,,,,], 8), | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "snare": pp(4, [ | |
| ,,,, | |
| 100,,,, | |
| ,,,, | |
| 100 | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]) | |
| }); | |
| playPatterns({ | |
| "eftang": pp(4, [b5(1/2),,d6(1/2),,b5,a5,g5,a5(3/4),,,b5(1/2),,a5,g5,e5,d5]), | |
| "sinelead": pp(4, [b5(1/2),,d6(1/2),,b5,a5,g5,a5(3/4),,,b5(1/2),,a5,g5,e5,d5]), | |
| "bass": pp(4, [b2(3/4),,,b3(1/2),,b3(1/2),,c3,d3(1/2),,d4(1/2),,,d3,e4,]), | |
| "piano": pp(4, [[d5(1/2),g5(3/4)],,,[g5(1/2),b5(1/2)],,,,[a5(1/2),fs5(1/2)],,,[fs5(1/2),d5(1/2)],,g7(1/2),[,fs7(1/2)],d7(1/2),[,a6]], 8), | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "snare": pp(4, [ | |
| ,,,, | |
| 100,20,,, | |
| ,,,70, | |
| 100,,,60 | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]) | |
| }); | |
| } | |
| // playFromHere(); | |
| for(var n=0;n<4;n++) { | |
| playPatterns({ | |
| "bass": pp(4, | |
| [ | |
| [e2(8)], | |
| [1,1,1,1,1,1,1,1,1,1,1,1,1,1], | |
| [ | |
| e2(0.5),,,e2, | |
| ,,a2,as2, | |
| b2,,,d3, | |
| ,,e3(0.5) | |
| ], | |
| [ | |
| e2(0.5),,,e2, | |
| ,,a2,as2, | |
| b2,,b3,d3, | |
| ,d4,e3(0.5) | |
| ], | |
| ] | |
| [n] | |
| ), | |
| "pads": pp(4, [[d6(2),g5(2),,,,,],[,,b5(2),d5(2),d6(2),b4(2),fs6(2)],,,,,,,,,,,,,], 8), | |
| "piano": pp(4, [[e3(7/4),g6(1/2),],[,,fs6(1/2)],[,d6,],[,a5(1/2),],[,,g5(5/4)],,,,,,fs5(3/4),,,,,], 8), | |
| "sinelead": pp(4, [e5,b5,e6,a6,d7(3/4),,,,,,,,,,,]), | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]) | |
| }); | |
| } | |
| for(var n=0;n<4;n++) { | |
| playPatterns({ | |
| "bass": pp(4, | |
| [ | |
| [ | |
| e2(0.5),,,e2, | |
| ,,a2,as2, | |
| b2,,,d3, | |
| ,,e3(0.5) | |
| ], | |
| [ | |
| e2(0.5),,,e2, | |
| ,,a2,as2, | |
| b2,,b3,d3, | |
| ,d4,e3(0.5) | |
| ], | |
| ] | |
| [n % 2] | |
| ), | |
| "pads": pp(4, [[d6(4),g5(4),b5(4),d5(4),d6(4),b4(4),fs6(4)],,,,,,,,,,,,,], 8), | |
| "piano": pp(4, | |
| [ | |
| e5(1),[,g6,b6],,, | |
| [,g6,b6],a5,b5(0.5),[,fs6,a6,cs7], | |
| ,,[,fs6,a6,cs7],, | |
| ,e5(0.5),[,,b5,g6(0.5),b6(0.5),d7(0.5)] | |
| ], 8), | |
| "sinelead": pp(4, [e5,b5,e6,a6,d7,a6,e6,b5,e5].slice(0, (n + 1) * 2)), | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "snare": pp(4, [ | |
| ,,,, | |
| 100,,,, | |
| ,,,n === 3 ? 20 : 0, | |
| 100,,,n === 3 ? 40 : 0, | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]) | |
| }); | |
| } | |
| // playFromHere(); | |
| for(var n=0;n<2;n++) { | |
| playPatterns({ | |
| "bass": pp(4, | |
| [ | |
| [ | |
| e2(0.5),,,e2, | |
| ,,a2,as2, | |
| b2,,,d3, | |
| ,,e3(0.5) | |
| ], | |
| [ | |
| e2(0.5),,,e2, | |
| ,,a2,as2, | |
| b2,,b3,d3, | |
| ,d4,e3(0.5) | |
| ], | |
| ] | |
| [n % 2] | |
| ), | |
| "pads": pp(4, [[d6(4),g5(4),b5(4),d5(4),d6(4),b4(4),fs6(4)],,,,,,,,,,,,,], 8), | |
| "eftang": pp(4, [,,e5(1/2),,b5(1/2),,e5(1/2),,d6(3/4),,,cs6(3/4),,,a5(1/2),,b5(5/2),,,,,,,,,,,,,,a5,b5,a5(3/4),,,g5(1/2),,,fs5(1/2),,d5(3/4),,,e5(3/4),,,b4(1/2),,d5(3/4),,,e5(3/4),,,b4(7/4),,,,,,,,,]), | |
| "piano": pp(4, | |
| [ | |
| e5(1),[,g6,b6],,, | |
| [,g6,b6],a5,b5(0.5),[,fs6,a6,cs7], | |
| ,,[,fs6,a6,cs7],, | |
| ,e5(0.5),[,,b5,g6(0.5),b6(0.5),d7(0.5)] | |
| ], 8), | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "snare": pp(4, [ | |
| ,,,, | |
| 100,,,, | |
| ,,,n === 3 ? 20 : 0, | |
| 100,,,n === 3 ? 40 : 0, | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]) | |
| }); | |
| playPatterns({ | |
| "bass": pp(4, | |
| [ | |
| [ | |
| d2(0.5),,,d2, | |
| ,,a2,as2, | |
| b2,,,d3, | |
| ,,d3(0.5) | |
| ], | |
| [ | |
| d2(0.5),,,d2, | |
| ,,a2,as2, | |
| b2,,b3,d3, | |
| ,d4,e3(0.5) | |
| ], | |
| ] | |
| [n % 2] | |
| ), | |
| "pads": pp(4, [[d6(4),fs5(4),a5(4),d5(4),cs6(4),d4(4),fs6(4)],,,,,,,,,,,,,], 8), | |
| "piano": pp(4, [,,[d7(1/2),a6(1/2),],,,[a6(1/2),d7(1/2),],,,[d7(1/2),a6(1/2),],,,[e7(3/4),a6(1/2),],,,[d7(1/2),a6(1/2),],[,,c7],,,,,,,c7(1/2),[,g6,],c7(3/4),[,g6(1/2),],,[b6(1/2),g6(1/2),],,,[g6(1/2),b6,],,[g6(1/2),b6(1/2)],,,a6(1/2),,,g6,,fs6,g6,[,fs6],d6(1/2),,,b5,], 8), | |
| "sinelead": pp(4, [,,,,,g6,fs6,d6,a5(1/2),,,,,,g5,a5,g5(1/2),,fs5(1/2),,,d5,e5(1/2),,b4(1/2),,d5,a4(1/2),,a4,b4(1/2),]), | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "snare": pp(4, [ | |
| ,,,, | |
| 100,,,, | |
| ,,,, | |
| 100,,,, | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]) | |
| }); | |
| playPatterns({ | |
| "bass": pp(4, [a2(1/2),,,a3(1/2),,,d3,ds3,e3,,,g3(1/2),,,a3(1/2),]), | |
| "pads": pp(4, [[g5(4),g6(4),e6(4),c6(4),a3(4),g4(4)]], 8), | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,20, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "snare": pp(4, [ | |
| ,,,, | |
| 100,,,, | |
| ,,,, | |
| 100,,,, | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]) | |
| }); | |
| playPatterns({ | |
| "bass": pp(4, [c2(3/4),,,c3(3/4),,,c3(1/2),,d2(1/2),,d3(1/2),,,,d3,]), | |
| "pads": pp(4, [[,b5(4),g6(4),e4(4),b4(4),fs6(4)]], 8), | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "snare": pp(4, [ | |
| ,,,, | |
| 100,,,, | |
| ,,,50, | |
| 100,,,80, | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]) | |
| }); | |
| } | |
| // playFromHere(); | |
| playPatterns({ | |
| "pads": pp(4, [[d6(8),g5(12),b5(8),d5(8),d6(8),b4(8),fs6(8),e4(8)],,,,,,,,,,,,,], 8), | |
| "piano": pp(4, [,,e5(27/4),,[,b5(29/4),,,],[,,d6(23/4),,],,[,,,g6,],[,,,,d7],[,,,g7(3/4),],,[,,,,fs7(3/4)],,,[,,,d7(1/2),],,,,[,,,a6(1/2)],,[,,,b6(1/2)],,[,,,a6],[,,,g6(1/2)],,[,,,a6],[,,,g6],,[,,,fs6(1/2)],,d6(1/2),,e6(1/2),[,e5(3/2)],d6,b5(1/2),,,,,a5,as5(1/2),[,b5],b5(1/2),,d6(1/2),,e6(3/4),,,,,,,,,,,b5,e6,fs6(1/2),,,], 8), | |
| "bass": pp(4, | |
| [ | |
| e2(0.5),,,e2, | |
| ,,a2,as2, | |
| b2,,,d3, | |
| ,,e3(0.5) | |
| ] ), | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]) | |
| }); | |
| playPatterns({ | |
| "bass": pp(4, | |
| [ | |
| e2(0.5),,,e2, | |
| ,,a2,as2, | |
| b2,,b3,d3, | |
| ,d4,e3(0.5) | |
| ] ), | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100, | |
| ]), | |
| "sinelead": pp(4, [,,,,,,,,,,,,,,,,,,,,,,,,g7,fs7,d7,a6(1/2),,,,,,,,,g6,fs6,d6,a5(1/2),,a5(1/2),,b5,a5(1/2),,d6,]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| 30,30,90,30, | |
| ]) | |
| }); | |
| playPatterns({ | |
| "pads": pp(4, [[e4(10),a5(6),d6(6),d5(6),g6(6),b4(8)],,,,,,,], 8), | |
| "bass": pp(4, | |
| [ | |
| e2(0.5),,,e2, | |
| ,,a2,, | |
| b2,,,d3, | |
| ,d4,e3(0.5) | |
| ] ), | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,8, | |
| 100,,,, | |
| 100 | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,30, | |
| 30,,90,30, | |
| 30,30,90,, | |
| 30,30,90,30, | |
| ]) | |
| }); | |
| playPatterns({ | |
| "bass": pp(4, | |
| [ | |
| g3(1),,,, | |
| ,,e3,, | |
| d3,e3 | |
| ] ), | |
| "kick": pp(4, [ | |
| 100,,,, | |
| 100,,,50, | |
| 100,,,80, | |
| 100,,90,, | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,30,90,, | |
| 30,,90,30, | |
| 30,,90,, | |
| 30,,,, | |
| ]) | |
| }); | |
| playPatterns({ | |
| "sinelead": pp(4, [e5(2)]), | |
| "piano": pp(4, [e5(2),[,b5],[,,fs6]],8), | |
| "bass": pp(4, | |
| [ | |
| e2(3) | |
| ] ), | |
| "kick": pp(4, [ | |
| 100,20 | |
| ]), | |
| "hihat": pp(4, [ | |
| 30,,60,10 | |
| ]) | |
| }); |
This file contains hidden or 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 { Snare2 } from "../instruments/drums/snare2.class"; | |
| import { SawBass3 } from "../instruments/bass/sawbass3"; | |
| 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"; | |
| export const PATTERN_SIZE_SHIFT: usize = 4; | |
| export const BEATS_PER_PATTERN_SHIFT: usize = 2; | |
| const gain: f32 = 0.13; | |
| const ENABLE_MULTIBAND_COMPRESSOR = false; | |
| let freeverb = new Freeverb(); | |
| const delayframes = (SAMPLERATE * (2/3) * 60 / 110) 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 kick = new Kick2(); | |
| const bass = new SawBass3(); | |
| const eftang = new Eftang(); | |
| const snare = new Snare2(); | |
| 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; | |
| } | |
| } | |
| 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); | |
| } | |
| 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.2, 0.5); | |
| bass.next(); | |
| mainline.addStereoSignal(bass.signal, 4, 0.5); | |
| reverbline.addStereoSignal(bass.signal, 0.1, 0.5); | |
| eftang.next(); | |
| mainline.addStereoSignal(eftang.signal, 2.3, 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.2, 0.5); | |
| echoline.left += delayRight.read() * 0.5; | |
| echoline.right += delayLeft.read() * 0.5; | |
| 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.3, 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); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment