Does this have a name?


#1

I need to try my hand at something, but I don't know the proper name for it, or whether it has a proper name.
You'll have to excuse the layman terminology used here, but I'll do my best to make it clear.

Imagine a four octave keyboard, and printed directly above it is a diagram of a standard ADSR envelope. It's printed so that the start of the attack is placed above the first key, and the end of the release is directly above the last key. If you're following me correctly, you should be visualising the image of just a single envelope spanning the whole keyboard.

Right, so now I want to be able to adjust, say, the volume of the oscillator or maybe the cutoff of the filter, but I want the levels to be dictated by the envelope you're visualising. The envelope obviously changes across the entire keyboard, so basically, I want that to be reflected in the settings of whatever I decide to have effected.

Just guessing, I suppose it might be classed as a tracking system (like filter tracking across the keyboard), but even if it is, what I'm wanting is not linear, it varies over the entire keyboard. So my question is, what's it called that I'm trying to do here, and what would be the most layman way to achieve it using the factory objects?

Any patches out there demonstrating it?


#2

BTW, the envelope shape is just an example, I wish to use any shape or curve I wish.
So it's more the way it works I'm trying to get at.


#3

It's called function: https://en.wikipedia.org/wiki/Function_(mathematics), and it's as generic as it seems.

You can achieve a linear mapping (like y = mx + q) in a very simple way using just a few objects: linfun.axp (3.5 KB)

You can input a pitch (that you get from a midi/in/ object, for example ) and get an output accordingly.

There are a lot of functions already implemented (well, actually most objects are functions, actually): you can find them in the math folder (like math/sin, math/cos, math/log, math/exp, math/sqrt), but also in conv (conv/unipolar2bipolar or bipolar2unipolar are really important functions).
conv/mtof is normally used for driving linear oscillators, but that's a function too.

You can also use tables as functions (remember that they only accept a positive input, however) with table/read and table/read interp. I used this approach in one of my objects: sptnk/filter/vowel (if you open it you will find three table/allocate 32b 16sliders with curious shapes. I did not come to those shapes casually :slight_smile: )

I suggest you to search in the object library (both factory & contrib), as there are really a lot of objects that might fit your needs


#4

Thanks a lot, Sputnki :wink:

The good thing is I understand the patch (and thanks for the ready made version), but the bad thing is math was never a strong point of mine. Looking at that patch and the sort of objects you make though, you are likely the most ideal person to ask what I'm about to ask.

Check the image at this link:
Function Image

Bearing in mind I'm talking layman terms here, does any software exist so that I can just draw a curve and the software runs analysis over it to create a one-line function as shown in the image? The idea being that (if such a thing exists), there might be an object in Axoloti that would then allow me to copy/paste the function directly into the object?

Basically, an Axoloti object that contains a text field where I could paste the function generated by the software that was used to draw the curve?


#5

Hi Axoman.

What a coincidence. Awaiting the moment that I'll have my own Axoloti I am writing a short paper about something that seems to go in a very similar direction, although I am thinking more of using faders as the actual means to create shapes.

I can alas not help you with the software but maybe I can help you to make your idea more concrete.

This is how I understand your question: You would basicilly want to use all the keys on a 4 octave keyboard as the starting points for creating envelopes. If so you are basically thinking about using the keybaord a spart of an input device to create a stafe-diagram. I assume that you would want to press a key and then program an accompanying level / number. If all keys are then set up as the input points on such a graph a graph, on say the x-axis, every next key from left to right would then represent the X value of another 2D coordinate. The actual levels you program woudl then be the accompanyign points on the Y-axis. Keeping ths stafe diagram analogy upright the Y-value would then determine the height of each stafe.

The Crumar GDS / DKI Synergy actually had such a function to define the settings of a filter table with which one could then more or less EQ the whole keybaord per key. I say EQ intentionally because the filters where simple and the whoel setup thus worked more similar to a graphic equaliser. There for instance was no resonance parameter so in practice it was much more meant for very fine KEYBOARD TRACKING CURVE control purposes. One did not chose a simple curve for the whoel keyboard or a part of it as on many other synhts but could actually adjust the curve setting per individual key.

The disadvantage was that this was then taken care of in the DKI Synergy with an actual table. So you manually have to fill in a number for the setting for every key in a table on the screen (assuming you had the fully programmble Synergy 2+, a Kaypro computer and the right software). Cumbersome!

The direction I am thinking in has an even closer parallel in the Crumar GDS, the mighty forefather of the Synergy. On the GDS' controller surface there was a row of 16 faders. You could use these faders to literaly draw the shapes of the envelopes for the volumes per individual oscillator. In the end you where of course doing the same, just filling in a table, but in this case you could do it very naturally with the positions of the faders giving a direct visual feedback for the envelopes shape.

There is no regular term for this but I'd call it somehting like GRAPHIC ENVELOPE MODELING.

Another interesting synthesizer (that did however not reach the market) was the Bielfuss Step Synthesizer. It could even use such a setup to draw the actual waveforms. See this vid:

My idea is to use such a system to create a sort of general modulation tool that can be used as an EG but also as an LFO or even a simple sequencer. I would however use the faders on a MIDI USB faderbox for setup purposes, agian to avoid having to feed in individual values.

Is that about the core of what you are thinking about?

High level thinking but no programming skills, eh?

Marc


#6

Hoping to shed some light over maths:

there are two big groups of functions:

1) analytical functions (functions that have name and surname, that are defined by relationships of various kinds)
2) arbitrary functions (a squiggly line drawn on a piece of paper)

Some of the functions of the first group (a very small group, actually) can be ported easily from a project to a program. It's the case of the linear functions, which only scale or translate numbers, or polynomials (think of parabolas, for example).
Some other analytical functions can be worked around and approximated in some regions, but you must do this when designing the program.

If you, on the other hand, have an arbitrary function it's most likely not possible to find a reasonable approximation, unless the curve you draw is really regular (however the least squares method is not implemented on axoloti yet, and i'm fairly confident that nobody will ever take the hassle :grin: )

The only open road in this case is the table approach. Not really bad, since tables are already used in most microcontrollers to calculate trigonometric functions.
Problem: how squiggly is the curve you want to draw?

In the first case you could use table/alloc 32b sliders and (with some patience) draw something that resembles the curve.
In the second case you'd have no other choice than loading the table from a file or defining it in the init code (but that requires math & programming skills)

Another option could be to implement some kind of etch-a-sketch on axoloti with table/write and some knobs... But that's up to you :wink:


#7

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.


#8

@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 :stuck_out_tongue:

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 :grin:

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.


#9

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


#10

@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!


#11

@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 :yum:

@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 :relaxed:


#12

???? I have actually mentioned nothing in this thread concerning physical modeling!


#13

Okay, here you have it: linfun2.axp (10.2 KB)
It's done with basic objects and a minimum of clever patching.


#14

..just did this:

WAVE CREATOR


#15

@brasso
I said it in case my mentioning physical modeling was shaping what you thought I was getting at :grin:

@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 :sunglasses:

@rbrt
Sounds interesting, will definitely be checking that one out :slight_smile:


#16

@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 :blush:


#17

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.


#18

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.


#19

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 :wink:


#20

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. :slight_smile:

Marc