mmalex's Avatar

mmalex

@mmalex.bsky.social

synth tinkerer (plinky); midjourney; NVResearch (InstantNGP/NeRF); cofounder MediaMolecule (Dreams, LittleBigPlanet); demoscene/vj (statix/bluespoon)

1,851 Followers  |  330 Following  |  124 Posts  |  Joined: 29.04.2023  |  2.2028

Latest posts by mmalex.bsky.social on Bluesky

yeah that's what i ended up using. it came at the right time :)

07.10.2025 09:35 โ€” ๐Ÿ‘ 2    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Video thumbnail

still messin' with this thing. so many yaks to shave when you start from scratch. autocomplete, filter dsp, sample loading, even json parsing. an eternal pile of todos, but each one small enough I'm making slow but continual forward progress...

06.10.2025 20:53 โ€” ๐Ÿ‘ 36    ๐Ÿ” 2    ๐Ÿ’ฌ 3    ๐Ÿ“Œ 0

im sure there are vsts that are as low latency as possible. i guess the vst api / host adds one 'host/plugin' block that can't be avoided. i wonder if anyone would dare make a daw with blocksize 1 lol

04.10.2025 18:22 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

that's what my thread is about! as described it has 0 latency :)

04.10.2025 14:45 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

nice! yes that's a good one. on dreams i also downsampled later parts of long irs. i never bothered exploiting reuse between overlapping ffts of different sizes. i wonder if that's a big win.

04.10.2025 14:39 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

what would you say is the biggest one missing from my outline?

04.10.2025 14:31 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

(eg ffts must be zero padded & thus double the size of the stated block size, outputs overlap add etc) but i wanted to sketch the shape. when i remembered it i got muddied up on scheduling details, and it was seeing it as independent parallel chunks that unlocked clarity for me. hope its interesting

04.10.2025 14:21 โ€” ๐Ÿ‘ 3    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

is computed in blocks of 512 by fft. next 1024, blocks of 1024... etc! success! tldr: we broke our ir into chunks of size 128, 128, 256, 512, 1024... with all but the first computed blockwise by fft. voila, low latency and (relatively) low compute. lots of refinements possible and details elided

04.10.2025 14:21 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

delayed 92858. hm, useful! now we have all the ingredients! chunk your IR into an initial chunk (say) 256 samples. we'll do these as a brute force FIR. the next 256 sample chunk, needs to be output with 256 samples latency. how convenient, that's what fft gives us! the next chunk of 512, likewise,

04.10.2025 14:21 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

convolution is linear, which means we can cut up our original IR into any chunks we want, and treat each chunk as a totally separate independent reverb, run them all in parallel and add them back up. key point: if a chunk comes from a point 92858 samples into your IR, you *want* its output to be

04.10.2025 14:21 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

you can also do this by precopmuting the fourier transform of your IR; then you do the FT of a block of N input samples, hadamard product the two, and inverse fft. since fft is O(NlogN) this is faster for large enough N! sadly, since its block based, it introduces a delay of N samples. but...

04.10.2025 14:21 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

an ir reverb is just a convolution, like a big FIR filter. if your IR is N samples long, for every output sample you just 'dot' together (multiply and add in a for loop) the N ir samples with the last N input samples (remembered in a buffer). so to output N samples, it costs O(N^2). but...

04.10.2025 14:21 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

i wrote an efficient convolution reverb for dreams while at mm years ago, and found myself in need of one again. my memory was hazy on the details, and i couldnt find it written out in a simple way i could immediately understand, so i chewed a pencil and reminded myself. heres how i think about it

04.10.2025 14:21 โ€” ๐Ÿ‘ 16    ๐Ÿ” 1    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

lovely groove

04.10.2025 11:21 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Post image

dual wielding

02.10.2025 21:06 โ€” ๐Ÿ‘ 12    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

all the best things only make sense in your head at first:) or something.... i tell myself....

01.10.2025 20:42 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Video thumbnail

also added 'keypoints' (by saying that space means 'unset', and . or A means 0) and actually they're more useful than i expected. (wait for it.... a to z!)

01.10.2025 18:15 โ€” ๐Ÿ‘ 8    ๐Ÿ” 1    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

(side comment - having an old-school text-mode screen of 8 bit characters & attributes as my only rendering primitive is... freeing, weirdly. i forgot how much I love text mode. just poke a byte in memory to draw a letter. yay.)

01.10.2025 18:02 โ€” ๐Ÿ‘ 7    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Video thumbnail

leaning into this text editor/visual editor dual, i've made the code colourer detect comments like /*====*/ and turn them into sliders. I really like how plain old source code remains the 'source of truth' for all state and the editor just doodles over it.

01.10.2025 18:02 โ€” ๐Ÿ‘ 32    ๐Ÿ” 3    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

not yet :) maybe one day! one can dream! :)

01.10.2025 17:57 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

i was kinda meh until i saw the rotating return key and now im ALL IN

01.10.2025 13:56 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

i really appreciate C99's variable length arrays. so you can write float foo[n]; where n is runtime variable!
in before the safety crowd: obviously just as unsafe as alloca (ie be careful of n's range) but less error prone as you dont need to compute a byte size by hand. and more readable.

01.10.2025 12:55 โ€” ๐Ÿ‘ 5    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

its a super fun rabbit hole!

01.10.2025 06:03 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

yeah! i came to it via common side effects, which i only just discovered ๐Ÿ˜… and i think there's overlap with pantheon, tho the animation there had this uncanny scooby doo / hanna barbera vibe which didn't sit well with me.

01.10.2025 06:02 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Video thumbnail

when you have your own text editor, everything starts to look like a .... textnail? behold, I can now edit my LFO shapes with copy and paste...

30.09.2025 22:24 โ€” ๐Ÿ‘ 45    ๐Ÿ” 1    ๐Ÿ’ฌ 8    ๐Ÿ“Œ 1

no!! ๐Ÿ‘€

30.09.2025 21:45 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

yeah

30.09.2025 21:43 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image

i love the colour palette of Scavenger's Reign so much. it feels like 1970s pulp comics' colours have been transported onto my tv.

30.09.2025 21:39 โ€” ๐Ÿ‘ 18    ๐Ÿ” 1    ๐Ÿ’ฌ 3    ๐Ÿ“Œ 0

yeah i guess its different! but i guess *technically* you can use them to find the bresenham stylr steps... i mean its a dumb thing to do, its more work for no gain. but then i wouldnt get to shitpost sean! :) aka yes you're right ok busted

30.09.2025 14:16 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

bresenham wants a (sturmian) word...

ok ok i'll stop now

30.09.2025 13:40 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

@mmalex is following 20 prominent accounts