{"slug": "an-exploration-of-just-friends-geode", "title": "An exploration of Just Friends' Geode", "summary": "The article provides a technical overview of the \"Geode\" mode for the Just Friends Eurorack module, explaining how different modes (cycle, sustain, transient) control rhythmic relations and envelope levels through RUN voltage and other parameters. It includes Lua scripting examples for the Norns platform, demonstrating how to initialize Geode mode, trigger notes with specific divisions and repeats, and dynamically adjust rhythmic patterns using functions like `j.tick()`, `j.play_note()`, and `j.play_voice()`.", "body_md": "gistfile1.txt\n\n      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.\n      \nLearn more about bidirectional Unicode characters\n\n \n    Show hidden characters\n\n--- An exploration of Just Friends' Geode\n\n-- from maps with trent: https://www.youtube.com/watch?v=fMzM4omsIg8&ab_channel=Trent \n\n-- Just Type reference: https://github.com/whimsicalraps/Just-Friends/blob/main/Just-Type.md\n\n-- mode sets rhythmic relations:\n\n--  cycle:  rhythmic undulation to the envelope level\n\n--\t\tThe rhythm is generated similarly to transient, \n\n--\t\t\thowever the variation is applied continuously\n\n--\t\t\t(rather than in single steps of beats).\n\n--\t\tApplying RUN voltage emphasizes every 2nd then 3rd then 4th event, \n\n--\t\t\thowever all the in-between beats are available too. \n\n--\t\tSubtle CV shifts allow for a variation of groove \n\n--\t\t\twith nothing but volume manipulation.\n\n--\t\tNegative RUN levels emphasize every fraction of a beat.\n\n--\t\tWorks extra well with quantize active.\n\n--  sustain:  \t\n\n--\t\tThe first envelope is full volume and each one thereafter \n\n--\t\t\twill decrease in level. \n\n--\t\tBy adding a RUN voltage the rate of decay can be modified.\n\n--\t\tTIME & INTONE set a base envelope rate, divisions sets the \n\n--\t\t\trhythm of notes, and RUN sets the amplitude cycle \n\n--\t\t\trelative to repeats.\n\n--  transient: \t\n\n--\t\tEach output has the same level\n\n--\t\tRUN voltages will introduce a rhythmic variation every n repeats. \n\n-- The TIME & INTONE controls maintain their standard free-running influence, \n\n--\t\tspeeding up and slowing down envelopes, \n\n--\t\twhile the rhythms are controlled remotely.\n\n-- ii.jf.play_note( divs, repeats ) \n\n-- \t\tPlay a sequence, dynamically allocated to a channel\n\n-- ii.jf.play_voice( channel, divs, repeats ) \n\n-- \t\tPlay a sequence on a specific *channel*\n\n--\t\tmin divs is 1\n\n--\t\tsending repeats a negative number has it repeat infinitely\n\n-- ii.jf.tick( divs ) \n\n-- \t\tClock *Geode* with a stream of ticks at *divs* per measure\n\n-- ii.jf.tick( bpm ) \n\n-- \t\tSet timebase for *Geode* with a static *bpm*\n\n-- ii.jf.quantize( divisions ) \n\n-- \t\tQuantize *Geode* events to *divisions* of the timebase\n\nj = ii.jf -- alias to address just friends with just `j`\n\nfunction init()\n\n    j.mode(2)   -- set jf to geode mode\n\n    input[1]{\n\n        mode = 'change',\n\n        direction = 'rising' -- rising, falling, both are the options\n\n    }\n\nend\n\ncounter = 0\n\ndivs = 1\n\ndirection = 1\n\ninput[1].change = function(count)\n\n    j.tick(8)\n\n\t--note( 4, 3)\n\n\t--note(6, 3)\n\n\t--note(12,3)\n\n\t--note(12,7)\n\n \n\n\tcounter = counter + 1\n\n\tif (divs < 16 and counter > 4) or (divs >15 and counter > 2) then \n\n\t\tcounter = 0\n\n\t\tif divs%2 == 0 then\n\n\t\t\tnote (divs/2, divs*2)\n\n\t\telse\n\n\t\t\tnote (divs, divs)\n\n\t\tend\n\n\t\tdivs = divs + direction\n\n\t\tprint(counter,divs)\n\n\t\tif divs == 32 then \n\n\t\t\t--divs = 1 \n\n\t\t\tdirection = -1\n\n\t\telseif divs == 1 then\n\n\t\t\tdirection = 1\n\n\t\tend\n\n\tend\n\nend\n\nfunction voice( chan, divs, repeats )\n\n    j.play_voice(chan, divs, repeats)\n\nend\n\nfunction note( divs, repeats)\n\n    j.play_note(divs, repeats)\n\nend", "url": "https://wpnews.pro/news/an-exploration-of-just-friends-geode", "canonical_source": "https://gist.github.com/jaseknighter/9cb3aca53918d838356aa5e8294476c6", "published_at": "2021-08-15 18:30:39+00:00", "updated_at": "2026-05-23 18:36:06.289899+00:00", "lang": "en", "topics": ["hardware"], "entities": ["Just Friends", "Geode", "Trent", "Just Type"], "alternates": {"html": "https://wpnews.pro/news/an-exploration-of-just-friends-geode", "markdown": "https://wpnews.pro/news/an-exploration-of-just-friends-geode.md", "text": "https://wpnews.pro/news/an-exploration-of-just-friends-geode.txt", "jsonld": "https://wpnews.pro/news/an-exploration-of-just-friends-geode.jsonld"}}