Tropical Island: music out of noise

For a while now, I’ve had an idea to try and make some music using only white noise (and filters/effects). This week we had a (online) music night at work so I decided to give it a go. I borrowed some ideas (like Sam’s Ocean example in Sonic Pi), played around a bit, and came up with this: https://vimeo.com/443175085 (the code is below).

I decided to name it Tropical Island after one of the comments (“I feel I’ve been on a choppy journey through space and ended up on a tropical island”). There are quite a few mistakes, and the audio gets a bit crackly at one point, but I was running late so didn’t have time to redo it.

Please do comment if you have any ideas for other sounds that might sound good and can be made from white noise.

Hope you enjoy it.

Here’s the code:

# I set myself a challenge to code a piece using only white noise.
# White noise contains equal amounts of energy at every (audible) frequency.

# It sounds like this:
#synth :noise

# Not very musical.

# But... it contains every frequency, so every possible sound or piece of music
# is hidden in there somewhere... you just have to filter out the parts you don't want.

# I will use no source of sound other than "synth :noise", passing it through different
# filters and effects to try to create something that sounds a bit less like noise...

# To run this, progressively comment out the "stop"s in each live_loop, hitting run each time...

use_bpm 96

with_fx :reverb, room: 0.8 do
  live_loop :waves do
    stop
    s = synth :noise, cutoff: rrand(50, 110), amp: rrand(0.03, 0.1), attack: rrand(1, 4), sustain: rrand(0, 2), release: rrand(1, 5), slide: rrand(1, 5)
    control s, cutoff: rrand(50, 110)
    sleep rrand(2,4)
  end
end

live_loop :tick, delay: 0.01 do
  sleep 4
end

live_loop :bd, sync: :tick do
  stop
  with_fx :reverb, room: 0.4, amp: 0.3 do
    with_fx :rlpf, cutoff: 35 do
      2.times do
        synth :noise, release: 0.1, amp: 0.5, amp: 150
        sleep 1
        synth :noise, release: 0.1, amp: 0.5, amp: 50
        sleep 1
        synth :noise, release: 0.1, amp: 0.5, amp: 100
        sleep 1.5
        synth :noise, release: 0.1, amp: 0.5, amp: 100
        sleep 0.5
      end
    end
  end
end

live_loop :hats, sync: :tick do
  stop
  with_fx :reverb, room: 0.3, amp: 0.3 do
    with_fx :hpf, cutoff: 90 do
      16.times do
        synth :noise, release: 0.05, amp: 0.5, on: spread(9, 16).tick
        sleep 0.25
      end
    end
  end
end

live_loop :hi, sync: :tick do
  stop
  with_fx :reverb, room: 0.6, amp: 0.3 do
    with_fx :hpf, cutoff: 110 do
      16.times do
        synth :noise, release: 0.02, amp: 0.5, on: spread(11, 16).tick
        sleep 0.25
      end
    end
  end
end

live_loop :mid, sync: :tick do
  stop
  with_fx :reverb, room: 0.3, amp: 0.3 do
    with_fx :bpf, centre: 60, res: 0.9 do
      8.times do
        synth :noise, release: 0.1, amp: 30, on: spread(3, 8).tick
        sleep 0.5
      end
    end
  end
end

live_loop :rhythm, sync: :tick do
  stop
  c = [(chord :c3, :maj),
       (chord :a3, :min),
       (chord :f3, :maj),
       (chord :g3, :maj)].tick
  p = (ring 1, 0.5, 0.25).stretch(4).look
  with_fx :reverb, room: 0.8, amp: 0.5 do
    with_fx :slicer, phase: p, smooth: 0.01 do
      with_fx :octaver, mix: 0.2 do
        c.each do |n|
          with_fx :rbpf, centre: n, res: 0.992 do
            synth :noise, sustain: 2, release: 2, amp: 25
          end
        end
      end
    end
  end
  sleep 4
end

live_loop :melody, sync: :tick do
  stop
  use_random_seed [2000, 88000, 7000, 9000].tick(:x)
  16.times do
    n = scale(:c, :major_pentatonic).choose
    with_fx :octaver, mix: 0.2 do
      with_fx :rbpf, centre: n, res: 0.995 do
        synth :noise, release: 0.5, amp: 12, on: bools(1,1,1,0).choose
        sleep 0.5
      end
    end
  end
end

live_loop :melody2, sync: :tick do
  stop
  use_random_seed [260000, 810000, 920000, 47000].tick(:x)
  16.times do
    n = scale(:c6, :major_pentatonic).choose
    with_fx :octaver, mix: 0.2 do
      with_fx :rbpf, centre: n, res: 0.995 do
        synth :noise, release: 0.25, amp: 3 if one_in(2)
        sleep 0.25
      end
    end
  end
end
5 Likes

I do… But depends whether you would permit adding various other FX besides straight filters, to manipulate the noise into becoming musical :joy:
(Great tune by the way :slightly_smiling_face:)

1 Like

Well, to be fair I wasn’t too strict on the filters myself. I used a fair amount of reverb, an octaver in a couple of places (although I guess you could get something similar by repeating the noise through different band pass filters), and I’m not sure the resonant filters are purely filtering either.

That is Fab ! ( for lack of a better term )
The flexibility of Sonic - Pi is actually astounding : )

1 Like

Hmmm… I’ve been wanting my own Steel Band for a while now.

I can hear a faint echo of them in your code… this could be
interesting.

Eli…

1 Like

Nice tune, reminds me something of Jean-Michel Jarre. Sure it’s also a good idea to start only from noise, I will try something me too.

1 Like

I’ve been working on my own version - but I’m not quite finished yet :joy:
It’s fun though - should have something I’m happy with in the next day or two :slight_smile:

1 Like

Looking forward to seeing what you come up with :smiley:

Hi @emlyn, some time ago I also used the trick to filter noise with the bandpass filter, which yields some nice results (gradually increasing the resonance value and also changing the envelope settings):

Though admittedly the track is only made partly out of noise…

2 Likes

Nice, that sounds great! I might borrow some ideas from here if I make a version 2 :smiley:

1 Like

You are very welcome to do so. I like the idea of filtering noise. I also like that you used noise for all of your sound sources!

1 Like