|
| | InsertionEffect (const RomImage &rom) |
| | ~InsertionEffect () |
| | InsertionEffect (InsertionEffect &&) noexcept |
| InsertionEffect & | operator= (InsertionEffect &&) noexcept |
| const std::vector< EfxRecord > & | directory () const |
| | The directory, in file order: 65 named types plus the blank "no effect" record.
|
| void | select_type (int msb, int lsb) |
| | Selects a type by its GS key and loads its defaults, exactly as 40 03 00/01 does.
|
| void | set_parameter (int address, int value) |
| | Writes one byte of the 40 03 block, addresses 0x03–0x1E.
|
| const EfxRecord & | current () const |
| | The record currently selected, or the "no effect" record before any selection.
|
| bool | implemented () const |
| | Whether the selected type's processor has been transcribed.
|
| double | reverb_send () const noexcept |
| | The block's common send levels, 40 03 17–19, as linear gains on the block's output.
|
| double | chorus_send () const noexcept |
| double | delay_send () const noexcept |
| void | process (std::span< const float > in_left, std::span< const float > in_right, std::span< float > out_left, std::span< float > out_right) |
| | Processes one block in place: EFX-part dry in, effect out.
|
| void | reset () |
| | Clears delay lines and scratch, keeping type and parameters.
|
The GS insertion EFX block: one stereo effect ahead of the send network.
This is the subsystem the spec's scope note leaves to the downstream engine. The block-level machinery is transcribed from the engine and is the same for all 65 types: a register file of byte parameters converted to float coefficients (fx_reg_write @ 0x1800898d0, with the per-register width map and the bit-15 scale select), a per-type packed preset that fills registers 0x8A–0x1EF on selection (fx_set_algo_index @ 0x180062410), and two delay lines whose base decrements one sample per sample, so an algorithm is a program of taps at fixed offsets (fx_delayline_wrap @ 0x180089830).
The per-algorithm processors are transcribed individually, and only a first tranche exists: Thru, Overdrive and Distortion (one dataflow — the decompiled functions differ only in presets). A type whose processor has not been transcribed yet passes the signal through unchanged and reports itself via implemented(), so a host can say which effect it is not rendering rather than rendering it wrong.
Roland-derived data — the directory, the presets, the parameter curves — is decoded from the user's own DLL at runtime, like every other table in this engine. Offsets are pinned to SOUND Canvas VA 1.1.6.