dariusf / sonicpi-workshop

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Making Music with Sonic Pi

Sonic Pi is a new musical instrument that you play by writing programs!

Check out the handout! Credit to Charisse.

Samples

sample :drum_roll
sleep 6
sample :drum_splash_hard, amp: 1.5

Synths

adsr.png

use_synth :fm
play :c, attack: 1, decay: 0, sustain: 0, release: 1, amp: 0.5, pan: rrand(-0.5,0.5)

Credit

Loops

live_loop :drums do
  4.times do
    sample :drum_bass_hard
    sleep 0.5
    sample :drum_cymbal_closed
    sleep 0.5
    sample :drum_snare_hard
    sleep 0.5
    sample :drum_cymbal_closed
    sleep 0.5
  end

  sample :drum_bass_hard
  sleep 0.75
  sample :drum_bass_hard
  sleep 0.25
end

Notes

live_loop :bass do
  use_synth :tb303
  play :c2
  sleep 0.5
end

live_loop :riff do
  use_synth :pulse
  play :c, attack: 0.5, sustain: 0.5, release: 0.5
  sleep 1
  play :g, pan: rrand(-0.5, 0.5)
  sleep 0.5
  play :e
  sleep 0.5
end

Randomness

live_loop :my_random_beat do
  use_random_seed 220
  16.times do
    sample :elec_hi_snare if one_in 3
    sample :drum_cymbal_closed if one_in 3
    sample :drum_cymbal_pedal if one_in 5
    sample :bd_haus if one_in 3
    sleep 0.125
  end
end

live_loop :my_tune do
  use_synth :prophet
  notes = scale :c4, :minor_pentatonic
  use_random_seed 40
  6.times do
    play notes.choose
    sleep [0.25, 0.5].choose
  end
end

Credit

Tick and look

use_synth :piano
play [:c, :e, :g]
sleep 1
play (chord :c, :major)
sleep 1
live_loop :play do
  play (chord :c, :major).tick
  sleep 0.5
  stop if look > 2
end

Scales

use_synth :prophet
14.times do
  play (scale :c4, :major, num_octaves: 2).tick
  sleep 0.25
end

scale.png

live_loop :up_and_down do
  use_synth :sine
  play (scale :c4, :major_pentatonic).reflect.butlast.tick
  sleep 0.25
end

Credit to mehackit

Chords

use_synth :beep
live_loop :chords do
  [1, 3, 6, 4].each do |d|
    (range -3, 3).each do |i|
      play_chord (chord_degree d, :c, :major, 3, invert: i)
      sleep 0.25
    end
  end
end

Credit to Adrian Cheater

Drum patterns

define :pattern do |p|
  return p.ring.look == 'x'
end

use_bpm 90

live_loop :drums do
  tick
  sample :drum_bass_hard  if pattern "x-x-----x-x--x--"
  sample :drum_snare_hard if pattern "----x--x-x-xx---"
  sample :drum_cymbal_closed
  sleep 0.25
end

Credit for funk pattern, pattern

Effects

with_fx :slicer do
  live_loop :breakbeat do
    sample :loop_breakbeat, beat_stretch: 2, amp: 2
    sleep 2
  end
end
with_fx :wobble, phase: 0.25, invert_wave: 1 do
  live_loop :melody do
    use_random_seed 20
    use_synth :fm
    8.times do
      play (chord :eb5, :minor7).shuffle.tick
      sleep 0.5
    end
  end
end

Control

notes = (scale :e3, :minor_pentatonic)
sn = synth :prophet, note: :e1, release: 8, cutoff: 100
sleep 1
16.times do
  control sn, note: notes.tick, pan: rrand(-1, 1)
  sleep 0.125
end

Credit

Examples

Song generator

# chords = [(chord :C, :minor7), (chord :Ab, :major7),
#  (chord :Eb, :major7), (chord :Bb, "7")].ring

chords = [(chord :A, :minor), (chord :F, :major),
  (chord :G, :major), (chord :C, :major)]

chosen = chords[0]

live_loop :melody do
  stop
  use_synth :blade
  r = [0.25, 0.25, 0.5, 1].choose
  play chosen.choose #, attack: 0, release: r
  sleep r
end

live_loop :keys do
  stop
  use_synth :blade
  play chosen
  sleep 1
end

live_loop :bass do
  use_synth :fm
  use_octave -2
  3.times do
    play chosen[0]
    sleep 1
  end
  play chosen[2]
  sleep 0.5
  play chosen[1]
  sleep 0.5
  chosen = chords.tick
end

live_loop :perc do
  stop
  sample :drum_cymbal_closed, amp: 0.5
  sleep 0.25
end

live_loop :perc1 do
  stop
  sample :ambi_choir, release: 5, slice: 0.5
  3.times do
    sample :drum_bass_hard, amp: 2
    sleep 1
  end
  2.times do
    sample :drum_bass_hard, amp: 2
    sleep 0.5
  end
  4.times do
    sample :drum_bass_hard, amp: 2
    sleep 1
  end
end

Credit to mehackit

Lofi Hip Hop

Next steps

Check out what other people are doing and remix their work! Good places to go are the Sonic Pi tutorial, forums, or other people’s YouTube channels.

Need help tying your song together?

Need inspiration? Check out these pieces that other people have made.

Other reference material

About

License:Creative Commons Zero v1.0 Universal


Languages

Language:Python 94.2%Language:Shell 5.8%