aethersdr / aethersdr/AetherSDR
[bug] FLEX-6600 v26.9.2 — Compressor Drive and Phase parameters missing from exported Channel Strip preset JSON
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 221
- Forks
- 117
- Avg merge
- 2d 7h
- Merged PRs (30d)
- 299
Description
What happened?
When saving a Channel Strip preset in the Aetherial Audio Channel Strip, two compressor-stage parameters — Drive and Phase — are absent from the persisted preset. I confirmed this by exporting the preset to its JSON file and searching it: neither Drive nor Phase (nor any obviously-renamed equivalent field) appears anywhere in the exported file. Every other compressor parameter (threshold, ratio, attack, release, makeup gain, etc.) is present and correctly recalled. As a result, Drive and Phase always revert to their default/last-manual value on preset load, since there's simply no saved value for the loader to apply.
This means operators who rely on saved TX profiles for different scenarios (contest, ragchew, digital) lose part of their compressor voicing every time they reload a preset, and have to manually re-set Drive and Phase after every profile switch.
What did you expect?
Saving a preset should capture the full compressor state, including Drive and Phase, and the exported JSON should contain both fields — the same way it does for every other compressor parameter — so that loading the preset restores them exactly.
Steps to reproduce
Open the Aetherial Audio Channel Strip window on the TX chain.
In the Compressor stage, set Drive to a clearly non-default value and set Phase to a non-default value.
Adjust a couple of other compressor parameters as well (e.g. threshold, ratio) for comparison.
Save the current settings as a new preset.
Use Export Preset to write the preset out to a JSON file.
Open the exported JSON and search for drive and phase (or the compressor block generally).
Observe: the compressor object in the JSON contains threshold/ratio/attack/release/makeup-gain fields with the values set in step 2, but no field corresponding to Drive or Phase anywhere in the file.
Radio model & firmware
FLEX-6600, firmware 4.2.20.41343
OS & version
Windows — AetherSDR 26.9.2, Qt 6.8.3
Developer Notes
This is a save-path bug, confirmed by the exported JSON — not a load/UI-repopulation issue. Since the field is absent from the file itself, the compressor's "serialize to preset" code never reads drive/phase off the live engine/UI state in the first place.
Likely location: the compressor parameter struct/class and its serialization routine (something like a CompressorSettings/CompressorStage object with a toVariantMap()/toJson() method, or an explicit field-by-field writer used when building the Channel Strip preset for ~/.config/AetherSDR/ChannelStrip.settings / %APPDATA%\AetherSDR\AetherSDR\ChannelStrip.settings). Please verify exact file/line against current main — I don't have a direct code read confirming these paths.
This pattern (most fields present, two specific ones missing) is classic for a parameter that was added to the compressor UI/engine after the original preset field-enumeration list was written, and never back-filled into the serializer. Worth checking whether Drive and Phase were added in a later release than the rest of the compressor block.
Since the load path was never actually exercised with real data (there's nothing to load), no need to separately chase a load-side bug — fixing the serializer should be sufficient, but it'd be worth a quick sanity check that the loader would apply drive/phase correctly once present, in case both ends need updating.
Worth double-checking there isn't a second, differently-named field in the JSON that's actually supposed to be Drive or Phase under an internal name (e.g. sat, polarity, invert) — if so this is a naming/documentation issue rather than a missing field, and the report would need updating accordingly.
Diagnostic data to capture (Help → Support…):
Enable Audio (aether.audio) and DSP (aether.dsp) categories, reproduce the save/export steps, and attach the resulting log via "File an Issue."
Attach the exported preset JSON itself (from step 5 above) — this is the most direct evidence for a maintainer, since it shows definitively what is and isn't captured.
Radio model & firmware
- Model: FLEX-6600
- Firmware: 4.2.20.41343
- Protocol: 1.4.0.0
- Callsign: AG4Q
- Serial: ..*. 144
- Connection: connected
OS & version
- AetherSDR: 26.9.2
- Qt: 6.8.3
- OS: Windows 11 Version 25H2 (kernel 10.0.26200)
- CPU: AMD Ryzen 7 7735HS with Radeon Graphics (x86_64; SSE42 AVX AVX2 FMA F16C BMI2)
- RAM: 28411 MB
- GPU: Auto (system default — no override)
- Build: Sep 6 2026
Recent log
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at the Channel Strip preset save/export entry point and trace the compressor parameter struct or class into its serialization routine, as suggested in the Developer Notes. Compare the fields written for threshold, ratio, attack, release, and makeup gain with the live Drive and Phase parameters, then sanity-check the corresponding loader. Done means an exported preset contains both values and reload restores them.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- audio-video-rtc, desktop
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 74/100