LV2 IRI escaping required for plug:parameter

I was privately trying to build LV2 version of Dexed and noticed that the resulting dsp.ttl does not appropriately escape characters like dot (.).

RecallFeature::getSymbolForGroup implements it correctly (it checks the symbol agains allowedCharacters). The same should be done for ParameterStorage::getIri. The fix should be simple.

Dexed has some parameters whose name contains . and thus the resulting plugin cannot be loaded by any host I tried.

Are you sure that this is the reason that the host refuses to load the plugin?

To test, I tried modifying the DSPModulePluginDemo to use the parameter IDs “input.gain” and “output.gain”. The resulting plugin loads fine in the AudioPluginHost (without emitting any turtle-related warnings from Lilv), in Carla 2.5.2, and in REAPER 6.71. I also tried pasting the generated dsp.ttl into some online TTL validators, and those didn’t raise any complaints.

It would be helpful to know the hosts you’ve used for testing, and any log/error output produced by those hosts.

Ah, to be precise it is . at the end. . in the middle is allowed, as per RDF 1.1 specification (PN_LOCAL) I confirmed with Zrythm, QTractor, JUCE AudioPluginHost. They all use lilv.

Dexed (the one I mentioned) has such a parameter whose name ends with . e.g. OSC KEY SYNC. and it results in this error. Here is what lilv within JUCE AudioPluginHost emits on the console:

error: /home/atsushi/.lv2/Dexed.lv2/dsp.ttl:71:22: subject ends with `.'
lilv_world_load_file(): error: Error loading file `file:///home/atsushi/.lv2/Dexed.lv2/dsp.ttl'

Thanks, I see now. I’ll get that fixed.

Thanks again, that’s fixed here:

1 Like