Salt - tech preview / test demo

Official support for: signaldust.com
Post Reply New Topic
RELATED
PRODUCTS

Post

andy-cytomic wrote:
mystran wrote: That's what it does: applies MNA by stamping stuff to a matrix. It's not "naive" about the process, but at high level it does use quite traditional MNA really.
You're using MNA so solve audio circuits and you expect it to work?!?!?!?! Time to invoke what Theo told me about this on the music-dsp email list (hehe)!
I don't really care to be honest. Somehow you need to write down those circuits as equations, and once you have more than about 4 or so, storing them into a matrix becomes attractive. From the technical point of view it's just a DAE, and MNA just happens to be one convenient and compact way to build those. From the run-time point of view that doesn't even matter: the only thing that matters are the variables you want to solve, and which variables you need for the iteration. Rest is just convenience detail to save manual labor.

Post

mystran wrote:
andy-cytomic wrote:
mystran wrote: That's what it does: applies MNA by stamping stuff to a matrix. It's not "naive" about the process, but at high level it does use quite traditional MNA really.
You're using MNA so solve audio circuits and you expect it to work?!?!?!?! Time to invoke what Theo told me about this on the music-dsp email list (hehe)!
I don't really care to be honest. Somehow you need to write down those circuits as equations, and once you have more than about 4 or so, storing them into a matrix becomes attractive. From the technical point of view it's just a DAE, and MNA just happens to be one convenient and compact way to build those. From the run-time point of view that doesn't even matter: the only thing that matters are the variables you want to solve, and which variables you need for the iteration. Rest is just convenience detail to save manual labor.
I'm with you completely in that it doesn't matter how you write down the idealised equations, I was just amazed at how Theo thought that doing so was some crime against engineering ;)
The Glue, The Drop - www.cytomic.com

Post

On the subject of PNPs.. I mostly haven't done it, since I've been messing around with the simulation details, and the less models I have to keep up-to-date, the faster it is to make changes. I actually had one earlier, but I broke it and only fixed the NPN.

As for FETs.. I looked those at some point and whether JFETs or MOSFETs the typical models are defined piece-wise and rather nasty in many ways. I basically figured that getting them to work properly would be enough work that it doesn't make sense to invest that time yet; better get other more important things to work first.

As for LM13700 .. I actually plan on adding a "not so realistic" model of that, probably as the first integrated component. All the current mirrors in that thing can make a simple filter quite expensive in terms of CPU, so IMHO an "economy" version would make a whole lot of sense here.

As for adding additional features.. there's one big question mark that I need to somehow figure out, and that would be as follows: what is the commercial potential here. While none of it is really rocket science, it's not like I could just throw this together over a week-end either. It's not really in a commercially exploitable state yet, but I'm somewhat cautious about adding every possible feature to the tech-demo before I know what potential markets there might be, and what would be the key features for those.

I do this (and audio dev in general) because I find it one of the most interesting things to do, but it wouldn't exactly hurt if it could also take care of the whole "food and rent" issue too; then I wouldn't need to worry about "other things" and this whole thing would be a lot easier. So I'm trying to avoid creating my own competition by release a free tool that already does everything everyone would want.

With that said, I suspect that it's probably safe to add a complement pair for the NPN and I probably should fix the NaN safety issue and the entry-point export anyway, so there will probably be an update sometime soon.

But at the end of the day, it's just a tech-demo: I hit a milestone where the whole pipeline exists in a working, if somewhat rudimentary form. For me it's now a matter of adding features, extending the existing stuff, and then trying to polish it into one kind of a product or another. There's a lot of kludges under the hood, but it mostly works anyway. I was pretty excited about the milestone, so I thought it'd be a good moment to get some reactions that might help guide future development, but please don't get too excited about getting significantly more features any time soon. :)

Post

It can already do some things that normal digital stuff can't, so it's much appreciated :tu:
But why doesn't a resistor in series attenuate the signal? Are the components designed to only function in a network? A L-Pad didn't work either.

Post

As for commercial applications I would suggest that providing this with a clean preset browser as a front-end and many presets of well known highly sought-after devices would perhaps sell better than anything we have seen on the market, ever.

Given that the simulation were efficient and accurate enough it would completely obsolete many existing plugins.

A "version 2" might add additional features like a mod matrix, voice allocator, macros and an enhanced GUI and at this point you might even compete with a large number of instruments.

I'm well aware that the processing required to achieve this is monstrous, but I'd also point out that in many modular systems (synthesizers like the sh-101 are really just 'fixed' modulars) there is limited or no feedback between modules.

This means that this method can take advantage of multiple cores.

In the distant future perhaps executing portions using CUDA might make sense.

I think it has more potential than anything I've ever seen.
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

camsr wrote:It can already do some things that normal digital stuff can't, so it's much appreciated :tu:
But why doesn't a resistor in series attenuate the signal? Are the components designed to only function in a network? A L-Pad didn't work either.
You mean from input to output directly? Because the resistor would only modify current. Given a high-impedance scope probe (the simulation is infinite) there would also be no effect in a real world circuit.

You need to use a divider instead, with your "output impedance" simulated by connecting a resistor next to the output pin to ground.

100k to 10k is a good range.

L-pad works for me although there may be a bug related to whether you have other components on the output net. A few times it output silence until I reset it with a diode or other component added to the node. Afterward I was able to remove it again (just two resistors, one from input, one to ground at output) and it works as expected.
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

aciddose wrote:
camsr wrote:It can already do some things that normal digital stuff can't, so it's much appreciated :tu:
But why doesn't a resistor in series attenuate the signal? Are the components designed to only function in a network? A L-Pad didn't work either.
You mean from input to output directly? Because the resistor would only modify current. Given a high-impedance scope probe (the simulation is infinite) there would also be no effect in a real world circuit.
Yeah. The output doesn't affect the circuit in any way, it just reads "what voltage is here" because.. frankly the way real-life probes tend to cause (slight) changes in circuit operation can sometimes be pretty annoying in terms of trying to debug stuff. The downside is that sometimes you have to add a resistance explicitly.
L-pad works for me although there may be a bug related to whether you have other components on the output net. A few times it output silence until I reset it with a diode or other component added to the node. Afterward I was able to remove it again (just two resistors, one from input, one to ground at output) and it works as expected.
I haven't personally observed this after the last set of changes I made.. but I'll see if I can reproduce it. Any particular resistor values that you used?

It might also help to just drag some of the components around, since .. the GUI will then pop them to the top of it's internal stack (so they become first candidates for mouse selection) and then they'll end up going to the back-end in the different order. This obviously should not make any difference.. but it would explain why messing with the circuit then makes it work.

Another thing to try is to switch to the REF solver and if it still doesn't work, look at "iters" which.. would probably say 0 if the solution failed (the REF does more sanity checking compared to the JIT). If using the REF solver makes it work (you probably need a power-cycle for that) then there's still some bug in the JIT .. but hopefully that's not the case.

edit: oh and.. if I can find this issue, I'll try to fix it for the update that I think I kinda promised :)

Post

I'll see if I can reproduce it. All I did was try to reset the plugin completely (fresh instantiation of host + dll) then cleared what was on the GUI manually except for input, ground and output and a couple wires, then inserted two resistors and the output was silent.

I haven't been able to do it again since then, although I think it did happen a couple times previously and I just didn't realize the output was silent with a valid circuit on the GUI. I assumed there was something I did wrong and moved things around and reset and it worked again in those cases.

Haven't been able to do it at all from a clean "preset" rather than modifying an existing circuit.

So what could it be *putting on speculator's hat and glasses* possibly a net or component or some other index from the previous state "hangs out" with the new circuit when it's reset rather than being removed?

edit: Can't do it. Seems to happen only very rarely.
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

aciddose wrote: So what could it be *putting on speculator's hat and glasses* possibly a net or component or some other index from the previous state "hangs out" with the new circuit when it's reset rather than being removed?
Could be practically anything. If it can happen with just input, output, ground and two resistors then there really isn't too much freedom in a circuit that simple, and I can't imagine the solver having any problem with this.. so it has to be something else.

But honestly.. no idea.. need to reproduce it first, so I can go where it's failing and why.

Post

I had only one occasion that I had to reboot the host to get the plugin working. I also noticed I couldn't use two instances. It looks like a memory management issue. Possibly static variables? Switching the solver worked a few times but other times did not.

Post

Thanks aciddose, L-Pad is indeed working, it was just a bug :)
I think the diodes are a source of problems also, sometimes throwing one in at random seems to cause trouble.

Post

camsr wrote:I had only one occasion that I had to reboot the host to get the plugin working. I also noticed I couldn't use two instances. It looks like a memory management issue. Possibly static variables? Switching the solver worked a few times but other times did not.
Well, no static variables, but it's starting to sound like memory management indeed.

I didn't have any problem running 6 instances the other day.. so it's not like that's supposed to fail, it's something else. I'll have to investigate.

Post

Okay, multiple instances ARE working, but didn't one time
:help:

Post

Ok, so there's definitely some weirdness going on.

Like.. I found a 2 resistors + diode circuit that I can save in a fxp, then load into a debug build and a release build. In the release build it uses about 2 iterations. In debug build with REF it uses the same, with JIT it says 9.98 (so doesn't work).

I checked the output assembly between the two (and breakpointed the process and read through the actual disassembly in memory) and they are byte to byte identical, except for some addresses, but those resolve as expected.. so..

I totally don't get it.

edit: nah, not that bug.. it was just an MSVC debug build oddity..

Post

camsr wrote:Okay, multiple instances ARE working, but didn't one time
:help:
Did you get some ugly error for that, or was it just a failure to process anything?

edit: I seriously hope that this is my bug, and not some case of "not invented here" again..

Post Reply

Return to “Signaldust”