Here’s a composition I made recently. I was hoping to make a following melody for it as wll but that will have to be a project for later, since I’ll be going on a trip tomorrow and won’t be around for a whole week. I’m still quite satisfied with what I made, this is oneof the longer things I’ve made and I hope you enjoy listening to it as much as I enjoy creatingit. As usual, here’s the sonic pi source, it by default uses my midi synth and rockathon sound fot but you can use one of sonic pi’s synths by uncommenting a certain block.
use_synth :piano
use_midi_defaults port: "virtualmidisynth__1_0", channel: 0
use_bpm 45
define :p do |n, l, *args|
if n.is_a? Array or n.is_a? SonicPi::Core::RingVector
n.each do |note|
midi note, *args, sustain: l
end
else
midi n, *args, sustain: l
end
sleep l
end
define :ppt do |ns, ts, *args|
if ts.is_a? Array
ts = ts.ring
else
ts = ring ts
end
ns.each_with_index do |n, i|
p n, ts[i], *args
end
end
# Uncomment these if you want to use one of sonic pi’s synths
##| define :p do |n, l, *args|
##| play n, *args, sustain: l
##| sleep l
##| end
##| define :ppt do |*args|
##| play_pattern_timed *args
##| end
define :m3 do |n|
[n, n+3]
end
define :M3 do |n|
[n, n+4]
end
s = []
define :sc do |*is|
is.map { |i| s[i] }
end
define :melody11 do
[0, -1, -2].each do |offset|
2.times do
ppt [s[0], s[2], s[4], s[6]+offset, s[7], s[6]+offset, s[4], s[2]], 0.25
end
end
end
define :melody12_decide do |t, n|
case t
when 0
n
when 1
if n % 12 == 4 || n % 12 == 9
M3 n-4
else
m3 n-3
end
end
end
define :melody12_common do |t|
ppt sc(0, 1), 0.3
p melody12_decide(t, s[2]), 0.9
ppt sc(3, 4), 0.3
p melody12_decide(t, s[5]), 0.9
end
define :melody12 do |t|
melody12_common t
ppt sc(4, 5, 3, 4).map { |n| melody12_decide t, n }, [0.25, 0.3, 0.4, 1.05]
melody12_common t
ppt sc(6, 3, 5, 4).map { |n| melody12_decide t, n }, [0.3, 0.3, 0.3, 1.1]
melody12_common t
ppt sc(4, 5, 3, 7).map { |n| melody12_decide t, n }, [0.25, 0.3, 0.4, 1.05]
melody12_common t
ppt sc(4, 5, 3).map { |n| melody12_decide t, n }, [0.3, 0.3, 0.7]
p case t
when 0
s[2]
when 1
chord s[0], :minor, invert: -1
end, 0.7
end
define :melody1 do |t|
s = scale :a, :minor
melody11
melody12 t
end
define :melody2_3chorus do |basechord|
2.times do
p basechord, 0.5
p basechord, 0.25
end
p basechord.map { |n| n+2 }, 0.5
end
define :melody2_chordchorus do |basechord|
basethird = basechord[0..2]
puts basethird
[0.6, 0.3, 1.1].each do |l|
p basethird, l
end
p basechord, 0.6
p basethird, 0.3
p basechord, 1.1
end
define :melody2 do |t|
s = chord :d5, :m9
case t
when 0
ppt sc(0, 1, 2, 1, 2, 3, 2, 3, 4, 3, 4, 3, 2, 3, 2, 1, 2, 1, 0, 1, 0, 1, 2, 1), 0.25
p M3(:af5), 1
when 1
ppt sc(0, 1, 2, 1, 2, 3, 2, 3, 4), [0.25, 0.25, 0.5]
ppt sc(4, 3, 2, 3, 2, 1, 2, 1, 0), [0.25, 0.25, 0.5]
p s[1], 0.25
p M3(:af5), 0.75
end
melody2_3chorus M3 :af5
melody2_3chorus M3 :ef5
melody2_chordchorus chord(:d5, :minor)
melody2_3chorus m3 :gf5
melody2_3chorus m3 :ef5
melody2_chordchorus chord(:d5, :major)
end
define :melody31 do
ppt sc(0, 4, 0, 4), 1
ppt sc(7, 6, 5), 0.4
p s[4], 1.8
ppt sc(0, 4, 0, 4), 1
ppt sc(1, 2, 3), 0.4
p s[4], 1.8
p s[4], 1
end
define :melody32 do
ppt sc(7, 6, 5, 6, 5, 4), [0.25, 0.25, 0.5]
ppt sc(3, 4, 5, 4, 3, 4, 5, 6), 0.25
ppt sc(7, 6, 5), [0.25, 0.25, 0.5]
ppt sc(6, 5, 4, 5, 3, 3, 4, 4), 0.25
ppt sc(5, 6, 7), [0.25, 0.25, 0.5]
end
define :melody33 do |t|
ppt sc(5, 6, 7, 5, 4, 5, 6, 4), 0.25
case t
when 0, 2
ppt sc(3, 4, 5, 4, 3, 4, 6, 4), 0.25
when 1
ppt sc(3, 4, 5, 4, 5, 6), [0.25, 0.25, 0.5]
when 3
ppt sc(3, 4), 0.25
p m3(s[3]), 0.5
ppt sc(4, 5), 0.25
p m3(s[4]), 0.5
end
ppt sc(5, 6, 7, 5, 4, 5, 6, 4, 5, 4, 3, 2), 0.25
ppt sc(4, 3), 0.5
ppt sc(2, 2, 3, 1), 0.25
case t
when 0
ppt sc(2, 3, 4), [0.25, 0.25, 0.5]
when 1
p s[0], 1
when 2
ppt sc(2, 4, 6), [0.25, 0.25, 0.5]
when 3
ppt [:d5, :b4, :gs4, :a4], [0.3, 0.4, 0.7, 1.6]
end
end
define :melody3 do |t|
s = scale :d5, :minor
if t == 0
melody31
end
sleep 1
melody32
melody33 t*2 + 0
melody33 t*2 + 1
end
define :melody do
2.times do |i|
melody1 i
sleep 1
melody2 i
melody3 i
if i == 0
ppt [:e5, :c5, :d5, :b4], 0.3
p :a4, 1.8
end
sleep 1
end
end
melody
6 responses to “Moodswings”
Okay.
I’m 99.9.
I 100% agree.
very good.
Nice song.
As usual, elten clips whatever I make at the beginning. I will hopefully manage to post all of my things on my website once I come home, or maybe even before.