Repository navigation
fix(synth): let a local initialAttenuation replace the global zone value - #2994
Merged
Merged
Conversation
Local zones start as a copy of the global zone, so adding the local attenuation summed both values. Preset and instrument levels are still added as the SoundFont 2.04 specification requires. Fixes #2977
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
AI-authored disclosure (
alphatab-ai-authored-v1)Portions of this content were authored by an AI agent. The agent has read
AGENTS.md and the human submitter accepts responsibility for
compliance with the rules in that document.
Issues
Fixes #2977
Proposed changes
Local SoundFont zones start as a copy of their global zone.
Region.operatoraddedinitialAttenuation(generator 48) to the copied value instead of replacing it, so a local value was summed with the global one at the same level (global 200 cB + local 120 cB played at 32 dB instead of 12 dB). The SoundFont 2.04 spec (§9.4) says a local generator replaces the global one at the same level, while preset and instrument levels are added. TinySoundFont, which alphaSynth is based on, fixed the same in 2020.The generator is now assigned. The preset/instrument summation in
loadPresetsis unchanged. The bundled Sonivox and default SoundFonts have no global attenuation, so they sound the same.This PR only covers the reported generator. Coarse/fine tune and the sample address offsets still sum global and local values; those will be covered by the planned synthesizer replacement.
A unit test on
Regioncovers replacing, inheriting and an explicit local zero.Checklist
AI authorship disclosure
(
alphatab-ai-authored-v1) is present at the top of this body, and I havepersonally reviewed every change and can explain each one
Further details