All This Static Under Clouded Skies

May 7, 2021 8:28 PM

Generative ambient piece.

Made in Sonic Pi.
#All This Static Under Clouded Skies
duration = 240.0
with_bpm 30 do
  with_fx :normaliser, level: 0.90 do
    chord1 = [:G2, :C3, :G3, :B4, :D4, :G5]
    embel1 = [:A5, :C4]
    
    chord2 = [:E3, :D4, :Fs4, :G4, :D5, :E5]
    embel2 = [:A5]
    
    
    chord3 = [:D3, :G3, :D4, :Fs4]
    embel3 = [:G4, :A4]
    
    chord4 = [:E2, :B3, :E4, :G4]
    embel4 = [:B4, :E4, :D4]
    
    chord5 = [:A3, :E3, :A4, :C4, :E4]
    embel5 = [:G4]
    
    pairs = [[chord1, embel1], [chord2, embel2], [chord3, embel3], [chord4, embel4], [chord5, embel5]]
    
    strumtimes = [4, 4, 2, 2, 4, 1, 1, 2]
    set :c, chord1
    set :e, embel1
    x=0
    live_loop :strum do
      if vt > duration * 0.95
        stop
      end
      if vt > duration * 0.01
        cue :arp
        c,e = pairs.tick(:strum)
        set :e, e
        set :c, c
        x=0.1
        l=0.1
        v=0.125
        vol = vt/duration*3
        c.each do |n|
          with_fx :distortion, amp:1, distort:0.9 do
            with_synth :dark_ambience do
              if one_in(3)
                play n, amp:vol, release: 4, ring: 1, room: 15, reverb_time: 25
              end
            end
            s = l +rand(0.02)
            sleep s
            x+=s
          end
        end
        with_fx :ixi_techno, res: vt/duration, cutoff_min: (1-vt/duration)*120 do
          if one_in(2)
            sample :loop_industrial
          end
        end
      end
      sleep strumtimes.tick(:strumtime)-x
    end
    
    arptimes = [0.25, 0.25, 0.25, 0.75]
    octaves = [0,0,0,0,0,12]
    
    live_loop :arpeggio do
      if vt > duration *0.8
        stop
      end
      if vt > duration * 0.3
        
        e = get[:e]
        c = get[:c]
        if one_in(4)
          notes = c
        else
          notes = e
        end
        with_fx :distortion, amp:1, distort:0.9 do
          with_synth :hollow do
            play notes.tick(:arpn)+octaves.tick(:oct), amp:0.5+0.5*(1-vt/duration), release: 4
            
          end
        end
      end
      sleep arptimes.tick(:arp)
    end
    
    
    emb_pitch = 0
    emb_times = [0.125, 0.125, 0.125,  1, 1]
    live_loop :embellish do
      if vt > duration*0.85
        stop
      end
      if vt > duration * 0.01
        e = get[:e]
        c = get[:c]
        if one_in(3)
          notes = e+c
        else
          notes = e
        end
        with_fx :ping_pong, mix:0.5 do
          with_synth :hollow do
            with_fx :flanger, phase: duration/20 do
              with_fx :ixi_techno, res: vt/duration, cutoff_min: (1-vt/duration)*120 do
                with_fx :reverb, room:0.7 do
                  with_fx :distortion, amp:3 do
                    play choose(notes)+emb_pitch*12, amp: 0.25+0.75*vt/duration, release: emb_times.look(:embtimes)*1.5
                  end
                end
              end
            end
          end
        end
        
        if one_in(12)
          emb_pitch += choose([-1,1,1])
          if emb_pitch < -1
            emb_pitch = 0
          end
          if emb_pitch > 2
            emb_pitch = 0
          end
        end
      end
      sleep emb_times.tick(:embtimes)+choose([0,0,0,0,1,0.25])
    end
    
    live_loop :bass do
      if vt > duration*0.9
        stop
      end
      e = get[:e]
      n=e[0]
      with_swing do
        with_synth :piano do
          play n-24, release:8, attack:1, amp: 30
        end
      end
      sleep 4
    end
    
    beepnotes = [0,1]
    live_loop :beep do
      if vt > duration * 0.2
        if vt > duration *0.9
          stop
        end
        c = get[:c]
        with_synth :beep do
          play c[beepnotes.tick(:beepnotes)]-12, amp:3
        end
      end
      sleep 0.25
    end
    
    
    beattimes = [0.25, 1, 0.25, 1, 0.25]
    live_loop :beat do
      if vt > duration * 0.3
        if vt > duration * 0.9
          stop
        end
        sample :drum_bass_hard
        with_fx :ping_pong do
        end
      end
      sleep beattimes.tick(:beat)
    end
    
    
    live_loop :b1 do
      if vt > duration * 0.9
        stop
      end
      with_fx :panslicer, phase:1, amp:0.5, mix:0.5 do
        sample :bass_thick_c, amp: (1-vt/duration)
        sleep 1
      end
    end
  end
end

posted by signal (3 comments total) 1 user marked this as a favorite

The title was generated using GPT-3:
import os
import openai

openai.api_key = "secret"

response = openai.Completion.create(
  engine="davinci",
  prompt="""This is a list of 30 different post-rock song names
A Rise, A Moment Before Something Unexpected Is On The Verge Of Starting
First Breath After Coma
The Only Moment We Were Alone
Six Days at the Bottom of the Ocean
Cathedrals Fall Into the Sea
""",
  temperature=1,
  max_tokens=256,
  top_p=1.0,
  frequency_penalty=0.5,
  presence_penalty=0.5
)
t=response.choices[0]['text']
for i in t.splitlines():
    print(i)

posted by signal at 8:44 PM on May 7, 2021


This is pretty cool, the soundscapes are nice and layered. Fun to look at the code as well and try to figure out what's doing what while listening. Honestly this is my kind of ambient music, as it feels melodic enough to take me on some kind of journey. Very nice! Definitely makes me interested in investigating Sonic Pi!
posted by edlundart at 10:05 PM on May 27, 2021 [1 favorite]


Thanks!
posted by signal at 8:22 PM on May 28, 2021


« Older To All Our Known Energies   |   Clickbait Newer »

You are not logged in, either login or create an account to post comments