Plugins¶
Plugin parameters are stored as normalized float32 values from 0 to 1 (see plugin records). The reader converts the parameters listed here; any other parameter is printed raw with --all. compose never touches plugins: they are kept byte for byte.
Where plugins are stored:
| Where | Location | Records |
|---|---|---|
| track / bus insert slots 1–6 | FLStudioModelBA |
bmd:<Name>:<ID> with kind, column, slot 0–5, owner 2 |
| track built-in FX | FLStudioModelBA |
slot 6 Voice Isolation, 7 Dialogue Leveler, 8 Dialogue Separator, 9 Music Remixer, 10 Ducker |
| clip built-in FX | the clip's own FieldsBlob |
see Clips & edits |
Conversion formulas¶
p is the stored normalized value.
| Plugin | Parameter | UI value |
|---|---|---|
| De-Esser | BMDDeesser::RANGE (frequency) |
700 · (9000 / 700)^p Hz, shown with 3 significant digits |
BMDDeesser::AMOUNT |
100 · p % | |
BMDDeesser::MODE |
0 = narrow band, 0.5 = centered bell | |
Deesser::REACTION |
0.5 = medium (only value seen) | |
BMDDeesser::ESS_ONLY |
flag (“S only”) | |
| Vocal Channel | BMDVocalChannel::COMP_THRES |
−40 + 40p dB |
BMDVocalChannel::COMP_RATIO |
1.1 + 5.9p (x:1) |
|
BMDVocalChannel::COMP_GAIN |
20p dB | |
BMDVocalChannel::COMP_REACTION |
as-is (0–1) | |
HPF_IN / EQ_IN / COMP_IN |
flags (high-pass, EQ, compressor sections) | |
| Limiter | BMDLimiter::INPUT_GAIN |
−18 + 36p dB |
BMDLimiter::THRESHOLD (ceiling) |
−24 + 24p dBTP | |
BMDLimiter::RELEASE |
lookup: 0.8829 = 190.55 ms (only value calibrated) | |
BMDLimiter::SOFT |
flag | |
| Voice Isolation (track built-in slot 6, or clip) | BMDVoiceIsolationControl::DRY_MIX |
100 · p = amount (37 → 0.3701, 82 → 0.8201, 55 → 0.55) |
| Dialogue Leveler (clip) | UI_BAS_PRESET |
mode = 3p: 0 allow wider dynamics, 1 optimize moderate levels, 2 more lift for low levels, 3 lift soft whispery sources |
UI_ADV_RIDER_ON / UI_BAS_LIFTER_ON / UI_BAS_CLEANER_ON |
flags: reduce loud dialogue / lift soft dialogue / background reduction | |
UI_BAS_OUTPUT_GAIN |
6p dB (range 0–6 dB) |
A flag is ON when p ≥ 0.5. A lookup value that is not in the table prints 未較正(raw=…).
Generated from the map¶
| Plugin | Parameter | Label | Kind | Stored value → UI | Mark |
|---|---|---|---|---|---|
| Voice Isolation | BMDVoiceIsolationControl::DRY_MIX |
amount |
linear | 0 + (100 − 0) × p | ² two_point |
| Dialogue Leveler | UI_BAS_PRESET |
mode |
enum | 0 → 0 ALLOW_WIDER_DYNAMICS, 0.333333 → 1 OPTIMIZE_MODERATE_LEVELS, 0.666667 → 2 MORE_LIFT_FOR_LOW_LEVELS, 1 → 3 LIFT_SOFT_WHISPERY_SOURCES | direct |
| Dialogue Leveler | UI_ADV_RIDER_ON |
reduce_loud |
flag | ≥ 0.5 = on | direct |
| Dialogue Leveler | UI_BAS_LIFTER_ON |
lift_soft |
flag | ≥ 0.5 = on | direct |
| Dialogue Leveler | UI_BAS_CLEANER_ON |
background_reduction |
flag | ≥ 0.5 = on | direct |
| Dialogue Leveler | UI_BAS_OUTPUT_GAIN |
output_gain |
linear | 0 + (6 − 0) × p dB | ² two_point |
| De-Esser | BMDDeesser::RANGE |
freq |
log | 700 × (9000 / 700)^p Hz | ² two_point |
| De-Esser | BMDDeesser::MODE |
mode |
enum | 0 → narrow band, 0.5 → centered bell | ※ calib |
| De-Esser | BMDDeesser::AMOUNT |
amount |
linear | 0 + (100 − 0) × p % | ² two_point |
| De-Esser | Deesser::REACTION |
reaction |
enum | 0.5 → medium | ※ calib |
| De-Esser | BMDDeesser::ESS_ONLY |
s_only |
flag | ≥ 0.5 = on | direct |
| Vocal Channel | BMDVocalChannel::HPF_IN |
hp_on |
flag | ≥ 0.5 = on | direct |
| Vocal Channel | BMDVocalChannel::EQ_IN |
eq_on |
flag | ≥ 0.5 = on | direct |
| Vocal Channel | BMDVocalChannel::COMP_IN |
comp_on |
flag | ≥ 0.5 = on | direct |
| Vocal Channel | BMDVocalChannel::COMP_THRES |
threshold |
linear | -40 + (0 − -40) × p dB | ² two_point |
| Vocal Channel | BMDVocalChannel::COMP_RATIO |
ratio |
linear | 1.1 + (7 − 1.1) × p :1 | ² two_point |
| Vocal Channel | BMDVocalChannel::COMP_REACTION |
response |
linear | 0 + (1 − 0) × p | direct |
| Vocal Channel | BMDVocalChannel::COMP_GAIN |
gain |
linear | 0 + (20 − 0) × p dB | ² two_point |
| Limiter | BMDLimiter::INPUT_GAIN |
input |
linear | -18 + (18 − -18) × p dB | ² two_point |
| Limiter | BMDLimiter::THRESHOLD |
ceiling |
linear | -24 + (0 − -24) × p dBTP | ² two_point |
| Limiter | BMDLimiter::RELEASE |
release |
enum | 0.882927 → 190.55 ms | ※ calib |
| Limiter | BMDLimiter::SOFT |
soft |
flag | ≥ 0.5 = on | direct |
Linear formulas (min + (max − min) × p) were fixed with two or more UI points and the knob scale (range) seen in the UI (two_point); lookups (calib) hold only the values that were read on the UI.
Track Voice Isolation on/off¶
The track built-in Voice Isolation (slot 6) has no on/off parameter. It is bit 0x10 of the record's u32 state flags at offset 272 from the tag:
Bit 0x10 |
Meaning |
|---|---|
| clear | enabled |
| set | disabled — the amount stays stored |
- Verified by toggling it in the UI on two tracks: only that one byte changes (the two records are 768 bytes apart), and the amount is unchanged.
- Verified with the scripting API
Timeline.SetVoiceIsolationState: the API then reports amount 0 for a disabled track, although the stored amount stays. - The parameter registry (marker
0x77668866) also changes, but it is not needed to read the state. - Unused built-in slots also carry
0x10. For insert plugins (2has been seen) and the other built-in FX the flags are not decoded;--allprints them asstate_flags.
The reader prints it as Voice Isolation.enabled (ON / OFF), usable in --expect.
Not decoded¶
- Plugin bypass (insert slots).
- Track-level Dialogue Leveler settings: the track record carries no
UI_…parameters until they are set in the UI, and they cannot be set through the API. - Parameters of other plugins (Vocal Channel EQ bands, Dialogue Separator, Music Remixer, Ducker, third-party plugins): raw with
--all.