-
-
Notifications
You must be signed in to change notification settings - Fork 69
Add support for curvecc and stepcc #166
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Ok should be good now! At least from a behavior pov :) |
one remark: The performance of various rounding functions depends wildly on processor, flags, compiler. |
You mean here: auto quantize = [step](float value) -> float {
return std::floor(value / step) * step;
}; and here: auto quantize = [logStep](float value) -> float {
if (value > 1)
return std::exp(logStep * std::floor(std::log(value) / logStep));
else
return std::exp(logStep * std::ceil(std::log(value) / logStep));
}; ? Can you expand a little bit? I used to have round there but it seemed from the tests I made with sforzando that trunc-type behavior was a bit more precise. I wonder if the first one should be The tests I've tried to do with Sforzando showed that when you have steps, there is one last "step" exactly at the edge of the value range (for CC this would be at 1.0/127, for pitch bends at +/- 8192, ...). This is what led me to the trunc.
|
This was a remark regarding 3f54a82 titled "Use round rather than trunc; more stable.." |
I completely messed up the steps actually, I don't know why I treated it as a number of steps but it's actually a step size. Now this matches ARIA's behavior on all envelope types:
I need to update the tests to match all behavior, and maybe add a couple to check the fine print, or assume that larger-scale tests should check for these. |
…ves- Remove the no-lambda multiplicative modifiers... it's a trap that makes you create nans and infs
* Issues: Update bug_report.yml to include an example unit test (sfztools#166) * Benchmarks: Added a benchmark for looping ContainerClips * CombiningNode: Improved the speed of CombingNode::addInput, particularly with large numbers of clips, by using std::partition * TempoSequence: Fixed updating sequences multiple times * Time: Added some functions to EditTime & EditTimeRange * CombiningNode: Fixed an issue where nodes could be processed without being prepared * Container Clip: Refactored to flatten contained clips in to the main Edit. Has some limitations at the moment * Node: Made createNodeMap recursive to find nested internal Nodes * ContainerClip: Make sure each WaveNode gets a unique ID * Tests: Added UBsan to macOS tests * ContainerClip: Started adding dynamic offset to WaveNodeRealTime * ContainerClip: Started adding support for USE_DYNAMIC_OFFSET_CONTAINER_CLIP (to avoid flattening container clips) * Container Clip: Fixed dynamic offset for changing graphs and non-zero loop starts * Container Clip: Added a DynamicallyOffsettableNodeBase class and used this to support contained clip fades * Container Clip: Avoided hiding DynamicallyOffsettableNodeBase functions * Container Clip: Fixed compiler errors * Container Clip: Fixed some namespace conflicts * Container Clip: Added processing of looped ranges * Container Clip: Ensure offset change triggers a wave crossfade * ContainerClip: Avoided clicks introduced by chunking loop boundaries * ContainerClip: Fixed slightly incorrect loop point by using a local ProcessState * ContainerClip: Removed an unused variable * Container Clip: Added some tests * Container Clip: Worked around a Windows warning * Container Clip: Commented out a line that will be eventually removed * Utils: Improved createGraphDescription to remove duplicate edges and include Nodes that use memory * Player: Added a check for cycles in a graph to prepareToPlay * Container Clip: Avoided processing 0 samples * ContainerClip: Removed the flattening implementation * Nodes: Fixed a potential memory corruption caused by claiming incorrect nodes * ContainerClip: Added an additional assertion
Missing:
Closes #155 #77