Max/Msp native synth PartII: building it
For everyone who wants to follow this thread,please note that part one is called Max/Msp native synth.
I am sure this will be interesting and I hope that there are going to be many good ideas which will lead to the synth patch.
so I was wondering if Hans, Matt, Roman, et. al. had taken a look here:
That synth seems like a pretty good example or starting-point?
Wondering what people’s criticisms and likes of it are?
This is the kind of synth I’m not keen on (neverland synth). Its obviously quite accomplished but FM with a load of reverb isn’t my cup of tea. I guess if you need this sound you can just pick it apart.
What were we looking at doing? Some kind of modular thing? An Absynth copy? I guess High quality waveforms to begin with, some stereo jazz, pitch drift (I like this but I imagine some don’t), Waveshaping?
@Mike and everyone who asks what are we looking at doing. (My current view)
building or using an FM synth is not what is wanted. Also, an Absynth copy is not needed. Absynth is a very elegant DSP architecture which has a lot to offer. A sound source module, a filter unit and a modulation unit are the essence of it. Midi interface, LFO’s, envelope control over 3 oscillators.
Shortcomings in my opinion of Absynth are the small number of oscillators, after contacting Brian Clevinger the creator of it, I learned that there are in fact 48 oscillators but they are not controllable. They are discrete generating some kind of harmonics if you want that. That’s why Absynth is not a tool for composition but for sound design.
It is interesting to look at the design of the ‘sound source module’. It is for example possible to turn it into an audio input and use filter and modulation moduls as effects processors. Also, apart from all standard waveforms you can customise waveforms and you can load samples as .wav files. So you have live audio input, wavetables and samples.
If Mike or anyone interested has some killer DSP app I am sure there are open arms to embrace it. It has to be explained. I do not know what stereo jazz is.
I worked with the UPIC system and it has 64 controllable osc. From my experience with it, I can say that even 64 osc can be limiting when you compose music. Max is our limit and it needs a native synth which can be included in building apps under Max. It is not possible to include VST instruments inside a Max app.
I was hopeful that this thread would find attention by some veteran Max users to say what they think about the current possibilities building a synth but so far there is no input from there. Maybe it will come.
Thank you for everyone so far for your thoughts and patches. I hope it will go on.
There may well have to be a "Max Native Synth Part III" thread, as it seems the design concept is not yet formulated in this one. After closely following the two related threads, can I suggest that a broad design concept and scope is first established. The ‘build it’ thread can then be used to address issues of DSP economy, GUI etc. A critique of the 2 synths mentioned above is a good place to start.
Perhaps a shopping list of requirements might inspire us too:
user-defined wave shapes including user samples and quantity;
fixed but selectable synthesis algorithms (granular, AM, FM…);
user-defined LFO shapes and quantity;
LP, BP HP, notch etc;
freely assignable modulation algorithms;
blah blah blah……..
"What were we looking at doing?"
we didn’t really agree on specifics.
i’m thinking(since many of us have so many other things to do), maybe we could all split up, and just post our own version of synths here(anything). then, we can all post back(or start new threads) versions of what others have posted… and can do so whenever we are able to get it done rather than relying on me or anyone to start it up with a patch that maybe no one else will like or find useful since we all have our own individual ideas of what makes a good synth… and that would also allow for more information and solutions/techniques to become available. people will be able to pick and choose.
anyways, attached here is a synth i cobbled together in the last day or so. i decided i like NI’s Massive(a synth with real balls, hehe ;) so although this doesn’t even come close, i was actually keeping Massive in mind as i built it and will keep at it over the long term…
it’s just a start, but it’s all i can contribute for right now(must get on with other things and hopefully return to this after others have posted their own or tweaked it out, etc.) there are also many things that need improving(bandlimited hi-quality wavs, upsampling, dithering, filters, compression, distortion, better initialization protocols, better UI for MIDI routing, better UI in general, and so much more…)… but it’s a good start(at least to me it is).
i used stuff i’ve learned from others like Vlad Spears, Jack A Perkins, Les Stuck, Luke Dubois, and so many others…
many ideas also appeared in Mike S’s ‘commercial synthesis techniques’ thread:
i also added AudioMatt’s JS drag and drop to allow for drag and drop routing of LFO…
anyways, ‘thank you’ to All! hope you like… have fun!
When it comes to DSP coding for efficiency and power I usually start to feel out of my depth. I can build these things but not well. Usually that’s ok because it is just me using the patch and I know where the patch is kind of hanging and don’t do that or else this happens. I would be embarrassed to put up patches when I see the strength and elegance of some patches. Mine are usually kludges from the ground up. :)
I did get inspired though and built a simple little thing that has lots of filter slopes, a few allpass~ here and there to taste, a little fluctuation, bits of tanh~ and some distortion and basically just messed about trying to get it to sound nice. It turned out to be a cheap and nasty little monosynth that looks like good fun to use with a touchscreen. It doesn’t sound fantastic but its not dead. It doesn’t have a lot of functionality but it has enough to be fun and get a few ideas going. Next up is to make it polyphonic, add a sequencer that spits out chords or notes and start messing with Hilbert~ which sounds like a decent ringmod.
I am sorry I cannot contribute but I watch with eagerness and I am patching away kludge after kludge.
OK just had a play with the synth
I’d like to see seperate waveform objects for each waveform, actually most of my criticism would be aimed at the UI and I’m happy to volunteer to work on it. Not quite sure about this drag routing thing, wouldn’t matrix control be easier and also show your routing once you’ve done it? Detuning doesn’t seem to work for me.
I would like to see a slower more methodical approach to the synth. What you have done is built a pretty good synth that now has to be deconstructed. It is a bit painful to have to trace where everything is going, comments would be good, and you may think this a bit picky but I find your Max object colour scheme very difficult to look at – I could not work on the patch without changing the colours.
Aside from the criticism I think it sounds good, I like the smoothing and I like phase offsets.
yes, all sounds good! i’d be interested to see whatever changes anyone makes…
i think i also made the UI more about dynamic routing than it needed to be(maybe i got too obsessed with saving on space)…
The drag routing makes more sense later(if you play with Massive, you’ll see why it’s useful)… having separate poly~s for the LFOs and ADSRs(eventually), the drag-routing will make it quick to throw mappings around(not just LFO to synth but any modulation source to any parameter …but yes, need to work on a status indicator to show when an LFO/ADSR/Mod-source is attached to a synth or any other parameter…)
(oh and about the detune, this is working for me but i think it is the UI that makes it difficult to use/understand(you have to choose the synth to which the detune will apply first(one or two), then apply it, then when you click a noteon/noteoff on that particular synth, you should hear it) definitely could use a whole UI do-over)
and although i think color is a subjective choice(i feel like i might drop into seizures when i see bright colors of max help files, and i feel more intimate with my instrument when the UI has a darker/colder color scheme as if, to me and probably only me, UI design is very much tied to mood lighting ;), of course you should change it to whatever you want as it’s good to see other’s tastes, to get a more wholistic sense of UI/design.
nothing writ in stone, so have a go and obliterate it if you need to.
[EDIT: @grizzle, you need never be embarassed to post any patches, i appreciate posted patches no matter what(they are always better than words, haha)... but i understand the reservation as I often have the same for the same exact reasons.]
i got one error…
js: no function resetdrags
but seems to have no problem running though…
it’s a really nice synth. really nice design and sounds great too.
i’m trying to build one myself and this keyboard part is something i was trying to build but gave up. it’s so nice to see someone smarter just does it.
but for the overall concept, i had something different in my mind. i thought by native synth it meant something along the line of [cycle~] or [techno~], you know, some sort of max patch abstractions with midi inlets and audio outlets that you can use in your own projects. i thought that’s when the augment of building an external instead came in… it’s an open patch so maybe it shouldn’t be so hard to convert it to abstraction though…
anyway it’s really nice work and thank you, Noob4Life!
I am very pleased to see that you got this out of the ground so quickly. That’s a very good start and I hope you will find time to develop. I would like to see midi input audio output too. That way it can be integrated and is portable.
Nice work Noob4Life
holy crap… I’m behind. I’ll try and go over all this this weekend! MAN
no worries, i just posted what i had time to do while i had time to do it… we can all take our time, i think…
@Hans and mesa.elech/tele
yes, MIDI inlets and audio outlets(basically, turning this into a reusable abstraction) is definitely where it should go. this is just the skeleton(in fact, there are many things which i put only for development like the presentation/patching mode switcher(hidden ubutton triggering thispatcher messages) and perhaps even the 2 UI keyboards since you could just as easily swap those out for a sequencer UI and real-MIDI/keyboard input).
hopefully, it’s easy for people to alter/add and if you post your mod here, people can keep adding to it(no matter how small or big the mod is).
whatever anyone thinks of, they should add it so the rest of us can see your vision and learn from your ideas(i just posted a skeleton to help with communal development of the idea).
okay, here is my contribution.
it is kinda rough and lots of room for improvement.
i rarely use [poly~] so i really have to look into it more…
but for now, this is the best i can do.
open up neverlander_overview.mxt to see the general ideas.
my selling point for this is that you can click on the field in the abstraction to get a steady state and drag the dot to get morphing effect.
wow, that is some great interface usage! And the sound-capabilities are extremely rich… going to study it a bit…
Thanks so much for sharing this!
that is a very advanced way of programming under Max for me. Thank you for the lesson. It is a wonderful synth patch. I did not know it was possible.
This is stunning. A shining paradigm of the interface and capabilities this thread is pursuing.
Aus. Ge. Zeich. Net.
mesa, that is a f$%^ing amazing idea.
AudioMatt said it better than I did
I played with it for a few hours. Can we look inside? Can we control the filter,envelope and the osc from the outside?
open nvrl_osc~.mxt, or nvrl_delay~.mxt to see inside
well, I can double click on nvrl_osc to open the window but I would like to look inside the nvrl patch which in my case is locked.
In Max go File/Open and browse to the folder where you put all the neverland abstractions; open any of the nvrl_*** files as a new patch.
open them from the finder/explorer window rather than from inside the main patch and you can edit them
doh! you beat me to it
here is a fully featured polyphonic synth i made:
It uses phase distortion synthesis and is roughly modelled on a casio CZ101. It sounds better at 96K sample rate.
It isn’t too bad on the CPU. The UI was done super quickly and is purely functional. Occasionally you may get stuck notes. Choose your MIDI input first from the dropdown above the keyboard.
oh man, this is incredible, Oli. Thank you so much for posting this. I am going to keep looking at the innards later, right now, having too much fun just playing it(so much to work with… truly beautiful).
Thanks for the post oli. I have looked at your site and find it a wonderful idea to continue working on pluggo kind of stuff. I work on a composition at the moment and pluggo helped me out many times.
Regarding your synth, I will play it as soon as possible.
I start being very happy about the contributions made to this thread. Thank you all of you who follow this up.
I give up. stupid mtof~ stupid stupid!!!!
Anyway here’s the idea. Note that those super expensive mtof~ objects are in the oscillator so if we were to use the routing matrix idea to write a generic synth, it would be a lot cheaper.
Not touching the java vs C thing with a ten food pole.
oli that thing is frickn amazing. hats off!
Your work looks amazing!!
I have a problem, I can’t find the object "Ltag" or "ltag" (not even in my Lobjects versions.)
Where can I find It? It would be possible to attach it here?
thanks a lot for sharing!
ps: I went to check it here but I didn’t find it :
10.40 at Paris. With two coffecups a "bit" better awake, ha, ha!!
looks great AudioMatt. this is one patch, though, where I need an external MIDI keyboard to test out right away(or at least it seems that way and mine just broke), plus i need to figure out some missing L object errors I’m getting, but the UI shows some great features…. hopefully, i can find the time to figure these things out and get a new MIDI controller… will post back once i do about the sounds, etc. Thanks so much for your contribution!
Yeah.. the sounds aren’t amazing. the main point is the matrix. the LTag object is included in the second post. (it’s a replacement for the ltag from lobjects which was taken out of the library somehow)
As for a midi controller, the kslider object works but doesn’t really do it justice. If you want, just open it up and hook up some stochastic stuff to it. the top patch is very simple.
My bad, i thought because i got the error, "ladd: no such object"(it’s not attached in your second patch, either) that the keyboard slider wouldn’t work and also i’m on a comp with a smaller screen res so i couldn’t see the keyboard at first, but now i see the ladd object isn’t even necessary.
just took some more tinkering with on my part, that’s all…
sounds are very diverse and flexible! great work! this is a good outline of a full-featured synth. thanks again for sharing it!
thanks for the post. I installed it, but have a request for a password. Where do I get it from?
I have played around with your synth for a while and I wanted to ask you if you control your nvrl patches externaly using something like the lemur?
It seems that it is very well suited for this kind of control. Do you happen to have a panner. It would make a nice effect and could be well controled.
i don’t own lemur or any type of hardware controllers…
also touchosc on iPhone or iPad would be a nice controller for this project.
i’m working on updates on my stuff to be [bpatcher] friendly as well…
you might have seen it but in case not, here is a threat talking about external controler
I pened your filter patch to see how I could control it numerically, but I did not figure it out. Would we have to send two figures to give a x and y co-ordinate?
Well, I have the feeling that building a synth under Max is adventurious. I was hoping for some more experts to comment on this matter but most of the long time maxers are not taking this matter on at all.
Where do we go from here?
* Alex harker and I have independantly come to the conclusion that a lot of the CPU usage seems to com from the mtof~ objects. The only cheaper method I can find is preloading a buffer with a note2frequency table and interpolating.
* I think if I take my patch and put thef filter after the oscilator, we’ll have the seed of what we’re looking for. I’m not totally convinced that we can pull off a virus but a subtractor might be doable!
* right now I’ve got too much personal stuff to deal with but in a few weeks i could give it a shot. My patch is simple enough that you could try it yourself. If you want a help file for my matrixrouong object I can make one.
here is my updated version…
this time i tried bpatcher, which kind looks and feels better.
also there is a standalone version of the x-y controller.
once again, open up neverlander_overview.mxt to see the general ideas.
the new version has x-y input. also you can simply use [biquad~] and [filtergraph~] with [nvrl_ctrl] if you have specific things you want to add inbetween and after.
and here are my suggestions where to go…
* there should be a clear goal or specific desired detail provided by someone, (probably Hans would be the best candidate) because after Noob4Life’s synth and that Kasio synth, there seems very little that you can add. if you want to see more of absynth-like features, i’d like to know more about.
* compliments always feel good and peaceful, but a little criticism here and there won’t hurt and maybe helps this thread grow. i think one of the reasons the previous thread got so many attentions was someone was going at someone else and maybe this thread needs that type of energy…
thank you very much for the new input!I will play with it later today.
What I found particular succesful is the use of the biquad filter.
You are asking for more information on the architechture and I would like to say that I already look at this project as doing well on evolution.
One important goal is already achived, a midi controlled synth. I am still waiting for AudioMatt’s next contribution. I am sure it will get very close to a functional synth.
I consider your approach mesa to lead already into the development of a ‘multi purpous’ instrument. It is you interface that makes the difference. As I pointed out in my last mail addressed to you, it could be build to become a live instrument controlled by external controller. Did you see this video?
Of course a drawback is that one needs to buy a controller….
One other interesting architechture I came across is the ArtMatic visual synth. Particulary the possibility to ‘randomly change modul settings’ I found powerful. If you do not know it, please download a demo version and read the first 20 pages of the tutorial. I hope you have a second monitor for the manual.
Generally, we will have to decide what kind of control to apply. As you might guess by now, I think a mouse driven graphical interface is the most efficient way. If you build lots of graphical interfaces I think you should control them externally.
Please give me your feedback on the above.
sent you an email…
fantastik looks, well, fantastic ;)
i wonder if it can take [lcd] though.
and iPad may not be a bad investment for an external controller.
i’m going through the ArtMatic manual right now.
it’s an interesting visual software.
i have played with their metasynth before, which was really full of craziness (in excellent ways).
and you are right. randomization is something we haven’t yet touched.
let’s see what we can do…
Whats inside the patch (p lcd)
in the delay patch??