BobXX
Inspired
[ Part 1 here - Measurements and Info ]
[ Part 2 here - Measurements and Info ]
[ Part 3 here - Measurements and Info ]
[ Part 4 here - Tips & Tricks ]
[ Part 5 here - Tips & Tricks ]
[ Part 6 here - Tips & Tricks - GAP "FILLER": GAPLESS Proof of Concept ] current
NOTE: I hereby release Fractal Audio Systems from any commitment to me concerning the contents/ideas of this post, renouncing all present and future claims in this respect.
6 oct 2023 - IMPORTANT UPDATE:
Version 23.00 public beta 1 announced:
"...Preset, Scene and Channel changes are now gapless."
https://forum.fractalaudio.com/threads/axe-fx-iii-firmware-23-00-public-beta-1.198479/#post-2467451
TIP6:
The "GAP FILLER" - Effective with all blocks
We understood in the previous parts that some block "induces" audio gaps and others increase it.
We also understood that the obvious solution to avoid the gap is:
1) avoid to switch Presets (you'll have a gap from 18ms to 80ms depending on complexity of the preset you are going to load)
2) staying within the same preset, avoid to switch channels of "gap inducing" blocks (see lists in previous parts)
As an alternative, put two/three/four equal BLOCKs in parallel, and switch between them instead. Perfect result...
But I don't like it because I have to use 2/3/4 BLOCKs instead of switching the channels of only 1...
It's not "ecological", blocks aren't countless, CPU isn't unlimited.
In the case of AMPS I have only 2 of them and FM3 users has only 1, so they cannot do it at all.
So I wanted to find an alternative and leave the previous just for the extreme cases.
PROOF OF CONCEPT
I wanted to simulate this somehow... with the limited user's powers to verify this concept.
I have found that a ducked delay could somehow distantly do it, without good cross-fadings, I know... , but I got all the same very interesting results !
Take this test chain, all "gap influencing blocks" have channel switched from Scene 1 to 2. We understood they will increase the gap even if they are inactive.
AMP (but it could be another "gap inducing block" see list in Part 1) is active to induce the gap:
This is the typical result, an audible 80ms gap:
Let's add the final DELAY Block - Digital Stereo type with the following settings:
Set time to 80-120ms (120ms it really the longest gap I ever measured in my AXE FXIII MK2 Turbo),
Set Mix to 100% wet and feedback R and L to 0%
In the Ducker section set Attenuation to 80dB,
Set the Threshold starting from -60/-80db to a maximum of -40db (it's a compromise point, we will see what changes)
and Release Time to its minimum, 1ms:
Check to have a full range response (some delay type have a reduced one):
Only Fractal system know in advance when sound is changing and can predict the gap, cross-fade it and so on...
what we can do with our "user's powers" is detect the total silence (unfortunately afterwards) and then start filling the gap ASAP,
then detect the new coming sound and silence the "filler".
That's what this ducked delay can do in the best case:
BEFORE:
AFTER:
The gap is nearly filled (90%, do to silence detection delay):
Gap becomes really much less audible.
In our simulation there's a problem.
I don't know why, but even if the fade-out is 10ms long (sound takes 10ms to go to zero),
changing Threshold from -30dB to -80db I can expect a difference of less than 10ms... but in reality it changes the activation of the filling from 10ms to 45ms.
I have tried all delays types with similar results:
Apparently this has no sense, but we must also understand that Ducked Delay wasn't designed for this particular use.
We only can detect the perfect silence of the gap (-80db) to activate the filling, in contrast to a real play where there's no tipically a sudden silence like that.
Setting a higher Threshold (e.g. -50dB to -30dB) you will experience a better filling but also cases when it will be activated by simply stop playing. So you will hear a tiny "bounce" in the sound, depending on your chain and playing style.
Adjust Threshold for best compromise.
NOTE: this trick must be applied before delays/reverbs in order to detect the gap silence, otherwise covered by delays/reverbs.
Anyway the concept is confirmed to be a very good compromise. It requires some improvement, if someone wishes to contribute to improve it, I will be happy to add here new details.
On the other side if FAS will implement this concept AF3/FM9/FM3 they can:
It's not a "engineering perfect" solution but IMHO a very good hearing compromise, without doubling CPU for parallel processings.
In any case it can be an option that user can activate or not, accepting its little limitations for IMHO great benefits.
Any contribute will be appreciated.
I'm also courious about results from FM3 users.
[ Part 2 here - Measurements and Info ]
[ Part 3 here - Measurements and Info ]
[ Part 4 here - Tips & Tricks ]
[ Part 5 here - Tips & Tricks ]
[ Part 6 here - Tips & Tricks - GAP "FILLER": GAPLESS Proof of Concept ] current
NOTE: I hereby release Fractal Audio Systems from any commitment to me concerning the contents/ideas of this post, renouncing all present and future claims in this respect.
6 oct 2023 - IMPORTANT UPDATE:
Version 23.00 public beta 1 announced:
"...Preset, Scene and Channel changes are now gapless."
https://forum.fractalaudio.com/threads/axe-fx-iii-firmware-23-00-public-beta-1.198479/#post-2467451
TIP6:
The "GAP FILLER" - Effective with all blocks
This post is for the cases that cannot be solved with the other solutions proposed and stimulate a discussion about two concept ideas to eliminate gaps in general.We understood in the previous parts that some block "induces" audio gaps and others increase it.
We also understood that the obvious solution to avoid the gap is:
1) avoid to switch Presets (you'll have a gap from 18ms to 80ms depending on complexity of the preset you are going to load)
2) staying within the same preset, avoid to switch channels of "gap inducing" blocks (see lists in previous parts)
As an alternative, put two/three/four equal BLOCKs in parallel, and switch between them instead. Perfect result...
But I don't like it because I have to use 2/3/4 BLOCKs instead of switching the channels of only 1...
It's not "ecological", blocks aren't countless, CPU isn't unlimited.
In the case of AMPS I have only 2 of them and FM3 users has only 1, so they cannot do it at all.
So I wanted to find an alternative and leave the previous just for the extreme cases.
CONCEPT 1 - Preload of Preferred Blocks/channels (can someone tell if it is realistic ?):
Imagining being a Fractal engineer (and I know, I am NOT, no need you to underline that I'm ignorant of inner HW/SW algorithms... blabla) I thought about a user selectable preloading of "preferred Block/channel" consuming more CPU but being more rapidly actionable reducing the gap.
This could be a smart use of left available CPU power.
But this is something out of my reach and not sure whether is feasible or not.
CONCEPT 2 - The GAP FILLER
Theoretically feasible for Fractal even when SWITCHING PRESETs !:
Imagining again being a Fractal engineer I thought about continuously store last last ~120ms in a buffer of the main outputs sound and of all active "gap inducing" blocks' output (120ms is the maximum gap I ever measured, but it could be frequently shorter),
with a LIFO logic (Last In First Out), always running as a complete indipendent "system block".
It will use very few CPU resources, and eventually could be an option that user's can activate or not.
As I had demostrated:
1) we know exactly when there will be a gap switching scenes + there's always a gap switching presets
2) we can even estimate its amount (see previous parts)
So I'm pretty sure the system knows it too, in facts it already manages a fade-out of sound and a rapid fade-in for the next sound switched (see 2nd image below).
The concept is:
instead of the fade-out => gap => fade-in,
- do a cross-fade of current sound with the bufferized sound (last XXXms of itself)
- it will play all along the gap, filling it,
- then cross-fade it with the new sound selected
The system can perfectly cross-fade those audio material because it has the timing control of everything, reducing any artifacts to the minimum.
In any case in 99% of cases they will be much much less audible than a total silent gap.
PROOF OF CONCEPT
I wanted to simulate this somehow... with the limited user's powers to verify this concept.
I have found that a ducked delay could somehow distantly do it, without good cross-fadings, I know... , but I got all the same very interesting results !
Take this test chain, all "gap influencing blocks" have channel switched from Scene 1 to 2. We understood they will increase the gap even if they are inactive.
AMP (but it could be another "gap inducing block" see list in Part 1) is active to induce the gap:
This is the typical result, an audible 80ms gap:
Let's add the final DELAY Block - Digital Stereo type with the following settings:
Set time to 80-120ms (120ms it really the longest gap I ever measured in my AXE FXIII MK2 Turbo),
==> I cannot test it with FM9/FM3 so I will be happy if someone will do for me. (Soon I will receive an FM9 Turbo to check it)
Set Mix to 100% wet and feedback R and L to 0%
In the Ducker section set Attenuation to 80dB,
Set the Threshold starting from -60/-80db to a maximum of -40db (it's a compromise point, we will see what changes)
and Release Time to its minimum, 1ms:
Check to have a full range response (some delay type have a reduced one):
Only Fractal system know in advance when sound is changing and can predict the gap, cross-fade it and so on...
what we can do with our "user's powers" is detect the total silence (unfortunately afterwards) and then start filling the gap ASAP,
then detect the new coming sound and silence the "filler".
That's what this ducked delay can do in the best case:
BEFORE:
AFTER:
The gap is nearly filled (90%, do to silence detection delay):
Gap becomes really much less audible.
In our simulation there's a problem.
I don't know why, but even if the fade-out is 10ms long (sound takes 10ms to go to zero),
changing Threshold from -30dB to -80db I can expect a difference of less than 10ms... but in reality it changes the activation of the filling from 10ms to 45ms.
I have tried all delays types with similar results:
Apparently this has no sense, but we must also understand that Ducked Delay wasn't designed for this particular use.
We only can detect the perfect silence of the gap (-80db) to activate the filling, in contrast to a real play where there's no tipically a sudden silence like that.
Setting a higher Threshold (e.g. -50dB to -30dB) you will experience a better filling but also cases when it will be activated by simply stop playing. So you will hear a tiny "bounce" in the sound, depending on your chain and playing style.
Adjust Threshold for best compromise.
NOTE: this trick must be applied before delays/reverbs in order to detect the gap silence, otherwise covered by delays/reverbs.
Anyway the concept is confirmed to be a very good compromise. It requires some improvement, if someone wishes to contribute to improve it, I will be happy to add here new details.
On the other side if FAS will implement this concept AF3/FM9/FM3 they can:
1) perfectly cross-fade original material and the "filling",
cross-fading time could even be user adjustable (sudden...smooth) depending on users' needs
2) the result will be 100% GAPLESS
3) the artifacts will be reduced to the minimum, rare, and much much much better than a complete silent gap
4) could be possibly applied also for PRESET SWITCHING !
5) very low CPU use (just short term buffers)
It's not a "engineering perfect" solution but IMHO a very good hearing compromise, without doubling CPU for parallel processings.
In any case it can be an option that user can activate or not, accepting its little limitations for IMHO great benefits.
Any contribute will be appreciated.
I'm also courious about results from FM3 users.
Attachments
Last edited: