I really love the plugin grabber, but I’ve noticed a problem with the auto-loop function that I believe could be substantially improved without too much extra hassle.
At the moment, it appears that the function is simply taking the entire rendered sample and dividing it into two equally-sized halves, then cross-fading them together to create a very basic loop. There is no consideration for the note/frequency of the sample itself, or for what a more suitable looping method might be, and so the results are often quite problematic:
Certain notes will clash worse than others due to their frequency in relation to the overall sample length. They all suffer from noticable distortion which in most cases would not be desirable or expected at all.
The sinewave is what I’ll be focusing on for the rest of my post. It’s an A#1 note with a frequency of 29.135Hz, which was grabbed from Arguru Voyager VSTi at 44100Hz, and it has a duration of 1000ms. The reason for the huge loss of volume may not be immediately obvious, but it’s not too difficult to figure out.
Cross-fade looping, the bad way:
Finally, we mix-paste everything back together. The result is a perfect loop!
(The vertical dashed lines represent the newly calculated positions)
So… in conclusion, if we could get an option to enable this alternate loop calculation - where the loop length is calculated to match the frequency of the note being captured - it would be really great! I realise that it’s not going to work in every case or for every person, but for the majority of users I think this will be a huge help.
I guess we could have a complex/basic option for looping.
For complex waves it make no sense to try to find it’s pitch frequency.
Another more important issue is IMO the way we cross-fade this is in the first place.
To minimize the overlapping area, and thus any bad artifacts, the entire loop range should not be cross-faded. Only a small part of the loop range needs to do this (obviously this depends of the length and nature of the sample!).
So it would be optimal if it we could set the cross-fade length manually from 0 to loop-range.
Another useful option would be to set loop-range manually.
Ah, I should have been more clear on this one. I simply mean to use whatever note is triggered in the plugin itself (taking the basenote offset into account as well), not to attempt any kind of frequency analysis. So if you grab a sample for the note A-4, then a frequency of 440Hz would be assumed, regardless if the plugin generated a simple tone, a complex tone, or just pure hellish noise
As I mentioned, this simple approach may not work all the time, but it would work great for the majority of uses I think. I don’t find myself in many situations where the note I trigger in a plugin is not the same note that I hear from it.
Regarding the length of the cross-fading, yes, perhaps this could be adjustable as well. It really depends on what kind of sound you’re using I guess. Some will benefit from a longer, smooth cross-fade, others will not. The way it works now has been working out pretty awesome for me so far, it’s really just the frequency mismatch which causes all the problems. Overall I find that many different sound sources can be looped seamlessly this way if you simply take into account their fundamental frequency.
Either way, more options and more control = happy happy joy joy
I already suggested during the Alpha’s to allow using percentages of the loop-area to use for seamless looping. In most cases 9 to 11% area coverage is enough and one don’t need 50%. This might only be of relevance for e.g. very short samples.
I posted the method of how Extreme Sample converter allows you to do this as an example.
Setting the % myself would be cool. Regardless of what I choose there, it should (optionally) snap the loop range/length to a factor that aligns with the fundamental frequency of the sample as tightly as possible. That’s really the most important thing here for me, since the purpose is to create a sound which is both seamless and continuous in terms of phase.