Exactly! The table approach is what I was just trying to describe in keyboard speak. In my concept a choice for a smoothing function wil also be included to keep the number of needed X-axis entry point / faders relativley low. If not smoothed the results would be a pure through point curve with linear connections between points. If smoothed the curve becomes more of an aproximation curve in stead of a pure through point curve. More curve variations can of course be thought of but would increase programming and user interface complexity.
Does this have a name?
@brasso
Yes, very close indeed, and I'll tell you what's even more of a coincidence, cause last night I was playing around with high-speed sequences to modulate an oscillator, getting that initial growl you get when blowing a trumpet etc, works surprisingly well, got quite absorbed in it really
What I'm wanting to do is similar in a way to that synthesizer, but the goal is different. Don't think of the keyboard part I mentioined so much as that was just an example, but you definitely have the right idea. See also what I'm about to say to Sputnki, and all will become clear why I need it.
@Sputnki
I used a keyboard as an example before, and now that I know you're both thinking what I'm thinking, I want to explain it like this. Take the low pass filter for example, spinning the dial from min to max lets me hear the 'character' of the filter. I like the filter (a lot), but there are still characteristics of it I'm not pleased about, for example, I don't like how much volume it loses, but the loss in volume isn't linear so I need to be able to specify a curve that adds gain where the filter is losing it. And it goes beyond that, I might not want the resonance to behave in the same way across the entire range of the filter, so again, I need to be able to define a curve, but for the resonance this time.
A keyboard example, imagine playing an instrument and as you work your way up the keys, it starts to get a bit 'boomy' for around an octave or so, before fading-off again as you work further up the keys. So again, I need to be able to specify a curve for that so that I can reduce amplification or resonance where it's getting boomy.
You mention the table, and the thought had crossed my mind, but would that be suitable for such things? I thought those tables were strictly without interpolation. I suppose what I'm getting at is here is that the table sounds ideal if it were interpolated in the way Marc was describing.
Regards "Squiggly" or "Super-Squiggly", just squiggly is perfect because I need it smooth
As an overall 'requirement', the best thing I can say to you both is that I need it to be able to add my own character to whatever I create. Whether that means modifying the character of a filter, changing the response across a keyboard, or fine-tuning the pitch response of a physical model, it really all boils down to the same thing; the need for definable curves.
Once I understand how to implement it, this is something I will use in all my designs.
Very important stuff, must have it otherwise a filter is a filter is a filter etc.
We are now nearing a point which Technobear mentioned in an earlier context.
What you are asking for is a bit of a silver bullet. Sure, every solution offers you a certain set of tools. If it is a good solution the tools will be versatile and their implementation user friendly. There wil however always be compromises one has to live with. The thining out of a sound when resonance is applied to an analog (style) filter is a basic property of such a filter. So much even that many people insist on it. Otherwise they will start to complain that the behaviour of a filter is not comparable to the that "perfect" one from that or that one classic.
Anyway: there is no scalpel I know of that is as specific and still general as you seem to want it. At best you can search for a solution that suits you and still is as flexible as possible but on the other way also compatible with your own ability to think about the physical properties of sound. In their most basic form modular systems can be very user friendly becuase they enable one to think about building a sound from a very basic level. They are however not infallable. The more control you'll want the more complex your setup wil become untill you reach a level when your system wil not be able to cope with your demands. Either you will run out of modules and patchchords on a real modular system or run out of processing power on something like a Axoloti.
More specifically alligned to your question: What you ar basically asking for is what one could call TABLE DEFINABLE 3-DIMENSIONAL INTERPOLATION (there you have your "general" term at last). For the reasons mentioned above there are however some strong caveats:
1: The more precise a system becomes the more complex it will become to manage it. Remember my DKI Synergy example where one has to fill in whole tables by typing in numbers.
2: Even if you are prepared to do all that or a less compelx handling tool is available (remember the GDS faders) the objects / tools you want to influence will have to be able to interpret such data, which will in term make them more complex to create and very probably also more processor hungry.
3: For these reasons the actual art is to develop general solutions that are as precise as possible without becoming too compelx too manage. This is the direction I am taking while describing my ideas about a very flexible but still managable general modulation tool. More about that soon.
I do however not want to discourage anybody, only get your feet a bit back on the ground. Maybe Sputni has some idea's to combine your general wishes with his close insights into mathematics and stuff (?)
Marc
@axoman You can already read tables with interpolation.. There's a specific object for doing that: table/read interp
At this point i'd really really really suggest you to check what axoloti has already to offer. The tools for doing what you need are already there, the problem is that you don't even know what's in your toolbox.
You should take your time to explore the factory library (and then the com lib) before asking for objects that suit exactly your needs. The point of new objects should be to express more efficiently patches that would otherwise be really complicated or to create new functionalities.
@brasso said something really important here: specific tools are not versatile, and they might also be very complicated to learn. Maybe your problem does not even need such a specific solution! (but you still want the swiss knife in your pocket)
Also, try to make peace with math. I know it's hard, but you really need it to solve problems. You don't even need to become a master in calculus, it can be as simple as searching functions on google to see what do they look like.. You'll be surprised, 100% guaranteed!
@brasso
Sorry for the confusion which is no doubt due to my layman terminology, but you seem to be unaware that actually, I already have the major part of my answer, that being "functions" - brilliant!
So now, all I need to work out or be shown is how to implement them, like, what would be the most basic way to create a volume dial that has a smooth dip in amplitude, say, with the dial set 25% along it's range. Once I know that, the rest will come automatic. So now I know what it is, what it's called, and how it works, it's just the implementation part I'm getting my head around now.
Forget about the physical modeling stuff I mentioned for now, it's not directly related, just an example. I think you might be taking the physical modeling side of it and thinking, whoa, this guy is completely out of his depth here. But actually, my approach is to use my ears (it's sound after all) and connect wires. No amount of math wizardry is going to get what's in my head as easily or efficiently as playing around with experimental synthesis topologies and dials, even if I was ok with the math stuff.
So that's just the way I do it, and for the most part I'd still do it that way even if I were a math genius
@Sputnki
I totally hear you on the math stuff, but fact is it's not going to happen for me any time soon, so no point me kidding myself about it. I'm going through the library, trying stuff, but the problem here is I'm unaware of something that would be obvious to you and likely just about everyone on here. If you were to show me something very specific, I would understand and the rest would come automatically.
Show me, for example, how you would wire-up a volume knob to have a smooth dip in volume, say, 25% along it's range, then continue as normal for the rest of the range. The shape or "function" can just be a generic smooth dip, doesn't matter, just as long as the volume knob behaves along the same lines as requested. If I see such a patch, the rest would come automatically to me. Now that you've given me the basics of how to wire-up a basic function, it's really just a demo implementation I'm after.
The volume knob with a dip I just mentioned, would be the ideal explanation patch for me
Okay, here you have it: linfun2.axp (10.2 KB)
It's done with basic objects and a minimum of clever patching.
@brasso
I said it in case my mentioning physical modeling was shaping what you thought I was getting at
@Sputnki
That wasn't what I meant but thanks for doing it cause it still helped, and I think I just realised how to implement what I'm wanting, just about to start playing with it. Thanks again for you help
@rbrt
Sounds interesting, will definitely be checking that one out
@Sputnki
I get the idea behind functions thanks to your patches, but I'm still no wiser as to how to actually map a function to something to make use of it.
Can you add to that first example slighty, by mapping it to a filter so that the cutoff is effected at a certain point when adjusting the cutoff dial? In other words, where sweeping the dial would normally give a smooth transition, instead we'll encounter an area of the sweep that stands out due to the function you made being mapped to the sweep range of the dial?
That's the best way I can explain it
Nope, sir. I won't produce any more examples: now it's time for you to get your hands dirty and try to adapt existing stuff to your needs, you won't learn anything otherwise.
Let me tell you something: no amount of high level thinking will exempt you from actually patching your own instruments. You just can't expect the community to make everything you need just because you prefer spending your time conceptualizing wonderful ideas and not putting them into practice.
Fair enough, Sputnki, even though actually, that wasn't a fair comment.
I never want anyone to build stuff for me, that's one of the reasons I prefer to scratch-build than use ready made objects that do the same thing. But occasionally I need a demonstration of something. I know why you said what you did, but at the same time it's not going to change the way I do things. All it will do is take me longer to spot something you could have shown me.
I'll figure out how to map functions eventually, even without help, no worries.
Done!
What was tripping me up was not realising I could just map a function directly to something. I expected it to be a bit more complex, thinking I'd have to concern myself with rectifying offsets etc. Can't imagine where I get these ideas sometimes but anyway, sorted.
BTW, that first patch you posted, you might not realise it but I learnt more about "math" simply by playing with it in one minute, than I doubt I'd have ever learnt if I had to learn the actual math to achieve the same goal. This is kinda why I'm so stubborn about this stuff I suppose.
It's a bit like drawing, I could learn to make a pencil first, then do the drawing, or I could just use a pencil. But not being interested in learning to make a pencil, is no indication of the artists drawing skills
Hi Sputnki,
Yep, I still want that "Swiss Army Knife" in my pocket, with which you have suggested a very good title for an accompanying post.
It's not that the old tools are bad. They have served us all well throughout the years. It's just that I think one can come up with something that is much more versatile without becoming too cumbersome.
I'll surely get back on the subject soon but I'll first have a closer look at Axoloti myself before I pop the question. Otherwise I might indeed not understand the very answers I am hoping to get.
Marc
An example:
Super squiggly, but easier to implement (the squiggliness increases with the number of points and higher order polynomials lead to horrid behaviour the further you get from the points):
Less squiggly but more complex, can be used even for non-polynomial shapes. You must define entirely new operations in axoloti (matrix algebra, especially generalized matrix inversion, which is hard)
In both cases you'd have to figure out some way to input data dynamically, and in order to optimize memory usage (it's a limited resource) it would be clever, at least for the least squares method, to create two separate patches: one for the computation of coefficients, and the other for the actual patch.
In the end you'll have made an objects that's fairly complicated to use and will require users to read instructions. Very few will know what the object does (and so many won't use it), some of those who will use it won't read instructions (and because it's a complicated object they'll ask on the forum).
Also, maybe this super complicated object (and thus not efficient) will be overkill in most situations.
Multi-purpose tools make sense if you have some limit on the amount of tools you can have. For example: in case of physical modular synthesizers, where a module can cost you from 50€ to 500 and takes physical space in the rack, it makes sense to have some that can perform more than just one operation.
In digital realm this is not the case. You can add as many modules as you like, and leave un-needed stuff out of the patch.
Hey Sputnki, was that reply for me, or Marc?
I saw reference to "Super Squiggly" and initially thought it was for me, but then saw the content and thought it must be for Marc. Just in case it was for me, I really do appreciate the effort you went to, but I haven't a clue what it means!
Dear Sputnki,
Since the subject still seem to attract you.
I am very aware of the complexity spiral. Therefore the number of parameters for the most accesible version should be very low. More complex versions could still be made by addign more graph points and adding more esoteric fucntions but imagine this for th euser frienly version
An 8 point graph. Time on the X-axis is only set as an overall value over the whole graph length so the distance between the ponts will all be equal. So there are no indiviual times to be set. One can however adjust the total time from 0 to, say, 7 seconds, making the time between individual points change drom 0 to 1 second accordingly. The Y axis values could exist of a number between 1 and 127 which is a proven resolution from the MIDI standard that is good enough for almost any imaginable need (except certain tunign solutions in high octaves maybe but since the value can be connected to a note number it shouldn't when used chromatically. But I degress).
After point 8 there is a separate value for the release time of the curve. In principle this could have been taken care of by a 9th point on the graph but having an independant release time (so after key off) will partly compensate for the lack of individual time settign in the rest of the graph and thus keeping its resolution on the X-axis as low as possible, the of that being 8 x 127 points in this example.
With this tool one can already make / draw quite elaborate point to point shapes.
Now hear this: For the interpolation between the point on the graph I would propose 2 options:
1 - A straight line from pointt to point. In that case you can for instance create a single triangle shape with 3 points only. Furthermoree it is the bes tway to get rough sounding effects, not even squigly but harshly linear.
2 - A smoothing function that "'draws" a smooth graph through the point or maybe even an aproximation near to point curve would be even better. In that respect I do not yet have a clear vision of what woudl work best. Probably somehting to try out in practice.
Chosing linear or smoothed would then basically need one switch.
The next step would be to inlcude a loop portion in the graph to take the use into complex LFO teritorry. Instinctively I'd propose a loop from point 8 back to point 5 so that 4 points on the graph can be looped until key release, after which the extra release parameter takes over.
We are nowt taling about a tool with 12 input points. For instance 8 faders (for the Y levels of the points), 2 pots (for overall time and the individual relese time) and 2 switches (to activate smooth , linear being the default setting, and loop, no loop being the basic setting.
Imagine it. On a small 8 fader controller one could then set up a graphical representation of a curve. The resolution would obviously be low but that could actully be a benifit to produce brash, grindly low fi stiff. The smoothing function woudl compensate for the low number of points when smoothness is actually asked for.
Oops, In the end I have still describe tthe whole concpe tof my Swiss army knife. Let me know if oyu want to know more. I have even already made some sketches.
Which brings us to your "who needs this?" question. The whole attraction of a system like Axoloti is of course that one can work out personally customized soluitons, even if these are made uop out oif "conventional" elements. The next step is to think about improved elements for specific uses. So I am not thinking persé about the universal Swiss army knife but one that would attract peole who are susceptible to having more grpahic aids with a musical purpose.
I know, I know. You could now give me the same answer you just gave to Axoman but remember I just wrote this whole stuff because you seem to like the subject anyway.
@brasso I'm afraid that your swiss army knife will never come to life
Sorry, just kidding, it's just that your idea looks to me like the death star to some poor innocent rebel. I'll never embark in such a gigantic odissey.
However, i thought about the fact that ready made shapes could be useful in general, so i'll code some more objects that cover that ground, hoping that users will read instructions.
@axoman sorry if i have been brutal with you, however i have to say something: true, if you want to draw something you can use a pencil, without needing to know how the pencil was made in the first place. However knowing something about the pencil (at least its charateristics) allow you to choose the right tool for your drawing. Play with what you have and get to know it! Trust me, it's time well spent!
Now, check these shapes and tell me if they can be useful, somehow
Ah bugger! Well coming up with such stuff is already fun and I still have high hopes Axoloti will bring me a lot closer to building customized instrument solutions. It surely has a lot of great stuff on board already and if I still insist I'll "only" have to learn to program C myself.
No worries, Sputnki, I know why you did it
All of those would be useful I can imagine, but if you're trying to make function objects that someone like me would fiind especially useful and be able to understand, I think a more generic custom object would be more use. For example, some of those objects have two, and some four things defining them. Why not just create one that lets us specify a curve through inlet levels, so that the levels are interpolated by the object to create the curve we require?
For example, the Parabola you showed could be defined by setting a three-point function object as:
- Inlet 1 to max
- Inlet 2 to 50%
- Inlet 3 to max
That line could be defined using a two-point object:
- Inlet 1 at around 25%
- Inlet 2 at around 75%
Objects could have their mode set to sharp or smooth interpolation. So for example, those knee shapes could be defined using a three-point object with interpolation set to sharp. With the line it would not matter what it was set to because there is no third point to bend it, and with the Parabola and Polynomial, the interpolation would be set to smooth to give us those curves based upon what we set the inlet levels to.
The object could come in various sizes depending on the amount of inlet points they have, so one with 8 inlets would allow a more complex curve than one with just three.
That said, I'm explaining it to you in a manner I would understand it. If all I had to do was set the levels of the various inlets, there is no way I could do it wrong. But if the object required an understanding of special math and function terms in order to use it, then the problem would still be the same, I would not be able to use it.