Comments (25)
Interesting... I've see this error before and it basically tells you that there's something broken in the libraries without really being very specific haha. So I'm afraid the only way to identify the origin of the problem is to comment things out step by step. I wish I could give you a better answer haha. At least you know that the issue must come from the change you've made.
Here are a few other things I've noticed while quickly looking at your commit:
- You can't add:
declare author "Bart Brouns";
declare license "GPLv3";
to compressors.lib
because it will be applied to all the functions declared in that library (including the one written by @josmithiii). @orlarey, @josmithiii, and myself were talking about implementing a declare
that would be function-specific but we haven't done it yet. For now, you should put your name, license, and copyright outside of the comment section that ends up in the doc:
// Doc section
//-----------------------------------------------------
// Author: You
// License: STK-4.3
until we get something better...
- I don't really like these: :)
rmsMaxSize = 2:pow(17); // highest usable for faust2lv2
sr = 44100;
maxRelTime = rmsMaxSize/sr;
especially sr
that might create confusions with ma.SR
. I would move those inside the function using them (using with{}
) even if it implied redefining them internally a few times. Also, why do you need sr=44100
? Does it mean that some functions were designed to work at a specific sampling rate? Why not use ma.SR
? rmsMaxSize
could be defined as a global variable of compressors.lib
but it should appear in the doc in that case...
from faustlibraries.
I found the problem: basics.lib
was using si.
without declaring it.
When you remove the definition of si
in basics.lib
, you get:
BoxIdent[si] is defined here : routes.lib:39
, and not undefined symbol : si
Would it be possible to get a better error message in that situation?
I fixed most of the other issues, but I'm still looking for a good solution regarding rmsMaxSize
.
rmsMaxSize
is the main factor in CPU usage, so maybe I should make it a parameter of the RMS compressors?
If not, I could move it inside RMS_compression_gain_mono
, but that would not be ideal, because you need it to calculate the max value of the release slider.
A third option would be to leave it where it is, and document it.
Am I missing any options?
Another issue I'd like to fix is that the maximum release time depends on the sample rate, but a slider's maximum value needs to be known at compile time.
Any ideas?
Finally: should I add some compressors to demos.lib
?
If so: in addition to the current ones, or instead of the current ones?
Are you happy with the rest of my code and comments?
from faustlibraries.
@josmithiii
In an effort to keep the discussion of each topic in the correct place, I'll reply to this here.
As requested, here is my compressors.lib.
It uses some functions I added to basics.lib.
Thanks for having a look!
Once you are OK with the content of those, I'll do a pull request.
from faustlibraries.
from faustlibraries.
You can either do
git clone https://github.com/magnetophon/faustlibraries/
or you can go to the links in my previous posts, right click the Raw
button, and select save.
from faustlibraries.
from faustlibraries.
@magnetophon it all looks good to me. I think there might a few changes needed in the documentation of some functions, but I can take care of that, shouldn't take too long ;). @josmithiii, once you say you're OK with @magnetophon contributions, can @magnetophon do a PR? Thanks for your hard work @magnetophon !
from faustlibraries.
@rmichon Cool. What should I do with rmsMaxSize
?
from faustlibraries.
from faustlibraries.
from faustlibraries.
from faustlibraries.
Thanks for the review!
I like the GPL much more than the free-er licenses, though I understand it's not ideal for your purposes.
I will think about it.
Yes, it's probably best to make rmsMaxSize
an argument, will do.
Thanks for the compliment on slidingReduce
; it means a lot to me!
Is this an existing algorithm? Do you know it's name?
Your slidingSum
is much more elegant.
However, when I do:
process(x) =
(x:abs:slidingSum(n))-(x:abs:ba.slidingSumN(n,maxn)):hbargraph("dif", -5, 5);
slidingSum(n) = _ <: fi.integrator, fi.integrator@int(max(0,n)) :> -;
maxn = pow(2,21);
the hbargraph moves, especially when I move the slider. Any idea why this is?
I'll remove the N from the names.
from faustlibraries.
from faustlibraries.
A minute after I asked about the guard, I realized what you meant and removed the question, but since you interact with github trough mail, it was to late...
Where would one start debugging?
I tried comparing both versions to:
bruteForceSum(n,x) = x:seq(i, maxn, _+(x@(i+1)*((i+1)<n)));
using
maxn = pow(2,10);
but neither give the same result.
I'm a bit lost as to what to do next.
Also, I thought fi.integrator
would run out of bits at some point, but some testing and some googling made clear that that is unlikely to happen, even with single precision floating point.
Is that a correct train of thought?
from faustlibraries.
from faustlibraries.
My tests don't come out clean: I can't get the 3 versions to agree, when the input is random.
from faustlibraries.
from faustlibraries.
from faustlibraries.
I would test and debug slidingReduce only when I had a winning use-case for it.
My use case for slidingReduce is slidingMin, in LazyLimiter
Do any two of the three agree with each other?
No, I can't get any 2 to agree.
from faustlibraries.
from faustlibraries.
That's also an interesting construct, but not suitable for my use-case.
The neat thing about LazyLimiter is that it has 0% distortion even when limiting low frequency sine-waves, yet when limiting a transient, it has a quick release time.
It does this by looking ahead 186ms; if the current gain-reduction is needed again within the window, it doesn't release (hence the 0% distortion), otherwise it does.
So for LazyLimiter, I really need the actual minimum of the last n samples, no exponential window trickery.
Do you have any ideas for debugging slidingReduce?
from faustlibraries.
from faustlibraries.
from faustlibraries.
@josmithiii
Thanks for the debugging effort.
I wanted to get back to you with a useful result, but have not been able to do so so far.
Just as a heads up, I won't have time for this for a while, sorry.
from faustlibraries.
After a long hiatus from my side, the summing issue has been resolved upstream.
Now the three summing methods are mostly in agreement.
When I run the following with faust 2.20.2
import("stdfaust.lib");
bart = library("slidingReduce.lib");
signal = no.noise;
maxn = pow(2,13);
n = 3 ;
bruteForceSum(n,x) = x:seq(i, n-1, +(x@(i+1)));
slidingSum(n) = _ <: fi.integrator, fi.integrator@int(max(0,n)) : -;
process = sigcomp;
sigcomp =
( (signal:bruteForceSum(n) ) - ( signal:slidingSum(n) ) )
, ( (signal:bruteForceSum(n) ) - ( signal:bart.slidingSumN(n,maxn) ) )
, ( (signal:slidingSum(n) ) - ( signal:bart.slidingSumN(n,maxn) ) )
;
sigs =
signal <:
(
_
,bruteForceSum(n)
, slidingSum(n)
,bart.slidingSumN(n,maxn)
);
I get:
faustout = [ ...
0 0 0; ...
0 0 0; ...
-1.1920929e-07 -1.1920929e-07 0; ...
-9.26665962e-08 0 1.1920929e-07; ...
-2.98023224e-08 0 0; ...
1.1920929e-07 0 -1.1920929e-07; ...
0 -7.4505806e-09 -5.96046448e-08; ...
0 0 -5.96046448e-08; ...
-1.1920929e-07 -5.96046448e-08 5.96046448e-08; ...
-1.1920929e-07 1.1920929e-07 2.38418579e-07; ...
-1.1920929e-07 0 1.1920929e-07; ...
0 0 8.94069672e-08; ...
0 0 -5.96046448e-08; ...
2.38418579e-07 0 -1.78813934e-07; ...
2.38418579e-07 0 -2.38418579e-07; ...
2.38418579e-07 1.1920929e-07 -1.1920929e-07; ...
];
Interestingly, the error is almost always 1.1920929e-07 or double that or negative one of those.
That also holds true for huge n's.
I guess those who actually understand floating point math are not surprised.
I sure was!
When I compile with faust 2.5.23 I get;
faustout = [ ...
0 0 0; ...
0 0 0; ...
2 0 -2; ...
2 0 -2; ...
-2.98023e-08 0 0; ...
1.19209e-07 0 -5.96046e-08; ...
1.19209e-07 0 -5.96046e-08; ...
0 0 -5.96046e-08; ...
0 0 5.96046e-08; ...
-1.19209e-07 0 1.19209e-07; ...
-2.38419e-07 0 1.78814e-07; ...
-2.38419e-07 0 1.19209e-07; ...
0 0 -5.96046e-08; ...
2.38419e-07 0 -1.49012e-07; ...
2.38419e-07 0 -2.38419e-07; ...
-2 0 2; ...
];
If anyone has an idea about the cause, I'd be very interested.
May I suggest adding a test so this error doesn't return?
from faustlibraries.
Related Issues (20)
- Feature request: allow si.bus(0) HOT 1
- Error in moogLadder filter algorithm HOT 7
- Add links to source code from libraries docs pages HOT 2
- co.RMS_compression_gain_mono causes core dump HOT 4
- Deprecated examples documentation ?
- N dimensional tabulate HOT 23
- Can the enable primitive become a fully supported feature? HOT 1
- backwards compatibility strategy / library versioning HOT 7
- DX7 Library is incomplete
- compilation of Max 8 externals for Apple ARM64 -> ok HOT 1
- Naming conventions for amplitude analysis functions HOT 18
- Strange behaviour of ba.if with fractional conditions < 1. HOT 1
- add edge detection to signal library HOT 1
- I want to help HOT 1
- oscillators.lib : 488 : ERROR : syntax error, unexpected IDENT HOT 6
- invalid links in inline documentation HOT 2
- hoa encoder3D HOT 4
- typo "quantizer.lib" in stdfaust.lib HOT 1
- Make the behaviour of si.smoo SR-independent. HOT 3
- pm.flute_ui_MIDI is not in tune
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from faustlibraries.