-
-
Notifications
You must be signed in to change notification settings - Fork 60
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
Solve some issues with DSmolken's drumkits #172
Conversation
Some recordings of above sfz in cakewalk |
This is at the generation of the decay stage. The top of the attack stage is 100% level, and so is sustain level in this case. However, when using devtools/CaptureEG, it's observed that both Cakewalk and ARIA have some very long decays. (~18 seconds long) |
So it seems that the envelope is not really free running in fact. The "release" happens when the sample has ended. The free running logic we have atm seems flawed, I added the one shot loop mode check for one of Alex's example that seemed reasonable but apparently ARIA does not follow this. What does Cakewalk do if you replace the sample by a generator? |
Changing this check freeRunning = (
(region.trigger == SfzTrigger::release)
|| (region.trigger == SfzTrigger::release_key)
|| (region.loopMode == SfzLoopMode::one_shot)
); into freeRunning = (
(region.trigger == SfzTrigger::release)
|| (region.trigger == SfzTrigger::release_key)
|| (region.loopMode == SfzLoopMode::one_shot && (region.isGenerator() || region.oscillator))
); could be a way but this boolean is quite ugly. Edit: it seems to work out though, tried it quickly. |
But there is an R phase in the file. You mean that the release phase is never active on the EG? This fits with "loop_mode=one_shot and a sample file -> only play the EG up to the sustain and ignore the release" logic. |
I'm not sure to understand immediately what this is, will check. |
* 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
sample=*silence
table was not initialized and could output crazy valuesIf Dimension does the same as ARIA, we may need to add a counter to the decay stage on top of the rate. There is an example below.
Example.zip
Note also that
loop_mode=one_shot
does not free-run on generator regions in ARIA, but it does on sample regions.