|
Tabula Sonora 0.1.0
A native C++20 implementation of the Roland Sound Canvas VA synth voice
|
One record of the DLL's own insertion-effect directory. More...
#include <tabulasonora/insertion_effect.hpp>
Public Attributes | |
| std::string | name |
| Display name, exactly as the DLL spells it (Equalizer, Lo-Fi, OD / OD2, …). | |
| std::uint16_t | type_key = 0xFFFF |
| GS type key, (MSB << 8) | LSB. | |
| std::uint16_t | dispatch = 1 |
| Index into the algorithm dispatch table. | |
| std::array< std::uint8_t, 0x1C > | defaults {} |
| The 0x1C default bytes the type loads: the 20 GS parameters (40 03 03–16), the three send levels (17–19), and the internal routing bytes behind them. | |
One record of the DLL's own insertion-effect directory.
The engine names its 65 EFX types itself: a 0x28-byte record carries the display name, the GS type key 40 03 00/01 selects, the index into the algorithm dispatch table, and the default parameter block the type loads on selection. The record layout — and the fact that the Ghidra symbol lands 12 bytes into it, on the type key — is documented in the spec's FINDINGS; the directory sits at 0x181895660, 66 records, the 66th being the blank 0xFFFF "no effect assigned" state.
| std::string ts::EfxRecord::name |
Display name, exactly as the DLL spells it (Equalizer, Lo-Fi, OD / OD2, …).
| std::uint16_t ts::EfxRecord::type_key = 0xFFFF |
GS type key, (MSB << 8) | LSB.
| std::uint16_t ts::EfxRecord::dispatch = 1 |
Index into the algorithm dispatch table.
A scramble of the type order — Spectrum is type 01 01 but algorithm 6 — so it is read from the record, never inferred.
| std::array<std::uint8_t, 0x1C> ts::EfxRecord::defaults {} |
The 0x1C default bytes the type loads: the 20 GS parameters (40 03 03–16), the three send levels (17–19), and the internal routing bytes behind them.