Last active
November 12, 2024 19:23
-
-
Save darinwilson/137764d4b06072de626c to your computer and use it in GitHub Desktop.
Sonic Pi Examples
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
############################################## | |
## 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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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/
[email protected]