Skip to content

Instantly share code, notes, and snippets.

@darinwilson
Last active May 18, 2024 07:48
Show Gist options
  • Save darinwilson/137764d4b06072de626c to your computer and use it in GitHub Desktop.
Save darinwilson/137764d4b06072de626c to your computer and use it in GitHub Desktop.
Sonic Pi Examples
##############################################
## Example 1 - play a note
play 60
##############################################
## Example 2 - play 4 random notes
4.times do
play rrand_i(60, 90)
sleep 0.5
end
##############################################
## Example 3 - play a major chord
play chord(60, :M)
##############################################
## Example 4 - play an arpeggio
loop do
play chord(60, :M7).tick
sleep 0.5
end
##############################################
## Example 5 - play a chord with an arpeggio
loop do
play chord(60, :M7), release: 3
16.times do
play chord(60, :M7).choose
sleep 0.25
end
end
##############################################
## Example 6 - play a shifting chord with an arpeggio
start_notes = ring(60, 62, 63, 62)
loop do
my_chord = chord(start_notes.tick, :M7)
play my_chord, release: 2
16.times do
play my_chord.choose
sleep 0.125
end
end
##############################################
## Example 7 - play a sample
sample :drum_bass_hard
##############################################
## Example 8 - play a simple drum beat
loop do
sample :bd_haus
sleep 0.5
end
##############################################
## Example 9 - alternate kick and snare
loop do
if tick.even?
sample :bd_haus
else
sample :sn_dolf
end
sleep 0.5
end
##############################################
## Example 10 - combine kick, snare and hi-hat
loop do
sample :drum_cymbal_closed
if tick.even?
sample :bd_haus
else
sample :sn_dolf
end
sleep 0.25
sample :drum_cymbal_closed
sleep 0.25
end
##############################################
## Example 11 - play a drum loop once
sample :loop_amen
##############################################
## Example 12 - play a drum loop as a loop
loop do
sample :loop_amen
sleep sample_duration(:loop_amen)
end
##############################################
## Example 13 - try to combine melody, harmony, rhythm (doesn't work)
loop do
start_note = ring(60, 62, 63, 62).tick
my_chord = chord(start_note, :M7)
play my_chord, release: 2
16.times do
play my_chord.choose, release: 0.25, amp: [0.75, 0.5, 0.25].choose
sleep 0.125
end
end
loop do
sample :loop_amen
sleep sample_duration(:loop_amen)
end
##############################################
## Example 14 - a fix for Example 13, using threads (drums out of sync)
in_thread do
loop do
start_note = ring(60, 62, 63, 62).tick
my_chord = chord(start_note, :M7)
play my_chord, release: 2
16.times do
play my_chord.choose, release: 0.25, amp: [0.75, 0.5, 0.25].choose
sleep 0.125
end
end
end
loop do
sample :loop_amen
sleep sample_duration(:loop_amen)
end
##############################################
## Example 15 - a fix for Example 14, drums now in sync
in_thread do
loop do
start_note = ring(60, 62, 63, 62).tick
my_chord = chord(start_note, :M7)
play my_chord, release: 2
16.times do
play my_chord.choose, release: 0.25, amp: [0.75, 0.5, 0.25].choose
sleep 0.125
end
end
end
loop do
sample :loop_amen, beat_stretch: 2
sleep 2
end
##############################################
## Example 16 - a better way to thread
live_loop :beeps do
start_note = ring(60, 62, 63, 62).tick
my_chord = chord(start_note, :M7)
play my_chord, release: 2
16.times do
play my_chord.choose, release: 0.25, amp: [0.75, 0.5, 0.25].choose
sleep 0.125
end
end
live_loop :drums do
sample :loop_amen, beat_stretch: 2
sleep 2
end
##############################################
## Example 17 - use a different synth
use_synth :saw
loop do
play scale(60, :major).choose
sleep 0.25
end
##############################################
## Example 18 - a simple pattern to demo effects
play 50
sleep 0.5
sample :elec_plip
sleep 0.5
play 62
##############################################
## Example 19 - adding reverb
with_fx :reverb do
play 50
sleep 0.5
sample :elec_plip
sleep 0.5
play 62
end
##############################################
## Example 20 - adding echo
with_fx :echo do
play 50
sleep 0.5
sample :elec_plip
sleep 0.5
play 62
end
##############################################
## Example 21 - adding reverb and echo together
with_fx :echo do
with_fx :reverb do
play 50
sleep 0.5
sample :elec_plip
sleep 0.5
play 62
end
end
@TuxedoCat619
Copy link

Coded by SonicPit

Taken from "Beats basteln wie die Großen"

c't 13/2017

Note: requires a powerful machine to run smoothly.

use_bpm 70

HISS

live_loop :hiss_loop do
sample :vinyl_hiss, amp: 2
sleep sample_duration :vinyl_hiss
end

HIHAT

define :hihat do
use_synth :pnoise
with_fx :hpf, cutoff: 120 do
play release: 0.01, amp: 13
end
end

live_loop :hihat_loop do
divisors = ring 2, 4, 2, 2, 2, 2, 2, 6
divisors.tick.times do
hihat
sleep 1.0 / divisors.look
end
end

SNARE

live_loop :snare_loop do
sleep ring(2.5, 3)[tick]
with_fx :lpf, cutoff: 100 do
sample :sn_dub, sustain: 0, release: 0.05, amp: 3
end
sleep ring(1.5, 1)[look]
end

BASSDRUM

define :bassdrum do |note1, duration, note2 = note1|
use_synth :sine
with_fx :hpf, cutoff: 100 do
play note1 + 24, amp: 40, release: 0.01
end
with_fx :distortion, distort: 0.1, mix: 0.3 do
with_fx :lpf, cutoff: 26 do
with_fx :hpf, cutoff: 55 do
bass = play note1, amp: 85, release: duration, note_slide: duration
control bass, note: note2
end
end
end
sleep duration
end

live_loop :bassdrum_schleife do
bassdrum 36, 1.5
if bools(0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0)[tick]
bassdrum 36, 0.5, 40
bassdrum 38, 1, 10
else
bassdrum 36, 1.5
end
bassdrum 36, 1.0, ring(10, 10, 10, 40)[look]
end

CHORD CONTROL

This part provides two rings called "chord_high" and "chord_low".

They always contain the "permitted" notes in order that everything will be in tune.

You can use them in other live loops to select notes.

chord_1 = chord :c4, :maj9, num_octaves: 2
chord_2 = chord :es4, :maj9, num_octaves: 2
chord_3 = chord :b3, :maj9, num_octaves: 2
chord_4 = chord :d4, :maj9, num_octaves: 2

chord_low_1 = chord :c2, :maj9
chord_low_2 = chord :es2, :maj9
chord_low_3 = chord :b1, :maj9
chord_low_4 = chord :d2, :maj9

chord_high = chord_1
chord_low = chord_low_1

live_loop :chord_selector, delay: -0.5 do
chord_high = (knit(chord_1, 2, chord_2, 2, chord_3, 4,chord_4, 4)).tick
chord_low = (knit(chord_low_1, 2, chord_low_2, 2, chord_low_3, 4, chord_low_4, 4)).look
sleep 8
end

SPHERES

define :chord_player do |the_chord|
use_synth :blade
the_chord.each do |note|
play note, attack: rand(4), release: rand(6..8), cutoff: rand(50..85), vibrato_rate: rand(0.01..2), amp: 0.55
end
end

with_fx :reverb, room: 0.99, mix: 0.7 do
live_loop :chord_loop do
chord_player chord_high.pick(6)
chord_player chord_low.take(3)
sleep 8
end
end

Coded by Pit Noack

supported by

Alexander Degraf

Astrid Hagenguth

Enrico Mercaldi

http://www.maschinennah.de/

mail@pitnoack.de

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment