HTML5/WASM — no way to supply a bank encryption key via Studio::System::setAdvancedSettings (intended limitation?

I’m developing a web app with the help of Claude. Fmod is the core engine, and html is the front end.

I set a Bank Encryption Key in FMOD Studio (Preferences > Build) and rebuilt all banks. After that, no bank will play in the browser. I would like to know whether supplying the key is possible on this platform at all, or whether I have missed something.

Behaviour observed

  • loadBankFile returns FMOD_OK — metadata parses fine.
  • Bank::loadSampleData followed by polling getSampleLoadingState returns FMOD_OK for the call, with the state reported as FMOD_STUDIO_LOADING_STATE_ERROR.
  • Clearing the key in Studio and rebuilding makes everything work again.

That is consistent with the metadata being readable and the sample data failing to decrypt.

What I tried

Calling setAdvancedSettings before initialize(), with the key as a property on the settings object:

gStudioSystem.setAdvancedSettings({
  cbsize: 0,
  commandqueuesize: 0,
  handleinitialsize: 0,
  studioupdateperiod: 0,
  idlesampledatapoolsize: 0,
  streamingscheduledelay: 0,
  encryptionkey: "mykey"
});

This returns FMOD_OK, but bank loading behaves identically whether the key is supplied or not. getAdvancedSettings returns 31 for me, so I could not read the settings back to check.

I also verified that the banks themselves are genuinely encrypted, by diffing two builds of the same bank that differ only by the key setting: the first 38 144 bytes are byte-identical, the FSB5 magic present at that offset in the unencrypted build is absent in the encrypted one, entropy of the remainder rises from 7.95 to 7.99 bits/byte, and readable asset filenames disappear. So the Studio side is doing exactly what it should.

What made me suspect a platform limitation

Searching the strings in fmodstudio.wasm, the debug log format string for the call reads:

Studio::System::setAdvancedSettings(settings: {commandqueuesize: %u, handleinitialsize: %u, studioupdateperiod: %d, idlesampledatapoolsize: %d})

Four fields, and neither encryptionkey nor streamingscheduledelay among them. The Core equivalent in the same binary lists its full field set. encryptionkey occurs only once in the whole binary, in an unrelated group of setting-name strings.

That suggests the HTML5 binding registers a reduced version of FMOD_STUDIO_ADVANCEDSETTINGS in which the key simply is not a field — which would explain the FMOD_OK with no effect, since an unrecognised property on a JS object would be dropped silently.

Questions

  1. Is bank encryption unsupported on HTML5 by design? If so, it would be very helpful to have that stated on the Bank Encryption page in the manual, or on the HTML5 platform page — as written, neither hints at a platform restriction.
  2. If it is not by design, is there another supported route to supply the key on this platform that I have overlooked?
  3. If the field is genuinely missing from the binding, could it be added?

Either answer is fine — I mainly want to stop guessing before deciding whether to ship without encryption. Returning something other than FMOD_OK when an encryption key is required but unavailable would also have saved me a fair amount of time.

Thanks.