Skip to content

Changelog entries for all open fix PRs, collected so the PRs merge conflict-free - #283

Closed
douglas-carmichael wants to merge 5 commits into
git-moss:mainfrom
douglas-carmichael:collected-changelog
Closed

douglas-carmichael wants to merge 5 commits into
git-moss:mainfrom
douglas-carmichael:collected-changelog

Conversation

@douglas-carmichael

Copy link
Copy Markdown
Contributor

The open fix PRs (#246-#249, #252-#282) all inserted their changelog entries near the same lines of the 19.2.0 section - so every merge would have turned the remaining PRs into trivial-but-annoying changelog conflicts. To keep the whole batch mergeable in any order:

  • The fix PRs no longer touch CHANGELOG.md at all. Their code changes are in disjoint files, so they now merge cleanly in any order and any subset. Each PR quotes its changelog entry in its description.
  • This PR carries all of the entries in one place: one section per format in alphabetical order, entries for the same format merged under one heading (and two headings normalized to your existing names: CWITEC TX16Wx, Korgmultisample). It also removes an insertion defect where a few of the original branches had duplicated their entry into older release sections.

Merge it whenever it suits - after the whole batch, or cherry-pick lines as you take individual PRs; since you groom the changelog anyway, feel free to just treat this as raw material.

Every open fix PR inserted its changelog entry near the same lines of
the 19.2.0 section, so each merged PR turned the remaining ones into
trivial conflicts. The entries now live in this one commit - one
section per format in alphabetical order, entries of the same format
merged under one heading - and the fix PRs no longer touch the
changelog at all, so they merge cleanly in any order. Each PR quotes
its entry in its description as well.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
douglas-carmichael added a commit to douglas-carmichael/ConvertWithMoss that referenced this pull request Jul 29, 2026
The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR git-moss#283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…ame pattern (#280)

* Disting EX: accept the creator's _RR round-robin suffix in the file name pattern

The creator names round-robin samples with an '_RR<n>' suffix but the
detector's file name pattern only accepted '_R<n>'. Since the pattern
must match the whole name, such files did not match at all and the
note, key-switch and velocity information of every round-robin sample
was lost when reading. The pattern accepts both spellings now.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
* DecentSampler: read unit-less volume values as linear amplitude

A volume value without a dB unit is a linear amplitude but was scaled
as 'value times 6dB': volume="0.5" (-6dB) read as +3dB, and an
explicit volume="1.0" (0dB) read as +6dB and thus differed from an
absent attribute. Unit-less values now convert as 20*log10(value).

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…r envelope depths (#278)

* SFZ: anchor crossfades inside the zone range and write negative filter envelope depths

The key and velocity crossfade ranges (xfin/xfout) were anchored
outside of the zone's range, where the zone does not even play, and
for zones at the range edges the 0/127 clamps collapsed the fade
range: a fade at the top of a full-velocity zone was written as the
empty range 127..127 and lost. The fades are now written inside the
zone's range. A negative filter envelope depth (a downward sweep) was
silently dropped by the '> 0' gate; the opcode is now also written
for negative depths, matching the SF2 fix of the same defect.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…277)

* Reason NN-XT: decode the velocity fade-out from its inverted storage

The velocity fade-out was read raw although it is stored inverted -
0x80 means off, otherwise the value is 127 minus the fade range,
exactly as the writer in the same class encodes it. A zone without a
fade read as a fade over the whole velocity range, and a fade of e.g.
27 velocities read as one of 100.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…#276)

* TAL Sampler: always write the volume and default a missing one to 0dB

The creator omitted the volume attribute for 0dB zones, but the
reader's default for a missing attribute decoded to about -21.8dB
(raw 0 through the volume law), so every zone of a read-back
.talsmpl dropped by that amount. The volume is now always written and
the reader's default is the raw value which represents 0dB.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…n signed read (#275)

* DLS: fix the pitch envelope times, the fine tune unit and a big-endian signed read

The pitch envelope was built with the times of EG1 (the amplitude
envelope) instead of its own EG2 times. The fine tune of a region is
stored in cents but was divided by 32768 as if it were a semi-tone
fraction, which erased the detune of every region. While verifying,
the signed 16 bit accessor of the RIFF chunk framework turned out to
read big-endian although RIFF is little-endian throughout - the
region fine tune, its only user, additionally came out byte-swapped.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
)

* NI Kontakt: skip the zones of muted groups and honor soloed groups

The muted and soloed flags of Kontakt 4.2/5+ groups were parsed but
never used, so the zones of muted groups - often alternate
articulations parked by the sound designer - stacked onto the active
ones. Zones of muted groups are now skipped; if any group is soloed,
only the soloed groups are converted. The missing-group consistency
check of the zone loop is unchanged.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…dulator (#273)

* NI Maschine: write the velocity to volume amount from the velocity modulator

Both the Maschine 1 and Maschine 2 writers took the velocity to
volume amount from the amplitude envelope modulation depth (which
defaults to 1.0) instead of the velocity modulation amount of the
zone - the slot the readers correctly fill. A source without velocity
response became fully velocity sensitive.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…source (#271)

* Ensoniq EPS/ASR: fix the pitch bend unit and the filter key tracking source

The pitch bend range was passed as semitones into the model's cents
field, so the bend wheel effectively did nothing on converted
instruments. The filter keyboard tracking was read from the filter
envelope amount instead of the filter key amount field, which the
wave-sample already provides.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…er and the envelope depth source (#270)

* Ensoniq Mirage: fix the oscillator mix gain law, the phantom OSC2 layer and the envelope depth source

The oscillator mix cross-fade computed linear amplitudes (10^(dB/20)
times an equal-power coefficient) but stored them through setGain,
which expects dB - every level relationship was destroyed and a muted
second oscillator became full volume. The cross-fade coefficients are
now converted to dB and added onto the wave-sample level. The second
oscillator zone was added to its group unconditionally (a detuned
phantom layer on every program) and additionally to the first group
when the mix was active (the same zone twice); it is now added once,
only when the mix opens it. The envelope modulation depth was taken
from the velocity-sensitivity parameter although 0 means 'velocity has
no effect', so most programs lost their amplitude envelope; the
envelope now always applies with full depth and the parameter feeds
the velocity modulation amount of the level and the filter cutoff.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
… loop detune source (#269)

* Ableton: fix unset envelope levels, stripped modulation signs and the loop detune source

An unset envelope start or end level was written as 1.0 although
Live's default is silence, so a slow-attack pad converted with no
swell (the envelope ramped from full to full) and unset pitch-envelope
levels became a full-depth offset; unset start/end levels are now 0,
unset hold/sustain levels 1. The filter and aux (pitch) envelope
amounts were read through Math.abs, so downward sweeps inverted on
reading. The detune of the sustain loop was read from the multi-sample
part element - the zone tuning, which was already applied - instead of
the sustain loop element, so the zone detune doubled up as loop
tuning after a round trip.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…envelope levels (#268)

* Roland ZEN-Core: read the partial pan and velocity window and signed envelope levels

The reader only collected the wave numbers of the tone partials and
ignored their pan and velocity range, so a stereo instrument - two
hard-panned partials over two mono multi-samples, which is also what
the creator writes - collapsed into stacked centered zones, and
velocity-layered tones sounded all layers at once. Each partial's
zones now receive its pan and velocity window, and a partial whose
right wave number differs from its left one is read as a stereo pair.
The levels of the pitch and TVF envelopes are signed 16 bit values
(the writer already writes them signed) but were read unsigned, which
turned e.g. a pitch envelope starting at -1023 into one starting at
the positive maximum.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…ange and 12 bit unpacking (#267)

* Akai legacy formats: fix signed reads, tuning and volume laws, bend range and 12 bit unpacking

MPC2000/3000: the tune of a program pad and of a SND sample were read
unsigned, so every negatively tuned pad came out drastically sharp.
S1000/S3000: the pitch bend range was passed as semitones into the
model's cents field; the program volume (0..1) was written directly as
the dB gain of every zone, overwriting the per-layer loudness; the
fraction byte of the fixed point keygroup tunings was treated as
signed, so negative fine tunes came out a semitone flat, and the
sample header tuning in literal cents is no longer rescaled. AKP/AKM:
the same bend range unit defect; the multi part volume was multiplied
onto the dB gain (a no-op for 0dB zones) instead of added as a dB
offset and the part panning was scaled twice as wide as the field.
S900/S950: the fractional nominal pitch was applied with an inverted
sign, so an off-pitch recording was doubled instead of corrected, and
the loudness offset was read unsigned. MPC60: the 12 bit sample data
was unpacked with the low nibble at 1/16 weight and byte-swapped;
the bits are now left-justified as in the reference implementation.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
* TX16Wx: fix the wave ID scope and the pitch envelope depth scale

The wave IDs of a written program restarted at 0 for every group
although they must be unique across the program, so all regions of a
multi-group program resolved to the waves of the last group. The
reader also shared one zone object per wave between all regions
referencing it, so their key and velocity ranges overwrote each other;
every region now gets its own zone object. The depth of a pitch
envelope was written in cents of the full model depth but read as a
fraction of 4800 cents, which inflated it 2.5 times on every read.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…tion range (#265)

* Renoise: read and write the pitch envelope depth via the pitch modulation range

The depth of a pitch envelope was hard-coded to 1.0 when reading,
which equals the model maximum of 120 semitones, although the full
swing of the bipolar pitch AHDSR device is the pitch modulation range
of the mixer device (12 semitones by default) - and the depth was
discarded when writing. The depth is now derived from the pitch
modulation range when reading, and writing chooses the range from the
model depth (clamped to 1..96 semitones). Since the range scales every
modulation device targeting the pitch, the pitch LFO amplitude
conversion uses the same range.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…-one-shots and kit drum tuning (#264)

* Synthstrom Deluge: fix the velocity amount slot, the loop mode of non-one-shots and kit drum tuning

The velocity to volume patch cable was read into and written from the
amplitude envelope modulation depth instead of the velocity modulation
amount of the zone, so a source without velocity response became fully
velocity sensitive and vice versa. An instrument without loops which
is not a one-shot was written with the loop mode ONCE, which ignores a
note-off on the device; it is now written with CUT, which stops the
play-back on a note-off. The transpose and cents of a kit drum were
discarded when reading a kit since the pad note is used as the root -
they are now read as a pitch offset, so pitched kit drums keep their
tuning.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…the +12dB boost and the tune range (#263)

* Korg KMP/KSF: fix the stereo split criterion, the sample start mask, the +12dB boost and the tune range

Writing split-stereo zones sorted them into the left and right KMP by
their tuning instead of their panning, which left the left KMP empty.
The sample start of a KSF was masked with 0xFFF instead of 0xFFFFFF
although the comment already documents 3 bytes, so starts of 4096
frames or more wrapped around. The +12dB boost flag summed the linear
powers instead of adding 12dB to the gain. The tuning was cast into
the single byte tune field without range handling, so more than +-1.27
semitones wrapped around; whole semitones are now folded into the
original key and only the remaining cents are written.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…nd duplicated performances (#262)

* Yamaha YSFC: fix the envelope time quantization, the doubled tuning and duplicated performances

The lookup from seconds into the envelope time table compared against
the truncated integer value of the table entries (which range from 0.2
to 90 seconds), so every sub-second time landed on the first entry
whose neighbour reaches 1 second - about 0.9 seconds - in all written
AEG, FEG and PEG times. The tuning of a zone was written to both the
keybank and the element although the device and the reader sum the
two, which doubled the detune; the element tuning is now left neutral.
When reading performances, the performance source was added to the
result list inside the part loop instead of after it, so a multi-part
performance was output once per part.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…yout, the cutoff velocity modulator and the group panning (#261)

* Logic EXS24: fix the velocity sensitivity, the new-parameter block layout, the cutoff velocity modulator and the group panning

The velocity sensitivity of the volume envelope was read and written
inverted (-60dB means full sensitivity but was treated as none), so a
written EXS did not respond to velocity in Logic although a round trip
masked the defect. The parameters with IDs above 255 were written with
all IDs first and all values afterwards while the reader and Logic
expect interleaved records, and the padding loop wrote 4 zero bytes
per unused slot into the value stream of the old parameter block -
the envelope delay and the attack slope were lost from every written
file. The velocity modulation of the filter cutoff was formatted but
never added to the file. The panning of a group was decoded from two's
complement a second time although the group already decodes it when
read, which sent every left-panned group hard left.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…unt source (#260)

* Waldorf QPAT: fix the pitch matrix amount offset and the velocity amount source

The amount of a matrix entry routing a free envelope to the oscillator
pitch was decoded with an offset of -1.0 although the creator encodes
the amount as value = depth + 0.5, so every positive amount was read
as a negative one (+50% as -25%) and +100% was read as 0 and dropped.
The creator also wrote AmpVeloAmount from the amplitude envelope
modulation depth instead of the velocity modulation amount of the
zone, which turned a source with 0% velocity sensitivity into +100%.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…defects (#259)

* 1010music: fix the blackbox loop cross-fade attribute and four bento defects

The loop cross-fade of a blackbox pad was read from the loop-end
attribute instead of the fade-amount attribute, so virtually every
looped pad got a cross-fade spanning the entire loop. In a bento
project an OMNI performance instrument was written with MIDI input
channel 'Off' (the blackbox got the same fix in 19.1.0), the loop type
and cross-fade of a cell were assigned from themselves instead of the
default loop (ping-pong loops read as forward), the sample length was
treated as an absolute end position although it is the play-back
length, and the root velocity was written as half the width of the
velocity range instead of its mid-point.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
… on the boundary key (#258)

* Elektron Tonverk: do not let adjacent multi-sample key ranges overlap on the boundary key

The upper bound of a zone and the lower bound of the following zone
evaluated the identical mid-point expression, so both zones owned the
boundary key: a chromatic multi-sample double-triggered nearly every
note with a copy transposed one semitone down. The lower bound now
continues one key above the previous zone's upper bound, exactly like
the velocity ranges already did.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
… signed parameters signed and let envelope value 0 be instant (#257)

* Roland S-7xx: add the panning stages instead of multiplying, read the signed parameters signed and let envelope value 0 be instant

The three panning stages (patch, partial and sample mix) were
multiplied, so a centered stage - the default - erased the panning of
all others: the stereo image of every factory patch built from
hard-panned sample pairs collapsed to doubled mono. On the Northstar
Drumscapes library CD-ROM all 3765 panned zones were read dead center;
they now carry their pans.

Five signed parameters (TVF envelope depth, pitch envelope depth,
cutoff velocity sensitivity, cutoff key follow, TVA level key follow -
all documented -63..63 and read signed in their sibling fields) were
read unsigned, inverting and overranging every negative value.

The envelope time law missed that 0 means instant, so every stage was
at least 302 ms long - including a fabricated 302 ms delay before
every note, which 3204 zones of the same CD-ROM carried into the
converted files. The identical law of the MV-8000 already handles the
0 case. Envelope times which are really programmed are unchanged.

A loop cross-fade was fabricated from the fractional address bytes of
the loop points; the S-7xx has no loop cross-fade parameter.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…e crossfade mix-ups (#256)

* NI Kontakt: fix the Kontakt 1 cutoff scale, the NKM clip key and three crossfade mix-ups

The filter cutoff of a Kontakt 1 file is stored logarithmically
normalized to [0..1] but was read as a frequency in Hertz - a
mid-range filter became a low-pass below 1 Hz and the converted preset
was practically silent. Writing was already correct, which is why
round trips through ConvertWithMoss hid it.

The upper key limit of an instrument in a Kontakt 1 multi was stored
via setClipKeyLow, so the clip range became [high..127] and
destinations which apply it dropped or mis-clipped most zones.

The upper velocity crossfade of a written Kontakt 1 file was
calculated from the lower velocity crossfade value; the loop
cross-fade was the cross-fade fraction (0..1) cast to a whole number,
so every cross-fade became 0 samples although the field is a length in
samples; and the lower velocity crossfade of a Kontakt 4.2/5+ zone was
read from the lower key crossfade field (the velocity getter existed
unused).

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…ance decade and keep negative envelope amounts (#255)

* SoundFont 2: apply preset-level generators to defaults, fix the resonance decade and keep negative envelope amounts

Generators which only appear on the preset level were dropped entirely
when the instrument level did not carry the same generator, although
the specification defines them as offsets to the default value in that
case. A preset whose global zone transposes a plain instrument down an
octave was read an octave too high, preset-level attenuation and
envelope offsets vanished, and a preset-level filter offset never
created a filter. The offset is now applied to the instrument value or
to the generator's default, and it is sign-converted on the unsigned
lookup path as well.

The filter resonance was read as centibels divided by 100 instead of
10, so every resonance came out ten times too small and each round
trip divided it by ten again; writing was already correct.

Negative pitch and filter envelope modulation amounts (downward
sweeps) were dropped when writing although both generators are signed
in the format and reading them was already correct.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…ection (#254)

* WAV: decode and encode the sample chunk's unity note in the right direction

The sample chunk stores a note with a negative fine tuning as the next
higher unity note with the complementary positive fraction. The
correction was applied in the wrong direction on both sides: reading
added 1 to the unity note where 1 must be subtracted, writing
subtracted where it must add. The two errors cancelled between our own
reader and writer, which is why round trips never showed it - but any
WAV from another tool whose pitch fraction is above 50 cents was read
two semitones off, and every written WAV with a negative fine tuning
carried a unity note two semitones below what conforming samplers
expect.

Additionally the fine-tuning merge in WavFileSampleData was not gated
on the root being unset, so a sample chunk with a fraction above 50
cents overwrote the root key which the preset format itself supplied -
a Bitwig multisample zone with an explicit root ended up more than two
octaves off. The chunk's root key and fine tuning are now only used
when the format does not provide a root of its own.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…brary CD-ROM banks (#252)

* E-mu Emulator III: repair the truncated zone sample indices of the library CD-ROM banks

Many banks of the E-mu library CD-ROMs were mastered with a tool chain
which wrote the 16 bit sample number of a zone through 8 bits: the low
byte is the true sample slot modulo 256, the high byte is zero or stale
garbage. A preset whose samples sit above slot 256 therefore played
completely unrelated material and a number whose garbage high byte
survived pointed outside of the bank and lost the zone.

The true slot is inferred per preset from the note names which the E-mu
sample names carry, the preset name occurring in the sample names and
the feasibility of each 256-page against the sample table; a preset
whose evidence is ambiguous keeps its stored numbers. Across the eight
library CD-ROMs this repairs 4756 sample references in 821 presets of
32 banks and brings the missing-sample reports down from 641 to 37; all
other banks are read bit-identically to before.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
…249)

* ISO/IMG: read the Emulator III images of the shared E-mu filesystem

An image which uses the proprietary E-mu disk filesystem was handed to
the Emulator IV alone. The EIII, EIIIX and ESI samplers write the same
filesystem, so a CD-ROM of theirs was identified correctly and then
rejected with 'No Emulator IV banks found' - the generic format could not
read the very images the E-mu Emulator III format reads directly.

Both formats are tried on such an image now. Neither can read the banks
of the other, so a format which finds nothing only means the image
belongs to the other one; the image is reported as empty only when both
come up empty. Reading the banks was split out of the two detectors so
that they no longer report an empty image themselves.

Verified on 'EIIIX Vol. 13 Dance 2000': 755 presets through the ISO/IMG
format where it found none before, and the E-mu Emulator IV images are
unchanged at 2885 presets over two CD-ROMs.

The filesystem is also named 'E-mu Emulator III/EOS' now instead of only
'E-mu EOS', which claimed the wrong sampler for half of these images.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
git-moss pushed a commit that referenced this pull request Jul 29, 2026
* E-mu Emulator III: do not create a filter which cannot be heard

A low-pass parked above the audible range only counted as the bypass
state of the samplers when the resonance, the envelope amount, the key
tracking and the velocity amount were all zero. Many banks leave their
default velocity-to-cutoff or key tracking in place, so those zones still
got a filter - written at the maximum cutoff the destination allows,
where it changes nothing but does split an instrument into separate
modulation sets. The reported 'VFX Miami Pad' is four zones of which
three sit at the fully open 0xEF; they carry velocity 71 and tracking
0x40 and therefore kept a filter at Renoise's maximum of 127.

Only a negative envelope or velocity amount lowers the cutoff, and the
key tracking lowers it below the root key, so the smaller of the cutoff
and its value at the lowest key of the zone decides. Taking the smaller
of the two matters: a positive tracking must never lift a cutoff which is
audible at the root over the limit.

Measured over four library CD-ROMs: 19201 of the 23327 filters at or
above 20 kHz are dropped and every one of the 10333 audible filters is
kept, unchanged in number before and after.

* Move the changelog entry to the collected changelog PR #283

The open fix PRs all inserted their changelog entries near the same
lines, so every merged PR turned the remaining ones into conflicts.
The entries of the whole batch are collected in PR #283 and quoted in
each PR's description; the fix branches no longer touch the changelog,
so they merge cleanly in any order.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants