Created
August 15, 2021 18:30
-
-
Save jaseknighter/9cb3aca53918d838356aa5e8294476c6 to your computer and use it in GitHub Desktop.
An exploration of Just Friends' Geode
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
--- 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 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment