expo-juce 0.3.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1611) hide show
  1. package/README.md +34 -0
  2. package/build/index.d.ts +10 -13
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +29 -31
  5. package/build/index.js.map +1 -1
  6. package/ios/BeeperAudioEngine.h +45 -0
  7. package/ios/BeeperAudioEngine.mm +352 -0
  8. package/ios/ExpoJuce.podspec +31 -8
  9. package/ios/ExpoJuceBridge.h +12 -12
  10. package/ios/ExpoJuceBridge.m +35 -100
  11. package/ios/ExpoJuceModule.swift +74 -91
  12. package/ios/JuceConfig.h +49 -14
  13. package/ios/JuceModule_audio_basics.mm +2 -0
  14. package/ios/JuceModule_audio_devices.mm +2 -0
  15. package/ios/JuceModule_audio_formats.mm +2 -0
  16. package/ios/JuceModule_audio_processors.mm +2 -0
  17. package/ios/JuceModule_core.mm +5 -0
  18. package/ios/JuceModule_data_structures.mm +2 -0
  19. package/ios/JuceModule_dsp.mm +2 -0
  20. package/ios/JuceModule_events.mm +2 -0
  21. package/ios/JuceModule_graphics.mm +2 -0
  22. package/ios/JuceModule_gui_basics.mm +2 -0
  23. package/ios/JuceModule_gui_extra.mm +2 -0
  24. package/ios/JuceModule_harfbuzz.mm +4 -0
  25. package/ios/PolySynthProcessor.h +83 -0
  26. package/ios/PolySynthProcessor.mm +164 -0
  27. package/ios/TransportEngine.h +35 -0
  28. package/ios/TransportEngine.mm +50 -0
  29. package/ios/Voice.h +59 -0
  30. package/ios/Voice.mm +157 -0
  31. package/ios/VoiceAllocator.h +22 -0
  32. package/ios/VoiceAllocator.mm +88 -0
  33. package/ios/juce_modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp +1957 -0
  34. package/ios/juce_modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h +586 -0
  35. package/ios/juce_modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp +65 -0
  36. package/ios/juce_modules/juce_audio_devices/audio_io/juce_AudioIODevice.h +368 -0
  37. package/ios/juce_modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp +152 -0
  38. package/ios/juce_modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h +200 -0
  39. package/ios/juce_modules/juce_audio_devices/audio_io/juce_SampleRateHelpers.cpp +57 -0
  40. package/ios/juce_modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h +71 -0
  41. package/ios/juce_modules/juce_audio_devices/juce_audio_devices.cpp +277 -0
  42. package/ios/juce_modules/juce_audio_devices/juce_audio_devices.h +201 -0
  43. package/ios/juce_modules/juce_audio_devices/juce_audio_devices.mm +35 -0
  44. package/ios/juce_modules/juce_audio_devices/midi_io/juce_MidiDevices.cpp +246 -0
  45. package/ios/juce_modules/juce_audio_devices/midi_io/juce_MidiDevices.h +482 -0
  46. package/ios/juce_modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp +170 -0
  47. package/ios/juce_modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h +125 -0
  48. package/ios/juce_modules/juce_audio_devices/midi_io/ump/juce_UMPBytestreamInputHandler.h +153 -0
  49. package/ios/juce_modules/juce_audio_devices/midi_io/ump/juce_UMPU32InputHandler.h +165 -0
  50. package/ios/juce_modules/juce_audio_devices/native/java/app/com/rmsl/juce/JuceMidiSupport.java +1121 -0
  51. package/ios/juce_modules/juce_audio_devices/native/juce_ALSA_linux.cpp +1313 -0
  52. package/ios/juce_modules/juce_audio_devices/native/juce_ASIO_windows.cpp +1654 -0
  53. package/ios/juce_modules/juce_audio_devices/native/juce_Audio_android.cpp +482 -0
  54. package/ios/juce_modules/juce_audio_devices/native/juce_Audio_ios.cpp +1508 -0
  55. package/ios/juce_modules/juce_audio_devices/native/juce_Audio_ios.h +106 -0
  56. package/ios/juce_modules/juce_audio_devices/native/juce_Bela_linux.cpp +612 -0
  57. package/ios/juce_modules/juce_audio_devices/native/juce_CoreAudio_mac.cpp +2315 -0
  58. package/ios/juce_modules/juce_audio_devices/native/juce_CoreMidi_mac.mm +1280 -0
  59. package/ios/juce_modules/juce_audio_devices/native/juce_DirectSound_windows.cpp +1304 -0
  60. package/ios/juce_modules/juce_audio_devices/native/juce_HighPerformanceAudioHelpers_android.h +137 -0
  61. package/ios/juce_modules/juce_audio_devices/native/juce_JackAudio_linux.cpp +681 -0
  62. package/ios/juce_modules/juce_audio_devices/native/juce_Midi_android.cpp +1183 -0
  63. package/ios/juce_modules/juce_audio_devices/native/juce_Midi_linux.cpp +788 -0
  64. package/ios/juce_modules/juce_audio_devices/native/juce_Midi_windows.cpp +2038 -0
  65. package/ios/juce_modules/juce_audio_devices/native/juce_Oboe_android.cpp +1440 -0
  66. package/ios/juce_modules/juce_audio_devices/native/juce_OpenSL_android.cpp +1306 -0
  67. package/ios/juce_modules/juce_audio_devices/native/juce_WASAPI_windows.cpp +2032 -0
  68. package/ios/juce_modules/juce_audio_devices/native/oboe/.clang-tidy +3 -0
  69. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/AudioStream.h +706 -0
  70. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/AudioStreamBase.h +343 -0
  71. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/AudioStreamBuilder.h +670 -0
  72. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/AudioStreamCallback.h +193 -0
  73. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/Definitions.h +897 -0
  74. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/FifoBuffer.h +164 -0
  75. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/FifoControllerBase.h +112 -0
  76. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/FullDuplexStream.h +324 -0
  77. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/LatencyTuner.h +150 -0
  78. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/Oboe.h +40 -0
  79. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/OboeExtensions.h +64 -0
  80. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/ResultWithValue.h +155 -0
  81. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/StabilizedCallback.h +75 -0
  82. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/Utilities.h +99 -0
  83. package/ios/juce_modules/juce_audio_devices/native/oboe/include/oboe/Version.h +92 -0
  84. package/ios/juce_modules/juce_audio_devices/native/oboe/src/aaudio/AAudioExtensions.h +180 -0
  85. package/ios/juce_modules/juce_audio_devices/native/oboe/src/aaudio/AAudioLoader.cpp +506 -0
  86. package/ios/juce_modules/juce_audio_devices/native/oboe/src/aaudio/AAudioLoader.h +299 -0
  87. package/ios/juce_modules/juce_audio_devices/native/oboe/src/aaudio/AudioStreamAAudio.cpp +868 -0
  88. package/ios/juce_modules/juce_audio_devices/native/oboe/src/aaudio/AudioStreamAAudio.h +152 -0
  89. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/AdpfWrapper.cpp +124 -0
  90. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/AdpfWrapper.h +85 -0
  91. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/AudioClock.h +75 -0
  92. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/AudioSourceCaller.cpp +38 -0
  93. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/AudioSourceCaller.h +83 -0
  94. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/AudioStream.cpp +222 -0
  95. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/AudioStreamBuilder.cpp +224 -0
  96. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/DataConversionFlowGraph.cpp +266 -0
  97. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/DataConversionFlowGraph.h +86 -0
  98. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FilterAudioStream.cpp +106 -0
  99. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FilterAudioStream.h +227 -0
  100. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FixedBlockAdapter.cpp +38 -0
  101. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FixedBlockAdapter.h +67 -0
  102. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FixedBlockReader.cpp +73 -0
  103. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FixedBlockReader.h +60 -0
  104. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FixedBlockWriter.cpp +73 -0
  105. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/FixedBlockWriter.h +54 -0
  106. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/LatencyTuner.cpp +108 -0
  107. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/MonotonicCounter.h +112 -0
  108. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/OboeDebug.h +41 -0
  109. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/OboeExtensions.cpp +36 -0
  110. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/QuirksManager.cpp +311 -0
  111. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/QuirksManager.h +134 -0
  112. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceFloatCaller.cpp +30 -0
  113. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceFloatCaller.h +44 -0
  114. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceI16Caller.cpp +47 -0
  115. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceI16Caller.h +49 -0
  116. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceI24Caller.cpp +56 -0
  117. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceI24Caller.h +53 -0
  118. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceI32Caller.cpp +47 -0
  119. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/SourceI32Caller.h +53 -0
  120. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/StabilizedCallback.cpp +112 -0
  121. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/Trace.cpp +75 -0
  122. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/Trace.h +31 -0
  123. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/Utilities.cpp +333 -0
  124. package/ios/juce_modules/juce_audio_devices/native/oboe/src/common/Version.cpp +28 -0
  125. package/ios/juce_modules/juce_audio_devices/native/oboe/src/fifo/FifoBuffer.cpp +178 -0
  126. package/ios/juce_modules/juce_audio_devices/native/oboe/src/fifo/FifoController.cpp +30 -0
  127. package/ios/juce_modules/juce_audio_devices/native/oboe/src/fifo/FifoController.h +62 -0
  128. package/ios/juce_modules/juce_audio_devices/native/oboe/src/fifo/FifoControllerBase.cpp +68 -0
  129. package/ios/juce_modules/juce_audio_devices/native/oboe/src/fifo/FifoControllerIndirect.cpp +32 -0
  130. package/ios/juce_modules/juce_audio_devices/native/oboe/src/fifo/FifoControllerIndirect.h +66 -0
  131. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/ChannelCountConverter.cpp +52 -0
  132. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/ChannelCountConverter.h +52 -0
  133. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/ClipToRange.cpp +38 -0
  134. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/ClipToRange.h +68 -0
  135. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/FlowGraphNode.cpp +114 -0
  136. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/FlowGraphNode.h +450 -0
  137. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/FlowgraphUtilities.h +55 -0
  138. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/Limiter.cpp +67 -0
  139. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/Limiter.h +64 -0
  140. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/ManyToMultiConverter.cpp +47 -0
  141. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/ManyToMultiConverter.h +53 -0
  142. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MonoBlend.cpp +46 -0
  143. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MonoBlend.h +48 -0
  144. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MonoToMultiConverter.cpp +41 -0
  145. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MonoToMultiConverter.h +49 -0
  146. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MultiToManyConverter.cpp +47 -0
  147. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MultiToManyConverter.h +49 -0
  148. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MultiToMonoConverter.cpp +41 -0
  149. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/MultiToMonoConverter.h +49 -0
  150. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/RampLinear.cpp +81 -0
  151. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/RampLinear.h +96 -0
  152. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SampleRateConverter.cpp +71 -0
  153. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SampleRateConverter.h +63 -0
  154. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkFloat.cpp +46 -0
  155. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkFloat.h +45 -0
  156. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkI16.cpp +57 -0
  157. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkI16.h +43 -0
  158. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkI24.cpp +66 -0
  159. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkI24.h +44 -0
  160. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkI32.cpp +55 -0
  161. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SinkI32.h +40 -0
  162. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceFloat.cpp +42 -0
  163. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceFloat.h +44 -0
  164. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceI16.cpp +54 -0
  165. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceI16.h +42 -0
  166. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceI24.cpp +65 -0
  167. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceI24.h +43 -0
  168. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceI32.cpp +54 -0
  169. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/SourceI32.h +42 -0
  170. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/HyperbolicCosineWindow.h +71 -0
  171. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/IntegerRatio.cpp +50 -0
  172. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/IntegerRatio.h +54 -0
  173. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/KaiserWindow.h +90 -0
  174. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/LinearResampler.cpp +42 -0
  175. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/LinearResampler.h +47 -0
  176. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/MultiChannelResampler.cpp +171 -0
  177. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/MultiChannelResampler.h +281 -0
  178. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/PolyphaseResampler.cpp +61 -0
  179. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/PolyphaseResampler.h +53 -0
  180. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/PolyphaseResamplerMono.cpp +63 -0
  181. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/PolyphaseResamplerMono.h +41 -0
  182. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/PolyphaseResamplerStereo.cpp +79 -0
  183. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/PolyphaseResamplerStereo.h +41 -0
  184. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/ResamplerDefinitions.h +27 -0
  185. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/SincResampler.cpp +72 -0
  186. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/SincResampler.h +50 -0
  187. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/SincResamplerStereo.cpp +81 -0
  188. package/ios/juce_modules/juce_audio_devices/native/oboe/src/flowgraph/resampler/SincResamplerStereo.h +42 -0
  189. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioInputStreamOpenSLES.cpp +360 -0
  190. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioInputStreamOpenSLES.h +66 -0
  191. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioOutputStreamOpenSLES.cpp +462 -0
  192. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioOutputStreamOpenSLES.h +80 -0
  193. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioStreamBuffered.cpp +285 -0
  194. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioStreamBuffered.h +96 -0
  195. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioStreamOpenSLES.cpp +499 -0
  196. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/AudioStreamOpenSLES.h +148 -0
  197. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/EngineOpenSLES.cpp +141 -0
  198. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/EngineOpenSLES.h +65 -0
  199. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/OpenSLESUtilities.cpp +96 -0
  200. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/OpenSLESUtilities.h +44 -0
  201. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/OutputMixerOpenSLES.cpp +74 -0
  202. package/ios/juce_modules/juce_audio_devices/native/oboe/src/opensles/OutputMixerOpenSLES.h +58 -0
  203. package/ios/juce_modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp +193 -0
  204. package/ios/juce_modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h +127 -0
  205. package/ios/juce_modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp +295 -0
  206. package/ios/juce_modules/juce_audio_devices/sources/juce_AudioTransportSource.h +192 -0
  207. package/ios/juce_modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp +107 -0
  208. package/ios/juce_modules/juce_audio_processors/format/juce_AudioPluginFormat.h +183 -0
  209. package/ios/juce_modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp +212 -0
  210. package/ios/juce_modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h +151 -0
  211. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/generate_lv2_bundle_sources.py +175 -0
  212. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/juce_lv2_config.h +87 -0
  213. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/COPYING +13 -0
  214. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/lilv/lilv.h +2117 -0
  215. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/lilv/lilvmm.hpp +440 -0
  216. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/collections.c +240 -0
  217. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/filesystem.c +564 -0
  218. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/filesystem.h +182 -0
  219. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/instance.c +115 -0
  220. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/lib.c +127 -0
  221. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/lilv_internal.h +477 -0
  222. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/node.c +413 -0
  223. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/plugin.c +1140 -0
  224. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/pluginclass.c +91 -0
  225. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/port.c +272 -0
  226. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/query.c +144 -0
  227. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/scalepoint.c +53 -0
  228. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/state.c +1541 -0
  229. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/ui.c +115 -0
  230. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/util.c +291 -0
  231. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/world.c +1249 -0
  232. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/zix/common.h +138 -0
  233. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/zix/tree.c +727 -0
  234. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv/src/zix/tree.h +164 -0
  235. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lilv_config.h +42 -0
  236. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/COPYING +16 -0
  237. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/atom-test-utils.c +73 -0
  238. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/atom-test.c +367 -0
  239. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/atom.h +260 -0
  240. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/atom.meta.ttl +542 -0
  241. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/atom.ttl +247 -0
  242. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/forge-overflow-test.c +235 -0
  243. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/forge.h +683 -0
  244. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/manifest.ttl +9 -0
  245. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/atom/util.h +523 -0
  246. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/buf-size/buf-size.h +51 -0
  247. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/buf-size/buf-size.meta.ttl +157 -0
  248. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/buf-size/buf-size.ttl +67 -0
  249. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/buf-size/manifest.ttl +9 -0
  250. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/attributes.h +59 -0
  251. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/lv2.h +484 -0
  252. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/lv2_util.h +103 -0
  253. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/lv2core.meta.ttl +905 -0
  254. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/lv2core.ttl +674 -0
  255. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/manifest.ttl +15 -0
  256. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/meta.ttl +199 -0
  257. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/core/people.ttl +51 -0
  258. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/data-access/data-access.h +73 -0
  259. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/data-access/data-access.meta.ttl +77 -0
  260. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/data-access/data-access.ttl +11 -0
  261. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/data-access/manifest.ttl +9 -0
  262. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/dynmanifest/dynmanifest.h +160 -0
  263. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/dynmanifest/dynmanifest.meta.ttl +131 -0
  264. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/dynmanifest/dynmanifest.ttl +25 -0
  265. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/dynmanifest/manifest.ttl +9 -0
  266. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/event/event-helpers.h +255 -0
  267. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/event/event.h +306 -0
  268. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/event/event.meta.ttl +246 -0
  269. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/event/event.ttl +86 -0
  270. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/event/manifest.ttl +9 -0
  271. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/instance-access/instance-access.h +41 -0
  272. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/instance-access/instance-access.meta.ttl +75 -0
  273. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/instance-access/instance-access.ttl +11 -0
  274. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/instance-access/manifest.ttl +9 -0
  275. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/log/log.h +113 -0
  276. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/log/log.meta.ttl +126 -0
  277. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/log/log.ttl +48 -0
  278. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/log/logger.h +157 -0
  279. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/log/manifest.ttl +9 -0
  280. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/midi/manifest.ttl +9 -0
  281. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/midi/midi.h +248 -0
  282. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/midi/midi.meta.ttl +153 -0
  283. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/midi/midi.ttl +366 -0
  284. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/morph/manifest.ttl +9 -0
  285. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/morph/morph.h +48 -0
  286. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/morph/morph.meta.ttl +90 -0
  287. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/morph/morph.ttl +46 -0
  288. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/options/manifest.ttl +9 -0
  289. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/options/options.h +149 -0
  290. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/options/options.meta.ttl +129 -0
  291. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/options/options.ttl +44 -0
  292. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/parameters/manifest.ttl +9 -0
  293. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/parameters/parameters.h +68 -0
  294. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/parameters/parameters.meta.ttl +75 -0
  295. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/parameters/parameters.ttl +202 -0
  296. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/patch/manifest.ttl +9 -0
  297. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/patch/patch.h +73 -0
  298. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/patch/patch.meta.ttl +374 -0
  299. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/patch/patch.ttl +251 -0
  300. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-groups/manifest.ttl +9 -0
  301. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-groups/port-groups.h +77 -0
  302. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-groups/port-groups.meta.ttl +144 -0
  303. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-groups/port-groups.ttl +807 -0
  304. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-props/manifest.ttl +9 -0
  305. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-props/port-props.h +53 -0
  306. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-props/port-props.meta.ttl +202 -0
  307. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/port-props/port-props.ttl +79 -0
  308. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/presets/manifest.ttl +9 -0
  309. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/presets/presets.h +48 -0
  310. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/presets/presets.meta.ttl +132 -0
  311. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/presets/presets.ttl +60 -0
  312. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/resize-port/manifest.ttl +9 -0
  313. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/resize-port/resize-port.h +89 -0
  314. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/resize-port/resize-port.meta.ttl +74 -0
  315. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/resize-port/resize-port.ttl +36 -0
  316. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/state/manifest.ttl +9 -0
  317. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/state/state.h +392 -0
  318. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/state/state.meta.ttl +467 -0
  319. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/state/state.ttl +60 -0
  320. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/time/manifest.ttl +9 -0
  321. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/time/time.h +59 -0
  322. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/time/time.meta.ttl +112 -0
  323. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/time/time.ttl +122 -0
  324. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/ui/manifest.ttl +9 -0
  325. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/ui/ui.h +543 -0
  326. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/ui/ui.meta.ttl +627 -0
  327. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/ui/ui.ttl +248 -0
  328. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/units/manifest.ttl +9 -0
  329. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/units/units.h +75 -0
  330. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/units/units.meta.ttl +154 -0
  331. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/units/units.ttl +379 -0
  332. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/uri-map/manifest.ttl +9 -0
  333. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/uri-map/uri-map.h +121 -0
  334. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/uri-map/uri-map.meta.ttl +72 -0
  335. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/uri-map/uri-map.ttl +14 -0
  336. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/urid/manifest.ttl +9 -0
  337. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/urid/urid.h +140 -0
  338. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/urid/urid.meta.ttl +84 -0
  339. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/urid/urid.ttl +22 -0
  340. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/worker/manifest.ttl +9 -0
  341. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/worker/worker.h +183 -0
  342. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/worker/worker.meta.ttl +82 -0
  343. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/lv2/lv2/worker/worker.ttl +25 -0
  344. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/COPYING +13 -0
  345. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/serd/serd.h +1059 -0
  346. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/.clang-tidy +18 -0
  347. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/attributes.h +26 -0
  348. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/base64.c +132 -0
  349. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/base64.h +48 -0
  350. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/byte_sink.h +98 -0
  351. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/byte_source.c +112 -0
  352. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/byte_source.h +120 -0
  353. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/env.c +256 -0
  354. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/n3.c +1720 -0
  355. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/node.c +393 -0
  356. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/node.h +48 -0
  357. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/reader.c +425 -0
  358. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/reader.h +196 -0
  359. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/serd_config.h +98 -0
  360. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/serd_internal.h +46 -0
  361. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/serdi.c +377 -0
  362. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/stack.h +119 -0
  363. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/string.c +179 -0
  364. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/string_utils.h +173 -0
  365. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/system.c +82 -0
  366. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/system.h +40 -0
  367. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/uri.c +506 -0
  368. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/uri_utils.h +110 -0
  369. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd/src/writer.c +1114 -0
  370. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/serd_config.h +42 -0
  371. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/COPYING +13 -0
  372. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/sord/sord.h +642 -0
  373. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/sord/sordmm.hpp +720 -0
  374. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/sord.c +1368 -0
  375. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/sord_config.h +61 -0
  376. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/sord_internal.h +53 -0
  377. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/sord_test.c +767 -0
  378. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/sord_validate.c +804 -0
  379. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/sordi.c +216 -0
  380. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/sordmm_test.cpp +25 -0
  381. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/syntax.c +203 -0
  382. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/zix/btree.c +936 -0
  383. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/zix/btree.h +187 -0
  384. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/zix/common.h +138 -0
  385. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/zix/digest.c +141 -0
  386. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/zix/digest.h +67 -0
  387. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/zix/hash.c +230 -0
  388. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord/src/zix/hash.h +138 -0
  389. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sord_config.h +42 -0
  390. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sratom/COPYING +13 -0
  391. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sratom/sratom/sratom.h +220 -0
  392. package/ios/juce_modules/juce_audio_processors/format_types/LV2_SDK/sratom/src/sratom.c +919 -0
  393. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/VST3_License_Agreement.pdf +0 -0
  394. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/VST3_Usage_Guidelines.pdf +0 -0
  395. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp +52 -0
  396. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/classfactoryhelpers.h +87 -0
  397. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp +641 -0
  398. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.h +306 -0
  399. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fcommandline.h +392 -0
  400. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.cpp +340 -0
  401. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.h +246 -0
  402. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp +271 -0
  403. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.h +577 -0
  404. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp +756 -0
  405. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.h +242 -0
  406. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp +3962 -0
  407. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h +767 -0
  408. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp +737 -0
  409. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.h +150 -0
  410. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/thread/include/flock.h +184 -0
  411. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/base/thread/source/flock.cpp +146 -0
  412. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/helper.manifest +10 -0
  413. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.cpp +106 -0
  414. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.h +44 -0
  415. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp +40 -0
  416. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpop.h +25 -0
  417. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpush.h +40 -0
  418. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h +333 -0
  419. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h +291 -0
  420. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h +176 -0
  421. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp +502 -0
  422. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h +564 -0
  423. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h +107 -0
  424. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h +297 -0
  425. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h +87 -0
  426. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/icloneable.h +41 -0
  427. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipersistent.h +160 -0
  428. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipluginbase.h +520 -0
  429. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iplugincompatibility.h +122 -0
  430. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h +80 -0
  431. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iupdatehandler.h +98 -0
  432. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/smartpointer.h +386 -0
  433. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/typesizecheck.h +55 -0
  434. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.cpp +275 -0
  435. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.h +116 -0
  436. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugview.h +287 -0
  437. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugviewcontentscalesupport.h +75 -0
  438. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstattributes.h +150 -0
  439. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstaudioprocessor.h +434 -0
  440. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstautomationstate.h +67 -0
  441. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstchannelcontextinfo.h +238 -0
  442. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h +205 -0
  443. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcontextmenu.h +219 -0
  444. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstdataexchange.h +221 -0
  445. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h +657 -0
  446. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstevents.h +221 -0
  447. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsthostapplication.h +163 -0
  448. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstinterappaudio.h +142 -0
  449. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmessage.h +97 -0
  450. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidicontrollers.h +118 -0
  451. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidilearn.h +106 -0
  452. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstnoteexpression.h +255 -0
  453. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstparameterchanges.h +145 -0
  454. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstparameterfunctionname.h +151 -0
  455. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstphysicalui.h +169 -0
  456. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstpluginterfacesupport.h +67 -0
  457. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstplugview.h +62 -0
  458. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprefetchablesupport.h +99 -0
  459. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprocesscontext.h +153 -0
  460. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstremapparamid.h +75 -0
  461. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstrepresentation.h +364 -0
  462. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsttestplugprovider.h +109 -0
  463. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstunits.h +271 -0
  464. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstpshpack4.h +30 -0
  465. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h +1318 -0
  466. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h +157 -0
  467. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp +441 -0
  468. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp +319 -0
  469. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h +79 -0
  470. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp +100 -0
  471. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.h +116 -0
  472. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/readfile.cpp +81 -0
  473. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/readfile.h +54 -0
  474. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp +342 -0
  475. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.h +120 -0
  476. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module.cpp +340 -0
  477. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module.h +214 -0
  478. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_linux.cpp +369 -0
  479. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_mac.mm +395 -0
  480. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/module_win32.cpp +647 -0
  481. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/pluginterfacesupport.cpp +134 -0
  482. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/pluginterfacesupport.h +70 -0
  483. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/moduleinfo/json.h +3403 -0
  484. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/moduleinfo/jsoncxx.h +427 -0
  485. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/moduleinfo/moduleinfo.h +100 -0
  486. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/moduleinfo/moduleinfocreator.cpp +309 -0
  487. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/moduleinfo/moduleinfocreator.h +67 -0
  488. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/moduleinfo/moduleinfoparser.cpp +537 -0
  489. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/moduleinfo/moduleinfoparser.h +68 -0
  490. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/optional.h +135 -0
  491. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/stringconvert.cpp +148 -0
  492. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/stringconvert.h +147 -0
  493. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/utility/uid.h +286 -0
  494. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.cpp +99 -0
  495. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.h +172 -0
  496. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.cpp +216 -0
  497. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.h +118 -0
  498. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp +180 -0
  499. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.h +110 -0
  500. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp +701 -0
  501. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.h +374 -0
  502. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstinitiids.cpp +154 -0
  503. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.cpp +454 -0
  504. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.h +240 -0
  505. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.cpp +927 -0
  506. package/ios/juce_modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.h +306 -0
  507. package/ios/juce_modules/juce_audio_processors/format_types/juce_ARACommon.cpp +99 -0
  508. package/ios/juce_modules/juce_audio_processors/format_types/juce_ARACommon.h +98 -0
  509. package/ios/juce_modules/juce_audio_processors/format_types/juce_ARAHosting.cpp +490 -0
  510. package/ios/juce_modules/juce_audio_processors/format_types/juce_ARAHosting.h +786 -0
  511. package/ios/juce_modules/juce_audio_processors/format_types/juce_AU_Shared.h +588 -0
  512. package/ios/juce_modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h +79 -0
  513. package/ios/juce_modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm +2947 -0
  514. package/ios/juce_modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp +728 -0
  515. package/ios/juce_modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h +79 -0
  516. package/ios/juce_modules/juce_audio_processors/format_types/juce_LV2Common.h +676 -0
  517. package/ios/juce_modules/juce_audio_processors/format_types/juce_LV2PluginFormat.cpp +5654 -0
  518. package/ios/juce_modules/juce_audio_processors/format_types/juce_LV2PluginFormat.h +87 -0
  519. package/ios/juce_modules/juce_audio_processors/format_types/juce_LV2PluginFormat_test.cpp +281 -0
  520. package/ios/juce_modules/juce_audio_processors/format_types/juce_LV2Resources.h +10241 -0
  521. package/ios/juce_modules/juce_audio_processors/format_types/juce_LV2SupportLibs.cpp +117 -0
  522. package/ios/juce_modules/juce_audio_processors/format_types/juce_LegacyAudioParameter.cpp +225 -0
  523. package/ios/juce_modules/juce_audio_processors/format_types/juce_VST3Common.h +1851 -0
  524. package/ios/juce_modules/juce_audio_processors/format_types/juce_VST3Headers.h +280 -0
  525. package/ios/juce_modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp +4086 -0
  526. package/ios/juce_modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h +95 -0
  527. package/ios/juce_modules/juce_audio_processors/format_types/juce_VST3PluginFormat_test.cpp +740 -0
  528. package/ios/juce_modules/juce_audio_processors/format_types/juce_VSTCommon.h +315 -0
  529. package/ios/juce_modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h +229 -0
  530. package/ios/juce_modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp +3764 -0
  531. package/ios/juce_modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h +141 -0
  532. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/ipslcontextinfo.h +190 -0
  533. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/ipsleditcontroller.h +108 -0
  534. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/ipslgainreduction.h +53 -0
  535. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/ipslhostcommands.h +121 -0
  536. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/ipslviewembedding.h +53 -0
  537. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/ipslviewscaling.h +67 -0
  538. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/pslauextensions.h +57 -0
  539. package/ios/juce_modules/juce_audio_processors/format_types/pslextensions/pslvst2extensions.h +111 -0
  540. package/ios/juce_modules/juce_audio_processors/juce_audio_processors.cpp +246 -0
  541. package/ios/juce_modules/juce_audio_processors/juce_audio_processors.h +195 -0
  542. package/ios/juce_modules/juce_audio_processors/juce_audio_processors.mm +35 -0
  543. package/ios/juce_modules/juce_audio_processors/juce_audio_processors_ara.cpp +51 -0
  544. package/ios/juce_modules/juce_audio_processors/juce_audio_processors_lv2_libs.cpp +44 -0
  545. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioPluginInstance.cpp +294 -0
  546. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioPluginInstance.h +191 -0
  547. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessor.cpp +1655 -0
  548. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessor.h +1587 -0
  549. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp +230 -0
  550. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h +272 -0
  551. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorEditorHostContext.h +98 -0
  552. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp +2375 -0
  553. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h +453 -0
  554. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorListener.h +198 -0
  555. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h +370 -0
  556. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp +330 -0
  557. package/ios/juce_modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h +263 -0
  558. package/ios/juce_modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp +633 -0
  559. package/ios/juce_modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h +74 -0
  560. package/ios/juce_modules/juce_audio_processors/processors/juce_HostedAudioProcessorParameter.h +61 -0
  561. package/ios/juce_modules/juce_audio_processors/processors/juce_PluginDescription.cpp +126 -0
  562. package/ios/juce_modules/juce_audio_processors/processors/juce_PluginDescription.h +189 -0
  563. package/ios/juce_modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp +651 -0
  564. package/ios/juce_modules/juce_audio_processors/scanning/juce_KnownPluginList.h +249 -0
  565. package/ios/juce_modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp +148 -0
  566. package/ios/juce_modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h +147 -0
  567. package/ios/juce_modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp +690 -0
  568. package/ios/juce_modules/juce_audio_processors/scanning/juce_PluginListComponent.h +156 -0
  569. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARADebug.h +76 -0
  570. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARADocumentController.cpp +985 -0
  571. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARADocumentController.h +538 -0
  572. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARADocumentControllerCommon.cpp +80 -0
  573. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARAModelObjects.cpp +302 -0
  574. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARAModelObjects.h +983 -0
  575. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARAPlugInInstanceRoles.cpp +123 -0
  576. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARAPlugInInstanceRoles.h +263 -0
  577. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARA_utils.cpp +65 -0
  578. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_ARA_utils.h +95 -0
  579. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.cpp +163 -0
  580. package/ios/juce_modules/juce_audio_processors/utilities/ARA/juce_AudioProcessor_ARAExtensions.h +213 -0
  581. package/ios/juce_modules/juce_audio_processors/utilities/juce_AAXClientExtensions.cpp +308 -0
  582. package/ios/juce_modules/juce_audio_processors/utilities/juce_AAXClientExtensions.h +92 -0
  583. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterBool.cpp +104 -0
  584. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterBool.h +149 -0
  585. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterChoice.cpp +145 -0
  586. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterChoice.h +162 -0
  587. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterFloat.cpp +113 -0
  588. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterFloat.h +169 -0
  589. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterInt.cpp +146 -0
  590. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioParameterInt.h +163 -0
  591. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.cpp +56 -0
  592. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h +200 -0
  593. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp +997 -0
  594. package/ios/juce_modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h +669 -0
  595. package/ios/juce_modules/juce_audio_processors/utilities/juce_ExtensionsVisitor.h +155 -0
  596. package/ios/juce_modules/juce_audio_processors/utilities/juce_FlagCache.h +191 -0
  597. package/ios/juce_modules/juce_audio_processors/utilities/juce_ParameterAttachments.cpp +442 -0
  598. package/ios/juce_modules/juce_audio_processors/utilities/juce_ParameterAttachments.h +400 -0
  599. package/ios/juce_modules/juce_audio_processors/utilities/juce_PluginHostType.cpp +328 -0
  600. package/ios/juce_modules/juce_audio_processors/utilities/juce_PluginHostType.h +265 -0
  601. package/ios/juce_modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp +60 -0
  602. package/ios/juce_modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h +129 -0
  603. package/ios/juce_modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.cpp +48 -0
  604. package/ios/juce_modules/juce_audio_processors/utilities/juce_VST2ClientExtensions.h +83 -0
  605. package/ios/juce_modules/juce_audio_processors/utilities/juce_VST3ClientExtensions.h +119 -0
  606. package/ios/juce_modules/juce_core/native/juce_BasicNativeHeaders.h +6 -1
  607. package/ios/juce_modules/juce_graphics/colour/juce_Colour.cpp +726 -0
  608. package/ios/juce_modules/juce_graphics/colour/juce_Colour.h +429 -0
  609. package/ios/juce_modules/juce_graphics/colour/juce_ColourGradient.cpp +294 -0
  610. package/ios/juce_modules/juce_graphics/colour/juce_ColourGradient.h +255 -0
  611. package/ios/juce_modules/juce_graphics/colour/juce_Colours.cpp +205 -0
  612. package/ios/juce_modules/juce_graphics/colour/juce_Colours.h +200 -0
  613. package/ios/juce_modules/juce_graphics/colour/juce_FillType.cpp +166 -0
  614. package/ios/juce_modules/juce_graphics/colour/juce_FillType.h +165 -0
  615. package/ios/juce_modules/juce_graphics/colour/juce_PixelFormats.h +749 -0
  616. package/ios/juce_modules/juce_graphics/contexts/juce_GraphicsContext.cpp +857 -0
  617. package/ios/juce_modules/juce_graphics/contexts/juce_GraphicsContext.h +758 -0
  618. package/ios/juce_modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h +186 -0
  619. package/ios/juce_modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp +59 -0
  620. package/ios/juce_modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h +66 -0
  621. package/ios/juce_modules/juce_graphics/detail/juce_Ranges.cpp +793 -0
  622. package/ios/juce_modules/juce_graphics/detail/juce_Ranges.h +1014 -0
  623. package/ios/juce_modules/juce_graphics/effects/juce_DropShadowEffect.cpp +152 -0
  624. package/ios/juce_modules/juce_graphics/effects/juce_DropShadowEffect.h +122 -0
  625. package/ios/juce_modules/juce_graphics/effects/juce_GlowEffect.cpp +59 -0
  626. package/ios/juce_modules/juce_graphics/effects/juce_GlowEffect.h +86 -0
  627. package/ios/juce_modules/juce_graphics/effects/juce_ImageEffectFilter.h +80 -0
  628. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Color/CBDT/CBDT.hh +1031 -0
  629. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Color/COLR/COLR.hh +2745 -0
  630. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Color/COLR/colrv1-closure.hh +137 -0
  631. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Color/CPAL/CPAL.hh +358 -0
  632. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Color/sbix/sbix.hh +448 -0
  633. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Color/svg/svg.hh +152 -0
  634. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/Common/Coverage.hh +352 -0
  635. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/Common/CoverageFormat1.hh +133 -0
  636. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/Common/CoverageFormat2.hh +239 -0
  637. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/Common/RangeRecord.hh +97 -0
  638. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GDEF/GDEF.hh +1044 -0
  639. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/Anchor.hh +84 -0
  640. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/AnchorFormat1.hh +46 -0
  641. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/AnchorFormat2.hh +58 -0
  642. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/AnchorFormat3.hh +120 -0
  643. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/AnchorMatrix.hh +87 -0
  644. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/ChainContextPos.hh +14 -0
  645. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/Common.hh +33 -0
  646. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/ContextPos.hh +14 -0
  647. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/CursivePos.hh +35 -0
  648. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/CursivePosFormat1.hh +311 -0
  649. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/ExtensionPos.hh +17 -0
  650. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/GPOS.hh +171 -0
  651. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/LigatureArray.hh +57 -0
  652. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkArray.hh +128 -0
  653. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkBasePos.hh +41 -0
  654. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkBasePosFormat1.hh +243 -0
  655. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkLigPos.hh +41 -0
  656. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkLigPosFormat1.hh +224 -0
  657. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkMarkPos.hh +42 -0
  658. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkMarkPosFormat1.hh +231 -0
  659. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/MarkRecord.hh +51 -0
  660. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/PairPos.hh +46 -0
  661. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/PairPosFormat1.hh +233 -0
  662. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/PairPosFormat2.hh +365 -0
  663. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/PairSet.hh +210 -0
  664. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/PairValueRecord.hh +99 -0
  665. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/PosLookup.hh +79 -0
  666. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/PosLookupSubTable.hh +79 -0
  667. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/SinglePos.hh +98 -0
  668. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/SinglePosFormat1.hh +190 -0
  669. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/SinglePosFormat2.hh +213 -0
  670. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GPOS/ValueFormat.hh +441 -0
  671. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/AlternateSet.hh +126 -0
  672. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/AlternateSubst.hh +62 -0
  673. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/AlternateSubstFormat1.hh +128 -0
  674. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/ChainContextSubst.hh +18 -0
  675. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/Common.hh +19 -0
  676. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/ContextSubst.hh +18 -0
  677. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/ExtensionSubst.hh +22 -0
  678. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/GSUB.hh +61 -0
  679. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/Ligature.hh +203 -0
  680. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/LigatureSet.hh +188 -0
  681. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/LigatureSubst.hh +71 -0
  682. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/LigatureSubstFormat1.hh +166 -0
  683. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/MultipleSubst.hh +62 -0
  684. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/MultipleSubstFormat1.hh +130 -0
  685. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/ReverseChainSingleSubst.hh +36 -0
  686. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/ReverseChainSingleSubstFormat1.hh +245 -0
  687. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/Sequence.hh +165 -0
  688. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/SingleSubst.hh +103 -0
  689. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/SingleSubstFormat1.hh +204 -0
  690. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/SingleSubstFormat2.hh +176 -0
  691. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/SubstLookup.hh +220 -0
  692. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/GSUB/SubstLookupSubTable.hh +77 -0
  693. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Layout/types.hh +66 -0
  694. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Var/VARC/VARC.cc +346 -0
  695. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Var/VARC/VARC.hh +193 -0
  696. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/Var/VARC/coord-setter.hh +37 -0
  697. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/CompositeGlyph.hh +435 -0
  698. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/Glyph.hh +556 -0
  699. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/GlyphHeader.hh +52 -0
  700. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/SimpleGlyph.hh +348 -0
  701. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/SubsetGlyph.hh +141 -0
  702. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/composite-iter.hh +68 -0
  703. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/glyf-helpers.hh +127 -0
  704. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/glyf.hh +513 -0
  705. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/loca.hh +43 -0
  706. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/glyf/path-builder.hh +190 -0
  707. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/OT/name/name.hh +589 -0
  708. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/failing-alloc.c +65 -0
  709. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/harfbuzz-subset.cc +64 -0
  710. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/harfbuzz.cc +63 -0
  711. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-ankr-table.hh +99 -0
  712. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-bsln-table.hh +159 -0
  713. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-common.hh +1076 -0
  714. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-feat-table.hh +224 -0
  715. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-just-table.hh +420 -0
  716. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-kerx-table.hh +1191 -0
  717. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-morx-table.hh +1443 -0
  718. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-opbd-table.hh +174 -0
  719. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout-trak-table.hh +232 -0
  720. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout.cc +449 -0
  721. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout.h +795 -0
  722. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-layout.hh +77 -0
  723. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-ltag-table.hh +95 -0
  724. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-map.cc +172 -0
  725. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat-map.hh +123 -0
  726. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-aat.h +38 -0
  727. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-algs.hh +1558 -0
  728. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-array.hh +504 -0
  729. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-atomic.hh +228 -0
  730. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-bimap.hh +205 -0
  731. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-bit-page.hh +352 -0
  732. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-bit-set-invertible.hh +379 -0
  733. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-bit-set.hh +982 -0
  734. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-blob.cc +794 -0
  735. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-blob.h +160 -0
  736. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-blob.hh +98 -0
  737. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer-deserialize-json.hh +795 -0
  738. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer-deserialize-text-glyphs.hh +692 -0
  739. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer-deserialize-text-unicode.hh +332 -0
  740. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer-serialize.cc +872 -0
  741. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer-verify.cc +423 -0
  742. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer.cc +2266 -0
  743. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer.h +805 -0
  744. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-buffer.hh +682 -0
  745. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-cache.hh +99 -0
  746. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-cff-interp-common.hh +642 -0
  747. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-cff-interp-cs-common.hh +905 -0
  748. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-cff-interp-dict-common.hh +201 -0
  749. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-cff1-interp-cs.hh +160 -0
  750. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-cff2-interp-cs.hh +278 -0
  751. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-common.cc +1220 -0
  752. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-common.h +935 -0
  753. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-config.hh +212 -0
  754. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-coretext.cc +1197 -0
  755. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-coretext.h +96 -0
  756. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-cplusplus.hh +220 -0
  757. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-debug.hh +491 -0
  758. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-deprecated.h +318 -0
  759. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-directwrite.cc +884 -0
  760. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-directwrite.h +40 -0
  761. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-dispatch.hh +60 -0
  762. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-draw.cc +458 -0
  763. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-draw.h +340 -0
  764. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-draw.hh +243 -0
  765. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-face-builder.cc +246 -0
  766. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-face.cc +664 -0
  767. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-face.h +187 -0
  768. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-face.hh +111 -0
  769. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-fallback-shape.cc +115 -0
  770. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-font.cc +3069 -0
  771. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-font.h +1153 -0
  772. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-font.hh +720 -0
  773. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ft-colr.hh +601 -0
  774. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ft.cc +1500 -0
  775. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ft.h +145 -0
  776. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-gdi.cc +85 -0
  777. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-gdi.h +39 -0
  778. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-geometry.hh +284 -0
  779. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-glib.cc +232 -0
  780. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-glib.h +56 -0
  781. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-gobject-structs.cc +116 -0
  782. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-gobject-structs.h +136 -0
  783. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-gobject.h +40 -0
  784. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-graphite2.cc +455 -0
  785. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-graphite2.h +61 -0
  786. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-icu.cc +291 -0
  787. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-icu.h +52 -0
  788. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-iter.hh +1037 -0
  789. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-kern.hh +145 -0
  790. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-limits.hh +112 -0
  791. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-machinery.hh +332 -0
  792. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-map.cc +419 -0
  793. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-map.h +143 -0
  794. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-map.hh +568 -0
  795. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-meta.hh +238 -0
  796. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ms-feature-ranges.hh +232 -0
  797. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-multimap.hh +96 -0
  798. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-mutex.hh +122 -0
  799. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-null.hh +226 -0
  800. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-number-parser.hh +237 -0
  801. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-number.cc +79 -0
  802. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-number.hh +41 -0
  803. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-object.hh +357 -0
  804. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-open-file.hh +543 -0
  805. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-open-type.hh +1886 -0
  806. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-cff-common.hh +374 -0
  807. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-cff1-std-str.hh +425 -0
  808. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-cff1-table.cc +620 -0
  809. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-cff1-table.hh +1539 -0
  810. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-cff2-table.cc +227 -0
  811. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-cff2-table.hh +564 -0
  812. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-cmap-table.hh +2154 -0
  813. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-color.cc +363 -0
  814. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-color.h +155 -0
  815. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-deprecated.h +147 -0
  816. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-face-table-list.hh +155 -0
  817. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-face.cc +60 -0
  818. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-face.hh +77 -0
  819. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-font.cc +662 -0
  820. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-font.h +45 -0
  821. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-gasp-table.hh +84 -0
  822. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-glyf-table.hh +35 -0
  823. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-hdmx-table.hh +177 -0
  824. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-head-table.hh +204 -0
  825. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-hhea-table.hh +106 -0
  826. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-hmtx-table.hh +502 -0
  827. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-kern-table.hh +425 -0
  828. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout-base-table.hh +849 -0
  829. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout-common.hh +4953 -0
  830. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout-gdef-table.hh +34 -0
  831. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout-gpos-table.hh +81 -0
  832. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout-gsub-table.hh +94 -0
  833. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout-gsubgpos.hh +4887 -0
  834. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout-jstf-table.hh +236 -0
  835. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout.cc +2705 -0
  836. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout.h +549 -0
  837. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-layout.hh +611 -0
  838. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-map.cc +394 -0
  839. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-map.hh +298 -0
  840. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-math-table.hh +1132 -0
  841. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-math.cc +338 -0
  842. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-math.h +333 -0
  843. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-maxp-table.hh +156 -0
  844. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-meta-table.hh +131 -0
  845. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-meta.cc +79 -0
  846. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-meta.h +72 -0
  847. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-metrics.cc +436 -0
  848. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-metrics.h +129 -0
  849. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-metrics.hh +35 -0
  850. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-name-language-static.hh +456 -0
  851. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-name-language.hh +40 -0
  852. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-name-table.hh +32 -0
  853. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-name.cc +184 -0
  854. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-name.h +164 -0
  855. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-os2-table.hh +405 -0
  856. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-os2-unicode-ranges.hh +231 -0
  857. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-post-macroman.hh +294 -0
  858. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-post-table-v2subset.hh +142 -0
  859. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-post-table.hh +352 -0
  860. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shape-fallback.cc +615 -0
  861. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shape-fallback.hh +54 -0
  862. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shape-normalize.cc +470 -0
  863. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shape-normalize.hh +104 -0
  864. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shape.cc +1319 -0
  865. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shape.h +53 -0
  866. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shape.hh +171 -0
  867. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-arabic-fallback.hh +383 -0
  868. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-arabic-joining-list.hh +47 -0
  869. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-arabic-pua.hh +118 -0
  870. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-arabic-table.hh +556 -0
  871. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-arabic-win1256.hh +349 -0
  872. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-arabic.cc +774 -0
  873. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-arabic.hh +50 -0
  874. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-default.cc +75 -0
  875. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-hangul.cc +436 -0
  876. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-hebrew.cc +211 -0
  877. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-indic-machine.hh +627 -0
  878. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-indic-table.cc +561 -0
  879. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-indic.cc +1578 -0
  880. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-indic.hh +66 -0
  881. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-khmer-machine.hh +428 -0
  882. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-khmer.cc +387 -0
  883. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-myanmar-machine.hh +553 -0
  884. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-myanmar.cc +390 -0
  885. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-syllabic.cc +112 -0
  886. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-syllabic.hh +47 -0
  887. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-thai.cc +393 -0
  888. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-use-machine.hh +1079 -0
  889. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-use-table.hh +690 -0
  890. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-use.cc +514 -0
  891. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-vowel-constraints.cc +477 -0
  892. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper-vowel-constraints.hh +39 -0
  893. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-shaper.hh +404 -0
  894. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-stat-table.hh +619 -0
  895. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-tag-table.hh +3009 -0
  896. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-tag.cc +658 -0
  897. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-avar-table.hh +411 -0
  898. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-common.hh +1985 -0
  899. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-cvar-table.hh +220 -0
  900. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-fvar-table.hh +505 -0
  901. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-gvar-table.hh +890 -0
  902. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-hvar-table.hh +478 -0
  903. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-mvar-table.hh +184 -0
  904. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var-varc-table.hh +32 -0
  905. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var.cc +328 -0
  906. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-var.h +191 -0
  907. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot-vorg-table.hh +137 -0
  908. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ot.h +49 -0
  909. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-outline.cc +321 -0
  910. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-outline.hh +83 -0
  911. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-paint-extents.cc +330 -0
  912. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-paint-extents.hh +132 -0
  913. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-paint.cc +728 -0
  914. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-paint.h +1029 -0
  915. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-paint.hh +236 -0
  916. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-pool.hh +107 -0
  917. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-priority-queue.hh +174 -0
  918. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-repacker.hh +476 -0
  919. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-sanitize.hh +530 -0
  920. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-serialize.hh +832 -0
  921. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-set-digest.hh +227 -0
  922. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-set.cc +673 -0
  923. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-set.h +203 -0
  924. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-set.hh +186 -0
  925. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shape-plan.cc +581 -0
  926. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shape-plan.h +122 -0
  927. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shape-plan.hh +77 -0
  928. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shape.cc +445 -0
  929. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shape.h +74 -0
  930. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shaper-impl.hh +38 -0
  931. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shaper-list.hh +65 -0
  932. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shaper.cc +102 -0
  933. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-shaper.hh +134 -0
  934. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-static.cc +138 -0
  935. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-string-array.hh +85 -0
  936. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-style.cc +134 -0
  937. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-style.h +81 -0
  938. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-accelerator.hh +141 -0
  939. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-cff-common.cc +231 -0
  940. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-cff-common.hh +1228 -0
  941. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-cff1.cc +1001 -0
  942. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-cff2.cc +679 -0
  943. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-input.cc +748 -0
  944. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-input.hh +155 -0
  945. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-instancer-iup.cc +532 -0
  946. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-instancer-iup.hh +37 -0
  947. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-instancer-solver.cc +434 -0
  948. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-instancer-solver.hh +114 -0
  949. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-plan-member-list.hh +164 -0
  950. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-plan.cc +1570 -0
  951. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-plan.hh +302 -0
  952. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-repacker.cc +58 -0
  953. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset-repacker.h +81 -0
  954. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset.cc +704 -0
  955. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset.h +260 -0
  956. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-subset.hh +74 -0
  957. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ucd-table.hh +5637 -0
  958. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-ucd.cc +258 -0
  959. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-unicode-emoji-table.hh +79 -0
  960. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-unicode.cc +625 -0
  961. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-unicode.h +643 -0
  962. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-unicode.hh +403 -0
  963. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-uniscribe.cc +889 -0
  964. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-uniscribe.h +46 -0
  965. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-utf.hh +481 -0
  966. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-vector.hh +539 -0
  967. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-version.h +95 -0
  968. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api-blob.hh +50 -0
  969. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api-buffer.hh +217 -0
  970. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api-common.hh +44 -0
  971. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api-face.hh +109 -0
  972. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api-font.hh +263 -0
  973. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api-list.hh +109 -0
  974. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api-shape.hh +70 -0
  975. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api.cc +46 -0
  976. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api.h +322 -0
  977. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-api.hh +117 -0
  978. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb-wasm-shape.cc +470 -0
  979. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb.h +51 -0
  980. package/ios/juce_modules/juce_graphics/fonts/harfbuzz/hb.hh +555 -0
  981. package/ios/juce_modules/juce_graphics/fonts/juce_AttributedString.cpp +288 -0
  982. package/ios/juce_modules/juce_graphics/fonts/juce_AttributedString.h +219 -0
  983. package/ios/juce_modules/juce_graphics/fonts/juce_Font.cpp +1036 -0
  984. package/ios/juce_modules/juce_graphics/fonts/juce_Font.h +571 -0
  985. package/ios/juce_modules/juce_graphics/fonts/juce_FontOptions.cpp +111 -0
  986. package/ios/juce_modules/juce_graphics/fonts/juce_FontOptions.h +218 -0
  987. package/ios/juce_modules/juce_graphics/fonts/juce_FunctionPointerDestructor.h +53 -0
  988. package/ios/juce_modules/juce_graphics/fonts/juce_GlyphArrangement.cpp +657 -0
  989. package/ios/juce_modules/juce_graphics/fonts/juce_GlyphArrangement.h +324 -0
  990. package/ios/juce_modules/juce_graphics/fonts/juce_JustifiedText.cpp +580 -0
  991. package/ios/juce_modules/juce_graphics/fonts/juce_LruCache.h +88 -0
  992. package/ios/juce_modules/juce_graphics/fonts/juce_ShapedText.cpp +210 -0
  993. package/ios/juce_modules/juce_graphics/fonts/juce_SimpleShapedText.cpp +1279 -0
  994. package/ios/juce_modules/juce_graphics/fonts/juce_TextLayout.cpp +512 -0
  995. package/ios/juce_modules/juce_graphics/fonts/juce_TextLayout.h +278 -0
  996. package/ios/juce_modules/juce_graphics/fonts/juce_Typeface.cpp +983 -0
  997. package/ios/juce_modules/juce_graphics/fonts/juce_Typeface.h +396 -0
  998. package/ios/juce_modules/juce_graphics/fonts/juce_TypefaceFileCache.h +74 -0
  999. package/ios/juce_modules/juce_graphics/fonts/juce_TypefaceTestData.cpp +6051 -0
  1000. package/ios/juce_modules/juce_graphics/geometry/juce_AffineTransform.cpp +307 -0
  1001. package/ios/juce_modules/juce_graphics/geometry/juce_AffineTransform.h +314 -0
  1002. package/ios/juce_modules/juce_graphics/geometry/juce_BorderSize.h +176 -0
  1003. package/ios/juce_modules/juce_graphics/geometry/juce_EdgeTable.cpp +848 -0
  1004. package/ios/juce_modules/juce_graphics/geometry/juce_EdgeTable.h +225 -0
  1005. package/ios/juce_modules/juce_graphics/geometry/juce_Line.h +454 -0
  1006. package/ios/juce_modules/juce_graphics/geometry/juce_Parallelogram.h +194 -0
  1007. package/ios/juce_modules/juce_graphics/geometry/juce_Parallelogram_test.cpp +75 -0
  1008. package/ios/juce_modules/juce_graphics/geometry/juce_Path.cpp +1531 -0
  1009. package/ios/juce_modules/juce_graphics/geometry/juce_Path.h +846 -0
  1010. package/ios/juce_modules/juce_graphics/geometry/juce_PathIterator.cpp +304 -0
  1011. package/ios/juce_modules/juce_graphics/geometry/juce_PathIterator.h +120 -0
  1012. package/ios/juce_modules/juce_graphics/geometry/juce_PathStrokeType.cpp +756 -0
  1013. package/ios/juce_modules/juce_graphics/geometry/juce_PathStrokeType.h +215 -0
  1014. package/ios/juce_modules/juce_graphics/geometry/juce_Point.h +269 -0
  1015. package/ios/juce_modules/juce_graphics/geometry/juce_Rectangle.h +1032 -0
  1016. package/ios/juce_modules/juce_graphics/geometry/juce_RectangleList.h +694 -0
  1017. package/ios/juce_modules/juce_graphics/geometry/juce_Rectangle_test.cpp +60 -0
  1018. package/ios/juce_modules/juce_graphics/image_formats/jpglib/README +385 -0
  1019. package/ios/juce_modules/juce_graphics/image_formats/jpglib/cderror.h +132 -0
  1020. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcapimin.c +280 -0
  1021. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcapistd.c +161 -0
  1022. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jccoefct.c +449 -0
  1023. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jccolor.c +459 -0
  1024. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcdctmgr.c +387 -0
  1025. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jchuff.c +909 -0
  1026. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jchuff.h +52 -0
  1027. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcinit.c +72 -0
  1028. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcmainct.c +293 -0
  1029. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcmarker.c +597 -0
  1030. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcmaster.c +590 -0
  1031. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcomapi.c +106 -0
  1032. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jconfig.h +59 -0
  1033. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcparam.c +610 -0
  1034. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcphuff.c +833 -0
  1035. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcprepct.c +354 -0
  1036. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jcsample.c +519 -0
  1037. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jctrans.c +388 -0
  1038. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdapimin.c +395 -0
  1039. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdapistd.c +275 -0
  1040. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdatasrc.c +212 -0
  1041. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdcoefct.c +736 -0
  1042. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdcolor.c +396 -0
  1043. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdct.h +182 -0
  1044. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jddctmgr.c +269 -0
  1045. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdhuff.c +625 -0
  1046. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdhuff.h +206 -0
  1047. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdinput.c +381 -0
  1048. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdmainct.c +512 -0
  1049. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdmarker.c +1292 -0
  1050. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdmaster.c +557 -0
  1051. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdmerge.c +400 -0
  1052. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdphuff.c +642 -0
  1053. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdpostct.c +290 -0
  1054. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdsample.c +478 -0
  1055. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jdtrans.c +143 -0
  1056. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jerror.c +252 -0
  1057. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jerror.h +291 -0
  1058. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jfdctflt.c +168 -0
  1059. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jfdctfst.c +224 -0
  1060. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jfdctint.c +283 -0
  1061. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jidctflt.c +242 -0
  1062. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jidctfst.c +368 -0
  1063. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jidctint.c +389 -0
  1064. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jidctred.c +398 -0
  1065. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jinclude.h +197 -0
  1066. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jmemmgr.c +1118 -0
  1067. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jmemnobs.c +109 -0
  1068. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jmemsys.h +203 -0
  1069. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jmorecfg.h +363 -0
  1070. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jpegint.h +392 -0
  1071. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jpeglib.h +1096 -0
  1072. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jquant1.c +856 -0
  1073. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jquant2.c +1310 -0
  1074. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jutils.c +179 -0
  1075. package/ios/juce_modules/juce_graphics/image_formats/jpglib/jversion.h +14 -0
  1076. package/ios/juce_modules/juce_graphics/image_formats/jpglib/transupp.c +928 -0
  1077. package/ios/juce_modules/juce_graphics/image_formats/jpglib/transupp.h +135 -0
  1078. package/ios/juce_modules/juce_graphics/image_formats/juce_GIFLoader.cpp +464 -0
  1079. package/ios/juce_modules/juce_graphics/image_formats/juce_JPEGLoader.cpp +456 -0
  1080. package/ios/juce_modules/juce_graphics/image_formats/juce_PNGLoader.cpp +635 -0
  1081. package/ios/juce_modules/juce_graphics/image_formats/pnglib/png.c +4607 -0
  1082. package/ios/juce_modules/juce_graphics/image_formats/pnglib/png.h +3251 -0
  1083. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngconf.h +623 -0
  1084. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngdebug.h +153 -0
  1085. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngerror.c +963 -0
  1086. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngget.c +1249 -0
  1087. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pnginfo.h +267 -0
  1088. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngmem.c +284 -0
  1089. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngpread.c +1096 -0
  1090. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngpriv.h +2156 -0
  1091. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngread.c +4225 -0
  1092. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngrio.c +120 -0
  1093. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngrtran.c +5102 -0
  1094. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngrutil.c +4681 -0
  1095. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngset.c +1802 -0
  1096. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngstruct.h +491 -0
  1097. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngtrans.c +864 -0
  1098. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngwio.c +168 -0
  1099. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngwrite.c +2395 -0
  1100. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngwtran.c +587 -0
  1101. package/ios/juce_modules/juce_graphics/image_formats/pnglib/pngwutil.c +2781 -0
  1102. package/ios/juce_modules/juce_graphics/images/juce_Image.cpp +851 -0
  1103. package/ios/juce_modules/juce_graphics/images/juce_Image.h +630 -0
  1104. package/ios/juce_modules/juce_graphics/images/juce_ImageCache.cpp +183 -0
  1105. package/ios/juce_modules/juce_graphics/images/juce_ImageCache.h +136 -0
  1106. package/ios/juce_modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp +209 -0
  1107. package/ios/juce_modules/juce_graphics/images/juce_ImageConvolutionKernel.h +121 -0
  1108. package/ios/juce_modules/juce_graphics/images/juce_ImageFileFormat.cpp +120 -0
  1109. package/ios/juce_modules/juce_graphics/images/juce_ImageFileFormat.h +232 -0
  1110. package/ios/juce_modules/juce_graphics/images/juce_ScaledImage.h +93 -0
  1111. package/ios/juce_modules/juce_graphics/juce_graphics.cpp +230 -0
  1112. package/ios/juce_modules/juce_graphics/juce_graphics.h +162 -0
  1113. package/ios/juce_modules/juce_graphics/juce_graphics.mm +35 -0
  1114. package/ios/juce_modules/juce_graphics/juce_graphics_Harfbuzz.cpp +100 -0
  1115. package/ios/juce_modules/juce_graphics/native/juce_CoreGraphicsContext_mac.h +153 -0
  1116. package/ios/juce_modules/juce_graphics/native/juce_CoreGraphicsContext_mac.mm +969 -0
  1117. package/ios/juce_modules/juce_graphics/native/juce_CoreGraphicsHelpers_mac.h +117 -0
  1118. package/ios/juce_modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp +1807 -0
  1119. package/ios/juce_modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.h +174 -0
  1120. package/ios/juce_modules/juce_graphics/native/juce_Direct2DHelpers_windows.cpp +456 -0
  1121. package/ios/juce_modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp +784 -0
  1122. package/ios/juce_modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h +73 -0
  1123. package/ios/juce_modules/juce_graphics/native/juce_Direct2DImageContext_windows.cpp +124 -0
  1124. package/ios/juce_modules/juce_graphics/native/juce_Direct2DImageContext_windows.h +55 -0
  1125. package/ios/juce_modules/juce_graphics/native/juce_Direct2DImage_windows.cpp +732 -0
  1126. package/ios/juce_modules/juce_graphics/native/juce_Direct2DImage_windows.h +94 -0
  1127. package/ios/juce_modules/juce_graphics/native/juce_Direct2DMetrics_windows.cpp +132 -0
  1128. package/ios/juce_modules/juce_graphics/native/juce_Direct2DMetrics_windows.h +320 -0
  1129. package/ios/juce_modules/juce_graphics/native/juce_Direct2DResources_windows.cpp +661 -0
  1130. package/ios/juce_modules/juce_graphics/native/juce_DirectWriteTypeface_windows.cpp +920 -0
  1131. package/ios/juce_modules/juce_graphics/native/juce_DirectX_windows.h +330 -0
  1132. package/ios/juce_modules/juce_graphics/native/juce_EventTracing.h +310 -0
  1133. package/ios/juce_modules/juce_graphics/native/juce_Fonts_android.cpp +636 -0
  1134. package/ios/juce_modules/juce_graphics/native/juce_Fonts_freetype.cpp +589 -0
  1135. package/ios/juce_modules/juce_graphics/native/juce_Fonts_linux.cpp +208 -0
  1136. package/ios/juce_modules/juce_graphics/native/juce_Fonts_mac.mm +416 -0
  1137. package/ios/juce_modules/juce_graphics/native/juce_GraphicsContext_android.cpp +43 -0
  1138. package/ios/juce_modules/juce_graphics/native/juce_IconHelpers_android.cpp +39 -0
  1139. package/ios/juce_modules/juce_graphics/native/juce_IconHelpers_linux.cpp +39 -0
  1140. package/ios/juce_modules/juce_graphics/native/juce_IconHelpers_mac.cpp +150 -0
  1141. package/ios/juce_modules/juce_graphics/native/juce_IconHelpers_windows.cpp +39 -0
  1142. package/ios/juce_modules/juce_graphics/native/juce_RenderingHelpers.h +2696 -0
  1143. package/ios/juce_modules/juce_graphics/placement/juce_Justification.h +196 -0
  1144. package/ios/juce_modules/juce_graphics/placement/juce_RectanglePlacement.cpp +131 -0
  1145. package/ios/juce_modules/juce_graphics/placement/juce_RectanglePlacement.h +183 -0
  1146. package/ios/juce_modules/juce_graphics/unicode/juce_Unicode.cpp +331 -0
  1147. package/ios/juce_modules/juce_graphics/unicode/juce_UnicodeBidi.cpp +1139 -0
  1148. package/ios/juce_modules/juce_graphics/unicode/juce_UnicodeBrackets.cpp +142 -0
  1149. package/ios/juce_modules/juce_graphics/unicode/juce_UnicodeGenerated.cpp +1380 -0
  1150. package/ios/juce_modules/juce_graphics/unicode/juce_UnicodeLine.cpp +273 -0
  1151. package/ios/juce_modules/juce_graphics/unicode/juce_UnicodeScript.cpp +235 -0
  1152. package/ios/juce_modules/juce_graphics/unicode/juce_UnicodeUtils.cpp +104 -0
  1153. package/ios/juce_modules/juce_gui_basics/accessibility/enums/juce_AccessibilityActions.h +128 -0
  1154. package/ios/juce_modules/juce_gui_basics/accessibility/enums/juce_AccessibilityEvent.h +90 -0
  1155. package/ios/juce_modules/juce_gui_basics/accessibility/enums/juce_AccessibilityRole.h +80 -0
  1156. package/ios/juce_modules/juce_gui_basics/accessibility/interfaces/juce_AccessibilityCellInterface.h +61 -0
  1157. package/ios/juce_modules/juce_gui_basics/accessibility/interfaces/juce_AccessibilityTableInterface.h +106 -0
  1158. package/ios/juce_modules/juce_gui_basics/accessibility/interfaces/juce_AccessibilityTextInterface.h +93 -0
  1159. package/ios/juce_modules/juce_gui_basics/accessibility/interfaces/juce_AccessibilityValueInterface.h +231 -0
  1160. package/ios/juce_modules/juce_gui_basics/accessibility/juce_AccessibilityHandler.cpp +412 -0
  1161. package/ios/juce_modules/juce_gui_basics/accessibility/juce_AccessibilityHandler.h +354 -0
  1162. package/ios/juce_modules/juce_gui_basics/accessibility/juce_AccessibilityState.h +236 -0
  1163. package/ios/juce_modules/juce_gui_basics/application/juce_Application.cpp +109 -0
  1164. package/ios/juce_modules/juce_gui_basics/application/juce_Application.h +202 -0
  1165. package/ios/juce_modules/juce_gui_basics/buttons/juce_ArrowButton.cpp +60 -0
  1166. package/ios/juce_modules/juce_gui_basics/buttons/juce_ArrowButton.h +74 -0
  1167. package/ios/juce_modules/juce_gui_basics/buttons/juce_Button.cpp +730 -0
  1168. package/ios/juce_modules/juce_gui_basics/buttons/juce_Button.h +559 -0
  1169. package/ios/juce_modules/juce_gui_basics/buttons/juce_DrawableButton.cpp +250 -0
  1170. package/ios/juce_modules/juce_gui_basics/buttons/juce_DrawableButton.h +206 -0
  1171. package/ios/juce_modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp +138 -0
  1172. package/ios/juce_modules/juce_gui_basics/buttons/juce_HyperlinkButton.h +139 -0
  1173. package/ios/juce_modules/juce_gui_basics/buttons/juce_ImageButton.cpp +207 -0
  1174. package/ios/juce_modules/juce_gui_basics/buttons/juce_ImageButton.h +170 -0
  1175. package/ios/juce_modules/juce_gui_basics/buttons/juce_ShapeButton.cpp +146 -0
  1176. package/ios/juce_modules/juce_gui_basics/buttons/juce_ShapeButton.h +135 -0
  1177. package/ios/juce_modules/juce_gui_basics/buttons/juce_TextButton.cpp +86 -0
  1178. package/ios/juce_modules/juce_gui_basics/buttons/juce_TextButton.h +118 -0
  1179. package/ios/juce_modules/juce_gui_basics/buttons/juce_ToggleButton.cpp +74 -0
  1180. package/ios/juce_modules/juce_gui_basics/buttons/juce_ToggleButton.h +102 -0
  1181. package/ios/juce_modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp +122 -0
  1182. package/ios/juce_modules/juce_gui_basics/buttons/juce_ToolbarButton.h +107 -0
  1183. package/ios/juce_modules/juce_gui_basics/commands/juce_ApplicationCommandID.h +99 -0
  1184. package/ios/juce_modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp +75 -0
  1185. package/ios/juce_modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h +199 -0
  1186. package/ios/juce_modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp +331 -0
  1187. package/ios/juce_modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h +358 -0
  1188. package/ios/juce_modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp +195 -0
  1189. package/ios/juce_modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h +253 -0
  1190. package/ios/juce_modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp +427 -0
  1191. package/ios/juce_modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h +253 -0
  1192. package/ios/juce_modules/juce_gui_basics/components/juce_CachedComponentImage.h +81 -0
  1193. package/ios/juce_modules/juce_gui_basics/components/juce_Component.cpp +3013 -0
  1194. package/ios/juce_modules/juce_gui_basics/components/juce_Component.h +2716 -0
  1195. package/ios/juce_modules/juce_gui_basics/components/juce_ComponentListener.cpp +47 -0
  1196. package/ios/juce_modules/juce_gui_basics/components/juce_ComponentListener.h +131 -0
  1197. package/ios/juce_modules/juce_gui_basics/components/juce_ComponentTraverser.h +81 -0
  1198. package/ios/juce_modules/juce_gui_basics/components/juce_FocusTraverser.cpp +283 -0
  1199. package/ios/juce_modules/juce_gui_basics/components/juce_FocusTraverser.h +102 -0
  1200. package/ios/juce_modules/juce_gui_basics/components/juce_ModalComponentManager.cpp +295 -0
  1201. package/ios/juce_modules/juce_gui_basics/components/juce_ModalComponentManager.h +340 -0
  1202. package/ios/juce_modules/juce_gui_basics/desktop/juce_Desktop.cpp +386 -0
  1203. package/ios/juce_modules/juce_gui_basics/desktop/juce_Desktop.h +502 -0
  1204. package/ios/juce_modules/juce_gui_basics/desktop/juce_Displays.cpp +447 -0
  1205. package/ios/juce_modules/juce_gui_basics/desktop/juce_Displays.h +218 -0
  1206. package/ios/juce_modules/juce_gui_basics/detail/juce_AccessibilityHelpers.cpp +42 -0
  1207. package/ios/juce_modules/juce_gui_basics/detail/juce_AccessibilityHelpers.h +79 -0
  1208. package/ios/juce_modules/juce_gui_basics/detail/juce_AlertWindowHelpers.h +124 -0
  1209. package/ios/juce_modules/juce_gui_basics/detail/juce_ButtonAccessibilityHandler.h +134 -0
  1210. package/ios/juce_modules/juce_gui_basics/detail/juce_ComponentHelpers.h +291 -0
  1211. package/ios/juce_modules/juce_gui_basics/detail/juce_CustomMouseCursorInfo.h +44 -0
  1212. package/ios/juce_modules/juce_gui_basics/detail/juce_FocusHelpers.h +126 -0
  1213. package/ios/juce_modules/juce_gui_basics/detail/juce_FocusRestorer.h +55 -0
  1214. package/ios/juce_modules/juce_gui_basics/detail/juce_LookAndFeelHelpers.h +71 -0
  1215. package/ios/juce_modules/juce_gui_basics/detail/juce_MouseInputSourceImpl.h +597 -0
  1216. package/ios/juce_modules/juce_gui_basics/detail/juce_MouseInputSourceList.h +163 -0
  1217. package/ios/juce_modules/juce_gui_basics/detail/juce_PointerState.h +113 -0
  1218. package/ios/juce_modules/juce_gui_basics/detail/juce_ScalingHelpers.h +132 -0
  1219. package/ios/juce_modules/juce_gui_basics/detail/juce_ScopedContentSharerImpl.h +107 -0
  1220. package/ios/juce_modules/juce_gui_basics/detail/juce_ScopedContentSharerInterface.h +224 -0
  1221. package/ios/juce_modules/juce_gui_basics/detail/juce_ScopedMessageBoxImpl.h +141 -0
  1222. package/ios/juce_modules/juce_gui_basics/detail/juce_ScopedMessageBoxInterface.h +69 -0
  1223. package/ios/juce_modules/juce_gui_basics/detail/juce_StandardCachedComponentImage.h +102 -0
  1224. package/ios/juce_modules/juce_gui_basics/detail/juce_ToolbarItemDragAndDropOverlayComponent.h +127 -0
  1225. package/ios/juce_modules/juce_gui_basics/detail/juce_TopLevelWindowManager.h +145 -0
  1226. package/ios/juce_modules/juce_gui_basics/detail/juce_ViewportHelpers.h +58 -0
  1227. package/ios/juce_modules/juce_gui_basics/detail/juce_WindowingHelpers.h +70 -0
  1228. package/ios/juce_modules/juce_gui_basics/drawables/juce_Drawable.cpp +228 -0
  1229. package/ios/juce_modules/juce_gui_basics/drawables/juce_Drawable.h +271 -0
  1230. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp +173 -0
  1231. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableComposite.h +126 -0
  1232. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableImage.cpp +165 -0
  1233. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableImage.h +126 -0
  1234. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawablePath.cpp +66 -0
  1235. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawablePath.h +86 -0
  1236. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp +96 -0
  1237. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableRectangle.h +85 -0
  1238. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableShape.cpp +190 -0
  1239. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableShape.h +135 -0
  1240. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableText.cpp +241 -0
  1241. package/ios/juce_modules/juce_gui_basics/drawables/juce_DrawableText.h +130 -0
  1242. package/ios/juce_modules/juce_gui_basics/drawables/juce_SVGParser.cpp +1903 -0
  1243. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_ContentSharer.cpp +83 -0
  1244. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_ContentSharer.h +154 -0
  1245. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp +79 -0
  1246. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h +125 -0
  1247. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp +279 -0
  1248. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h +235 -0
  1249. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp +633 -0
  1250. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h +306 -0
  1251. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h +67 -0
  1252. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp +292 -0
  1253. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileChooser.h +358 -0
  1254. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp +272 -0
  1255. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h +177 -0
  1256. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp +295 -0
  1257. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileListComponent.h +104 -0
  1258. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h +75 -0
  1259. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp +280 -0
  1260. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h +126 -0
  1261. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp +690 -0
  1262. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h +117 -0
  1263. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp +277 -0
  1264. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h +245 -0
  1265. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp +135 -0
  1266. package/ios/juce_modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h +77 -0
  1267. package/ios/juce_modules/juce_gui_basics/juce_gui_basics.cpp +370 -0
  1268. package/ios/juce_modules/juce_gui_basics/juce_gui_basics.h +403 -0
  1269. package/ios/juce_modules/juce_gui_basics/juce_gui_basics.mm +35 -0
  1270. package/ios/juce_modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp +73 -0
  1271. package/ios/juce_modules/juce_gui_basics/keyboard/juce_CaretComponent.h +90 -0
  1272. package/ios/juce_modules/juce_gui_basics/keyboard/juce_KeyListener.cpp +43 -0
  1273. package/ios/juce_modules/juce_gui_basics/keyboard/juce_KeyListener.h +86 -0
  1274. package/ios/juce_modules/juce_gui_basics/keyboard/juce_KeyPress.cpp +298 -0
  1275. package/ios/juce_modules/juce_gui_basics/keyboard/juce_KeyPress.h +286 -0
  1276. package/ios/juce_modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp +283 -0
  1277. package/ios/juce_modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h +96 -0
  1278. package/ios/juce_modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp +58 -0
  1279. package/ios/juce_modules/juce_gui_basics/keyboard/juce_ModifierKeys.h +220 -0
  1280. package/ios/juce_modules/juce_gui_basics/keyboard/juce_SystemClipboard.h +58 -0
  1281. package/ios/juce_modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h +132 -0
  1282. package/ios/juce_modules/juce_gui_basics/keyboard/juce_TextInputTarget.h +129 -0
  1283. package/ios/juce_modules/juce_gui_basics/layout/juce_AnimatedPosition.h +216 -0
  1284. package/ios/juce_modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h +162 -0
  1285. package/ios/juce_modules/juce_gui_basics/layout/juce_BorderedComponentBoundsConstrainer.cpp +86 -0
  1286. package/ios/juce_modules/juce_gui_basics/layout/juce_BorderedComponentBoundsConstrainer.h +78 -0
  1287. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp +363 -0
  1288. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentAnimator.h +174 -0
  1289. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp +314 -0
  1290. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h +206 -0
  1291. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp +295 -0
  1292. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentBuilder.h +256 -0
  1293. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp +151 -0
  1294. package/ios/juce_modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h +105 -0
  1295. package/ios/juce_modules/juce_gui_basics/layout/juce_ConcertinaPanel.cpp +512 -0
  1296. package/ios/juce_modules/juce_gui_basics/layout/juce_ConcertinaPanel.h +153 -0
  1297. package/ios/juce_modules/juce_gui_basics/layout/juce_FlexBox.cpp +1158 -0
  1298. package/ios/juce_modules/juce_gui_basics/layout/juce_FlexBox.h +152 -0
  1299. package/ios/juce_modules/juce_gui_basics/layout/juce_FlexItem.h +186 -0
  1300. package/ios/juce_modules/juce_gui_basics/layout/juce_Grid.cpp +1651 -0
  1301. package/ios/juce_modules/juce_gui_basics/layout/juce_Grid.h +232 -0
  1302. package/ios/juce_modules/juce_gui_basics/layout/juce_GridItem.cpp +188 -0
  1303. package/ios/juce_modules/juce_gui_basics/layout/juce_GridItem.h +249 -0
  1304. package/ios/juce_modules/juce_gui_basics/layout/juce_GroupComponent.cpp +87 -0
  1305. package/ios/juce_modules/juce_gui_basics/layout/juce_GroupComponent.h +120 -0
  1306. package/ios/juce_modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp +641 -0
  1307. package/ios/juce_modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h +390 -0
  1308. package/ios/juce_modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp +208 -0
  1309. package/ios/juce_modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h +205 -0
  1310. package/ios/juce_modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp +112 -0
  1311. package/ios/juce_modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h +101 -0
  1312. package/ios/juce_modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp +139 -0
  1313. package/ios/juce_modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h +109 -0
  1314. package/ios/juce_modules/juce_gui_basics/layout/juce_ScrollBar.cpp +486 -0
  1315. package/ios/juce_modules/juce_gui_basics/layout/juce_ScrollBar.h +450 -0
  1316. package/ios/juce_modules/juce_gui_basics/layout/juce_SidePanel.cpp +309 -0
  1317. package/ios/juce_modules/juce_gui_basics/layout/juce_SidePanel.h +248 -0
  1318. package/ios/juce_modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp +351 -0
  1319. package/ios/juce_modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h +270 -0
  1320. package/ios/juce_modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp +88 -0
  1321. package/ios/juce_modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h +114 -0
  1322. package/ios/juce_modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp +131 -0
  1323. package/ios/juce_modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h +111 -0
  1324. package/ios/juce_modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp +592 -0
  1325. package/ios/juce_modules/juce_gui_basics/layout/juce_TabbedButtonBar.h +382 -0
  1326. package/ios/juce_modules/juce_gui_basics/layout/juce_TabbedComponent.cpp +328 -0
  1327. package/ios/juce_modules/juce_gui_basics/layout/juce_TabbedComponent.h +236 -0
  1328. package/ios/juce_modules/juce_gui_basics/layout/juce_Viewport.cpp +649 -0
  1329. package/ios/juce_modules/juce_gui_basics/layout/juce_Viewport.h +383 -0
  1330. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp +201 -0
  1331. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h +301 -0
  1332. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.cpp +599 -0
  1333. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.h +114 -0
  1334. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp +3200 -0
  1335. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h +443 -0
  1336. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp +655 -0
  1337. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h +107 -0
  1338. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.cpp +1516 -0
  1339. package/ios/juce_modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.h +269 -0
  1340. package/ios/juce_modules/juce_gui_basics/menus/juce_BurgerMenuComponent.cpp +311 -0
  1341. package/ios/juce_modules/juce_gui_basics/menus/juce_BurgerMenuComponent.h +120 -0
  1342. package/ios/juce_modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp +472 -0
  1343. package/ios/juce_modules/juce_gui_basics/menus/juce_MenuBarComponent.h +138 -0
  1344. package/ios/juce_modules/juce_gui_basics/menus/juce_MenuBarModel.cpp +108 -0
  1345. package/ios/juce_modules/juce_gui_basics/menus/juce_MenuBarModel.h +201 -0
  1346. package/ios/juce_modules/juce_gui_basics/menus/juce_PopupMenu.cpp +2401 -0
  1347. package/ios/juce_modules/juce_gui_basics/menus/juce_PopupMenu.h +1070 -0
  1348. package/ios/juce_modules/juce_gui_basics/misc/juce_BubbleComponent.cpp +162 -0
  1349. package/ios/juce_modules/juce_gui_basics/misc/juce_BubbleComponent.h +213 -0
  1350. package/ios/juce_modules/juce_gui_basics/misc/juce_DropShadower.cpp +408 -0
  1351. package/ios/juce_modules/juce_gui_basics/misc/juce_DropShadower.h +96 -0
  1352. package/ios/juce_modules/juce_gui_basics/misc/juce_FocusOutline.cpp +194 -0
  1353. package/ios/juce_modules/juce_gui_basics/misc/juce_FocusOutline.h +109 -0
  1354. package/ios/juce_modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp +76 -0
  1355. package/ios/juce_modules/juce_gui_basics/mouse/juce_ComponentDragger.h +110 -0
  1356. package/ios/juce_modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp +646 -0
  1357. package/ios/juce_modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h +275 -0
  1358. package/ios/juce_modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h +149 -0
  1359. package/ios/juce_modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h +115 -0
  1360. package/ios/juce_modules/juce_gui_basics/mouse/juce_LassoComponent.h +233 -0
  1361. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseCursor.cpp +162 -0
  1362. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseCursor.h +199 -0
  1363. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseEvent.cpp +147 -0
  1364. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseEvent.h +463 -0
  1365. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.cpp +86 -0
  1366. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.h +121 -0
  1367. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp +114 -0
  1368. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseInputSource.h +315 -0
  1369. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseListener.cpp +48 -0
  1370. package/ios/juce_modules/juce_gui_basics/mouse/juce_MouseListener.h +180 -0
  1371. package/ios/juce_modules/juce_gui_basics/mouse/juce_SelectedItemSet.h +336 -0
  1372. package/ios/juce_modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h +115 -0
  1373. package/ios/juce_modules/juce_gui_basics/mouse/juce_TooltipClient.h +98 -0
  1374. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_Accessibility.cpp +46 -0
  1375. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_AccessibilityElement_windows.cpp +660 -0
  1376. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_AccessibilityElement_windows.h +89 -0
  1377. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_AccessibilitySharedCode_mac.mm +283 -0
  1378. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_AccessibilityTextHelpers.h +311 -0
  1379. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_AccessibilityTextHelpers_test.cpp +164 -0
  1380. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_Accessibility_android.cpp +1058 -0
  1381. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_Accessibility_ios.mm +669 -0
  1382. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_Accessibility_mac.mm +942 -0
  1383. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_Accessibility_windows.cpp +336 -0
  1384. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAExpandCollapseProvider_windows.h +92 -0
  1385. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAGridItemProvider_windows.h +162 -0
  1386. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAGridProvider_windows.h +160 -0
  1387. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAHelpers_windows.h +128 -0
  1388. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAInvokeProvider_windows.h +68 -0
  1389. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAProviderBase_windows.h +67 -0
  1390. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAProviders_windows.h +52 -0
  1391. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIARangeValueProvider_windows.h +146 -0
  1392. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIASelectionProvider_windows.h +254 -0
  1393. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIATextProvider_windows.h +626 -0
  1394. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAToggleProvider_windows.h +87 -0
  1395. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIATransformProvider_windows.h +131 -0
  1396. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAValueProvider_windows.h +92 -0
  1397. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_UIAWindowProvider_windows.h +203 -0
  1398. package/ios/juce_modules/juce_gui_basics/native/accessibility/juce_WindowsUIAWrapper_windows.h +169 -0
  1399. package/ios/juce_modules/juce_gui_basics/native/java/app/com/rmsl/juce/ComponentPeerView.java +987 -0
  1400. package/ios/juce_modules/juce_gui_basics/native/java/app/com/rmsl/juce/JuceContentProviderCursor.java +62 -0
  1401. package/ios/juce_modules/juce_gui_basics/native/java/app/com/rmsl/juce/JuceContentProviderFileObserver.java +57 -0
  1402. package/ios/juce_modules/juce_gui_basics/native/javaopt/app/com/rmsl/juce/JuceActivity.java +63 -0
  1403. package/ios/juce_modules/juce_gui_basics/native/javaopt/app/com/rmsl/juce/JuceSharingContentProvider.java +128 -0
  1404. package/ios/juce_modules/juce_gui_basics/native/javaopt/app/com/rmsl/juce/Receiver.java +51 -0
  1405. package/ios/juce_modules/juce_gui_basics/native/juce_CGMetalLayerRenderer_mac.h +384 -0
  1406. package/ios/juce_modules/juce_gui_basics/native/juce_ContentSharer_android.cpp +963 -0
  1407. package/ios/juce_modules/juce_gui_basics/native/juce_ContentSharer_ios.cpp +134 -0
  1408. package/ios/juce_modules/juce_gui_basics/native/juce_DragAndDrop_linux.cpp +618 -0
  1409. package/ios/juce_modules/juce_gui_basics/native/juce_DragAndDrop_windows.cpp +377 -0
  1410. package/ios/juce_modules/juce_gui_basics/native/juce_FileChooser_android.cpp +276 -0
  1411. package/ios/juce_modules/juce_gui_basics/native/juce_FileChooser_ios.mm +379 -0
  1412. package/ios/juce_modules/juce_gui_basics/native/juce_FileChooser_linux.cpp +296 -0
  1413. package/ios/juce_modules/juce_gui_basics/native/juce_FileChooser_mac.mm +414 -0
  1414. package/ios/juce_modules/juce_gui_basics/native/juce_FileChooser_windows.cpp +908 -0
  1415. package/ios/juce_modules/juce_gui_basics/native/juce_MainMenu_mac.mm +848 -0
  1416. package/ios/juce_modules/juce_gui_basics/native/juce_MouseCursor_mac.mm +205 -0
  1417. package/ios/juce_modules/juce_gui_basics/native/juce_MultiTouchMapper.h +116 -0
  1418. package/ios/juce_modules/juce_gui_basics/native/juce_NSViewComponentPeer_mac.mm +3053 -0
  1419. package/ios/juce_modules/juce_gui_basics/native/juce_NativeMessageBox_android.cpp +124 -0
  1420. package/ios/juce_modules/juce_gui_basics/native/juce_NativeMessageBox_ios.mm +119 -0
  1421. package/ios/juce_modules/juce_gui_basics/native/juce_NativeMessageBox_linux.cpp +78 -0
  1422. package/ios/juce_modules/juce_gui_basics/native/juce_NativeMessageBox_mac.mm +140 -0
  1423. package/ios/juce_modules/juce_gui_basics/native/juce_NativeMessageBox_windows.cpp +354 -0
  1424. package/ios/juce_modules/juce_gui_basics/native/juce_NativeModalWrapperComponent_ios.h +141 -0
  1425. package/ios/juce_modules/juce_gui_basics/native/juce_PerScreenDisplayLinks_mac.h +313 -0
  1426. package/ios/juce_modules/juce_gui_basics/native/juce_ScopedDPIAwarenessDisabler.cpp +43 -0
  1427. package/ios/juce_modules/juce_gui_basics/native/juce_ScopedDPIAwarenessDisabler.h +63 -0
  1428. package/ios/juce_modules/juce_gui_basics/native/juce_ScopedThreadDPIAwarenessSetter_windows.h +52 -0
  1429. package/ios/juce_modules/juce_gui_basics/native/juce_ScopedWindowAssociation_linux.h +127 -0
  1430. package/ios/juce_modules/juce_gui_basics/native/juce_UIViewComponentPeer_ios.mm +2376 -0
  1431. package/ios/juce_modules/juce_gui_basics/native/juce_VBlank_windows.cpp +302 -0
  1432. package/ios/juce_modules/juce_gui_basics/native/juce_WindowUtils_android.cpp +43 -0
  1433. package/ios/juce_modules/juce_gui_basics/native/juce_WindowUtils_ios.mm +43 -0
  1434. package/ios/juce_modules/juce_gui_basics/native/juce_WindowUtils_linux.cpp +48 -0
  1435. package/ios/juce_modules/juce_gui_basics/native/juce_WindowUtils_mac.mm +47 -0
  1436. package/ios/juce_modules/juce_gui_basics/native/juce_WindowUtils_windows.cpp +68 -0
  1437. package/ios/juce_modules/juce_gui_basics/native/juce_Windowing_android.cpp +2903 -0
  1438. package/ios/juce_modules/juce_gui_basics/native/juce_Windowing_ios.mm +629 -0
  1439. package/ios/juce_modules/juce_gui_basics/native/juce_Windowing_linux.cpp +863 -0
  1440. package/ios/juce_modules/juce_gui_basics/native/juce_Windowing_mac.mm +588 -0
  1441. package/ios/juce_modules/juce_gui_basics/native/juce_Windowing_windows.cpp +5549 -0
  1442. package/ios/juce_modules/juce_gui_basics/native/juce_WindowsHooks_windows.cpp +118 -0
  1443. package/ios/juce_modules/juce_gui_basics/native/juce_WindowsHooks_windows.h +55 -0
  1444. package/ios/juce_modules/juce_gui_basics/native/juce_XSymbols_linux.cpp +249 -0
  1445. package/ios/juce_modules/juce_gui_basics/native/juce_XSymbols_linux.h +629 -0
  1446. package/ios/juce_modules/juce_gui_basics/native/juce_XWindowSystem_linux.cpp +4036 -0
  1447. package/ios/juce_modules/juce_gui_basics/native/juce_XWindowSystem_linux.h +364 -0
  1448. package/ios/juce_modules/juce_gui_basics/positioning/juce_MarkerList.cpp +293 -0
  1449. package/ios/juce_modules/juce_gui_basics/positioning/juce_MarkerList.h +204 -0
  1450. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp +162 -0
  1451. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h +190 -0
  1452. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp +344 -0
  1453. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h +99 -0
  1454. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp +149 -0
  1455. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h +75 -0
  1456. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativePoint.cpp +110 -0
  1457. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativePoint.h +100 -0
  1458. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp +271 -0
  1459. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativePointPath.h +202 -0
  1460. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp +286 -0
  1461. package/ios/juce_modules/juce_gui_basics/positioning/juce_RelativeRectangle.h +117 -0
  1462. package/ios/juce_modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp +95 -0
  1463. package/ios/juce_modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h +118 -0
  1464. package/ios/juce_modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp +55 -0
  1465. package/ios/juce_modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h +85 -0
  1466. package/ios/juce_modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp +284 -0
  1467. package/ios/juce_modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h +162 -0
  1468. package/ios/juce_modules/juce_gui_basics/properties/juce_MultiChoicePropertyComponent.cpp +367 -0
  1469. package/ios/juce_modules/juce_gui_basics/properties/juce_MultiChoicePropertyComponent.h +150 -0
  1470. package/ios/juce_modules/juce_gui_basics/properties/juce_PropertyComponent.cpp +65 -0
  1471. package/ios/juce_modules/juce_gui_basics/properties/juce_PropertyComponent.h +154 -0
  1472. package/ios/juce_modules/juce_gui_basics/properties/juce_PropertyPanel.cpp +405 -0
  1473. package/ios/juce_modules/juce_gui_basics/properties/juce_PropertyPanel.h +186 -0
  1474. package/ios/juce_modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp +95 -0
  1475. package/ios/juce_modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h +116 -0
  1476. package/ios/juce_modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp +271 -0
  1477. package/ios/juce_modules/juce_gui_basics/properties/juce_TextPropertyComponent.h +196 -0
  1478. package/ios/juce_modules/juce_gui_basics/widgets/juce_ComboBox.cpp +721 -0
  1479. package/ios/juce_modules/juce_gui_basics/widgets/juce_ComboBox.h +473 -0
  1480. package/ios/juce_modules/juce_gui_basics/widgets/juce_ImageComponent.cpp +116 -0
  1481. package/ios/juce_modules/juce_gui_basics/widgets/juce_ImageComponent.h +90 -0
  1482. package/ios/juce_modules/juce_gui_basics/widgets/juce_Label.cpp +592 -0
  1483. package/ios/juce_modules/juce_gui_basics/widgets/juce_Label.h +377 -0
  1484. package/ios/juce_modules/juce_gui_basics/widgets/juce_ListBox.cpp +1263 -0
  1485. package/ios/juce_modules/juce_gui_basics/widgets/juce_ListBox.h +656 -0
  1486. package/ios/juce_modules/juce_gui_basics/widgets/juce_ProgressBar.cpp +189 -0
  1487. package/ios/juce_modules/juce_gui_basics/widgets/juce_ProgressBar.h +215 -0
  1488. package/ios/juce_modules/juce_gui_basics/widgets/juce_Slider.cpp +1839 -0
  1489. package/ios/juce_modules/juce_gui_basics/widgets/juce_Slider.h +1048 -0
  1490. package/ios/juce_modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp +935 -0
  1491. package/ios/juce_modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h +472 -0
  1492. package/ios/juce_modules/juce_gui_basics/widgets/juce_TableListBox.cpp +688 -0
  1493. package/ios/juce_modules/juce_gui_basics/widgets/juce_TableListBox.h +365 -0
  1494. package/ios/juce_modules/juce_gui_basics/widgets/juce_TextEditor.cpp +2786 -0
  1495. package/ios/juce_modules/juce_gui_basics/widgets/juce_TextEditor.h +888 -0
  1496. package/ios/juce_modules/juce_gui_basics/widgets/juce_Toolbar.cpp +838 -0
  1497. package/ios/juce_modules/juce_gui_basics/widgets/juce_Toolbar.h +347 -0
  1498. package/ios/juce_modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp +173 -0
  1499. package/ios/juce_modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h +217 -0
  1500. package/ios/juce_modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h +118 -0
  1501. package/ios/juce_modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp +125 -0
  1502. package/ios/juce_modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h +88 -0
  1503. package/ios/juce_modules/juce_gui_basics/widgets/juce_TreeView.cpp +2286 -0
  1504. package/ios/juce_modules/juce_gui_basics/widgets/juce_TreeView.h +969 -0
  1505. package/ios/juce_modules/juce_gui_basics/windows/juce_AlertWindow.cpp +712 -0
  1506. package/ios/juce_modules/juce_gui_basics/windows/juce_AlertWindow.h +600 -0
  1507. package/ios/juce_modules/juce_gui_basics/windows/juce_CallOutBox.cpp +279 -0
  1508. package/ios/juce_modules/juce_gui_basics/windows/juce_CallOutBox.h +197 -0
  1509. package/ios/juce_modules/juce_gui_basics/windows/juce_ComponentPeer.cpp +625 -0
  1510. package/ios/juce_modules/juce_gui_basics/windows/juce_ComponentPeer.h +623 -0
  1511. package/ios/juce_modules/juce_gui_basics/windows/juce_DialogWindow.cpp +190 -0
  1512. package/ios/juce_modules/juce_gui_basics/windows/juce_DialogWindow.h +286 -0
  1513. package/ios/juce_modules/juce_gui_basics/windows/juce_DocumentWindow.cpp +423 -0
  1514. package/ios/juce_modules/juce_gui_basics/windows/juce_DocumentWindow.h +316 -0
  1515. package/ios/juce_modules/juce_gui_basics/windows/juce_MessageBoxOptions.cpp +102 -0
  1516. package/ios/juce_modules/juce_gui_basics/windows/juce_MessageBoxOptions.h +202 -0
  1517. package/ios/juce_modules/juce_gui_basics/windows/juce_NativeMessageBox.cpp +167 -0
  1518. package/ios/juce_modules/juce_gui_basics/windows/juce_NativeMessageBox.h +311 -0
  1519. package/ios/juce_modules/juce_gui_basics/windows/juce_NativeScaleFactorNotifier.cpp +75 -0
  1520. package/ios/juce_modules/juce_gui_basics/windows/juce_NativeScaleFactorNotifier.h +78 -0
  1521. package/ios/juce_modules/juce_gui_basics/windows/juce_ResizableWindow.cpp +679 -0
  1522. package/ios/juce_modules/juce_gui_basics/windows/juce_ResizableWindow.h +427 -0
  1523. package/ios/juce_modules/juce_gui_basics/windows/juce_ScopedMessageBox.cpp +67 -0
  1524. package/ios/juce_modules/juce_gui_basics/windows/juce_ScopedMessageBox.h +78 -0
  1525. package/ios/juce_modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp +128 -0
  1526. package/ios/juce_modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h +184 -0
  1527. package/ios/juce_modules/juce_gui_basics/windows/juce_TooltipWindow.cpp +264 -0
  1528. package/ios/juce_modules/juce_gui_basics/windows/juce_TooltipWindow.h +169 -0
  1529. package/ios/juce_modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp +264 -0
  1530. package/ios/juce_modules/juce_gui_basics/windows/juce_TopLevelWindow.h +176 -0
  1531. package/ios/juce_modules/juce_gui_basics/windows/juce_VBlankAttachment.cpp +122 -0
  1532. package/ios/juce_modules/juce_gui_basics/windows/juce_VBlankAttachment.h +85 -0
  1533. package/ios/juce_modules/juce_gui_basics/windows/juce_WindowUtils.h +51 -0
  1534. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp +83 -0
  1535. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h +81 -0
  1536. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h +683 -0
  1537. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp +1306 -0
  1538. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CodeDocument.h +459 -0
  1539. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp +1857 -0
  1540. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h +486 -0
  1541. package/ios/juce_modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h +68 -0
  1542. package/ios/juce_modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.cpp +248 -0
  1543. package/ios/juce_modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.h +74 -0
  1544. package/ios/juce_modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.cpp +181 -0
  1545. package/ios/juce_modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.h +72 -0
  1546. package/ios/juce_modules/juce_gui_extra/detail/juce_WebControlRelayEvents.h +255 -0
  1547. package/ios/juce_modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp +1124 -0
  1548. package/ios/juce_modules/juce_gui_extra/documents/juce_FileBasedDocument.h +440 -0
  1549. package/ios/juce_modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h +142 -0
  1550. package/ios/juce_modules/juce_gui_extra/embedding/juce_AndroidViewComponent.h +91 -0
  1551. package/ios/juce_modules/juce_gui_extra/embedding/juce_HWNDComponent.h +98 -0
  1552. package/ios/juce_modules/juce_gui_extra/embedding/juce_NSViewComponent.h +107 -0
  1553. package/ios/juce_modules/juce_gui_extra/embedding/juce_UIViewComponent.h +99 -0
  1554. package/ios/juce_modules/juce_gui_extra/embedding/juce_XEmbedComponent.h +129 -0
  1555. package/ios/juce_modules/juce_gui_extra/juce_gui_extra.cpp +210 -0
  1556. package/ios/juce_modules/juce_gui_extra/juce_gui_extra.h +161 -0
  1557. package/ios/juce_modules/juce_gui_extra/juce_gui_extra.mm +35 -0
  1558. package/ios/juce_modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp +89 -0
  1559. package/ios/juce_modules/juce_gui_extra/misc/juce_AnimatedAppComponent.h +96 -0
  1560. package/ios/juce_modules/juce_gui_extra/misc/juce_AppleRemote.h +126 -0
  1561. package/ios/juce_modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp +133 -0
  1562. package/ios/juce_modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h +134 -0
  1563. package/ios/juce_modules/juce_gui_extra/misc/juce_ColourSelector.cpp +656 -0
  1564. package/ios/juce_modules/juce_gui_extra/misc/juce_ColourSelector.h +173 -0
  1565. package/ios/juce_modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp +486 -0
  1566. package/ios/juce_modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h +142 -0
  1567. package/ios/juce_modules/juce_gui_extra/misc/juce_LiveConstantEditor.cpp +501 -0
  1568. package/ios/juce_modules/juce_gui_extra/misc/juce_LiveConstantEditor.h +310 -0
  1569. package/ios/juce_modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp +165 -0
  1570. package/ios/juce_modules/juce_gui_extra/misc/juce_PreferencesPanel.h +156 -0
  1571. package/ios/juce_modules/juce_gui_extra/misc/juce_PushNotifications.cpp +239 -0
  1572. package/ios/juce_modules/juce_gui_extra/misc/juce_PushNotifications.h +714 -0
  1573. package/ios/juce_modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp +189 -0
  1574. package/ios/juce_modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h +186 -0
  1575. package/ios/juce_modules/juce_gui_extra/misc/juce_SplashScreen.cpp +110 -0
  1576. package/ios/juce_modules/juce_gui_extra/misc/juce_SplashScreen.h +165 -0
  1577. package/ios/juce_modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp +51 -0
  1578. package/ios/juce_modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h +125 -0
  1579. package/ios/juce_modules/juce_gui_extra/misc/juce_WebBrowserComponent.cpp +722 -0
  1580. package/ios/juce_modules/juce_gui_extra/misc/juce_WebBrowserComponent.h +626 -0
  1581. package/ios/juce_modules/juce_gui_extra/misc/juce_WebControlParameterIndexReceiver.h +76 -0
  1582. package/ios/juce_modules/juce_gui_extra/misc/juce_WebControlRelays.cpp +256 -0
  1583. package/ios/juce_modules/juce_gui_extra/misc/juce_WebControlRelays.h +254 -0
  1584. package/ios/juce_modules/juce_gui_extra/native/java/app/com/rmsl/juce/JuceWebViewClasses.java +356 -0
  1585. package/ios/juce_modules/juce_gui_extra/native/javaopt/app/com/rmsl/juce/JuceFirebaseInstanceIdService.java +50 -0
  1586. package/ios/juce_modules/juce_gui_extra/native/javaopt/app/com/rmsl/juce/JuceFirebaseMessagingService.java +69 -0
  1587. package/ios/juce_modules/juce_gui_extra/native/javascript/check_native_interop.js +146 -0
  1588. package/ios/juce_modules/juce_gui_extra/native/javascript/index.js +577 -0
  1589. package/ios/juce_modules/juce_gui_extra/native/javascript/package.json +4 -0
  1590. package/ios/juce_modules/juce_gui_extra/native/juce_ActiveXComponent_windows.cpp +553 -0
  1591. package/ios/juce_modules/juce_gui_extra/native/juce_AndroidViewComponent.cpp +199 -0
  1592. package/ios/juce_modules/juce_gui_extra/native/juce_AppleRemote_mac.mm +285 -0
  1593. package/ios/juce_modules/juce_gui_extra/native/juce_HWNDComponent_windows.cpp +203 -0
  1594. package/ios/juce_modules/juce_gui_extra/native/juce_NSViewComponent_mac.mm +203 -0
  1595. package/ios/juce_modules/juce_gui_extra/native/juce_NSViewFrameWatcher_mac.h +120 -0
  1596. package/ios/juce_modules/juce_gui_extra/native/juce_PushNotifications_android.cpp +1607 -0
  1597. package/ios/juce_modules/juce_gui_extra/native/juce_PushNotifications_ios.cpp +620 -0
  1598. package/ios/juce_modules/juce_gui_extra/native/juce_PushNotifications_mac.cpp +535 -0
  1599. package/ios/juce_modules/juce_gui_extra/native/juce_SystemTrayIcon_linux.cpp +160 -0
  1600. package/ios/juce_modules/juce_gui_extra/native/juce_SystemTrayIcon_mac.cpp +451 -0
  1601. package/ios/juce_modules/juce_gui_extra/native/juce_SystemTrayIcon_windows.cpp +251 -0
  1602. package/ios/juce_modules/juce_gui_extra/native/juce_UIViewComponent_ios.mm +151 -0
  1603. package/ios/juce_modules/juce_gui_extra/native/juce_WebBrowserComponent_android.cpp +953 -0
  1604. package/ios/juce_modules/juce_gui_extra/native/juce_WebBrowserComponent_linux.cpp +1659 -0
  1605. package/ios/juce_modules/juce_gui_extra/native/juce_WebBrowserComponent_mac.mm +1113 -0
  1606. package/ios/juce_modules/juce_gui_extra/native/juce_WebBrowserComponent_windows.cpp +1298 -0
  1607. package/ios/juce_modules/juce_gui_extra/native/juce_XEmbedComponent_linux.cpp +739 -0
  1608. package/package.json +1 -1
  1609. package/ios/JuceModules.mm +0 -14
  1610. package/ios/JuceToneGenerator.h +0 -39
  1611. package/ios/JuceToneGenerator.mm +0 -613
@@ -0,0 +1,3764 @@
1
+ /*
2
+ ==============================================================================
3
+
4
+ This file is part of the JUCE framework.
5
+ Copyright (c) Raw Material Software Limited
6
+
7
+ JUCE is an open source framework subject to commercial or open source
8
+ licensing.
9
+
10
+ By downloading, installing, or using the JUCE framework, or combining the
11
+ JUCE framework with any other source code, object code, content or any other
12
+ copyrightable work, you agree to the terms of the JUCE End User Licence
13
+ Agreement, and all incorporated terms including the JUCE Privacy Policy and
14
+ the JUCE Website Terms of Service, as applicable, which will bind you. If you
15
+ do not agree to the terms of these agreements, we will not license the JUCE
16
+ framework to you, and you must discontinue the installation or download
17
+ process and cease use of the JUCE framework.
18
+
19
+ JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
20
+ JUCE Privacy Policy: https://juce.com/juce-privacy-policy
21
+ JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
22
+
23
+ Or:
24
+
25
+ You may also use this code under the terms of the AGPLv3:
26
+ https://www.gnu.org/licenses/agpl-3.0.en.html
27
+
28
+ THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
29
+ WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
30
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
31
+
32
+ ==============================================================================
33
+ */
34
+
35
+ #if JUCE_PLUGINHOST_VST
36
+
37
+ //==============================================================================
38
+ #undef PRAGMA_ALIGN_SUPPORTED
39
+
40
+
41
+ #if ! JUCE_MSVC
42
+ #define __cdecl
43
+ #endif
44
+
45
+ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wzero-as-null-pointer-constant")
46
+ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4996)
47
+
48
+ #define VST_FORCE_DEPRECATED 0
49
+ #define JUCE_VSTINTERFACE_H_INCLUDED 1
50
+
51
+ namespace Vst2
52
+ {
53
+ struct AEffect;
54
+
55
+ // If the following files cannot be found then you are probably trying to host
56
+ // VST2 plug-ins. To do this you must have a VST2 SDK in your header search
57
+ // paths or use the "VST (Legacy) SDK Folder" field in the Projucer. The VST2
58
+ // SDK can be obtained from the vstsdk3610_11_06_2018_build_37 (or older) VST3
59
+ // SDK or JUCE version 5.3.2.
60
+ #include <pluginterfaces/vst2.x/aeffect.h>
61
+ #include <pluginterfaces/vst2.x/aeffectx.h>
62
+ }
63
+
64
+ #include "juce_VSTCommon.h"
65
+
66
+ JUCE_END_IGNORE_WARNINGS_GCC_LIKE
67
+ JUCE_END_IGNORE_WARNINGS_MSVC
68
+
69
+ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations")
70
+ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4355)
71
+
72
+ #include "juce_VSTMidiEventList.h"
73
+
74
+ #if ! JUCE_WINDOWS
75
+ static void _fpreset() {}
76
+ static void _clearfp() {}
77
+ #endif
78
+
79
+ #ifndef JUCE_VST_WRAPPER_LOAD_CUSTOM_MAIN
80
+ #define JUCE_VST_WRAPPER_LOAD_CUSTOM_MAIN
81
+ #endif
82
+
83
+ #ifndef JUCE_VST_WRAPPER_INVOKE_MAIN
84
+ #define JUCE_VST_WRAPPER_INVOKE_MAIN effect = module->moduleMain ((Vst2::audioMasterCallback) &audioMaster);
85
+ #endif
86
+
87
+ #ifndef JUCE_VST_FALLBACK_HOST_NAME
88
+ #define JUCE_VST_FALLBACK_HOST_NAME "Juce VST Host"
89
+ #endif
90
+
91
+ //==============================================================================
92
+ namespace juce
93
+ {
94
+
95
+ //==============================================================================
96
+ namespace
97
+ {
98
+ const int fxbVersionNum = 1;
99
+
100
+ struct fxProgram
101
+ {
102
+ int32 chunkMagic; // 'CcnK'
103
+ int32 byteSize; // of this chunk, excl. magic + byteSize
104
+ int32 fxMagic; // 'FxCk'
105
+ int32 version;
106
+ int32 fxID; // fx unique id
107
+ int32 fxVersion;
108
+ int32 numParams;
109
+ char prgName[28];
110
+ float params[1]; // variable no. of parameters
111
+ };
112
+
113
+ struct fxSet
114
+ {
115
+ int32 chunkMagic; // 'CcnK'
116
+ int32 byteSize; // of this chunk, excl. magic + byteSize
117
+ int32 fxMagic; // 'FxBk'
118
+ int32 version;
119
+ int32 fxID; // fx unique id
120
+ int32 fxVersion;
121
+ int32 numPrograms;
122
+ char future[128];
123
+ fxProgram programs[1]; // variable no. of programs
124
+ };
125
+
126
+ struct fxChunkSet
127
+ {
128
+ int32 chunkMagic; // 'CcnK'
129
+ int32 byteSize; // of this chunk, excl. magic + byteSize
130
+ int32 fxMagic; // 'FxCh', 'FPCh', or 'FBCh'
131
+ int32 version;
132
+ int32 fxID; // fx unique id
133
+ int32 fxVersion;
134
+ int32 numPrograms;
135
+ char future[128];
136
+ int32 chunkSize;
137
+ char chunk[8]; // variable
138
+ };
139
+
140
+ struct fxProgramSet
141
+ {
142
+ int32 chunkMagic; // 'CcnK'
143
+ int32 byteSize; // of this chunk, excl. magic + byteSize
144
+ int32 fxMagic; // 'FxCh', 'FPCh', or 'FBCh'
145
+ int32 version;
146
+ int32 fxID; // fx unique id
147
+ int32 fxVersion;
148
+ int32 numPrograms;
149
+ char name[28];
150
+ int32 chunkSize;
151
+ char chunk[8]; // variable
152
+ };
153
+
154
+ // Compares a magic value in either endianness.
155
+ static bool compareMagic (int32 magic, const char* name) noexcept
156
+ {
157
+ return magic == (int32) ByteOrder::littleEndianInt (name)
158
+ || magic == (int32) ByteOrder::bigEndianInt (name);
159
+ }
160
+
161
+ static int32 fxbName (const char* name) noexcept { return (int32) ByteOrder::littleEndianInt (name); }
162
+ static int32 fxbSwap (int32 x) noexcept { return (int32) ByteOrder::swapIfLittleEndian ((uint32) x); }
163
+
164
+ static float fxbSwapFloat (const float x) noexcept
165
+ {
166
+ #ifdef JUCE_LITTLE_ENDIAN
167
+ union { uint32 asInt; float asFloat; } n;
168
+ n.asFloat = x;
169
+ n.asInt = ByteOrder::swap (n.asInt);
170
+ return n.asFloat;
171
+ #else
172
+ return x;
173
+ #endif
174
+ }
175
+ }
176
+
177
+ //==============================================================================
178
+ namespace
179
+ {
180
+ static double getVSTHostTimeNanoseconds() noexcept
181
+ {
182
+ #if JUCE_WINDOWS
183
+ return timeGetTime() * 1000000.0;
184
+ #elif JUCE_LINUX || JUCE_BSD || JUCE_IOS || JUCE_ANDROID
185
+ timeval micro;
186
+ gettimeofday (&micro, nullptr);
187
+ return (double) micro.tv_usec * 1000.0;
188
+ #elif JUCE_MAC
189
+ UnsignedWide micro;
190
+ Microseconds (&micro);
191
+ return micro.lo * 1000.0;
192
+ #endif
193
+ }
194
+
195
+ static int shellUIDToCreate = 0;
196
+ static int insideVSTCallback = 0;
197
+
198
+ struct IdleCallRecursionPreventer
199
+ {
200
+ IdleCallRecursionPreventer() : isMessageThread (MessageManager::getInstance()->isThisTheMessageThread())
201
+ {
202
+ if (isMessageThread)
203
+ ++insideVSTCallback;
204
+ }
205
+
206
+ ~IdleCallRecursionPreventer()
207
+ {
208
+ if (isMessageThread)
209
+ --insideVSTCallback;
210
+ }
211
+
212
+ const bool isMessageThread;
213
+ JUCE_DECLARE_NON_COPYABLE (IdleCallRecursionPreventer)
214
+ };
215
+
216
+ #if JUCE_MAC
217
+ static bool makeFSRefFromPath (FSRef* destFSRef, const String& path)
218
+ {
219
+ return FSPathMakeRef (reinterpret_cast<const UInt8*> (path.toRawUTF8()), destFSRef, nullptr) == noErr;
220
+ }
221
+ #endif
222
+ }
223
+
224
+ //==============================================================================
225
+ typedef Vst2::AEffect* (VSTCALLBACK *MainCall) (Vst2::audioMasterCallback);
226
+ static pointer_sized_int VSTCALLBACK audioMaster (Vst2::AEffect*, int32, int32, pointer_sized_int, void*, float);
227
+
228
+ //==============================================================================
229
+ // Change this to disable logging of various VST activities
230
+ #ifndef VST_LOGGING
231
+ #define VST_LOGGING 1
232
+ #endif
233
+
234
+ #if VST_LOGGING
235
+ #define JUCE_VST_LOG(a) Logger::writeToLog(a);
236
+ #else
237
+ #define JUCE_VST_LOG(a)
238
+ #endif
239
+
240
+ //==============================================================================
241
+ #if JUCE_LINUX || JUCE_BSD
242
+
243
+ namespace
244
+ {
245
+ using EventProcPtr = void (*)(XEvent*);
246
+
247
+ Window getChildWindow (Window windowToCheck)
248
+ {
249
+ Window rootWindow, parentWindow;
250
+ Window* childWindows;
251
+ unsigned int numChildren = 0;
252
+
253
+ X11Symbols::getInstance()->xQueryTree (XWindowSystem::getInstance()->getDisplay(),
254
+ windowToCheck, &rootWindow, &parentWindow, &childWindows, &numChildren);
255
+
256
+ if (numChildren > 0)
257
+ return childWindows [0];
258
+
259
+ return 0;
260
+ }
261
+ }
262
+
263
+ #endif
264
+
265
+ //==============================================================================
266
+ class VSTXMLInfo
267
+ {
268
+ public:
269
+ static VSTXMLInfo* createFor (const juce::XmlElement& xml)
270
+ {
271
+ if (xml.hasTagName ("VSTParametersStructure"))
272
+ return new VSTXMLInfo (xml);
273
+
274
+ if (const auto* x = xml.getChildByName ("VSTParametersStructure"))
275
+ return new VSTXMLInfo (*x);
276
+
277
+ return nullptr;
278
+ }
279
+
280
+ struct Group;
281
+
282
+ struct Base
283
+ {
284
+ Base() noexcept {}
285
+ virtual ~Base() {}
286
+
287
+ Group* parent = nullptr;
288
+ };
289
+
290
+ struct Param final : public Base
291
+ {
292
+ int paramID;
293
+ juce::String expr, name, label;
294
+ juce::StringArray shortNames;
295
+ juce::String type;
296
+ int numberOfStates;
297
+ float defaultValue;
298
+ };
299
+
300
+ struct Group final : public Base
301
+ {
302
+ juce::String name;
303
+ juce::OwnedArray<Base> paramTree;
304
+ };
305
+
306
+ struct Range
307
+ {
308
+ Range() noexcept {}
309
+ Range (const juce::String& s) { set (s); }
310
+
311
+ void set (const juce::String& s)
312
+ {
313
+ inclusiveLow = s.startsWithChar ('[');
314
+ inclusiveHigh = s.endsWithChar (']');
315
+
316
+ auto str = s.removeCharacters ("[]");
317
+
318
+ low = str.upToFirstOccurrenceOf (",", false, false).getFloatValue();
319
+ high = str.fromLastOccurrenceOf (",", false, false).getFloatValue();
320
+ }
321
+
322
+ bool contains (float f) const noexcept
323
+ {
324
+ return (inclusiveLow ? (f >= low) : (f > low))
325
+ && (inclusiveHigh ? (f <= high) : (f < high));
326
+ }
327
+
328
+ float low = 0;
329
+ float high = 0;
330
+
331
+ bool inclusiveLow = false;
332
+ bool inclusiveHigh = false;
333
+ };
334
+
335
+ struct Entry
336
+ {
337
+ juce::String name;
338
+ Range range;
339
+ };
340
+
341
+ struct ValueType
342
+ {
343
+ juce::String name, label;
344
+ juce::OwnedArray<Entry> entries;
345
+ };
346
+
347
+ struct Template
348
+ {
349
+ juce::String name;
350
+ juce::OwnedArray<Param> params;
351
+ };
352
+
353
+ const Param* getParamForID (const int paramID, const Group* const grp) const
354
+ {
355
+ for (auto item : (grp != nullptr ? grp->paramTree : paramTree))
356
+ {
357
+ if (auto param = dynamic_cast<const Param*> (item))
358
+ if (param->paramID == paramID)
359
+ return param;
360
+
361
+ if (auto group = dynamic_cast<const Group*> (item))
362
+ if (auto res = getParamForID (paramID, group))
363
+ return res;
364
+ }
365
+
366
+ return nullptr;
367
+ }
368
+
369
+ const ValueType* getValueType (const juce::String& name) const
370
+ {
371
+ for (auto v : valueTypes)
372
+ if (v->name == name)
373
+ return v;
374
+
375
+ return nullptr;
376
+ }
377
+
378
+ juce::OwnedArray<Base> paramTree;
379
+ juce::OwnedArray<ValueType> valueTypes;
380
+ juce::OwnedArray<Template> templates;
381
+
382
+ ValueType switchValueType;
383
+
384
+ private:
385
+ VSTXMLInfo (const juce::XmlElement& xml)
386
+ {
387
+ switchValueType.entries.add (new Entry ({ TRANS ("Off"), Range ("[0, 0.5[") }));
388
+ switchValueType.entries.add (new Entry ({ TRANS ("On"), Range ("[0.5, 1]") }));
389
+
390
+ for (auto* item : xml.getChildIterator())
391
+ {
392
+ if (item->hasTagName ("Param")) parseParam (*item, nullptr, nullptr);
393
+ else if (item->hasTagName ("ValueType")) parseValueType (*item);
394
+ else if (item->hasTagName ("Template")) parseTemplate (*item);
395
+ else if (item->hasTagName ("Group")) parseGroup (*item, nullptr);
396
+ }
397
+ }
398
+
399
+ void parseParam (const juce::XmlElement& item, Group* group, Template* temp)
400
+ {
401
+ auto param = new Param();
402
+
403
+ if (temp != nullptr)
404
+ param->expr = item.getStringAttribute ("id");
405
+ else
406
+ param->paramID = item.getIntAttribute ("id");
407
+
408
+ param->name = item.getStringAttribute ("name");
409
+ param->label = item.getStringAttribute ("label");
410
+ param->type = item.getStringAttribute ("type");
411
+ param->numberOfStates = item.getIntAttribute ("numberOfStates");
412
+ param->defaultValue = (float) item.getDoubleAttribute ("defaultValue");
413
+
414
+ param->shortNames.addTokens (item.getStringAttribute ("shortName"), ",", juce::StringRef());
415
+ param->shortNames.trim();
416
+ param->shortNames.removeEmptyStrings();
417
+
418
+ if (group != nullptr)
419
+ {
420
+ group->paramTree.add (param);
421
+ param->parent = group;
422
+ }
423
+ else if (temp != nullptr)
424
+ {
425
+ temp->params.add (param);
426
+ }
427
+ else
428
+ {
429
+ paramTree.add (param);
430
+ }
431
+ }
432
+
433
+ void parseValueType (const juce::XmlElement& item)
434
+ {
435
+ auto vt = new ValueType();
436
+ valueTypes.add (vt);
437
+
438
+ vt->name = item.getStringAttribute ("name");
439
+ vt->label = item.getStringAttribute ("label");
440
+
441
+ int curEntry = 0;
442
+ const int numEntries = item.getNumChildElements();
443
+
444
+ for (auto* entryXml : item.getChildWithTagNameIterator ("Entry"))
445
+ {
446
+ auto entry = new Entry();
447
+ entry->name = entryXml->getStringAttribute ("name");
448
+
449
+ if (entryXml->hasAttribute ("value"))
450
+ {
451
+ entry->range.set (entryXml->getStringAttribute ("value"));
452
+ }
453
+ else
454
+ {
455
+ entry->range.low = (float) curEntry / (float) numEntries;
456
+ entry->range.high = (float) (curEntry + 1) / (float) numEntries;
457
+
458
+ entry->range.inclusiveLow = true;
459
+ entry->range.inclusiveHigh = (curEntry == numEntries - 1);
460
+ }
461
+
462
+ vt->entries.add (entry);
463
+ ++curEntry;
464
+ }
465
+ }
466
+
467
+ void parseTemplate (const juce::XmlElement& item)
468
+ {
469
+ auto temp = new Template();
470
+ templates.add (temp);
471
+ temp->name = item.getStringAttribute ("name");
472
+
473
+ for (auto* param : item.getChildIterator())
474
+ parseParam (*param, nullptr, temp);
475
+ }
476
+
477
+ void parseGroup (const juce::XmlElement& item, Group* parentGroup)
478
+ {
479
+ auto group = new Group();
480
+
481
+ if (parentGroup)
482
+ {
483
+ parentGroup->paramTree.add (group);
484
+ group->parent = parentGroup;
485
+ }
486
+ else
487
+ {
488
+ paramTree.add (group);
489
+ }
490
+
491
+ group->name = item.getStringAttribute ("name");
492
+
493
+ if (item.hasAttribute ("template"))
494
+ {
495
+ juce::StringArray variables;
496
+ variables.addTokens (item.getStringAttribute ("values"), ";", juce::StringRef());
497
+ variables.trim();
498
+
499
+ for (auto temp : templates)
500
+ {
501
+ if (temp->name == item.getStringAttribute ("template"))
502
+ {
503
+ for (int i = 0; i < temp->params.size(); ++i)
504
+ {
505
+ auto param = new Param();
506
+ group->paramTree.add (param);
507
+
508
+ param->parent = group;
509
+ param->paramID = evaluate (temp->params[i]->expr, variables);
510
+ param->defaultValue = temp->params[i]->defaultValue;
511
+ param->label = temp->params[i]->label;
512
+ param->name = temp->params[i]->name;
513
+ param->numberOfStates = temp->params[i]->numberOfStates;
514
+ param->shortNames = temp->params[i]->shortNames;
515
+ param->type = temp->params[i]->type;
516
+ }
517
+ }
518
+ }
519
+ }
520
+ else
521
+ {
522
+ for (auto* subItem : item.getChildIterator())
523
+ {
524
+ if (subItem->hasTagName ("Param")) parseParam (*subItem, group, nullptr);
525
+ else if (subItem->hasTagName ("Group")) parseGroup (*subItem, group);
526
+ }
527
+ }
528
+ }
529
+
530
+ int evaluate (juce::String expr, const juce::StringArray& variables) const
531
+ {
532
+ juce::StringArray names;
533
+ juce::Array<int> vals;
534
+
535
+ for (auto& v : variables)
536
+ {
537
+ if (v.contains ("="))
538
+ {
539
+ names.add (v.upToFirstOccurrenceOf ("=", false, false));
540
+ vals.add (v.fromFirstOccurrenceOf ("=", false, false).getIntValue());
541
+ }
542
+ }
543
+
544
+ for (int i = 0; i < names.size(); ++i)
545
+ {
546
+ for (;;)
547
+ {
548
+ const int idx = expr.indexOfWholeWord (names[i]);
549
+ if (idx < 0)
550
+ break;
551
+
552
+ expr = expr.replaceSection (idx, names[i].length(), juce::String (vals[i]));
553
+ }
554
+ }
555
+
556
+ expr = expr.retainCharacters ("01234567890-+")
557
+ .replace ("+", " + ")
558
+ .replace ("-", " - ");
559
+
560
+ juce::StringArray tokens;
561
+ tokens.addTokens (expr, " ", juce::StringRef());
562
+
563
+ bool add = true;
564
+ int val = 0;
565
+
566
+ for (const auto& s : tokens)
567
+ {
568
+ if (s == "+")
569
+ {
570
+ add = true;
571
+ }
572
+ else if (s == "-")
573
+ {
574
+ add = false;
575
+ }
576
+ else
577
+ {
578
+ if (add)
579
+ val += s.getIntValue();
580
+ else
581
+ val -= s.getIntValue();
582
+ }
583
+ }
584
+
585
+ return val;
586
+ }
587
+ };
588
+
589
+ //==============================================================================
590
+ struct ModuleHandle final : public ReferenceCountedObject
591
+ {
592
+ File file;
593
+ MainCall moduleMain, customMain = {};
594
+ String pluginName;
595
+ std::unique_ptr<XmlElement> vstXml;
596
+
597
+ using Ptr = ReferenceCountedObjectPtr<ModuleHandle>;
598
+
599
+ static Array<ModuleHandle*>& getActiveModules()
600
+ {
601
+ static Array<ModuleHandle*> activeModules;
602
+ return activeModules;
603
+ }
604
+
605
+ //==============================================================================
606
+ static Ptr findOrCreateModule (const File& file)
607
+ {
608
+ for (auto* module : getActiveModules())
609
+ if (module->file == file)
610
+ return module;
611
+
612
+ const IdleCallRecursionPreventer icrp;
613
+ shellUIDToCreate = 0;
614
+ _fpreset();
615
+
616
+ JUCE_VST_LOG ("Attempting to load VST: " + file.getFullPathName());
617
+
618
+ Ptr m = new ModuleHandle (file, nullptr);
619
+
620
+ if (m->open())
621
+ {
622
+ _fpreset();
623
+ return m;
624
+ }
625
+
626
+ return {};
627
+ }
628
+
629
+ //==============================================================================
630
+ ModuleHandle (const File& f, MainCall customMainCall)
631
+ : file (f), moduleMain (customMainCall)
632
+ {
633
+ getActiveModules().add (this);
634
+
635
+ #if JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD || JUCE_IOS || JUCE_ANDROID
636
+ fullParentDirectoryPathName = f.getParentDirectory().getFullPathName();
637
+ #elif JUCE_MAC
638
+ FSRef ref;
639
+ makeFSRefFromPath (&ref, f.getParentDirectory().getFullPathName());
640
+ FSGetCatalogInfo (&ref, kFSCatInfoNone, nullptr, nullptr, &parentDirFSSpec, nullptr);
641
+ #endif
642
+ }
643
+
644
+ ~ModuleHandle()
645
+ {
646
+ getActiveModules().removeFirstMatchingValue (this);
647
+ close();
648
+ }
649
+
650
+ //==============================================================================
651
+ #if ! JUCE_MAC
652
+ String fullParentDirectoryPathName;
653
+ #endif
654
+
655
+ #if JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD || JUCE_ANDROID
656
+ DynamicLibrary module;
657
+
658
+ bool open()
659
+ {
660
+ if (moduleMain != nullptr)
661
+ return true;
662
+
663
+ pluginName = file.getFileNameWithoutExtension();
664
+
665
+ module.open (file.getFullPathName());
666
+
667
+ moduleMain = (MainCall) module.getFunction ("VSTPluginMain");
668
+
669
+ if (moduleMain == nullptr)
670
+ moduleMain = (MainCall) module.getFunction ("main");
671
+
672
+ JUCE_VST_WRAPPER_LOAD_CUSTOM_MAIN
673
+
674
+ if (moduleMain != nullptr)
675
+ {
676
+ vstXml = parseXML (file.withFileExtension ("vstxml"));
677
+
678
+ #if JUCE_WINDOWS
679
+ if (vstXml == nullptr)
680
+ vstXml = parseXML (getDLLResource (file, "VSTXML", 1));
681
+ #endif
682
+ }
683
+
684
+ return moduleMain != nullptr;
685
+ }
686
+
687
+ void close()
688
+ {
689
+ _fpreset(); // (doesn't do any harm)
690
+
691
+ module.close();
692
+ }
693
+
694
+ void closeEffect (Vst2::AEffect* eff)
695
+ {
696
+ eff->dispatcher (eff, Vst2::effClose, 0, 0, nullptr, 0);
697
+ }
698
+
699
+ #if JUCE_WINDOWS
700
+ static String getDLLResource (const File& dllFile, const String& type, int resID)
701
+ {
702
+ DynamicLibrary dll (dllFile.getFullPathName());
703
+ auto dllModule = (HMODULE) dll.getNativeHandle();
704
+
705
+ if (dllModule != INVALID_HANDLE_VALUE)
706
+ {
707
+ if (auto res = FindResource (dllModule, MAKEINTRESOURCE (resID), type.toWideCharPointer()))
708
+ {
709
+ if (auto hGlob = LoadResource (dllModule, res))
710
+ {
711
+ auto* data = static_cast<const char*> (LockResource (hGlob));
712
+ return String::fromUTF8 (data, (int) SizeofResource (dllModule, res));
713
+ }
714
+ }
715
+ }
716
+
717
+ return {};
718
+ }
719
+ #endif
720
+ #else
721
+ Handle resHandle = {};
722
+ CFUniquePtr<CFBundleRef> bundleRef;
723
+
724
+ #if JUCE_MAC
725
+ CFBundleRefNum resFileId = {};
726
+ FSSpec parentDirFSSpec;
727
+ #endif
728
+
729
+ bool open()
730
+ {
731
+ if (moduleMain != nullptr)
732
+ return true;
733
+
734
+ bool ok = false;
735
+
736
+ if (file.hasFileExtension (".vst"))
737
+ {
738
+ auto* utf8 = file.getFullPathName().toRawUTF8();
739
+
740
+ if (auto url = CFUniquePtr<CFURLRef> (CFURLCreateFromFileSystemRepresentation (nullptr, (const UInt8*) utf8,
741
+ (CFIndex) strlen (utf8), file.isDirectory())))
742
+ {
743
+ bundleRef.reset (CFBundleCreate (kCFAllocatorDefault, url.get()));
744
+
745
+ if (bundleRef != nullptr)
746
+ {
747
+ if (CFBundleLoadExecutable (bundleRef.get()))
748
+ {
749
+ moduleMain = (MainCall) CFBundleGetFunctionPointerForName (bundleRef.get(), CFSTR ("main_macho"));
750
+
751
+ if (moduleMain == nullptr)
752
+ moduleMain = (MainCall) CFBundleGetFunctionPointerForName (bundleRef.get(), CFSTR ("VSTPluginMain"));
753
+
754
+ JUCE_VST_WRAPPER_LOAD_CUSTOM_MAIN
755
+
756
+ if (moduleMain != nullptr)
757
+ {
758
+ if (CFTypeRef name = CFBundleGetValueForInfoDictionaryKey (bundleRef.get(), CFSTR ("CFBundleName")))
759
+ {
760
+ if (CFGetTypeID (name) == CFStringGetTypeID())
761
+ {
762
+ char buffer[1024];
763
+
764
+ if (CFStringGetCString ((CFStringRef) name, buffer, sizeof (buffer), CFStringGetSystemEncoding()))
765
+ pluginName = buffer;
766
+ }
767
+ }
768
+
769
+ if (pluginName.isEmpty())
770
+ pluginName = file.getFileNameWithoutExtension();
771
+
772
+ #if JUCE_MAC
773
+ resFileId = CFBundleOpenBundleResourceMap (bundleRef.get());
774
+ #endif
775
+
776
+ ok = true;
777
+
778
+ auto vstXmlFiles = file
779
+ #if JUCE_MAC
780
+ .getChildFile ("Contents")
781
+ .getChildFile ("Resources")
782
+ #endif
783
+ .findChildFiles (File::findFiles, false, "*.vstxml");
784
+
785
+ if (! vstXmlFiles.isEmpty())
786
+ vstXml = parseXML (vstXmlFiles.getReference (0));
787
+ }
788
+ }
789
+
790
+ if (! ok)
791
+ {
792
+ CFBundleUnloadExecutable (bundleRef.get());
793
+ bundleRef = nullptr;
794
+ }
795
+ }
796
+ }
797
+ }
798
+
799
+ return ok;
800
+ }
801
+
802
+ void close()
803
+ {
804
+ if (bundleRef != nullptr)
805
+ {
806
+ #if JUCE_MAC
807
+ CFBundleCloseBundleResourceMap (bundleRef.get(), resFileId);
808
+ #endif
809
+
810
+ if (CFGetRetainCount (bundleRef.get()) == 1)
811
+ CFBundleUnloadExecutable (bundleRef.get());
812
+
813
+ if (CFGetRetainCount (bundleRef.get()) > 0)
814
+ bundleRef = nullptr;
815
+ }
816
+ }
817
+
818
+ void closeEffect (Vst2::AEffect* eff)
819
+ {
820
+ eff->dispatcher (eff, Vst2::effClose, 0, 0, nullptr, 0);
821
+ }
822
+
823
+ #endif
824
+
825
+ private:
826
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModuleHandle)
827
+ };
828
+
829
+ static const int defaultVSTSampleRateValue = 44100;
830
+ static const int defaultVSTBlockSizeValue = 512;
831
+
832
+ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4996)
833
+
834
+ class TempChannelPointers
835
+ {
836
+ public:
837
+ template <typename T>
838
+ auto getArrayOfModifiableWritePointers (AudioBuffer<T>& buffer)
839
+ {
840
+ auto& pointers = getPointers (Tag<T>{});
841
+
842
+ jassert (buffer.getNumChannels() <= static_cast<int> (pointers.capacity()));
843
+ pointers.resize (jmax (pointers.size(), (size_t) buffer.getNumChannels()));
844
+
845
+ std::copy (buffer.getArrayOfWritePointers(),
846
+ buffer.getArrayOfWritePointers() + buffer.getNumChannels(),
847
+ pointers.begin());
848
+
849
+ return pointers.data();
850
+ }
851
+
852
+ private:
853
+ template <typename> struct Tag {};
854
+
855
+ auto& getPointers (Tag<float>) { return floatPointers; }
856
+ auto& getPointers (Tag<double>) { return doublePointers; }
857
+
858
+ std::vector<float*> floatPointers { 128 };
859
+ std::vector<double*> doublePointers { 128 };
860
+ };
861
+
862
+ //==============================================================================
863
+ struct VSTPluginInstance final : public AudioPluginInstance,
864
+ private Timer,
865
+ private AsyncUpdater
866
+ {
867
+ struct VSTParameter final : public Parameter
868
+ {
869
+ VSTParameter (VSTPluginInstance& parent,
870
+ const String& paramName,
871
+ const Array<String>& shortParamNames,
872
+ float paramDefaultValue,
873
+ const String& paramLabel,
874
+ bool paramIsAutomatable,
875
+ bool paramIsDiscrete,
876
+ int numParamSteps,
877
+ bool isBoolSwitch,
878
+ const StringArray& paramValueStrings,
879
+ const VSTXMLInfo::ValueType* paramValueType)
880
+ : pluginInstance (parent),
881
+ name (paramName),
882
+ shortNames (shortParamNames),
883
+ defaultValue (paramDefaultValue),
884
+ label (paramLabel),
885
+ automatable (paramIsAutomatable),
886
+ discrete (paramIsDiscrete),
887
+ numSteps (numParamSteps),
888
+ isSwitch (isBoolSwitch),
889
+ vstValueStrings (paramValueStrings),
890
+ valueType (paramValueType)
891
+ {
892
+ }
893
+
894
+ float getValue() const override
895
+ {
896
+ if (auto* effect = pluginInstance.vstEffect)
897
+ {
898
+ const ScopedLock sl (pluginInstance.lock);
899
+
900
+ return effect->getParameter (effect, getParameterIndex());
901
+ }
902
+
903
+ return 0.0f;
904
+ }
905
+
906
+ void setValue (float newValue) override
907
+ {
908
+ if (auto* effect = pluginInstance.vstEffect)
909
+ {
910
+ const ScopedLock sl (pluginInstance.lock);
911
+
912
+ if (! approximatelyEqual (effect->getParameter (effect, getParameterIndex()), newValue))
913
+ effect->setParameter (effect, getParameterIndex(), newValue);
914
+ }
915
+ }
916
+
917
+ String getText (float value, int maximumStringLength) const override
918
+ {
919
+ if (valueType != nullptr)
920
+ {
921
+ for (auto& v : valueType->entries)
922
+ if (v->range.contains (value))
923
+ return v->name;
924
+ }
925
+
926
+ return Parameter::getText (value, maximumStringLength);
927
+ }
928
+
929
+ float getValueForText (const String& text) const override
930
+ {
931
+ if (valueType != nullptr)
932
+ {
933
+ for (auto& v : valueType->entries)
934
+ if (v->name == text)
935
+ return (v->range.high + v->range.low) / 2.0f;
936
+ }
937
+
938
+ return Parameter::getValueForText (text);
939
+ }
940
+
941
+ String getCurrentValueAsText() const override
942
+ {
943
+ if (valueType != nullptr || ! vstValueStrings.isEmpty())
944
+ return getText (getValue(), 1024);
945
+
946
+ return pluginInstance.getTextForOpcode (getParameterIndex(), Vst2::effGetParamDisplay);
947
+ }
948
+
949
+ float getDefaultValue() const override
950
+ {
951
+ return defaultValue;
952
+ }
953
+
954
+ String getName (int maximumStringLength) const override
955
+ {
956
+ if (name.isEmpty())
957
+ return pluginInstance.getTextForOpcode (getParameterIndex(),
958
+ Vst2::effGetParamName);
959
+
960
+ if (name.length() <= maximumStringLength)
961
+ return name;
962
+
963
+ if (! shortNames.isEmpty())
964
+ {
965
+ for (auto& n : shortNames)
966
+ if (n.length() <= maximumStringLength)
967
+ return n;
968
+
969
+ return shortNames.getLast();
970
+ }
971
+
972
+ return name;
973
+ }
974
+
975
+ String getLabel() const override
976
+ {
977
+ return label.isEmpty() ? pluginInstance.getTextForOpcode (getParameterIndex(),
978
+ Vst2::effGetParamLabel)
979
+ : label;
980
+ }
981
+
982
+ bool isAutomatable() const override
983
+ {
984
+ return automatable;
985
+ }
986
+
987
+ bool isDiscrete() const override
988
+ {
989
+ return discrete;
990
+ }
991
+
992
+ bool isBoolean() const override
993
+ {
994
+ return isSwitch;
995
+ }
996
+
997
+ int getNumSteps() const override
998
+ {
999
+ return numSteps;
1000
+ }
1001
+
1002
+ StringArray getAllValueStrings() const override
1003
+ {
1004
+ return vstValueStrings;
1005
+ }
1006
+
1007
+ String getParameterID() const override
1008
+ {
1009
+ return String (getParameterIndex());
1010
+ }
1011
+
1012
+ VSTPluginInstance& pluginInstance;
1013
+
1014
+ const String name;
1015
+ const Array<String> shortNames;
1016
+ const float defaultValue;
1017
+ const String label;
1018
+ const bool automatable, discrete;
1019
+ const int numSteps;
1020
+ const bool isSwitch;
1021
+ const StringArray vstValueStrings;
1022
+ const VSTXMLInfo::ValueType* const valueType;
1023
+ };
1024
+
1025
+ VSTPluginInstance (const ModuleHandle::Ptr& mh, const BusesProperties& ioConfig, Vst2::AEffect* effect,
1026
+ double sampleRateToUse, int blockSizeToUse)
1027
+ : AudioPluginInstance (ioConfig),
1028
+ vstEffect (effect),
1029
+ vstModule (mh),
1030
+ name (mh->pluginName),
1031
+ bypassParam (new VST2BypassParameter (*this))
1032
+ {
1033
+ jassert (vstEffect != nullptr);
1034
+
1035
+ if (auto* xml = vstModule->vstXml.get())
1036
+ xmlInfo.reset (VSTXMLInfo::createFor (*xml));
1037
+
1038
+ refreshParameterList();
1039
+
1040
+ vstSupportsBypass = (pluginCanDo ("bypass") > 0);
1041
+ setRateAndBufferSizeDetails (sampleRateToUse, blockSizeToUse);
1042
+ }
1043
+
1044
+ void refreshParameterList() override
1045
+ {
1046
+ AudioProcessorParameterGroup newParameterTree;
1047
+
1048
+ for (int i = 0; i < vstEffect->numParams; ++i)
1049
+ {
1050
+ String paramName;
1051
+ Array<String> shortParamNames;
1052
+ float defaultValue = 0;
1053
+ String label;
1054
+ bool isAutomatable = dispatch (Vst2::effCanBeAutomated, i, 0, nullptr, 0) != 0;
1055
+ bool isDiscrete = false;
1056
+ int numSteps = AudioProcessor::getDefaultNumParameterSteps();
1057
+ bool isBoolSwitch = false;
1058
+ StringArray parameterValueStrings;
1059
+ const VSTXMLInfo::ValueType* valueType = nullptr;
1060
+
1061
+ if (xmlInfo != nullptr)
1062
+ {
1063
+ if (auto* param = xmlInfo->getParamForID (i, nullptr))
1064
+ {
1065
+ paramName = param->name;
1066
+
1067
+ for (auto& n : param->shortNames)
1068
+ shortParamNames.add (n);
1069
+
1070
+ struct LengthComparator
1071
+ {
1072
+ static int compareElements (const juce::String& first, const juce::String& second) noexcept
1073
+ {
1074
+ return first.length() - second.length();
1075
+ }
1076
+ };
1077
+
1078
+ LengthComparator comp;
1079
+ shortParamNames.sort (comp);
1080
+
1081
+ defaultValue = param->defaultValue;
1082
+ label = param->label;
1083
+
1084
+ if (param->type == "switch")
1085
+ {
1086
+ isBoolSwitch = true;
1087
+ numSteps = 2;
1088
+ valueType = &xmlInfo->switchValueType;
1089
+ }
1090
+ else
1091
+ {
1092
+ valueType = xmlInfo->getValueType (param->type);
1093
+ }
1094
+
1095
+ if (param->numberOfStates >= 2)
1096
+ {
1097
+ numSteps = param->numberOfStates;
1098
+
1099
+ if (valueType != nullptr)
1100
+ {
1101
+ for (auto* entry : valueType->entries)
1102
+ parameterValueStrings.add (entry->name);
1103
+
1104
+ parameterValueStrings.removeEmptyStrings();
1105
+ }
1106
+ }
1107
+
1108
+ isDiscrete = (numSteps != AudioProcessor::getDefaultNumParameterSteps());
1109
+ }
1110
+ }
1111
+
1112
+ newParameterTree.addChild (std::make_unique<VSTParameter> (*this, paramName, shortParamNames, defaultValue,
1113
+ label, isAutomatable, isDiscrete, numSteps,
1114
+ isBoolSwitch, parameterValueStrings, valueType));
1115
+ }
1116
+
1117
+ setHostedParameterTree (std::move (newParameterTree));
1118
+ }
1119
+
1120
+ ~VSTPluginInstance() override
1121
+ {
1122
+ if (vstEffect != nullptr && vstEffect->magic == 0x56737450 /* 'VstP' */)
1123
+ callOnMessageThread ([this] { cleanup(); });
1124
+ }
1125
+
1126
+ void cleanup()
1127
+ {
1128
+ if (vstEffect != nullptr && vstEffect->magic == 0x56737450 /* 'VstP' */)
1129
+ {
1130
+ #if JUCE_MAC
1131
+ if (vstModule->resFileId != 0)
1132
+ UseResFile (vstModule->resFileId);
1133
+ #endif
1134
+
1135
+ // Must delete any editors before deleting the plugin instance!
1136
+ jassert (getActiveEditor() == nullptr);
1137
+
1138
+ _fpreset(); // some dodgy plug-ins mess around with this
1139
+
1140
+ vstModule->closeEffect (vstEffect);
1141
+ }
1142
+
1143
+ vstModule = nullptr;
1144
+ vstEffect = nullptr;
1145
+ }
1146
+
1147
+ static VSTPluginInstance* create (const ModuleHandle::Ptr& newModule,
1148
+ double initialSampleRate,
1149
+ int initialBlockSize)
1150
+ {
1151
+ if (auto* newEffect = constructEffect (newModule))
1152
+ {
1153
+ newEffect->resvd2 = 0;
1154
+
1155
+ newEffect->dispatcher (newEffect, Vst2::effIdentify, 0, 0, nullptr, 0);
1156
+
1157
+ auto blockSize = jmax (32, initialBlockSize);
1158
+
1159
+ newEffect->dispatcher (newEffect, Vst2::effSetSampleRate, 0, 0, nullptr, static_cast<float> (initialSampleRate));
1160
+ newEffect->dispatcher (newEffect, Vst2::effSetBlockSize, 0, blockSize, nullptr, 0);
1161
+
1162
+ newEffect->dispatcher (newEffect, Vst2::effOpen, 0, 0, nullptr, 0);
1163
+ BusesProperties ioConfig = queryBusIO (newEffect);
1164
+
1165
+ return new VSTPluginInstance (newModule, ioConfig, newEffect, initialSampleRate, blockSize);
1166
+ }
1167
+
1168
+ return nullptr;
1169
+ }
1170
+
1171
+ //==============================================================================
1172
+ void fillInPluginDescription (PluginDescription& desc) const override
1173
+ {
1174
+ desc.name = name;
1175
+
1176
+ {
1177
+ char buffer[512] = { 0 };
1178
+ dispatch (Vst2::effGetEffectName, 0, 0, buffer, 0);
1179
+
1180
+ desc.descriptiveName = String::createStringFromData (buffer, (int) sizeof (buffer)).trim();
1181
+
1182
+ if (desc.descriptiveName.isEmpty())
1183
+ desc.descriptiveName = name;
1184
+ }
1185
+
1186
+ desc.fileOrIdentifier = vstModule->file.getFullPathName();
1187
+ desc.uniqueId = desc.deprecatedUid = getUID();
1188
+ desc.lastFileModTime = vstModule->file.getLastModificationTime();
1189
+ desc.lastInfoUpdateTime = Time::getCurrentTime();
1190
+ desc.pluginFormatName = "VST";
1191
+ desc.category = getCategory();
1192
+
1193
+ {
1194
+ char buffer[512] = { 0 };
1195
+ dispatch (Vst2::effGetVendorString, 0, 0, buffer, 0);
1196
+ desc.manufacturerName = String::createStringFromData (buffer, (int) sizeof (buffer)).trim();
1197
+ }
1198
+
1199
+ desc.version = getVersion();
1200
+ desc.numInputChannels = getTotalNumInputChannels();
1201
+ desc.numOutputChannels = getTotalNumOutputChannels();
1202
+ desc.isInstrument = isSynthPlugin();
1203
+ }
1204
+
1205
+ bool initialiseEffect (double initialSampleRate, int initialBlockSize)
1206
+ {
1207
+ if (vstEffect != nullptr)
1208
+ {
1209
+ vstEffect->resvd2 = (pointer_sized_int) (pointer_sized_int) this;
1210
+ initialise (initialSampleRate, initialBlockSize);
1211
+ return true;
1212
+ }
1213
+
1214
+ return false;
1215
+ }
1216
+
1217
+ void initialise (double initialSampleRate, int initialBlockSize)
1218
+ {
1219
+ if (initialised || vstEffect == nullptr)
1220
+ return;
1221
+
1222
+ #if JUCE_WINDOWS
1223
+ // On Windows it's highly advisable to create your plugins using the message thread,
1224
+ // because many plugins need a chance to create HWNDs that will get their
1225
+ // messages delivered by the main message thread, and that's not possible from
1226
+ // a background thread.
1227
+ JUCE_ASSERT_MESSAGE_THREAD
1228
+ #endif
1229
+
1230
+ JUCE_VST_LOG ("Initialising VST: " + vstModule->pluginName + " (" + getVersion() + ")");
1231
+ initialised = true;
1232
+
1233
+ setRateAndBufferSizeDetails (initialSampleRate, initialBlockSize);
1234
+
1235
+ dispatch (Vst2::effIdentify, 0, 0, nullptr, 0);
1236
+
1237
+ if (getSampleRate() > 0)
1238
+ dispatch (Vst2::effSetSampleRate, 0, 0, nullptr, (float) getSampleRate());
1239
+
1240
+ if (getBlockSize() > 0)
1241
+ dispatch (Vst2::effSetBlockSize, 0, jmax (32, getBlockSize()), nullptr, 0);
1242
+
1243
+ dispatch (Vst2::effOpen, 0, 0, nullptr, 0);
1244
+
1245
+ setRateAndBufferSizeDetails (getSampleRate(), getBlockSize());
1246
+
1247
+ if (getNumPrograms() > 1)
1248
+ setCurrentProgram (0);
1249
+ else
1250
+ dispatch (Vst2::effSetProgram, 0, 0, nullptr, 0);
1251
+
1252
+ for (int i = vstEffect->numInputs; --i >= 0;) dispatch (Vst2::effConnectInput, i, 1, nullptr, 0);
1253
+ for (int i = vstEffect->numOutputs; --i >= 0;) dispatch (Vst2::effConnectOutput, i, 1, nullptr, 0);
1254
+
1255
+ if (getVstCategory() != Vst2::kPlugCategShell) // (workaround for Waves 5 plugins which crash during this call)
1256
+ updateStoredProgramNames();
1257
+
1258
+ wantsMidiMessages = pluginCanDo ("receiveVstMidiEvent") > 0 || isSynthPlugin();
1259
+
1260
+ setLatencySamples (vstEffect->initialDelay);
1261
+ }
1262
+
1263
+ void getExtensions (ExtensionsVisitor& visitor) const override
1264
+ {
1265
+ struct Extensions final : public ExtensionsVisitor::VSTClient
1266
+ {
1267
+ explicit Extensions (const VSTPluginInstance* instanceIn) : instance (instanceIn) {}
1268
+
1269
+ AEffect* getAEffectPtr() const noexcept override { return reinterpret_cast<AEffect*> (instance->vstEffect); }
1270
+
1271
+ const VSTPluginInstance* instance = nullptr;
1272
+ };
1273
+
1274
+ visitor.visitVSTClient (Extensions { this });
1275
+ }
1276
+
1277
+ void* getPlatformSpecificData() override { return vstEffect; }
1278
+
1279
+ const String getName() const override
1280
+ {
1281
+ if (vstEffect != nullptr)
1282
+ {
1283
+ char buffer[512] = { 0 };
1284
+
1285
+ if (dispatch (Vst2::effGetProductString, 0, 0, buffer, 0) != 0)
1286
+ {
1287
+ String productName = String::createStringFromData (buffer, (int) sizeof (buffer));
1288
+
1289
+ if (productName.isNotEmpty())
1290
+ return productName;
1291
+ }
1292
+ }
1293
+
1294
+ return name;
1295
+ }
1296
+
1297
+ int getUID() const
1298
+ {
1299
+ int uid = vstEffect != nullptr ? vstEffect->uniqueID : 0;
1300
+
1301
+ if (uid == 0)
1302
+ uid = vstModule->file.hashCode();
1303
+
1304
+ return uid;
1305
+ }
1306
+
1307
+ double getTailLengthSeconds() const override
1308
+ {
1309
+ if (vstEffect == nullptr)
1310
+ return 0.0;
1311
+
1312
+ if ((vstEffect->flags & Vst2::effFlagsNoSoundInStop) != 0)
1313
+ return 0.0;
1314
+
1315
+ auto tailSize = dispatch (Vst2::effGetTailSize, 0, 0, nullptr, 0);
1316
+ auto sampleRate = getSampleRate();
1317
+
1318
+ // remain backward compatible with old JUCE plug-ins: anything larger
1319
+ // than INT32_MAX is an invalid tail time but old JUCE 64-bit plug-ins
1320
+ // would return INT64_MAX for infinite tail time. So treat anything
1321
+ // equal or greater than INT32_MAX as infinite tail time.
1322
+ if (tailSize >= std::numeric_limits<int32>::max())
1323
+ return std::numeric_limits<double>::infinity();
1324
+
1325
+ if (tailSize >= 0 && sampleRate > 0)
1326
+ return static_cast<double> (tailSize) / sampleRate;
1327
+
1328
+ return 0.0;
1329
+ }
1330
+
1331
+ bool acceptsMidi() const override { return wantsMidiMessages; }
1332
+ bool producesMidi() const override { return pluginCanDo ("sendVstMidiEvent") > 0; }
1333
+ bool supportsMPE() const override { return pluginCanDo ("MPE") > 0; }
1334
+
1335
+ Vst2::VstPlugCategory getVstCategory() const noexcept { return (Vst2::VstPlugCategory) dispatch (Vst2::effGetPlugCategory, 0, 0, nullptr, 0); }
1336
+
1337
+ bool isSynthPlugin() const { return (vstEffect != nullptr && (vstEffect->flags & Vst2::effFlagsIsSynth) != 0); }
1338
+
1339
+ int pluginCanDo (const char* text) const { return (int) dispatch (Vst2::effCanDo, 0, 0, (void*) text, 0); }
1340
+
1341
+ //==============================================================================
1342
+ void prepareToPlay (double rate, int samplesPerBlockExpected) override
1343
+ {
1344
+ auto numInputBuses = getBusCount (true);
1345
+ auto numOutputBuses = getBusCount (false);
1346
+
1347
+ setRateAndBufferSizeDetails (rate, samplesPerBlockExpected);
1348
+
1349
+ if (numInputBuses <= 1 && numOutputBuses <= 1)
1350
+ {
1351
+ SpeakerMappings::VstSpeakerConfigurationHolder inArr (getChannelLayoutOfBus (true, 0));
1352
+ SpeakerMappings::VstSpeakerConfigurationHolder outArr (getChannelLayoutOfBus (false, 0));
1353
+
1354
+ dispatch (Vst2::effSetSpeakerArrangement, 0, (pointer_sized_int) &inArr.get(), (void*) &outArr.get(), 0.0f);
1355
+ }
1356
+
1357
+ vstHostTime.tempo = 120.0;
1358
+ vstHostTime.timeSigNumerator = 4;
1359
+ vstHostTime.timeSigDenominator = 4;
1360
+ vstHostTime.sampleRate = rate;
1361
+ vstHostTime.samplePos = 0;
1362
+ vstHostTime.flags = Vst2::kVstNanosValid
1363
+ | Vst2::kVstAutomationWriting
1364
+ | Vst2::kVstAutomationReading;
1365
+
1366
+ initialise (rate, samplesPerBlockExpected);
1367
+
1368
+ if (initialised)
1369
+ {
1370
+ wantsMidiMessages = wantsMidiMessages || (pluginCanDo ("receiveVstMidiEvent") > 0) || isSynthPlugin();
1371
+
1372
+ if (wantsMidiMessages)
1373
+ midiEventsToSend.ensureSize (256);
1374
+ else
1375
+ midiEventsToSend.freeEvents();
1376
+
1377
+ incomingMidi.clear();
1378
+
1379
+ dispatch (Vst2::effSetSampleRate, 0, 0, nullptr, (float) rate);
1380
+ dispatch (Vst2::effSetBlockSize, 0, jmax (16, samplesPerBlockExpected), nullptr, 0);
1381
+
1382
+ if (supportsDoublePrecisionProcessing())
1383
+ {
1384
+ int32 vstPrecision = isUsingDoublePrecision() ? Vst2::kVstProcessPrecision64
1385
+ : Vst2::kVstProcessPrecision32;
1386
+
1387
+ dispatch (Vst2::effSetProcessPrecision, 0, (pointer_sized_int) vstPrecision, nullptr, 0);
1388
+ }
1389
+
1390
+ auto maxChannels = jmax (1, jmax (vstEffect->numInputs, vstEffect->numOutputs));
1391
+
1392
+ tmpBufferFloat .setSize (maxChannels, samplesPerBlockExpected);
1393
+ tmpBufferDouble.setSize (maxChannels, samplesPerBlockExpected);
1394
+
1395
+ channelBufferFloat .calloc (static_cast<size_t> (maxChannels));
1396
+ channelBufferDouble.calloc (static_cast<size_t> (maxChannels));
1397
+
1398
+ outOfPlaceBuffer.setSize (jmax (1, vstEffect->numOutputs), samplesPerBlockExpected);
1399
+
1400
+ if (! isPowerOn)
1401
+ setPower (true);
1402
+
1403
+ // dodgy hack to force some plugins to initialise the sample rate.
1404
+ if (! hasEditor())
1405
+ {
1406
+ if (auto* firstParam = getParameters()[0])
1407
+ {
1408
+ auto old = firstParam->getValue();
1409
+ firstParam->setValue ((old < 0.5f) ? 1.0f : 0.0f);
1410
+ firstParam->setValue (old);
1411
+ }
1412
+ }
1413
+
1414
+ dispatch (Vst2::effStartProcess, 0, 0, nullptr, 0);
1415
+
1416
+ setLatencySamples (vstEffect->initialDelay);
1417
+ }
1418
+ }
1419
+
1420
+ void releaseResources() override
1421
+ {
1422
+ if (initialised)
1423
+ {
1424
+ dispatch (Vst2::effStopProcess, 0, 0, nullptr, 0);
1425
+ setPower (false);
1426
+ }
1427
+
1428
+ channelBufferFloat.free();
1429
+ tmpBufferFloat.setSize (0, 0);
1430
+
1431
+ channelBufferDouble.free();
1432
+ tmpBufferDouble.setSize (0, 0);
1433
+
1434
+ outOfPlaceBuffer.setSize (1, 1);
1435
+ incomingMidi.clear();
1436
+
1437
+ midiEventsToSend.freeEvents();
1438
+ }
1439
+
1440
+ void reset() override
1441
+ {
1442
+ if (isPowerOn)
1443
+ {
1444
+ setPower (false);
1445
+ setPower (true);
1446
+ }
1447
+ }
1448
+
1449
+ //==============================================================================
1450
+ void processBlock (AudioBuffer<float>& buffer, MidiBuffer& midiMessages) override
1451
+ {
1452
+ jassert (! isUsingDoublePrecision());
1453
+ processAudio (buffer, midiMessages, tmpBufferFloat, channelBufferFloat, false);
1454
+ }
1455
+
1456
+ void processBlock (AudioBuffer<double>& buffer, MidiBuffer& midiMessages) override
1457
+ {
1458
+ jassert (isUsingDoublePrecision());
1459
+ processAudio (buffer, midiMessages, tmpBufferDouble, channelBufferDouble, false);
1460
+ }
1461
+
1462
+ void processBlockBypassed (AudioBuffer<float>& buffer, MidiBuffer& midiMessages) override
1463
+ {
1464
+ jassert (! isUsingDoublePrecision());
1465
+ processAudio (buffer, midiMessages, tmpBufferFloat, channelBufferFloat, true);
1466
+ }
1467
+
1468
+ void processBlockBypassed (AudioBuffer<double>& buffer, MidiBuffer& midiMessages) override
1469
+ {
1470
+ jassert (isUsingDoublePrecision());
1471
+ processAudio (buffer, midiMessages, tmpBufferDouble, channelBufferDouble, true);
1472
+ }
1473
+
1474
+ //==============================================================================
1475
+ bool supportsDoublePrecisionProcessing() const override
1476
+ {
1477
+ return ((vstEffect->flags & Vst2::effFlagsCanReplacing) != 0
1478
+ && (vstEffect->flags & Vst2::effFlagsCanDoubleReplacing) != 0);
1479
+ }
1480
+
1481
+ AudioProcessorParameter* getBypassParameter() const override { return vstSupportsBypass ? bypassParam.get() : nullptr; }
1482
+
1483
+ //==============================================================================
1484
+ bool canAddBus (bool) const override { return false; }
1485
+ bool canRemoveBus (bool) const override { return false; }
1486
+
1487
+ bool isBusesLayoutSupported (const BusesLayout& layouts) const override
1488
+ {
1489
+ auto numInputBuses = getBusCount (true);
1490
+ auto numOutputBuses = getBusCount (false);
1491
+
1492
+ // it's not possible to change layout if there are sidechains/aux buses
1493
+ if (numInputBuses > 1 || numOutputBuses > 1)
1494
+ return (layouts == getBusesLayout());
1495
+
1496
+ return (layouts.getNumChannels (true, 0) <= vstEffect->numInputs
1497
+ && layouts.getNumChannels (false, 0) <= vstEffect->numOutputs);
1498
+ }
1499
+
1500
+ //==============================================================================
1501
+ #if JUCE_IOS || JUCE_ANDROID
1502
+ bool hasEditor() const override { return false; }
1503
+ #else
1504
+ bool hasEditor() const override { return vstEffect != nullptr && (vstEffect->flags & Vst2::effFlagsHasEditor) != 0; }
1505
+ #endif
1506
+
1507
+ AudioProcessorEditor* createEditor() override;
1508
+
1509
+ //==============================================================================
1510
+ const String getInputChannelName (int index) const override
1511
+ {
1512
+ if (isValidChannel (index, true))
1513
+ {
1514
+ Vst2::VstPinProperties pinProps;
1515
+ if (dispatch (Vst2::effGetInputProperties, index, 0, &pinProps, 0.0f) != 0)
1516
+ return String (pinProps.label, sizeof (pinProps.label));
1517
+ }
1518
+
1519
+ return {};
1520
+ }
1521
+
1522
+ bool isInputChannelStereoPair (int index) const override
1523
+ {
1524
+ if (! isValidChannel (index, true))
1525
+ return false;
1526
+
1527
+ Vst2::VstPinProperties pinProps;
1528
+ if (dispatch (Vst2::effGetInputProperties, index, 0, &pinProps, 0.0f) != 0)
1529
+ return (pinProps.flags & Vst2::kVstPinIsStereo) != 0;
1530
+
1531
+ return true;
1532
+ }
1533
+
1534
+ const String getOutputChannelName (int index) const override
1535
+ {
1536
+ if (isValidChannel (index, false))
1537
+ {
1538
+ Vst2::VstPinProperties pinProps;
1539
+ if (dispatch (Vst2::effGetOutputProperties, index, 0, &pinProps, 0.0f) != 0)
1540
+ return String (pinProps.label, sizeof (pinProps.label));
1541
+ }
1542
+
1543
+ return {};
1544
+ }
1545
+
1546
+ bool isOutputChannelStereoPair (int index) const override
1547
+ {
1548
+ if (! isValidChannel (index, false))
1549
+ return false;
1550
+
1551
+ Vst2::VstPinProperties pinProps;
1552
+ if (dispatch (Vst2::effGetOutputProperties, index, 0, &pinProps, 0.0f) != 0)
1553
+ return (pinProps.flags & Vst2::kVstPinIsStereo) != 0;
1554
+
1555
+ return true;
1556
+ }
1557
+
1558
+ bool isValidChannel (int index, bool isInput) const noexcept
1559
+ {
1560
+ return isPositiveAndBelow (index, isInput ? getTotalNumInputChannels()
1561
+ : getTotalNumOutputChannels());
1562
+ }
1563
+
1564
+ //==============================================================================
1565
+ int getNumPrograms() override { return vstEffect != nullptr ? jmax (0, vstEffect->numPrograms) : 0; }
1566
+
1567
+ // NB: some plugs return negative numbers from this function.
1568
+ int getCurrentProgram() override { return (int) dispatch (Vst2::effGetProgram, 0, 0, nullptr, 0); }
1569
+
1570
+ void setCurrentProgram (int newIndex) override
1571
+ {
1572
+ if (getNumPrograms() > 0 && newIndex != getCurrentProgram())
1573
+ dispatch (Vst2::effSetProgram, 0, jlimit (0, getNumPrograms() - 1, newIndex), nullptr, 0);
1574
+ }
1575
+
1576
+ const String getProgramName (int index) override
1577
+ {
1578
+ if (index >= 0)
1579
+ {
1580
+ if (index == getCurrentProgram())
1581
+ return getCurrentProgramName();
1582
+
1583
+ if (vstEffect != nullptr)
1584
+ {
1585
+ char nm[264] = { 0 };
1586
+
1587
+ if (dispatch (Vst2::effGetProgramNameIndexed, jlimit (0, getNumPrograms() - 1, index), -1, nm, 0) != 0)
1588
+ return String::fromUTF8 (nm).trim();
1589
+ }
1590
+ }
1591
+
1592
+ return {};
1593
+ }
1594
+
1595
+ void changeProgramName (int index, const String& newName) override
1596
+ {
1597
+ if (index >= 0 && index == getCurrentProgram())
1598
+ {
1599
+ if (getNumPrograms() > 0 && newName != getCurrentProgramName())
1600
+ dispatch (Vst2::effSetProgramName, 0, 0, (void*) newName.substring (0, 24).toRawUTF8(), 0.0f);
1601
+ }
1602
+ else
1603
+ {
1604
+ jassertfalse; // xxx not implemented!
1605
+ }
1606
+ }
1607
+
1608
+ //==============================================================================
1609
+ void getStateInformation (MemoryBlock& mb) override { saveToFXBFile (mb, true); }
1610
+ void getCurrentProgramStateInformation (MemoryBlock& mb) override { saveToFXBFile (mb, false); }
1611
+
1612
+ void setStateInformation (const void* data, int size) override { loadFromFXBFile (data, (size_t) size); }
1613
+ void setCurrentProgramStateInformation (const void* data, int size) override { loadFromFXBFile (data, (size_t) size); }
1614
+
1615
+ //==============================================================================
1616
+ void timerCallback() override
1617
+ {
1618
+ if (dispatch (Vst2::effIdle, 0, 0, nullptr, 0) == 0)
1619
+ stopTimer();
1620
+ }
1621
+
1622
+ void handleAsyncUpdate() override
1623
+ {
1624
+ updateHostDisplay (AudioProcessorListener::ChangeDetails().withProgramChanged (true)
1625
+ .withParameterInfoChanged (true));
1626
+ }
1627
+
1628
+ pointer_sized_int handleCallback (int32 opcode, int32 index, pointer_sized_int value, void* ptr, float opt)
1629
+ {
1630
+ switch (opcode)
1631
+ {
1632
+ case Vst2::audioMasterAutomate:
1633
+ if (auto* param = getParameters()[index])
1634
+ param->sendValueChangedMessageToListeners (opt);
1635
+ else
1636
+ jassertfalse; // Invalid parameter index!
1637
+
1638
+ break;
1639
+
1640
+ case Vst2::audioMasterProcessEvents: handleMidiFromPlugin ((const Vst2::VstEvents*) ptr); break;
1641
+ case Vst2::audioMasterGetTime: return getVSTTime();
1642
+ case Vst2::audioMasterIdle: handleIdle(); break;
1643
+ case Vst2::audioMasterSizeWindow: setWindowSize (index, (int) value); return 1;
1644
+ case Vst2::audioMasterUpdateDisplay: triggerAsyncUpdate(); break;
1645
+ case Vst2::audioMasterIOChanged: setLatencySamples (vstEffect->initialDelay); break;
1646
+ case Vst2::audioMasterNeedIdle: startTimer (50); break;
1647
+
1648
+ case Vst2::audioMasterGetSampleRate: return (pointer_sized_int) (getSampleRate() > 0 ? getSampleRate() : defaultVSTSampleRateValue);
1649
+ case Vst2::audioMasterGetBlockSize: return (pointer_sized_int) (getBlockSize() > 0 ? getBlockSize() : defaultVSTBlockSizeValue);
1650
+ case Vst2::audioMasterWantMidi: wantsMidiMessages = true; break;
1651
+ case Vst2::audioMasterGetDirectory: return getVstDirectory();
1652
+
1653
+ case Vst2::audioMasterTempoAt: return (pointer_sized_int) (extraFunctions != nullptr ? extraFunctions->getTempoAt ((int64) value) : 0);
1654
+ case Vst2::audioMasterGetAutomationState: return (pointer_sized_int) (extraFunctions != nullptr ? extraFunctions->getAutomationState() : 0);
1655
+
1656
+ case Vst2::audioMasterBeginEdit:
1657
+ if (auto* param = getParameters()[index])
1658
+ param->beginChangeGesture();
1659
+ else
1660
+ jassertfalse; // Invalid parameter index!
1661
+
1662
+ break;
1663
+
1664
+ case Vst2::audioMasterEndEdit:
1665
+ if (auto* param = getParameters()[index])
1666
+ param->endChangeGesture();
1667
+ else
1668
+ jassertfalse; // Invalid parameter index!
1669
+
1670
+ break;
1671
+
1672
+ case Vst2::audioMasterPinConnected: return isValidChannel (index, value == 0) ? 0 : 1; // (yes, 0 = true)
1673
+ case Vst2::audioMasterGetCurrentProcessLevel: return isNonRealtime() ? 4 : 0;
1674
+
1675
+ // none of these are handled (yet)...
1676
+ case Vst2::audioMasterSetTime:
1677
+ case Vst2::audioMasterGetParameterQuantization:
1678
+ case Vst2::audioMasterGetInputLatency:
1679
+ case Vst2::audioMasterGetOutputLatency:
1680
+ case Vst2::audioMasterGetPreviousPlug:
1681
+ case Vst2::audioMasterGetNextPlug:
1682
+ case Vst2::audioMasterWillReplaceOrAccumulate:
1683
+ case Vst2::audioMasterOfflineStart:
1684
+ case Vst2::audioMasterOfflineRead:
1685
+ case Vst2::audioMasterOfflineWrite:
1686
+ case Vst2::audioMasterOfflineGetCurrentPass:
1687
+ case Vst2::audioMasterOfflineGetCurrentMetaPass:
1688
+ case Vst2::audioMasterGetOutputSpeakerArrangement:
1689
+ case Vst2::audioMasterVendorSpecific:
1690
+ case Vst2::audioMasterSetIcon:
1691
+ case Vst2::audioMasterGetLanguage:
1692
+ case Vst2::audioMasterOpenWindow:
1693
+ case Vst2::audioMasterCloseWindow:
1694
+ break;
1695
+
1696
+ default:
1697
+ return handleGeneralCallback (opcode, index, value, ptr, opt);
1698
+ }
1699
+
1700
+ return 0;
1701
+ }
1702
+
1703
+ // handles non plugin-specific callbacks.
1704
+ static pointer_sized_int handleGeneralCallback (int32 opcode, int32 /*index*/, pointer_sized_int /*value*/, void* ptr, float /*opt*/)
1705
+ {
1706
+ switch (opcode)
1707
+ {
1708
+ case Vst2::audioMasterCanDo: return handleCanDo ((const char*) ptr);
1709
+ case Vst2::audioMasterVersion: return 2400;
1710
+ case Vst2::audioMasterCurrentId: return shellUIDToCreate;
1711
+ case Vst2::audioMasterGetNumAutomatableParameters: return 0;
1712
+ case Vst2::audioMasterGetAutomationState: return 1;
1713
+ case Vst2::audioMasterGetVendorVersion: return 0x0101;
1714
+
1715
+ case Vst2::audioMasterGetVendorString:
1716
+ case Vst2::audioMasterGetProductString: return getHostName ((char*) ptr);
1717
+
1718
+ case Vst2::audioMasterGetSampleRate: return (pointer_sized_int) defaultVSTSampleRateValue;
1719
+ case Vst2::audioMasterGetBlockSize: return (pointer_sized_int) defaultVSTBlockSizeValue;
1720
+ case Vst2::audioMasterSetOutputSampleRate: return 0;
1721
+
1722
+ default:
1723
+ DBG ("*** Unhandled VST Callback: " + String ((int) opcode));
1724
+ break;
1725
+ }
1726
+
1727
+ return 0;
1728
+ }
1729
+
1730
+ //==============================================================================
1731
+ pointer_sized_int dispatch (int opcode, int index, pointer_sized_int value, void* const ptr, float opt) const
1732
+ {
1733
+ pointer_sized_int result = 0;
1734
+
1735
+ if (vstEffect != nullptr)
1736
+ {
1737
+ const ScopedLock sl (lock);
1738
+ const IdleCallRecursionPreventer icrp;
1739
+
1740
+ try
1741
+ {
1742
+ #if JUCE_MAC
1743
+ auto oldResFile = CurResFile();
1744
+
1745
+ if (vstModule->resFileId != 0)
1746
+ UseResFile (vstModule->resFileId);
1747
+ #endif
1748
+
1749
+ result = vstEffect->dispatcher (vstEffect, opcode, index, value, ptr, opt);
1750
+
1751
+ #if JUCE_MAC
1752
+ auto newResFile = CurResFile();
1753
+
1754
+ if (newResFile != oldResFile) // avoid confusing the parent app's resource file with the plug-in's
1755
+ {
1756
+ vstModule->resFileId = newResFile;
1757
+ UseResFile (oldResFile);
1758
+ }
1759
+ #endif
1760
+ }
1761
+ catch (...)
1762
+ {}
1763
+ }
1764
+
1765
+ return result;
1766
+ }
1767
+
1768
+ bool loadFromFXBFile (const void* const data, const size_t dataSize)
1769
+ {
1770
+ if (dataSize < 28)
1771
+ return false;
1772
+
1773
+ auto set = (const fxSet*) data;
1774
+
1775
+ if ((! compareMagic (set->chunkMagic, "CcnK")) || fxbSwap (set->version) > fxbVersionNum)
1776
+ return false;
1777
+
1778
+ if (compareMagic (set->fxMagic, "FxBk"))
1779
+ {
1780
+ // bank of programs
1781
+ if (fxbSwap (set->numPrograms) >= 0)
1782
+ {
1783
+ auto oldProg = getCurrentProgram();
1784
+ auto numParams = fxbSwap (((const fxProgram*) (set->programs))->numParams);
1785
+ auto progLen = (int) sizeof (fxProgram) + (numParams - 1) * (int) sizeof (float);
1786
+
1787
+ for (int i = 0; i < fxbSwap (set->numPrograms); ++i)
1788
+ {
1789
+ if (i != oldProg)
1790
+ {
1791
+ auto prog = addBytesToPointer (set->programs, i * progLen);
1792
+
1793
+ if (getAddressDifference (prog, set) >= (int) dataSize)
1794
+ return false;
1795
+
1796
+ if (fxbSwap (set->numPrograms) > 0)
1797
+ setCurrentProgram (i);
1798
+
1799
+ if (! restoreProgramSettings (prog))
1800
+ return false;
1801
+ }
1802
+ }
1803
+
1804
+ if (fxbSwap (set->numPrograms) > 0)
1805
+ setCurrentProgram (oldProg);
1806
+
1807
+ auto prog = addBytesToPointer (set->programs, oldProg * progLen);
1808
+
1809
+ if (getAddressDifference (prog, set) >= (int) dataSize)
1810
+ return false;
1811
+
1812
+ if (! restoreProgramSettings (prog))
1813
+ return false;
1814
+ }
1815
+ }
1816
+ else if (compareMagic (set->fxMagic, "FxCk"))
1817
+ {
1818
+ // single program
1819
+ auto prog = (const fxProgram*) data;
1820
+
1821
+ if (! compareMagic (prog->chunkMagic, "CcnK"))
1822
+ return false;
1823
+
1824
+ changeProgramName (getCurrentProgram(), prog->prgName);
1825
+
1826
+ for (int i = 0; i < fxbSwap (prog->numParams); ++i)
1827
+ if (auto* param = getParameters()[i])
1828
+ param->setValue (fxbSwapFloat (prog->params[i]));
1829
+ }
1830
+ else if (compareMagic (set->fxMagic, "FBCh"))
1831
+ {
1832
+ // non-preset chunk
1833
+ auto cset = (const fxChunkSet*) data;
1834
+
1835
+ if ((size_t) fxbSwap (cset->chunkSize) + sizeof (fxChunkSet) - 8 > (size_t) dataSize)
1836
+ return false;
1837
+
1838
+ setChunkData (cset->chunk, fxbSwap (cset->chunkSize), false);
1839
+ }
1840
+ else if (compareMagic (set->fxMagic, "FPCh"))
1841
+ {
1842
+ // preset chunk
1843
+ auto cset = (const fxProgramSet*) data;
1844
+
1845
+ if ((size_t) fxbSwap (cset->chunkSize) + sizeof (fxProgramSet) - 8 > (size_t) dataSize)
1846
+ return false;
1847
+
1848
+ setChunkData (cset->chunk, fxbSwap (cset->chunkSize), true);
1849
+
1850
+ changeProgramName (getCurrentProgram(), cset->name);
1851
+ }
1852
+ else
1853
+ {
1854
+ return false;
1855
+ }
1856
+
1857
+ return true;
1858
+ }
1859
+
1860
+ bool saveToFXBFile (MemoryBlock& dest, bool isFXB, int maxSizeMB = 128)
1861
+ {
1862
+ auto numPrograms = getNumPrograms();
1863
+ auto numParams = getParameters().size();
1864
+
1865
+ if (usesChunks())
1866
+ {
1867
+ MemoryBlock chunk;
1868
+ getChunkData (chunk, ! isFXB, maxSizeMB);
1869
+
1870
+ if (isFXB)
1871
+ {
1872
+ auto totalLen = sizeof (fxChunkSet) + chunk.getSize() - 8;
1873
+ dest.setSize (totalLen, true);
1874
+
1875
+ auto set = (fxChunkSet*) dest.getData();
1876
+ set->chunkMagic = fxbName ("CcnK");
1877
+ set->byteSize = 0;
1878
+ set->fxMagic = fxbName ("FBCh");
1879
+ set->version = fxbSwap (fxbVersionNum);
1880
+ set->fxID = fxbSwap (getUID());
1881
+ set->fxVersion = fxbSwap (getVersionNumber());
1882
+ set->numPrograms = fxbSwap (numPrograms);
1883
+ set->chunkSize = fxbSwap ((int32) chunk.getSize());
1884
+
1885
+ chunk.copyTo (set->chunk, 0, chunk.getSize());
1886
+ }
1887
+ else
1888
+ {
1889
+ auto totalLen = sizeof (fxProgramSet) + chunk.getSize() - 8;
1890
+ dest.setSize (totalLen, true);
1891
+
1892
+ auto set = (fxProgramSet*) dest.getData();
1893
+ set->chunkMagic = fxbName ("CcnK");
1894
+ set->byteSize = 0;
1895
+ set->fxMagic = fxbName ("FPCh");
1896
+ set->version = fxbSwap (fxbVersionNum);
1897
+ set->fxID = fxbSwap (getUID());
1898
+ set->fxVersion = fxbSwap (getVersionNumber());
1899
+ set->numPrograms = fxbSwap (numPrograms);
1900
+ set->chunkSize = fxbSwap ((int32) chunk.getSize());
1901
+
1902
+ getCurrentProgramName().copyToUTF8 (set->name, sizeof (set->name) - 1);
1903
+ chunk.copyTo (set->chunk, 0, chunk.getSize());
1904
+ }
1905
+ }
1906
+ else
1907
+ {
1908
+ if (isFXB)
1909
+ {
1910
+ auto progLen = (int) sizeof (fxProgram) + (numParams - 1) * (int) sizeof (float);
1911
+ auto len = (size_t) (progLen * jmax (1, numPrograms)) + (sizeof (fxSet) - sizeof (fxProgram));
1912
+ dest.setSize (len, true);
1913
+
1914
+ auto set = (fxSet*) dest.getData();
1915
+ set->chunkMagic = fxbName ("CcnK");
1916
+ set->byteSize = 0;
1917
+ set->fxMagic = fxbName ("FxBk");
1918
+ set->version = fxbSwap (fxbVersionNum);
1919
+ set->fxID = fxbSwap (getUID());
1920
+ set->fxVersion = fxbSwap (getVersionNumber());
1921
+ set->numPrograms = fxbSwap (numPrograms);
1922
+
1923
+ MemoryBlock oldSettings;
1924
+ createTempParameterStore (oldSettings);
1925
+
1926
+ auto oldProgram = getCurrentProgram();
1927
+
1928
+ if (oldProgram >= 0)
1929
+ setParamsInProgramBlock (addBytesToPointer (set->programs, oldProgram * progLen));
1930
+
1931
+ for (int i = 0; i < numPrograms; ++i)
1932
+ {
1933
+ if (i != oldProgram)
1934
+ {
1935
+ setCurrentProgram (i);
1936
+ setParamsInProgramBlock (addBytesToPointer (set->programs, i * progLen));
1937
+ }
1938
+ }
1939
+
1940
+ if (oldProgram >= 0)
1941
+ setCurrentProgram (oldProgram);
1942
+
1943
+ restoreFromTempParameterStore (oldSettings);
1944
+ }
1945
+ else
1946
+ {
1947
+ dest.setSize ((size_t) ((numParams - 1) * (int) sizeof (float)) + sizeof (fxProgram), true);
1948
+ setParamsInProgramBlock ((fxProgram*) dest.getData());
1949
+ }
1950
+ }
1951
+
1952
+ return true;
1953
+ }
1954
+
1955
+ bool usesChunks() const noexcept { return vstEffect != nullptr && (vstEffect->flags & Vst2::effFlagsProgramChunks) != 0; }
1956
+
1957
+ bool getChunkData (MemoryBlock& mb, bool isPreset, int maxSizeMB) const
1958
+ {
1959
+ if (usesChunks())
1960
+ {
1961
+ void* data = nullptr;
1962
+ auto bytes = (size_t) dispatch (Vst2::effGetChunk, isPreset ? 1 : 0, 0, &data, 0.0f);
1963
+
1964
+ if (data != nullptr && bytes <= (size_t) maxSizeMB * 1024 * 1024)
1965
+ {
1966
+ mb.setSize (bytes);
1967
+ mb.copyFrom (data, 0, bytes);
1968
+
1969
+ return true;
1970
+ }
1971
+ }
1972
+
1973
+ return false;
1974
+ }
1975
+
1976
+ bool setChunkData (const void* data, const int size, bool isPreset)
1977
+ {
1978
+ if (size > 0 && usesChunks())
1979
+ {
1980
+ dispatch (Vst2::effSetChunk, isPreset ? 1 : 0, size, (void*) data, 0.0f);
1981
+
1982
+ if (! isPreset)
1983
+ updateStoredProgramNames();
1984
+
1985
+ return true;
1986
+ }
1987
+
1988
+ return false;
1989
+ }
1990
+
1991
+ bool updateSizeFromEditor (int w, int h);
1992
+
1993
+ Vst2::AEffect* vstEffect;
1994
+ ModuleHandle::Ptr vstModule;
1995
+
1996
+ std::unique_ptr<VSTPluginFormat::ExtraFunctions> extraFunctions;
1997
+
1998
+ private:
1999
+ //==============================================================================
2000
+ struct VST2BypassParameter final : public Parameter
2001
+ {
2002
+ VST2BypassParameter (VSTPluginInstance& effectToUse)
2003
+ : parent (effectToUse),
2004
+ vstOnStrings (TRANS ("on"), TRANS ("yes"), TRANS ("true")),
2005
+ vstOffStrings (TRANS ("off"), TRANS ("no"), TRANS ("false")),
2006
+ values (TRANS ("Off"), TRANS ("On"))
2007
+ {
2008
+ }
2009
+
2010
+ void setValue (float newValue) override
2011
+ {
2012
+ currentValue = (! approximatelyEqual (newValue, 0.0f));
2013
+
2014
+ if (parent.vstSupportsBypass)
2015
+ parent.dispatch (Vst2::effSetBypass, 0, currentValue ? 1 : 0, nullptr, 0.0f);
2016
+ }
2017
+
2018
+ float getValueForText (const String& text) const override
2019
+ {
2020
+ String lowercaseText (text.toLowerCase());
2021
+
2022
+ for (auto& testText : vstOnStrings)
2023
+ if (lowercaseText == testText)
2024
+ return 1.0f;
2025
+
2026
+ for (auto& testText : vstOffStrings)
2027
+ if (lowercaseText == testText)
2028
+ return 0.0f;
2029
+
2030
+ return text.getIntValue() != 0 ? 1.0f : 0.0f;
2031
+ }
2032
+
2033
+ float getValue() const override { return currentValue; }
2034
+ float getDefaultValue() const override { return 0.0f; }
2035
+ String getName (int /*maximumStringLength*/) const override { return "Bypass"; }
2036
+ String getText (float value, int) const override { return (! approximatelyEqual (value, 0.0f) ? TRANS ("On") : TRANS ("Off")); }
2037
+ bool isAutomatable() const override { return true; }
2038
+ bool isDiscrete() const override { return true; }
2039
+ bool isBoolean() const override { return true; }
2040
+ int getNumSteps() const override { return 2; }
2041
+ StringArray getAllValueStrings() const override { return values; }
2042
+ String getLabel() const override { return {}; }
2043
+ String getParameterID() const override { return {}; }
2044
+
2045
+ VSTPluginInstance& parent;
2046
+ bool currentValue = false;
2047
+ StringArray vstOnStrings, vstOffStrings, values;
2048
+ };
2049
+
2050
+ //==============================================================================
2051
+ String name;
2052
+ CriticalSection lock;
2053
+ std::atomic<bool> wantsMidiMessages { false };
2054
+ bool initialised = false;
2055
+ std::atomic<bool> isPowerOn { false };
2056
+ bool lastProcessBlockCallWasBypass = false, vstSupportsBypass = false;
2057
+ mutable StringArray programNames;
2058
+ AudioBuffer<float> outOfPlaceBuffer;
2059
+ TempChannelPointers tempChannelPointers[2];
2060
+
2061
+ CriticalSection midiInLock;
2062
+ MidiBuffer incomingMidi;
2063
+ VSTMidiEventList midiEventsToSend;
2064
+ Vst2::VstTimeInfo vstHostTime;
2065
+
2066
+ AudioBuffer<float> tmpBufferFloat;
2067
+ HeapBlock<float*> channelBufferFloat;
2068
+
2069
+ AudioBuffer<double> tmpBufferDouble;
2070
+ HeapBlock<double*> channelBufferDouble;
2071
+ std::unique_ptr<VST2BypassParameter> bypassParam;
2072
+
2073
+ std::unique_ptr<VSTXMLInfo> xmlInfo;
2074
+
2075
+ static pointer_sized_int handleCanDo (const char* name)
2076
+ {
2077
+ static const char* canDos[] = { "supplyIdle",
2078
+ "sendVstEvents",
2079
+ "sendVstMidiEvent",
2080
+ "sendVstTimeInfo",
2081
+ "receiveVstEvents",
2082
+ "receiveVstMidiEvent",
2083
+ "supportShell",
2084
+ "sizeWindow",
2085
+ "shellCategory" };
2086
+
2087
+ for (int i = 0; i < numElementsInArray (canDos); ++i)
2088
+ if (strcmp (canDos[i], name) == 0)
2089
+ return 1;
2090
+
2091
+ return 0;
2092
+ }
2093
+
2094
+ static pointer_sized_int getHostName (char* name)
2095
+ {
2096
+ String hostName (JUCE_VST_FALLBACK_HOST_NAME);
2097
+
2098
+ if (auto* app = JUCEApplicationBase::getInstance())
2099
+ hostName = app->getApplicationName();
2100
+
2101
+ hostName.copyToUTF8 (name, (size_t) jmin (Vst2::kVstMaxVendorStrLen, Vst2::kVstMaxProductStrLen) - 1);
2102
+ return 1;
2103
+ }
2104
+
2105
+ pointer_sized_int getVSTTime() noexcept
2106
+ {
2107
+ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4311)
2108
+
2109
+ return (pointer_sized_int) &vstHostTime;
2110
+
2111
+ JUCE_END_IGNORE_WARNINGS_MSVC
2112
+ }
2113
+
2114
+ void handleIdle()
2115
+ {
2116
+ if (insideVSTCallback == 0 && MessageManager::getInstance()->isThisTheMessageThread())
2117
+ {
2118
+ const IdleCallRecursionPreventer icrp;
2119
+
2120
+ #if JUCE_MAC
2121
+ if (getActiveEditor() != nullptr)
2122
+ dispatch (Vst2::effEditIdle, 0, 0, nullptr, 0);
2123
+ #endif
2124
+
2125
+ Timer::callPendingTimersSynchronously();
2126
+ handleUpdateNowIfNeeded();
2127
+
2128
+ for (int i = ComponentPeer::getNumPeers(); --i >= 0;)
2129
+ if (auto* p = ComponentPeer::getPeer (i))
2130
+ p->performAnyPendingRepaintsNow();
2131
+ }
2132
+ }
2133
+
2134
+ void setWindowSize (int width, int height)
2135
+ {
2136
+ #if JUCE_LINUX || JUCE_BSD
2137
+ const MessageManagerLock mmLock;
2138
+ #endif
2139
+
2140
+ updateSizeFromEditor (width, height);
2141
+ }
2142
+
2143
+ //==============================================================================
2144
+ static Vst2::AEffect* constructEffect (const ModuleHandle::Ptr& module)
2145
+ {
2146
+ Vst2::AEffect* effect = nullptr;
2147
+ try
2148
+ {
2149
+ const IdleCallRecursionPreventer icrp;
2150
+ _fpreset();
2151
+
2152
+ JUCE_VST_LOG ("Creating VST instance: " + module->pluginName);
2153
+
2154
+ #if JUCE_MAC
2155
+ if (module->resFileId != 0)
2156
+ UseResFile (module->resFileId);
2157
+ #endif
2158
+
2159
+ {
2160
+ JUCE_VST_WRAPPER_INVOKE_MAIN
2161
+ }
2162
+
2163
+ if (effect != nullptr && effect->magic == 0x56737450 /* 'VstP' */)
2164
+ {
2165
+ jassert (effect->resvd2 == 0);
2166
+ jassert (effect->object != nullptr);
2167
+
2168
+ _fpreset(); // some dodgy plugs mess around with this
2169
+ }
2170
+ else
2171
+ {
2172
+ effect = nullptr;
2173
+ }
2174
+ }
2175
+ catch (...)
2176
+ {}
2177
+
2178
+ return effect;
2179
+ }
2180
+
2181
+ static BusesProperties queryBusIO (Vst2::AEffect* effect)
2182
+ {
2183
+ BusesProperties returnValue;
2184
+
2185
+ if (effect->numInputs == 0 && effect->numOutputs == 0)
2186
+ return returnValue;
2187
+
2188
+ // Workaround for old broken JUCE plug-ins which would return an invalid
2189
+ // speaker arrangement if the host didn't ask for a specific arrangement
2190
+ // beforehand.
2191
+ // Check if the plug-in reports any default layouts. If it doesn't, then
2192
+ // try setting a default layout compatible with the number of pins this
2193
+ // plug-in is reporting.
2194
+ if (! pluginHasDefaultChannelLayouts (effect))
2195
+ {
2196
+ SpeakerMappings::VstSpeakerConfigurationHolder canonicalIn (AudioChannelSet::canonicalChannelSet (effect->numInputs));
2197
+ SpeakerMappings::VstSpeakerConfigurationHolder canonicalOut (AudioChannelSet::canonicalChannelSet (effect->numOutputs));
2198
+
2199
+ effect->dispatcher (effect, Vst2::effSetSpeakerArrangement, 0,
2200
+ (pointer_sized_int) &canonicalIn.get(), (void*) &canonicalOut.get(), 0.0f);
2201
+ }
2202
+
2203
+ const auto arrangement = getSpeakerArrangementWrapper (effect);
2204
+
2205
+ for (int dir = 0; dir < 2; ++dir)
2206
+ {
2207
+ const bool isInput = (dir == 0);
2208
+ const int opcode = (isInput ? Vst2::effGetInputProperties : Vst2::effGetOutputProperties);
2209
+ const int maxChannels = (isInput ? effect->numInputs : effect->numOutputs);
2210
+ const auto* arr = (isInput ? arrangement.in : arrangement.out);
2211
+ bool busAdded = false;
2212
+
2213
+ Vst2::VstPinProperties pinProps;
2214
+ AudioChannelSet layout;
2215
+
2216
+ for (int ch = 0; ch < maxChannels; ch += layout.size())
2217
+ {
2218
+ if (effect->dispatcher (effect, opcode, ch, 0, &pinProps, 0.0f) == 0)
2219
+ break;
2220
+
2221
+ if ((pinProps.flags & Vst2::kVstPinUseSpeaker) != 0)
2222
+ {
2223
+ layout = SpeakerMappings::vstArrangementTypeToChannelSet (pinProps.arrangementType, 0);
2224
+
2225
+ if (layout.isDisabled())
2226
+ break;
2227
+ }
2228
+ else if (arr == nullptr)
2229
+ {
2230
+ layout = ((pinProps.flags & Vst2::kVstPinIsStereo) != 0 ? AudioChannelSet::stereo() : AudioChannelSet::mono());
2231
+ }
2232
+ else
2233
+ break;
2234
+
2235
+ busAdded = true;
2236
+ returnValue.addBus (isInput, pinProps.label, layout, true);
2237
+ }
2238
+
2239
+ // no buses?
2240
+ if (! busAdded && maxChannels > 0)
2241
+ {
2242
+ String busName = (isInput ? "Input" : "Output");
2243
+
2244
+ if (effect->dispatcher (effect, opcode, 0, 0, &pinProps, 0.0f) != 0)
2245
+ busName = pinProps.label;
2246
+
2247
+ if (arr != nullptr)
2248
+ layout = SpeakerMappings::vstArrangementTypeToChannelSet (*arr);
2249
+ else
2250
+ layout = AudioChannelSet::canonicalChannelSet (maxChannels);
2251
+
2252
+ returnValue.addBus (isInput, busName, layout, true);
2253
+ }
2254
+ }
2255
+
2256
+ return returnValue;
2257
+ }
2258
+
2259
+ static bool pluginHasDefaultChannelLayouts (Vst2::AEffect* effect)
2260
+ {
2261
+ if (getSpeakerArrangementWrapper (effect).isValid())
2262
+ return true;
2263
+
2264
+ for (int dir = 0; dir < 2; ++dir)
2265
+ {
2266
+ const bool isInput = (dir == 0);
2267
+ const int opcode = (isInput ? Vst2::effGetInputProperties : Vst2::effGetOutputProperties);
2268
+ const int maxChannels = (isInput ? effect->numInputs : effect->numOutputs);
2269
+
2270
+ int channels = 1;
2271
+
2272
+ for (int ch = 0; ch < maxChannels; ch += channels)
2273
+ {
2274
+ Vst2::VstPinProperties pinProps;
2275
+
2276
+ if (effect->dispatcher (effect, opcode, ch, 0, &pinProps, 0.0f) == 0)
2277
+ return false;
2278
+
2279
+ if ((pinProps.flags & Vst2::kVstPinUseSpeaker) != 0)
2280
+ return true;
2281
+
2282
+ channels = (pinProps.flags & Vst2::kVstPinIsStereo) != 0 ? 2 : 1;
2283
+ }
2284
+ }
2285
+
2286
+ return false;
2287
+ }
2288
+
2289
+ struct SpeakerArrangements
2290
+ {
2291
+ const Vst2::VstSpeakerArrangement* in;
2292
+ const Vst2::VstSpeakerArrangement* out;
2293
+
2294
+ bool isValid() const noexcept { return in != nullptr && out != nullptr; }
2295
+ };
2296
+
2297
+ static SpeakerArrangements getSpeakerArrangementWrapper (Vst2::AEffect* effect)
2298
+ {
2299
+ // Workaround: unfortunately old JUCE VST-2 plug-ins had a bug and would crash if
2300
+ // you try to get the speaker arrangement when there are no input channels present.
2301
+ // Hopefully, one day (when there are no more old JUCE plug-ins around), we can
2302
+ // comment out the next two lines.
2303
+ if (effect->numInputs == 0)
2304
+ return { nullptr, nullptr };
2305
+
2306
+ SpeakerArrangements result { nullptr, nullptr };
2307
+ const auto dispatchResult = effect->dispatcher (effect,
2308
+ Vst2::effGetSpeakerArrangement,
2309
+ 0,
2310
+ reinterpret_cast<pointer_sized_int> (&result.in),
2311
+ &result.out,
2312
+ 0.0f);
2313
+
2314
+ if (dispatchResult != 0)
2315
+ return result;
2316
+
2317
+ return { nullptr, nullptr };
2318
+ }
2319
+
2320
+ template <typename Member, typename Value>
2321
+ void setFromOptional (Member& target, Optional<Value> opt, int32_t flag)
2322
+ {
2323
+ if (opt.hasValue())
2324
+ {
2325
+ target = static_cast<Member> (*opt);
2326
+ vstHostTime.flags |= flag;
2327
+ }
2328
+ else
2329
+ {
2330
+ vstHostTime.flags &= ~flag;
2331
+ }
2332
+ }
2333
+
2334
+ //==============================================================================
2335
+ template <typename FloatType>
2336
+ void processAudio (AudioBuffer<FloatType>& buffer, MidiBuffer& midiMessages,
2337
+ AudioBuffer<FloatType>& tmpBuffer,
2338
+ HeapBlock<FloatType*>& channelBuffer,
2339
+ bool processBlockBypassedCalled)
2340
+ {
2341
+ if (vstSupportsBypass)
2342
+ {
2343
+ updateBypass (processBlockBypassedCalled);
2344
+ }
2345
+ else if (processBlockBypassedCalled)
2346
+ {
2347
+ // if this vst does not support bypass then we will have to do this ourselves
2348
+ AudioProcessor::processBlockBypassed (buffer, midiMessages);
2349
+ return;
2350
+ }
2351
+
2352
+ auto numSamples = buffer.getNumSamples();
2353
+ auto numChannels = buffer.getNumChannels();
2354
+
2355
+ if (initialised)
2356
+ {
2357
+ if (auto* currentPlayHead = getPlayHead())
2358
+ {
2359
+ if (const auto position = currentPlayHead->getPosition())
2360
+ {
2361
+ if (const auto samplePos = position->getTimeInSamples())
2362
+ vstHostTime.samplePos = (double) *samplePos;
2363
+ else
2364
+ jassertfalse; // VST hosts *must* call setTimeInSamples on the audio playhead
2365
+
2366
+ if (auto sig = position->getTimeSignature())
2367
+ {
2368
+ vstHostTime.flags |= Vst2::kVstTimeSigValid;
2369
+ vstHostTime.timeSigNumerator = sig->numerator;
2370
+ vstHostTime.timeSigDenominator = sig->denominator;
2371
+ }
2372
+ else
2373
+ {
2374
+ vstHostTime.flags &= ~Vst2::kVstTimeSigValid;
2375
+ }
2376
+
2377
+ setFromOptional (vstHostTime.ppqPos, position->getPpqPosition(), Vst2::kVstPpqPosValid);
2378
+ setFromOptional (vstHostTime.barStartPos, position->getPpqPositionOfLastBarStart(), Vst2::kVstBarsValid);
2379
+ setFromOptional (vstHostTime.nanoSeconds, position->getHostTimeNs(), Vst2::kVstNanosValid);
2380
+ setFromOptional (vstHostTime.tempo, position->getBpm(), Vst2::kVstTempoValid);
2381
+
2382
+ int32 newTransportFlags = 0;
2383
+ if (position->getIsPlaying()) newTransportFlags |= Vst2::kVstTransportPlaying;
2384
+ if (position->getIsRecording()) newTransportFlags |= Vst2::kVstTransportRecording;
2385
+
2386
+ if (newTransportFlags != (vstHostTime.flags & (Vst2::kVstTransportPlaying
2387
+ | Vst2::kVstTransportRecording)))
2388
+ vstHostTime.flags = (vstHostTime.flags & ~(Vst2::kVstTransportPlaying | Vst2::kVstTransportRecording)) | newTransportFlags | Vst2::kVstTransportChanged;
2389
+ else
2390
+ vstHostTime.flags &= ~Vst2::kVstTransportChanged;
2391
+
2392
+ const auto optionalFrameRate = [fr = position->getFrameRate()]() -> Optional<Vst2::VstInt32>
2393
+ {
2394
+ if (! fr.hasValue())
2395
+ return {};
2396
+
2397
+ switch (fr->getBaseRate())
2398
+ {
2399
+ case 24: return fr->isPullDown() ? Vst2::kVstSmpte239fps : Vst2::kVstSmpte24fps;
2400
+ case 25: return fr->isPullDown() ? Vst2::kVstSmpte249fps : Vst2::kVstSmpte25fps;
2401
+ case 30: return fr->isPullDown() ? (fr->isDrop() ? Vst2::kVstSmpte2997dfps : Vst2::kVstSmpte2997fps)
2402
+ : (fr->isDrop() ? Vst2::kVstSmpte30dfps : Vst2::kVstSmpte30fps);
2403
+ case 60: return fr->isPullDown() ? Vst2::kVstSmpte599fps : Vst2::kVstSmpte60fps;
2404
+ }
2405
+
2406
+ return {};
2407
+ }();
2408
+
2409
+ vstHostTime.flags |= optionalFrameRate ? Vst2::kVstSmpteValid : 0;
2410
+ vstHostTime.smpteFrameRate = optionalFrameRate.orFallback (Vst2::VstSmpteFrameRate{});
2411
+ const auto effectiveRate = position->getFrameRate().hasValue() ? position->getFrameRate()->getEffectiveRate() : 0.0;
2412
+ vstHostTime.smpteOffset = (int32) (position->getTimeInSeconds().orFallback (0.0) * 80.0 * effectiveRate + 0.5);
2413
+
2414
+ if (const auto loop = position->getLoopPoints())
2415
+ {
2416
+ vstHostTime.flags |= Vst2::kVstCyclePosValid;
2417
+ vstHostTime.cycleStartPos = loop->ppqStart;
2418
+ vstHostTime.cycleEndPos = loop->ppqEnd;
2419
+ }
2420
+ else
2421
+ {
2422
+ vstHostTime.flags &= ~Vst2::kVstCyclePosValid;
2423
+ }
2424
+
2425
+ if (position->getIsLooping())
2426
+ vstHostTime.flags |= Vst2::kVstTransportCycleActive;
2427
+ else
2428
+ vstHostTime.flags &= ~Vst2::kVstTransportCycleActive;
2429
+ }
2430
+ }
2431
+
2432
+ vstHostTime.nanoSeconds = getVSTHostTimeNanoseconds();
2433
+
2434
+ if (wantsMidiMessages)
2435
+ {
2436
+ midiEventsToSend.clear();
2437
+ midiEventsToSend.ensureSize (1);
2438
+
2439
+ for (const auto metadata : midiMessages)
2440
+ midiEventsToSend.addEvent (metadata.data, metadata.numBytes,
2441
+ jlimit (0, numSamples - 1, metadata.samplePosition));
2442
+
2443
+ vstEffect->dispatcher (vstEffect, Vst2::effProcessEvents, 0, 0, midiEventsToSend.events, 0);
2444
+ }
2445
+
2446
+ _clearfp();
2447
+
2448
+ // always ensure that the buffer is at least as large as the maximum number of channels
2449
+ auto maxChannels = jmax (vstEffect->numInputs, vstEffect->numOutputs);
2450
+ auto channels = channelBuffer.get();
2451
+
2452
+ if (numChannels < maxChannels)
2453
+ {
2454
+ if (numSamples > tmpBuffer.getNumSamples())
2455
+ tmpBuffer.setSize (tmpBuffer.getNumChannels(), numSamples);
2456
+
2457
+ tmpBuffer.clear();
2458
+ }
2459
+
2460
+ for (int ch = 0; ch < maxChannels; ++ch)
2461
+ channels[ch] = (ch < numChannels ? buffer.getWritePointer (ch) : tmpBuffer.getWritePointer (ch));
2462
+
2463
+ {
2464
+ AudioBuffer<FloatType> processBuffer (channels, maxChannels, numSamples);
2465
+
2466
+ invokeProcessFunction (processBuffer, numSamples);
2467
+ }
2468
+ }
2469
+ else
2470
+ {
2471
+ // Not initialised, so just bypass.
2472
+ for (int i = getTotalNumOutputChannels(); --i >= 0;)
2473
+ buffer.clear (i, 0, buffer.getNumSamples());
2474
+ }
2475
+
2476
+ {
2477
+ // copy any incoming midi.
2478
+ const ScopedLock sl (midiInLock);
2479
+
2480
+ midiMessages.swapWith (incomingMidi);
2481
+ incomingMidi.clear();
2482
+ }
2483
+ }
2484
+
2485
+ //==============================================================================
2486
+ inline void invokeProcessFunction (AudioBuffer<float>& buffer, int32 sampleFrames)
2487
+ {
2488
+ if ((vstEffect->flags & Vst2::effFlagsCanReplacing) != 0)
2489
+ {
2490
+ vstEffect->processReplacing (vstEffect, tempChannelPointers[0].getArrayOfModifiableWritePointers (buffer),
2491
+ tempChannelPointers[1].getArrayOfModifiableWritePointers (buffer), sampleFrames);
2492
+ }
2493
+ else
2494
+ {
2495
+ outOfPlaceBuffer.setSize (vstEffect->numOutputs, sampleFrames);
2496
+ outOfPlaceBuffer.clear();
2497
+
2498
+ vstEffect->process (vstEffect, tempChannelPointers[0].getArrayOfModifiableWritePointers (buffer),
2499
+ tempChannelPointers[1].getArrayOfModifiableWritePointers (outOfPlaceBuffer), sampleFrames);
2500
+
2501
+ for (int i = vstEffect->numOutputs; --i >= 0;)
2502
+ buffer.copyFrom (i, 0, outOfPlaceBuffer.getReadPointer (i), sampleFrames);
2503
+ }
2504
+ }
2505
+
2506
+ inline void invokeProcessFunction (AudioBuffer<double>& buffer, int32 sampleFrames)
2507
+ {
2508
+ vstEffect->processDoubleReplacing (vstEffect, tempChannelPointers[0].getArrayOfModifiableWritePointers (buffer),
2509
+ tempChannelPointers[1].getArrayOfModifiableWritePointers (buffer), sampleFrames);
2510
+ }
2511
+
2512
+ //==============================================================================
2513
+ bool restoreProgramSettings (const fxProgram* const prog)
2514
+ {
2515
+ if (compareMagic (prog->chunkMagic, "CcnK")
2516
+ && compareMagic (prog->fxMagic, "FxCk"))
2517
+ {
2518
+ changeProgramName (getCurrentProgram(), prog->prgName);
2519
+
2520
+ for (int i = 0; i < fxbSwap (prog->numParams); ++i)
2521
+ if (auto* param = getParameters()[i])
2522
+ param->setValue (fxbSwapFloat (prog->params[i]));
2523
+
2524
+ return true;
2525
+ }
2526
+
2527
+ return false;
2528
+ }
2529
+
2530
+ String getTextForOpcode (const int index, const int opcode) const
2531
+ {
2532
+ if (vstEffect == nullptr)
2533
+ return {};
2534
+
2535
+ jassert (index >= 0 && index < vstEffect->numParams);
2536
+ char nm[256] = { 0 };
2537
+ dispatch (opcode, index, 0, nm, 0);
2538
+ return String::createStringFromData (nm, (int) sizeof (nm)).trim();
2539
+ }
2540
+
2541
+ String getCurrentProgramName()
2542
+ {
2543
+ String progName;
2544
+
2545
+ if (vstEffect != nullptr)
2546
+ {
2547
+ {
2548
+ char nm[256] = { 0 };
2549
+ dispatch (Vst2::effGetProgramName, 0, 0, nm, 0);
2550
+ progName = String::createStringFromData (nm, (int) sizeof (nm)).trim();
2551
+ }
2552
+
2553
+ const int index = getCurrentProgram();
2554
+
2555
+ if (index >= 0 && programNames[index].isEmpty())
2556
+ {
2557
+ while (programNames.size() < index)
2558
+ programNames.add (String());
2559
+
2560
+ programNames.set (index, progName);
2561
+ }
2562
+ }
2563
+
2564
+ return progName;
2565
+ }
2566
+
2567
+ void setParamsInProgramBlock (fxProgram* prog)
2568
+ {
2569
+ auto numParams = getParameters().size();
2570
+
2571
+ prog->chunkMagic = fxbName ("CcnK");
2572
+ prog->byteSize = 0;
2573
+ prog->fxMagic = fxbName ("FxCk");
2574
+ prog->version = fxbSwap (fxbVersionNum);
2575
+ prog->fxID = fxbSwap (getUID());
2576
+ prog->fxVersion = fxbSwap (getVersionNumber());
2577
+ prog->numParams = fxbSwap (numParams);
2578
+
2579
+ getCurrentProgramName().copyToUTF8 (prog->prgName, sizeof (prog->prgName) - 1);
2580
+
2581
+ for (int i = 0; i < numParams; ++i)
2582
+ if (auto* param = getParameters()[i])
2583
+ prog->params[i] = fxbSwapFloat (param->getValue());
2584
+ }
2585
+
2586
+ void updateStoredProgramNames()
2587
+ {
2588
+ if (vstEffect != nullptr && getNumPrograms() > 0)
2589
+ {
2590
+ char nm[256] = { 0 };
2591
+
2592
+ // only do this if the plugin can't use indexed names.
2593
+ if (dispatch (Vst2::effGetProgramNameIndexed, 0, -1, nm, 0) == 0)
2594
+ {
2595
+ auto oldProgram = getCurrentProgram();
2596
+ MemoryBlock oldSettings;
2597
+ createTempParameterStore (oldSettings);
2598
+
2599
+ for (int i = 0; i < getNumPrograms(); ++i)
2600
+ {
2601
+ setCurrentProgram (i);
2602
+ getCurrentProgramName(); // (this updates the list)
2603
+ }
2604
+
2605
+ setCurrentProgram (oldProgram);
2606
+ restoreFromTempParameterStore (oldSettings);
2607
+ }
2608
+ }
2609
+ }
2610
+
2611
+ void handleMidiFromPlugin (const Vst2::VstEvents* events)
2612
+ {
2613
+ if (events != nullptr)
2614
+ {
2615
+ const ScopedLock sl (midiInLock);
2616
+ VSTMidiEventList::addEventsToMidiBuffer (events, incomingMidi);
2617
+ }
2618
+ }
2619
+
2620
+ //==============================================================================
2621
+ void createTempParameterStore (MemoryBlock& dest)
2622
+ {
2623
+ auto numParameters = getParameters().size();
2624
+ dest.setSize (64 + 4 * (size_t) numParameters);
2625
+ dest.fillWith (0);
2626
+
2627
+ getCurrentProgramName().copyToUTF8 ((char*) dest.getData(), 63);
2628
+
2629
+ auto p = unalignedPointerCast<float*> (((char*) dest.getData()) + 64);
2630
+
2631
+ for (int i = 0; i < numParameters; ++i)
2632
+ if (auto* param = getParameters()[i])
2633
+ p[i] = param->getValue();
2634
+ }
2635
+
2636
+ void restoreFromTempParameterStore (const MemoryBlock& m)
2637
+ {
2638
+ changeProgramName (getCurrentProgram(), (const char*) m.getData());
2639
+
2640
+ auto p = unalignedPointerCast<float*> (((char*) m.getData()) + 64);
2641
+ auto numParameters = getParameters().size();
2642
+
2643
+ for (int i = 0; i < numParameters; ++i)
2644
+ if (auto* param = getParameters()[i])
2645
+ param->setValue (p[i]);
2646
+ }
2647
+
2648
+ pointer_sized_int getVstDirectory() const
2649
+ {
2650
+ #if JUCE_MAC
2651
+ return (pointer_sized_int) (void*) &vstModule->parentDirFSSpec;
2652
+ #else
2653
+ return (pointer_sized_int) (pointer_sized_uint) vstModule->fullParentDirectoryPathName.toRawUTF8();
2654
+ #endif
2655
+ }
2656
+
2657
+ //==============================================================================
2658
+ int getVersionNumber() const noexcept { return vstEffect != nullptr ? vstEffect->version : 0; }
2659
+
2660
+ String getVersion() const
2661
+ {
2662
+ auto v = (unsigned int) dispatch (Vst2::effGetVendorVersion, 0, 0, nullptr, 0);
2663
+
2664
+ String s;
2665
+
2666
+ if (v == 0 || (int) v == -1)
2667
+ v = (unsigned int) getVersionNumber();
2668
+
2669
+ if (v != 0)
2670
+ {
2671
+ // See yfede's post for the rational on this encoding
2672
+ // https://forum.juce.com/t/issues-with-version-integer-reported-by-vst2/23867/6
2673
+
2674
+ unsigned int major = 0, minor = 0, bugfix = 0, build = 0;
2675
+
2676
+ if (v < 10) // Encoding A
2677
+ {
2678
+ major = v;
2679
+ }
2680
+ else if (v < 10000) // Encoding B
2681
+ {
2682
+ major = (v / 1000);
2683
+ minor = (v % 1000) / 100;
2684
+ bugfix = (v % 100) / 10;
2685
+ build = (v % 10);
2686
+ }
2687
+ else if (v < 0x10000) // Encoding C
2688
+ {
2689
+ major = (v / 10000);
2690
+ minor = (v % 10000) / 1000;
2691
+ bugfix = (v % 1000) / 100;
2692
+ build = (v % 100) / 10;
2693
+ }
2694
+ else if (v < 0x650000) // Encoding D
2695
+ {
2696
+ major = (v >> 16) & 0xff;
2697
+ minor = (v >> 8) & 0xff;
2698
+ bugfix = (v >> 0) & 0xff;
2699
+ }
2700
+ else // Encoding E
2701
+ {
2702
+ major = (v / 10000000);
2703
+ minor = (v % 10000000) / 100000;
2704
+ bugfix = (v % 100000) / 1000;
2705
+ build = (v % 1000);
2706
+ }
2707
+
2708
+ s << (int) major << '.' << (int) minor << '.' << (int) bugfix << '.' << (int) build;
2709
+ }
2710
+
2711
+ return s;
2712
+ }
2713
+
2714
+ const char* getCategory() const
2715
+ {
2716
+ switch (getVstCategory())
2717
+ {
2718
+ case Vst2::kPlugCategEffect: return "Effect";
2719
+ case Vst2::kPlugCategSynth: return "Synth";
2720
+ case Vst2::kPlugCategAnalysis: return "Analysis";
2721
+ case Vst2::kPlugCategMastering: return "Mastering";
2722
+ case Vst2::kPlugCategSpacializer: return "Spacial";
2723
+ case Vst2::kPlugCategRoomFx: return "Reverb";
2724
+ case Vst2::kPlugSurroundFx: return "Surround";
2725
+ case Vst2::kPlugCategRestoration: return "Restoration";
2726
+ case Vst2::kPlugCategGenerator: return "Tone generation";
2727
+ case Vst2::kPlugCategOfflineProcess: return "Offline Process";
2728
+ case Vst2::kPlugCategShell: return "Shell";
2729
+ case Vst2::kPlugCategUnknown: return "Unknown";
2730
+ case Vst2::kPlugCategMaxCount:
2731
+ default: break;
2732
+ }
2733
+
2734
+ return nullptr;
2735
+ }
2736
+
2737
+ void setPower (const bool on)
2738
+ {
2739
+ dispatch (Vst2::effMainsChanged, 0, on ? 1 : 0, nullptr, 0);
2740
+ isPowerOn = on;
2741
+ }
2742
+
2743
+ //==============================================================================
2744
+ void updateBypass (bool processBlockBypassedCalled)
2745
+ {
2746
+ if (processBlockBypassedCalled)
2747
+ {
2748
+ if (approximatelyEqual (bypassParam->getValue(), 0.0f) || ! lastProcessBlockCallWasBypass)
2749
+ bypassParam->setValue (1.0f);
2750
+ }
2751
+ else
2752
+ {
2753
+ if (lastProcessBlockCallWasBypass)
2754
+ bypassParam->setValue (0.0f);
2755
+ }
2756
+
2757
+ lastProcessBlockCallWasBypass = processBlockBypassedCalled;
2758
+ }
2759
+
2760
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (VSTPluginInstance)
2761
+ };
2762
+
2763
+ //==============================================================================
2764
+ #if ! (JUCE_IOS || JUCE_ANDROID)
2765
+ struct VSTPluginWindow;
2766
+ static Array<VSTPluginWindow*> activeVSTWindows;
2767
+
2768
+ //==============================================================================
2769
+ struct VSTPluginWindow final : public AudioProcessorEditor,
2770
+ #if ! JUCE_MAC
2771
+ private ComponentMovementWatcher,
2772
+ #endif
2773
+ private Timer
2774
+ {
2775
+ public:
2776
+ VSTPluginWindow (VSTPluginInstance& plug)
2777
+ : AudioProcessorEditor (&plug),
2778
+ #if ! JUCE_MAC
2779
+ ComponentMovementWatcher (this),
2780
+ #endif
2781
+ plugin (plug)
2782
+ {
2783
+ #if JUCE_LINUX || JUCE_BSD
2784
+ pluginWindow = None;
2785
+ ignoreUnused (pluginRefusesToResize, alreadyInside);
2786
+ #elif JUCE_MAC
2787
+ ignoreUnused (recursiveResize, pluginRefusesToResize, alreadyInside);
2788
+
2789
+ cocoaWrapper.reset (new NSViewComponentWithParent (plugin));
2790
+ addAndMakeVisible (cocoaWrapper.get());
2791
+ #endif
2792
+
2793
+ activeVSTWindows.add (this);
2794
+
2795
+ Vst2::ERect* rect = nullptr;
2796
+ dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0);
2797
+
2798
+ if (rect != nullptr)
2799
+ updateSizeFromEditor (rect->right - rect->left, rect->bottom - rect->top);
2800
+ else
2801
+ updateSizeFromEditor (1, 1);
2802
+
2803
+ setOpaque (true);
2804
+ setVisible (true);
2805
+
2806
+ #if JUCE_WINDOWS
2807
+ addAndMakeVisible (embeddedComponent);
2808
+ #endif
2809
+ }
2810
+
2811
+ ~VSTPluginWindow() override
2812
+ {
2813
+ activeVSTWindows.removeFirstMatchingValue (this);
2814
+
2815
+ closePluginWindow();
2816
+
2817
+ #if JUCE_MAC
2818
+ cocoaWrapper.reset();
2819
+ #endif
2820
+
2821
+ plugin.editorBeingDeleted (this);
2822
+ }
2823
+
2824
+ //==============================================================================
2825
+ /* Convert from the hosted VST's coordinate system to the component's coordinate system. */
2826
+ Rectangle<int> vstToComponentRect (Component& editor, const Rectangle<int>& vr) const
2827
+ {
2828
+ return editor.getLocalArea (nullptr, vr / (nativeScaleFactor * getDesktopScaleFactor()));
2829
+ }
2830
+
2831
+ Rectangle<int> componentToVstRect (Component& editor, const Rectangle<int>& vr) const
2832
+ {
2833
+ if (auto* tl = editor.getTopLevelComponent())
2834
+ return tl->getLocalArea (&editor, vr) * nativeScaleFactor * tl->getDesktopScaleFactor();
2835
+
2836
+ return {};
2837
+ }
2838
+
2839
+ bool updateSizeFromEditor (int w, int h)
2840
+ {
2841
+ const auto correctedBounds = vstToComponentRect (*this, { w, h });
2842
+ setSize (correctedBounds.getWidth(), correctedBounds.getHeight());
2843
+
2844
+ #if JUCE_MAC
2845
+ if (cocoaWrapper != nullptr)
2846
+ cocoaWrapper->setSize (correctedBounds.getWidth(), correctedBounds.getHeight());
2847
+ #endif
2848
+
2849
+ return true;
2850
+ }
2851
+
2852
+ #if JUCE_MAC
2853
+ void paint (Graphics& g) override
2854
+ {
2855
+ g.fillAll (Colours::black);
2856
+ }
2857
+
2858
+ void visibilityChanged() override
2859
+ {
2860
+ if (isShowing())
2861
+ openPluginWindow ((NSView*) cocoaWrapper->getView());
2862
+ else
2863
+ closePluginWindow();
2864
+ }
2865
+
2866
+ void childBoundsChanged (Component*) override
2867
+ {
2868
+ auto w = cocoaWrapper->getWidth();
2869
+ auto h = cocoaWrapper->getHeight();
2870
+
2871
+ if (w != getWidth() || h != getHeight())
2872
+ setSize (w, h);
2873
+ }
2874
+
2875
+ void parentHierarchyChanged() override { visibilityChanged(); }
2876
+ #else
2877
+ float getEffectiveScale() const
2878
+ {
2879
+ return nativeScaleFactor * userScaleFactor;
2880
+ }
2881
+
2882
+ void paint (Graphics& g) override
2883
+ {
2884
+ #if JUCE_LINUX || JUCE_BSD
2885
+ if (isOpen)
2886
+ {
2887
+ if (pluginWindow != 0)
2888
+ {
2889
+ auto clip = componentToVstRect (*this, g.getClipBounds().toNearestInt());
2890
+
2891
+ X11Symbols::getInstance()->xClearArea (display, pluginWindow, clip.getX(), clip.getY(),
2892
+ static_cast<unsigned int> (clip.getWidth()),
2893
+ static_cast<unsigned int> (clip.getHeight()), True);
2894
+ }
2895
+ }
2896
+ else
2897
+ #endif
2898
+ {
2899
+ g.fillAll (Colours::black);
2900
+ }
2901
+ }
2902
+
2903
+ void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) override
2904
+ {
2905
+ if (recursiveResize)
2906
+ return;
2907
+
2908
+ if (getPeer() != nullptr)
2909
+ {
2910
+ const ScopedValueSetter<bool> recursiveResizeSetter (recursiveResize, true);
2911
+
2912
+ #if JUCE_WINDOWS
2913
+ embeddedComponent.setBounds (getLocalBounds());
2914
+ #elif JUCE_LINUX || JUCE_BSD
2915
+ const auto pos = componentToVstRect (*this, getLocalBounds());
2916
+
2917
+ if (pluginWindow != 0)
2918
+ {
2919
+ auto* symbols = X11Symbols::getInstance();
2920
+ symbols->xMoveResizeWindow (display,
2921
+ pluginWindow,
2922
+ pos.getX(),
2923
+ pos.getY(),
2924
+ (unsigned int) pos.getWidth(),
2925
+ (unsigned int) pos.getHeight());
2926
+ symbols->xMapRaised (display, pluginWindow);
2927
+ symbols->xFlush (display);
2928
+ }
2929
+ #endif
2930
+ }
2931
+ }
2932
+
2933
+ using ComponentMovementWatcher::componentMovedOrResized;
2934
+
2935
+ void componentVisibilityChanged() override
2936
+ {
2937
+ if (isShowing())
2938
+ openPluginWindow();
2939
+ else if (! shouldAvoidDeletingWindow())
2940
+ closePluginWindow();
2941
+
2942
+ setContentScaleFactor();
2943
+
2944
+ #if JUCE_LINUX || JUCE_BSD
2945
+ MessageManager::callAsync ([safeThis = SafePointer<VSTPluginWindow> { this }]
2946
+ {
2947
+ if (safeThis != nullptr)
2948
+ safeThis->componentMovedOrResized (true, true);
2949
+ });
2950
+ #else
2951
+ componentMovedOrResized (true, true);
2952
+ #endif
2953
+ }
2954
+
2955
+ using ComponentMovementWatcher::componentVisibilityChanged;
2956
+
2957
+ void componentPeerChanged() override
2958
+ {
2959
+ closePluginWindow();
2960
+
2961
+ if (getPeer() != nullptr)
2962
+ {
2963
+ openPluginWindow();
2964
+ componentMovedOrResized (true, true);
2965
+ }
2966
+ }
2967
+
2968
+ void setContentScaleFactor()
2969
+ {
2970
+ if (pluginRespondsToDPIChanges)
2971
+ dispatch (Vst2::effVendorSpecific,
2972
+ (int) ByteOrder::bigEndianInt ("PreS"),
2973
+ (int) ByteOrder::bigEndianInt ("AeCs"),
2974
+ nullptr, getEffectiveScale());
2975
+ }
2976
+ #endif
2977
+
2978
+ void setScaleFactor (float scale) override
2979
+ {
2980
+ userScaleFactor = scale;
2981
+
2982
+ #if ! JUCE_MAC
2983
+ setContentScaleFactor();
2984
+ #endif
2985
+
2986
+ #if JUCE_WINDOWS
2987
+ resizeToFit();
2988
+ #endif
2989
+ }
2990
+
2991
+ //==============================================================================
2992
+ bool keyStateChanged (bool) override { return pluginWantsKeys; }
2993
+ bool keyPressed (const juce::KeyPress&) override { return pluginWantsKeys; }
2994
+
2995
+ //==============================================================================
2996
+ void timerCallback() override
2997
+ {
2998
+ if (isShowing())
2999
+ {
3000
+ #if JUCE_WINDOWS
3001
+ if (--sizeCheckCount <= 0)
3002
+ {
3003
+ sizeCheckCount = 10;
3004
+ checkPluginWindowSize();
3005
+ }
3006
+ #endif
3007
+
3008
+ static bool reentrantGuard = false;
3009
+
3010
+ if (! reentrantGuard)
3011
+ {
3012
+ reentrantGuard = true;
3013
+
3014
+ #if JUCE_WINDOWS
3015
+ // Some plugins may draw/resize inside their idle callback, so ensure that
3016
+ // DPI awareness is set correctly inside this call.
3017
+ ScopedThreadDPIAwarenessSetter scope (getPluginHWND());
3018
+ #endif
3019
+ plugin.dispatch (Vst2::effEditIdle, 0, 0, nullptr, 0);
3020
+
3021
+ reentrantGuard = false;
3022
+ }
3023
+
3024
+ #if JUCE_LINUX || JUCE_BSD
3025
+ if (pluginWindow == 0)
3026
+ {
3027
+ updatePluginWindowHandle();
3028
+
3029
+ if (pluginWindow != 0)
3030
+ componentMovedOrResized (true, true);
3031
+ }
3032
+ #endif
3033
+ }
3034
+ }
3035
+
3036
+ //==============================================================================
3037
+ void mouseDown ([[maybe_unused]] const MouseEvent& e) override
3038
+ {
3039
+ #if JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD
3040
+ toFront (true);
3041
+ #endif
3042
+ }
3043
+
3044
+ void broughtToFront() override
3045
+ {
3046
+ if (activeVSTWindows.removeFirstMatchingValue (this) != -1)
3047
+ activeVSTWindows.add (this);
3048
+
3049
+ #if JUCE_MAC
3050
+ dispatch (Vst2::effEditTop, 0, 0, nullptr, 0);
3051
+ #endif
3052
+ }
3053
+
3054
+ private:
3055
+ //==============================================================================
3056
+ // This is a workaround for old Mackie plugins that crash if their
3057
+ // window is deleted more than once.
3058
+ bool shouldAvoidDeletingWindow() const
3059
+ {
3060
+ return plugin.getPluginDescription()
3061
+ .manufacturerName.containsIgnoreCase ("Loud Technologies");
3062
+ }
3063
+
3064
+ // This is an old workaround for some plugins that need a repaint when their
3065
+ // windows are first created, but it breaks some Izotope plugins.
3066
+ bool shouldRepaintCarbonWindowWhenCreated()
3067
+ {
3068
+ return ! plugin.getName().containsIgnoreCase ("izotope");
3069
+ }
3070
+
3071
+ //==============================================================================
3072
+ #if JUCE_MAC
3073
+ void openPluginWindow (void* parentWindow)
3074
+ {
3075
+ if (isOpen || parentWindow == nullptr)
3076
+ return;
3077
+
3078
+ isOpen = true;
3079
+
3080
+ Vst2::ERect* rect = nullptr;
3081
+ dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0);
3082
+ dispatch (Vst2::effEditOpen, 0, 0, parentWindow, 0);
3083
+
3084
+ // do this before and after like in the steinberg example
3085
+ dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0);
3086
+ dispatch (Vst2::effGetProgram, 0, 0, nullptr, 0); // also in steinberg code
3087
+
3088
+ // Install keyboard hooks
3089
+ pluginWantsKeys = (dispatch (Vst2::effKeysRequired, 0, 0, nullptr, 0) == 0);
3090
+
3091
+ // double-check it's not too tiny
3092
+ int w = 250, h = 150;
3093
+
3094
+ if (rect != nullptr)
3095
+ {
3096
+ w = rect->right - rect->left;
3097
+ h = rect->bottom - rect->top;
3098
+
3099
+ if (w == 0 || h == 0)
3100
+ {
3101
+ w = 250;
3102
+ h = 150;
3103
+ }
3104
+ }
3105
+
3106
+ w = jmax (w, 32);
3107
+ h = jmax (h, 32);
3108
+
3109
+ updateSizeFromEditor (w, h);
3110
+
3111
+ startTimer (18 + juce::Random::getSystemRandom().nextInt (5));
3112
+ repaint();
3113
+ }
3114
+ #else
3115
+ void openPluginWindow()
3116
+ {
3117
+ if (isOpen)
3118
+ return;
3119
+
3120
+ JUCE_VST_LOG ("Opening VST UI: " + plugin.getName());
3121
+ isOpen = true;
3122
+
3123
+ pluginRespondsToDPIChanges = plugin.pluginCanDo ("supportsViewDpiScaling") > 0;
3124
+
3125
+ setContentScaleFactor();
3126
+
3127
+ Vst2::ERect* rect = nullptr;
3128
+
3129
+ dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0);
3130
+
3131
+ #if JUCE_WINDOWS
3132
+ auto* handle = embeddedComponent.getHWND();
3133
+ #else
3134
+ auto* handle = getWindowHandle();
3135
+ #endif
3136
+ dispatch (Vst2::effEditOpen, 0, 0, handle, 0);
3137
+ dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0); // do this before and after like in the steinberg example
3138
+ dispatch (Vst2::effGetProgram, 0, 0, nullptr, 0); // also in steinberg code
3139
+
3140
+ pluginWantsKeys = (dispatch (Vst2::effKeysRequired, 0, 0, nullptr, 0) == 0);
3141
+
3142
+ #if JUCE_WINDOWS
3143
+ originalWndProc = nullptr;
3144
+ auto* pluginHWND = getPluginHWND();
3145
+
3146
+ if (pluginHWND == nullptr)
3147
+ {
3148
+ isOpen = false;
3149
+ setSize (300, 150);
3150
+ return;
3151
+ }
3152
+
3153
+ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4244)
3154
+
3155
+ if (! pluginWantsKeys)
3156
+ {
3157
+ originalWndProc = (void*) GetWindowLongPtr (pluginHWND, GWLP_WNDPROC);
3158
+ SetWindowLongPtr (pluginHWND, GWLP_WNDPROC, (LONG_PTR) vstHookWndProc);
3159
+ }
3160
+
3161
+ JUCE_END_IGNORE_WARNINGS_MSVC
3162
+
3163
+ RECT r;
3164
+
3165
+ {
3166
+ ScopedThreadDPIAwarenessSetter threadDpiAwarenessSetter { pluginHWND };
3167
+ GetWindowRect (pluginHWND, &r);
3168
+ }
3169
+
3170
+ auto w = (int) (r.right - r.left);
3171
+ auto h = (int) (r.bottom - r.top);
3172
+
3173
+ if (rect != nullptr)
3174
+ {
3175
+ auto rw = rect->right - rect->left;
3176
+ auto rh = rect->bottom - rect->top;
3177
+
3178
+ if ((rw > 50 && rh > 50 && rw < 2000 && rh < 2000 && (! isWithin (w, rw, 2) || ! isWithin (h, rh, 2)))
3179
+ || ((w == 0 && rw > 0) || (h == 0 && rh > 0)))
3180
+ {
3181
+ // very dodgy logic to decide which size is right.
3182
+ if (std::abs (rw - w) > 350 || std::abs (rh - h) > 350)
3183
+ {
3184
+ ScopedThreadDPIAwarenessSetter threadDpiAwarenessSetter { pluginHWND };
3185
+
3186
+ SetWindowPos (pluginHWND, nullptr,
3187
+ 0, 0, rw, rh,
3188
+ SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER);
3189
+
3190
+ GetWindowRect (pluginHWND, &r);
3191
+
3192
+ w = r.right - r.left;
3193
+ h = r.bottom - r.top;
3194
+
3195
+ pluginRefusesToResize = (w != rw) || (h != rh);
3196
+
3197
+ w = rw;
3198
+ h = rh;
3199
+ }
3200
+ }
3201
+ }
3202
+ #elif JUCE_LINUX || JUCE_BSD
3203
+ updatePluginWindowHandle();
3204
+
3205
+ int w = 250, h = 150;
3206
+
3207
+ if (rect != nullptr)
3208
+ {
3209
+ w = rect->right - rect->left;
3210
+ h = rect->bottom - rect->top;
3211
+
3212
+ if (w == 0 || h == 0)
3213
+ {
3214
+ w = 250;
3215
+ h = 150;
3216
+ }
3217
+ }
3218
+
3219
+ if (pluginWindow != 0)
3220
+ X11Symbols::getInstance()->xMapRaised (display, pluginWindow);
3221
+ #endif
3222
+
3223
+ // double-check it's not too tiny
3224
+ w = jmax (w, 32);
3225
+ h = jmax (h, 32);
3226
+
3227
+ updateSizeFromEditor (w, h);
3228
+
3229
+ #if JUCE_WINDOWS
3230
+ checkPluginWindowSize();
3231
+ #endif
3232
+
3233
+ startTimer (18 + juce::Random::getSystemRandom().nextInt (5));
3234
+ repaint();
3235
+ }
3236
+ #endif
3237
+
3238
+ //==============================================================================
3239
+ void closePluginWindow()
3240
+ {
3241
+ if (isOpen)
3242
+ {
3243
+ // You shouldn't end up hitting this assertion unless the host is trying to do GUI
3244
+ // cleanup on a non-GUI thread. If it does that, bad things could happen in here.
3245
+ JUCE_ASSERT_MESSAGE_MANAGER_IS_LOCKED
3246
+
3247
+ JUCE_VST_LOG ("Closing VST UI: " + plugin.getName());
3248
+ isOpen = false;
3249
+ dispatch (Vst2::effEditClose, 0, 0, nullptr, 0);
3250
+ stopTimer();
3251
+
3252
+ #if JUCE_WINDOWS
3253
+ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4244)
3254
+ auto* pluginHWND = getPluginHWND();
3255
+
3256
+ if (originalWndProc != nullptr && pluginHWND != nullptr && IsWindow (pluginHWND))
3257
+ SetWindowLongPtr (pluginHWND, GWLP_WNDPROC, (LONG_PTR) originalWndProc);
3258
+ JUCE_END_IGNORE_WARNINGS_MSVC
3259
+
3260
+ originalWndProc = nullptr;
3261
+ #elif JUCE_LINUX || JUCE_BSD
3262
+ pluginWindow = 0;
3263
+ #endif
3264
+ }
3265
+ }
3266
+
3267
+ //==============================================================================
3268
+ pointer_sized_int dispatch (const int opcode, const int index, const int value, void* const ptr, float opt)
3269
+ {
3270
+ return plugin.dispatch (opcode, index, value, ptr, opt);
3271
+ }
3272
+
3273
+ //==============================================================================
3274
+ #if JUCE_WINDOWS
3275
+ bool isWindowSizeCorrectForPlugin (int w, int h)
3276
+ {
3277
+ if (pluginRefusesToResize)
3278
+ return true;
3279
+
3280
+ const auto converted = vstToComponentRect (*this, { w, h });
3281
+ return (isWithin (converted.getWidth(), getWidth(), 5) && isWithin (converted.getHeight(), getHeight(), 5));
3282
+ }
3283
+
3284
+ void resizeToFit()
3285
+ {
3286
+ Vst2::ERect* rect = nullptr;
3287
+ dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0);
3288
+
3289
+ auto w = rect->right - rect->left;
3290
+ auto h = rect->bottom - rect->top;
3291
+
3292
+ if (! isWindowSizeCorrectForPlugin (w, h))
3293
+ {
3294
+ updateSizeFromEditor (w, h);
3295
+ embeddedComponent.updateHWNDBounds();
3296
+ sizeCheckCount = 0;
3297
+ }
3298
+ }
3299
+
3300
+ void checkPluginWindowSize()
3301
+ {
3302
+ if (! pluginRespondsToDPIChanges)
3303
+ resizeToFit();
3304
+ }
3305
+
3306
+ // hooks to get keyboard events from VST windows.
3307
+ static LRESULT CALLBACK vstHookWndProc (HWND hW, UINT message, WPARAM wParam, LPARAM lParam)
3308
+ {
3309
+ for (int i = activeVSTWindows.size(); --i >= 0;)
3310
+ {
3311
+ Component::SafePointer<VSTPluginWindow> w (activeVSTWindows[i]);
3312
+
3313
+ auto* pluginHWND = w->getPluginHWND();
3314
+
3315
+ if (w != nullptr && pluginHWND == hW)
3316
+ {
3317
+ if (message == WM_CHAR
3318
+ || message == WM_KEYDOWN
3319
+ || message == WM_SYSKEYDOWN
3320
+ || message == WM_KEYUP
3321
+ || message == WM_SYSKEYUP
3322
+ || message == WM_APPCOMMAND)
3323
+ {
3324
+ SendMessage ((HWND) w->getTopLevelComponent()->getWindowHandle(),
3325
+ message, wParam, lParam);
3326
+ }
3327
+
3328
+ if (w != nullptr) // (may have been deleted in SendMessage callback)
3329
+ return CallWindowProc ((WNDPROC) w->originalWndProc,
3330
+ (HWND) pluginHWND,
3331
+ message, wParam, lParam);
3332
+ }
3333
+ }
3334
+
3335
+ return DefWindowProc (hW, message, wParam, lParam);
3336
+ }
3337
+ #endif
3338
+
3339
+ #if JUCE_LINUX || JUCE_BSD
3340
+ void updatePluginWindowHandle()
3341
+ {
3342
+ pluginWindow = getChildWindow ((Window) getWindowHandle());
3343
+ }
3344
+ #endif
3345
+
3346
+ //==============================================================================
3347
+ #if JUCE_MAC
3348
+ std::unique_ptr<NSViewComponentWithParent> cocoaWrapper;
3349
+
3350
+ void resized() override
3351
+ {
3352
+ }
3353
+ #endif
3354
+
3355
+ //==============================================================================
3356
+ VSTPluginInstance& plugin;
3357
+ float userScaleFactor = 1.0f;
3358
+ bool isOpen = false, recursiveResize = false;
3359
+ bool pluginWantsKeys = false, pluginRefusesToResize = false, alreadyInside = false;
3360
+
3361
+ #if ! JUCE_MAC
3362
+ bool pluginRespondsToDPIChanges = false;
3363
+
3364
+ float nativeScaleFactor = 1.0f;
3365
+
3366
+ struct ScaleNotifierCallback
3367
+ {
3368
+ VSTPluginWindow& window;
3369
+
3370
+ void operator() (float platformScale) const
3371
+ {
3372
+ MessageManager::callAsync ([ref = Component::SafePointer<VSTPluginWindow> (&window), platformScale]
3373
+ {
3374
+ if (auto* r = ref.getComponent())
3375
+ {
3376
+ r->nativeScaleFactor = platformScale;
3377
+ r->setContentScaleFactor();
3378
+
3379
+ #if JUCE_WINDOWS
3380
+ r->resizeToFit();
3381
+ r->embeddedComponent.updateHWNDBounds();
3382
+ #endif
3383
+ r->componentMovedOrResized (true, true);
3384
+ }
3385
+ });
3386
+ }
3387
+ };
3388
+
3389
+ NativeScaleFactorNotifier scaleNotifier { this, ScaleNotifierCallback { *this } };
3390
+
3391
+ #if JUCE_WINDOWS
3392
+ struct ViewComponent final : public HWNDComponent
3393
+ {
3394
+ ViewComponent()
3395
+ {
3396
+ setOpaque (true);
3397
+ inner.addToDesktop (0);
3398
+
3399
+ if (auto* peer = inner.getPeer())
3400
+ setHWND (peer->getNativeHandle());
3401
+ }
3402
+
3403
+ void paint (Graphics& g) override { g.fillAll (Colours::black); }
3404
+
3405
+ private:
3406
+ struct Inner final : public Component
3407
+ {
3408
+ Inner() { setOpaque (true); }
3409
+ void paint (Graphics& g) override { g.fillAll (Colours::black); }
3410
+ };
3411
+
3412
+ Inner inner;
3413
+ };
3414
+
3415
+ HWND getPluginHWND() const
3416
+ {
3417
+ return GetWindow ((HWND) embeddedComponent.getHWND(), GW_CHILD);
3418
+ }
3419
+
3420
+ ViewComponent embeddedComponent;
3421
+ void* originalWndProc = {};
3422
+ int sizeCheckCount = 0;
3423
+ #elif JUCE_LINUX || JUCE_BSD
3424
+ ::Display* display = XWindowSystem::getInstance()->getDisplay();
3425
+ Window pluginWindow = 0;
3426
+ #endif
3427
+ #else
3428
+ static constexpr auto nativeScaleFactor = 1.0f;
3429
+ #endif
3430
+
3431
+ //==============================================================================
3432
+ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (VSTPluginWindow)
3433
+ };
3434
+ #endif
3435
+
3436
+ JUCE_END_IGNORE_WARNINGS_MSVC
3437
+
3438
+ //==============================================================================
3439
+ AudioProcessorEditor* VSTPluginInstance::createEditor()
3440
+ {
3441
+ #if JUCE_IOS || JUCE_ANDROID
3442
+ return nullptr;
3443
+ #else
3444
+ return hasEditor() ? new VSTPluginWindow (*this)
3445
+ : nullptr;
3446
+ #endif
3447
+ }
3448
+
3449
+ bool VSTPluginInstance::updateSizeFromEditor ([[maybe_unused]] int w, [[maybe_unused]] int h)
3450
+ {
3451
+ #if ! JUCE_IOS && ! JUCE_ANDROID
3452
+ if (auto* editor = dynamic_cast<VSTPluginWindow*> (getActiveEditor()))
3453
+ return editor->updateSizeFromEditor (w, h);
3454
+ #endif
3455
+
3456
+ return false;
3457
+ }
3458
+
3459
+ //==============================================================================
3460
+ // entry point for all callbacks from the plugin
3461
+ static pointer_sized_int VSTCALLBACK audioMaster (Vst2::AEffect* effect, int32 opcode, int32 index, pointer_sized_int value, void* ptr, float opt)
3462
+ {
3463
+ if (effect != nullptr)
3464
+ if (auto* instance = (VSTPluginInstance*) (effect->resvd2))
3465
+ return instance->handleCallback (opcode, index, value, ptr, opt);
3466
+
3467
+ return VSTPluginInstance::handleGeneralCallback (opcode, index, value, ptr, opt);
3468
+ }
3469
+
3470
+ //==============================================================================
3471
+ VSTPluginFormat::VSTPluginFormat() {}
3472
+ VSTPluginFormat::~VSTPluginFormat() {}
3473
+
3474
+ static std::unique_ptr<VSTPluginInstance> createAndUpdateDesc (VSTPluginFormat& format, PluginDescription& desc)
3475
+ {
3476
+ if (auto p = format.createInstanceFromDescription (desc, 44100.0, 512))
3477
+ {
3478
+ if (auto instance = dynamic_cast<VSTPluginInstance*> (p.release()))
3479
+ {
3480
+ #if JUCE_MAC
3481
+ if (instance->vstModule->resFileId != 0)
3482
+ UseResFile (instance->vstModule->resFileId);
3483
+ #endif
3484
+
3485
+ instance->fillInPluginDescription (desc);
3486
+ return std::unique_ptr<VSTPluginInstance> (instance);
3487
+ }
3488
+
3489
+ jassertfalse;
3490
+ }
3491
+
3492
+ return {};
3493
+ }
3494
+
3495
+ void VSTPluginFormat::findAllTypesForFile (OwnedArray<PluginDescription>& results,
3496
+ const String& fileOrIdentifier)
3497
+ {
3498
+ if (! fileMightContainThisPluginType (fileOrIdentifier))
3499
+ return;
3500
+
3501
+ PluginDescription desc;
3502
+ desc.fileOrIdentifier = fileOrIdentifier;
3503
+ desc.uniqueId = desc.deprecatedUid = 0;
3504
+
3505
+ auto instance = createAndUpdateDesc (*this, desc);
3506
+
3507
+ if (instance == nullptr)
3508
+ return;
3509
+
3510
+ if (instance->getVstCategory() != Vst2::kPlugCategShell)
3511
+ {
3512
+ // Normal plugin...
3513
+ results.add (new PluginDescription (desc));
3514
+
3515
+ instance->dispatch (Vst2::effOpen, 0, 0, nullptr, 0);
3516
+ }
3517
+ else
3518
+ {
3519
+ // It's a shell plugin, so iterate all the subtypes...
3520
+ for (;;)
3521
+ {
3522
+ char shellEffectName [256] = { 0 };
3523
+ auto uid = (int) instance->dispatch (Vst2::effShellGetNextPlugin, 0, 0, shellEffectName, 0);
3524
+
3525
+ if (uid == 0)
3526
+ break;
3527
+
3528
+ desc.uniqueId = desc.deprecatedUid = uid;
3529
+ desc.name = shellEffectName;
3530
+
3531
+ aboutToScanVSTShellPlugin (desc);
3532
+
3533
+ std::unique_ptr<VSTPluginInstance> shellInstance (createAndUpdateDesc (*this, desc));
3534
+
3535
+ if (shellInstance != nullptr)
3536
+ {
3537
+ jassert (desc.deprecatedUid == uid);
3538
+ jassert (desc.uniqueId == uid);
3539
+ desc.hasSharedContainer = true;
3540
+ desc.name = shellEffectName;
3541
+
3542
+ if (! arrayContainsPlugin (results, desc))
3543
+ results.add (new PluginDescription (desc));
3544
+ }
3545
+ }
3546
+ }
3547
+ }
3548
+
3549
+ void VSTPluginFormat::createPluginInstance (const PluginDescription& desc,
3550
+ double sampleRate, int blockSize,
3551
+ PluginCreationCallback callback)
3552
+ {
3553
+ std::unique_ptr<VSTPluginInstance> result;
3554
+
3555
+ if (fileMightContainThisPluginType (desc.fileOrIdentifier))
3556
+ {
3557
+ File file (desc.fileOrIdentifier);
3558
+
3559
+ auto previousWorkingDirectory = File::getCurrentWorkingDirectory();
3560
+ file.getParentDirectory().setAsCurrentWorkingDirectory();
3561
+
3562
+ if (auto module = ModuleHandle::findOrCreateModule (file))
3563
+ {
3564
+ shellUIDToCreate = desc.uniqueId != 0 ? desc.uniqueId : desc.deprecatedUid;
3565
+
3566
+ result.reset (VSTPluginInstance::create (module, sampleRate, blockSize));
3567
+
3568
+ if (result != nullptr && ! result->initialiseEffect (sampleRate, blockSize))
3569
+ result.reset();
3570
+ }
3571
+
3572
+ previousWorkingDirectory.setAsCurrentWorkingDirectory();
3573
+ }
3574
+
3575
+ String errorMsg;
3576
+
3577
+ if (result == nullptr)
3578
+ errorMsg = TRANS ("Unable to load XXX plug-in file").replace ("XXX", "VST-2");
3579
+
3580
+ callback (std::move (result), errorMsg);
3581
+ }
3582
+
3583
+ bool VSTPluginFormat::requiresUnblockedMessageThreadDuringCreation (const PluginDescription&) const
3584
+ {
3585
+ return false;
3586
+ }
3587
+
3588
+ bool VSTPluginFormat::fileMightContainThisPluginType (const String& fileOrIdentifier)
3589
+ {
3590
+ auto f = File::createFileWithoutCheckingPath (fileOrIdentifier);
3591
+
3592
+ #if JUCE_MAC || JUCE_IOS
3593
+ return f.isDirectory() && f.hasFileExtension (".vst");
3594
+ #elif JUCE_WINDOWS
3595
+ return f.existsAsFile() && f.hasFileExtension (".dll");
3596
+ #elif JUCE_LINUX || JUCE_BSD || JUCE_ANDROID
3597
+ return f.existsAsFile() && f.hasFileExtension (".so");
3598
+ #endif
3599
+ }
3600
+
3601
+ String VSTPluginFormat::getNameOfPluginFromIdentifier (const String& fileOrIdentifier)
3602
+ {
3603
+ return fileOrIdentifier;
3604
+ }
3605
+
3606
+ bool VSTPluginFormat::pluginNeedsRescanning (const PluginDescription& desc)
3607
+ {
3608
+ return File (desc.fileOrIdentifier).getLastModificationTime() != desc.lastFileModTime;
3609
+ }
3610
+
3611
+ bool VSTPluginFormat::doesPluginStillExist (const PluginDescription& desc)
3612
+ {
3613
+ return File (desc.fileOrIdentifier).exists();
3614
+ }
3615
+
3616
+ StringArray VSTPluginFormat::searchPathsForPlugins (const FileSearchPath& directoriesToSearch, const bool recursive, bool)
3617
+ {
3618
+ StringArray results;
3619
+
3620
+ for (int j = 0; j < directoriesToSearch.getNumPaths(); ++j)
3621
+ recursiveFileSearch (results, directoriesToSearch [j], recursive);
3622
+
3623
+ return results;
3624
+ }
3625
+
3626
+ void VSTPluginFormat::recursiveFileSearch (StringArray& results, const File& dir, const bool recursive)
3627
+ {
3628
+ // avoid allowing the dir iterator to be recursive, because we want to avoid letting it delve inside
3629
+ // .component or .vst directories.
3630
+ for (const auto& iter : RangedDirectoryIterator (dir, false, "*", File::findFilesAndDirectories))
3631
+ {
3632
+ auto f = iter.getFile();
3633
+ bool isPlugin = false;
3634
+
3635
+ if (fileMightContainThisPluginType (f.getFullPathName()))
3636
+ {
3637
+ isPlugin = true;
3638
+ results.add (f.getFullPathName());
3639
+ }
3640
+
3641
+ if (recursive && (! isPlugin) && f.isDirectory())
3642
+ recursiveFileSearch (results, f, true);
3643
+ }
3644
+ }
3645
+
3646
+ FileSearchPath VSTPluginFormat::getDefaultLocationsToSearch()
3647
+ {
3648
+ #if JUCE_MAC
3649
+ return FileSearchPath ("~/Library/Audio/Plug-Ins/VST;/Library/Audio/Plug-Ins/VST");
3650
+ #elif JUCE_LINUX || JUCE_BSD || JUCE_ANDROID
3651
+ return FileSearchPath (SystemStats::getEnvironmentVariable ("VST_PATH",
3652
+ "/usr/lib/vst;/usr/local/lib/vst;~/.vst")
3653
+ .replace (":", ";"));
3654
+ #elif JUCE_WINDOWS
3655
+ auto programFiles = File::getSpecialLocation (File::globalApplicationsDirectory).getFullPathName();
3656
+
3657
+ FileSearchPath paths;
3658
+ paths.add (WindowsRegistry::getValue ("HKEY_LOCAL_MACHINE\\Software\\VST\\VSTPluginsPath"));
3659
+ paths.addIfNotAlreadyThere (programFiles + "\\Steinberg\\VstPlugins");
3660
+ paths.addIfNotAlreadyThere (programFiles + "\\VstPlugins");
3661
+ paths.removeRedundantPaths();
3662
+ return paths;
3663
+ #elif JUCE_IOS
3664
+ // on iOS you can only load plug-ins inside the hosts bundle folder
3665
+ CFUniquePtr<CFURLRef> relativePluginDir (CFBundleCopyBuiltInPlugInsURL (CFBundleGetMainBundle()));
3666
+ CFUniquePtr<CFURLRef> pluginDir (CFURLCopyAbsoluteURL (relativePluginDir.get()));
3667
+
3668
+ CFUniquePtr<CFStringRef> path (CFURLCopyFileSystemPath (pluginDir.get(), kCFURLPOSIXPathStyle));
3669
+ FileSearchPath retval (String (CFStringGetCStringPtr (path.get(), kCFStringEncodingUTF8)));
3670
+ return retval;
3671
+ #endif
3672
+ }
3673
+
3674
+ const XmlElement* VSTPluginFormat::getVSTXML (AudioPluginInstance* plugin)
3675
+ {
3676
+ if (auto* vst = dynamic_cast<VSTPluginInstance*> (plugin))
3677
+ if (vst->vstModule != nullptr)
3678
+ return vst->vstModule->vstXml.get();
3679
+
3680
+ return nullptr;
3681
+ }
3682
+
3683
+ bool VSTPluginFormat::loadFromFXBFile (AudioPluginInstance* plugin, const void* data, size_t dataSize)
3684
+ {
3685
+ if (auto* vst = dynamic_cast<VSTPluginInstance*> (plugin))
3686
+ return vst->loadFromFXBFile (data, dataSize);
3687
+
3688
+ return false;
3689
+ }
3690
+
3691
+ bool VSTPluginFormat::saveToFXBFile (AudioPluginInstance* plugin, MemoryBlock& dest, bool asFXB)
3692
+ {
3693
+ if (auto* vst = dynamic_cast<VSTPluginInstance*> (plugin))
3694
+ return vst->saveToFXBFile (dest, asFXB);
3695
+
3696
+ return false;
3697
+ }
3698
+
3699
+ bool VSTPluginFormat::getChunkData (AudioPluginInstance* plugin, MemoryBlock& result, bool isPreset)
3700
+ {
3701
+ if (auto* vst = dynamic_cast<VSTPluginInstance*> (plugin))
3702
+ return vst->getChunkData (result, isPreset, 128);
3703
+
3704
+ return false;
3705
+ }
3706
+
3707
+ bool VSTPluginFormat::setChunkData (AudioPluginInstance* plugin, const void* data, int size, bool isPreset)
3708
+ {
3709
+ if (auto* vst = dynamic_cast<VSTPluginInstance*> (plugin))
3710
+ return vst->setChunkData (data, size, isPreset);
3711
+
3712
+ return false;
3713
+ }
3714
+
3715
+ AudioPluginInstance* VSTPluginFormat::createCustomVSTFromMainCall (void* entryPointFunction,
3716
+ double initialSampleRate, int initialBufferSize)
3717
+ {
3718
+ ModuleHandle::Ptr module = new ModuleHandle (File(), (MainCall) entryPointFunction);
3719
+
3720
+ if (module->open())
3721
+ {
3722
+ std::unique_ptr<VSTPluginInstance> result (VSTPluginInstance::create (module, initialSampleRate, initialBufferSize));
3723
+
3724
+ if (result != nullptr)
3725
+ if (result->initialiseEffect (initialSampleRate, initialBufferSize))
3726
+ return result.release();
3727
+ }
3728
+
3729
+ return nullptr;
3730
+ }
3731
+
3732
+ void VSTPluginFormat::setExtraFunctions (AudioPluginInstance* plugin, ExtraFunctions* functions)
3733
+ {
3734
+ std::unique_ptr<ExtraFunctions> f (functions);
3735
+
3736
+ if (auto* vst = dynamic_cast<VSTPluginInstance*> (plugin))
3737
+ std::swap (vst->extraFunctions, f);
3738
+ }
3739
+
3740
+ AudioPluginInstance* VSTPluginFormat::getPluginInstanceFromVstEffectInterface (void* aEffect)
3741
+ {
3742
+ if (auto* vstAEffect = reinterpret_cast<Vst2::AEffect*> (aEffect))
3743
+ if (auto* instanceVST = reinterpret_cast<VSTPluginInstance*> (vstAEffect->resvd2))
3744
+ return dynamic_cast<AudioPluginInstance*> (instanceVST);
3745
+
3746
+ return nullptr;
3747
+ }
3748
+
3749
+ pointer_sized_int JUCE_CALLTYPE VSTPluginFormat::dispatcher (AudioPluginInstance* plugin, int32 opcode, int32 index, pointer_sized_int value, void* ptr, float opt)
3750
+ {
3751
+ if (auto* vst = dynamic_cast<VSTPluginInstance*> (plugin))
3752
+ return vst->dispatch (opcode, index, value, ptr, opt);
3753
+
3754
+ return {};
3755
+ }
3756
+
3757
+ void VSTPluginFormat::aboutToScanVSTShellPlugin (const PluginDescription&) {}
3758
+
3759
+ } // namespace juce
3760
+
3761
+ JUCE_END_IGNORE_WARNINGS_GCC_LIKE
3762
+ JUCE_END_IGNORE_WARNINGS_MSVC
3763
+
3764
+ #endif