ebu / ear-production-suite

The EAR Production Suite is a set of VST® plugins and tools for producing immersive and personalizable audio content suitable for any Next Generation Audio codec. It is based on the Audio Definition Model (ITU-R BS.2076) and the ITU ADM Renderer (ITU-R BS.2127) and enables monitoring on any ITU-R BS.2051 loudspeaker configuration.
https://ear-production-suite.ebu.io/
GNU General Public License v3.0
101 stars 19 forks source link

Support FX renaming #240

Closed firthm01 closed 1 year ago

firthm01 commented 1 year ago

REAPER now allows the user to rename FX, which is going to mess up any calls to;

int TrackFX_GetByName(MediaTrack* track, const char* fxname, bool instantiate ) bool TrackFX_GetFXName(MediaTrack* track, int fx, char* bufOut, int bufOut_sz )

There is currently (at v6.74) no API function to get the original name rather than the user-specified name. It can however be derived by parsing the tracks state chunk using;

bool GetTrackStateChunk(MediaTrack* track, char* strNeedBig, int strNeedBig_sz, bool isundoOptional )

This will return something like;

<TRACK
NAME ""
PEAKCOL 16576
BEAT -1
AUTOMODE 0
VOLPAN 1 0 -1 -1 1
MUTESOLO 0 0 0
IPHASE 0
PLAYOFFS 0 1
ISBUS 0 0
BUSCOMP 0 0 0 0 0
SHOWINMIX 1 0.6667 0.5 1 0.5 0 -1 0
REC 0 0 0 0 0 0 0
VU 2
TRACKHEIGHT 0 0 0 0 0 0
INQ 0 0 0 0.5 100 0 0 100
NCHAN 64
FX 1
TRACKID {BD8FCB16-184B-4852-83A2-A916009600D0}
PERF 0
MIDIOUT -1
MAINSEND 1 0
<FXCHAIN
SHOW 0
LASTSEL 0
DOCKED 0
BYPASS 0 0 0
<VST "VST3: EAR Object (EBU)" "EAR Object.vst3" 0 "Custom Name" 1933719658{ABCDEF019182FAEB4542552045505311} ""
ajhCc+5e7f4CAAAAAQAAAAAAAAACAAAAAAAAAEAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAA
QAAAAAAAAACAAAAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAA
AAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgJ0BAAABAAAA//8QgA==
jQEAAAEAAABWQzIhSAEAADw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+IDxPYmplY3RzUGx1Z2luIGNvbm5lY3Rpb25faWQ9IjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCIgcm91dGluZz0iLTEiIGdhaW49IjAuMCIgYXppbXV0aD0iMC4wIiBlbGV2YXRpb249IjAuMCIgZGlzdGFuY2U9IjEuMCIgbGlua19zaXplPSIwIiBzaXpl
PSIwLjAiIHdpZHRoPSIwLjAiIGhlaWdodD0iMC4wIiBkZXB0aD0iMC4wIiBkaWZmdXNlPSIwLjAiIGRpdmVyZ2VuY2U9IjAiIGZhY3Rvcj0iMC4wIiByYW5nZT0iNDUuMCIgdXNlX3RyYWNrX25hbWU9IjEiIG5hbWU9IlRyYWNrIDEiLz4AAAAAAAAAAABKVUNFUHJpdmF0ZURhdGEAAQFCeXBhc3MAAQEDAB0AAAAAAAAASlVDRVByaXZhdGVEYXRhAAAAAAAAAAA=
AFByb2dyYW0gMQAQAAAA
>
PRESETNAME "Program 1"
FLOATPOS 1944 -62 616 512
FXID {159FD704-E101-42BC-A4D2-8F3F263F5160}
WAK 0 0
BYPASS 0 0 0
<VST "VST3: EAR Object (EBU)" "EAR Object.vst3" 0 SingleWord 1933719658{ABCDEF019182FAEB4542552045505311} ""
ajhCc+5e7f4CAAAAAQAAAAAAAAACAAAAAAAAAEAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAA
QAAAAAAAAACAAAAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAA
AAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgJ0BAAABAAAA//8QAA==
jQEAAAEAAABWQzIhSAEAADw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+IDxPYmplY3RzUGx1Z2luIGNvbm5lY3Rpb25faWQ9IjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCIgcm91dGluZz0iLTEiIGdhaW49IjAuMCIgYXppbXV0aD0iMC4wIiBlbGV2YXRpb249IjAuMCIgZGlzdGFuY2U9IjEuMCIgbGlua19zaXplPSIwIiBzaXpl
PSIwLjAiIHdpZHRoPSIwLjAiIGhlaWdodD0iMC4wIiBkZXB0aD0iMC4wIiBkaWZmdXNlPSIwLjAiIGRpdmVyZ2VuY2U9IjAiIGZhY3Rvcj0iMC4wIiByYW5nZT0iNDUuMCIgdXNlX3RyYWNrX25hbWU9IjEiIG5hbWU9IlRyYWNrIDEiLz4AAAAAAAAAAABKVUNFUHJpdmF0ZURhdGEAAQFCeXBhc3MAAQEDAB0AAAAAAAAASlVDRVByaXZhdGVEYXRhAAAAAAAAAAA=
AFByb2dyYW0gMQAQAAAA
>
PRESETNAME "Program 1"
FLOATPOS 1944 -62 742 738
FXID {66EFE191-C8CE-4786-8C38-4BE42D751146}
WAK 0 0
BYPASS 0 0 0
<VST "VST3: EAR Object (EBU)" "EAR Object.vst3" 0 `'quote' "Marks" 'lol'` 1933719658{ABCDEF019182FAEB4542552045505311} ""
ajhCc+5e7f4CAAAAAQAAAAAAAAACAAAAAAAAAEAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAA
QAAAAAAAAACAAAAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAA
AAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgJ0BAAABAAAA//8QAA==
jQEAAAEAAABWQzIhSAEAADw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+IDxPYmplY3RzUGx1Z2luIGNvbm5lY3Rpb25faWQ9IjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCIgcm91dGluZz0iLTEiIGdhaW49IjAuMCIgYXppbXV0aD0iMC4wIiBlbGV2YXRpb249IjAuMCIgZGlzdGFuY2U9IjEuMCIgbGlua19zaXplPSIwIiBzaXpl
PSIwLjAiIHdpZHRoPSIwLjAiIGhlaWdodD0iMC4wIiBkZXB0aD0iMC4wIiBkaWZmdXNlPSIwLjAiIGRpdmVyZ2VuY2U9IjAiIGZhY3Rvcj0iMC4wIiByYW5nZT0iNDUuMCIgdXNlX3RyYWNrX25hbWU9IjEiIG5hbWU9IlRyYWNrIDEiLz4AAAAAAAAAAABKVUNFUHJpdmF0ZURhdGEAAQFCeXBhc3MAAQEDAB0AAAAAAAAASlVDRVByaXZhdGVEYXRhAAAAAAAAAAA=
AFByb2dyYW0gMQAQAAAA
>
PRESETNAME "Program 1"
FLOATPOS 1944 -62 742 738
FXID {24D3CD65-1A9A-44D6-B8A1-5FBC65C39DD5}
WAK 0 0
BYPASS 0 0 0
<VST "VST3: EAR Object (EBU)" "EAR Object.vst3" 0 '"just in quotes"' 1933719658{ABCDEF019182FAEB4542552045505311} ""
ajhCc+5e7f4CAAAAAQAAAAAAAAACAAAAAAAAAEAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAA
QAAAAAAAAACAAAAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAA
AAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgJ0BAAABAAAA//8QAA==
jQEAAAEAAABWQzIhSAEAADw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+IDxPYmplY3RzUGx1Z2luIGNvbm5lY3Rpb25faWQ9IjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCIgcm91dGluZz0iLTEiIGdhaW49IjAuMCIgYXppbXV0aD0iMC4wIiBlbGV2YXRpb249IjAuMCIgZGlzdGFuY2U9IjEuMCIgbGlua19zaXplPSIwIiBzaXpl
PSIwLjAiIHdpZHRoPSIwLjAiIGhlaWdodD0iMC4wIiBkZXB0aD0iMC4wIiBkaWZmdXNlPSIwLjAiIGRpdmVyZ2VuY2U9IjAiIGZhY3Rvcj0iMC4wIiByYW5nZT0iNDUuMCIgdXNlX3RyYWNrX25hbWU9IjEiIG5hbWU9IlRyYWNrIDEiLz4AAAAAAAAAAABKVUNFUHJpdmF0ZURhdGEAAQFCeXBhc3MAAQEDAB0AAAAAAAAASlVDRVByaXZhdGVEYXRhAAAAAAAAAAA=
AFByb2dyYW0gMQAQAAAA
>
PRESETNAME "Program 1"
FLOATPOS 1944 -62 742 738
FXID {493829B3-8224-4E57-AC50-ED2C5E652E31}
WAK 0 0
BYPASS 0 0 0
<VST "VST3: EAR Object (EBU)" "EAR Object.vst3" 0 "" 1933719658{ABCDEF019182FAEB4542552045505311} ""
ajhCc+5e7f4CAAAAAQAAAAAAAAACAAAAAAAAAEAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAA
QAAAAAAAAACAAAAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAA
AAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgJ0BAAABAAAA//8QAA==
jQEAAAEAAABWQzIhSAEAADw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+IDxPYmplY3RzUGx1Z2luIGNvbm5lY3Rpb25faWQ9IjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCIgcm91dGluZz0iLTEiIGdhaW49IjAuMCIgYXppbXV0aD0iMC4wIiBlbGV2YXRpb249IjAuMCIgZGlzdGFuY2U9IjEuMCIgbGlua19zaXplPSIwIiBzaXpl
PSIwLjAiIHdpZHRoPSIwLjAiIGhlaWdodD0iMC4wIiBkZXB0aD0iMC4wIiBkaWZmdXNlPSIwLjAiIGRpdmVyZ2VuY2U9IjAiIGZhY3Rvcj0iMC4wIiByYW5nZT0iNDUuMCIgdXNlX3RyYWNrX25hbWU9IjEiIG5hbWU9IlRyYWNrIDEiLz4AAAAAAAAAAABKVUNFUHJpdmF0ZURhdGEAAQFCeXBhc3MAAQEDAB0AAAAAAAAASlVDRVByaXZhdGVEYXRhAAAAAAAAAAA=
AFByb2dyYW0gMQAQAAAA
>
PRESETNAME "Program 1"
FLOATPOS 1944 -62 742 738
FXID {17FB49CB-DDA3-41B4-BAF3-9365DF7AC29C}
WAK 0 0
>
>

Care needs to be taken with quote marks. In this case there were 5 EAR Object plugins (to understand quotes and escaping). They were named;

Custom Name
SingleWord
`quote` "Marks" 'lol'
"just in quotes"

...with the final one having no custom name.

firthm01 commented 1 year ago

Note that FX can also be renamed in the plug-in selection window, which makes the state chunk appear as follows;

<VST "VST3: blahblah" "EAR Object.vst3" 0 "" 1933719658{ABCDEF019182FAEB4542552045505311} ""
ajhCc+5e7f4CAAAAAQAAAAAAAAACAAAAAAAAAEAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAA
QAAAAAAAAACAAAAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAQAAAAAAAAACAAAAAAAAA
AAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgJ0BAAABAAAA//8QAA==
jQEAAAEAAABWQzIhSAEAADw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+IDxPYmplY3RzUGx1Z2luIGNvbm5lY3Rpb25faWQ9IjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCIgcm91dGluZz0iLTEiIGdhaW49IjAuMCIgYXppbXV0aD0iMC4wIiBlbGV2YXRpb249IjAuMCIgZGlzdGFuY2U9IjEuMCIgbGlua19zaXplPSIwIiBzaXpl
PSIwLjAiIHdpZHRoPSIwLjAiIGhlaWdodD0iMC4wIiBkZXB0aD0iMC4wIiBkaWZmdXNlPSIwLjAiIGRpdmVyZ2VuY2U9IjAiIGZhY3Rvcj0iMC4wIiByYW5nZT0iNDUuMCIgdXNlX3RyYWNrX25hbWU9IjEiIG5hbWU9IlRyYWNrIDEiLz4AAAAAAAAAAABKVUNFUHJpdmF0ZURhdGEAAQFCeXBhc3MAAQEDAB0AAAAAAAAASlVDRVByaXZhdGVEYXRhAAAAAAAAAAA=
AFByb2dyYW0gMQAQAAAA
>

Therefore, we can not rely on the first string - we could use the filename. Filename could obviously change too, but I think that's the least likely to change (and users should probably expect some issues if they start renaming essential components). The ideal solution is to compare plug-in IDs. This is where #122 would certainly help.

firthm01 commented 1 year ago

If the user renames the plug-in in the plug-in selection window, then this will also break import since int TrackFX_AddByName(MediaTrack* track, const char* fxname, bool recFX, int instantiate ) can not find the relevant plug-ins. It does at least fail gracefully. With this in mind, it's probably OK to accept that renaming the plug-ins in the plug-in selection window will break things and not try to cover that case.

firthm01 commented 1 year ago

Raised here; https://forum.cockos.com/showthread.php?p=2654474#post2654474