Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- comment do
- # transcribed from the MML notation here: http://www.mmlshare.com/tracks/view/403
- #
- # Sonic Pi currently has a size limit of about 9k which is a known issue (#102).
- # I've kept the comments up here to get around that as comment blocks don't get
- # sent to the interpreter. Some of the layout here is an exercise in reducing bytes.
- # I'm using Ruby's stabby lambda syntax ( -> { ... } ) in case you want to google it :)
- #
- # THIS HAS ONLY BEEN TESTED ON A MAC - on an RaspberryPi you might want to change it to
- # use_bpm 60
- #
- # Regarding the choice of an FM synth for drums:
- # You could use a noise synth here, but I think the NES sound
- # chip would have used something like this FM as the character
- # of the noise would change with different notes which I'm making
- # use of in drum_pattern_b
- end
- use_debug false # help RPi performance
- use_bpm 100
- use_synth :pulse
- use_synth_defaults release: 0.2, mod_rate: 5, amp: 0.6
- define :structure do |i,a,b,c,d|
- 1.times { i.call }
- loop do
- 2.times { a.call }
- 2.times { b.call }
- 1.times { c.call }
- 2.times { a.call }
- 2.times { d.call }
- 1.times { c.call }
- 1.times { d.call }
- end
- end
- in_thread do
- intro = -> { play_pattern_timed([:e5,:e5,nil,:e5,nil,:c5,:e5,nil,
- :g5,nil,nil,nil,nil,nil,nil,nil], [0.25]) }
- theme_a = -> {
- play_pattern_timed([:c5,nil,nil,:g4,nil,nil,:e4,nil,
- nil,:a4,nil,:b4,nil,:Bb4,:a4,nil], [0.25])
- play_pattern_timed([:g4,:e5,:g5], [1/3.0]) # minim triplets
- play_pattern_timed([:a5,nil,:f5,:g5,
- nil,:e5,nil,:c5,
- :d5,:b4,nil,nil], [0.25]) }
- theme_b = -> {
- play_pattern_timed([nil,nil,:g5,:fs5,:f5,:ds5,nil,:e5,
- nil,:gs4,:a4,:c5,nil,:a4,:c5,:d5,
- nil,nil,:g5,:fs5,:f5,:ds5,nil,:e5,
- nil,:c6,nil,:c6,:c6,nil,nil,nil,
- nil,nil,:g5,:fs5,:f5,:ds5,nil,:e5,
- nil,:gs4,:a4,:c5,nil,:a4,:c5,:d5,
- nil,nil,:ds5,nil,nil,:d5,nil,nil,
- :c5,nil,nil,nil,nil,nil,nil,nil], [0.25]) }
- theme_c = -> {
- play_pattern_timed([:c5,:c5,nil,:c5,nil,:c5,:d5,nil,
- :e5,:c5,nil,:a4,:g4,nil,nil,nil,
- :c5,:c5,nil,:c5,nil,:c5,:d5,:e5,
- nil,nil,nil,nil,nil,nil,nil,nil,
- :c5,:c5,nil,:c5,nil,:c5,:d5,nil,
- :e5,:c5,nil,:a4,:g4,nil,nil,nil,
- :e5,:e5,nil,:e5,nil,:c5,:e5,nil,
- :g5,nil,nil,nil,nil,nil,nil,nil], [0.25]) }
- theme_d = -> {
- play_pattern_timed([:e5,:c5,nil,:g4,nil,nil,:gs4,nil,
- :a4,:f5,nil,:f5,:a4,nil,nil,nil], [0.25])
- play_pattern_timed([:b4,:a5,:a5,
- :a5,:g5,:f5], [1/3.0])
- play_pattern_timed([:e5,:c5,nil,:a4,:g4,nil,nil,nil], [0.25])
- play_pattern_timed([:e5,:c5,nil,:g4,nil,nil,:gs4,nil,
- :a4,:f5,nil,:f5,:a4,nil,nil,nil,
- :b4,:f5,nil,:f5], [0.25])
- play_pattern_timed([:f5,:e5,:d5], [1/3.0])
- play_pattern_timed([:g5,:e5,nil,:e5,:c5,nil,nil,nil], [0.25]) }
- structure(intro, theme_a, theme_b, theme_c, theme_d)
- end
- in_thread do
- intro = -> { play_pattern_timed([:fs4,:fs4,nil,:fs4,nil,:fs4,:fs4,nil,
- :b4,nil,nil,nil,:g4,nil,nil,nil], [0.25]) }
- theme_a = -> {
- play_pattern_timed([:e4,nil,nil,:c4,nil,nil,:g3,nil,
- nil,:c4,nil,:d4,nil,:Db4,:c4,nil], [0.25])
- play_pattern_timed([:c4,:g4,:b4], [1/3.0])
- play_pattern_timed([:c5,nil,:a4,:b4,
- nil,:a4,nil,:e4,
- :f4,:d4,nil,nil], [0.25]) }
- theme_b = -> {
- play_pattern_timed([nil,nil,:e5,:ds5,:d5,:b4,nil,:c5,
- nil,:e4,:f4,:g4,nil,:c4,:e4,:f4,
- nil,nil,:e5,:ds5,:d5,:b4,nil,:c5,
- nil,:f5,nil,:f5,:f5,nil,nil,nil,
- nil,nil,:e5,:ds5,:d5,:b4,nil,:c5,
- nil,:e4,:f4,:g4,nil,:c4,:e4,:f4,
- nil,nil,:gs4,nil,nil,:f4,nil,nil,
- :e4,nil,nil,nil,nil,nil,nil,nil], [0.25]) }
- theme_c = -> {
- play_pattern_timed([:gs4,:gs4,nil,:gs4,nil,:gs4,:as4,nil,
- :g4,:e4,nil,:e4,:c4,nil,nil,nil,
- :gs4,:gs4,nil,:gs4,nil,:gs4,:as4,:g4,
- nil,nil,nil,nil,nil,nil,nil,nil,
- :gs4,:gs4,nil,:gs4,nil,:gs4,:as4,nil,
- :g4,:e4,nil,:e4,:c4,nil,nil,nil,
- :fs4,:fs4,nil,:fs4,nil,:fs4,:fs4,nil,
- :b4,nil,nil,nil,:g4,nil,nil,nil], [0.25]) }
- theme_d = -> {
- play_pattern_timed([:c5,:a4,nil,:e4,nil,nil,:e4,nil,
- :f4,:c5,nil,:c5,:f4,nil,nil,nil], [0.25])
- play_pattern_timed([:g4,:f5,:f5,
- :f5,:e5,:d5], [1/3.0])
- play_pattern_timed([:c5,:a4,nil,:f4,:e4,nil,nil,nil], [0.25])
- play_pattern_timed([:c5,:a4,nil,:e4,nil,nil,:e4,nil,
- :f4,:c5,nil,:c5,:f4,nil,nil,nil,
- :g4,:d5,nil,:d5], [0.25])
- play_pattern_timed([:d5,:c5,:b4], [1/3.0])
- play_pattern_timed([:c5,nil,nil,nil,nil,nil,nil,nil], [0.25]) }
- structure(intro, theme_a, theme_b, theme_c, theme_d)
- end
- in_thread do
- use_synth :tri
- use_synth_defaults attack: 0, sustain: 0.1, decay: 0.1, release: 0.1, amp: 0.4
- intro = -> { play_pattern_timed([:D4,:D4,nil,:D4,nil,:D4,:D4,nil,
- :G3,nil,nil,nil,:G4,nil,nil,nil], [0.25]) }
- theme_a = -> {
- play_pattern_timed([:G4,nil,nil,:E4,nil,nil,:C4,nil,
- nil,:F4,nil,:G4,nil,:Gb4,:F4,nil], [0.25])
- play_pattern_timed([:E4,:C4,:E4], [1/3.0])
- play_pattern_timed([:F4,nil,:D4,:E4,
- nil,:C4,nil,:A3,
- :B3,:G3,nil,nil], [0.25]) }
- theme_b = -> {
- play_pattern_timed([:C3,nil,nil,:G3,nil,nil,:C3,nil,
- :F3,nil,nil,:C3,:C3,nil,:F3,nil,
- :C3,nil,nil,:E3,nil,nil,:G3,:C3,
- nil,:G2,nil,:G2,:G2,nil,:G4,nil,
- :C3,nil,nil,:G3,nil,nil,:C3,nil,
- :F3,nil,nil,:C3,:C3,nil,:F3,nil,
- :C3,nil,:Ab3,nil,nil,:Bb3,nil,nil,
- :C3,nil,nil,:G2,:G2,nil,:C3,nil], [0.25]) }
- theme_c = -> {
- 3.times {
- play_pattern_timed([:gs4,nil,nil,:ds4,nil,nil,:gs4,nil,
- :g4,nil,nil,:c4,nil,nil,:g4,nil], [0.25])
- }
- play_pattern_timed([:D4,:D4,nil,:D4,nil,:D4,:D4,nil,
- :G3,nil,nil,nil,:G4,nil,nil,nil], [0.25]) }
- theme_d = -> {
- play_pattern_timed([:C3,nil,nil,:fs3,:g3,nil,:C3,nil,
- :F3,nil,:F3,nil,:C3,:C3,:F3,nil,
- :D3,nil,nil,:F3,:G3,nil,:B3,nil,
- :G3,nil,:G3,nil,:C3,:C3,:G3,nil,
- :C3,nil,nil,:fs3,:g3,nil,:C3,nil,
- :F3,nil,:F3,nil,:C3,:C3,:F3,nil,
- :G3,nil,nil,:G3], [0.25])
- play_pattern_timed([:G3,:A3,:B3], [1/3.0])
- play_pattern_timed([:C4,nil,:G3,nil,:C4,nil,nil,nil], [0.25]) }
- structure(intro, theme_a, theme_b, theme_c, theme_d)
- end
- in_thread do
- use_synth :fm
- use_synth_defaults divisor: 1.6666, attack: 0.0, depth: 1500, sustain: 0.05, release: 0.0
- ll = -> { play :a, sustain: 0.1; sleep 0.75 }
- l = -> { play :a, sustain: 0.1; sleep 0.5 }
- s = -> { play :a; sleep 0.25 }
- define :drum_pattern_a do
- [l,s,l,s,l,ll,l,s,s,s].map(&:call)
- end
- define :drum_pattern_b do
- play :b
- sleep 0.5
- play :a6
- sleep 0.3
- play :a7
- sleep 0.2
- play :a, sustain: 0.1
- sleep 0.5
- play :a6
- sleep 0.3
- play :a7
- sleep 0.2
- end
- define :drum_pattern_c do
- [ll,s,l,l].map(&:call)
- end
- with_fx :level, amp: 1.2 do
- 1.times { drum_pattern_a }
- loop do
- 24.times { drum_pattern_b }
- 4.times { drum_pattern_a }
- 8.times { drum_pattern_b }
- 16.times { drum_pattern_c }
- 4.times { drum_pattern_a }
- 8.times { drum_pattern_b }
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement