Keep the nominal dynamic when layered articulations carry no expression pattern - #179
Keep the nominal dynamic when layered articulations carry no expression pattern#179manolo wants to merge 1 commit into
Conversation
|
Warning Review limit reached
Next review available in: 57 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthrough
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…on pattern When a note has two or more articulations and none of them defines an expression pattern (for example a slurred tremolo, which applies Legato plus Tremolo, or a slurred acciaccatura), the averaging counted each empty pattern as an explicit dynamic of 0 and wrote an all-zero but non-empty averaged dynamic-offset map. Fluid and VST then use that non-empty curve's max amplitude (0) instead of the note's nominal dynamic and play near-silence. Count a dynamic change only for articulations that actually carry a dynamic pattern, matching sumUpOffsets, so an all-empty combination leaves the averaged curve empty and the nominal dynamic is used. Add regression tests for the slurred tremolo and slurred acciaccatura cases. Resolves: musescore/MuseScore#33256
8de3a41 to
c91ea1f
Compare
Resolves: musescore/MuseScore#33256
When a note has two or more articulations and none carries an expression pattern (a slurred tremolo, a slurred acciaccatura),
ArticulationMap::calculateAveragecounted the empty patterns as dynamics of 0 and produced a non-empty all-zero curve, which Fluid and VST read as near-silence. Count a dynamic change only for articulations that actually carry a pattern, so the averaged curve stays empty and the nominal dynamic is used. Adds regression tests for both cases.