Volca Audular

Hey everyone!

I spent the last 2 weeks working on the attached patch, the Volca Audular, which is inspired by such Audulus creations as the 1-Toast and Rasmus West Coast, and modeled a bit like the Korg Volca Modular, which I have grown so fond of working with over the past couple months. I am really happy with the result, and even added some Logic expression modules that I thought would have been neat for Korg to include, but nbd, it is still great.

My programming and design skills are still a bit lacking in this app, but I am getting better, and with that being said, it doesn’t quite come true to life as how the real Volca sounds. Also, cannot figure out why the keyboard enable button seems not to work, as it is set to block signals to the sequencer, and send the Hz value and the gate directly to the oscillator, envelope, and lpg, but for some reason, I cannot get it to work, except by increasing the FM depth, and even then, it only seems to play the same note all the way through each octave, never rising or falling in pitch.

Anyway, take it for a test drive, check it out, and lemme know what you think. I tried to make it as simple and self explanatory as I could. I hope you will enjoy playing/working with it as much as I enjoyed the challenge of designing and programming it to match the real deal as closely as my limited skillset would get me.

I have attached a couple screen shots below. Sorry I didn’t get around to making notes of the how and why, just yet. I hope you will not find it to be a hindrance. You can dial in each step on the face, and using the iPad screen keyboard, enter each note for the seq, or use the button nearby that indicates a ‘rest’. This also works as a great way to delete steps in the sequence, without having to simply add another note. I figure nobody wants 16 straight notes with no breaks on repeat, so that is why I built in the null value button.

Alright, so enough of my rambling, and I really hope some of you will find it to be useful and fun. Have a great evening, everybody! :slight_smile:

Volca Audular.audulus (215.8 KB)

6 Likes

I noticed that you’ve used an x ? x + y : y expression in several places and I thought I would point out that this is equivalent to x + y. If x evaluates to 0 the conditional is false and the second option is evaluated, which in this case is y. If x is non-zero the conditional is true and the first option is evaluated which is x + y. Since 0 + y = y a simple addition will give the same result and save a few CPU cycles. I’m not sure how your keyboard enable is supposed to work, but as it is currently configured the gate and Hz outputs are enabled when the Toggle is off (blue). You have x ? 0 : y where x is connected to the toggle and y is the gate or Hz signal. When x = 1 the output is 0 and when x = 0 the output is y so the gate and Hz signals are off when the Toggle is on.

1 Like

Thanks for checking it out, and for pointing that out. I have learned through working between Python, JS, and learning a bit of Ruby, if I leave things to chance or make an assumption, I typically get some sort of unexpected behavior. It’s a force of habit that I make such explicit declarations, and then find out that there is an easier way. This is why collaboration is important, as no single person has all the answers, as much as I would like to have them :slightly_smiling_face:

For the issue with the ‘keyboard enable’ function, that conditional statement you mentioned is a bit misleading, as the keyboard is always enabled. The function actually just overrides the sequencer’s purpose built sample and hold behavior, and this way, it is capable of holding the sequence that is currently held. As it stands without that switch, the key presses on the physical or virtual MIDI keyboard and the inbound signal information from the key press is sampled and added to the sequence, as it is being entered, which was messing up what I was trying to do.

The keyboard enable idea was just there to disable that bit, and (ideally, if it worked right now) allow the keyboard signals to be received by the oscillator, and the gates to be received by the envelope. That is why you the VIAs down in the lower left are there, as they carry the signal down and around the sequencer, and deeper into the patch.

I still have more work to do, but that little bit with the keyboard not working when the seq is disabled was making me a bit annoyed after 5 hours of amending and changing back, then making a new amendment all to no avail, so I decided to pose the question to the forum. If you can spot the issue or if you have any other ideas about little bugs I may have designed into my little monstrosity, don’t hesitate to let me know. I would really like for this to turn out to be something impressive that might stand a chance of seeing some good use from the community. Thanks! :smiley:

1 Like

It’s always a bit tricky to debug someone else’s code, whether it’s a traditional text-based language or a visual environment like Audulus. I’ve found a useful approach is to try to break things down into sub-modules with as few inputs and outputs as the problem requires. By creating a sub-module with a defined interface, you can debug one piece at a time and clearly see what signals affect each piece. If you’re building a S&H based sequencer as part of a larger module, try isolating just the sequencer. Build it as a module and test it thoroughly and you will have a component you can reuse in many designs. It may take a bit longer initially, but in the end you will have a library of components that work as you expect.

2 Likes

FWIW, I find it useful when I am stuck to write out a detailed description of the logic – or draw diagrams. As stschoen says, it can be tricky to debug someone’s code.

The other thing I find useful (and this may be saying the same thing as stschoen with different words), I usually find it useful to create a dummy patch that has nothing but the logic that I am having trouble with and some trigger buttons or toggles and lights to show the signal flow.

Sometimes when i build something mindlessly simple along those lines to just focus on the logic devoid of complicating factors, I can turn that into a subpatch that I can copy/paste into my real project.

I have built a few train-style switches to simplify routing because I find myself needing them often and it saves me refiguring out mux/demux logic that sometimes trips me up.

2 Likes

Hi,

I took a look inside. There isn’t much in the way of comments inside the patch which makes it hard to efficiently analyze how the programming maps to the intention.

It would be helpful if you need guidance if you were to put in text blocks explaining the logic. I looked at the area where the keyboard logic is but wasn’t clear on the intended logic. Comments explaining the logic would be helpful.

An example patch wired up to demonstrate the issue ready-to-go and possibly a YouTube video demonstrating the problem. A comment block inside the patch calling attention to the problematic area would be helpful.

2 Likes

@espiegel123 @stschoen Thanks again for taking a look at my patch, as I wanted help with that one small thing, but you are absolutely right that it is far too complex to just look at and know the intent without comments and well organized demonstrations, so you are not just looking at the problem buried in a multitiered logic spaghetti plate without any context.

The original intent (which I sorta wandered off from in bitterness about not being able to make the seq disable work right) was to share my patch with the community, which is otherwise now complete, with some labels, and a long set of what I think are good instructions for usage of the Audular (I also did a bit of module grouping in the sub patch, so it looks a bit more organized to me now, and perhaps anyone who might be curious about the flow of data).

I think all users will find it much easier to understand and work with now. I have hidden the switch for the seq disable inside the patch, for the time being, and I will do just as you both suggested and retrace my steps more simply in the near future, and get back to you with more clear and concise questions. Thanks again!

Volca Audular w: Instructions and Labels.audulus (219.0 KB)

Here’s what it looks like now, inside and out (hopefully less monstrous and foreign) :smile:

3 Likes

Cool. I’ll be happy to help you figure out your keyboard/sequencer logic thing when you have a simplified example that isolates the issue.

2 Likes

Btw, and sorry if this is obvious, but I find it really helpful to have a whiteboard around when I am debugging or coding – either to sketch things out or make notes or create a state table to help me figure out what the logic should be.

I am posting this now, because I was working on a patch to create sine sweeps this afternoon to test some audio plugins for artifacts.

I got pretty stuck figuring out how to set up some switches and a formula that I needed in an expression. Writing out a state table on the whiteboard helped me a lot. A table that just had columns for each of the 3 switches and knobs and a column for the output value. I wrote in rows of possible input values (switch states) and what the output should be with those values.

It helped me see where I was going wrong – in this case I was adding something early in the patch that should have been added at the last step.

I had been pretty stuck till I did that.

2 Likes

That is a great idea! I have nothing like that at home, but because of my line of work in solving complex technological issues pretty regularly, I have a giant white board next to my desk for writing out notes, program logic, shell scripts, and drawing signal flow diagrams, which is really not much different from this issue I am having. I feel kinda dumb having not thought of this potential usage previously, so I appreciate the idea. As I mentioned earlier, none of us has all the answers, least of all me lol, and so it is good to have suggestions for when the answer, or path to it, might be staring you straight in the face, and you’re looking everywhere but the most obvious place, like myself in this case! I will be erasing the board to make room for this during lunch tomorrow! :slight_smile:

2 Likes

I got the idea from my son’s algebra teacher. Never would have thought of it myself.

We now have a few 11" * 14" whiteboards that aren’t attached to anything. So, you can carry them around while you brainstorm. And fine-tipped dry-erase markers in fun colors.

1 Like