Log in

View Full Version : Avisynth+ plugin modernization efforts


Pages : 1 2 3 4 5 6 [7] 8

tormento
13th March 2021, 14:27
Methinks, Hungarian, igan ?.
Ferenc Pinterf was born in Italy (Alassio) from Hungarian father and Italian mother.

He worked the greatest part of his life in Italy as painter and designer.

Curiosity for italian readers: se avete in casa un giallo Mondadori, con ogni probabilità la copertina l'ha disegnata lui :)

ChaosKing
13th March 2021, 14:31
Just look at his gtithub page...

StainlessS
13th March 2021, 14:34
Uhm... HQDN3D? Is that the one from HDRCore, so 16bit interleaved only?
I've only ever used the 8 bit hqdn3d.dll.

Ferenc Pinterf was born in Italy (Alassio) from Hungarian father and Italian mother. He worked the greatest parto of his life in Italy as painter and designer.
Damn, and he's still got oodles of time for avisynth.

EDIT:
I think P said somewhere that he/she/they/it is Hungarian :)

tormento
13th March 2021, 14:35
Damn, and he's still got oodles of time for avisynth.
I am talking about the original one :p

StainlessS
13th March 2021, 14:38
P is the real original [not an imposter].

EDIT: Or maybe "Avisynth Imposter" :)

EDIT: Just look at his gtithub page...
Yeah thats where I musta seen it. [ https://github.com/pinterf ]

Hungarian is a pretty safe guess.
I'm more into Tiddlywinks than Football.
https://www.youtube.com/watch?v=t_UIukfzPXo

FranceBB
13th March 2021, 15:57
I've only ever used the 8 bit hqdn3d.dll.

I double checked, yes, the original version was yv12 8bit planar only and what's worse is that I can't really find the 4:2:0 16bit interleaved modded version, but I used to have it somewhere, I swear... I just don't remember who made it years ago... :(
But anyway, I guess this is yet another plugin to add on the list of those that need to be updated in the future...

real.finder
13th March 2021, 17:12
what's worse is that I can't really find the 4:2:0 16bit interleaved modded version, but I used to have it somewhere, I swear... I just don't remember who made it years ago... :(
But anyway, I guess this is yet another plugin to add on the list of those that need to be updated in the future...

it is Hqdn3dY http://avisynth.nl/index.php/Hqdn3dY

FranceBB
13th March 2021, 18:22
it is Hqdn3dY http://avisynth.nl/index.php/Hqdn3dY

Ah, yes! There it is! :)

pinterf
13th March 2021, 18:38
I'm sure I'm bad at painting :)

Arx1meD
18th March 2021, 20:44
pinterf, thanks again for Convolution3D.
After many hours of testing, everything works fine. But I noticed strange behavior of the filter when changing scenes in the movie. In the last frame of the scene, the color of parts of the objects changes. And for moving objects too. The original version of the filter does the same, but not as much as the new version. To fix this, I turned off chroma processing (t_cthresh=0).

Here's an example:
https://thumbs2.imgbox.com/97/7f/yQr0gbyu_t.png (https://imgbox.com/yQr0gbyu) https://thumbs2.imgbox.com/03/34/E0i6SLPc_t.png (https://imgbox.com/E0i6SLPc)

kedautinh12
15th April 2021, 04:34
asd-g was port from vapoursynth degrain median: https://github.com/Asd-g/AviSynth-vsDeGrainMedian

real.finder
15th April 2021, 04:53
I did update

another update (note the colors)
ok, so I will mention what not has HBD yet

1st is plugins that has VS ports with HBD:-
1 - EEDI3 (https://github.com/pinterf/EEDI3) (no HBD yet (https://github.com/HomeOfVapourSynthEvolution/VapourSynth-EEDI3))
2 - Dither_resize16/fmtconv (no yet) here https://github.com/EleonoreMizo/fmtconv the vs port
3 - SangNom2/SangNomMod (done by Asd (https://github.com/Asd-g/AviSynth-SangNom2))
4 - TTempSmooth (done by Asd (https://github.com/Asd-g/AviSynth-vsTTempSmooth))
5 - EEDI2 (done by Asd (https://github.com/Asd-g/AviSynth-EEDI2))
6 - TCanny (there are TCannymod by chikuzen but I think with no HBD) (done by Asd (https://github.com/Asd-g/AviSynth-vsTCanny))
7 - Yadifmod (there are Yadifmod2 by chikuzen with not completed HBD) (done by Asd (https://github.com/Asd-g/yadifmod2))
8 - DeblockPP7 (done by Asd (https://github.com/Asd-g/AviSynth-vsDeblockPP7))
9 - median (not yet) here https://github.com/dubhater/vapoursynth-median the VS port
10 - tbilateral (done by Asd (https://github.com/Asd-g/AviSynth-vsTBilateral))
11 - tedgemask (done by Asd (https://github.com/Asd-g/AviSynth-vsTEdgeMask))
12 - MSmooth (done by Asd (https://github.com/Asd-g/AviSynth-vsMSmooth))
13 - ASharp (done by Asd (https://github.com/Asd-g/AviSynth-ASharp))
14 - degrainmedian (done by Asd (https://github.com/Asd-g/AviSynth-vsDeGrainMedian))
15 - TDeint (done by pinterf (https://github.com/pinterf/TIVTC))

plugins that has VS ports but no HBD:-
1 - scxvid (there are no x64 in avs yet)
2 - hqdn3d (there are avs port but with 16bit hack) (done by Asd (https://github.com/Asd-g/AviSynth-hqdn3d))
3 - ssiq (there are no x64 in avs yet)

and there are some filters seems has no VS ports

1 - VariableBlur (it was planed by tp7 (https://forum.doom9.org/showthread.php?p=1658610&highlight=VariableBlur#post1658610))
2 - frfun7 (useful for Dot Crawl Removal, used in DDComb)
3 - GradFun2db (maybe it can be replaced with f3kdb?)
4 - LGhost (HolyWu Recently did the VS port, avs+ done by Asd (https://github.com/Asd-g/AviSynthPlus-vsLGhost))

tormento
15th April 2021, 09:54
another update
Thanks!

Shouldn't you include dither? It's AVS25 plus lot of limitations.

real.finder
15th April 2021, 10:41
Thanks!

Shouldn't you include dither? It's AVS25 plus lot of limitations.

well, most dither things can done in another plugins, that why I only mentioned fmtconv which is kinda vs dithertools port, maybe the only one that left in dithertools is SmoothGrad which can also replace GradFun2db as I did MCTemporalDenoise/GradFun2DBmod

real.finder
30th April 2021, 02:28
Shouldn't you include dither? It's AVS25 plus lot of limitations.

well, most dither things can done in another plugins, that why I only mentioned fmtconv which is kinda vs dithertools port, maybe the only one that left in dithertools is SmoothGrad which can also replace GradFun2db as I did MCTemporalDenoise/GradFun2DBmod

seems I forget box_filter16 in dithertools I think we need someone port this from vapoursynth https://github.com/vapoursynth/vapoursynth/blob/db25018fafef612185f79f0f86164430b0bbf6f6/src/core/boxblurfilter.cpp

mp3dom
1st May 2021, 13:34
I know it may sound weird, but were (old) plugins like TelecideHints and FieldHint ever gets the avs+ colorspaces with hbd support? I know these are very old plugins, but they're still both used in tools like YATTA and original versions are also limited to YV12 only (FieldHint). Hbd and avs+ colorspaces support could also allow them to be used with YATTA while keeping the 8+bit chain.

StainlessS
1st May 2021, 14:42
For anybody wondering what mp3dom is talking about, theres a little but about it here (Hinting, take anything I say there with a pinch of salt)
https://forum.doom9.org/showthread.php?p=1862012#post1862012

Not sure how likely it is to happen for Float colorspace.

EDIT: With Frame Properties, could maybe totally replace the hinting.

kedautinh12
5th May 2021, 00:39
New plugin fork from vapoursynth-dotkill
https://github.com/Asd-g/AviSynth-DotKill

kedautinh12
10th May 2021, 00:14
New plugin port from vapoursynth-cnr2
https://github.com/Asd-g/AviSynth-vsCnr2

kedautinh12
12th May 2021, 09:13
Dedup with x64, avs 2.6
http://avisynth.nl/index.php/DeDup

Dogway
7th June 2021, 15:26
Does anyone know what kind of convolution this theory applies to? It sounds to me as repair(mode=2) but I don't know, he also talks about a 2x2 window, how is that, should conv kernels be odd?

First of all the contributors need to be sorted. The contributor which is nearest to the "center" (usually gets the highest weight) should be first in the list etc. The list should be sorted for distance to the center and not for weight. The sorted contributor list makes it easy to apply special processing to the "main contributors".
(...)
Hmmmmm... I didn't know the "Repair" filter. Seems that it uses the same concept, but it's not as well optimized for the specific case, I think. E.g. from what I've just read, "Repair" always compares 3x3 pixels. From my tests that's a good general purpose solution, but maybe not the best solution specifically for scaling. For upscaling I'm only comparing 2x2 pixels (those which are nearer to the "center"). For downscaling it can be more than 3x3 pixels, depending on the scale factor.

Or in short: The algorithm I described is custom tailored to "contributor" based resampling algorithms, by making use of the information in the contributor list. I think this should result in slightly superior quality because exactly those pixels are compared which are the main contributors to the final destination pixel. If we compare too many or not enough pixels, the algorithm should get a bit less effective (e.g. miss some ringing or misdetect ringing).

Here my attempt:

str = Format("y[-1,1] A^ y[0,1] B^ y[1,1] C^ y[-1,0] D^ y[1,0] F^ y[-1,-1] G^ y[0,-1] H^ y[1,-1] I^ x[0,0] J^" \
+" J 1 - K^ K A - abs K B - abs < A B ? L^ K C - abs K D - abs < C D ? M^ K F - abs K G - abs < F G ? N^ K H - abs K I - abs < H I ? O^" \
+" K L - abs K M - abs < L M ? P^ K N - abs K O - abs < N O ? Q^ " \
+" K P - abs K Q - abs < P Q ? R^ " \
+" J 1 + K^ K A - abs K B - abs < A B ? L^ K C - abs K D - abs < C D ? M^ K F - abs K G - abs < F G ? N^ K H - abs K I - abs < H I ? O^" \
+" K L - abs K M - abs < L M ? P^ K N - abs K O - abs < N O ? Q^ " \
+" K P - abs K Q - abs < P Q ? S^ " \
+" J R S clip " )

Dogway
7th June 2021, 15:29
Also is there any jpeg source filter for avs+ x64 like jpegsource that lets you load the image in original format (YUV) rather than convert it to RGB?

zorr
7th June 2021, 21:06
he also talks about a 2x2 window, how is that, should conv kernels be odd?

Not sure but 2x2 and scaling reminds me of bilinear interpolation (http://tech-algorithm.com/articles/bilinear-image-scaling/).

Reel.Deel
7th June 2021, 21:38
Also is there any jpeg source filter for avs+ x64 like jpegsource that lets you load the image in original format (YUV) rather than convert it to RGB?

FFImageSource and LWLibavVideoSource can.

kedautinh12
9th June 2021, 01:48
SmoothUV2 now add back SSHiQ from old SmoothUV
https://github.com/Asd-g/AviSynth-SmoothUV2/releases

GMJCZP
13th July 2021, 14:03
Hello, the tritical's TUnsharp plugin does not work in HBD, is there a possibility to solve this situation?

kedautinh12
13th July 2021, 14:42
TUnsharp now don't support HBD. Need some one add support HBD

Dogway
25th July 2021, 00:12
I'm not sure that TemporalRepair is working as expected. modes 1, 2, and 3 barely do anything. I ported them to ex_repair and visually they clearly try to recover detail, unless I got the source code wrong.

RG_FORCEINLINE void get_lu_c(int& lower, int& upper, int src_prev, int src_curr, int src_next)
{
auto max_np = std::max(src_next, src_prev);
auto min_np = std::min(src_next, src_prev);
upper = subs_c(max_np, src_curr);
lower = subs_c(src_curr, min_np);
}

RG_FORCEINLINE int SmoothTRepair1_c(int dest, int lower, int upper, const int src_prev, const int src_curr, const int src_next)
{
auto src_dest = dest;

auto tmp_u = adds_c(upper, src_curr);
auto tmp_l = subs_c(src_curr, lower);

auto tmp_max = std::max(std::max(tmp_u, src_prev), src_next);
auto tmp_min = std::min(std::min(tmp_l, src_prev), src_next);

auto result = clip(src_dest, tmp_min, tmp_max);

return result;
}

RG_FORCEINLINE int temporal_repair_processor_mode1_8_c(
BYTE* dp,
const BYTE* previous, const intptr_t pfpitch,
const BYTE* sp, const intptr_t ofpitch,
const BYTE* next, const intptr_t nfpitch
)
{
int lowermax, uppermax;
int lower, upper;
get_lu_c(lowermax, uppermax, previous[-1 * pfpitch - 1], sp[-1 * ofpitch - 1], next[-1 * nfpitch - 1]);
get_lu_c(lower, upper, previous[-1 * pfpitch + 0], sp[-1 * ofpitch + 0], next[-1 * nfpitch + 0]);
uppermax = std::max(uppermax, upper);
lowermax = std::max(lowermax, lower);
get_lu_c(lower, upper, previous[-1 * pfpitch + 1], sp[-1 * ofpitch + 1], next[-1 * nfpitch + 1]);
uppermax = std::max(uppermax, upper);
lowermax = std::max(lowermax, lower);
get_lu_c(lower, upper, previous[1 * pfpitch - 1], sp[1 * ofpitch - 1], next[1 * nfpitch - 1]);
uppermax = std::max(uppermax, upper);
lowermax = std::max(lowermax, lower);
get_lu_c(lower, upper, previous[1 * pfpitch + 0], sp[1 * ofpitch + 0], next[1 * nfpitch + 0]);
uppermax = std::max(uppermax, upper);
lowermax = std::max(lowermax, lower);
get_lu_c(lower, upper, previous[1 * pfpitch + 1], sp[1 * ofpitch + 1], next[1 * nfpitch + 1]);
uppermax = std::max(uppermax, upper);
lowermax = std::max(lowermax, lower);
get_lu_c(lower, upper, previous[0 * pfpitch - 1], sp[0 * ofpitch - 1], next[0 * nfpitch - 1]);
uppermax = std::max(uppermax, upper);
lowermax = std::max(lowermax, lower);
get_lu_c(lower, upper, previous[0 * pfpitch + 1], sp[0 * ofpitch + 1], next[0 * nfpitch + 1]);
uppermax = std::max(uppermax, upper);
lowermax = std::max(lowermax, lower);
return SmoothTRepair1_c(dp[0], lowermax, uppermax, previous[0 * pfpitch + 0], sp[0 * ofpitch + 0], next[0 * nfpitch + 0]);

I understand that "sp[-1 * ofpitch - 1]" means "x[-1,-1]" otherwise my (unoptimized) expression is wrong:
y[-1,-1] z[-1,-1] max x[-1,-1] - U^
x[-1,-1] y[-1,-1] z[-1,-1] min - L^
y[-1,0] z[-1,0] max x[-1,0] - V^
x[-1,0] y[-1,0] z[-1,0] min - M^
U V max U^ L M max L^
y[-1,1] z[-1,1] max x[-1,1] - V^
x[-1,1] y[-1,1] z[-1,1] min - M^
U V max U^ L M max L^
y[1,-1] z[-1,-1] max x[1,-1] - V^
x[1,-1] y[-1,-1] z[1,-1] min - M^
U V max U^ L M max L^
y[1,0] z[1,0] max x[1,0] - V^
x[1,0] y[1,0] z[1,0] min - M^
U V max U^ L M max L^
y[1,1] z[1,1] max x[1,1] - V^
x[1,1] y[1,1] z[1,1] min - M^
U V max U^ L M max L^
y[0,-1] z[0,-1] max x[0,-1] - V^
x[0,-1] y[0,-1] z[0,-1] min - M^
U V max U^ L M max L^
y[0,1] z[0,1] max x[0,1] - V^
x[0,1] y[0,1] z[0,1] min - M^
U V max U^ L M max L^

x[0,0] U + y[0,0] max z[0,0] max
x[0,0] L - y[0,0] min z[0,0] min
a swap2 clip

kedautinh12
15th August 2021, 17:11
EEDI2CUDA ported from Vapoursynth
https://github.com/AmusementClub/VapourSynth-EEDI2CUDA/issues/3#issuecomment-899069883

kedautinh12
16th August 2021, 13:14
EEDI2CUDA now have x86 ver
https://github.com/AmusementClub/VapourSynth-EEDI2CUDA/actions/runs/1135300628

kedautinh12
9th September 2021, 15:04
New fork frfun7 from pinterf, but still don't have HBD
https://github.com/pinterf/Frfun7/releases

real.finder
8th October 2021, 08:00
since there are no issues tab in https://github.com/pinterf/Average I will report it here

as said here (https://github.com/AviSynth/AviSynthPlus/issues/226#issuecomment-910076325), Average seems not work with avs+ native array
https://i.postimg.cc/4ddwGBQK/Untitled.png (https://postimages.org/)

don't know if it can be updated without break compatibility

pinterf
8th October 2021, 11:44
New version: Average.
https://github.com/pinterf/Average/releases/tag/0.95
v0.95 (20211008)
- add AVX2 routines
- accept parameter as a nested array stuffed into the first parameter (AVS 3.7.1)
- pass over frame properties if any
- Source: update to VS2019, clang-cl option, gcc friendly
- add CMake build environment, linux build instructions

real.finder
8th October 2021, 12:06
New version: Average.
https://github.com/pinterf/Average/releases/tag/0.95


thanks! seems work fine

Julek
29th June 2022, 05:40
About Checkmate plugin: I wanted to point out that the wiki shows 5 (http://avisynth.nl/index.php/Checkmate) as the default tthr2 but it seems that the correct is 0 (https://github.com/tp7/checkmate/blob/master/checkmate/checkmate.cpp#L293).

LigH
9th July 2024, 08:52
Unimportant suggestion: I noticed that ResampleHQ has a few ToDo's left. Just in case of extreme boredom.

Possibly last sources (without binary) mentioned here (https://forum.doom9.org/showthread.php?p=1952217#post1952217).

LigH
6th August 2024, 01:38
More interesting for me: AudioLimiter (http://avisynth.nl/index.php/AudioLimiter) by dimzon is Closed Source but well documented so could possibly be recreated from scratch.

In addition to the surely useful hyperbolic tangent as sigmoid function (which can be calculated as ratio of difference and sum of powers to base e (https://en.wikipedia.org/wiki/Hyperbolic_functions#Exponential_definitions)), in my own Booster application I also used a scaled arcus tangent and very quick and simple sigmoid x/|x+1|.

LigH
23rd September 2024, 17:15
Does anyone know a source template for an AviSynth audio plugin that I might try to implement it myself, despite having hardly any practical experience in C/C++ coding? For someone with experience, I guess it might only take a weekend...

tormento
24th September 2024, 11:09
Unimportant suggestion: I noticed that ResampleHQ has a few ToDo's left. Just in case of extreme boredom
I tried the x64 version and doesn't actually work too, at least on my computer (no AVX2).

Emulgator
24th September 2024, 11:36
Does anyone know a source template for an AviSynth audio plugin that I might try to implement it myself...
I was thinking about SoundOut(), but the source has moved:
https://forum.doom9.org/showthread.php?p=925907#post925907
And Wilbert's update for 2.6:
https://forum.doom9.org/showthread.php?p=1654982#post1654982
Wilbert is around, you may ask him.
BTW SoundOut 1.1.1 .wav out collapses for me now using a recent AvsPmod32 2.7.7.9,
.flac is fine, .wv seems fine... and a 64bit-version would be nice too.

ChaosKing
24th September 2024, 23:06
Does anyone know a source template for an AviSynth audio plugin that I might try to implement it myself, despite having hardly any practical experience in C/C++ coding? For someone with experience, I guess it might only take a weekend...

Is Vapoursynth, but maybe it can be helpfull too (not much code) https://github.com/dubhater/vapoursynth-damb

LigH
24th September 2024, 23:11
Sorry, no, VapourSynth is based on Python, which I know even less than C.

ChaosKing
25th September 2024, 16:14
Sorry, no, VapourSynth is based on Python, which I know even less than C.

But the plugin is written in cpp...

LigH
27th September 2024, 12:19
But it is for a VapourSynth plugin interface. The AviSynth plugin interface is probably different, I would assume.

I saw that the AviSynthPlus repo comes with sources of the Shibatch Sampling Rate Converter (SSRC), that might be a convenient base to derive from.
But I also noticed that I won't be able to do that, with all the C++ interface syntax I am not used to, and related compiler control files...

Jamaika
1st October 2024, 09:04
But it is for a VapourSynth plugin interface. The AviSynth plugin interface is probably different, I would assume.

AviSynth in VapourSynt is a mod of old version V3.
I am annoyed by plugins in ffmpeg AviSynth/VapourSynt opened as shared AviSynth/VapourSynt DLL.
In AviSynth_c you have all the functions you can open but warmigs are.
avisynth_c.cpp: In function 'int avs_is_yv24(const AVS_VideoInfo*)':
avisynth_c.cpp:66:63: warning: bitwise operation between different enumeration types '<unnamed enum>' and '<unnamed enum>' is deprecated [-Wdeprecated-enum-enum-conversion]
66 | return (p->pixel_type & AVS_CS_PLANAR_MASK) == (AVS_CS_YV24 & AVS_CS_PLANAR_FILTER);
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
Stream audio
static int avisynth_create_stream_audio(AVFormatContext *s, AVStream *st)
{
AviSynthContext *avs = (AviSynthContext *)s->priv_data;

st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
st->codecpar->sample_rate = avs->vi->audio_samples_per_second;
st->codecpar->ch_layout.nb_channels = avs->vi->nchannels;
st->duration = avs->vi->num_audio_samples;
avpriv_set_pts_info(st, 64, 1, avs->vi->audio_samples_per_second);

if (avs_get_version(avs->clip) >= 10)
av_channel_layout_from_mask(&st->codecpar->ch_layout,
avs_get_channel_mask(avs->vi));

switch (avs->vi->sample_type) {
case AVS_SAMPLE_INT8:
st->codecpar->codec_id = AV_CODEC_ID_PCM_U8;
break;
case AVS_SAMPLE_INT16:
st->codecpar->codec_id = PCM(S16);
break;
case AVS_SAMPLE_INT24:
st->codecpar->codec_id = PCM(S24);
break;
case AVS_SAMPLE_INT32:
st->codecpar->codec_id = PCM(S32);
break;
case AVS_SAMPLE_FLOAT:
st->codecpar->codec_id = PCM(F32);
break;
default:
av_log(s, AV_LOG_ERROR,
"unknown AviSynth sample type %d\n", avs->vi->sample_type);
avs->error = 1;
return AVERROR_UNKNOWN;
}
return 0;
}

Modyfity cpp plugin ffmpeg static avisynth
https://www.sendspace.com/file/znalx3

LigH
1st October 2024, 09:09
Would you be able to help me building an audio plugin?

So far I already asked 3 people and did not get one reply yet.

LigH
10th October 2024, 14:25
A little teaser of what I would like to get implemented as AviSynth audio plugin; it already works as CLI application:

https://www.ligh.de/pics/BoostV_curves.png

I wrote that in FreePascal (Lazarus). I cannot write it in C++.

LigH
14th October 2024, 06:30
I am now halfway successful. Could build plugins in MSYS2/MinGW and GCC 14.2 (M-AB-S interactive shell).

Only flaw: Despite linker flags containing parameters to statically link some GCC libs, the resulting plugins still depend on them.

CMakeCache contains
CMAKE_MODULE_LINKER_FLAGS:STRING=-D_FORTIFY_SOURCE=2 -fstack-protector-strong -mtune=generic -O2 -pipe -D__USE_MINGW_ANSI_STDIO=1 -static-libgcc -static-libstdc++
CMAKE_SHARED_LINKER_FLAGS:STRING=-D_FORTIFY_SOURCE=2 -fstack-protector-strong -mtune=generic -O2 -pipe -D__USE_MINGW_ANSI_STDIO=1 -static-libgcc -static-libstdc++

According to AVSmeter, the 32-bit plugin misses libgcc_s_dw2-1.dll, the 64-bit plugin misses libgcc_s_seh-1.dll
_

PS: Even when adding those (and libwinpthread-1.dll) to the plugins directory, it is still not useable as AviSynth plugin.

LigH
14th October 2024, 12:40
It has been done. In MSVC it worked.

AudioBoost plugin: binaries (https://www.ligh.de/software/AudioBoost.7z) / min. docs (https://www.ligh.de/software/AudioBoost.html) / repo (https://github.com/LigH-de/AudioBoost)

Might replace dimzon's AudioLimiter.

Emulgator
15th October 2024, 08:44
Hi LigH, congrats !

I did not test it yet, so just a tip about the wording to avoid ambiguities:
In audio the terms "Limiter, Compressor" are reserved for devices/algorithms which regulate gain and avoid distortion at any cost
(the regulation phase excluded, here a carefully chosen lookahead/time constant combo may serve to make distortion unnoticeable)

Going from the graphs you published I would guess that your algo remaps sample values, not gain,
so can be seen now as a soft clipper with selectable curves which is in any case nice to have.

I see arbitrary curves coming, or introduction of a sidechain input.
In the end you will be on the way to LigH's Arbitrary Audio Modulator allowing stranger audio FX like ring modulation etc.