
https://cleveraudio.org/
https://github.com/free-audio/clap
https://github.com/free-audio/clap/blob/main/include/clap/clap.h
https://nakst.gitlab.io/tutorial/clap-part-1.html

https://developer.apple.com/documentation/corefoundation/1537154-cfbundlecreate?language=occ
https://developer.apple.com/documentation/corefoundation/1537154-cfbundlecreate
https://developer.apple.com/documentation/corefoundation/1537120-cfbundlegetdatapointerforname?language=occ
https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/uid/20001148-103029


clap-main/include/clap/entry.h : "a CLAP host must query the environment
// for a CLAP_PATH variable, which is a list of directories formatted in the same manner as the host
// OS binary search path (PATH on Unix, separated by `:` and Path on Windows, separated by ';', as
// of this writing)."

clap-main/include/clap/factory/plugin-factory.h
clap-main/include/clap/host.h
clap-main/include/clap/events.h

clap-main/include/clap/ext/audio-ports.h
clap-main/include/clap/ext/params.h
clap-main/include/clap/ext/gui.h

~/sources/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h
~/sources/vstsdk2.4/pluginterfaces/vst2.x/aeffectx.h
~/Projects/tkclap/__ATTIC/HostVST2Events.h

(done) move ModInputFilter from tkvst2* to ../tkmidipipe/ModInputFilter.h
(done) rename HostVST2Events to HostMIDIEvents and move from tkvst2* to ../tkmidipipe/HostMIDIEvents.h
(done) ClapPlugin::queueHostMIDIEventsByFlt()
(done) query params (CLAP_EXT_PARAMS)
(done) load/save state (CLAP_EXT_STATE)
(done) support CLAP_PATH env var (in script plugin scanner)
        + ';' separator on Windows
        + ':' separator on macOS / Linux
(done) skip duplicate bundle path names (e.g. from CLAP_PATH)
(todo) support audio port in_place_pair ("allow the host to use the same buffer for input and output")
(done) does plugin.reset() also reset the parameter modulation ? (=> test ==> apparently not (TAL Reverb 4))
(done) gui
(done) gestures (move param knob) (recv'd via output_events, e.g. after loading state (Reels plugin))
(done) process.transport (currently NULL==free running host)
        + tempo / bpm
        + song pos (beats / #quarters since replay start)
(done) clap.tks
(done) clapscan.tks
(done) claprescan.tks
        ! call "tks eureka rescan_clap"
(done) ModClap.tks
(done) ModGridCLAPButton.tks
(done) GenericParamDialogClap.tks
(done) PageTrack modmatrix (+relative param / mod support)
(done) CLAPPlugin::isParameterStepped() (GenericParamDialogClap / ModMatrixEntryForm) (step=1)
(done) automation queue
        + underrun issues with certain plugins (e.g. DIVA works, Reels and Twin 3 lag)
           ! does not occur when skipping onCallParamEdit / onCallAutomate
           ! does not occur when skipping SysEx.SendRemoteParamNotify() (in ProcessAutomateQueue())
           ! MIDIOutDevice::sysEx() locks =replay= 
              + use per-device mutex (mtx_buffers)
                 + also update Synergy STX_MIDIOutDevice
(done) macos key events
(done) win32 key events
(done) rename tkclap_macos to tkclap and refactor native window handling
(done) tkclap windows (tkclap_window_win32.cpp)
(done) modmatrix: support min/max parameter ranges (e.g. Diva)
(done) modmatrix: support asym mode for non-relative parameters (CLAP only)
(done) parameter value strings (parameterValueToText(), parameterTextToValue()) (printParamValue())
(done) psystem<win32>: (windows11) must prefix .bat with "@echo off" (or it will print the executable name + args)
        + Eureka: clap.tks (scan)
        + SampleView: rubberband
        + SampleView: sox
        + Synergy: PageAudioTool
(actv) test VRR, LPC, MPE
(done) report latency (ext_latency, context menu)
(actv) Linux build (no UI / -DSKIP_CLAP_UI, GenericParamEdit fall back)
(done) skip duplicate plugin entries (e.g. when using CLAP_PATH) (FindCLAPBundleEntryByPathName())
