cyfaust 0.1.0__cp311-cp311-macosx_15_0_arm64.whl

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 (693) hide show
  1. cyfaust/CMakeLists.txt +93 -0
  2. cyfaust/__init__.py +0 -0
  3. cyfaust/__main__.py +819 -0
  4. cyfaust/box.pxd +46 -0
  5. cyfaust/box.pyx +2459 -0
  6. cyfaust/common.pxd +5 -0
  7. cyfaust/common.pyx +61 -0
  8. cyfaust/cyfaust.cpython-311-darwin.so +0 -0
  9. cyfaust/faust_box.pxd +298 -0
  10. cyfaust/faust_box_oo.pyx +66 -0
  11. cyfaust/faust_gui.pxd +261 -0
  12. cyfaust/faust_interp.pxd +160 -0
  13. cyfaust/faust_player.pxd +80 -0
  14. cyfaust/faust_signal.pxd +257 -0
  15. cyfaust/gui_statics.cpp +15 -0
  16. cyfaust/interp.pyx +673 -0
  17. cyfaust/player.cpp +32519 -0
  18. cyfaust/player.pyx +191 -0
  19. cyfaust/resources/architecture/AU/AUPublic/AUBase/AUBase.cpp +2327 -0
  20. cyfaust/resources/architecture/AU/AUPublic/AUBase/AUBase.h +1019 -0
  21. cyfaust/resources/architecture/AU/AUPublic/AUBase/AUDispatch.cpp +423 -0
  22. cyfaust/resources/architecture/AU/AUPublic/AUBase/AUDispatch.h +82 -0
  23. cyfaust/resources/architecture/AU/AUPublic/AUBase/AUInputElement.cpp +151 -0
  24. cyfaust/resources/architecture/AU/AUPublic/AUBase/AUInputElement.h +119 -0
  25. cyfaust/resources/architecture/AU/AUPublic/AUBase/AUOutputElement.cpp +62 -0
  26. cyfaust/resources/architecture/AU/AUPublic/AUBase/AUOutputElement.h +66 -0
  27. cyfaust/resources/architecture/AU/AUPublic/AUBase/AUPlugInDispatch.cpp +615 -0
  28. cyfaust/resources/architecture/AU/AUPublic/AUBase/AUPlugInDispatch.h +128 -0
  29. cyfaust/resources/architecture/AU/AUPublic/AUBase/AUScopeElement.cpp +512 -0
  30. cyfaust/resources/architecture/AU/AUPublic/AUBase/AUScopeElement.h +544 -0
  31. cyfaust/resources/architecture/AU/AUPublic/AUBase/ComponentBase.cpp +370 -0
  32. cyfaust/resources/architecture/AU/AUPublic/AUBase/ComponentBase.h +340 -0
  33. cyfaust/resources/architecture/AU/AUPublic/AUEffectBase/AUEffectBase.cpp +463 -0
  34. cyfaust/resources/architecture/AU/AUPublic/AUEffectBase/AUEffectBase.h +391 -0
  35. cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/AUInstrumentBase.cpp +837 -0
  36. cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/AUInstrumentBase.h +267 -0
  37. cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/AUMIDIBase.cpp +495 -0
  38. cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/AUMIDIBase.h +213 -0
  39. cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/LockFreeFIFO.h +168 -0
  40. cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/MIDIControlHandler.h +92 -0
  41. cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/MusicDeviceBase.cpp +354 -0
  42. cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/MusicDeviceBase.h +126 -0
  43. cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/SynthElement.cpp +419 -0
  44. cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/SynthElement.h +227 -0
  45. cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/SynthEvent.h +145 -0
  46. cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/SynthNote.cpp +138 -0
  47. cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/SynthNote.h +186 -0
  48. cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/SynthNoteList.cpp +93 -0
  49. cyfaust/resources/architecture/AU/AUPublic/AUInstrumentBase/SynthNoteList.h +232 -0
  50. cyfaust/resources/architecture/AU/AUPublic/Utility/AUBaseHelper.cpp +134 -0
  51. cyfaust/resources/architecture/AU/AUPublic/Utility/AUBaseHelper.h +80 -0
  52. cyfaust/resources/architecture/AU/AUPublic/Utility/AUBuffer.cpp +217 -0
  53. cyfaust/resources/architecture/AU/AUPublic/Utility/AUBuffer.h +267 -0
  54. cyfaust/resources/architecture/AU/AUPublic/Utility/AUMIDIDefs.h +136 -0
  55. cyfaust/resources/architecture/AU/AUPublic/Utility/AUSilentTimeout.h +93 -0
  56. cyfaust/resources/architecture/AU/English.lproj/InfoPlist.strings +0 -0
  57. cyfaust/resources/architecture/AU/FaustAU.exp +2 -0
  58. cyfaust/resources/architecture/AU/FaustAU.xcodeproj/project.pbxproj +968 -0
  59. cyfaust/resources/architecture/AU/FaustAU.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  60. cyfaust/resources/architecture/AU/FaustAUCustomView.plist +14 -0
  61. cyfaust/resources/architecture/AU/Info.plist +47 -0
  62. cyfaust/resources/architecture/AU/PublicUtility/CAAtomic.h +305 -0
  63. cyfaust/resources/architecture/AU/PublicUtility/CAAtomicStack.h +239 -0
  64. cyfaust/resources/architecture/AU/PublicUtility/CAAudioChannelLayout.cpp +153 -0
  65. cyfaust/resources/architecture/AU/PublicUtility/CAAudioChannelLayout.h +199 -0
  66. cyfaust/resources/architecture/AU/PublicUtility/CAAutoDisposer.h +508 -0
  67. cyfaust/resources/architecture/AU/PublicUtility/CABufferList.cpp +264 -0
  68. cyfaust/resources/architecture/AU/PublicUtility/CABufferList.h +319 -0
  69. cyfaust/resources/architecture/AU/PublicUtility/CAByteOrder.h +161 -0
  70. cyfaust/resources/architecture/AU/PublicUtility/CADebugMacros.cpp +88 -0
  71. cyfaust/resources/architecture/AU/PublicUtility/CADebugMacros.h +580 -0
  72. cyfaust/resources/architecture/AU/PublicUtility/CADebugPrintf.cpp +89 -0
  73. cyfaust/resources/architecture/AU/PublicUtility/CADebugPrintf.h +115 -0
  74. cyfaust/resources/architecture/AU/PublicUtility/CADebugger.cpp +77 -0
  75. cyfaust/resources/architecture/AU/PublicUtility/CADebugger.h +56 -0
  76. cyfaust/resources/architecture/AU/PublicUtility/CAException.h +83 -0
  77. cyfaust/resources/architecture/AU/PublicUtility/CAGuard.cpp +339 -0
  78. cyfaust/resources/architecture/AU/PublicUtility/CAGuard.h +133 -0
  79. cyfaust/resources/architecture/AU/PublicUtility/CAHostTimeBase.cpp +110 -0
  80. cyfaust/resources/architecture/AU/PublicUtility/CAHostTimeBase.h +231 -0
  81. cyfaust/resources/architecture/AU/PublicUtility/CALogMacros.h +140 -0
  82. cyfaust/resources/architecture/AU/PublicUtility/CAMath.h +68 -0
  83. cyfaust/resources/architecture/AU/PublicUtility/CAMutex.cpp +345 -0
  84. cyfaust/resources/architecture/AU/PublicUtility/CAMutex.h +163 -0
  85. cyfaust/resources/architecture/AU/PublicUtility/CAReferenceCounted.h +87 -0
  86. cyfaust/resources/architecture/AU/PublicUtility/CAStreamBasicDescription.cpp +795 -0
  87. cyfaust/resources/architecture/AU/PublicUtility/CAStreamBasicDescription.h +409 -0
  88. cyfaust/resources/architecture/AU/PublicUtility/CAThreadSafeList.h +255 -0
  89. cyfaust/resources/architecture/AU/PublicUtility/CAVectorUnit.cpp +191 -0
  90. cyfaust/resources/architecture/AU/PublicUtility/CAVectorUnit.h +100 -0
  91. cyfaust/resources/architecture/AU/PublicUtility/CAVectorUnitTypes.h +59 -0
  92. cyfaust/resources/architecture/AU/PublicUtility/CAXException.cpp +49 -0
  93. cyfaust/resources/architecture/AU/PublicUtility/CAXException.h +338 -0
  94. cyfaust/resources/architecture/AU/SectionPatternLight.tiff +0 -0
  95. cyfaust/resources/architecture/AU/Source/AUSource/FaustAU.h +38 -0
  96. cyfaust/resources/architecture/AU/Source/AUSource/FaustAU.r +153 -0
  97. cyfaust/resources/architecture/AU/Source/AUSource/FaustAUVersion.h +64 -0
  98. cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Bargraph.h +18 -0
  99. cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Bargraph.m +21 -0
  100. cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Button.h +20 -0
  101. cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Button.m +56 -0
  102. cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_CustomView.h +87 -0
  103. cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_CustomView.m +834 -0
  104. cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_CustomViewFactory.h +13 -0
  105. cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_CustomViewFactory.m +22 -0
  106. cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Knob.h +81 -0
  107. cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Knob.m +199 -0
  108. cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Slider.h +18 -0
  109. cyfaust/resources/architecture/AU/Source/CocoaUI/FaustAU_Slider.m +21 -0
  110. cyfaust/resources/architecture/AU/version.plist +16 -0
  111. cyfaust/resources/architecture/VST/Info.plist +28 -0
  112. cyfaust/resources/architecture/VST/PkgInfo +1 -0
  113. cyfaust/resources/architecture/VST/README +11 -0
  114. cyfaust/resources/architecture/VST/VST.xcode/project.pbxproj +655 -0
  115. cyfaust/resources/architecture/alsa-console.cpp +246 -0
  116. cyfaust/resources/architecture/alsa-gtk.cpp +220 -0
  117. cyfaust/resources/architecture/alsa-qt.cpp +229 -0
  118. cyfaust/resources/architecture/api/DspFaust.cpp +612 -0
  119. cyfaust/resources/architecture/api/DspFaust.h +511 -0
  120. cyfaust/resources/architecture/api/README.md +237 -0
  121. cyfaust/resources/architecture/api/doc/Generic.md +38 -0
  122. cyfaust/resources/architecture/au-effect.cpp +487 -0
  123. cyfaust/resources/architecture/au-instrument.cpp +573 -0
  124. cyfaust/resources/architecture/bench.cpp +91 -0
  125. cyfaust/resources/architecture/c-jack-gtk.c +227 -0
  126. cyfaust/resources/architecture/ca-gtk.cpp +284 -0
  127. cyfaust/resources/architecture/ca-qt.cpp +424 -0
  128. cyfaust/resources/architecture/cpal.rs +195 -0
  129. cyfaust/resources/architecture/csound.cpp +245 -0
  130. cyfaust/resources/architecture/csvplot.cpp +227 -0
  131. cyfaust/resources/architecture/daisy/Makefile +14 -0
  132. cyfaust/resources/architecture/daisy/README.md +50 -0
  133. cyfaust/resources/architecture/daisy/ex_faust.cpp +173 -0
  134. cyfaust/resources/architecture/dssi.cpp +1262 -0
  135. cyfaust/resources/architecture/dummy-mem.cpp +186 -0
  136. cyfaust/resources/architecture/dummy.cpp +294 -0
  137. cyfaust/resources/architecture/faust/au/AUUI.h +404 -0
  138. cyfaust/resources/architecture/faust/audio/alsa-dsp.h +693 -0
  139. cyfaust/resources/architecture/faust/audio/android-dsp.h +583 -0
  140. cyfaust/resources/architecture/faust/audio/audio.h +115 -0
  141. cyfaust/resources/architecture/faust/audio/channels.h +122 -0
  142. cyfaust/resources/architecture/faust/audio/coreaudio-dsp.h +1543 -0
  143. cyfaust/resources/architecture/faust/audio/coreaudio-ios-dsp.h +743 -0
  144. cyfaust/resources/architecture/faust/audio/dummy-audio.h +255 -0
  145. cyfaust/resources/architecture/faust/audio/esp32-dsp.h +284 -0
  146. cyfaust/resources/architecture/faust/audio/fpe.h +164 -0
  147. cyfaust/resources/architecture/faust/audio/jack-dsp.h +534 -0
  148. cyfaust/resources/architecture/faust/audio/juce-dsp.h +119 -0
  149. cyfaust/resources/architecture/faust/audio/netjack-dsp.h +354 -0
  150. cyfaust/resources/architecture/faust/audio/oboe-dsp.h +308 -0
  151. cyfaust/resources/architecture/faust/audio/ofaudio-dsp.h +155 -0
  152. cyfaust/resources/architecture/faust/audio/opensles-android-dsp.h +631 -0
  153. cyfaust/resources/architecture/faust/audio/osc-dsp.h +120 -0
  154. cyfaust/resources/architecture/faust/audio/portaudio-dsp.h +236 -0
  155. cyfaust/resources/architecture/faust/audio/rtaudio-dsp.h +241 -0
  156. cyfaust/resources/architecture/faust/audio/samAudio.h +140 -0
  157. cyfaust/resources/architecture/faust/audio/teensy-dsp.h +171 -0
  158. cyfaust/resources/architecture/faust/dsp/cmajor-cpp-dsp.h +253 -0
  159. cyfaust/resources/architecture/faust/dsp/cmajorpatch-dsp.h +483 -0
  160. cyfaust/resources/architecture/faust/dsp/cpp-dsp-adapter.h +38 -0
  161. cyfaust/resources/architecture/faust/dsp/dsp-adapter.h +836 -0
  162. cyfaust/resources/architecture/faust/dsp/dsp-bench.h +611 -0
  163. cyfaust/resources/architecture/faust/dsp/dsp-checker.h +115 -0
  164. cyfaust/resources/architecture/faust/dsp/dsp-combiner.h +810 -0
  165. cyfaust/resources/architecture/faust/dsp/dsp-compute-adapter.h +159 -0
  166. cyfaust/resources/architecture/faust/dsp/dsp-multi.h +702 -0
  167. cyfaust/resources/architecture/faust/dsp/dsp-multifun.h +90 -0
  168. cyfaust/resources/architecture/faust/dsp/dsp-optimizer.h +511 -0
  169. cyfaust/resources/architecture/faust/dsp/dsp-tools.h +229 -0
  170. cyfaust/resources/architecture/faust/dsp/dsp.h +321 -0
  171. cyfaust/resources/architecture/faust/dsp/fastmath.cpp +301 -0
  172. cyfaust/resources/architecture/faust/dsp/faust-dynamic-engine.cpp +494 -0
  173. cyfaust/resources/architecture/faust/dsp/faust-dynamic-engine.h +386 -0
  174. cyfaust/resources/architecture/faust/dsp/faust-engine.h +75 -0
  175. cyfaust/resources/architecture/faust/dsp/faust-poly-engine.h +638 -0
  176. cyfaust/resources/architecture/faust/dsp/interpreter-dsp-c.h +288 -0
  177. cyfaust/resources/architecture/faust/dsp/interpreter-dsp.h +362 -0
  178. cyfaust/resources/architecture/faust/dsp/interpreter-machine-dsp.h +233 -0
  179. cyfaust/resources/architecture/faust/dsp/libfaust-box-c.h +817 -0
  180. cyfaust/resources/architecture/faust/dsp/libfaust-box.h +889 -0
  181. cyfaust/resources/architecture/faust/dsp/libfaust-c.h +116 -0
  182. cyfaust/resources/architecture/faust/dsp/libfaust-signal-c.h +649 -0
  183. cyfaust/resources/architecture/faust/dsp/libfaust-signal.h +731 -0
  184. cyfaust/resources/architecture/faust/dsp/llvm-dsp-adapter.h +160 -0
  185. cyfaust/resources/architecture/faust/dsp/llvm-dsp-c.h +524 -0
  186. cyfaust/resources/architecture/faust/dsp/llvm-dsp.h +575 -0
  187. cyfaust/resources/architecture/faust/dsp/llvm-machine-dsp.h +215 -0
  188. cyfaust/resources/architecture/faust/dsp/one-sample-dsp.h +477 -0
  189. cyfaust/resources/architecture/faust/dsp/poly-dsp.h +1079 -0
  190. cyfaust/resources/architecture/faust/dsp/poly-interpreter-dsp.h +143 -0
  191. cyfaust/resources/architecture/faust/dsp/poly-llvm-dsp.h +249 -0
  192. cyfaust/resources/architecture/faust/dsp/poly-wasm-dsp.h +257 -0
  193. cyfaust/resources/architecture/faust/dsp/proxy-dsp.h +108 -0
  194. cyfaust/resources/architecture/faust/dsp/proxy-osc-dsp.h +109 -0
  195. cyfaust/resources/architecture/faust/dsp/rnbo-dsp.h +187 -0
  196. cyfaust/resources/architecture/faust/dsp/sound-player.h +428 -0
  197. cyfaust/resources/architecture/faust/dsp/timed-dsp.h +279 -0
  198. cyfaust/resources/architecture/faust/dsp/wasm-dsp-imp.h +188 -0
  199. cyfaust/resources/architecture/faust/dsp/wasm-dsp.h +309 -0
  200. cyfaust/resources/architecture/faust/dsp/ysfx-dsp.h +188 -0
  201. cyfaust/resources/architecture/faust/export.h +61 -0
  202. cyfaust/resources/architecture/faust/gui/APIUI.h +726 -0
  203. cyfaust/resources/architecture/faust/gui/BelaOSCUI.h +170 -0
  204. cyfaust/resources/architecture/faust/gui/CGlue.h +667 -0
  205. cyfaust/resources/architecture/faust/gui/CInterface.h +142 -0
  206. cyfaust/resources/architecture/faust/gui/ControlSequenceUI.h +197 -0
  207. cyfaust/resources/architecture/faust/gui/ControlUI.h +137 -0
  208. cyfaust/resources/architecture/faust/gui/DaisyControlUI.h +283 -0
  209. cyfaust/resources/architecture/faust/gui/DaisyPatchInitControlUI.h +254 -0
  210. cyfaust/resources/architecture/faust/gui/DecoratorUI.h +115 -0
  211. cyfaust/resources/architecture/faust/gui/Esp32ControlUI.h +341 -0
  212. cyfaust/resources/architecture/faust/gui/Esp32Reader.h +102 -0
  213. cyfaust/resources/architecture/faust/gui/Esp32SensorUI.h +137 -0
  214. cyfaust/resources/architecture/faust/gui/FUI.h +147 -0
  215. cyfaust/resources/architecture/faust/gui/GTKUI.h +1414 -0
  216. cyfaust/resources/architecture/faust/gui/GUI.h +465 -0
  217. cyfaust/resources/architecture/faust/gui/JSONControl.h +48 -0
  218. cyfaust/resources/architecture/faust/gui/JSONUI.h +722 -0
  219. cyfaust/resources/architecture/faust/gui/JSONUIDecoder.h +589 -0
  220. cyfaust/resources/architecture/faust/gui/JuceGUI.h +2061 -0
  221. cyfaust/resources/architecture/faust/gui/JuceOSCUI.h +163 -0
  222. cyfaust/resources/architecture/faust/gui/JuceParameterUI.h +158 -0
  223. cyfaust/resources/architecture/faust/gui/JuceReader.h +103 -0
  224. cyfaust/resources/architecture/faust/gui/JuceStateUI.h +88 -0
  225. cyfaust/resources/architecture/faust/gui/LayoutUI.h +423 -0
  226. cyfaust/resources/architecture/faust/gui/LibsndfileReader.h +366 -0
  227. cyfaust/resources/architecture/faust/gui/MapUI.h +370 -0
  228. cyfaust/resources/architecture/faust/gui/MemoryReader.h +111 -0
  229. cyfaust/resources/architecture/faust/gui/MetaDataUI.h +357 -0
  230. cyfaust/resources/architecture/faust/gui/MidiUI.h +939 -0
  231. cyfaust/resources/architecture/faust/gui/OCVUI.h +688 -0
  232. cyfaust/resources/architecture/faust/gui/OSCUI.h +219 -0
  233. cyfaust/resources/architecture/faust/gui/PathBuilder.h +228 -0
  234. cyfaust/resources/architecture/faust/gui/PresetUI.h +337 -0
  235. cyfaust/resources/architecture/faust/gui/PrintCUI.h +152 -0
  236. cyfaust/resources/architecture/faust/gui/PrintUI.h +121 -0
  237. cyfaust/resources/architecture/faust/gui/QTUI.h +1891 -0
  238. cyfaust/resources/architecture/faust/gui/RosCI.h +493 -0
  239. cyfaust/resources/architecture/faust/gui/RosUI.h +488 -0
  240. cyfaust/resources/architecture/faust/gui/SaveUI.h +163 -0
  241. cyfaust/resources/architecture/faust/gui/SimpleParser.h +583 -0
  242. cyfaust/resources/architecture/faust/gui/SoundUI.h +217 -0
  243. cyfaust/resources/architecture/faust/gui/Soundfile.h +342 -0
  244. cyfaust/resources/architecture/faust/gui/Styles/Blue.qrc +5 -0
  245. cyfaust/resources/architecture/faust/gui/Styles/Blue.qss +177 -0
  246. cyfaust/resources/architecture/faust/gui/Styles/Default.qrc +5 -0
  247. cyfaust/resources/architecture/faust/gui/Styles/Default.qss +117 -0
  248. cyfaust/resources/architecture/faust/gui/Styles/Grey.qrc +5 -0
  249. cyfaust/resources/architecture/faust/gui/Styles/Grey.qss +174 -0
  250. cyfaust/resources/architecture/faust/gui/Styles/Salmon.qrc +5 -0
  251. cyfaust/resources/architecture/faust/gui/Styles/Salmon.qss +171 -0
  252. cyfaust/resources/architecture/faust/gui/UI.h +87 -0
  253. cyfaust/resources/architecture/faust/gui/ValueConverter.h +543 -0
  254. cyfaust/resources/architecture/faust/gui/WaveReader.h +364 -0
  255. cyfaust/resources/architecture/faust/gui/console.h +322 -0
  256. cyfaust/resources/architecture/faust/gui/httpdUI.h +372 -0
  257. cyfaust/resources/architecture/faust/gui/meta.h +39 -0
  258. cyfaust/resources/architecture/faust/gui/mspUI.h +580 -0
  259. cyfaust/resources/architecture/faust/gui/qrcodegen.h +269 -0
  260. cyfaust/resources/architecture/faust/gui/qrcodegen.impl.h +1025 -0
  261. cyfaust/resources/architecture/faust/gui/ring-buffer.h +414 -0
  262. cyfaust/resources/architecture/faust/midi/RtMidi.cpp +3054 -0
  263. cyfaust/resources/architecture/faust/midi/RtMidi.h +1034 -0
  264. cyfaust/resources/architecture/faust/midi/bela-midi.h +266 -0
  265. cyfaust/resources/architecture/faust/midi/daisy-midi.h +116 -0
  266. cyfaust/resources/architecture/faust/midi/esp32-midi.h +185 -0
  267. cyfaust/resources/architecture/faust/midi/gramophone-midi.h +107 -0
  268. cyfaust/resources/architecture/faust/midi/iplug2-midi.h +148 -0
  269. cyfaust/resources/architecture/faust/midi/jack-midi.h +247 -0
  270. cyfaust/resources/architecture/faust/midi/juce-midi.h +275 -0
  271. cyfaust/resources/architecture/faust/midi/midi.h +475 -0
  272. cyfaust/resources/architecture/faust/midi/rt-midi.h +315 -0
  273. cyfaust/resources/architecture/faust/midi/teensy-midi.h +89 -0
  274. cyfaust/resources/architecture/faust/misc.h +106 -0
  275. cyfaust/resources/architecture/faust/sound-file.h +132 -0
  276. cyfaust/resources/architecture/faust/unity/AudioPluginInterface.h +301 -0
  277. cyfaust/resources/architecture/faust/vst/faust.h +141 -0
  278. cyfaust/resources/architecture/faust/vst/voice.h +43 -0
  279. cyfaust/resources/architecture/faust/vst/vstui.h +524 -0
  280. cyfaust/resources/architecture/faustvst.cpp +3435 -0
  281. cyfaust/resources/architecture/faustvstqt.h +91 -0
  282. cyfaust/resources/architecture/gen-json.cpp +76 -0
  283. cyfaust/resources/architecture/jack-console.cpp +267 -0
  284. cyfaust/resources/architecture/jack-gtk-ros.cpp +139 -0
  285. cyfaust/resources/architecture/jack-gtk.cpp +282 -0
  286. cyfaust/resources/architecture/jack-internal.cpp +560 -0
  287. cyfaust/resources/architecture/jack-qt-chain-footer.cpp +87 -0
  288. cyfaust/resources/architecture/jack-qt-chain-header.cpp +92 -0
  289. cyfaust/resources/architecture/jack-qt.cpp +281 -0
  290. cyfaust/resources/architecture/jack.rs +171 -0
  291. cyfaust/resources/architecture/juce/README.md +84 -0
  292. cyfaust/resources/architecture/juce/juce-plugin.cpp +809 -0
  293. cyfaust/resources/architecture/juce/juce-standalone.cpp +413 -0
  294. cyfaust/resources/architecture/juce/plugin/plugin-llvm.jucer +184 -0
  295. cyfaust/resources/architecture/juce/plugin/plugin.jucer +159 -0
  296. cyfaust/resources/architecture/juce/standalone/standalone-llvm.jucer +216 -0
  297. cyfaust/resources/architecture/juce/standalone/standalone.jucer +191 -0
  298. cyfaust/resources/architecture/ladspa.cpp +543 -0
  299. cyfaust/resources/architecture/latexheader.tex +65 -0
  300. cyfaust/resources/architecture/lv2.cpp +2090 -0
  301. cyfaust/resources/architecture/lv2qtgui.h +62 -0
  302. cyfaust/resources/architecture/lv2ui.cpp +1966 -0
  303. cyfaust/resources/architecture/max-msp/README.md +109 -0
  304. cyfaust/resources/architecture/max-msp/faustgen-wrapper-poly.maxpat +184 -0
  305. cyfaust/resources/architecture/max-msp/faustgen-wrapper.maxpat +163 -0
  306. cyfaust/resources/architecture/max-msp/max-msp.cpp +734 -0
  307. cyfaust/resources/architecture/max-msp/max-msp64.cpp +789 -0
  308. cyfaust/resources/architecture/max-msp/py2max/README.md +277 -0
  309. cyfaust/resources/architecture/max-msp/py2max/py2max/__init__.py +3 -0
  310. cyfaust/resources/architecture/max-msp/py2max/py2max/common.py +7 -0
  311. cyfaust/resources/architecture/max-msp/py2max/py2max/core.py +1387 -0
  312. cyfaust/resources/architecture/max-msp/py2max/py2max/maxclassdb.py +318 -0
  313. cyfaust/resources/architecture/max-msp/py2max/py2max/utils.py +20 -0
  314. cyfaust/resources/architecture/max-msp/rnbo.py +1591 -0
  315. cyfaust/resources/architecture/max-msp/sndfile/sndfile.h +857 -0
  316. cyfaust/resources/architecture/max-msp/ui.js +230 -0
  317. cyfaust/resources/architecture/max-msp/wrapper-poly.maxpat +153 -0
  318. cyfaust/resources/architecture/max-msp/wrapper.maxpat +131 -0
  319. cyfaust/resources/architecture/minimal-bench.cpp +100 -0
  320. cyfaust/resources/architecture/minimal-effect.c +149 -0
  321. cyfaust/resources/architecture/minimal-effect.cpp +70 -0
  322. cyfaust/resources/architecture/minimal-fixed-point.cpp +195 -0
  323. cyfaust/resources/architecture/minimal-static.cpp +160 -0
  324. cyfaust/resources/architecture/minimal.c +103 -0
  325. cyfaust/resources/architecture/minimal.cpp +84 -0
  326. cyfaust/resources/architecture/minimal.rs +223 -0
  327. cyfaust/resources/architecture/module.cpp +91 -0
  328. cyfaust/resources/architecture/octave.cpp +471 -0
  329. cyfaust/resources/architecture/oscio-gtk.cpp +115 -0
  330. cyfaust/resources/architecture/oscio-qt.cpp +121 -0
  331. cyfaust/resources/architecture/owl.cpp +345 -0
  332. cyfaust/resources/architecture/pa-gtk.cpp +119 -0
  333. cyfaust/resources/architecture/pa-qt.cpp +261 -0
  334. cyfaust/resources/architecture/path-printer.cpp +100 -0
  335. cyfaust/resources/architecture/plot.cpp +128 -0
  336. cyfaust/resources/architecture/portaudio.rs +192 -0
  337. cyfaust/resources/architecture/puredata.cpp +636 -0
  338. cyfaust/resources/architecture/ra-qt.cpp +238 -0
  339. cyfaust/resources/architecture/sam/fast_pow2.h +69 -0
  340. cyfaust/resources/architecture/sam/fastexp.h +140 -0
  341. cyfaust/resources/architecture/sam/samFaustDSP.cpp +125 -0
  342. cyfaust/resources/architecture/sam/samFaustDSP.h +107 -0
  343. cyfaust/resources/architecture/scheduler.cpp +1391 -0
  344. cyfaust/resources/architecture/sndfile.cpp +291 -0
  345. cyfaust/resources/architecture/supercollider.cpp +611 -0
  346. cyfaust/resources/architecture/teensy/README.md +13 -0
  347. cyfaust/resources/architecture/teensy/teensy.cpp +214 -0
  348. cyfaust/resources/architecture/teensy/teensy.h +71 -0
  349. cyfaust/resources/architecture/thread.h +373 -0
  350. cyfaust/resources/architecture/vcvrack/README.md +78 -0
  351. cyfaust/resources/architecture/vcvrack/template/.gitignore +6 -0
  352. cyfaust/resources/architecture/vcvrack/template/Makefile +22 -0
  353. cyfaust/resources/architecture/vcvrack/template/res/FaustModule.svg +299 -0
  354. cyfaust/resources/architecture/vcvrack/template/src/FaustModule.cpp +942 -0
  355. cyfaust/resources/architecture/vst.cpp +947 -0
  356. cyfaust/resources/libraries/aanl.lib +900 -0
  357. cyfaust/resources/libraries/all.lib +36 -0
  358. cyfaust/resources/libraries/analyzers.lib +980 -0
  359. cyfaust/resources/libraries/basics.lib +2681 -0
  360. cyfaust/resources/libraries/compressors.lib +1341 -0
  361. cyfaust/resources/libraries/delays.lib +401 -0
  362. cyfaust/resources/libraries/demos.lib +1556 -0
  363. cyfaust/resources/libraries/dx7.lib +1036 -0
  364. cyfaust/resources/libraries/effect.lib +1645 -0
  365. cyfaust/resources/libraries/envelopes.lib +666 -0
  366. cyfaust/resources/libraries/examples/README.md +13 -0
  367. cyfaust/resources/libraries/examples/ambisonics/fourSourcesToOcto.dsp +20 -0
  368. cyfaust/resources/libraries/examples/ambisonics/oneSourceToStereo.dsp +12 -0
  369. cyfaust/resources/libraries/examples/analysis/FFT.dsp +26 -0
  370. cyfaust/resources/libraries/examples/analysis/dbmeter.dsp +19 -0
  371. cyfaust/resources/libraries/examples/analysis/spectralLevel.dsp +8 -0
  372. cyfaust/resources/libraries/examples/analysis/spectralTiltLab.dsp +20 -0
  373. cyfaust/resources/libraries/examples/analysis/vumeter.dsp +18 -0
  374. cyfaust/resources/libraries/examples/autodiff/delay/diff.dsp +2 -0
  375. cyfaust/resources/libraries/examples/autodiff/delay/gt.dsp +2 -0
  376. cyfaust/resources/libraries/examples/autodiff/gain/diff.dsp +7 -0
  377. cyfaust/resources/libraries/examples/autodiff/gain/gt.dsp +1 -0
  378. cyfaust/resources/libraries/examples/autodiff/gain_dc/diff.dsp +7 -0
  379. cyfaust/resources/libraries/examples/autodiff/gain_dc/gt.dsp +4 -0
  380. cyfaust/resources/libraries/examples/autodiff/gain_exp/diff.dsp +9 -0
  381. cyfaust/resources/libraries/examples/autodiff/gain_exp/gt.dsp +1 -0
  382. cyfaust/resources/libraries/examples/autodiff/gain_pow/diff.dsp +9 -0
  383. cyfaust/resources/libraries/examples/autodiff/gain_pow/gt.dsp +1 -0
  384. cyfaust/resources/libraries/examples/autodiff/gain_pow_trig/diff.dsp +12 -0
  385. cyfaust/resources/libraries/examples/autodiff/gain_pow_trig/gt.dsp +1 -0
  386. cyfaust/resources/libraries/examples/autodiff/gain_sq/diff.dsp +7 -0
  387. cyfaust/resources/libraries/examples/autodiff/gain_sq/gt.dsp +1 -0
  388. cyfaust/resources/libraries/examples/autodiff/mem/diff.dsp +1 -0
  389. cyfaust/resources/libraries/examples/autodiff/mem/gt.dsp +1 -0
  390. cyfaust/resources/libraries/examples/autodiff/noise.dsp +2 -0
  391. cyfaust/resources/libraries/examples/autodiff/noop.dsp +2 -0
  392. cyfaust/resources/libraries/examples/autodiff/one_zero/diff.dsp +2 -0
  393. cyfaust/resources/libraries/examples/autodiff/one_zero/gt.dsp +2 -0
  394. cyfaust/resources/libraries/examples/autodiff/ramp.dsp +1 -0
  395. cyfaust/resources/libraries/examples/autodiff/recursion/diff.dsp +2 -0
  396. cyfaust/resources/libraries/examples/autodiff/recursion/gt.dsp +1 -0
  397. cyfaust/resources/libraries/examples/autodiff/recursion/target.dsp +13 -0
  398. cyfaust/resources/libraries/examples/autodiff/tremolo/diff.dsp +14 -0
  399. cyfaust/resources/libraries/examples/autodiff/tremolo/diffable.lib +7 -0
  400. cyfaust/resources/libraries/examples/autodiff/tremolo/gt.dsp +11 -0
  401. cyfaust/resources/libraries/examples/delayEcho/echo.dsp +15 -0
  402. cyfaust/resources/libraries/examples/delayEcho/quadEcho.dsp +21 -0
  403. cyfaust/resources/libraries/examples/delayEcho/smoothDelay.dsp +26 -0
  404. cyfaust/resources/libraries/examples/delayEcho/stereoEcho.dsp +16 -0
  405. cyfaust/resources/libraries/examples/delayEcho/tapiir.dsp +44 -0
  406. cyfaust/resources/libraries/examples/dynamic/compressor.dsp +8 -0
  407. cyfaust/resources/libraries/examples/dynamic/distortion.dsp +8 -0
  408. cyfaust/resources/libraries/examples/dynamic/gateCompressor.dsp +10 -0
  409. cyfaust/resources/libraries/examples/dynamic/noiseGate.dsp +8 -0
  410. cyfaust/resources/libraries/examples/dynamic/volume.dsp +15 -0
  411. cyfaust/resources/libraries/examples/filtering/APF.dsp +13 -0
  412. cyfaust/resources/libraries/examples/filtering/BPF.dsp +13 -0
  413. cyfaust/resources/libraries/examples/filtering/DNN.dsp +25 -0
  414. cyfaust/resources/libraries/examples/filtering/HPF.dsp +13 -0
  415. cyfaust/resources/libraries/examples/filtering/LPF.dsp +13 -0
  416. cyfaust/resources/libraries/examples/filtering/bandFilter.dsp +44 -0
  417. cyfaust/resources/libraries/examples/filtering/cryBaby.dsp +4 -0
  418. cyfaust/resources/libraries/examples/filtering/diodeLadder.dsp +12 -0
  419. cyfaust/resources/libraries/examples/filtering/filterBank.dsp +6 -0
  420. cyfaust/resources/libraries/examples/filtering/graphicEqLab.dsp +10 -0
  421. cyfaust/resources/libraries/examples/filtering/highShelf.dsp +13 -0
  422. cyfaust/resources/libraries/examples/filtering/korg35HPF.dsp +13 -0
  423. cyfaust/resources/libraries/examples/filtering/korg35LPF.dsp +13 -0
  424. cyfaust/resources/libraries/examples/filtering/lfBoost.dsp +40 -0
  425. cyfaust/resources/libraries/examples/filtering/lowBoost.dsp +40 -0
  426. cyfaust/resources/libraries/examples/filtering/lowCut.dsp +40 -0
  427. cyfaust/resources/libraries/examples/filtering/lowShelf.dsp +13 -0
  428. cyfaust/resources/libraries/examples/filtering/moogHalfLadder.dsp +12 -0
  429. cyfaust/resources/libraries/examples/filtering/moogLadder.dsp +12 -0
  430. cyfaust/resources/libraries/examples/filtering/moogVCF.dsp +6 -0
  431. cyfaust/resources/libraries/examples/filtering/multibandFilter.dsp +14 -0
  432. cyfaust/resources/libraries/examples/filtering/notch.dsp +13 -0
  433. cyfaust/resources/libraries/examples/filtering/oberheim.dsp +14 -0
  434. cyfaust/resources/libraries/examples/filtering/oberheimBPF.dsp +13 -0
  435. cyfaust/resources/libraries/examples/filtering/oberheimBSF.dsp +13 -0
  436. cyfaust/resources/libraries/examples/filtering/oberheimHPF.dsp +13 -0
  437. cyfaust/resources/libraries/examples/filtering/oberheimLPF.dsp +13 -0
  438. cyfaust/resources/libraries/examples/filtering/parametricEqLab.dsp +10 -0
  439. cyfaust/resources/libraries/examples/filtering/parametricEqualizer.dsp +6 -0
  440. cyfaust/resources/libraries/examples/filtering/peakNotch.dsp +13 -0
  441. cyfaust/resources/libraries/examples/filtering/peakingEQ.dsp +13 -0
  442. cyfaust/resources/libraries/examples/filtering/sallenKey2ndOrder.dsp +14 -0
  443. cyfaust/resources/libraries/examples/filtering/sallenKey2ndOrderBPF.dsp +13 -0
  444. cyfaust/resources/libraries/examples/filtering/sallenKey2ndOrderHPF.dsp +13 -0
  445. cyfaust/resources/libraries/examples/filtering/sallenKey2ndOrderLPF.dsp +13 -0
  446. cyfaust/resources/libraries/examples/filtering/sallenKeyOnePole.dsp +13 -0
  447. cyfaust/resources/libraries/examples/filtering/sallenKeyOnePoleHPF.dsp +12 -0
  448. cyfaust/resources/libraries/examples/filtering/sallenKeyOnePoleLPF.dsp +12 -0
  449. cyfaust/resources/libraries/examples/filtering/spectralTilt.dsp +8 -0
  450. cyfaust/resources/libraries/examples/filtering/vcfWahLab.dsp +12 -0
  451. cyfaust/resources/libraries/examples/filtering/vocoder.dsp +8 -0
  452. cyfaust/resources/libraries/examples/filtering/wahPedal.dsp +6 -0
  453. cyfaust/resources/libraries/examples/gameaudio/bubble.dsp +42 -0
  454. cyfaust/resources/libraries/examples/gameaudio/door.dsp +58 -0
  455. cyfaust/resources/libraries/examples/gameaudio/fire.dsp +46 -0
  456. cyfaust/resources/libraries/examples/gameaudio/insects.dsp +148 -0
  457. cyfaust/resources/libraries/examples/gameaudio/rain.dsp +27 -0
  458. cyfaust/resources/libraries/examples/gameaudio/wind.dsp +23 -0
  459. cyfaust/resources/libraries/examples/generator/filterOsc.dsp +8 -0
  460. cyfaust/resources/libraries/examples/generator/noise.dsp +52 -0
  461. cyfaust/resources/libraries/examples/generator/noiseMetadata.dsp +74 -0
  462. cyfaust/resources/libraries/examples/generator/osc.dsp +17 -0
  463. cyfaust/resources/libraries/examples/generator/osci.dsp +17 -0
  464. cyfaust/resources/libraries/examples/generator/sawtoothLab.dsp +8 -0
  465. cyfaust/resources/libraries/examples/generator/virtualAnalog.dsp +8 -0
  466. cyfaust/resources/libraries/examples/generator/virtualAnalogLab.dsp +10 -0
  467. cyfaust/resources/libraries/examples/misc/UITester.dsp +71 -0
  468. cyfaust/resources/libraries/examples/misc/autopan.dsp +59 -0
  469. cyfaust/resources/libraries/examples/misc/capture.dsp +24 -0
  470. cyfaust/resources/libraries/examples/misc/drumkit.dsp +36 -0
  471. cyfaust/resources/libraries/examples/misc/guitarix.dsp +184 -0
  472. cyfaust/resources/libraries/examples/misc/matrix.dsp +17 -0
  473. cyfaust/resources/libraries/examples/misc/midiTester.dsp +122 -0
  474. cyfaust/resources/libraries/examples/misc/mixer.dsp +27 -0
  475. cyfaust/resources/libraries/examples/misc/statespace.dsp +39 -0
  476. cyfaust/resources/libraries/examples/misc/switcher.dsp +20 -0
  477. cyfaust/resources/libraries/examples/misc/tester.dsp +32 -0
  478. cyfaust/resources/libraries/examples/misc/tester2.dsp +31 -0
  479. cyfaust/resources/libraries/examples/old/README.md +5 -0
  480. cyfaust/resources/libraries/examples/old/freeverb.dsp +109 -0
  481. cyfaust/resources/libraries/examples/old/rewriting/Makefile +21 -0
  482. cyfaust/resources/libraries/examples/old/rewriting/fact.dsp +3 -0
  483. cyfaust/resources/libraries/examples/old/rewriting/fold.dsp +61 -0
  484. cyfaust/resources/libraries/examples/old/rewriting/mesh.dsp +43 -0
  485. cyfaust/resources/libraries/examples/old/rewriting/mesh.pd +37 -0
  486. cyfaust/resources/libraries/examples/old/rewriting/sample.pd +12 -0
  487. cyfaust/resources/libraries/examples/old/rewriting/serial.dsp +7 -0
  488. cyfaust/resources/libraries/examples/old/rewriting/sum.dsp +55 -0
  489. cyfaust/resources/libraries/examples/old/rewriting/test.pd +48 -0
  490. cyfaust/resources/libraries/examples/phasing/flanger.dsp +8 -0
  491. cyfaust/resources/libraries/examples/phasing/phaser.dsp +8 -0
  492. cyfaust/resources/libraries/examples/phasing/phaserFlangerLab.dsp +12 -0
  493. cyfaust/resources/libraries/examples/physicalModeling/brass.dsp +8 -0
  494. cyfaust/resources/libraries/examples/physicalModeling/brassMIDI.dsp +8 -0
  495. cyfaust/resources/libraries/examples/physicalModeling/churchBell.dsp +8 -0
  496. cyfaust/resources/libraries/examples/physicalModeling/clarinet.dsp +8 -0
  497. cyfaust/resources/libraries/examples/physicalModeling/clarinetMIDI.dsp +8 -0
  498. cyfaust/resources/libraries/examples/physicalModeling/djembeMIDI.dsp +8 -0
  499. cyfaust/resources/libraries/examples/physicalModeling/elecGuitarMIDI.dsp +10 -0
  500. cyfaust/resources/libraries/examples/physicalModeling/englishBell.dsp +8 -0
  501. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/NLFeks.dsp +91 -0
  502. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/NLFfm.dsp +70 -0
  503. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/README +125 -0
  504. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/bass.dsp +84 -0
  505. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/bass.h +91 -0
  506. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/blowBottle.dsp +102 -0
  507. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/bowed.dsp +114 -0
  508. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/brass.dsp +103 -0
  509. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/clarinet.dsp +110 -0
  510. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/flute.dsp +116 -0
  511. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/fluteStk.dsp +121 -0
  512. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/glassHarmonica.dsp +131 -0
  513. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/harpsi.dsp +90 -0
  514. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/harpsichord.h +185 -0
  515. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/instrument.h +114 -0
  516. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/modalBar.dsp +122 -0
  517. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/modalBar.h +48 -0
  518. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/audio-out.pd +33 -0
  519. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/bottle.pd +10 -0
  520. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/clarinets.pd +15 -0
  521. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/canon/audio-out.pd +33 -0
  522. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/canon/bass.pd +162 -0
  523. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/canon/canon.pd +55 -0
  524. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/canon/flute.pd +343 -0
  525. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/canon/pachelbel.mid +0 -0
  526. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/daisy/audio-out.pd +33 -0
  527. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/daisy/daisy.mid +0 -0
  528. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/daisy/daisy.pd +45 -0
  529. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/daisy/piano.pd +205 -0
  530. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/daisy/voiceForm.pd +340 -0
  531. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/take5/audio-out.pd +33 -0
  532. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/take5/blowHole.pd +330 -0
  533. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/take5/piano.pd +205 -0
  534. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/take5/take5.mid +0 -0
  535. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/take5/take5.pd +45 -0
  536. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/turkish-march/audio-out.pd +33 -0
  537. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/turkish-march/harpsi.pd +204 -0
  538. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/turkish-march/turkish-march.mid +0 -0
  539. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/turkish-march/turkish-march.pd +31 -0
  540. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/what-a-friend/audio-out.pd +33 -0
  541. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/what-a-friend/bass.pd +162 -0
  542. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/what-a-friend/modalBar.pd +258 -0
  543. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/what-a-friend/piano.pd +205 -0
  544. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/what-a-friend/what-a-friend.pd +52 -0
  545. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fancy/what-a-friend/what_a_friend.mid +0 -0
  546. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/flutes.pd +15 -0
  547. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/fm.pd +10 -0
  548. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/glassBare.pd +10 -0
  549. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/harpsichord-poly.pd +10 -0
  550. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/ironBare.pd +10 -0
  551. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/midi-in.pd +111 -0
  552. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/modal.pd +10 -0
  553. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/osc.pd +26 -0
  554. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/piano-poly.pd +10 -0
  555. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/plucked.pd +20 -0
  556. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/saxophone.pd +10 -0
  557. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/tibetan.pd +10 -0
  558. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/trumpet.pd +10 -0
  559. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/violin.pd +10 -0
  560. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/voiceSynth.pd +10 -0
  561. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/pd-patches/woodenBare.pd +10 -0
  562. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/phonemes.h +189 -0
  563. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/piano.dsp +255 -0
  564. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/piano.h +751 -0
  565. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/saxophony.dsp +114 -0
  566. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/sitar.dsp +48 -0
  567. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/tibetanBowl.dsp +155 -0
  568. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/tunedBar.dsp +123 -0
  569. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/uniBar.dsp +100 -0
  570. cyfaust/resources/libraries/examples/physicalModeling/faust-stk/voiceForm.dsp +125 -0
  571. cyfaust/resources/libraries/examples/physicalModeling/fds/1dDampedWaveEquation.dsp +43 -0
  572. cyfaust/resources/libraries/examples/physicalModeling/fds/2dKirchhoffThinPlate.dsp +75 -0
  573. cyfaust/resources/libraries/examples/physicalModeling/fds/BowedString.dsp +61 -0
  574. cyfaust/resources/libraries/examples/physicalModeling/fds/ControllableNonPhysicalString.dsp +72 -0
  575. cyfaust/resources/libraries/examples/physicalModeling/fds/HammeredString.dsp +74 -0
  576. cyfaust/resources/libraries/examples/physicalModeling/fds/PianoHammeredString.dsp +85 -0
  577. cyfaust/resources/libraries/examples/physicalModeling/fds/StiffString.dsp +54 -0
  578. cyfaust/resources/libraries/examples/physicalModeling/flute.dsp +8 -0
  579. cyfaust/resources/libraries/examples/physicalModeling/fluteMIDI.dsp +8 -0
  580. cyfaust/resources/libraries/examples/physicalModeling/frenchBell.dsp +8 -0
  581. cyfaust/resources/libraries/examples/physicalModeling/germanBell.dsp +8 -0
  582. cyfaust/resources/libraries/examples/physicalModeling/guitarMIDI.dsp +8 -0
  583. cyfaust/resources/libraries/examples/physicalModeling/karplus.dsp +8 -0
  584. cyfaust/resources/libraries/examples/physicalModeling/marimbaMIDI.dsp +10 -0
  585. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/00_BasicOscillator/harmonicOscillator.dsp +58 -0
  586. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/00_BasicOscillator/harmonicOscillator2.dsp +62 -0
  587. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/00_BasicOscillator/harmonicOscillator3.dsp +65 -0
  588. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/01_ParamControl/paramOsc.dsp +63 -0
  589. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/02_AudioParamControl/audioParamOsc.dsp +63 -0
  590. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/03_HammerTime/hammerOsc.dsp +71 -0
  591. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/04_Gravity/bouncingOsc.dsp +64 -0
  592. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/05_PluckedOscillator/pluckedOsc.dsp +57 -0
  593. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/06_BowedOscillator/bowedOsc.dsp +65 -0
  594. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/07_NonLinearOscillator/nlOsc.dsp +78 -0
  595. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/08_TwoMassChain/2massChain.dsp +75 -0
  596. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/09_TinyString/tinyString.dsp +101 -0
  597. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/10_PluckedString/pluckedString.dsp +678 -0
  598. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/11_BowedString/bowedString.dsp +671 -0
  599. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/12_TriangleMesh/triangleMesh.dsp +448 -0
  600. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/13_Construction/construction.dsp +1036 -0
  601. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/14_Polyphonic/polyTriangle.dsp +79 -0
  602. cyfaust/resources/libraries/examples/physicalModeling/mi-faust/15_PhysicalLFO/physicalLFO.dsp +107 -0
  603. cyfaust/resources/libraries/examples/physicalModeling/modularInterpInstrMIDI.dsp +8 -0
  604. cyfaust/resources/libraries/examples/physicalModeling/nylonGuitarMIDI.dsp +8 -0
  605. cyfaust/resources/libraries/examples/physicalModeling/old/harpe.dsp +45 -0
  606. cyfaust/resources/libraries/examples/physicalModeling/old/karplus.dsp +34 -0
  607. cyfaust/resources/libraries/examples/physicalModeling/old/karplus32.dsp +47 -0
  608. cyfaust/resources/libraries/examples/physicalModeling/russianBell.dsp +8 -0
  609. cyfaust/resources/libraries/examples/physicalModeling/standardBell.dsp +8 -0
  610. cyfaust/resources/libraries/examples/physicalModeling/violin.dsp +8 -0
  611. cyfaust/resources/libraries/examples/physicalModeling/violinMIDI.dsp +8 -0
  612. cyfaust/resources/libraries/examples/physicalModeling/vocalBP.dsp +8 -0
  613. cyfaust/resources/libraries/examples/physicalModeling/vocalBPMIDI.dsp +8 -0
  614. cyfaust/resources/libraries/examples/physicalModeling/vocalFOF.dsp +8 -0
  615. cyfaust/resources/libraries/examples/physicalModeling/vocalFOFMIDI.dsp +8 -0
  616. cyfaust/resources/libraries/examples/pitchShifting/pitchShifter.dsp +20 -0
  617. cyfaust/resources/libraries/examples/psychoacoustic/harmonicExciter.dsp +10 -0
  618. cyfaust/resources/libraries/examples/quantizing/quantizedChords.dsp +49 -0
  619. cyfaust/resources/libraries/examples/reverb/dattorro.dsp +8 -0
  620. cyfaust/resources/libraries/examples/reverb/fdnRev.dsp +8 -0
  621. cyfaust/resources/libraries/examples/reverb/freeverb.dsp +8 -0
  622. cyfaust/resources/libraries/examples/reverb/greyhole.dsp +8 -0
  623. cyfaust/resources/libraries/examples/reverb/jprev.dsp +8 -0
  624. cyfaust/resources/libraries/examples/reverb/reverbDesigner.dsp +12 -0
  625. cyfaust/resources/libraries/examples/reverb/reverbTester.dsp +8 -0
  626. cyfaust/resources/libraries/examples/reverb/zitaRev.dsp +8 -0
  627. cyfaust/resources/libraries/examples/reverb/zitaRevFDN.dsp +8 -0
  628. cyfaust/resources/libraries/examples/smartKeyboard/acGuitar.dsp +100 -0
  629. cyfaust/resources/libraries/examples/smartKeyboard/associatedEffects/elecGuitarEffect.dsp +8 -0
  630. cyfaust/resources/libraries/examples/smartKeyboard/associatedEffects/myEffect.dsp +5 -0
  631. cyfaust/resources/libraries/examples/smartKeyboard/associatedEffects/reverb.dsp +5 -0
  632. cyfaust/resources/libraries/examples/smartKeyboard/bells.dsp +80 -0
  633. cyfaust/resources/libraries/examples/smartKeyboard/bowed.dsp +87 -0
  634. cyfaust/resources/libraries/examples/smartKeyboard/brass.dsp +82 -0
  635. cyfaust/resources/libraries/examples/smartKeyboard/clarinet.dsp +113 -0
  636. cyfaust/resources/libraries/examples/smartKeyboard/crazyGuiro.dsp +96 -0
  637. cyfaust/resources/libraries/examples/smartKeyboard/drums.dsp +74 -0
  638. cyfaust/resources/libraries/examples/smartKeyboard/dubDub.dsp +87 -0
  639. cyfaust/resources/libraries/examples/smartKeyboard/elecGuitar.dsp +67 -0
  640. cyfaust/resources/libraries/examples/smartKeyboard/fm.dsp +78 -0
  641. cyfaust/resources/libraries/examples/smartKeyboard/frog.dsp +74 -0
  642. cyfaust/resources/libraries/examples/smartKeyboard/harp.dsp +84 -0
  643. cyfaust/resources/libraries/examples/smartKeyboard/midiOnly.dsp +62 -0
  644. cyfaust/resources/libraries/examples/smartKeyboard/multiSynth.dsp +75 -0
  645. cyfaust/resources/libraries/examples/smartKeyboard/toy.dsp +71 -0
  646. cyfaust/resources/libraries/examples/smartKeyboard/trumpet.dsp +59 -0
  647. cyfaust/resources/libraries/examples/smartKeyboard/turenas.dsp +114 -0
  648. cyfaust/resources/libraries/examples/smartKeyboard/violin.dsp +91 -0
  649. cyfaust/resources/libraries/examples/smartKeyboard/violin2.dsp +84 -0
  650. cyfaust/resources/libraries/examples/smartKeyboard/vocal.dsp +43 -0
  651. cyfaust/resources/libraries/examples/spat/panpot.dsp +17 -0
  652. cyfaust/resources/libraries/examples/spat/spat.dsp +25 -0
  653. cyfaust/resources/libraries/fds.lib +535 -0
  654. cyfaust/resources/libraries/filter.lib +1710 -0
  655. cyfaust/resources/libraries/filters.lib +3125 -0
  656. cyfaust/resources/libraries/hoa.lib +1081 -0
  657. cyfaust/resources/libraries/instruments.lib +263 -0
  658. cyfaust/resources/libraries/interpolators.lib +675 -0
  659. cyfaust/resources/libraries/math.lib +602 -0
  660. cyfaust/resources/libraries/maths.lib +798 -0
  661. cyfaust/resources/libraries/maxmsp.lib +237 -0
  662. cyfaust/resources/libraries/mi.lib +528 -0
  663. cyfaust/resources/libraries/misceffects.lib +998 -0
  664. cyfaust/resources/libraries/music.lib +496 -0
  665. cyfaust/resources/libraries/noises.lib +487 -0
  666. cyfaust/resources/libraries/oscillator.lib +450 -0
  667. cyfaust/resources/libraries/oscillators.lib +1838 -0
  668. cyfaust/resources/libraries/phaflangers.lib +235 -0
  669. cyfaust/resources/libraries/physmodels.lib +3990 -0
  670. cyfaust/resources/libraries/platform.lib +59 -0
  671. cyfaust/resources/libraries/quantizers.lib +310 -0
  672. cyfaust/resources/libraries/reducemaps.lib +235 -0
  673. cyfaust/resources/libraries/reverbs.lib +686 -0
  674. cyfaust/resources/libraries/routes.lib +262 -0
  675. cyfaust/resources/libraries/sf.lib +53 -0
  676. cyfaust/resources/libraries/signals.lib +570 -0
  677. cyfaust/resources/libraries/soundfiles.lib +234 -0
  678. cyfaust/resources/libraries/spats.lib +173 -0
  679. cyfaust/resources/libraries/stdfaust.lib +38 -0
  680. cyfaust/resources/libraries/synths.lib +322 -0
  681. cyfaust/resources/libraries/tonestacks.lib +427 -0
  682. cyfaust/resources/libraries/tubes.lib +5039 -0
  683. cyfaust/resources/libraries/vaeffects.lib +984 -0
  684. cyfaust/resources/libraries/version.lib +22 -0
  685. cyfaust/resources/libraries/wdmodels.lib +2276 -0
  686. cyfaust/resources/libraries/webaudio.lib +402 -0
  687. cyfaust/signal.pxd +44 -0
  688. cyfaust/signal.pyx +1993 -0
  689. cyfaust-0.1.0.dist-info/METADATA +355 -0
  690. cyfaust-0.1.0.dist-info/RECORD +693 -0
  691. cyfaust-0.1.0.dist-info/WHEEL +5 -0
  692. cyfaust-0.1.0.dist-info/entry_points.txt +3 -0
  693. cyfaust-0.1.0.dist-info/licenses/LICENSE +26 -0
@@ -0,0 +1,1341 @@
1
+ //#################################### compressors.lib ###################################
2
+ // A library of compressor effects. Its official prefix is `co`.
3
+ //
4
+ // #### References
5
+ // * <https://github.com/grame-cncm/faustlibraries/blob/master/compressors.lib>
6
+ //########################################################################################
7
+
8
+ /************************************************************************
9
+ ************************************************************************
10
+ FAUST library file
11
+ Copyright (C) 2003-2016 GRAME, Centre National de Creation Musicale
12
+ ----------------------------------------------------------------------
13
+ This program is free software; you can redistribute it and/or modify
14
+ it under the terms of the GNU Lesser General Public License as
15
+ published by the Free Software Foundation; either version 2.1 of the
16
+ License, or (at your option) any later version.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ GNU Lesser General Public License for more details.
22
+
23
+ You should have received a copy of the GNU Lesser General Public
24
+ License along with the GNU C Library; if not, write to the Free
25
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26
+ 02111-1307 USA.
27
+
28
+ EXCEPTION TO THE LGPL LICENSE : As a special exception, you may create a
29
+ larger FAUST program which directly or indirectly imports this library
30
+ file and still distribute the compiled code generated by the FAUST
31
+ compiler, or a modified version of this compiled code, under your own
32
+ copyright and license. This EXCEPTION TO THE LGPL LICENSE explicitly
33
+ grants you the right to freely choose the license for the resulting
34
+ compiled code. In particular the resulting compiled code has no obligation
35
+ to be LGPL or GPL. For example you are free to choose a commercial or
36
+ closed source license or any other license if you decide so.
37
+ ************************************************************************
38
+ ************************************************************************/
39
+
40
+ ba = library("basics.lib");
41
+ si = library("signals.lib");
42
+ an = library("analyzers.lib");
43
+ ro = library("routes.lib");
44
+ ma = library("maths.lib");
45
+ it = library("interpolators.lib");
46
+
47
+ declare name "Faust Compressor Effect Library";
48
+ declare version "1.5.0";
49
+
50
+ //=============================Functions Reference========================================
51
+ //========================================================================================
52
+
53
+ //--------------------`(co.)peak_compression_gain_mono_db`-------------------
54
+ // Mono dynamic range compressor gain computer with dB output.
55
+ // `peak_compression_gain_mono_db` is a standard Faust function.
56
+ //
57
+ // #### Usage
58
+ //
59
+ // ```
60
+ // _ : peak_compression_gain_mono_db(strength,thresh,att,rel,knee,prePost) : _
61
+ // ```
62
+ //
63
+ // Where:
64
+ //
65
+ // * `strength`: strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression)
66
+ // * `thresh`: dB level threshold above which compression kicks in
67
+ // * `att`: attack time = time constant (sec) when level & compression going up
68
+ // * `rel`: release time = time constant (sec) coming out of compression
69
+ // * `knee`: a gradual increase in gain reduction around the threshold:
70
+ // below thresh-(knee/2) there is no gain reduction,
71
+ // above thresh+(knee/2) there is the same gain reduction as without a knee,
72
+ // and in between there is a gradual increase in gain reduction
73
+ // * `prePost`: places the level detector either at the input or after the gain computer;
74
+ // this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector
75
+ //
76
+ // It uses a strength parameter instead of the traditional ratio, in order to be able to
77
+ // function as a hard limiter.
78
+ // For that you'd need a ratio of infinity:1, and you cannot express that in Faust.
79
+ //
80
+ // Sometimes even bigger ratios are useful:
81
+ // for example a group recording where one instrument is recorded with both a close microphone and a room microphone,
82
+ // and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.
83
+ //
84
+ // #### References
85
+ //
86
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
87
+ // * Digital Dynamic Range Compressor Design,
88
+ // A Tutorial and Analysis,
89
+ // Dimitrios GIANNOULIS (<Dimitrios.Giannoulis@eecs.qmul.ac.uk>),
90
+ // Michael MASSBERG (<michael@massberg.org>),
91
+ // and Josuah D.REISS (<josh.reiss@eecs.qmul.ac.uk>)
92
+ //------------------------------------------------------------
93
+
94
+ declare peak_compression_gain_mono_db author "Bart Brouns";
95
+ declare peak_compression_gain_mono_db license "GPLv3";
96
+
97
+ peak_compression_gain_mono_db(strength,thresh,att,rel,knee,prePost) =
98
+ abs : ba.bypass1(prePost,si.onePoleSwitching(att,rel)) : ba.linear2db : gain_computer(strength,thresh,knee) : ba.bypass1((prePost !=1),si.onePoleSwitching(rel,att))
99
+ with {
100
+ gain_computer(strength,thresh,knee,level) =
101
+ select3((level>(thresh-(knee/2)))+(level>(thresh+(knee/2))),
102
+ 0,
103
+ ((level-thresh+(knee/2)) : pow(2)/(2*max(ma.EPSILON,knee))),
104
+ (level-thresh))
105
+ : max(0)*-strength;
106
+ };
107
+
108
+
109
+ //--------------------`(co.)peak_compression_gain_N_chan_db`-------------------
110
+ // N channels dynamic range compressor gain computer with dB output.
111
+ // `peak_compression_gain_N_chan_db` is a standard Faust function.
112
+ //
113
+ // #### Usage
114
+ //
115
+ // ```
116
+ // si.bus(N) : peak_compression_gain_N_chan_db(strength,thresh,att,rel,knee,prePost,link,N) : si.bus(N)
117
+ // ```
118
+ //
119
+ // Where:
120
+ //
121
+ // * `strength`: strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression)
122
+ // * `thresh`: dB level threshold above which compression kicks in
123
+ // * `att`: attack time = time constant (sec) when level & compression going up
124
+ // * `rel`: release time = time constant (sec) coming out of compression
125
+ // * `knee`: a gradual increase in gain reduction around the threshold:
126
+ // below thresh-(knee/2) there is no gain reduction,
127
+ // above thresh+(knee/2) there is the same gain reduction as without a knee,
128
+ // and in between there is a gradual increase in gain reduction
129
+ // * `prePost`: places the level detector either at the input or after the gain computer;
130
+ // this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector
131
+ // * `link`: the amount of linkage between the channels: 0 = each channel is independent, 1 = all channels have the same amount of gain reduction
132
+ // * `N`: the number of channels of the compressor, known at compile time
133
+ //
134
+ // It uses a strength parameter instead of the traditional ratio, in order to be able to
135
+ // function as a hard limiter.
136
+ // For that you'd need a ratio of infinity:1, and you cannot express that in Faust.
137
+ //
138
+ // Sometimes even bigger ratios are useful:
139
+ // for example a group recording where one instrument is recorded with both a close microphone and a room microphone,
140
+ // and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.
141
+ //
142
+ // #### References
143
+ //
144
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
145
+ // * Digital Dynamic Range Compressor Design,
146
+ // A Tutorial and Analysis,
147
+ // Dimitrios GIANNOULIS (<Dimitrios.Giannoulis@eecs.qmul.ac.uk>),
148
+ // Michael MASSBERG (<michael@massberg.org>),
149
+ // and Josuah D.REISS (<josh.reiss@eecs.qmul.ac.uk>)
150
+ //------------------------------------------------------------
151
+
152
+ declare peak_compression_gain_N_chan_db author "Bart Brouns";
153
+ declare peak_compression_gain_N_chan_db license "GPLv3";
154
+
155
+ // generalise compression gains for N channels.
156
+ // first we define a mono version:
157
+ peak_compression_gain_N_chan_db(strength,thresh,att,rel,knee,prePost,link,1) =
158
+ peak_compression_gain_mono_db(strength,thresh,att,rel,knee,prePost);
159
+
160
+ // The actual N-channels version:
161
+ // Calculate the maximum gain reduction of N channels,
162
+ // and then crossfade between that and each channel's own gain reduction,
163
+ // to link/unlink channels
164
+ peak_compression_gain_N_chan_db(strength,thresh,att,rel,knee,prePost,link,N) =
165
+ par(i, N, peak_compression_gain_mono_db(strength,thresh,att,rel,knee,prePost))
166
+ <: (si.bus(N),(ba.parallelMin(N) <: si.bus(N))) : ro.interleave(N,2) : par(i,N,(it.interpolate_linear(link)));
167
+
168
+
169
+ //--------------------`(co.)FFcompressor_N_chan`-------------------
170
+ // Feed forward N channels dynamic range compressor.
171
+ // `FFcompressor_N_chan` is a standard Faust function.
172
+ //
173
+ // #### Usage
174
+ //
175
+ // ```
176
+ // si.bus(N) : FFcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,meter,N) : si.bus(N)
177
+ // ```
178
+ //
179
+ // Where:
180
+ //
181
+ // * `strength`: strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression)
182
+ // * `thresh`: dB level threshold above which compression kicks in
183
+ // * `att`: attack time = time constant (sec) when level & compression going up
184
+ // * `rel`: release time = time constant (sec) coming out of compression
185
+ // * `knee`: a gradual increase in gain reduction around the threshold:
186
+ // below thresh-(knee/2) there is no gain reduction,
187
+ // above thresh+(knee/2) there is the same gain reduction as without a knee,
188
+ // and in between there is a gradual increase in gain reduction
189
+ // * `prePost`: places the level detector either at the input or after the gain computer;
190
+ // this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector
191
+ // * `link`: the amount of linkage between the channels: 0 = each channel is independent, 1 = all channels have the same amount of gain reduction
192
+ // * `meter`: a gain reduction meter. It can be implemented like so:
193
+ // `meter = _<:(_, (ba.linear2db:max(maxGR):meter_group((hbargraph("[1][unit:dB][tooltip: gain reduction in dB]", maxGR, 0))))):attach;`
194
+ // * `N`: the number of channels of the compressor, known at compile time
195
+ //
196
+ // It uses a strength parameter instead of the traditional ratio, in order to be able to
197
+ // function as a hard limiter.
198
+ // For that you'd need a ratio of infinity:1, and you cannot express that in Faust.
199
+ //
200
+ // Sometimes even bigger ratios are useful:
201
+ // for example a group recording where one instrument is recorded with both a close microphone and a room microphone,
202
+ // and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.
203
+ //
204
+ // #### References
205
+ //
206
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
207
+ // * Digital Dynamic Range Compressor Design,
208
+ // A Tutorial and Analysis,
209
+ // Dimitrios GIANNOULIS (<Dimitrios.Giannoulis@eecs.qmul.ac.uk>),
210
+ // Michael MASSBERG (<michael@massberg.org>),
211
+ // and Josuah D.REISS (<josh.reiss@eecs.qmul.ac.uk>)
212
+ //------------------------------------------------------------
213
+
214
+ declare FFcompressor_N_chan author "Bart Brouns";
215
+ declare FFcompressor_N_chan license "GPLv3";
216
+
217
+ // feed forward compressor
218
+ FFcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,meter,N) =
219
+ si.bus(N) <: (peak_compression_gain_N_chan_db(strength,thresh,att,rel,knee,prePost,link,N),si.bus(N)) : ro.interleave(N,2) : par(i,N,(meter: ba.db2linear)*_);
220
+
221
+
222
+ //--------------------`(co.)FBcompressor_N_chan`-------------------
223
+ // Feed back N channels dynamic range compressor.
224
+ // `FBcompressor_N_chan` is a standard Faust function.
225
+ //
226
+ // #### Usage
227
+ //
228
+ // ```
229
+ // si.bus(N) : FBcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,meter,N) : si.bus(N)
230
+ // ```
231
+ //
232
+ // Where:
233
+ //
234
+ // * `strength`: strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression)
235
+ // * `thresh`: dB level threshold above which compression kicks in
236
+ // * `att`: attack time = time constant (sec) when level & compression going up
237
+ // * `rel`: release time = time constant (sec) coming out of compression
238
+ // * `knee`: a gradual increase in gain reduction around the threshold:
239
+ // below thresh-(knee/2) there is no gain reduction,
240
+ // above thresh+(knee/2) there is the same gain reduction as without a knee,
241
+ // and in between there is a gradual increase in gain reduction
242
+ // * `prePost`: places the level detector either at the input or after the gain computer;
243
+ // this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector
244
+ // * `link`: the amount of linkage between the channels. 0 = each channel is independent, 1 = all channels have the same amount of gain reduction
245
+ // * `meter`: a gain reduction meter. It can be implemented with:
246
+ // `meter = _ <: (_,(ba.linear2db:max(maxGR):meter_group((hbargraph("[1][unit:dB][tooltip: gain reduction in dB]", maxGR, 0))))):attach;`
247
+ // or it can be omitted by defining `meter = _;`.
248
+ // * `N`: the number of channels of the compressor, known at compile time
249
+ //
250
+ // It uses a strength parameter instead of the traditional ratio, in order to be able to
251
+ // function as a hard limiter.
252
+ // For that you'd need a ratio of infinity:1, and you cannot express that in Faust.
253
+ //
254
+ // Sometimes even bigger ratios are useful:
255
+ // for example a group recording where one instrument is recorded with both a close microphone and a room microphone,
256
+ // and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.
257
+ //
258
+ // #### References
259
+ //
260
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
261
+ // * Digital Dynamic Range Compressor Design,
262
+ // A Tutorial and Analysis,
263
+ // Dimitrios GIANNOULIS (<Dimitrios.Giannoulis@eecs.qmul.ac.uk>),
264
+ // Michael MASSBERG (<michael@massberg.org>),
265
+ // and Josuah D.REISS (<josh.reiss@eecs.qmul.ac.uk>)
266
+ //------------------------------------------------------------
267
+
268
+ declare FBcompressor_N_chan author "Bart Brouns";
269
+ declare FBcompressor_N_chan license "GPLv3";
270
+
271
+ FBcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,meter,N) =
272
+ (peak_compression_gain_N_chan_db(strength,thresh,att,rel,knee,prePost,link,N),si.bus(N) : (ro.interleave(N,2) : par(i,N,(meter : ba.db2linear)*_))) ~ si.bus(N);
273
+
274
+
275
+ //--------------------`(co.)FBFFcompressor_N_chan`-------------------
276
+ // Feed forward / feed back N channels dynamic range compressor.
277
+ // The feedback part has a much higher strength, so they end up sounding similar.
278
+ // `FBFFcompressor_N_chan` is a standard Faust function.
279
+ //
280
+ // #### Usage
281
+ //
282
+ // ```
283
+ // si.bus(N) : FBFFcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,FBFF,meter,N) : si.bus(N)
284
+ // ```
285
+ //
286
+ // Where:
287
+ //
288
+ // * `strength`: strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression)
289
+ // * `thresh`: dB level threshold above which compression kicks in
290
+ // * `att`: attack time = time constant (sec) when level & compression going up
291
+ // * `rel`: release time = time constant (sec) coming out of compression
292
+ // * `knee`: a gradual increase in gain reduction around the threshold:
293
+ // below thresh-(knee/2) there is no gain reduction,
294
+ // above thresh+(knee/2) there is the same gain reduction as without a knee,
295
+ // and in between there is a gradual increase in gain reduction
296
+ // * `prePost`: places the level detector either at the input or after the gain computer;
297
+ // this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector
298
+ // * `link`: the amount of linkage between the channels: 0 = each channel is independent, 1 = all channels have the same amount of gain reduction
299
+ // * `FBFF`: fade between feed forward (0) and feed back (1) compression
300
+ // * `meter`: a gain reduction meter. It can be implemented like so:
301
+ // `meter = _<:(_,(max(maxGR):meter_group((hbargraph("[1][unit:dB][tooltip: gain reduction in dB]", maxGR, 0))))):attach;`
302
+ // * `N`: the number of channels of the compressor, known at compile time
303
+ //
304
+ // It uses a strength parameter instead of the traditional ratio, in order to be able to
305
+ // function as a hard limiter.
306
+ // For that you'd need a ratio of infinity:1, and you cannot express that in Faust.
307
+ //
308
+ // Sometimes even bigger ratios are useful:
309
+ // for example a group recording where one instrument is recorded with both a close microphone and a room microphone,
310
+ // and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.
311
+ //
312
+ // #### References
313
+ //
314
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
315
+ // * Digital Dynamic Range Compressor Design,
316
+ // A Tutorial and Analysis,
317
+ // Dimitrios GIANNOULIS (<Dimitrios.Giannoulis@eecs.qmul.ac.uk>),
318
+ // Michael MASSBERG (<michael@massberg.org>),
319
+ // and Josuah D.REISS (<josh.reiss@eecs.qmul.ac.uk>)
320
+ //------------------------------------------------------------
321
+
322
+ declare FBFFcompressor_N_chan author "Bart Brouns";
323
+ declare FBFFcompressor_N_chan license "GPLv3";
324
+
325
+ FBFFcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,FBFF,meter,N) =
326
+ si.bus(N) <: si.bus(N*2) :
327
+ (
328
+ ((par(i,2,peak_compression_gain_N_chan_db(strength*(1+((i==0)*2)),thresh,att,rel,knee,prePost,link,N)) : ro.interleave(N,2) : par(i,N,it.interpolate_linear(FBFF))),si.bus(N))
329
+ : (ro.interleave(N,2) : par(i,N,(meter : ba.db2linear)*_))
330
+ )
331
+ ~ si.bus(N);
332
+
333
+
334
+ //--------------------`(co.)RMS_compression_gain_mono_db`-------------------
335
+ // Mono RMS dynamic range compressor gain computer with dB output.
336
+ // `RMS_compression_gain_mono_db` is a standard Faust function.
337
+ //
338
+ // #### Usage
339
+ //
340
+ // ```
341
+ // _ : RMS_compression_gain_mono_db(strength,thresh,att,rel,knee,prePost) : _
342
+ // ```
343
+ //
344
+ // Where:
345
+ //
346
+ // * `strength`: strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression)
347
+ // * `thresh`: dB level threshold above which compression kicks in
348
+ // * `att`: attack time = time constant (sec) when level & compression going up
349
+ // * `rel`: release time = time constant (sec) coming out of compression
350
+ // * `knee`: a gradual increase in gain reduction around the threshold:
351
+ // below thresh-(knee/2) there is no gain reduction,
352
+ // above thresh+(knee/2) there is the same gain reduction as without a knee,
353
+ // and in between there is a gradual increase in gain reduction
354
+ // * `prePost`: places the level detector either at the input or after the gain computer;
355
+ // this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector
356
+ //
357
+ // It uses a strength parameter instead of the traditional ratio, in order to be able to
358
+ // function as a hard limiter.
359
+ // For that you'd need a ratio of infinity:1, and you cannot express that in Faust.
360
+ //
361
+ // Sometimes even bigger ratios are useful:
362
+ // for example a group recording where one instrument is recorded with both a close microphone and a room microphone,
363
+ // and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.
364
+ //
365
+ // #### References
366
+ //
367
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
368
+ // * Digital Dynamic Range Compressor Design,
369
+ // A Tutorial and Analysis,
370
+ // Dimitrios GIANNOULIS (<Dimitrios.Giannoulis@eecs.qmul.ac.uk>),
371
+ // Michael MASSBERG (<michael@massberg.org>),
372
+ // and Josuah D.REISS (<josh.reiss@eecs.qmul.ac.uk>)
373
+ //------------------------------------------------------------
374
+
375
+ declare RMS_compression_gain_mono_db author "Bart Brouns";
376
+ declare RMS_compression_gain_mono_db license "GPLv3";
377
+
378
+ RMS_compression_gain_mono_db(strength,thresh,att,rel,knee,prePost) =
379
+ RMS(rel) : ba.bypass1(prePost,si.onePoleSwitching(att,0)) : ba.linear2db : gain_computer(strength,thresh,knee) : ba.bypass1((prePost!=1),si.onePoleSwitching(0,att))
380
+ with {
381
+ gain_computer(strength,thresh,knee,level) =
382
+ select3((level>(thresh-(knee/2)))+(level>(thresh+(knee/2))),
383
+ 0,
384
+ ((level-thresh+(knee/2)) : pow(2)/(2*max(ma.EPSILON,knee))),
385
+ (level-thresh))
386
+ : max(0)*-strength;
387
+ RMS(time) = ba.slidingRMS(s) with {
388
+ s = ba.sec2samp(time):int:max(1);
389
+ };
390
+ };
391
+
392
+ //--------------------`(co.)RMS_compression_gain_N_chan_db`-------------------
393
+ // RMS N channels dynamic range compressor gain computer with dB output.
394
+ // `RMS_compression_gain_N_chan_db` is a standard Faust function.
395
+ //
396
+ // #### Usage
397
+ //
398
+ // ```
399
+ // si.bus(N) : RMS_compression_gain_N_chan_db(strength,thresh,att,rel,knee,prePost,link,N) : si.bus(N)
400
+ // ```
401
+ //
402
+ // Where:
403
+ //
404
+ // * `strength`: strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression)
405
+ // * `thresh`: dB level threshold above which compression kicks in
406
+ // * `att`: attack time = time constant (sec) when level & compression going up
407
+ // * `rel`: release time = time constant (sec) coming out of compression
408
+ // * `knee`: a gradual increase in gain reduction around the threshold:
409
+ // below thresh-(knee/2) there is no gain reduction,
410
+ // above thresh+(knee/2) there is the same gain reduction as without a knee,
411
+ // and in between there is a gradual increase in gain reduction
412
+ // * `prePost`: places the level detector either at the input or after the gain computer;
413
+ // this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector
414
+ // * `link`: the amount of linkage between the channels: 0 = each channel is independent, 1 = all channels have the same amount of gain reduction
415
+ // * `N`: the number of channels of the compressor
416
+ //
417
+ // It uses a strength parameter instead of the traditional ratio, in order to be able to
418
+ // function as a hard limiter.
419
+ // For that you'd need a ratio of infinity:1, and you cannot express that in Faust.
420
+ //
421
+ // Sometimes even bigger ratios are useful:
422
+ // for example a group recording where one instrument is recorded with both a close microphone and a room microphone,
423
+ // and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.
424
+ //
425
+ // #### References
426
+ //
427
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
428
+ // * Digital Dynamic Range Compressor Design,
429
+ // A Tutorial and Analysis,
430
+ // Dimitrios GIANNOULIS (<Dimitrios.Giannoulis@eecs.qmul.ac.uk>),
431
+ // Michael MASSBERG (<michael@massberg.org>),
432
+ // and Josuah D.REISS (<josh.reiss@eecs.qmul.ac.uk>)
433
+ //------------------------------------------------------------
434
+
435
+ declare RMS_compression_gain_N_chan_db author "Bart Brouns";
436
+ declare RMS_compression_gain_N_chan_db license "GPLv3";
437
+
438
+ RMS_compression_gain_N_chan_db(strength,thresh,att,rel,knee,prePost,link,1) =
439
+ RMS_compression_gain_mono_db(strength,thresh,att,rel,knee,prePost);
440
+
441
+ RMS_compression_gain_N_chan_db(strength,thresh,att,rel,knee,prePost,link,N) =
442
+ par(i,N,RMS_compression_gain_mono_db(strength,thresh,att,rel,knee,prePost))
443
+ <: (si.bus(N),(ba.parallelMin(N) <: si.bus(N))) : ro.interleave(N,2) : par(i,N,(it.interpolate_linear(link)));
444
+
445
+
446
+ //--------------------`(co.)RMS_FBFFcompressor_N_chan`-------------------
447
+ // RMS feed forward / feed back N channels dynamic range compressor.
448
+ // The feedback part has a much higher strength, so they end up sounding similar.
449
+ // `RMS_FBFFcompressor_N_chan` is a standard Faust function.
450
+ //
451
+ // #### Usage
452
+ //
453
+ // ```
454
+ // si.bus(N) : RMS_FBFFcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,FBFF,meter,N) : si.bus(N)
455
+ // ```
456
+ //
457
+ // Where:
458
+ //
459
+ // * `strength`: strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression)
460
+ // * `thresh`: dB level threshold above which compression kicks in
461
+ // * `att`: attack time = time constant (sec) when level & compression going up
462
+ // * `rel`: release time = time constant (sec) coming out of compression
463
+ // * `knee`: a gradual increase in gain reduction around the threshold:
464
+ // below thresh-(knee/2) there is no gain reduction,
465
+ // above thresh+(knee/2) there is the same gain reduction as without a knee,
466
+ // and in between there is a gradual increase in gain reduction
467
+ // * `prePost`: places the level detector either at the input or after the gain computer;
468
+ // this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector
469
+ // * `link`: the amount of linkage between the channels: 0 = each channel is independent, 1 = all channels have the same amount of gain reduction
470
+ // * `FBFF`: fade between feed forward (0) and feed back (1) compression.
471
+ // * `meter`: a gain reduction meter. It can be implemented with:
472
+ // `meter = _<:(_,(max(maxGR):meter_group((hbargraph("[1][unit:dB][tooltip: gain reduction in dB]", maxGR, 0))))):attach;`
473
+ // * `N`: the number of channels of the compressor, known at compile time
474
+ //
475
+ // It uses a strength parameter instead of the traditional ratio, in order to be able to
476
+ // function as a hard limiter.
477
+ // For that you'd need a ratio of infinity:1, and you cannot express that in Faust.
478
+ //
479
+ // Sometimes even bigger ratios are useful:
480
+ // for example a group recording where one instrument is recorded with both a close microphone and a room microphone,
481
+ // and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.
482
+ //
483
+ // To save CPU we cheat a bit, in a similar way as in the original libs:
484
+ // instead of crosfading between two sets of gain calculators as above,
485
+ // we take the `abs` of the audio from both the FF and FB, and crossfade between those,
486
+ // and feed that into one set of gain calculators
487
+ // again the strength is much higher when in FB mode, but implemented differently.
488
+ //
489
+ // #### References
490
+ //
491
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
492
+ // * Digital Dynamic Range Compressor Design,
493
+ // A Tutorial and Analysis,
494
+ // Dimitrios GIANNOULIS (<Dimitrios.Giannoulis@eecs.qmul.ac.uk>),
495
+ // Michael MASSBERG (<michael@massberg.org>),
496
+ // and Josuah D.REISS (<josh.reiss@eecs.qmul.ac.uk>)
497
+ //------------------------------------------------------------
498
+
499
+ declare RMS_FBFFcompressor_N_chan author "Bart Brouns";
500
+ declare RMS_FBFFcompressor_N_chan license "GPLv3";
501
+
502
+ RMS_FBFFcompressor_N_chan(strength,thresh,att,rel,knee,prePost,link,FBFF,meter,N) =
503
+ si.bus(N) <: si.bus(N*2):
504
+ (
505
+ ((ro.interleave(N,2) : par(i,N*2,abs) :par(i,N,it.interpolate_linear(FBFF)) : RMS_compression_gain_N_chan_db(strength*(1+((FBFF*-1)+1)),thresh,att,rel,knee,prePost,link,N)),si.bus(N))
506
+ : (ro.interleave(N,2) : par(i,N,(meter: ba.db2linear)*_))
507
+ )
508
+ ~ si.bus(N);
509
+
510
+
511
+ //--------------------`(co.)RMS_FBcompressor_peak_limiter_N_chan`-------------------
512
+ // N channel RMS feed back compressor into peak limiter feeding back into the FB compressor.
513
+ // By combining them this way, they complement each other optimally:
514
+ // the RMS compressor doesn't have to deal with the peaks,
515
+ // and the peak limiter get's spared from the steady state signal.
516
+ // The feedback part has a much higher strength, so they end up sounding similar.
517
+ // `RMS_FBcompressor_peak_limiter_N_chan` is a standard Faust function.
518
+ //
519
+ // #### Usage
520
+ //
521
+ // ```
522
+ // si.bus(N) : RMS_FBcompressor_peak_limiter_N_chan(strength,thresh,threshLim,att,rel,knee,link,meter,meterLim,N) : si.bus(N)
523
+ // ```
524
+ //
525
+ // Where:
526
+ //
527
+ // * `strength`: strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression)
528
+ // * `thresh`: dB level threshold above which compression kicks in
529
+ // * `threshLim`: dB level threshold above which the brickwall limiter kicks in
530
+ // * `att`: attack time = time constant (sec) when level & compression going up
531
+ // this is also used as the release time of the limiter
532
+ // * `rel`: release time = time constant (sec) coming out of compression
533
+ // * `knee`: a gradual increase in gain reduction around the threshold:
534
+ // below thresh-(knee/2) there is no gain reduction,
535
+ // above thresh+(knee/2) there is the same gain reduction as without a knee,
536
+ // and in between there is a gradual increase in gain reduction
537
+ // the limiter uses a knee half this size
538
+ // * `link`: the amount of linkage between the channels: 0 = each channel is independent, 1 = all channels have the same amount of gain reduction
539
+ // * `meter`: compressor gain reduction meter. It can be implemented with:
540
+ // `meter = _<:(_,(max(maxGR):meter_group((hbargraph("[1][unit:dB][tooltip: gain reduction in dB]", maxGR, 0))))):attach;`
541
+ // * `meterLim`: brickwall limiter gain reduction meter. It can be implemented with:
542
+ // `meterLim = _<:(_,(max(maxGR):meter_group((hbargraph("[1][unit:dB][tooltip: gain reduction in dB]", maxGR, 0))))):attach;`
543
+ // * `N`: the number of channels of the compressor, known at compile time
544
+ //
545
+ // It uses a strength parameter instead of the traditional ratio, in order to be able to
546
+ // function as a hard limiter.
547
+ // For that you'd need a ratio of infinity:1, and you cannot express that in Faust.
548
+ //
549
+ // Sometimes even bigger ratios are useful:
550
+ // for example a group recording where one instrument is recorded with both a close microphone and a room microphone,
551
+ // and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.
552
+ //
553
+ // #### References
554
+ //
555
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
556
+ // * Digital Dynamic Range Compressor Design,
557
+ // A Tutorial and Analysis,
558
+ // Dimitrios GIANNOULIS (<Dimitrios.Giannoulis@eecs.qmul.ac.uk>),
559
+ // Michael MASSBERG (<michael@massberg.org>),
560
+ // and Josuah D.REISS (<josh.reiss@eecs.qmul.ac.uk>)
561
+ //------------------------------------------------------------
562
+
563
+ declare RMS_FBcompressor_peak_limiter_N_chan author "Bart Brouns";
564
+ declare RMS_FBcompressor_peak_limiter_N_chan license "GPLv3";
565
+
566
+ RMS_FBcompressor_peak_limiter_N_chan(strength,thresh,threshLim,att,rel,knee,link,meter,meterLim,N) =
567
+ (((RMS_compression_gain_N_chan_db(strength,thresh,att,rel,knee,0,link,N)),si.bus(N)) : ro.interleave(N,2) : par(i,N,(meter : ba.db2linear)*_) : FFcompressor_N_chan(1,threshLim,0,att:min(rel),knee*0.5,0,link,meterLim,N))
568
+ ~ si.bus(N);
569
+
570
+
571
+ //===========================Linear gain computer section=================================
572
+ // The gain computer functions in this section have been replaced by a version that outputs dBs,
573
+ // but we retain the linear output version for backward compatibility.
574
+ //========================================================================================
575
+ //
576
+ //--------------------`(co.)peak_compression_gain_mono`-------------------
577
+ // Mono dynamic range compressor gain computer with linear output.
578
+ // `peak_compression_gain_mono` is a standard Faust function.
579
+ //
580
+ // #### Usage
581
+ //
582
+ // ```
583
+ // _ : peak_compression_gain_mono(strength,thresh,att,rel,knee,prePost) : _
584
+ // ```
585
+ //
586
+ // Where:
587
+ //
588
+ // * `strength`: strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression)
589
+ // * `thresh`: dB level threshold above which compression kicks in
590
+ // * `att`: attack time = time constant (sec) when level & compression going up
591
+ // * `rel`: release time = time constant (sec) coming out of compression
592
+ // * `knee`: a gradual increase in gain reduction around the threshold:
593
+ // below thresh-(knee/2) there is no gain reduction,
594
+ // above thresh+(knee/2) there is the same gain reduction as without a knee,
595
+ // and in between there is a gradual increase in gain reduction
596
+ // * `prePost`: places the level detector either at the input or after the gain computer;
597
+ // this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector
598
+ //
599
+ // It uses a strength parameter instead of the traditional ratio, in order to be able to
600
+ // function as a hard limiter.
601
+ // For that you'd need a ratio of infinity:1, and you cannot express that in Faust.
602
+ //
603
+ // Sometimes even bigger ratios are useful:
604
+ // for example a group recording where one instrument is recorded with both a close microphone and a room microphone,
605
+ // and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.
606
+ //
607
+ // #### References
608
+ //
609
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
610
+ // * Digital Dynamic Range Compressor Design,
611
+ // A Tutorial and Analysis,
612
+ // Dimitrios GIANNOULIS (<Dimitrios.Giannoulis@eecs.qmul.ac.uk>),
613
+ // Michael MASSBERG (<michael@massberg.org>),
614
+ // and Josuah D.REISS (<josh.reiss@eecs.qmul.ac.uk>)
615
+ //------------------------------------------------------------
616
+
617
+ declare peak_compression_gain_mono author "Bart Brouns";
618
+ declare peak_compression_gain_mono license "GPLv3";
619
+
620
+ peak_compression_gain_mono(strength,thresh,att,rel,knee,prePost) =
621
+ peak_compression_gain_mono_db(strength,thresh,att,rel,knee,prePost):ba.db2linear;
622
+
623
+
624
+ //--------------------`(co.)peak_compression_gain_N_chan`-------------------
625
+ // N channels dynamic range compressor gain computer with linear output.
626
+ // `peak_compression_gain_N_chan` is a standard Faust function.
627
+ //
628
+ // #### Usage
629
+ //
630
+ // ```
631
+ // si.bus(N) : peak_compression_gain_N_chan(strength,thresh,att,rel,knee,prePost,link,N) : si.bus(N)
632
+ // ```
633
+ //
634
+ // Where:
635
+ //
636
+ // * `strength`: strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression)
637
+ // * `thresh`: dB level threshold above which compression kicks in
638
+ // * `att`: attack time = time constant (sec) when level & compression going up
639
+ // * `rel`: release time = time constant (sec) coming out of compression
640
+ // * `knee`: a gradual increase in gain reduction around the threshold:
641
+ // below thresh-(knee/2) there is no gain reduction,
642
+ // above thresh+(knee/2) there is the same gain reduction as without a knee,
643
+ // and in between there is a gradual increase in gain reduction
644
+ // * `prePost`: places the level detector either at the input or after the gain computer;
645
+ // this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector
646
+ // * `link`: the amount of linkage between the channels: 0 = each channel is independent, 1 = all channels have the same amount of gain reduction
647
+ // * `N`: the number of channels of the compressor, known at compile time
648
+ //
649
+ // It uses a strength parameter instead of the traditional ratio, in order to be able to
650
+ // function as a hard limiter.
651
+ // For that you'd need a ratio of infinity:1, and you cannot express that in Faust.
652
+ //
653
+ // Sometimes even bigger ratios are useful:
654
+ // for example a group recording where one instrument is recorded with both a close microphone and a room microphone,
655
+ // and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.
656
+ //
657
+ // #### References
658
+ //
659
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
660
+ // * Digital Dynamic Range Compressor Design,
661
+ // A Tutorial and Analysis,
662
+ // Dimitrios GIANNOULIS (<Dimitrios.Giannoulis@eecs.qmul.ac.uk>),
663
+ // Michael MASSBERG (<michael@massberg.org>),
664
+ // and Josuah D.REISS (<josh.reiss@eecs.qmul.ac.uk>)
665
+ //------------------------------------------------------------
666
+
667
+ declare peak_compression_gain_N_chan author "Bart Brouns";
668
+ declare peak_compression_gain_N_chan license "GPLv3";
669
+
670
+ // generalise compression gains for N channels.
671
+ // first we define a mono version:
672
+ peak_compression_gain_N_chan(strength,thresh,att,rel,knee,prePost,link,N) =
673
+ peak_compression_gain_N_chan_db(strength,thresh,att,rel,knee,prePost,link,N)
674
+ : par(i, N, ba.db2linear);
675
+
676
+ //--------------------`(co.)RMS_compression_gain_mono`-------------------
677
+ // Mono RMS dynamic range compressor gain computer with linear output.
678
+ // `RMS_compression_gain_mono` is a standard Faust function.
679
+ //
680
+ // #### Usage
681
+ //
682
+ // ```
683
+ // _ : RMS_compression_gain_mono(strength,thresh,att,rel,knee,prePost) : _
684
+ // ```
685
+ //
686
+ // Where:
687
+ //
688
+ // * `strength`: strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression)
689
+ // * `thresh`: dB level threshold above which compression kicks in
690
+ // * `att`: attack time = time constant (sec) when level & compression going up
691
+ // * `rel`: release time = time constant (sec) coming out of compression
692
+ // * `knee`: a gradual increase in gain reduction around the threshold:
693
+ // below thresh-(knee/2) there is no gain reduction,
694
+ // above thresh+(knee/2) there is the same gain reduction as without a knee,
695
+ // and in between there is a gradual increase in gain reduction
696
+ // * `prePost`: places the level detector either at the input or after the gain computer;
697
+ // this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector
698
+ //
699
+ // It uses a strength parameter instead of the traditional ratio, in order to be able to
700
+ // function as a hard limiter.
701
+ // For that you'd need a ratio of infinity:1, and you cannot express that in Faust.
702
+ //
703
+ // Sometimes even bigger ratios are useful:
704
+ // for example a group recording where one instrument is recorded with both a close microphone and a room microphone,
705
+ // and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.
706
+ //
707
+ // #### References
708
+ //
709
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
710
+ // * Digital Dynamic Range Compressor Design,
711
+ // A Tutorial and Analysis,
712
+ // Dimitrios GIANNOULIS (<Dimitrios.Giannoulis@eecs.qmul.ac.uk>),
713
+ // Michael MASSBERG (<michael@massberg.org>),
714
+ // and Josuah D.REISS (<josh.reiss@eecs.qmul.ac.uk>)
715
+ //------------------------------------------------------------
716
+
717
+ declare RMS_compression_gain_mono author "Bart Brouns";
718
+ declare RMS_compression_gain_mono license "GPLv3";
719
+
720
+ RMS_compression_gain_mono(strength,thresh,att,rel,knee,prePost) =
721
+ RMS_compression_gain_mono_db(strength,thresh,att,rel,knee,prePost):ba.db2linear;
722
+
723
+
724
+ //--------------------`(co.)RMS_compression_gain_N_chan`-------------------
725
+ // RMS N channels dynamic range compressor gain computer with linear output.
726
+ // `RMS_compression_gain_N_chan` is a standard Faust function.
727
+ //
728
+ // #### Usage
729
+ //
730
+ // ```
731
+ // si.bus(N) : RMS_compression_gain_N_chan(strength,thresh,att,rel,knee,prePost,link,N) : si.bus(N)
732
+ // ```
733
+ //
734
+ // Where:
735
+ //
736
+ // * `strength`: strength of the compression (0 = no compression, 1 means hard limiting, >1 means over-compression)
737
+ // * `thresh`: dB level threshold above which compression kicks in
738
+ // * `att`: attack time = time constant (sec) when level & compression going up
739
+ // * `rel`: release time = time constant (sec) coming out of compression
740
+ // * `knee`: a gradual increase in gain reduction around the threshold:
741
+ // below thresh-(knee/2) there is no gain reduction,
742
+ // above thresh+(knee/2) there is the same gain reduction as without a knee,
743
+ // and in between there is a gradual increase in gain reduction
744
+ // * `prePost`: places the level detector either at the input or after the gain computer;
745
+ // this turns it from a linear return-to-zero detector into a log domain return-to-threshold detector
746
+ // * `link`: the amount of linkage between the channels: 0 = each channel is independent, 1 = all channels have the same amount of gain reduction
747
+ // * `N`: the number of channels of the compressor, known at compile time
748
+ //
749
+ // It uses a strength parameter instead of the traditional ratio, in order to be able to
750
+ // function as a hard limiter.
751
+ // For that you'd need a ratio of infinity:1, and you cannot express that in Faust.
752
+ //
753
+ // Sometimes even bigger ratios are useful:
754
+ // for example a group recording where one instrument is recorded with both a close microphone and a room microphone,
755
+ // and the instrument is loud enough in the room mic when playing loud, but you want to boost it when it is playing soft.
756
+ //
757
+ // #### References
758
+ //
759
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
760
+ // * Digital Dynamic Range Compressor Design,
761
+ // A Tutorial and Analysis,
762
+ // Dimitrios GIANNOULIS (<Dimitrios.Giannoulis@eecs.qmul.ac.uk>),
763
+ // Michael MASSBERG (<michael@massberg.org>),
764
+ // and Josuah D.REISS (<josh.reiss@eecs.qmul.ac.uk>)
765
+ //------------------------------------------------------------
766
+
767
+ declare RMS_compression_gain_N_chan author "Bart Brouns";
768
+ declare RMS_compression_gain_N_chan license "GPLv3";
769
+
770
+ RMS_compression_gain_N_chan(strength,thresh,att,rel,knee,prePost,link,N) =
771
+ RMS_compression_gain_N_chan_db(strength,thresh,att,rel,knee,prePost,link,N)
772
+ : par(i, N, ba.db2linear);
773
+
774
+
775
+ //=============================Original versions section=============================
776
+ // The functions in this section are largely superseded by the limiters above, but we
777
+ // retain them for backward compatibility and for situations in which a more permissive,
778
+ // MIT-style license is required.
779
+ //========================================================================================
780
+
781
+ //--------------------`(co.)compressor_lad_mono`-------------------
782
+ // Mono dynamic range compressor with lookahead delay.
783
+ // `compressor_lad_mono` is a standard Faust function.
784
+ //
785
+ // #### Usage
786
+ //
787
+ // ```
788
+ // _ : compressor_lad_mono(lad,ratio,thresh,att,rel) : _
789
+ // ```
790
+ //
791
+ // Where:
792
+ //
793
+ // * `lad`: lookahead delay in seconds (nonnegative) - gets rounded to nearest sample.
794
+ // The effective attack time is a good setting
795
+ // * `ratio`: compression ratio (1 = no compression, >1 means compression)
796
+ // Ratios: 4 is moderate compression, 8 is strong compression,
797
+ // 12 is mild limiting, and 20 is pretty hard limiting at the threshold
798
+ // * `thresh`: dB level threshold above which compression kicks in (0 dB = max level)
799
+ // * `att`: attack time = time constant (sec) when level & compression are going up
800
+ // * `rel`: release time = time constant (sec) coming out of compression
801
+ //
802
+ // #### References
803
+ //
804
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
805
+ // * <https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html>
806
+ // * Albert Graef's "faust2pd"/examples/synth/compressor_.dsp
807
+ // * More features: <https://github.com/magnetophon/faustCompressors>
808
+ //------------------------------------------------------------
809
+ declare compressor_lad_mono author "Julius O. Smith III";
810
+ declare compressor_lad_mono copyright
811
+ "Copyright (C) 2014-2020 by Julius O. Smith III <jos@ccrma.stanford.edu>";
812
+ declare compressor_lad_mono license "MIT-style STK-4.3 license";
813
+ compressor_lad_mono(lad,ratio,thresh,att,rel,x)
814
+ = x@max(0,floor(0.5+ma.SR*lad)) * compression_gain_mono(ratio,thresh,att,rel,x);
815
+
816
+ //--------------------`(co.)compressor_mono`-------------------
817
+ // Mono dynamic range compressors.
818
+ // `compressor_mono` is a standard Faust function.
819
+ //
820
+ // #### Usage
821
+ //
822
+ // ```
823
+ // _ : compressor_mono(ratio,thresh,att,rel) : _
824
+ // ```
825
+ //
826
+ // Where:
827
+ //
828
+ // * `ratio`: compression ratio (1 = no compression, >1 means compression)
829
+ // Ratios: 4 is moderate compression, 8 is strong compression,
830
+ // 12 is mild limiting, and 20 is pretty hard limiting at the threshold
831
+ // * `thresh`: dB level threshold above which compression kicks in (0 dB = max level)
832
+ // * `att`: attack time = time constant (sec) when level & compression are going up
833
+ // * `rel`: release time = time constant (sec) coming out of compression
834
+ //
835
+ // #### References
836
+ //
837
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
838
+ // * <https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html>
839
+ // * Albert Graef's "faust2pd"/examples/synth/compressor_.dsp
840
+ // * More features: <https://github.com/magnetophon/faustCompressors>
841
+ //------------------------------------------------------------
842
+ declare compressor_mono author "Julius O. Smith III";
843
+ declare compressor_mono copyright
844
+ "Copyright (C) 2014-2020 by Julius O. Smith III <jos@ccrma.stanford.edu>";
845
+ declare compressor_mono license "MIT-style STK-4.3 license";
846
+ compressor_mono = compressor_lad_mono(0);
847
+
848
+ //--------------------`(co.)compressor_stereo`-------------------
849
+ // Stereo dynamic range compressors.
850
+ //
851
+ // #### Usage
852
+ //
853
+ // ```
854
+ // _,_ : compressor_stereo(ratio,thresh,att,rel) : _,_
855
+ // ```
856
+ //
857
+ // Where:
858
+ //
859
+ // * `ratio`: compression ratio (1 = no compression, >1 means compression)
860
+ // * `thresh`: dB level threshold above which compression kicks in (0 dB = max level)
861
+ // * `att`: attack time = time constant (sec) when level & compression going up
862
+ // * `rel`: release time = time constant (sec) coming out of compression
863
+ //
864
+ // #### References
865
+ //
866
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
867
+ // * <https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html>
868
+ // * Albert Graef's "faust2pd"/examples/synth/compressor_.dsp
869
+ // * More features: <https://github.com/magnetophon/faustCompressors>
870
+ //------------------------------------------------------------
871
+ declare compressor_stereo author "Julius O. Smith III";
872
+ declare compressor_stereo copyright
873
+ "Copyright (C) 2014-2020 by Julius O. Smith III <jos@ccrma.stanford.edu>";
874
+ declare compressor_stereo license "MIT-style STK-4.3 license";
875
+ compressor_stereo(ratio,thresh,att,rel,x,y) = cgm*x, cgm*y with {
876
+ cgm = compression_gain_mono(ratio,thresh,att,rel,abs(x)+abs(y));
877
+ };
878
+
879
+ //--------------------`(co.)compression_gain_mono`-------------------
880
+ // Compression-gain calculation for dynamic range compressors.
881
+ //
882
+ // #### Usage
883
+ //
884
+ // ```
885
+ // _ : compression_gain_mono(ratio,thresh,att,rel) : _
886
+ // ```
887
+ //
888
+ // Where:
889
+ //
890
+ // * `ratio`: compression ratio (1 = no compression, >1 means compression)
891
+ // * `thresh`: dB level threshold above which compression kicks in (0 dB = max level)
892
+ // * `att`: attack time = time constant (sec) when level & compression going up
893
+ // * `rel`: release time = time constant (sec) coming out of compression
894
+ //
895
+ // #### References
896
+ //
897
+ // * <http://en.wikipedia.org/wiki/Dynamic_range_compression>
898
+ // * <https://ccrma.stanford.edu/~jos/filters/Nonlinear_Filter_Example_Dynamic.html>
899
+ // * Albert Graef's "faust2pd"/examples/synth/compressor_.dsp
900
+ // * More features: <https://github.com/magnetophon/faustCompressors>
901
+ //------------------------------------------------------------
902
+ declare compression_gain_mono author "Julius O. Smith III";
903
+ declare compression_gain_mono copyright
904
+ "Copyright (C) 2014-2020 by Julius O. Smith III <jos@ccrma.stanford.edu>";
905
+ declare compression_gain_mono license "MIT-style STK-4.3 license";
906
+ compression_gain_mono(ratio,thresh,att,rel) =
907
+ an.amp_follower_ar(att,rel) : ba.linear2db : outminusindb(ratio,thresh) :
908
+ kneesmooth(att) : ba.db2linear
909
+ with {
910
+ // kneesmooth(att) installs a "knee" in the dynamic-range compression,
911
+ // where knee smoothness is set equal to half that of the compression-attack.
912
+ // A general 'knee' parameter could be used instead of tying it to att/2:
913
+ kneesmooth(att) = si.smooth(ba.tau2pole(att/2.0));
914
+ // compression gain in dB:
915
+ outminusindb(ratio,thresh,level) = max(level-thresh,0.0) * (1.0/max(ma.EPSILON,float(ratio))-1.0);
916
+ // Note: "float(ratio)" REQUIRED when ratio is an integer > 1!
917
+ };
918
+
919
+ //----------------`(co.)limiter_1176_R4_mono`----------------------
920
+ // A limiter guards against hard-clipping. It can be
921
+ // implemented as a compressor having a high threshold (near the
922
+ // clipping level), fast attack, and high ratio. Since
923
+ // the compression ratio is so high, some knee smoothing is
924
+ // desirable (for softer limiting). This example is intended
925
+ // to get you started using compressors as limiters, so all
926
+ // parameters are hardwired here to nominal values.
927
+ //
928
+ // `ratio`: 4 (moderate compression).
929
+ // See `compressor_mono` comments for a guide to other choices.
930
+ // Mike Shipley likes this (lowest) setting on the 1176.
931
+ // (Grammy award-winning mixer for Queen, Tom Petty, etc.).
932
+ //
933
+ // `thresh`: -6 dB, meaning 4:1 compression begins at amplitude 1/2.
934
+ //
935
+ // `att`: 800 MICROseconds (Note: scaled by ratio in the 1176)
936
+ // The 1176 range is said to be 20-800 microseconds.
937
+ // Faster attack gives "more bite" (e.g. on vocals),
938
+ // and makes hard-clipping less likely on fast overloads.
939
+ //
940
+ // `rel`: 0.5 s (Note: scaled by ratio in the 1176)
941
+ // The 1176 range is said to be 50-1100 ms.
942
+ //
943
+ // The 1176 also has a "bright, clear eq effect" (use filters.lib if desired).
944
+ // `limiter_1176_R4_mono` is a standard Faust function.
945
+ //
946
+ // #### Usage
947
+ //
948
+ // ```
949
+ // _ : limiter_1176_R4_mono : _
950
+ // ```
951
+ //
952
+ // #### Reference:
953
+ //
954
+ // <http://en.wikipedia.org/wiki/1176_Peak_Limiter>
955
+ //------------------------------------------------------------
956
+ declare limiter_1176_R4_mono author "Julius O. Smith III";
957
+ declare limiter_1176_R4_mono copyright
958
+ "Copyright (C) 2014-2020 by Julius O. Smith III <jos@ccrma.stanford.edu>";
959
+ declare limiter_1176_R4_mono license "MIT-style STK-4.3 license";
960
+ limiter_1176_R4_mono = compressor_mono(4,-6,0.0008,0.5);
961
+
962
+
963
+ //-------------------`(co.)limiter_1176_R4_stereo`---------------------
964
+ // A limiter guards against hard-clipping. It can be
965
+ // implemented as a compressor having a high threshold (near the
966
+ // clipping level), fast attack and release, and high ratio. Since
967
+ // the ratio is so high, some knee smoothing is
968
+ // desirable ("soft limiting"). This example is intended
969
+ // to get you started using `compressor_*` as a limiter, so all
970
+ // parameters are hardwired to nominal values here.
971
+ //
972
+ // `ratio`: 4 (moderate compression), 8 (severe compression),
973
+ // 12 (mild limiting), or 20 to 1 (hard limiting).
974
+ //
975
+ // `att`: 20-800 MICROseconds (Note: scaled by ratio in the 1176).
976
+ //
977
+ // `rel`: 50-1100 ms (Note: scaled by ratio in the 1176).
978
+ //
979
+ // Mike Shipley likes 4:1 (Grammy-winning mixer for Queen, Tom Petty, etc.)
980
+ // Faster attack gives "more bite" (e.g. on vocals).
981
+ // He hears a bright, clear eq effect as well (not implemented here).
982
+ //
983
+ // #### Usage
984
+ //
985
+ // ```
986
+ // _,_ : limiter_1176_R4_stereo : _,_
987
+ // ```
988
+ //
989
+ // #### Reference:
990
+ //
991
+ // <http://en.wikipedia.org/wiki/1176_Peak_Limiter>
992
+ //------------------------------------------------------------
993
+ declare limiter_1176_R4_stereo author "Julius O. Smith III";
994
+ declare limiter_1176_R4_stereo copyright
995
+ "Copyright (C) 2014-2020 by Julius O. Smith III <jos@ccrma.stanford.edu>";
996
+ declare limiter_1176_R4_stereo license "MIT-style STK-4.3 license";
997
+ limiter_1176_R4_stereo = compressor_stereo(4,-6,0.0008,0.5);
998
+
999
+
1000
+ //==================================Expanders=============================================
1001
+ //========================================================================================
1002
+
1003
+ //--------------------`(co.)peak_expansion_gain_N_chan_db`-------------------
1004
+ // N channels dynamic range expander gain computer.
1005
+ // `peak_expansion_gain_N_chan_db` is a standard Faust function.
1006
+ //
1007
+ // #### Usage
1008
+ //
1009
+ // ```
1010
+ // si.bus(N) : peak_expansion_gain_N_chan_db(strength,thresh,range,att,hold,rel,knee,prePost,link,maxHold,N) : si.bus(N)
1011
+ // ```
1012
+ //
1013
+ // Where:
1014
+ //
1015
+ // * `strength`: strength of the expansion (0 = no expansion, 100 means gating, <1 means upward compression)
1016
+ // * `thresh`: dB level threshold below which expansion kicks in
1017
+ // * `range`: maximum amount of expansion in dB
1018
+ // * `att`: attack time = time constant (sec) coming out of expansion
1019
+ // * `hold` : hold time (sec)
1020
+ // * `rel`: release time = time constant (sec) going into expansion
1021
+ // * `knee`: a gradual increase in gain reduction around the threshold:
1022
+ // above thresh+(knee/2) there is no gain reduction,
1023
+ // below thresh-(knee/2) there is the same gain reduction as without a knee,
1024
+ // and in between there is a gradual increase in gain reduction
1025
+ // * `prePost`: places the level detector either at the input or after the gain computer;
1026
+ // this turns it from a linear return-to-zero detector into a log domain return-to-range detector
1027
+ // * `link`: the amount of linkage between the channels: 0 = each channel is independent, 1 = all channels have the same amount of gain reduction
1028
+ // * `maxHold`: the maximum hold time in samples, known at compile time
1029
+ // * `N`: the number of channels of the gain computer, known at compile time
1030
+ //
1031
+ //------------------------------------------------------------
1032
+
1033
+ declare peak_expansion_gain_N_chan_db author "Bart Brouns";
1034
+ declare peak_expansion_gain_N_chan_db license "GPLv3";
1035
+
1036
+ // generalise expansion gains for N channels.
1037
+ // first we define a mono version:
1038
+ peak_expansion_gain_N_chan_db(strength,thresh,range,att,hold,rel,knee,prePost,link,maxHold,1) =
1039
+ peak_expansion_gain_mono_db(maxHold,strength,thresh,range,att,hold,rel,knee,prePost);
1040
+
1041
+ // The actual N-channels version:
1042
+ // Calculate the maximum gain reduction of N channels,
1043
+ // and then crossfade between that and each channel's own gain reduction,
1044
+ // to link/unlink channels
1045
+ peak_expansion_gain_N_chan_db(strength,thresh,range,att,hold,rel,knee,prePost,link,maxHold,N) =
1046
+ par(i, N, peak_expansion_gain_mono_db(maxHold,strength,thresh,range,att,hold,rel,knee,prePost))
1047
+
1048
+ <: (si.bus(N),(ba.parallelMax(N) <: si.bus(N))) : ro.interleave(N,2) : par(i,N,(it.interpolate_linear(link)));
1049
+
1050
+
1051
+ peak_expansion_gain_mono_db(maxHold,strength,thresh,range,attack,hold,release,knee,prePost) =
1052
+ level(hold,maxHold):ba.bypass1(prePost,si.lag_ud(attack,release)) :ba.linear2db : gain_computer(strength,thresh,range,knee) : ba.bypass1((prePost !=1),si.lag_ud(att,rel))
1053
+ with {
1054
+ gain_computer(strength,thresh,range,knee,level) =
1055
+ (select3((level>(thresh-(knee/2)))+(level>(thresh+(knee/2)))
1056
+ , (level-thresh)
1057
+ , ((level-thresh-(knee/2)):pow(2) /(min(ma.EPSILON,knee*-2)))
1058
+ , 0
1059
+ ) *abs(strength):max(range) * (-1+(2*(strength>0)))
1060
+ );
1061
+ att = select2((strength>0),release,attack);
1062
+ rel = select2((strength>0),attack,release);
1063
+ level(hold,maxHold,x) = x : abs : ba.slidingMax(hold*ma.SR,maxHold);
1064
+ };
1065
+
1066
+
1067
+ //--------------------`(co.)expander_N_chan`-------------------
1068
+ // Feed forward N channels dynamic range expander.
1069
+ // `expander_N_chan` is a standard Faust function.
1070
+ //
1071
+ // #### Usage
1072
+ //
1073
+ // ```
1074
+ // si.bus(N) : expander_N_chan(strength,thresh,range,att,hold,rel,knee,prePost,link,meter,maxHold,N) : si.bus(N)
1075
+ // ```
1076
+ //
1077
+ // Where:
1078
+ //
1079
+ // * `strength`: strength of the expansion (0 = no expansion, 100 means gating, <1 means upward compression)
1080
+ // * `thresh`: dB level threshold below which expansion kicks in
1081
+ // * `range`: maximum amount of expansion in dB
1082
+ // * `att`: attack time = time constant (sec) coming out of expansion
1083
+ // * `hold` : hold time
1084
+ // * `rel`: release time = time constant (sec) going into expansion
1085
+ // * `knee`: a gradual increase in gain reduction around the threshold:
1086
+ // above thresh+(knee/2) there is no gain reduction,
1087
+ // below thresh-(knee/2) there is the same gain reduction as without a knee,
1088
+ // and in between there is a gradual increase in gain reduction
1089
+ // * `prePost`: places the level detector either at the input or after the gain computer;
1090
+ // this turns it from a linear return-to-zero detector into a log domain return-to-range detector
1091
+ // * `link`: the amount of linkage between the channels: 0 = each channel is independent, 1 = all channels have the same amount of gain reduction
1092
+ // * `meter`: a gain reduction meter. It can be implemented like so:
1093
+ // `meter = _<:(_, (ba.linear2db:max(maxGR):meter_group((hbargraph("[1][unit:dB][tooltip: gain reduction in dB]", maxGR, 0))))):attach;`
1094
+ // * `maxHold`: the maximum hold time in samples, known at compile time
1095
+ // * `N`: the number of channels of the expander, known at compile time
1096
+ //
1097
+ //------------------------------------------------------------
1098
+
1099
+ declare expander_N_chan author "Bart Brouns";
1100
+ declare expander_N_chan license "GPLv3";
1101
+
1102
+ // Feed forward expander
1103
+ expander_N_chan(strength,thresh,range,att,hold,rel,knee,prePost,link,meter,maxHold,N) =
1104
+ expanderSC_N_chan(strength,thresh,range,att,hold,rel,knee,prePost,link,meter,maxHold,N,_,0,0);
1105
+
1106
+ //--------------------`(co.)expanderSC_N_chan`-------------------
1107
+ // Feed forward N channels dynamic range expander with sidechain.
1108
+ // `expanderSC_N_chan` is a standard Faust function.
1109
+ //
1110
+ // #### Usage
1111
+ //
1112
+ // ```
1113
+ // si.bus(N) : expanderSC_N_chan(strength,thresh,range,att,hold,rel,knee,prePost,link,meter,maxHold,N,SCfunction,SCswitch,SCsignal) : si.bus(N)
1114
+ // ```
1115
+ //
1116
+ // Where:
1117
+ //
1118
+ // * `strength`: strength of the expansion (0 = no expansion, 100 means gating, <1 means upward compression)
1119
+ // * `thresh`: dB level threshold below which expansion kicks in
1120
+ // * `range`: maximum amount of expansion in dB
1121
+ // * `att`: attack time = time constant (sec) coming out of expansion
1122
+ // * `hold` : hold time
1123
+ // * `rel`: release time = time constant (sec) going into expansion
1124
+ // * `knee`: a gradual increase in gain reduction around the threshold:
1125
+ // above thresh+(knee/2) there is no gain reduction,
1126
+ // below thresh-(knee/2) there is the same gain reduction as without a knee,
1127
+ // and in between there is a gradual increase in gain reduction
1128
+ // * `prePost`: places the level detector either at the input or after the gain computer;
1129
+ // this turns it from a linear return-to-zero detector into a log domain return-to-range detector
1130
+ // * `link`: the amount of linkage between the channels: 0 = each channel is independent, 1 = all channels have the same amount of gain reduction
1131
+ // * `meter`: a gain reduction meter. It can be implemented like so:
1132
+ // `meter = _<:(_, (ba.linear2db:max(maxGR):meter_group((hbargraph("[1][unit:dB][tooltip: gain reduction in dB]", maxGR, 0))))):attach;`
1133
+ // * `maxHold`: the maximum hold time in samples, known at compile time
1134
+ // * `N`: the number of channels of the expander, known at compile time
1135
+ // * `SCfunction` : a function that get's placed before the level-detector, needs to have a single input and output
1136
+ // * `SCswitch` : use either the regular audio input or the SCsignal as the input for the level detector
1137
+ // * `SCsignal` : an audio signal, to be used as the input for the level detector when SCswitch is 1
1138
+ //
1139
+ //------------------------------------------------------------
1140
+
1141
+ declare expanderSC_N_chan author "Bart Brouns";
1142
+ declare expanderSC_N_chan license "GPLv3";
1143
+
1144
+ // Feed forward expander with sidechain
1145
+ expanderSC_N_chan(strength,thresh,range,att,hold,rel,knee,prePost,link,meter,maxHold,N,SCfunction,SCswitch,SCsignal) =
1146
+ si.bus(N) <:
1147
+ ((par(i, N, select2(SCswitch,_,SCsignal):SCfunction)
1148
+ : peak_expansion_gain_N_chan_db(strength,thresh,range,att,hold,rel,knee,prePost,link,maxHold,N))
1149
+ ,si.bus(N))
1150
+ : ro.interleave(N,2)
1151
+ : par(i,N,(meter:ba.db2linear)*_);
1152
+
1153
+
1154
+ //=============================Lookahead Limiters========================================
1155
+ //========================================================================================
1156
+
1157
+ //-----------------------`(co.)limiter_lad_N`---------------------------------
1158
+ // N-channels lookahead limiter inspired by IOhannes Zmölnig's post, which is
1159
+ // in turn based on the thesis by Peter Falkner "Entwicklung eines digitalen
1160
+ // Stereo-Limiters mit Hilfe des Signalprozessors DSP56001".
1161
+ // This version of the limiter uses a peak-holder with smoothed
1162
+ // attack and release based on tau time constant filters.
1163
+ //
1164
+ // It is also possible to use a time constant that is `2PI*tau` by dividing
1165
+ // the attack and release times by `2PI`. This time constant allows for
1166
+ // the amplitude profile to reach `1 - e^(-2PI)` of the final
1167
+ // peak after the attack time. The input path can be delayed by the same
1168
+ // amount as the attack time to synchronise input and amplitude profile,
1169
+ // realising a system that is particularly effective as a colourless
1170
+ // (ideally) brickwall limiter.
1171
+ //
1172
+ // Note that the effectiveness of the ceiling settings are dependent on
1173
+ // the other parameters, especially the time constant used for the
1174
+ // smoothing filters and the lookahead delay.
1175
+ //
1176
+ // Similarly, the colourless characteristics are also dependent on attack,
1177
+ // hold, and release times. Since fluctuations above ~15 Hz are
1178
+ // perceived as timbral effects, [Vassilakis and Kendall 2010] it is
1179
+ // reasonable to set the attack time to 1/15 seconds for a smooth amplitude
1180
+ // modulation. On the other hand, the hold time can be set to the
1181
+ // peak-to-peak period of the expected lowest frequency in the signal,
1182
+ // which allows for minimal distortion of the low frequencies. The
1183
+ // release time can then provide a perceptually linear and gradual gain
1184
+ // increase determined by the user for any specific application.
1185
+ //
1186
+ // The scaling factor for all the channels is determined by the loudest peak
1187
+ // between them all, so that amplitude ratios between the signals are kept.
1188
+ //
1189
+ // #### Usage
1190
+ //
1191
+ // ```
1192
+ // si.bus(N) : limiter_lad_N(N, LD, ceiling, attack, hold, release) : si.bus(N)
1193
+ // ```
1194
+ //
1195
+ // Where:
1196
+ //
1197
+ // * `N`: is the number of channels, known at compile-time
1198
+ // * `LD`: is the lookahead delay in seconds, known at compile-time
1199
+ // * `ceiling`: is the linear amplitude output limit
1200
+ // * `attack`: is the attack time in seconds
1201
+ // * `hold`: is the hold time in seconds
1202
+ // * `release`: is the release time in seconds
1203
+ //
1204
+ // Example for a stereo limiter: `limiter_lad_N(2, .01, 1, .01, .1, 1);`
1205
+ //
1206
+ // #### Reference:
1207
+ //
1208
+ // <http://iem.at/~zmoelnig/publications/limiter>
1209
+ //------------------------------------------------------------------------------
1210
+ declare limiter_lad_N author "Dario Sanfilippo";
1211
+ declare limiter_lad_N copyright "Copyright (C) 2020 Dario Sanfilippo
1212
+ <sanfilippo.dario@gmail.com>";
1213
+ declare limiter_lad_N license "GPLv3 license";
1214
+ limiter_lad_N(N, LD, ceiling, attack, hold, release) =
1215
+ si.bus(N) <: par(i, N, @(LD * ma.SR)),
1216
+ (scaling <: si.bus(N)) : ro.interleave(N, 2) : par(i, N, *)
1217
+ with {
1218
+ scaling = ceiling / max(amp_profile, ma.EPSILON) : min(1);
1219
+ amp_profile = par(i, N, abs) : maxN(N) : ba.peakholder(hold * ma.SR) :
1220
+ att_smooth(attack) : rel_smooth(release);
1221
+ att_smooth(time, in) = si.smooth(ba.tau2pole(time), in);
1222
+ rel_smooth(time, in) = an.peak_envelope(time, in);
1223
+ maxN(1) = _;
1224
+ maxN(2) = max;
1225
+ maxN(N) = max(maxN(N - 1));
1226
+ };
1227
+
1228
+ //-------------`(co.)limiter_lad_mono`----------------------------------------
1229
+ //
1230
+ // Specialised case of `limiter_lad_N` mono limiter.
1231
+ //
1232
+ // #### Usage
1233
+ //
1234
+ // ```
1235
+ // _ : limiter_lad_mono(LD, ceiling, attack, hold, release) : _
1236
+ // ```
1237
+ //
1238
+ // Where:
1239
+ //
1240
+ // * `LD`: is the lookahead delay in seconds, known at compile-time
1241
+ // * `ceiling`: is the linear amplitude output limit
1242
+ // * `attack`: is the attack time in seconds
1243
+ // * `hold`: is the hold time in seconds
1244
+ // * `release`: is the release time in seconds
1245
+ //
1246
+ // #### Reference:
1247
+ //
1248
+ // <http://iem.at/~zmoelnig/publications/limiter>
1249
+ //------------------------------------------------------------------------------
1250
+ declare limiter_lad_mono author "Dario Sanfilippo";
1251
+ declare limiter_lad_mono copyright "Copyright (C) 2020 Dario Sanfilippo
1252
+ <sanfilippo.dario@gmail.com>";
1253
+ declare limiter_lad_mono license "GPLv3 license";
1254
+ limiter_lad_mono(LD) = limiter_lad_N(1, LD);
1255
+
1256
+ //-------------`(co.)limiter_lad_stereo`--------------------------------------
1257
+ //
1258
+ // Specialised case of `limiter_lad_N` stereo limiter.
1259
+ //
1260
+ // #### Usage
1261
+ //
1262
+ // ```
1263
+ // _,_ : limiter_lad_stereo(LD, ceiling, attack, hold, release) : _,_
1264
+ // ```
1265
+ //
1266
+ // Where:
1267
+ //
1268
+ // * `LD`: is the lookahead delay in seconds, known at compile-time
1269
+ // * `ceiling`: is the linear amplitude output limit
1270
+ // * `attack`: is the attack time in seconds
1271
+ // * `hold`: is the hold time in seconds
1272
+ // * `release`: is the release time in seconds
1273
+ //
1274
+ // #### Reference:
1275
+ //
1276
+ // <http://iem.at/~zmoelnig/publications/limiter>
1277
+ //------------------------------------------------------------------------------
1278
+ declare limiter_lad_stereo author "Dario Sanfilippo";
1279
+ declare limiter_lad_stereo copyright "Copyright (C) 2020 Dario Sanfilippo
1280
+ <sanfilippo.dario@gmail.com>";
1281
+ declare limiter_lad_stereo license "GPLv3 license";
1282
+ limiter_lad_stereo(LD) = limiter_lad_N(2, LD);
1283
+
1284
+ //-------------`(co.)limiter_lad_quad`----------------------------------------
1285
+ //
1286
+ // Specialised case of `limiter_lad_N` quadraphonic limiter.
1287
+ //
1288
+ // #### Usage
1289
+ //
1290
+ // ```
1291
+ // si.bus(4) : limiter_lad_quad(LD, ceiling, attack, hold, release) : si.bus(4)
1292
+ // ```
1293
+ //
1294
+ // Where:
1295
+ //
1296
+ // * `LD`: is the lookahead delay in seconds, known at compile-time
1297
+ // * `ceiling`: is the linear amplitude output limit
1298
+ // * `attack`: is the attack time in seconds
1299
+ // * `hold`: is the hold time in seconds
1300
+ // * `release`: is the release time in seconds
1301
+ //
1302
+ // #### Reference:
1303
+ //
1304
+ // <http://iem.at/~zmoelnig/publications/limiter>
1305
+ //------------------------------------------------------------------------------
1306
+ declare limiter_lad_quad author "Dario Sanfilippo";
1307
+ declare limiter_lad_quad copyright "Copyright (C) 2020 Dario Sanfilippo
1308
+ <sanfilippo.dario@gmail.com>";
1309
+ declare limiter_lad_quad license "GPLv3 license";
1310
+ limiter_lad_quad(LD) = limiter_lad_N(4, LD);
1311
+
1312
+ //-------------`(co.)limiter_lad_bw`-----------------------------------------
1313
+ //
1314
+ // Specialised case of `limiter_lad_N` and ready-to-use unit-amplitude mono
1315
+ // limiting function. This implementation, in particular, uses `2PI*tau`
1316
+ // time constant filters for attack and release smoothing with
1317
+ // synchronised input and gain signals.
1318
+ //
1319
+ // This function's best application is to be used as a brickwall limiter with
1320
+ // the least colouring artefacts while keeping a not-so-slow release curve.
1321
+ // Tests have shown that, given a pop song with 60 dB of amplification
1322
+ // and a 0-dB-ceiling, the loudest peak recorded was ~0.38 dB.
1323
+ //
1324
+ // #### Usage
1325
+ //
1326
+ // ```
1327
+ // _ : limiter_lad_bw : _
1328
+ // ```
1329
+ //
1330
+ // #### Reference:
1331
+ //
1332
+ // <http://iem.at/~zmoelnig/publications/limiter>
1333
+ //------------------------------------------------------------------------------
1334
+ declare limiter_lad_bw author "Dario Sanfilippo";
1335
+ declare limiter_lad_bw copyright "Copyright (C) 2020 Dario Sanfilippo
1336
+ <sanfilippo.dario@gmail.com>";
1337
+ declare limiter_lad_bw license "GPLv3 license";
1338
+ limiter_lad_bw = limiter_lad_mono(.01, 1, 0.01/twopi, .1, 1/twopi)
1339
+ with {
1340
+ twopi = 2 * ma.PI;
1341
+ };