MorphSynth is a (somewhat experimental) sample generator capable of creating complex waveforms through the combination of morphing oscillators, two operators FM and ring modulation.
You can download the latest version on the tool page.
How to use it:
Right click an empty slot in the instrument list and choose “MorphSynth Instrument…” in the menu.
The first section of the window is for global settings that affect the whole instrument (sample rate, note range).
Next come the voice selector.
The following section is for settings that affect the current voice: volume, panning, etc.
Below that you can choose whether you edit the main audio signal (carrier), the FM modulators, or the Ring Modulator.
Next is the main section, where you can set up the various oscillators shapes of the current voice, and the duration between them.
The last section controls how the voice is looped.
When you’re done with the settings, the “Generate” button will create the samples.
You can layer MorphSynth on an already existing instrument, it should not interfere. For example, it’s possible to have both PadSynth and MorphSynth on the same instrument.
Almost all waveform shapes start at 0 with the default phase, in order to avoid clicks.
Currently, looping is somewhat broken when using pitch modulation.
If you have a very short loop (a few oscillations), you should consider using the 440000 sample rate (not 441000), and a note range based on a “A” note, with a step of 12. This way you’ll avoid truncation errors (which can create unwanted harmonics)
./MorphSynth.lua:191: attempt to index field ‘?’ (a nil value)
./MorphSynth.lua:191: in function ‘generate_one_sample’
./MorphSynth.lua:77: in function ‘generate_samples’
./MorphSynthWindow.lua:86: in function ‘generate_samples’
./MorphSynthWindow.lua:694: in function <./MorphSynthWindow.lua:694>
Great update, this tool is really deep, must admit I’m having a lot of fun with it!
Some feature requests:
It would be cool if it had a live mode where new samples are rendered straightaway after changes are made. This would help with workflow when designing sounds as its a bit annoying to keep having to pressing generate samples for every little tweak.
Copy settings from other voices, for example if I am working on voice 2, I could copy the settings from voice 1 or any of the other 7 voices, useful if I want to create stacked/detuned sounds
Crossfade loop - The looping does sound odd with longer samples, however doing a crossfade loop makes a big difference, maybe this could be integrated into the tool (I have some code for an adjustable crossfade loop if you want it?)
@afta8: an auto-update feature is on my todo list, though it will probably only for a test note, as rendering for full key range can take a lot of time (which reminds me, I need to move sample generation in the background thread). I also need to improve the UI for managing waveforms, a copy/paste feature is a great idea.
I didn’t think about cross-fading the loop, this is probably the best solution, I’ll look into this. If you have some code to do it, I’d love to take a look at it!
@Djeroek: thanks for the bug report. I’ll try to fix this in the next version.
I made a basic crossfade loop feature in this tool, which copies a section of the audio before the loop point; applies a fade in, and then mixes it with the same size portion at the end of the loop which has been faded out.
Send me a PM if you want to discuss it in more detail and i’ll be happy to help. The fades applied in my version are linear which don’t always give the best result because the volume can dip where the crossfade happens, if the fades are curved I think it will sound better… Hope that helps
Thanks, that’s very helpful. I think I’ll add an option for 0-crossing, too.
For cross-fading, I searched on the net which curve to use, the best answer I found is this one. So I guess it’s either a logarithmic curve, or the cosinus based one proposed there.
EDIT: There’s one thing I don’t understand though, if I use logarithmic curves or similar, then the sum of the two cross-faded signal can be greater than 1, introducing distortion. Does this mean I must scale down the whole sample first?
My first thoughts are yes if you do it in the way described in that link. However I was thinking you could do it where the fade in curve is the opposite curve to the fade out curve, this way the sum would never be greater than one. I don’t know how this would sound though.
Also I was curious about how the Renoise built in crossfade worked as this sounds good on your tool when I do it manually, applying it to a square wave gives this result:
So i’m guessing it must be a linear fade, in this case it may be just simpler to apply a linear crossfade and see how it sounds, the simplest solution may be the best one after all.
Note that instruments created with the previous versions won’t load; sorry for the inconvenience.
In this version:
A few important bugs have been fixed. - There is a second FM modulator, with a configurable “FM algorithm”: parallel or serie. - The exponential / logarithmic scale range for the durations has been doubled. - The amount of modulation is now configured in the modulators section, not the carrier section. - The amount of FM modulation (aka “modulation index”) range has been increased to 13.1, which was the value used in the DX synths. I’m not sure what’s the rationale behind it, though. - The FM modulators are now configured with a ratio, rather than an offset in semitones. It’s easier to find “musical” values this way.
I think now the “synthesis” part is good enough, I’ll focus next on improving looping and UI.
I’m moving in a few days so I probably won’t have net access for a while. Hopefully there isn’t to many bugs in this version.
mmm this seems a very very powerful tool, but it is not easy for a noob like me to understand how it works.
I guess that it is completly stupid to use it like a normal synth: what is very hard to understand is the fm modulation part.
I only know subtractive synthesis basis. Can someone post a little tutorial explaining what can be done with this tool? Or maybe posting some good sounds and then explaining how to get that sound!