kria still has some refinements in the pipeline, and i’m hoping to have a settled version soon prior to moving the code into max (to prevent having to do this multiple times).

thanks for your patience!

7 Likes

Curious if you have any follow-up thoughts on this? Sticking with illustrator or shopping (shopped?) for new options? Wonder if a new home for docs fits into the github re-org?

Cheers!

Regarding this, in the thread about monome app preservation (I think) you said something that suggested that porting (to JS), may not be too hard in general since JS and C are so close syntactically. I wonder if this might not become something we can take advantage of in how we think about (re)structuring shareable bits. (Paging @jasonw22.) In any event, it’d be great if you could post a few reflections once you do the port. Might make for good fodder for the “build a sustainable monome code ecosystem” playbook.

EDIT: github tracking issue for the max patch here.

1 Like

It’s also quite possible to write Max externals in C.

However we do it, I love the idea of finding ways to share code between Max, eurorack, and aleph projects.

3 Likes

Emphatic +1 and very happy to help on this front.

I wonder if externals aren’t just the ticket. @tehn?

see here for example of aleph communication in C.


only tested on linux and that only shows how to send bfin module over serial. The full bees network & dsp params are exposed by aleph to host program - but the only full-featured host lib is common lisp (sorry). Needs to be ported to C library so non-lispers (err so that’s practically everyone) can get involved…

to be honest i’ve never written an external. i doubt it’s terribly difficult-- i simply haven’t looked into it.

i feel js has a level of accessibility above externals-- no toolchain setup, etc. it’s a good step beyond patching, but not into full on c development.

not that i want to discourage externals-- they are a wonderful thing for those truly dedicated!

i could do a little writeup of my process when i port the module code to js, certainly.

3 Likes

Any word on if external clock will be happening any time soon? I’m planning for a gig at the end of the month and planning to use Kria, just trying to decide if I will be able to sync it from a MIDI source or not.

4 Likes

external clock for kria is more complicated than the others-- given there will be divisions/etc.

my first go at MP external clock division with the param knob is not quite as good as i’d like, and it tackles a lot of the same issues as kria. basically tracking rounding errors and re-sync.

i honestly don’t have a timeline but i would like to look at this soon. i would not suggest planning a set around this feature.

1 Like

Thanks for the info. I can do without MIDI sync I think.

Just wanted to say that this is my favorite of the trilogy now, hoping it will come to 1.0 /w TT integration and external clock someday…

2 Likes

i was thinking about the rounding errors with this a lot too - i noticed that the clock out drifts from the grid of the static clock output now already

the ext clock sync input is also bound to really fun/strange if you have an unreliable clock, or if you feed in a sequence that isn’t straight.

hopefully this isn’t annoying/super obvious, but i’ll dump my thoughts just in case they are of interest @tehn

basically, i thought there could be some sort of execution stack with times between events based off the last 2 ext clock trigs received. this stack would launch every time the clock trig is received… basically breaking the sequences up into launchable chunks. will outline a few different cases here for clarity’s sake:

WITH A STRAIGHT EXT CLOCK SIGNAL (easy stuff, just to outline how it works)
clock multiplication:

let’s say the last two clocks were 100ms apart. pattern 1 is 3x multiplied, all notes on.
when the clock trig is received, the execution stack that launches would be (using teletype script - using ‘trig’ to signify any event… could be cv change or gate time change, etc):

trig
del 33 : trig
del 33 : trig

then it would wait until the next clock sync. by launching a stack with each ext clock trig, the rounding would never be more than a few ms off by the end of each chunk. also by recalculating the delay time based on the last two external clocks, we can create all sorts of weird rhythmic geometries and swings. light clock jitter could really humanize a pattern

clock division:

you could just make kria count [clock divisor #] of triggers before launching the execution stack for that pattern

tt script per trigger would be:

if eq 3 x : x 0
if eq 0 x : trig
x add x 1

x would have to be set to 0 when the clock division is initiated

if pattern is both multiplied and divided:

subdivide everything into smaller slices and figure out how much of a ‘remainder’ delay there is between an external clock trig and the first pattern event.

so say the last two ext clock trigs were 100 ms apart, and the pattern is multiplied by 5 and divided by 7. not putting this in teletype script because it’s messy but the logic is as such:

\\execute remainder delay + first event

first event would land on the grid with the external clock trig, so launch with no delay

\\calculate # subsequent events + remainder after

time between events is 7/5 of the time between external clock hits, so there would be no more events until the next ext clock trig. the accumulated remainder would be 2/5 of the time between ext clock trigs. would be good to keep this as a fraction until the next ext clock trig, as the timing could have shifted and we could recalculate delays then.

\\execute subsequent events

since there are no more events until the next ext clock trig, do nothing. of course there are some clock settings where multiple events would occur in one chunk (such as mul 12 / div 5), so this is where we execute those extra events.

how the new clock settings initiate would be an interesting facet of playing the instrument. right now the kria seems to accumulate the remainder delays, so we could actually use two variables, one that is a global ‘accumulation’ (calculated/accrued when clock settings are changed), and one that is just for keeping track of where we are in the clock cycle against the external clock grid.

i was going to elaborate on how this works with an unsteady clock but i think everything is explained here enough and i worry i’m just being obvious/redundant already. simply recalculate all of the delay times between events using the time between current ext clock trig and previous ext clock trig. this will allow for all sorts of shifting fluid grids- weird slow downs and speedups, fractal swings, who knows what. probably not even that game changing, but got me excited, especially since there are so many different kinds of events on this sequencer

1 Like

note i would’ve tried to code this into reality except i suck at c so note to self going to brush up on that so that i can just do it next time instead of typing it all out ha :sweat_smile:

1 Like

indeed, you’ve illustrated several things that happen in the code as is.

but the code has some issues. for one, i haven’t implemented distribution of the remainder given there’s a 1ms clock. this would facilitate a retrigger on pulse to keep tight alignment. currently the clocks will drift.

clock mult is easy and works perfectly as is.

i’ll get to this soon!

3 Likes

I’ve been lurking and liking and just found myself patched out to the max, at a point where clocked Kria would be awesome. Sorry I know you’re working on it just really hyped over here.

3 Likes

(Plus 1! …no pressure, it would be so great though) :slight_smile:

OK, add me to the fan club! This is really musical. I second all gingity’s suggestions.

Looking at the scale editor page. It seems that root + 6 is the maximum length of a scale. Which is OK. No chromatic. Chromatic can be done via Transpose.
But a few questions -
What is we want a scale with less than 6 notes? Can we assign the 7th to a zero interval, or the 6th if we want a 5 note scale? Or is this irrelevant as the note page accesses 7 rows only? No 7th note defined, then rows 6 and 7 yield the same note?
Can scales reach beyond their octave? ie. 6 intervals adding to more than 12 semitones… I’m not sure how this would work but the maths could be fun for the masochist…
Will pressing alt + 1 AND 2 reset all?

there is an specific “octave” setting per step on page 1 along with triggers and accent, if that helps.

the scale editor is still a work in progress and i’m open to suggestions.

Yes, that octave setting is great.
Looking at these other questions, it was late… I can experiment and figure out the answers myself, today. The scale editor is pretty close to ideal, I’d say. Once I got my head around the UI.
I’m still unclear if ALT + 1 AND 2 will reset and align both sequences, though…
This instrument has really great potential for me as it provides pretty much all the visual feedback I would need to be able to perform live. I’m encouraged and excited!