Created
June 27, 2026 14:41
-
-
Save ajangrahmat/b3c0a25436d347997f07eb628a1799a7 to your computer and use it in GitHub Desktop.
strudle_remix_Music 4 Machines — Clean Version.js
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
| // Music 4 Machines — Clean Version | |
| // Struktur: variasi melodi (tease) → melodi utama masuk | |
| let cpm = 94/4; | |
| // ============================================================ | |
| // DRUMS | |
| // ============================================================ | |
| let drums_light = stack( | |
| sound(`<bd>*4`).bank("RolandTR909").gain(0.7), | |
| sound("<hh>*8").bank("LinnDrum").gain(0.12) | |
| ); | |
| let drums_full = stack( | |
| sound(`<bd>*4, <- sd>*4, <- cp:3>*4`).bank("RolandTR909"), | |
| sound("<- hh>*8").bank("LinnDrum").gain(0.20), | |
| sound("<sh>*8").bank("RolandTR808").gain(0.25) | |
| ); | |
| let drums_climax = stack( | |
| sound(`<bd>*4, <sd cp:3>*4, <- cp:3>*4`).bank("RolandTR909"), | |
| sound("<hh>*8").bank("LinnDrum").gain(0.30), | |
| sound("<sh>*8").bank("RolandTR808").gain(0.35), | |
| sound("<cp:3>*8").bank("RolandTR909").gain(0.18) | |
| ); | |
| // ============================================================ | |
| // BASS | |
| // ============================================================ | |
| let bass_intro = cat( | |
| "<c2>*4","<g1>*4","<eb1>*4","<eb1>*4" | |
| ).note() | |
| .n(1).sound("gm_synth_bass_1") | |
| .lpf(80).lpenv(2).lpa(.8).lps(.9).lpd(.2) | |
| .gain(0.35); | |
| let bass = cat( | |
| "<c2>*4","<g1>*4","<eb1>*4","<eb1!2 f1!2>*4", | |
| "<c2>*4","<g1!2 bb1!2>*4","<eb1>*4","<f1>*4" | |
| ).note() | |
| .n(1).sound("gm_synth_bass_1") | |
| .lpf(200).lpenv(5).lpa(.5).lps(.8).lpd(.1); | |
| let bass_climax = cat( | |
| "<c2>*4","<g1>*4","<eb1>*4","<eb1!2 f1!2>*4" | |
| ).note() | |
| .n(1).sound("gm_synth_bass_1") | |
| .lpf(600).lpenv(8).lpa(.3).lps(.7).lpd(.1) | |
| .gain(1.1); | |
| // ============================================================ | |
| // MELODI UTAMA (original — tidak diubah) | |
| // ============================================================ | |
| let synth_arpeggio = cat( | |
| "<c3 c4 eb5 c3 c4 d5 c3 bb4>*8", | |
| "<g2 g3 bb4 g2 g3 a4 g2 g4>*8", | |
| "<eb2 eb3 g4 eb2 eb3 f4 eb2 g4>*8", | |
| "<eb2 eb3 g4 eb2 eb3 f4 f2 g4>*8", | |
| "<c3 c4 eb5 c3 c4 d5 c3 bb4>*8", | |
| "<g2 g3 bb4 g2 bb4 c5 bb2 g4>*8", | |
| "<eb2 eb3 g4 eb2 eb3 f4 eb2 g4>*8", | |
| "<f2 f3 g4 f2 f3 a4 f2 a4>*8", | |
| ).note() | |
| .n(1).sound("gm_pad_poly") | |
| .decay(.95).lpf(5000).lpenv(-3).lpa(.2) | |
| .delay(".3:0.225:0.45") | |
| .room(0.80).rsize(2); | |
| let synth_bass = cat( | |
| "<c3 c4 - c3 c4 - c3 ->*8", | |
| "<g2 g3 - g2 g3 - g2 ->*8", | |
| "<eb2 eb3 - eb2 eb3 - eb2 ->*8", | |
| "<eb2 eb3 - eb2 eb3 - f2 ->*8", | |
| "<c3 c4 - c3 c4 - c3 ->*8", | |
| "<g2 g3 - g2 g3 - bb2 ->*8", | |
| "<eb2 eb3 - eb2 eb3 - eb2 ->*8", | |
| "<f2 f3 - f2 f3 - f2 ->*8" | |
| ).note() | |
| .n(0).sound("gm_synth_bass_1") | |
| .attack(.1).decay(.25).release(.25) | |
| .lpf(2250).lpenv(2).lpa(.03).lpr(.2).lpd(.3) | |
| .gain(.5); | |
| let synth_lead = cat( | |
| "<- - eb5 - - d5 - bb4>*8", | |
| "<- - bb4 - - a4 - g4>*8", | |
| "<- - g4 - - f4 - g4>*8", | |
| "<- - g4 - - f4 - g4>*8", | |
| "<- - eb5 - - d5 - bb4>*8", | |
| "<- - bb4 - bb4 c5 - g4>*8", | |
| "<- - g4 - - f4 - g4>*8", | |
| "<- - g4 - - a4 - a4>*8", | |
| ).note() | |
| .n(1).sound("gm_pad_metallic") | |
| .decay(.95).delay(".3:0.225:0.45") | |
| .room(0.80).rsize(2).gain(0.60); | |
| // ============================================================ | |
| // VARIASI MELODI — tease sebelum melodi utama masuk | |
| // Chord sama (Cm Gm Ebm Fm), tapi rhythm & oktaf beda | |
| // ============================================================ | |
| // TEASE A — long notes sparse, satu note per 2 beat | |
| // Kesan: "ini lagu apaan nih?" — penasaran | |
| let tease_A = cat( | |
| "<c4 - eb4 - g4 - eb4 ->*8", | |
| "<g3 - bb3 - d4 - bb3 ->*8", | |
| "<eb3 - g3 - bb3 - g3 ->*8", | |
| "<f3 - a3 - c4 - a3 ->*8" | |
| ).note() | |
| .sound("gm_pad_new_age") | |
| .attack(0.8).decay(1.5).release(1.2) | |
| .room(0.90).rsize(4) | |
| .lpf(1500) | |
| .gain(0.55); | |
| // TEASE B — offbeat syncopated, rhythm mulai ada tapi masih tipis | |
| // Kesan: "oh ada groove nih" — mulai anticipate | |
| let tease_B = cat( | |
| "<- eb4 - g4 - d5 - bb4>*8", | |
| "<- bb3 - d4 - a4 - g4>*8", | |
| "<- g3 - bb3 - f4 - g4>*8", | |
| "<- g3 - bb3 - f4 - g4>*8" | |
| ).note() | |
| .sound("gm_pad_poly") | |
| .attack(0.15).decay(1.0).release(0.8) | |
| .delay(".25:0.20:0.35") | |
| .room(0.82).rsize(3) | |
| .lpf(2800) | |
| .gain(0.50); | |
| // RISER menuju melodi utama | |
| let riser = note("<c3>*1") | |
| .sound("gm_synth_strings_2") | |
| .attack(4).release(1) | |
| .lpf(cat(300, 800, 2000, 5000, 9000)) | |
| .room(0.9).rsize(3) | |
| .gain(0.50); | |
| // Outro pad | |
| let outro_pad = note("<c2 eb2 g2>*1") | |
| .sound("gm_pad_new_age") | |
| .attack(2).release(4) | |
| .room(0.98).rsize(5) | |
| .gain(0.35); | |
| // ============================================================ | |
| // SECTIONS | |
| // ============================================================ | |
| // [0:00–0:13] Tease A — variasi melodi saja, bass tipis, no drums | |
| // Pendengar belum tau ini lagu apa | |
| let section_tease_A = stack( | |
| bass_intro, | |
| tease_A | |
| ); | |
| // [0:13–0:29] Tease B — variasi melodi kedua, drums light masuk | |
| // Mulai ada groove tapi melodi utama belum muncul | |
| let section_tease_B = stack( | |
| drums_light, | |
| bass_intro.gain(0.55), | |
| tease_B | |
| ); | |
| // [0:29–0:45] DROP — melodi utama masuk! Full drums, riser sweep | |
| // "Oh INI dia lagunya!" — payoff dari tease | |
| let section_main = stack( | |
| drums_full, | |
| bass, | |
| synth_arpeggio, | |
| synth_bass, | |
| synth_lead.gain(0.55), | |
| riser | |
| ); | |
| // [0:45–1:12] KLIMAKS — semua full, gain naik | |
| let section_climax = stack( | |
| drums_climax, | |
| bass_climax, | |
| synth_arpeggio.gain(1.0), | |
| synth_bass.gain(0.70), | |
| synth_lead.gain(0.80) | |
| ); | |
| // [1:12–1:29] OUTRO — strip back, dissolve | |
| let section_outro = stack( | |
| sound("<bd>*4").bank("RolandTR909").gain(0.35), | |
| bass_intro.gain(0.25), | |
| synth_arpeggio.lpf(400).gain(0.22), | |
| outro_pad | |
| ); | |
| // ============================================================ | |
| // ARRANGE — ~1.5 menit @ cpm 31 | |
| // ============================================================ | |
| arrange( | |
| [6, section_tease_A], // 0:00–0:13 variasi A, ambient | |
| [8, section_tease_B], // 0:13–0:29 variasi B, groove tipis | |
| [8, section_main], // 0:29–0:45 melodi utama DROP 🎵 | |
| [12, section_climax], // 0:45–1:12 KLIMAKS 💥 | |
| [8, section_outro] // 1:12–1:29 dissolve | |
| ).cpm(31.0000); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment