gistfile1.txt
This file contains hidden or 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
Show hidden characters
--- An exploration of Just Friends' Geode
-- from maps with trent: https://www.youtube.com/watch?v=fMzM4omsIg8&ab_channel=Trent
-- Just Type reference: https://github.com/whimsicalraps/Just-Friends/blob/main/Just-Type.md
-- mode sets rhythmic relations:
-- cycle: rhythmic undulation to the envelope level
-- The rhythm is generated similarly to transient,
-- however the variation is applied continuously
-- (rather than in single steps of beats). -- Applying RUN voltage emphasizes every 2nd then 3rd then 4th event,
-- however all the in-between beats are available too. -- Subtle CV shifts allow for a variation of groove
-- with nothing but volume manipulation.
-- Negative RUN levels emphasize every fraction of a beat.
-- Works extra well with quantize active.
-- sustain: -- The first envelope is full volume and each one thereafter
-- will decrease in level. -- By adding a RUN voltage the rate of decay can be modified.
-- TIME & INTONE set a base envelope rate, divisions sets the
-- rhythm of notes, and RUN sets the amplitude cycle
-- relative to repeats.
-- transient:
-- Each output has the same level
-- RUN voltages will introduce a rhythmic variation every n repeats.
-- The TIME & INTONE controls maintain their standard free-running influence,
-- speeding up and slowing down envelopes,
-- while the rhythms are controlled remotely.
-- ii.jf.play_note( divs, repeats ) -- Play a sequence, dynamically allocated to a channel
-- ii.jf.play_voice( channel, divs, repeats ) -- Play a sequence on a specific channel
-- min divs is 1 -- sending repeats a negative number has it repeat infinitely
-- ii.jf.tick( divs ) -- Clock Geode with a stream of ticks at divs per measure
-- ii.jf.tick( bpm ) -- Set timebase for Geode with a static bpm
-- ii.jf.quantize( divisions ) -- Quantize Geode events to divisions of the timebase
j = ii.jf -- alias to address just friends with just `j`
function init()
j.mode(2) -- set jf to geode mode
input[1]{
mode = 'change',
direction = 'rising' -- rising, falling, both are the options
}
end
counter = 0
divs = 1
direction = 1
input[1].change = function(count)
j.tick(8)
--note( 4, 3)
--note(6, 3)
--note(12,3)
--note(12,7)
counter = counter + 1
if (divs < 16 and counter > 4) or (divs >15 and counter > 2) then
counter = 0
if divs%2 == 0 then
note (divs/2, divs*2)
else
note (divs, divs)
end
divs = divs + direction
print(counter,divs)
if divs == 32 then
--divs = 1
direction = -1
elseif divs == 1 then
direction = 1
end
end
end
function voice( chan, divs, repeats )
j.play_voice(chan, divs, repeats)
end
function note( divs, repeats)
j.play_note(divs, repeats)
end