58 lines
1.7 KiB
Text
58 lines
1.7 KiB
Text
// Seeds: a generative piece. Every loop draws from rings with the seeded
|
|
// random: change `seed` for another piece, keep it for the same one.
|
|
use mod.score.*
|
|
|
|
let clock = Clock{bpm: 96 sig: [4 4] seed: 2024}
|
|
|
|
let keys = Synth{preset: @epiano}
|
|
let pluck = Synth{preset: @pluck}
|
|
let kit = Drums{kit: @lofi}
|
|
let low = Synth{preset: @fm_bass}
|
|
|
|
/// A Euclidean kick and a shuffled rim, new each cycle but from the seed.
|
|
let beat = Loop{play: kit beats: 4 amp: 0.7
|
|
code: fn(i) {
|
|
let kick = euclid(3, 8, 0)
|
|
for s in 0..8 {
|
|
if kick[s] { hit(@kick) }
|
|
if one_in(3) { hit(@rim, {amp: 0.35 pan: rand(-0.5, 0.5)}) }
|
|
if s % 2 == 1 { hit(@hat, {amp: rand(0.2, 0.45)}) }
|
|
sleep(0.5)
|
|
}
|
|
}
|
|
}
|
|
|
|
let pads = Loop{play: keys beats: 8 amp: 0.4
|
|
code: fn(i) {
|
|
let scale_notes = scale(@d3, @dorian, 2)
|
|
for c in 0..2 {
|
|
let root = choose([0 2 3 4])
|
|
play([scale_notes[root] scale_notes[root + 2] scale_notes[root + 4] scale_notes[root + 6]], {dur: 3.8})
|
|
sleep(4)
|
|
}
|
|
}
|
|
}
|
|
|
|
let melody = Loop{play: pluck beats: 4 amp: 0.35 pan: 0.25
|
|
code: fn(i) {
|
|
let pent = scale(@d4, @minor_pentatonic, 2)
|
|
for s in 0..8 {
|
|
if chance(0.6) { play(choose(pent), {amp: rand(0.5, 0.9)}) }
|
|
sleep(0.5)
|
|
}
|
|
}
|
|
}
|
|
|
|
let bass = Loop{play: low beats: 8 amp: 0.5
|
|
code: fn(i) {
|
|
for note in shuffle([@d2 @f2 @a1 @c2]) {
|
|
play(note, {dur: 1.6})
|
|
sleep(2)
|
|
}
|
|
}
|
|
}
|
|
|
|
let echo = Delay{in: [melody] time: 0.75 feedback: 0.5 mix: 0.3 spread: 1}
|
|
let hall = Reverb{in: [pads echo] room: 0.7 mix: 0.3}
|
|
|
|
Score{label: "Seeds" clock keys pluck kit low beat pads melody bass echo hall}
|