Information Technology Grimoire

Version .0.0.1

IT Notes from various projects because I forget, and hopefully they help you too.

Switch Angel Tutorials

This is a series of tutorials as I learned from the expert, @Switch-Angel. Cool stuff.

Try it

setcpm(136/4)
register('acidenv', (x, pat) => pat.lpf(100)
        .lpenv(x * 9).lps(.2).lpd(.12)
)

// main melody loop
$: n("<0 4 0 9 7>*16").scale("g:minor").trans(-12)

// change melody to sawtooth, add slider
.octave(3).s("sawtooth").acidenv(slider(0.655))

// visual the melody with pianoroll
._pianoroll()
// Base Loop
$: n("<0>*16").scale("g:minor").trans(-24)

// change melody to sawtooth, add slider
.octave(3).s("supersaw").acidenv(slider(0.632))

// visual the melody with pianoroll
._pianoroll()

// fit top to cycle
$: s("top:1/2").fit().octave(5)

// kickdrum, 4 on the floor
$: s("bd!4")
.duck("3:4:5:6")
.duckdepth(.8)
.duckattack(.16)
._scope()


$: note("<g3bb3d4  bb3d4f4  eb3g3bb3  f3a3c4>*4")
  .octave(4)
  .gain(1.6)
  .room(0.3)
  .s("sawtooth")
  .acidenv(slider(0.495))
  ._pianoroll()

Tutorial

Try it

setcpm(136/4)
register('acidenv', (x, pat) => pat.lpf(100)
        .lpenv(x * 9).lps(.2).lpd(.12)
)

// main melody loop
$: n("<<0 4 0 9 7> <0 4 0 9 7> <0 4 0 9 7> <0 7 4 11 9>>*16").scale("g:minor").trans(-12)
  .octave(3).s("sawtooth").acidenv(slider(0.655))
  ._pianoroll()

// change melody to sawtooth, add slider
.octave(3).s("sawtooth").acidenv(slider(0.655))

// Base Loop
$: n("<0>*16").scale("g:minor").trans(-24)

// change melody to sawtooth, add slider
.octave(3).s("supersaw").acidenv(slider(0.632))

// visual the melody with pianoroll
._pianoroll()

// fit top to cycle
$: s("top:1/2").fit().octave(5)

// kickdrum, 4 on the floor
$: s("bd!4")
.duck("3:4:5:6")
.duckdepth(.8)
.duckattack(.16)
._scope()

1st Attempt

Try it

setCpm(140/4)

// basic beat
$: s("<bd:2!4 bd:2!4 [bd:2 bd:2 ~ bd:2 bd:2] [bd:2*2 ~ bd:2 bd:2]>")
  .gain(.8)
  
// Add snare/clap variation
$: s("~ cp:2 ~ <cp:2 [cp:2 cp:2]>").gain(0.3)

// Hi-hat pattern changes
$: s("hh:3*8").gain("<<0.3 0.6 0.4 0.7> <0.3 0.6 0.3 0.6>>")

// 303, walking baseline, swapping instruments
$: n("<[0 [0 3] [5 7] [3 5]] [0 [0 3] [5 7] [3 5]] [[-2 0] [3 5] [7 10] [5 3]] [0 [0 3] [5 7] [3 5]]>").add(-14).scale("g:minor")
  .s("<gm_viola gm_cello gm_contrabass>".slow(4))  
  .lpf("<1500 2500 1000 1800>".slow(4))
  .resonance("<1 10 1 5>".slow(4))
  .gain(0.4)

Next Attempt

Try it

setCpm(140/4)

// Kick with drop
$: s("<bd:2!4!6 [~ ~ ~ [bd:2 bd:2*4]]>")._scope()

// THE DROP - melody silence then BOWWWW
$: n("<[0 [0 3] [5 7] [3 5]]!6 ~ [0!16]>").add(-21).scale("g:minor")
  .s("<gm_contrabass!6 ~ supersquare>".slow(8))  
  .lpf(sine.range(30, 5000).fast(4))  // BOWWWW oscillation
  .resonance("<1!6 ~ 35>".slow(8))  
  .gain("<0.4!6 ~ 1.0>".slow(8))
  .room("<0.1!6 ~ 0.9>".slow(8))

// White noise riser before drop
$: s("<~!6 wind ~>").gain("<~!6 [0 0.1 0.3 0.6] ~>".slow(8))

// Simple hi-hats - no crazy speed
$: s("hh:3*8").gain(0.6)

// Basic claps - simple and clean
$: s("~ cp:2 ~ cp:2").gain(0.4)

Variation, Understand Percussion

Try it

setCpm(140/4)

// Kick drops out then SLAMS back
$: s("<bd:2!4!6 [~ ~ ~ [bd:2 bd:2*4]]>")._scope()

// ACID BASSLINE - goes silent then DROPS HARD
$: n("<[0 [0 3] [5 7] [3 5]]!6 ~ [[0!8]*2]>").add(-14).scale("g:minor")
  .s("<gm_viola!6 ~ sawtooth>".slow(8))  
  .lpf("<1500!6 ~ [100 4000]>".slow(8))  // Filter SWEEPS on drop
  .resonance("<1!6 ~ 25>".slow(8))  // MASSIVE resonance on drop
  .gain("<0.4!6 ~ 0.7>".slow(8))
  ._pianoroll()

// Hi-hats build tension then go crazy
$: s("<[hh:3*8]!6 [hh:3*16] [hh:3*8]>").gain("<0.6!6 0.8 0.7>")

// Claps drop out then SLAM
$: s("<[~ cp:2 ~ cp:2]!6 ~ [cp:2!4]>").gain("<0.4!6 ~ 0.8>")

Final Lesson: Combine

Try it

setCpm(140/4)

// basic beat
//$: s("bd:2!4")
// progressive chagnes in beat
//$: s("<bd:2!4 [bd:2!3 bd:2*2] bd:2!4 [bd:2 ~ bd:2 bd:2]>")
$: s("<bd:2!4 bd:2!4 [bd:2 bd:2 ~ bd:2 bd:2] [bd:2*2 ~ bd:2 bd:2]>")

// syncopated fill every 4th
//$: s("<bd:2!4 bd:2!4 bd:2!4 [bd:2*2 bd:2 ~ bd:2]>")
// build tension with doubles
//$: s("<bd:2!4 bd:2!4 bd:2!4 [bd:2!3 bd:2*2]>")
// drops
//$: s("<bd:2!4!6 ~ [bd:2 ~ ~ bd:2]>")
  .gain(.8)
  
// Add snare/clap variation
$: s("~ cp:2 ~ <cp:2 [cp:2 cp:2]>").gain(0.3)

// Hi-hat pattern changes
$: s("hh:3*8").gain("<<0.3 0.6 0.4 0.7> <0.3 0.6 0.3 0.6>>")

// 303, walking baseline, swapping instruments
$: n("<[0 [0 3] [5 7] [3 5]] [0 [0 3] [5 7] [3 5]] [[-2 0] [3 5] [7 10] [5 3]] [0 [0 3] [5 7] [3 5]]>").add(-14).scale("g:minor")
  .s("<gm_viola gm_cello gm_contrabass>".slow(4))  
  .lpf("<1500 2500 1000 1800>".slow(4))
  .resonance("<1 10 1 5>".slow(4))
  .gain(0.4)
Last updated on 16 Nov 2025
Published on 16 Nov 2025