a bizarre consequence of upgrading to Fedora 42 today is all my patches in mollytime are reporting lower CPU usage. i'm guessing this is entirely due to recompiling with a newer version of llvm. I really hope this means its just faster now and not that it's reordering instructions around my calls to std::chrono::steady_clock::now or something
the 1000 oscillators benchmark (laptop plugged in) is roughly the same as before though so idk

side thought, I've been thinking it would be fun to have inputs for various natural phenomena like the current phase of the moon, what the local tide would be if you lived somewhere with tides, current rainfall, wind speed, etc.

I'm trying to decide how automatic the location stuff should be. I could have a settings page where you just pick what location you want on a map, and that avoids having to weird out players with sketchy permissions requests.

the weather phenomena one is even worse because there's pretty much no good way to do that without requiring an internet connection, and I'd have to find a weather thing I could poll that's bot friendly and not a weird privacy harvesting scheme.

I'm considering maybe making these optional plugins for your optional enjoyment that way games don't have to ship with this stuff if they don't use it which they almost certainly wont.

Mollytime patches now can output mono or stereo sound, and they can have any number of generic inputs and outputs that can be routed to hardware ports or other programs.

I've decided that surround sound doesn't exist for now. I've got some ides for how to handle it, but it's kinda silly to bother right now since I don't have a surround sound system to test it with. I'll probably get some fancy headphones for it later, but it's not a 1.0 feature.

A friend is going to take a shot at a Windows port. Neither of us are familiar with the various Windows audio APIs, so I figure it's best if we just shoot for regular stereo outputs for now and worry about the dynamic i/o ports later. I'm hoping we can have that be a cross platform feature though.
Late last night I was thinking about adding the psmoveapi library to mollytime so I can use my old psvr wands with it, but now this morning I'm wondering if maybe someone else has already wrapped psmoveapi to translate it to midi and if I should just use that instead. I haven't found any such thing though.
anyone down for some drone I made some drone
(remember to turn the sound on) #mollytime
I really need to add a "fade out" button

well, in the other news mollytime has several filters now as of this weekend.

this video shows off some of the mind boggling effects mollytime is capable of now (this is an evolved version of the drum patch I posted a recording of a while back) and I'm very proud of it though I have to apologize I forgot to mute my browser and so there's a discord bloop in the recording just before the two minute mark I don't really feel like doing a retake right now
#mollytime

are you in the mood for some chill eerie slow experimental noise music? great, go find your headphones that have the good bass response, because I made some chill eerie slow experimental noise music #mollytime
here's what that patch looks like

I woke up this afternoon and realized this idea I had 98 days ago totally falls apart if you create a data dependency between invocations of the same function eg fn(fn()). Good thing I didn't build it!

I think instead I will probably have polyphony be implemented via shadow copies of polyphonic tiles.

https://mastodon.gamedev.place/@aeva/114968771707424143

another victory for daydreaming driven development
are you ready for 6 minutes and 26 seconds of uplifting harsh yet pleasant sounds because you'll never guess what i just made #mollytime
the patch for this one is a bit sprawling

I wrote a new screen for managing tile connections in mollytime, and I imagine a professional ui designer will feel real physical pain looking at this wonderful screenshot, which is why I decided to share it :3 It's pretty much the opposite of minimalism and it's sooooo functional and I can work a lot faster now ahahaha!

Now it only takes three or four clicks to toggle a wire whereas before it took more in some situations.

is it ugly enough to cause paint to peel? probably! is it intimidating to hypothetical new players? probably! however, this continues to be my guiding light:

https://mastodon.gamedev.place/@aeva/114612264992461462

This is how the old connection workflow worked if one of the sides of the selection had more than one possible option.

I have made a lot of patches with this old workflow and I am convinced now that despite what phones and tablets and unreal editor and windows 95 would have you believe, click-and-drag is an *awful* interaction verb and should not be used at all in frequently used actions.

https://mastodon.gamedev.place/@aeva/114842120034168266

The real victory today was ripping out the ADSR implementation and replacing it with a better one. Fixed a bunch of edge cases that had been bothering me, but also the new one is much simpler. The attack, decay, and release parameters now are the number of seconds to bring the amplitude from 0 to 1 or vice versa, and can be even modified while the envelope is running like on a proper synthesizer :O
That's the nice thing about this phase of the project. I can make major breaking changes to core functionality and I don't have to worry about things like versioning and such because "simply update every known patch file in existence by hand" is still a viable version migration strategy.
i think it's funny that it's been a little under half a year and i still haven't built any of the cool procedural wire drawing stuff i hashed out at the start of this devlog thread yet, because it turned out not to matter all that much in practice. i'd still like to take a shot at it, but it probably won't be soon
not every self playing patch is a winner but this one is named "barking frogs" #mollytime

I added a quantizer and a thing for generating random repeating sequences to mollytime tonight :D

This song is probably one of my favorite things I've made in a while ^_^

#mollytime

I don't have OBS set up on this machine right now, which is too bad, because otherwise you would have got to see me tinker with the patch while it was playing :)
I think this might be the first time that I've gotten a song stuck in my head that I made myself https://mastodon.gamedev.place/@aeva/115575598757344830

I wrote a python script to survey the distribution of opcodes in the mollytime example patches.

The bipolar-to-unipolar opcode is used 71 times, but the unipolar-to-bipolar opcode is only used 8 times so far. I'm reasonably sure that most of these are used to couple oscillator tiles to mix tiles.

I feel like this is probably a pretty good sign that having mix assume a 0-1 alpha like a normal lerp would was a mistake.

seems like it'll probably be a good idea to change the mix node to take a bipolar alpha value, and update the various random number generators to emit random bipolar values instead of unipolar values, but i'm gonna fiddle with this analysis script some more to better determine if that's a good idea or not

jfc I've written a lot of mollytime patches.

This table shows each opcode I've attached to a "mix" node, and how many times I've made that connection.

"const" is a numeric constant, "stu" is the bipolar-to-unipolar converter, "uts" is its inverse, "flp" is a flip-flop, and "midi_hz" is midi note number to hz.

It's unclear if making the mix alpha unipolar was a mistake or not. There's quite a lot of multiplies here, and I often use multiplies to pull values towards zero.

note -> mix is bizarre (that's a midi note from a connected midi device, so usually that's a magnitude of about 30 to 90), but midi_hz -> mix is *really* bizarre (that's hz from a midi note, so somewhere in the ballpark of 3 or 4 digits normally). I don't remember any of these, and its weird that note happened 4 times. I wonder if these are bugged patches
I think I'm gonna keep mix's alpha unipolar. It seems likely that if I were to change it to bipolar, I'd just end up flipping the number conversions the other way.

This is the whole opcode survey. This just lists the total counts of each opcode, no information about what they're connected to. Also this is only for the patches I've bothered to check in to git, since I'm not on my normal computer at the moment.

Each number is me dragging and dropping a tile 😅

Besides putting to rest whether or not I should change the behavior of the mix instruction, I also put this together to help me decide on categories for organizing the tiles, as the obvious categories are too lopsided.

However, my sister wisely convinced me that top level categories are a waste of time and it is more useful to organize by vibe, eg make tiles adjacent because they feel like they should be together, and so that is what I am planning on doing now.

I know she is correct because I'm already kinda doing that. Also consider, "oscillators" is a category that would make sense. The moon is an oscillator, and sin is an oscillator, but the moon absolutely should not be in the same drawer as sin. This is important.

Rewriting the part catalog in the pick-and-place mode didn't take long at all it turns out. Here's a short video showing how the new version works.

The main difference is you select the catalog page from a sidebar instead of paging through them like its mario paint.

idk why the background looks so distorted in the recording
ok whew yeah the new pick-and-place UI is much nicer to work with. here's a patch a made real quick to validate that it's a better workflow #mollytime
are you in the mood for roughly five minutes and thirty seconds of filtered feedback loops being gently agitated by random noise and the occasional saw wave? because you'll never guess what I made in #mollytime tonight
@aeva if you funnel your random notes through a scale, you'll get instant harmonic structure.
@lritter that is what i'm doing, there's a quantizer in there
@aeva i was afraid of this answer ;-)
@aeva something's definitely out of tune.
@lritter absolutely :3
@lritter this is a slightly improved version of the patch over the one I recorded, but the gist is the same. the cyan region is the source of the intermittent plucked string sounds, which briefly introduces a saw wave into the resonator. the quantizer is that long horizontal mess at the bottom right, and if you follow it up to the left you'll find the saw wave.
@lritter the magenta part is the resonator, which is a pair of tape loops w/ filters. this is fed by a steady stream of solid noise normally which creates the droning. the pictured version of the patch has some oscillators on the cutoff frequencies, but that's not present in the recorded version iirc. Most of the texture and pitch in this patch is coming from the length of the tapes in the resonator's tape loops.
@aeva to debug the detune i'd try a minimal reproduce: what can i remove without destroying the effect? whatever remains is the cause.
@lritter I consider it to be a feature not a bug. this patch is very soothing to me

@aeva if it's supposed to be spooky then goal accomplished. :)

meanwhile i have trouble enough making things sound not spooky

@lritter this is just what the short tape loops tend to want to do. it's probably possible to tune them precisely, but I think it might be easier to just get one going at a steady pitch, measure what that pitch is, and then use granular synthesis to force it into a different pitch. or introduce some kind of feedback loop with a tuner to adjust the tape lengths, but either way requires introducing new verbs
@lritter iirc this discusses what sort of thing you have to do to get it to be in tune https://www.osar.fr/notes/waveguides/
Notes on Waveguide Synthesis

@lritter and the yellow part is a bit of spice to add a vaguely vocoded vibe to the saw wave, but led to the happy accident of emphasizing specific notes when the quantizer hits them. except that it works too well, so it's detuned to make it sound spooky instead of terrible
@aeva oh. so you made it bad on purpose.
@lritter no no it's great on purpose. it's "microtonal" :3