Audulus 4 development thread 🤓

Same here. I’m using memento pattern on my flowchart projects and it’s a memory hog. But I’m coding for a desktop so the memory requirements are low priority.

I’ve never tried this, just an idea. Could you store the initial state in memory and then push only changesets to the undo stack? Like git commits. Then popping off the undo stack is like reverting the last changeset. Maybe the changeset is a binary difference if you are not storing the state in some kind of JSON like string. Those changesets have got to be less memory and it kind of implicitly shares as much of the source as it can.


I think that’s a pretty good idea. Audulus stores everything as JSON, which could be diffed (I see that the nlohmann JSON library will do diffing). I’ll look into that further. Thanks for suggesting it!

I have a goal of having quick random-access undo/redo, which snapshots offer, since you don’t have to apply a potentially large sequence of diffs. Plus we’d get a patch snapshotting feature for free.

I think the solution to making snapshots memory efficient may be hash-consing. I may also switch to an immutable data model, but as mentioned in that Apple talk, it can make editing operations rather cumbersome.

That “Generic Flyweighting Function” I posted above is my primitive for hash-consing anything with operator<.


Posted this over on Reddit:


Answered this question on Quroa:

Please upvote if you are on there, and save people from bad implementations of undo/redo.


A peril of modern life, I’m afraid.


I can’t wait to check out the very first beta version, i wish i couldn’t understand C++ but instead can we have a hint of some of the new features ? :star_struck:


@Nomak there are a couple hints above :slight_smile:


Quick update: the new code is now running some example patches :slight_smile:

There’s a new file format which is much more compact (your existing patches are upgraded to it). It uses Flatbuffers and I will be providing a schema file for those who want to generate patches via code.

I expect to be able to make this code extremely stable. It’s a very solid foundation for the future of Audulus :slight_smile:


Thanks for keeping that an option! Making patches via code is a super fun tool.


Thanks so much for sharing the c++ aspect of audulus, I had to start with the arduino platform and ide, then got deeper into oop (object-oriented programming) with teensy. It’s great to see someone who really knows how to use it!


It’s been a while since the last update in this thread - how is development going?


Hey @taylor! I hope all is well with you! I was just thinking, and I don’t know if this is in the road map, but I thought it might be really over the top amazing to have a sample node in A4. Maybe something that would allow you to record sounds that could be triggered by MIDI or (virtual) CV from other nodes, and then be able to shape and sculpt the sounds with the other amazing components of Audulus that already exist.

I am not sure if this is something that would be easy to implement, if it is not in the roadmap, but I did want to put the suggestion out there, as I think a lot of users would really like this capability to be a possibility in their modules. Anyway, whatever you decide, I am sure it will be awesome, and I know I will be for sure making the purchase the first day it is available! :smiley:

1 Like

Update: we’re designing a new collection of core modules. Things are looking great!


I fully agree. In the meantime I highly recommend using the delay module with the loop time sync module from the reface library. I just started to work with that and I think if you have a nice time synced patch and you want to grab loops and alter them there is a bunch of fun to be had there.

It’s kind of a different way to work, which can just lead to more ideas and approaches. Once you close the patch, obviously you loose the loop. But as long as you are working live, you can just record your patch and work from there.

I would almost call it subtractive sampling because you could capture some loops with the delay synced module, but then apply envelopes to the volume on a mixer (instead of triggering a sample). Personally, I think these kinds of workarounds can be productive because my mind gets into a problem solving mode. With that mixer with the mutes and the master clocks with time divisions at hand, you could probably get interesting results by subtractively introducing sections of a sample.

To put it another way, there is an sense in which this is an approach to sampling:


@futureaztec would you mind providing an example of what you are talking about? I have 7 delay nodes stacked, and the loop sync module there, but I don’t really know what to do from here. Where does the time outbound signal go? It appears as though the input to the module is supposed to be a clock signal, but I am not sure. My brain is not seeing how this makes a sampler yet…

Hey. I am travelling on planes today so I just wanted to add something quick. Then probably by tomorrow I’ll add some more here.

So here is a useful patch. Plug something in and start looping. I was able to get a track out of just this patch, one take, no Ableton or anything. I believe there is a door here to multiple worlds. I suppose that the important part is that you have a delay hooked up to a measure in bars. Technically, you can basically sample any amount at any time. So it is just a matter of setting things up. In other words, you could have delays on different time signatures or whatever.

I kind of feel like Chase Bliss is cool, but Audulus might have more to offer. We just haven’t worked on this yet, really. :stuck_out_tongue_winking_eye:

  • I want to add something. I have been kind of mulling over this idea. I work at the level of simulation here in Audulus. I don’t really work with delay nodes. I think there is a lift people get out of doing things themselves. Like, achieving some simple kind of synthesis, but doing it from scratch. That is not my thing. I am more interested in pushing things. That is, I want to know how good it can get without DAWs – but on a massive dancefloor with a bunch of skeptical people who have already heard everything and don’t care how you make it, just whether or not its good.

I think we have the tools to do this, it’s just that either no one is working in that way or people just aren’t sharing. Which is fine, but I am going to keep on pushing.


Sorry for the delay :wink:

Here is a connected thread:

I will be working on this stuff for a long time. IMO it is a key to another world.

You said,

Did you get that sorted? Using the reface library looper sync?
Screen Shot 2019-12-31 at 12.03.56 PM

This, with other tools leads to things like the Chase Bliss Mood pedal.

1 Like

Hey thanks for not forgetting about me! How was your trip? I hope you had an enjoyable time without any significant hang ups along the way. I took a look at the module from ReFace Lib you mentioned, but I haven’t quite figured out how to use it to make a long delay buffer and make it repeat the way a looper will.

Maybe I am misunderstanding what is possible, or maybe I am just going about it all wrong. If you have time, could you make a quick demo of what you are talking about and include just a few notes that explain how it works that way?

Just to be clear, I think that the High Noon patch should give you the right idea.

I think that one approach to appreciating the “Delay Looper Sync,” is to use it as a standard guitar looper. Then start to inject features by using other modules once you understand this basic technique.

At base, you want to be able to record so may bars, then have that recording diminish over so many more bars. This is possible just by having the loop the right length, and having it synced to the clock. The “feedback” parameter will control how it diminishes.

The nice thing about @biminiroad’s implementations is that he broke down the elements, but also provided several alternative delay modules. I feel like this is a very crucial way to build a library. There needs to be a standardized way to sync, etc. Then it allows for a more modular approach. So you can not only use a “Delay Looper Sync” to control the delays, but also use the “delay tempo sync” to give musical divisions to more immediate delay applications.

When you pair this with the master clock designs, you get that nice speed you want when producing. At the same time, we are not working in a daw with plugins.

This is actually really exciting. Think about mastering. It is possible to go from ingredients to package right in Audulus, because you can use synthesis techniques to do the mix engineering (applying a wavefolder instead of EQing and then amplifying/compressing drums, would be one example).

If you ware still unsure, just ask a more direct question. Also, I see two fun directions:

  1. Keep moving toward Chase Bliss guitar pedal patches.
  2. Head towards some of the “sampling” workaround patching we were talking about.

I will be doing both.

1 Like

I would be really interested in some snippets of how the new UI looks. :grin:

1 Like