Skip to content

Music

Streaming

Or search for "Kirk Rader" on the music service you prefer...

Amazon Music

https://music.amazon.com/artists/B004L4HW52/kirk-rader

Amazon Music QR

Amazon Music

Apple Music

https://music.apple.com/us/artist/kirk-rader/417090159

Apple Music QR

Apple

Spotify

https://open.spotify.com/artist/06lMz4EjJn3pYej2kGIL5t

Spotify QR

Spotify

YouTube Music

https://music.youtube.com/channel/UCp__q4DYBXYhq9uiD2Y8vUg

YouTube Music QR

Youtube Music

Background

I started creating electronic music on the West Coast of the US, in the "West Coast Style," long before I knew that there was such a thing. My musical tastes have always been outside the mainstream. The first album I purchased with my "own" money was a vinyl recording (there were no other commercially significant recording media for sale in the mid 1960's) of Schubert's Unfinished Symphony which I had worn the grooves out of by the time I turned 7 years old. When I was studying formal linguistics and teaching myself to program computers in my late teens and early twenties, I did so to a personal soundtrack that featured Lou Reed's Metal Machine Music (yes, the album consisting of 4 LP sides of electric guitar feedback and effects pedal noise that literally ended his career just as it was beginning to take off in the mid 70's and then went on to become the stuff of legends decades later).

My favorite composers include Tallis, Monteverdi, Vivaldi, Bach, Handel, Beethoven, Glass and Byrne as well as hard-core mid-century experimentalists like Stockhausen and Subotnick. If you have never heard any of my own stuff, consider the combination of those influences as fair warning.

Over the years I have used a variety of traditional instruments and electronic gear to make, er, um, "music?" Yes, let's call it "music."

Approaches & Techniques

My process for creating music has evolved as new technologies have become available, but conceptually is not all that different from how I started out as a composer. I have loved listening to many types of music all my life. The first album that I bought with my "own" money was a recording of Schubert's Unfinished Symphony. I had worn the grooves out of it by the time I turned seven years old. By the time I was in my late teens, I was writing papers for my degree in Formal Linguistics and, a couple of years later, teaching myself to program computers while listening to a personal soundtrack that featured Lou Reed's Metal Machine Music -- yes, the 4-LP sides' worth of guitar feedback and effects noise that ended his career just as it was starting to take off in the late 1970's. You will find strong hints of all those influences - classical and experimental music together with mathematics and a love of algorithms - throughout my musical oeuvre. To me, an analog synthesizer is a device for translating what are essentially mathematical formulas into acoustic impulses, which are occasionally and serendipitously esthetically pleasing (at least to someone with my extremely idiosyncratic tastes). Computer software makes that even more literally true.

Mostly Analog

The majority of my pieces are created using a process not very different from how I worked in the 70's. I usually begin with a concept for a modular synth patch. These are usually pretty basic notions of ways to connect (and sometimes cross-connect) modules in the signal and control paths, such as "use the interference pattern of two low-frequency oscillators to create a rhythm," "use pitch sweeps driven by an envelope generator on the inputs to a ring modulator to create dynamic timbre" and the like. I then simply play around with such patches -- changing the underlying wave forms, inverting the phase of some of the low-frequency oscillator signals, changing the base frequency relationships when using FM, and so on -- until I find something that appeals to my very idiosyncratic tastes sufficiently to be worth recording. I then repeat the same process to create multiple layers of sound for a given composition. Where I used a multitrack analog recorder back in the day, I now use Audacity to record each sonic layer. Finally, I align and trim the tracks, add fades and similar basic editing in the DAW to produce a final mix as a FLAC file.

Most of the time, when I "play" a piece during the recording process it is by adjusting potentiometers to alter the patch in real time. Often I don't do even that during the recording but, instead, allow the "logic" of a given patch to play itself out over time. When I use a keyboard at all when working this way, it is usually to provide trigger and gate voltages rather than to play "notes" in the traditional sense. One characteristic of modular analog synthesis is that small changes to a given patch can produce dramatic differences in the resulting sound. Multiple tracks on a given album may be the result of the process I just described, using relatively minor variations of a single patch.

An aspect of this approach is that there usually is neither a musical score in the conventional sense nor any way to recover the exact combinations of settings and initial phase relationships of the various modules contributing to a patch. Once a track is recorded, that recording is the only representation of that exact "composition" and there would be no way for me or anyone else to perform it again and get the same result. This is one of the features of "West Coast" analog electronic music that I find conceptually attractive. There is a complete break not only from traditional tunings, structures and forms but the totality of a musical composition created in this way is represented entirely by its acoustic signature and nothing else.

But More Than a Little Digital

All of that said, I have increased my use over the years of tools and techniques that simply did not exist when I was young. Some of the sounds on my albums were produced using completely digital synthesis. These are often in the form of digital audio samples or the output of VST plugins using software like Ableton Live and Sonic Pi. Using Ableton Live, I can play a keyboard (to within the very narrow limis of my skill) to produce more conventionally tonal music. Some pieces consist only of tracks recorded in this way, while others combine analog and digital sound sources in various ways.

For example, the two versions of Farandole Lamentoso on my album The Modern Temple of Amusement were created using a single Sonic Pi program generating output in two ways: the "8-bit mix" consists of a digital audio file generated directly by Sonic Pi using some of its built-in digital synthesizers. The "2600 remix" uses the Behringer 2600 as the sound source, driven by the same Sonic Pi program, but by sending a sequence of MIDI commands rather than generating digital audio directly. Because the 2600 is monophonic, the latter version required running the program multiple times with slight modifications each time to produce the MIDI sequence for each voice separately.

Another piece, Ghostly Reminiscences, on the same album as the Farandole, was produced entirely as the output of another Sonic Pi program. Even when using digital tools like Sonic Pi, I tend to use randomization and sonic layering to produce unconventional timbres, rhythms and harmonies that will vary endlessly no matter how long they are looped. These Ruby source code files are the closest I am likely to come to writing "scores" for any of my music. This is my "West Coast" approach applied to using "East Coast" inspired gear and software.

See SonicPi "Scores" for Ruby code examples as musical scores.

Studio Setups

Yesterday

Here is the setup I used when creating tracks in the 70's and 80's, a few of which eventually were published as the album Undecidable in 2011, once self-publishing music started to become a thing:

The Knabe piano I had as a kid was built in the 1930's and sounded far better recordings were made in my childhood bedroom or various apartments I had as a college student and young adult using decidedly consumer-level microphones and recording technologies of the era. The jankiness of the audio quality appeals to me as an artifact of the period of my life and the circumstances in which they were created, but I cannot argue with anyone who finds it less charming than I.

Today

The albums I have been publishing more recently have been created using variations of this setup:

Hardware

...plus various Eurorack modules that change embarassingly frequently

Software

  • Audacity Digital Audio Workstation (DAW)
  • Ableton Live real-time digital synthesis and effects
  • Sonic Pi Ruby dialect and runtime platform for creating digital music and controlling MIDI instruments

...running on a creaky old MacBook Pro laptop

Musicography

Undecidable

UPC 885767506688

TrackTitleISRC
1Opus 1QMYYH1100001
2Opus 2QMYYH1100002
3Sample and Hold 2QMYYH1100003
4Segnahc CigamQMYYH1100004
5Sample and Hold 1QMYYH1100005
6Opus 6QMYYH1100006

Dum Viviums

UPC 198015910503

TrackTitleISRC
12600 ReduxQZXKT2300001
2Dum VivimusQZXKT2300002
3VivamusQZXKT2300003
4Sliders and KnobsQZXKT2300004
5and CablesQZXKT2300005
6One Modulator to Rule Them AllQZXKT2300006
7Sonatina in No Particular Key Part 1QZXKT2300007
8Noise to SignalQZXKT2300008

Untitled

UPC 198015912095

TrackTitleISRC
1UntitledQZXKT2300009
2Whoop WhoopQZXKT2300010
3Ring of Sines and a SquareQZXKT2300011

Songs Not Yet and No Longer Sung

UPC 198015955498

TrackTitleISRC
1Sonatina in No Particular Key Pt. 2QZXKT2300012
2Fire and ForgetQZXKT2300013
3DivergenceQZXKT2300014
4Douse and RememberQZXKT2300015
5FaerieQZXKT2300016
6MúspellsheimrQZXKT2300017
7NiflheimrQZXKT2300018
8LamentQZXKT2300019
9OstinatoQZXKT2300020

March

UPC 198025013270

TrackTitleISRC
1MarchQZXKT2300021
2Ludwig van SynthpopQZXKT2300022
3E Minor TuneQZXKT2300023

April

UPC 198025078903

TrackTitleISRC
1Sonatina in No Particular Key Part 3QZXKT2300025
2Krell National AnthemQZXKT2300024
3TriadQZXKT2300026
4Iaulath BerúthielQZXKT2300027
5Sinusoidal SyncopationQZXKT2300029
6PWMQZXKT2300030
7Fall, RiseQZXKT2300028

No Chatbots Were Harmed in the Making of This Album

UPC 198025252013

TrackTitleISRC
1Analogy in C MinorQZXKT2300036
2RegretQZXKT2300032
3πQZXKT2300031
4YNBBBQZXKT2300033
5ChicxulubQZXKT2300035
6Rainy Day FanfareQZXKT2300037
7At His Heels, Leashed In Like HoundsQZXKT2300038
8Crouched for EmploymentQZXKT2300039
9Analogy in C MajorQZXKT2300034

Ambivalence

UPC 198025421488

TrackTitleISRC
1EffulgenceQZXKT2300045
2VigilanceQZXKT2300040
3PerseveranceQZXKT2300041
4CoherenceQZXKT2300042
5ReluctanceQZXKT2300043
6EbullienceQZXKT2300044
7SomnambulanceQZXKT2300046
8EmergenceQZXKT2300047
9DisturbanceQZXKT2300049
10TranscendenceQZXKT2300048

The Modern Temple of Amusement (Volume 1)

UPC 198025591679

TrackTitleISRC
1Floating TheaterQZXKT2300050
2Mount VesuviusQZXKT2300051
3SoliloquyQZXKT2300052
4Dramma BernescoQZXKT2300053
5Ghostly ReminiscencesQZXKT2300054
6Au QuaiQZXKT2300055
7Farandole Lamentoso (8-bit mix)QZXKT2300056
8Farandole Lamentoso (2600 remix)QZXKT2300057
9SteamboatmanQZXKT2300058
10Foggy RiverQZXKT2300059
11DecommissionedQZXKT2300060
12Repercussions 1QZXKT2300061
13Repercussions 2QZXKT2300062
14Repercussions 3QZXKT2300063
15Repercussions 4QZXKT2300064
16Repercussions 5QZXKT2300065
17Repercussions 6QZXKT2300066
18Repercussions 7QZXKT2300067
19Repercussions 8QZXKT2300068
20Repercussions 9QZXKT2300069
21Repercussions 10QZXKT2300070

Album 10

UPC 198025739965

TrackTitleISRC
1Incipio ex regulumQZXKT2300071
2IntroductionQZXKT2300072
3Variation 1QZXKT2300073
4Interlude 1QZXKT2300074
5Variation 2QZXKT2300075
6Interlude 2QZXKT2300076
7Variation 3QZXKT2300077
8Interlude 3QZXKT2300078
9RecapitulationQZXKT2300079
10Reductio ad absurdumQZXKT2300080
11EpilogueQZXKT2300081

Rhythms

UPC 198025759802

TrackTitleISRC
1Rhythm 1QZXKT2300082
2Rhythm 2QZXKT2300083
3Rhythm 3QZXKT2300084
4Rhythm 4QZXKT2300085
5Rhythm 5QZXKT2300086
6Rhythm 6QZXKT2300087
7Euclidean Tablas and Random DronesQZXKT2300088
8Sinfonietta for Cowbell OrchestraQZXKT2300089
9Concerto for Cowbell, Low Percussion and Manic ChoirQZXKT2300090
10Farandole in Tempore BelliQZXKT2300091

Digitalis

UPC 198025865497

TrackTitleISRC
1Digitalis in C MinorQZXKT2300092
2PoisonQZXKT2300093
3SynaesthesiaQZXKT2300094
4Chromatic ParrotsQZXKT2300095
5Shuffle OffQZXKT2300096
6Tethyc TempoQZXKT2300097
7Tethyc MelodyQZXKT2300098
8Arise, Fair SunQZXKT2300099

XIII

UPC 198053826262

TrackTitleISRC
1UndineQZXKT2300100
2I Alone Am LeftQZXKT2300102
3Whistling GongsQZXKT2300103
4Y. A. M. P.QZXKT2300104
5Tower of SinesQZXKT2300105
6Lean ToQZXKT2300106
7Contrary TrigonometryQZXKT2300107
8Growling BellsQZXKT2300108
9Schoenbergian SteampunkQZXKT2300109
10Twelvish TonesQZXKT2300110
11Twelvish More TonesQZXKT2300111
12Without IndicationQZXKT2300112
13XIIQZXKT2300113

Empyrean

UPC 198027297876

TrackTitleISRC
1Whom the Gods DestroyQZXKT2300114
2They First Make MadQZXKT2300115
3Steady StateQZXKT2300116
4Traces Through the Cloud ChamberQZXKT2300117
5Unsteady State (Steady State Redux)QZXKT2300118
6Noisy MelodyQZXKT2300119
7Ready, SteadyQZXKT2300120
8Airy FairyQZXKT2300121
9March of the Airy FairiesQZXKT2300122
10MigrationQZXKT2300123

Tangents and Sines and Rings

UPC 198089504462

TrackTitleISRC
1Black and White and Pink All OverQZXKT2300124
2Tangents and Sines and RingsQZXKT2300125
3Drunken CalliopeQZXKT2300126
4UncertainQZXKT2300127
5471QZXKT2300128
6Successive UnrefinementQZXKT2300129
7Contrary RefinementQZXKT2300130
8FibonacciQZXKT2300131
9NautilusQZXKT2300132
10Holding Saws, Playing SinesQZXKT2300133
11Echoing PingalaQZXKT2300134
12Range of MotionQZXKT2300135
13PoesyQZXKT2300136
14Greed's MeedQZXKT2300137
15AnxietyQZXKT2300138

Baraboo to Dubuque

UPC 198088353832

TrackTitleISRC
1Baraboo to DubuqueQZXKT2300139

Baraboo to Dubuque (2600 Mix)

UPC 198088334046

TrackTitleISRC
1Baraboo to Dubuque (2600 Mix)QZXKT2300140

Driftless

UPC 198089343887

TrackTitleISRC
1Baraboo to DubuqueQZXKT2300139
2Baraboo to Dubuque (2600 Mix)QZXKT2300140
3House On the RockQZXKT2300141
4DriftlessQZXKT2300142
5TaliesinQZXKT2300143
6Bridge Over the Great RiverQZXKT2300144
7The Storehouse of River LoreQZXKT2300145
8The Unvisited CavernQZXKT2300146

The Doctrine of Shareholder Value

UPC 198090343913

TrackTitleISRC
1The Maundering OratorQZXKT2300147
2The Marketplace of 'Ideas'QZXKT2300148
3A Conclave of Populist FantasistsQZXKT2300149
4Antisocial MediaQZXKT2300150
5NarcissusQZXKT2300151
6SycophantsQZXKT2300152
7Intended ConsequencesQZXKT2300153
8The Three BranchesQZXKT2300154
9One MasterQZXKT2300155
10Consensual RealityQZXKT2300156

Duodecatonic

UPC 198093234317

TrackTitleISRC
1DuodecatonicQZXKT2300157
2Randomly Rubato Wandering ChromaticsQZXKT2300158
3Cognitive DissonanceQZXKT2300159
4DuodecahexateQZXKT2300160
5SurjectionQZXKT2300161
6Continuum Hypothesis, Pt. 1QZXKT2300162
7Continuum Hypothesis, Pt. 2QZXKT2300163
8Continuum Hypothesis, Pt. 3QZXKT2300164
9Continuum Hypothesis, Pt. 4QZXKT2300165
10Continuum Hypothesis, Pt. 5QZXKT2300166
11Continuum Hypothesis, Pt. 6QZXKT2300167
12UnodecatonicQZXKT2300168

Down to the Wire

UPC 193667836836

TrackTitleISRC
1Rotating Shuffled Major TriadsQZXKT2300169
2Rotating Shuffled Minor TriadsQZXKT2300170
3SurgingQZXKT2300171
4DisequilibriumQZXKT2300172
5Shuffling Chromatic TriadsQZXKT2300173
6Lambda X Dot X of XQZXKT2300174
7Cross ProductQZXKT2300175
8Through Caverns MeasurelessQZXKT2300176

Ringing the Changes

UPC 19798688864

TrackTitleISRC
1Aleph NullQZXKT2300177
2YuletideQZXKT2300178
3SolsticeQZXKT2300179
4Mixolydian HarmoniesQZXKT2300180
5Aeolian CounterpointQZXKT2300181
6Dorian Light PinkQZXKT2300182
7Mixed Hesitant TemposQZXKT2300183
8Krampuslauf 1QZXKT2300184
9Krampuslauf 2QZXKT2300185
10NiklausQZXKT2300186

McFarland Souvenir (for Sean and Mary)

UPC 19307750037

TrackTitleISRC
1McFarland Souvenir (for Sean and Mary)QZXKT2400002

Ante Annus Novus

UPC 198078467266

TrackTitleISRC
113 Times 5QZXKT2300187
2ReversalQZXKT2300188
3OzymandiasQZXKT2300189
4Postquam Prior AnnusQZXKT2400001
5McFarland Souvenir (for Sean and Mary)QZXKT2400002
6Resonant Filter SweepQZXKT2400003
7Inverted RingsQZXKT2400004
8Surging CounterpointQZXKT2400005
9Rippling CounterpointQZXKT2400006
10PanopticonQZXKT2400007
11PrimeQZXKT2400008
12Lares CompitalesQZXKT2400009
13l'Enfant TerribleQZXKT2400010
14Running Out the ClockQZXKT2400011

2024-02

UPC 198085040643

TrackTitleISRC
12024-02-11-01QZXKT2400012
22024-02-11-02QZXKT2400013
32024-02-15-01QZXKT2400014
42024-02-15-02QZXKT2400015
52024-02-17-01QZXKT2400016
62024-02-17-02QZXKT2400017
72024-02-17-03QZXKT2400018
82024-02-17-04QZXKT2400019
92024-02-20QZXKT2400020
102024-02-24QZXKT2400021

SonicPi "Scores"

Ruby code examples as musical scores.

Au_Quai.rb

# Copyright 2023 Kirk Rader. All rights reserved.

# Au Quai

use_random_seed 0
use_random_source :perlin
use_synth :sine

terminate = false

define :randomatic do |min_n, max_n, min_d, max_d|
  
  in_thread do
    
    loop do
      
      if terminate
        stop
      end
      
      n = note(rrand_i(min_n, max_n))
      d = rrand(min_d, max_d)
      
      # midi n, sustain: d
      play n
      sleep d
      
    end
  end
end

randomatic(45, 75, 0.25, 0.75)
sleep 100
terminate = true

Decommisioned.rb

# Copyright 2023 Kirk Rader. All rights reserved.

# Decomissioned

terminate = false

define :drone do |name|
  
  in_thread do
    
    with_random_source :perlin do
      
      with_sample_bpm name do
        
        loop do
          
          if terminate
            stop
          end
          
          rate = rrand(0.5, 2.0)
          delay = 1.0 / rate
          sample name, rate: rate
          sleep delay
          
        end
      end
    end
  end
end

define :melody do |name|
  
  in_thread do
    
    with_synth name do
      
      with_random_source :pink do
        
        loop do
          
          if terminate
            stop
          end
          
          duration = rrand(0.5, 2.0)
          play rrand(45, 65), sustain: duration
          sleep duration
          
        end
      end
    end
  end
end

name = :ambi_glass_hum

drone name
drone name
#drone name
melody :dark_ambience
melody :dark_ambience

sleep 100
terminate = true

Farandole_Lamentoso.rb

# Copyright 2023 Kirk Rader. All rights reserved.

# Farandole Lamentoso

midi_all_notes_off
sleep 1

arp_synth = :dpulse
bass_synth = :bass_foundation
seed = 0
next_seed = 7
arps = 2
arp_tempo = 0.33
send_midi_arp = false
send_midi_bass = false
play_notes = true

define :play_arp do |r, c|
  
  use_synth arp_synth
  
  c.times do
    
    use_random_seed seed
    seed = seed + next_seed
    
    r.shuffle.length.times do
      
      n = r.tick
      
      if send_midi_arp
        midi n
      end
      
      if play_notes
        play n
      end
      
      sleep arp_tempo
      
    end
  end
end

define :play_bass do |n, s|
  
  use_synth bass_synth
  
  if send_midi_bass
    midi n, sustain: s
  end
  
  if play_notes
    play n, sustain: s
  end
  
end

define :play_bass_melody do |n, s|
  
  in_thread do
    
    n.length.times do
      
      play_bass n.tick, s
      sleep s
      
    end
  end
end

a_min = (ring :A3, :C4, :E4)
d_min = (ring :A3, :D4, :F4)
g_maj = (ring :G3, :B3, :D4)
c_maj = (ring :G3, :C4, :E4)
f_maj = (ring :F3, :A3, :C4)
b_min = (ring :F3, :B3, :D4)
a_min_inv = (ring :E3, :A3, :C4)
e_maj_sus = (ring :E3, :A3, :B3)
e_maj = (ring :E3, :Gs3, :B3)

bass_melody = (ring :C3, :A2, :B2, :Gs2)

2.times do
  
  play_bass :A3, (arps * a_min.length * arp_tempo)
  play_arp a_min, arps
  
  play_bass :D3, (arps * d_min.length * arp_tempo)
  play_arp d_min, arps
  
  play_bass :G3, (arps * g_maj.length * arp_tempo)
  play_arp g_maj, arps
  
  play_bass :C3, (arps * c_maj.length * arp_tempo)
  play_arp c_maj, arps
  
  play_bass :F3, (arps * f_maj.length * arp_tempo)
  play_arp f_maj, arps
  
  play_bass :B3, (arps * b_min.length * arp_tempo)
  play_arp b_min, arps
  
  play_bass_melody bass_melody, (a_min_inv.length * arp_tempo)
  play_arp a_min_inv, arps
  
  play_arp e_maj_sus, 1
  play_arp e_maj, 1
  
end

play_bass :A2, (arps * a_min_inv.length * arp_tempo)
play_arp a_min_inv, arps

if send_midi_arp
  midi :A4
end

if play_notes
  play :A4
end

play_bass :A2, (arps * a_min_inv.length * arp_tempo)

Farandole_in_Tempore_Belli.rb

# Copyright Kirk Rader 2023. All rights reserved.

# Farandole in Tempore Belli

# sleep duration for each beat
tempo = 0.2

# beats per measure
measure = 16

# drum rhythm
spread_lo = (spread 5, measure)
spread_mid = (spread 7, measure)
spread_hi = (spread 3, measure / 2 - 1)
spread_bass = (spread 1, measure)

# start of each measure
spread_measures = (spread 1, measure)

# arpeggio rhythms
spread_arp_1 = (spread measure / 3, measure / 2)
spread_arp_2 = (spread (measure / 2) + 1, measure)

chords = (ring
          (chord :a4, :minor),
          (chord :d4, :minor, invert: 2),
          (chord :g4, :major),
          (chord :c4, :major, invert: 2),
          (chord :f4, :major),
          (chord :b3, :diminished, invert: 2),
          (chord :a3, :minor, invert: 2),
          (chord :e4, :sus4),
          (chord :e4, :major))

bass = (ring
        (note :a2),
        (note :d1),
        (note :g1),
        (note :c1),
        (note :f2),
        (note :b1),
        (note :c2),
        (note :e1),
        (note :e1))

# duration of one measure
measure_hold = tempo * measure

# number of beats in a full phrase
phrase_length = chords.length * measure

# number of beats to repeat the full phrase 6 times
repeats = phrase_length * 6

# current beat number being played each time :master is cued
count = 0

# current phrase number being played each time :master is cued
phrase = 0

# stop threads next time :master is cued
terminate = false

# flags to allow different voices to be played out
# as separate tracks
enable_drums = true
enable_ambience = true
enable_chords = true
enable_arp_1 = true
enable_arp_2 = true
enable_bass = true

# flag to emit single-note voices (arp_1,
# arp_2 and bass) as midi events rather
# than playing audio output
enable_midi = false

# play arpeggio for 1 measure
define :play_arp do |notes, spread|
  in_thread do
    with_fx :reverb, room: 0.75 do
      with_synth :chiplead do
        measure.times do
          stop if terminate
          if spread.tick
            if enable_midi
              midi notes[0], sustain: tempo
            else
              play notes[0], sustain: tempo, amp: phrase * 0.1
            end
            notes = notes.rotate
          end
          sleep tempo
        end
      end
    end
  end
end

with_fx :reverb, room: 0.75 do
  
  begin
    
    # chords & arpeggios
    in_thread do
      with_random_source :perlin do
        loop do
          
          # await next beat
          sync :master
          stop if terminate
          
          # only take action once per measure
          if spread_measures.tick
            
            # play current chord using ambient voice
            with_synth :dark_ambience do
              with_transpose -12 do
                play chords[0], sustain: measure_hold, amp: 1.5 * phrase, pan: rrand(-0.5, 0.5) if enable_ambience && phrase > 0
              end
            end
            
            # play current chord as arpeggio using first pattern
            play_arp chords[0], spread_arp_1 if enable_arp_1 && phrase > 1
            
            # play current chord as arpeggio using second pattern
            play_arp chords[0], spread_arp_2 if enable_arp_2 && phrase > 2
            
            # play current cord using melodic voice
            with_synth :chipbass do
              play chords[0], sustain: measure_hold * 0.8, amp: phrase * 0.1, pan: rrand(-0.5, 0.5) if enable_chords && phrase > 2
            end
            
            # play current note in bass line
            with_synth :bass_foundation do
              if enable_bass && phrase > 3
                if enable_midi
                  midi bass[0], sustain: measure_hold
                else
                  play bass[0], sustain: measure_hold, pan: rrand(-0.5, 0.5)
                end
              end
            end
            
            # advance to the next measure
            chords = chords.rotate
            bass = bass.rotate
          end
        end
      end
    end
    
    # percussion
    if enable_drums
      in_thread do
        with_random_source :white do
          loop do
            sync :master
            stop if terminate
            tick
            sample :drum_tom_lo_hard, rate: rrand(0.75, 1.25), amp: rrand(0.2, 0.5), pan: -0.25 if spread_lo.look
            sample :drum_tom_mid_hard, rate: rrand(0.75, 1.25), amp: rrand(0.2, 0.5), pan: 0.25 if spread_mid.look
            sample :drum_tom_hi_hard, rate: rrand(0.75, 1.25), amp: rrand(0.2, 0.5) if spread_hi.look
            sample :drum_bass_hard, rate: rrand(0.75, 1.25), amp: rrand(0.5, 0.8) if spread_bass.look
          end
        end
      end
    end
    
    # clapper for syncing tracks in a DAW
    with_synth :beep do
      play :a4
      midi :a4, sustain: 1
    end
    
    # give space after clapper
    sleep measure_hold
    
    # master clock for all threads
    repeats.times do
      cue :master
      count = count + 1
      phrase = phrase + 1 if count % phrase_length == 0
      sleep tempo
    end
    
  ensure
    
    terminate = true
    sleep tempo * 2
    cue :master
    sleep tempo * 2
    midi_all_notes_off if enable_midi
    
  end
end

Ghostly_Reminiscences.rb

# Copyright 2023 Kirk Rader. All rights reserved.

# Ghostly Reminiscences

live_loop :plingk do
    sample :perc_bell, rate: rrand(0.2, 2)
    sleep rrand(1, 5)
  end
  
  live_loop :clangk do
    sample :perc_bell2, rate: rrand(0.2, 2)
    sleep rrand(1, 5)
  end
  
  live_loop :eery do
    sample :ambi_haunted_hum, rate: rrand(0.2, 2)
    sleep rrand(0.75, 3)
  end
  
  live_loop :spooky do
    sample :ambi_glass_hum, rate: rrand(0.2, 2)
    sleep rrand(0.75, 3)
  end
  
  live_loop :chugga do
    sample :loop_industrial, rate: rrand(0.2, 2)
    sleep 5
  end
  
  live_loop :bzzz do
    sleep 2.5
    sample :loop_drone_g_97, rate: rrand(0.2, 2)
    sleep 7.5
  end