Audulus Fundamentals: Signal Type Values & Resolution/Rate

Yes, I need this as part of a debugging patch I am making. It’s a reference for me on how to debug the signals. I am about to post it in its own thread to ask some questions + get feedback.

I have written applications before (by typing, not node-based :)) and I am new to synthesis + node-based programming. For me as a creative person the fact that I could plug any output into any input is exciting [because it makes the possibilities infinite], but as a programmer it’s potentially a recipe for disaster [it’s like not having variable types and the console not throwing errors when you send one type of variable to a function, which is expecting another type].

So I am building the debugging patch to have an easy way to debug: convert any signal to a meter that I can understand easily + as a reminder for how the different signals work. In those situations I’m more likely to insert a zerocross to get a readout (as the signal might be coming from anywhere, not just a clock module :)).

1 Like

I’m a retired coder myself. Audulus is a wonderful environment for DSP primarily because it is so straightforward. By making all the values 32 bit floats and processing everything at audio rates, it gives you an incredible amount of flexibility. I also have Max/MSP and PD but I don’t find either as engaging. Max is certainly more sophisticated, but much more difficult to use.
Watch out for order of execution issues. As you well know nothing happens simultaneously. Audulus doesn’t give you any defined execution order so feedback signals can be tricky. The app will attempt to figure out where to insert a delay. Audulus normally processes signals in frames of about 300 samples. and will typically insert a one frame delay in any feedback loop. You will see a small “z” on the input where the delay is occurring. The feedback delay node allows you specify where in the loop you would like the delay to occur. Note that it only tags the location of a delay if it is inserted in a feedback loop.It is not an actual delay. There is also a single sample delay node (z-1) which is useful for situations where you need to process data sample by sample such as a filter. As you might expect, it adds a significant CPU load to use single sample mode. There are some utility modules in the library that will create a one frame delay if you need one. The timer node can be used to create a delay of any length. There’s a pretty good selection of functions available for the expression node. Crossfade nodes make good switches if you ensure that the c input is either 0 or 1. (I usually put an. x>0 expression before the c input.

We’re glad to have you in the Audulus community. If you ever need any help please feel free to ask. There are plenty of people willing to help.

3 Likes

Forgot to mention in case you weren’t aware. Modulation signals in Audulus typically range from 0 to 1. This is a convention intended to make interoperability easier. Audio signals are -1 to 1. You can exceed that but your output will be clipped at that level. Divide by zero errors (NaNs) or run away feedback loops (overflow) often result in white wire lockup’s. Close your patch and re open it to reset. Patch files are JSON formatted text. Watch your levels when playing around with feedback loops. A 20KHz square wave at full volume plays hell with tweeters.

3 Likes

Ah awesome! I feel in good hands. ;))

When you say “more sophisticated” (for MaxMSP) what do you mean? There are things you can do with it, that are more difficult to accomplish with Audulus or it’s just more robust in certain ways? Also, how does PureData compare in your opinion?

Would you put Reaktor Player patching in the same category as Audulus, MaxMSP, and PD?

Have you looked at or tried the Bitwig Grid that’s coming up in 3.0?

I gravitated towards Audulus after looking into Reaktor, MaxMSP, TouchDesigner (which we are still using for other stuff… and I will eventually be sending signal to), because I prefer to start from a blank canvas and build rapidly from there. Audulus seems to strike the balance between freedom, intuitiveness, and complexity that I’m looking for in making audio. I’m also quite OCD and the UI of many of the other options looks way outdated and/or unpleasant in comparison. [The SVG UI is a nice move…]

I was wondering about this [“time”]. I’ve kept track of time programmatically in simple games that I wrote. I read about the z-1 delay node, but I need to dig into it deeper when I get to effects. I am still/currently working on a more basic level.

Thanks for pointing this out!

This was something that I immediately started to think about, when I saw the node… How much logic can I pack into an expression… Ex. is there a way to iterate over an expression somehow? I’m assuming there is no way to call an expression from within an expression (recursion)? :slight_smile:

Thanks for sharing this! This is the kind of useful information I’m looking for. :)) I basically plan to hack things together to make it work for myself. Tips like this like this are very useful.

This is why I started this thread. I did not see the signal ranges in the docs at first. But even with that it takes some time to get used to these conventions as they are not strict rules in the sense that typecasting often is in other environments [throwing errors, only accepting certain ranges].

I did notice some patches “crashing” or stopping to produce audio output at least… I am not sure if it’s for the same reasons as you mentioned above. I also saw it in iOS and Mac OS I think. And I realized that it’s those cases it was a matter of restart to get it going again. Is there a way to know why a patch “crashed”/is not producing output?

I was wondering how they can be so small… but I did not think of opening them in a text editor until now… :slight_smile: Is there any kind of debugging mode other than opening modules and analyzing them? What I mean is, is there a mode that shows more information without me adding extra meters/nodes/modules to monitor the signal myself?

Thank you for the warm welcome and all the help/answers! I’ve been teaching myself how to do things in programming envs + music and other tech for 19 years now and this is the most thorough, supportive, and quick to respond/help community I’ve encountered so far. It’s truly impressive.

Thank you!!!

1 Like

Max/MSP has a much broader set of built in nodes, a full set of MIDI tools, a graphics toolset, a defined order of execution, different data types including tuples, a debugger and a tiered processing model divided between Max nodes which run at sub audio rates and MSP nodes which process audio. The stand-alone version can produce plug-ins, and other redistributables. As a modeling language, Max has a wider scope, probably offers better performance, and can certainly create things not possible in Audulus. Its also $399 so it’s a bit unfair to compare the two. Max/MSP would be the tool I would choose if I were coding with a specific application in mind, it’s definitely the heavyweight in the audio DSP field. PD is actually a pretty nice application, particularly for the price. It’s a bit limited in some areas compared to the others.
I don’t really have any experience with Reaktor, Bitwig or TouchDesigner. I looked at Reaktor and Blocs certainly appears to be a capable app, but overall, I just found Audulus more fun. As with any programming environment, I sometimes wish for capabilities that aren’t available, but overall Audulus satisfies my urge to tinker. It’s simple and elegant without a lot of constraints

Timing issues typically arise in things like sequencers or other counter-based modules, particularly if there is feedback involved. Two gates that are intended to happen together, won’t. One will precede the other and there isn’t any way to predict which it will be. You need to code defensively so that simultaneous events that interact don’t occur.

Here’s link to short tutorial about data values, the expression node, and the operator order of precedence. The Audulus Expression Node
No iteration I’m afraid and and only a single output from an expression. No debug mode either, although you can get a display of the relative CPU usage of the modules in a patch. I’m afraid you just have to dig in and figure it out.

I wasn’t sure if you were on a Mac or iPad, but you might want to consider an external scope application. For the Mac I use oscilloppoli and SoundFlower to rebut the signal from Audulus. I know there are a couple of apps available on iOS as well.

3 Likes

Thanks for the comparison with Max/MSP and the other environments. It is really helpful!

What you said about timing issues makes sense (theoretically). I circle back if/when I encounter such situations.

Thanks for the link to the expression node info + the details about what’s there (and not there) in terms of debugging!

I’m on a Mac + I have on my iPhone 7+, but mostly used it on the Mac. I will check out the external oscilloscope apps. I have SoundFlower already.

How do I know that this is what’s happening to me? Because the output stops? :wink:

Thanks!

1 Like

Usually the wires in the affected part of the app turn white and output stops.

2 Likes

I’m new to Audulus, but have used Reaktor, Max, Bitwig quite a bit, so thought I’d offer some thoughts in comparison.

Audulus, to me, is elegant and logical. I love having access to a programming environment like this on an iPad. I haven’t created any pieces with it yet, but hope to. It doesn’t replace Max/Reaktor for me, but is a super-welcome complement at a very reasonable price.

Max is a huge and very important program. Its features extend to images/videos (live processing, for example) and extensive audio sample manipulation. Max is pretty much a universal tool for experimental electronic/multi-media artists. But Max doesn’t exist on iOS, and I think for many people it might seem like more than they need.

PD is a free, open-source offshoot of Max (created originally by Max’s creator). I’ve never used it because I own Max already. It seems like a preference for PD or Max might go along with a preference for open-source vs. commercial software? I’ve tried PD but it doesn’t scale well to my high-resolution monitor, so I didn’t look more into it.

I love Reaktor mostly because it just sounds gorgeous and I love the way certain tools (i.e. cloud/granular things) work and sound. Reaktor is a programming environment like Max but is more focused on being used as an electronic music performing instrument, rather than the more general multi-media environment found in Max.

Bitwig is a DAW, but, as mentioned above, the “grid” that they are introducing in version 3.0 (promised for Q2, soon!) seems to provide the sort of object-connection tools that are roughly similar to Max and Reaktor and Audulus. I haven’t seen a beta available for testing but have seen videos of it and am enormously excited about it!

6 Likes