Only float32 goes to the pedal untouched (fixes #44) - #45
Merged
Conversation
A beta tester imported a 16-bit 44.1 kHz stereo WAV, the app accepted it without a word, and the pedal would not play the memory. His 24-bit files from the same source played fine — and that was the misleading part: a 24-bit DAW export is WAVE_FORMAT_EXTENSIBLE, which this gate already refused, so those files went through the converter and reached the pedal as float32. What differed between working and not working was conversion, not bit depth. The accepted-format set came from rc5cat, which cites Roland's import documentation for 16- and 24-bit support. Nobody on our side ever measured it against a pedal. This is the first report from real hardware and it says the documentation is wrong, so the rule is now what we can prove: the pedal plays back the format it records, float32, and that is the only shape we hand it untouched. Everything else takes the converter that already works. Verified on the tester's actual file: 16-bit PCM, 44.1 kHz, stereo, real audio, structurally spotless — accepted as-is before this change, refused by the gate after it, which is what sends it to the converter instead. The suites moved with the rule rather than around it: the upload validation now expects PCM to be refused, the import suite gains the reported case (plain 16-bit stereo 44.1 must come out float32 with its frame count intact), and the command fixtures became float32 — which is also what the pedal actually writes, so the size arithmetic they carry is now named (frame bytes, source header, canonical header) instead of assuming 16-bit.
This was referenced Aug 30, 2026
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.
Closes #44.
A beta tester's 16-bit 44.1 kHz stereo WAV was accepted without a word and
the pedal would not play the memory. His 24-bit files worked — and that was
the misleading part: 24-bit DAW exports are
WAVE_FORMAT_EXTENSIBLE, whichthe gate already refused, so those went through the converter and arrived as
float32. What differed between working and not was conversion, not bit
depth.
The accepted-format set came from rc5cat, which cites Roland's import
documentation for 16/24-bit support. Nobody on our side had measured it.
Measured on hardware
Two empty slots on a real RC-5, identical audio, only the format differing.
Both files landed on the card and neither was rewritten when the pedal left
storage and re-indexed. What the pedal then says about them:
The pedal's indexer discards the 16-bit take and accepts the float32 one.
The change
assertUploadablenow accepts only float32 — the format the pedal recordsin — so everything else takes the converter that already works and that made
the tester's 24-bit files play.
pedalAcceptsAsIssimply stops saying yes;no new code in the import path.
Tests moved with the rule, not around it
come out float32 with its frame count intact
and the size arithmetic they carry is now named (frame bytes, source
header, canonical header) rather than assuming 16-bit geometry
16/16 suites pass.