./MorphSynth.lua:191: attempt to index field ‘?’ (a nil value)
stack traceback:
./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>
Please note that you won’t be able to load instruments created with the previous version; sorry for the inconvenience.
3703
Each voice now has three sections: one for the carrier (the main audio signal), one for the ring modulator, and one for the FM modulator. The two modulators can be as complex as you wish.
The “S&H” (sample and hold) parameter does something similar to the LoFiMat renoise effect, except the rate is always proportional to the current note frequency.
Note that looping is not always seamless when using modulation, I’m not sure if this is fixable.
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?)
got this notice after saving an instrument in Renoise, loading another .xrni in an empty instrument slot while having the gui still open and pressing generate in your tool:
@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:
3707
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.
@Djeroek: I guess it happened after clicking on one of the parameters value field? All these value fields are very buggy at the moment, I really need to fix that. Thanks for the bug report.
@2 daze j: Yes, previous samples will continue to play. It’s just you won’t be able to edit them with MorphSynth.
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!
Would love to see this in R3 as well. For me this wasthe most versatile and creative “toolsynth”, and an amazing tool for creating unique samples (not the least drums.). I miss it.
A very very quick hack of mine if you would like to try this version for R3. I’ve taken the delete samples call out (so you’ll have to do this manually with this), but you might be able to get some noise out of it now folks